diff --git a/.github/alternate_byond_versions.txt b/.github/alternate_byond_versions.txt index 7b50af46885..111e573827e 100644 --- a/.github/alternate_byond_versions.txt +++ b/.github/alternate_byond_versions.txt @@ -5,3 +5,4 @@ # Format is version: map # Example: # 500.1337: runtimestation +515.1621: runtimestation diff --git a/.gitignore b/.gitignore index 97393735c82..8cf535152ac 100644 --- a/.gitignore +++ b/.gitignore @@ -6,6 +6,7 @@ #Ignore everything in datafolder and subdirectories /data/**/* /tmp/**/* +/cache/**/* #Ignore byond config folder. /cfg/**/* diff --git a/.tgs.yml b/.tgs.yml index 571f823c87d..880ca67a61b 100644 --- a/.tgs.yml +++ b/.tgs.yml @@ -3,7 +3,7 @@ version: 1 # The BYOND version to use (kept in sync with dependencies.sh by the "TGS Test Suite" CI job) # Must be interpreted as a string, keep quoted -byond: "515.1626" +byond: "515.1630" # Folders to create in "/Configuration/GameStaticFiles/" static_files: # Config directory should be static diff --git a/_maps/RandomRuins/IceRuins/fluffy/icemoon_interdyne_base_ff.dmm b/_maps/RandomRuins/IceRuins/fluffy/icemoon_interdyne_base_ff.dmm new file mode 100644 index 00000000000..e02640fa5d4 --- /dev/null +++ b/_maps/RandomRuins/IceRuins/fluffy/icemoon_interdyne_base_ff.dmm @@ -0,0 +1,11048 @@ +//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE +"aa" = ( +/turf/template_noop, +/area/template_noop) +"ab" = ( +/turf/open/lava/plasma/ice_moon, +/area/icemoon/underground/explored) +"ac" = ( +/turf/closed/mineral/random/snow/underground, +/area/icemoon/underground/explored) +"ad" = ( +/obj/structure/table/reinforced/plastitaniumglass, +/obj/effect/turf_decal/tile/dark/full, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/testlab) +"ag" = ( +/obj/structure/marker_beacon/burgundy, +/obj/effect/turf_decal/trimline/dark/filled/line{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/dark/filled/mid_joiner{ + dir = 4 + }, +/obj/effect/turf_decal/stripes/red/line{ + dir = 4 + }, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/cargo) +"ai" = ( +/turf/open/floor/plating/reinforced/icemoon, +/area/icemoon/underground/explored) +"ak" = ( +/obj/machinery/porta_turret/syndicate{ + dir = 5; + faction = list("Syndicate","neutral") + }, +/obj/structure/marker_beacon/burgundy, +/obj/machinery/camera/xray{ + pixel_x = 10; + name = "Inderdyne security camera"; + network = list("Interdyne"); + color = "#adadcd"; + pixel_y = 25 + }, +/turf/closed/wall/r_wall/syndicate/nodiagonal, +/area/ruin/syndicate_lava_base/main) +"al" = ( +/obj/machinery/hydroponics/constructable, +/obj/machinery/door/window/survival_pod/left/directional/west{ + req_access = list("syndicate"); + pixel_x = -4 + }, +/turf/open/floor/grass, +/area/ruin/syndicate_lava_base/bar) +"ao" = ( +/obj/structure/marker_beacon/teal, +/obj/structure/chair/sofa/corp/left{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/dark/filled/line{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/dark/filled/mid_joiner{ + dir = 8 + }, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/testlab) +"ap" = ( +/obj/structure/table/wood/fancy, +/turf/open/floor/wood/large, +/area/ruin/syndicate_lava_base/bar) +"ar" = ( +/obj/effect/turf_decal/trimline/dark/filled/line{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/dark/filled/mid_joiner{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/dark/filled/corner{ + dir = 1 + }, +/obj/effect/turf_decal/stripes/red/corner{ + dir = 1 + }, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/cargo) +"as" = ( +/obj/effect/turf_decal/trimline/dark/filled/corner{ + dir = 1 + }, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/medbay) +"au" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/turf/open/floor/wood/large, +/area/ruin/syndicate_lava_base/main) +"aA" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 10 + }, +/turf/open/floor/wood/large, +/area/ruin/syndicate_lava_base/main) +"aB" = ( +/obj/effect/turf_decal/box/blue/corners, +/obj/structure/cable, +/obj/effect/turf_decal/trimline/dark/filled/line{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/dark/filled/mid_joiner{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/dark/filled/line, +/obj/effect/turf_decal/trimline/dark/filled/mid_joiner, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/main) +"aE" = ( +/obj/structure/table/reinforced/plastitaniumglass, +/obj/structure/reagent_dispensers/wall/virusfood/directional/west, +/obj/item/storage/box/beakers{ + pixel_x = 2; + pixel_y = 2 + }, +/obj/item/storage/box/syringes, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/effect/turf_decal/tile/dark/full, +/obj/structure/marker_beacon/purple, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/medbay) +"aG" = ( +/obj/structure/fans/tiny, +/obj/effect/turf_decal/trimline/dark/filled/line, +/obj/effect/turf_decal/trimline/dark/filled/line{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/dark/filled/mid_joiner{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/dark/filled/mid_joiner, +/obj/effect/turf_decal/siding/dark{ + dir = 1 + }, +/obj/machinery/duct, +/obj/machinery/door/window/survival_pod/left/directional/west{ + req_access = list("syndicate"); + pixel_x = -4 + }, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/medbay) +"aP" = ( +/obj/machinery/smartfridge/extract/preloaded{ + color = "#adadcd"; + name = "Interdyne smart slime extract storage"; + light_color = "#adadcd" + }, +/obj/effect/turf_decal/tile/dark/full, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/testlab) +"aT" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/turf/open/floor/catwalk_floor/iron_dark, +/area/ruin/syndicate_lava_base/main) +"aV" = ( +/obj/structure/flora/bush/fullgrass/style_random, +/obj/structure/flora/tree/jungle/small/style_random, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/grass, +/area/ruin/syndicate_lava_base/main) +"aY" = ( +/obj/effect/turf_decal/tile/dark/full, +/turf/closed/wall/r_wall/syndicate/nodiagonal, +/area/ruin/syndicate_lava_base/bar) +"bd" = ( +/obj/effect/turf_decal/tile/dark/full, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 1 + }, +/obj/structure/table/wood/fancy/black, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/bar) +"bf" = ( +/obj/structure/table/wood/fancy, +/obj/structure/marker_beacon/bronze, +/obj/machinery/computer/libraryconsole/bookmanagement{ + dir = 8 + }, +/obj/machinery/libraryscanner{ + pixel_x = -30; + pixel_y = 12 + }, +/turf/open/floor/wood/large, +/area/ruin/syndicate_lava_base/bar) +"bh" = ( +/obj/effect/turf_decal/trimline/dark/filled/line{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/dark/filled/corner{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/dark/filled/mid_joiner{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/medbay) +"bk" = ( +/obj/structure/window/reinforced/survival_pod/spawner/directional/south, +/obj/machinery/monkey_recycler{ + name = "Interdyne monkey recycler"; + color = "#adadcd" + }, +/obj/effect/turf_decal/tile/dark/full, +/obj/structure/marker_beacon/burgundy, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/testlab) +"bq" = ( +/obj/structure/fans/tiny/forcefield, +/obj/structure/marker_beacon/teal, +/obj/effect/decal/cleanable/glitter/blue, +/obj/effect/turf_decal/arrows/blue, +/obj/effect/turf_decal/arrows/blue{ + dir = 1 + }, +/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/dark/textured_large, +/area/ruin/syndicate_lava_base/testlab) +"bu" = ( +/obj/item/reagent_containers/cup/glass/shaker{ + pixel_x = 6; + pixel_y = 2 + }, +/obj/item/reagent_containers/cup/rag{ + pixel_x = -4; + pixel_y = 3 + }, +/obj/effect/turf_decal/tile/dark/full, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 1 + }, +/obj/structure/table/wood/fancy/black, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/bar) +"bv" = ( +/obj/structure/frame/machine{ + anchored = 1; + state = 2; + icon_state = "box_1" + }, +/obj/item/circuitboard/machine/ore_redemption, +/obj/item/assembly/igniter, +/obj/structure/marker_beacon/burgundy, +/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/dark/textured_large, +/area/ruin/syndicate_lava_base/cargo) +"bz" = ( +/obj/structure/flora/bush/fullgrass/style_random, +/obj/structure/flora/tree/jungle/small/style_random, +/turf/open/floor/grass, +/area/ruin/syndicate_lava_base/main) +"bC" = ( +/obj/machinery/hydroponics/constructable, +/obj/machinery/light/directional/north, +/obj/machinery/door/window/survival_pod/left/directional/west{ + req_access = list("syndicate"); + pixel_x = -4 + }, +/obj/structure/marker_beacon/bronze, +/turf/open/floor/grass, +/area/ruin/syndicate_lava_base/bar) +"bF" = ( +/obj/structure/chair/sofa/bench/right{ + dir = 4 + }, +/obj/effect/turf_decal/siding/wood{ + dir = 8 + }, +/turf/open/floor/wood/large, +/area/ruin/syndicate_lava_base/main) +"bG" = ( +/obj/effect/turf_decal/trimline/dark/filled/line{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/dark/filled/line{ + dir = 8 + }, +/turf/open/floor/iron/dark/textured, +/area/ruin/syndicate_lava_base/bar) +"bM" = ( +/obj/effect/turf_decal/stripes/red/line, +/obj/effect/turf_decal/trimline/dark/filled/corner{ + dir = 8 + }, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/cargo) +"bN" = ( +/obj/effect/turf_decal/trimline/dark/filled/line{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/dark/filled/mid_joiner{ + dir = 4 + }, +/obj/effect/turf_decal/stripes/red/line{ + dir = 4 + }, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/cargo) +"bR" = ( +/obj/machinery/autolathe/hacked{ + color = "#adadcd"; + name = "Interdyne autolathe"; + light_color = "#adadcd" + }, +/obj/effect/turf_decal/tile/dark/full, +/obj/structure/marker_beacon/indigo, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/testlab) +"bV" = ( +/obj/structure/flora/bush/fullgrass/style_random, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/flora/tree/jungle/small/style_random, +/turf/open/floor/grass, +/area/ruin/syndicate_lava_base/main) +"bY" = ( +/obj/effect/turf_decal/trimline/dark/filled/line{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/dark/filled/line{ + dir = 4 + }, +/obj/machinery/door/airlock{ + name = "Cabin 2"; + id_tag = "Dynbin2" + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron/dark/textured, +/area/ruin/syndicate_lava_base/dormitories) +"ce" = ( +/obj/item/tank/internals/oxygen/yellow, +/obj/item/tank/internals/oxygen/yellow, +/obj/item/tank/internals/oxygen/yellow, +/obj/item/tank/internals/emergency_oxygen/double, +/obj/item/tank/internals/emergency_oxygen/double, +/obj/item/tank/internals/emergency_oxygen/double, +/obj/item/clothing/mask/gas, +/obj/item/clothing/mask/gas, +/obj/structure/closet/crate/internals{ + anchored = 1 + }, +/obj/item/clothing/mask/gas, +/obj/effect/turf_decal/tile/dark/full, +/obj/effect/turf_decal/stripes/blue/corner{ + dir = 8 + }, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/cargo) +"ci" = ( +/obj/effect/turf_decal/trimline/dark/filled/mid_joiner, +/obj/effect/turf_decal/box/white/corners, +/obj/effect/turf_decal/trimline/dark/filled/line, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/cargo) +"cj" = ( +/obj/effect/turf_decal/trimline/dark/filled/line, +/obj/effect/turf_decal/trimline/dark/filled/mid_joiner, +/obj/effect/turf_decal/stripes/blue, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/cargo) +"ck" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/cable, +/turf/open/floor/wood/large, +/area/ruin/syndicate_lava_base/main) +"cl" = ( +/obj/effect/turf_decal/stripes/red/line{ + dir = 1 + }, +/obj/effect/turf_decal/caution/stand_clear/red, +/obj/effect/turf_decal/trimline/dark/filled/corner, +/obj/effect/turf_decal/trimline/dark/filled/corner{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/dark/filled/corner{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/dark/filled/corner{ + dir = 1 + }, +/obj/structure/cable, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/main) +"cm" = ( +/obj/structure/frame/machine{ + anchored = 1; + state = 2; + icon_state = "box_1" + }, +/obj/item/circuitboard/machine/ore_silo, +/obj/structure/marker_beacon/burgundy, +/obj/structure/sign/flag/syndicate/directional/north, +/obj/effect/turf_decal/tile/dark/full, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/main) +"cn" = ( +/obj/effect/turf_decal/trimline/dark/filled/line{ + dir = 9 + }, +/obj/effect/turf_decal/trimline/dark/filled/corner, +/obj/effect/turf_decal/trimline/dark/filled/mid_joiner{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/dark/filled/mid_joiner{ + dir = 1 + }, +/obj/effect/turf_decal/stripes/red/corner, +/obj/effect/turf_decal/box/white/corners{ + dir = 1 + }, +/obj/effect/turf_decal/stripes/blue/corner{ + dir = 8 + }, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/cargo) +"cu" = ( +/obj/effect/turf_decal/siding/wood/corner, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/cable, +/turf/open/floor/wood/large, +/area/ruin/syndicate_lava_base/bar) +"cx" = ( +/obj/machinery/atmospherics/components/unary/thermomachine/freezer/on{ + name = "Interdyne Cryo freezer"; + dir = 6; + initialize_directions = 6; + color = "#adadcd" + }, +/obj/effect/turf_decal/tile/dark/full, +/obj/item/reagent_containers/cup/beaker/cryoxadone{ + pixel_x = -6; + pixel_y = 6 + }, +/obj/item/reagent_containers/cup/beaker/cryoxadone{ + pixel_x = 6; + pixel_y = 6 + }, +/obj/item/storage/pill_bottle/mannitol, +/obj/item/reagent_containers/dropper, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/medbay) +"cD" = ( +/obj/machinery/computer/scan_consolenew{ + dir = 8; + name = "Interdyne DNA Console"; + pixel_x = 4 + }, +/obj/structure/marker_beacon/olive, +/obj/effect/turf_decal/tile/dark/full, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/medbay) +"cN" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/cyan/visible, +/obj/effect/turf_decal/trimline/dark/filled/line{ + dir = 9 + }, +/obj/effect/turf_decal/trimline/dark/filled/mid_joiner{ + dir = 1 + }, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/medbay) +"cO" = ( +/obj/effect/turf_decal/trimline/dark/filled/line{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/dark/filled/mid_joiner{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/medbay) +"cP" = ( +/obj/effect/turf_decal/siding/dark{ + dir = 1 + }, +/obj/effect/turf_decal/tile/dark/full, +/obj/machinery/griddle{ + color = "#9d9ddd"; + name = "Interdyne griddle"; + light_color = "#9d9ddd" + }, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/bar) +"cQ" = ( +/obj/structure/rack, +/obj/item/storage/box/syndie_kit/chameleon/ghostcafe{ + desc = "It's a box, for storing things."; + name = "chameleon kit" + }, +/obj/item/clothing/mask/gas/syndicate, +/obj/item/clothing/mask/gas/syndicate, +/obj/item/clothing/mask/gas/syndicate, +/obj/item/clothing/mask/gas/syndicate, +/obj/structure/marker_beacon/burgundy, +/obj/structure/sign/poster/contraband/communist_state/directional/west, +/obj/item/gun/ballistic/rifle/sniper_rifle, +/obj/effect/turf_decal/tile/dark/full, +/obj/item/gun/ballistic/rifle/sniper_rifle, +/obj/item/modular_computer/laptop/preset/syndicate, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/main) +"cS" = ( +/obj/structure/drain, +/obj/structure/window/reinforced/survival_pod/spawner/directional/east, +/obj/structure/window/reinforced/survival_pod/spawner/directional/west, +/obj/structure/window/reinforced/survival_pod/spawner/directional/north, +/turf/open/floor/plating/reinforced, +/area/icemoon/underground/explored) +"cV" = ( +/obj/structure/flora/bush/fullgrass/style_random, +/obj/structure/flora/bush/jungle/a/style_random, +/obj/structure/marker_beacon/olive, +/turf/open/floor/grass, +/area/ruin/syndicate_lava_base/main) +"cW" = ( +/obj/effect/turf_decal/trimline/dark/filled/end{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/dark/filled/mid_joiner{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/dark/filled/mid_joiner{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/dark/filled/mid_joiner{ + dir = 4 + }, +/obj/structure/marker_beacon/bronze, +/obj/structure/chair/comfy/black{ + dir = 8 + }, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/medbay) +"cY" = ( +/obj/effect/turf_decal/tile/dark/full, +/obj/machinery/vending/syndichem{ + onstation = 0 + }, +/obj/structure/marker_beacon/bronze, +/obj/machinery/camera/xray/directional/north{ + color = "#adadcd"; + name = "Inderdyne security camera"; + network = list("Interdyne") + }, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/medbay) +"cZ" = ( +/obj/effect/turf_decal/tile/dark/full, +/obj/structure/table/wood/fancy/black, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/bar) +"db" = ( +/obj/structure/sign/poster/contraband/c20r/directional/south, +/obj/effect/turf_decal/trimline/dark/filled/line, +/obj/effect/turf_decal/trimline/dark/filled/mid_joiner, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/testlab) +"de" = ( +/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/ruin/syndicate_lava_base/testlab) +"df" = ( +/obj/structure/sign/poster/contraband/syndicate_medical/directional/south, +/obj/effect/turf_decal/trimline/dark/filled/line, +/obj/effect/turf_decal/trimline/dark/filled/corner{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/dark/filled/mid_joiner, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/medbay) +"dj" = ( +/obj/machinery/suit_storage_unit/mining, +/obj/effect/turf_decal/tile/dark/full, +/obj/effect/turf_decal/stripes/blue/corner, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/cargo) +"dk" = ( +/obj/machinery/porta_turret/syndicate{ + dir = 6; + faction = list("Syndicate","neutral") + }, +/obj/structure/marker_beacon/burgundy, +/obj/machinery/camera/xray{ + pixel_x = 10; + name = "Inderdyne security camera"; + network = list("Interdyne"); + color = "#adadcd"; + pixel_y = 25 + }, +/turf/closed/wall/r_wall/syndicate/nodiagonal, +/area/ruin/syndicate_lava_base/main) +"dm" = ( +/obj/effect/turf_decal/trimline/dark/filled/corner{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/dark/filled/line{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/dark/filled/mid_joiner{ + dir = 4 + }, +/obj/effect/turf_decal/siding/thinplating/dark{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/main) +"ds" = ( +/obj/effect/spawner/structure/window/reinforced/plasma/plastitanium, +/obj/machinery/door/poddoor{ + id = "interdynemed"; + name = "Interdyne Storm Shutters Med" + }, +/turf/open/floor/plating/reinforced, +/area/ruin/syndicate_lava_base/medbay) +"dw" = ( +/obj/machinery/modular_shield/module/charger{ + dir = 4 + }, +/obj/structure/marker_beacon/purple, +/obj/effect/turf_decal/box/blue/corners{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/dark/filled/line{ + dir = 5 + }, +/turf/open/floor/iron/dark, +/area/ruin/syndicate_lava_base/main) +"dy" = ( +/obj/structure/marker_beacon/teal, +/obj/structure/fans/tiny/forcefield, +/obj/effect/decal/cleanable/glitter/blue, +/obj/effect/turf_decal/arrows/blue, +/obj/effect/turf_decal/arrows/blue{ + dir = 1 + }, +/obj/structure/window/reinforced/survival_pod/spawner/directional/east{ + pixel_x = 4 + }, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/medbay) +"dz" = ( +/obj/effect/turf_decal/trimline/dark/filled/line{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/dark/filled/mid_joiner{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/general/hidden, +/obj/effect/turf_decal/vg_decals/atmos/oxygen, +/obj/structure/window/reinforced/survival_pod/spawner/directional/south{ + pixel_y = -4 + }, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/main) +"dJ" = ( +/obj/effect/turf_decal/stripes/red/corner{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/dark/filled/corner, +/obj/effect/turf_decal/trimline/dark/filled/corner{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/dark/filled/line{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/dark/filled/mid_joiner{ + dir = 1 + }, +/obj/effect/turf_decal/siding/thinplating/dark/corner{ + dir = 1 + }, +/obj/machinery/camera/xray/directional/north{ + color = "#adadcd"; + name = "Inderdyne security camera"; + network = list("Interdyne") + }, +/obj/machinery/power/apc/auto_name/directional/north, +/obj/effect/mapping_helpers/apc/syndicate_access, +/obj/structure/cable, +/obj/machinery/airalarm/directional/north{ + req_access = list("syndicate"); + pixel_y = 42 + }, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/main) +"dL" = ( +/turf/closed/wall/r_wall/syndicate/nodiagonal, +/area/ruin/syndicate_lava_base/arrivals) +"dM" = ( +/obj/structure/flora/grass/both/style_random, +/turf/open/misc/asteroid/snow/icemoon, +/area/icemoon/underground/explored) +"dN" = ( +/obj/effect/turf_decal/stripes/red/corner{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/dark/filled/corner{ + dir = 1 + }, +/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/dark/textured_large, +/area/ruin/syndicate_lava_base/cargo) +"dO" = ( +/obj/effect/turf_decal/tile/dark/full, +/obj/machinery/computer/rdconsole{ + dir = 4 + }, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/testlab) +"dP" = ( +/obj/effect/turf_decal/tile/dark/full, +/turf/open/floor/plating/elevatorshaft, +/area/ruin/syndicate_lava_base/cargo) +"dR" = ( +/obj/effect/turf_decal/siding/wood/corner{ + dir = 1 + }, +/obj/structure/flora/tree/jungle/small/style_random, +/obj/structure/flora/bush/sparsegrass/style_random, +/obj/structure/marker_beacon/teal, +/obj/structure/flora/bush/flowers_br/style_random, +/turf/open/floor/grass, +/area/ruin/syndicate_lava_base/main) +"dS" = ( +/obj/structure/flora/rock/icy/style_random, +/obj/structure/flora/tree/pine/style_random, +/turf/open/misc/asteroid/snow/icemoon, +/area/icemoon/underground/explored) +"dT" = ( +/obj/structure/marker_beacon/bronze, +/obj/structure/flora/tree/pine/xmas, +/turf/open/misc/asteroid/snow/icemoon, +/area/icemoon/underground/explored) +"ed" = ( +/obj/structure/flora/bush/fullgrass/style_random, +/obj/structure/flora/bush/jungle/a/style_random, +/turf/open/floor/grass, +/area/ruin/syndicate_lava_base/main) +"ef" = ( +/obj/effect/turf_decal/trimline/dark/filled/corner{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/dark/filled/line{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/dark/filled/mid_joiner{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/dark/filled/corner, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/bar) +"eg" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 8 + }, +/obj/structure/window/reinforced/survival_pod/spawner/directional/west{ + pixel_x = -4 + }, +/turf/open/floor/wood/large, +/area/ruin/syndicate_lava_base/main) +"ej" = ( +/obj/machinery/portable_atmospherics/canister/bz, +/obj/machinery/atmospherics/components/unary/portables_connector, +/obj/effect/turf_decal/trimline/dark/filled/line{ + dir = 5 + }, +/turf/open/floor/iron/dark, +/area/ruin/syndicate_lava_base/testlab) +"el" = ( +/obj/machinery/camera/xray{ + c_tag = "Xenobio East"; + dir = 4; + network = list("fsci") + }, +/obj/effect/turf_decal/tile/dark_red{ + dir = 8 + }, +/obj/machinery/atmospherics/components/unary/passive_vent{ + dir = 1 + }, +/obj/effect/turf_decal/stripes/red/line{ + dir = 1 + }, +/obj/effect/turf_decal/box/white/corners{ + dir = 4 + }, +/turf/open/floor/engine, +/area/ruin/syndicate_lava_base/testlab) +"eo" = ( +/obj/effect/turf_decal/siding/dark/corner{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/dark/filled/line{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/dark/filled/line{ + dir = 8 + }, +/turf/open/floor/iron/dark/textured, +/area/ruin/syndicate_lava_base/bar) +"er" = ( +/obj/effect/turf_decal/loading_area/red, +/obj/effect/turf_decal/trimline/dark/filled/corner{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/dark/filled/corner, +/obj/effect/turf_decal/stripes/blue/corner{ + dir = 8 + }, +/obj/effect/turf_decal/stripes/blue/corner, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/cargo) +"eu" = ( +/obj/effect/turf_decal/siding/dark{ + dir = 1 + }, +/obj/effect/turf_decal/siding/dark, +/obj/effect/turf_decal/trimline/dark/filled/line, +/obj/effect/turf_decal/trimline/dark/filled/line{ + dir = 1 + }, +/turf/open/floor/iron/dark/textured, +/area/ruin/syndicate_lava_base/bar) +"ex" = ( +/obj/effect/turf_decal/tile/dark/full, +/obj/structure/shipping_container/interdyne, +/turf/open/floor/plating/elevatorshaft, +/area/ruin/syndicate_lava_base/cargo) +"eA" = ( +/obj/machinery/modular_shield/module/charger{ + dir = 4 + }, +/obj/structure/marker_beacon/purple, +/obj/effect/turf_decal/trimline/dark/filled/mid_joiner{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/dark/filled/end{ + dir = 4 + }, +/obj/effect/turf_decal/box/blue/corners{ + dir = 4 + }, +/obj/effect/turf_decal/box/blue/corners, +/obj/effect/turf_decal/trimline/dark/filled/mid_joiner, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/main) +"eC" = ( +/obj/effect/turf_decal/trimline/dark/filled/corner{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/dark/filled/corner{ + dir = 4 + }, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/testlab) +"eE" = ( +/obj/structure/flora/tree/pine/style_random, +/turf/open/misc/asteroid/snow/icemoon, +/area/icemoon/underground/explored) +"eL" = ( +/obj/structure/window/reinforced/survival_pod/spawner/directional/east{ + pixel_x = 4 + }, +/obj/structure/window/reinforced/survival_pod/spawner/directional/west{ + pixel_x = -4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/general/hidden, +/obj/machinery/portable_atmospherics/scrubber, +/turf/open/floor/catwalk_floor/iron_dark, +/area/ruin/syndicate_lava_base/main) +"eN" = ( +/obj/effect/turf_decal/trimline/dark/filled/line{ + dir = 8 + }, +/turf/open/floor/iron/dark/textured, +/area/ruin/syndicate_lava_base/dormitories) +"eQ" = ( +/obj/effect/turf_decal/trimline/dark/filled/line{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/dark/filled/mid_joiner{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/dark/filled/line{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/dark/filled/mid_joiner{ + dir = 8 + }, +/obj/effect/turf_decal/stripes/red/line{ + dir = 8 + }, +/obj/structure/extinguisher_cabinet/directional/east, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 8 + }, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/cargo) +"eS" = ( +/obj/structure/window/reinforced/survival_pod/spawner/directional/west{ + pixel_x = -4 + }, +/obj/structure/window/reinforced/survival_pod/spawner/directional/south{ + pixel_y = -4 + }, +/turf/open/floor/engine, +/area/ruin/syndicate_lava_base/testlab) +"eX" = ( +/obj/effect/turf_decal/tile/dark/full, +/obj/structure/table/reinforced/plastitaniumglass, +/obj/item/toy/crayon/spraycan{ + pixel_x = 4; + pixel_y = 10 + }, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/bar) +"eZ" = ( +/obj/structure/marker_beacon/burgundy, +/obj/structure/chair{ + dir = 8 + }, +/turf/open/misc/asteroid/snow/icemoon, +/area/icemoon/underground/explored) +"fd" = ( +/obj/effect/turf_decal/stripes/red/line, +/obj/effect/turf_decal/tile/dark/full, +/obj/structure/rack/shelf, +/obj/structure/window/reinforced/survival_pod/spawner/directional/south{ + pixel_y = -4 + }, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/arrivals) +"fe" = ( +/obj/effect/turf_decal/siding/wood/corner{ + dir = 8 + }, +/obj/effect/turf_decal/siding/wood/corner{ + 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/wood/large, +/area/ruin/syndicate_lava_base/main) +"fg" = ( +/obj/effect/turf_decal/trimline/dark/filled/corner{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/dark/filled/corner, +/obj/effect/turf_decal/trimline/dark/filled/corner{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron/dark/textured, +/area/ruin/syndicate_lava_base/dormitories) +"fq" = ( +/obj/effect/turf_decal/siding/wood/corner{ + dir = 4 + }, +/turf/open/floor/wood/large, +/area/ruin/syndicate_lava_base/main) +"ft" = ( +/obj/effect/turf_decal/trimline/dark/filled/line, +/obj/effect/turf_decal/trimline/dark/filled/line{ + dir = 1 + }, +/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/dark/textured, +/area/ruin/syndicate_lava_base/dormitories) +"fx" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on{ + external_pressure_bound = 140; + name = "server vent"; + pressure_checks = 0; + dir = 8 + }, +/obj/structure/grille, +/turf/open/floor/circuit/telecomms, +/area/ruin/syndicate_lava_base/testlab) +"fB" = ( +/obj/effect/turf_decal/tile/dark/full, +/obj/machinery/component_printer{ + name = "Interdyne component printer"; + color = "#adadcd"; + light_color = "#adadcd" + }, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/testlab) +"fE" = ( +/obj/structure/fans/tiny/forcefield, +/obj/effect/decal/cleanable/glitter/blue, +/obj/structure/marker_beacon/teal, +/obj/effect/turf_decal/arrows/blue, +/obj/effect/turf_decal/arrows/blue{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/dark/filled/line{ + dir = 4 + }, +/obj/structure/window/reinforced/survival_pod/spawner/directional/east{ + pixel_x = 4 + }, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/cargo) +"fF" = ( +/obj/machinery/power/rtg/advanced, +/obj/structure/cable, +/obj/structure/window/reinforced/plasma/spawner/directional/south, +/obj/structure/window/reinforced/plasma/spawner/directional/north, +/obj/effect/decal/cleanable/glitter/pink, +/obj/effect/decal/cleanable/glitter/blue, +/obj/effect/decal/cleanable/greenglow, +/turf/open/floor/plating/reinforced, +/area/ruin/syndicate_lava_base/main) +"fG" = ( +/obj/structure/table/reinforced/plastitaniumglass, +/obj/effect/turf_decal/tile/dark/full, +/obj/item/clothing/glasses/science, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/medbay) +"fO" = ( +/obj/structure/flora/bush/fullgrass/style_random, +/obj/structure/flora/bush/jungle/c/style_random, +/turf/open/floor/grass, +/area/ruin/syndicate_lava_base/main) +"ge" = ( +/obj/structure/marker_beacon/bronze, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/cable, +/turf/open/floor/wood/large, +/area/ruin/syndicate_lava_base/bar) +"gh" = ( +/obj/structure/chair/sofa/bench/left{ + dir = 8 + }, +/obj/effect/turf_decal/siding/wood{ + dir = 4 + }, +/turf/open/floor/wood/large, +/area/ruin/syndicate_lava_base/main) +"gj" = ( +/obj/effect/turf_decal/tile/dark/full, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/testlab) +"gm" = ( +/obj/structure/closet/secure_closet/freezer/meat{ + req_access = list("syndicate"); + color = "#9d9ddd"; + name = "Interdyne meat fridge"; + light_color = "#9d9ddd" + }, +/obj/effect/turf_decal/trimline/dark/filled/line{ + dir = 10 + }, +/obj/effect/turf_decal/trimline/dark/filled/mid_joiner, +/obj/effect/turf_decal/trimline/dark/filled/mid_joiner{ + dir = 8 + }, +/obj/structure/marker_beacon/indigo, +/obj/structure/drain, +/obj/effect/turf_decal/box/white/corners{ + dir = 8 + }, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/bar) +"gn" = ( +/obj/effect/turf_decal/trimline/dark/filled/corner, +/obj/effect/turf_decal/trimline/dark/filled/line{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/dark/filled/mid_joiner{ + dir = 8 + }, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/testlab) +"gp" = ( +/obj/structure/closet/crate/bin, +/obj/machinery/camera/xray/directional/north{ + color = "#adadcd"; + name = "Inderdyne security camera"; + network = list("Interdyne") + }, +/obj/effect/turf_decal/siding/wood{ + dir = 5 + }, +/turf/open/floor/wood/large, +/area/ruin/syndicate_lava_base/bar) +"gs" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 5 + }, +/obj/structure/hedge, +/turf/open/floor/wood/large, +/area/ruin/syndicate_lava_base/main) +"gy" = ( +/obj/effect/turf_decal/trimline/dark/filled/corner, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/testlab) +"gz" = ( +/obj/effect/turf_decal/siding/wood, +/obj/structure/chair/comfy/brown{ + color = "#A46106"; + dir = 1 + }, +/turf/open/floor/carpet/red, +/area/ruin/syndicate_lava_base/bar) +"gA" = ( +/obj/machinery/cryo_cell, +/obj/structure/marker_beacon/teal, +/obj/effect/turf_decal/tile/dark/full, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/medbay) +"gB" = ( +/obj/machinery/sleeper/syndie/fullupgrade{ + dir = 4 + }, +/obj/structure/marker_beacon/burgundy, +/obj/effect/turf_decal/tile/dark/full, +/obj/effect/turf_decal/stripes/blue{ + dir = 1 + }, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/medbay) +"gF" = ( +/obj/effect/turf_decal/tile/dark/full, +/obj/structure/rack/shelf, +/obj/item/circuitboard/machine/smoke_machine, +/obj/item/circuitboard/machine/cell_charger, +/obj/item/circuitboard/machine/deep_fryer, +/obj/item/circuitboard/machine/gibber, +/obj/item/circuitboard/machine/processor, +/obj/machinery/light/directional/south{ + light_color = "#5148A6" + }, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/cargo) +"gG" = ( +/obj/effect/turf_decal/siding/dark/corner{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/dark/filled/line{ + dir = 10 + }, +/obj/effect/turf_decal/trimline/dark/filled/corner{ + dir = 4 + }, +/turf/open/floor/iron/dark/textured, +/area/ruin/syndicate_lava_base/bar) +"gL" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 9 + }, +/obj/structure/chair/pillow_small, +/obj/structure/marker_beacon/purple, +/obj/machinery/button/door/directional/west{ + base_icon_state = "tram"; + icon_state = "tram"; + req_access = list("syndicate"); + id = "interdynelibrary"; + name = "Interdyne Storm Shutters Library" + }, +/turf/open/floor/carpet/red, +/area/ruin/syndicate_lava_base/bar) +"gN" = ( +/obj/effect/turf_decal/trimline/dark/filled/corner{ + dir = 4 + }, +/obj/effect/turf_decal/stripes/blue/corner{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/dark/filled/corner, +/obj/effect/turf_decal/stripes/blue/corner, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/medbay) +"gT" = ( +/obj/effect/turf_decal/trimline/dark/filled/line{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/dark/filled/line{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/dark/filled/mid_joiner{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/dark/filled/mid_joiner{ + dir = 8 + }, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/main) +"gY" = ( +/obj/effect/turf_decal/stripes/red/line, +/obj/structure/cable, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/cargo) +"gZ" = ( +/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 = 4 + }, +/turf/open/floor/wood/large, +/area/ruin/syndicate_lava_base/main) +"ha" = ( +/obj/effect/turf_decal/box/red/corners{ + dir = 8 + }, +/obj/effect/turf_decal/tile/dark/full, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/testlab) +"hb" = ( +/obj/structure/table/reinforced/plastitaniumglass, +/obj/item/knife/kitchen, +/obj/item/storage/box/syringes{ + pixel_x = -4; + pixel_y = 4 + }, +/obj/item/storage/box/beakers/bluespace, +/obj/effect/turf_decal/tile/dark/full, +/obj/machinery/light/directional/south{ + light_color = "#5148A6" + }, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/medbay) +"hr" = ( +/obj/machinery/atmospherics/components/unary/thermomachine/freezer/on{ + name = "Interdyne slime freezer"; + dir = 4; + initialize_directions = 4; + color = "#adadcd"; + light_color = "#adadcd" + }, +/obj/effect/turf_decal/tile/dark/full, +/obj/machinery/camera/xray/directional/north{ + color = "#adadcd"; + name = "Inderdyne security camera"; + network = list("Interdyne") + }, +/turf/open/floor/iron/dark, +/area/ruin/syndicate_lava_base/testlab) +"ht" = ( +/obj/structure/closet/crate/secure/gear{ + req_access = list("syndicate"); + anchored = 1 + }, +/obj/effect/turf_decal/bot_red, +/obj/structure/marker_beacon/bronze, +/obj/effect/turf_decal/tile/dark/full, +/obj/item/storage/medkit/fire{ + pixel_x = 3; + pixel_y = 3 + }, +/obj/item/storage/medkit/brute, +/obj/item/storage/medkit/regular{ + pixel_x = -3; + pixel_y = -3 + }, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/cargo) +"hu" = ( +/obj/machinery/photocopier, +/turf/closed/wall/r_wall/syndicate/nodiagonal, +/area/ruin/syndicate_lava_base/bar) +"hz" = ( +/obj/structure/table/reinforced/plastitaniumglass, +/obj/effect/turf_decal/tile/dark/full, +/obj/item/reagent_containers/dropper{ + pixel_y = -4 + }, +/obj/item/storage/box/petridish{ + pixel_x = -5; + pixel_y = 8 + }, +/obj/item/biopsy_tool{ + pixel_x = 8; + pixel_y = 2 + }, +/obj/structure/window/reinforced/survival_pod/spawner/directional/north{ + pixel_y = 4 + }, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/medbay) +"hA" = ( +/obj/effect/turf_decal/trimline/dark/filled/line, +/obj/effect/turf_decal/trimline/dark/filled/corner{ + dir = 1 + }, +/obj/machinery/light/directional/south{ + bulb_colour = "#2C3BFF"; + color = "#2C3BFF"; + light_color = "#2C3BFF" + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron/dark/textured, +/area/ruin/syndicate_lava_base/dormitories) +"hL" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/cable, +/turf/open/floor/wood/large, +/area/ruin/syndicate_lava_base/bar) +"hT" = ( +/obj/effect/turf_decal/tile/dark_red{ + dir = 1 + }, +/obj/effect/turf_decal/box/white/corners, +/turf/open/floor/engine, +/area/ruin/syndicate_lava_base/testlab) +"hU" = ( +/obj/effect/turf_decal/box/red/corners{ + dir = 4 + }, +/obj/effect/turf_decal/tile/dark/full, +/obj/item/storage/box/stockparts/deluxe{ + pixel_x = -6; + pixel_y = 11 + }, +/obj/item/storage/box/stockparts/deluxe{ + pixel_x = 8; + pixel_y = 5 + }, +/obj/item/stack/cable_coil, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/testlab) +"ie" = ( +/obj/effect/turf_decal/trimline/dark/filled/corner{ + dir = 1 + }, +/obj/effect/turf_decal/box/blue/corners, +/obj/structure/cable, +/obj/effect/turf_decal/trimline/dark/filled/corner{ + dir = 8 + }, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/main) +"ih" = ( +/obj/effect/turf_decal/tile/dark/full, +/obj/item/reagent_containers/cup/glass/drinkingglass{ + pixel_y = 8 + }, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 1 + }, +/obj/structure/table/wood/fancy/black, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/bar) +"it" = ( +/obj/structure/bookcase/random/adult, +/turf/open/floor/wood/large, +/area/ruin/syndicate_lava_base/bar) +"iy" = ( +/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/ruin/syndicate_lava_base/main) +"iB" = ( +/obj/machinery/modular_shield/module/relay, +/obj/structure/marker_beacon/purple, +/obj/effect/turf_decal/box/blue/corners, +/obj/effect/turf_decal/box/blue/corners{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/dark/filled/end, +/turf/open/floor/iron/dark, +/area/ruin/syndicate_lava_base/main) +"iG" = ( +/obj/structure/table/reinforced/plastitaniumglass, +/obj/item/clothing/glasses/hud/health, +/obj/item/reagent_containers/dropper{ + pixel_y = -6 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/effect/turf_decal/tile/dark/full, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/medbay) +"iL" = ( +/obj/effect/turf_decal/siding/dark/corner{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/dark/filled/line{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/dark/filled/corner, +/turf/open/floor/iron/dark/textured, +/area/ruin/syndicate_lava_base/bar) +"iQ" = ( +/obj/effect/turf_decal/stripes/blue{ + dir = 1 + }, +/obj/effect/turf_decal/caution/stand_clear/blue, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/medbay) +"iS" = ( +/obj/machinery/chem_heater/withbuffer{ + name = "interdyne reaction chamber"; + color = "#adadcd"; + light_color = "#adadcd" + }, +/obj/effect/turf_decal/trimline/dark_red, +/obj/effect/turf_decal/tile/dark/full, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/medbay) +"iX" = ( +/obj/structure/marker_beacon/teal, +/obj/structure/fans/tiny/forcefield, +/obj/effect/decal/cleanable/glitter/blue, +/obj/effect/turf_decal/trimline/dark/filled/line{ + dir = 4 + }, +/obj/structure/window/reinforced/survival_pod/spawner/directional/east{ + pixel_x = 4 + }, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/bar) +"iZ" = ( +/obj/effect/turf_decal/siding/wood/corner{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/cable, +/turf/open/floor/wood/large, +/area/ruin/syndicate_lava_base/main) +"jb" = ( +/obj/structure/marker_beacon/olive, +/obj/structure/flora/bush/sparsegrass/style_random, +/obj/structure/flora/bush/jungle/a/style_random, +/turf/open/floor/grass, +/area/ruin/syndicate_lava_base/main) +"jf" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/general/hidden, +/turf/open/floor/catwalk_floor/iron_dark, +/area/ruin/syndicate_lava_base/main) +"jg" = ( +/obj/effect/turf_decal/siding/wood/corner{ + dir = 1 + }, +/turf/open/floor/wood/large, +/area/ruin/syndicate_lava_base/main) +"jm" = ( +/obj/effect/spawner/structure/window/reinforced/plasma/plastitanium, +/obj/machinery/door/poddoor{ + id = "interdynelabs"; + name = "Interdyne Storm Shutters Labs" + }, +/turf/open/floor/plating/reinforced, +/area/ruin/syndicate_lava_base/medbay) +"jn" = ( +/obj/structure/railing{ + dir = 8 + }, +/obj/structure/lattice/catwalk/mining, +/turf/open/lava/plasma/ice_moon, +/area/icemoon/underground/explored) +"jo" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/general/hidden, +/obj/structure/window/reinforced/survival_pod/spawner/directional/south, +/obj/effect/turf_decal/trimline/dark/filled/line, +/obj/effect/turf_decal/trimline/dark/filled/corner{ + dir = 4 + }, +/obj/effect/turf_decal/caution/stand_clear/red, +/turf/open/floor/iron/dark, +/area/ruin/syndicate_lava_base/testlab) +"jt" = ( +/obj/effect/turf_decal/tile/dark/full, +/obj/machinery/chem_dispenser/mutagensaltpeter{ + color = "#adadcd"; + name = "Interdyne botanical chemical dispenser"; + pixel_x = -4; + light_color = "#adadcd" + }, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/bar) +"ju" = ( +/obj/machinery/modular_shield/module/well{ + dir = 4 + }, +/obj/structure/marker_beacon/indigo, +/obj/effect/turf_decal/box/blue/corners, +/obj/effect/turf_decal/trimline/dark/filled/line{ + dir = 6 + }, +/obj/effect/turf_decal/trimline/dark/filled/mid_joiner, +/turf/open/floor/iron/dark, +/area/ruin/syndicate_lava_base/main) +"jw" = ( +/obj/effect/turf_decal/stripes/red/corner, +/obj/machinery/button/door/directional/south{ + base_icon_state = "tram"; + name = "Interdyne Gate"; + icon_state = "tram"; + id = "interdynegate"; + light_color = "#22CCFF"; + req_access = list("syndicate"); + pixel_x = 7; + pixel_y = -20 + }, +/obj/effect/turf_decal/trimline/dark/filled/line{ + dir = 10 + }, +/obj/effect/turf_decal/trimline/dark/filled/mid_joiner, +/obj/effect/turf_decal/trimline/dark/filled/mid_joiner{ + dir = 8 + }, +/obj/effect/turf_decal/box/white/corners{ + dir = 8 + }, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/cargo) +"jy" = ( +/obj/structure/table/wood/fancy, +/obj/item/paper_bin{ + pixel_y = 4 + }, +/obj/item/pen{ + pixel_y = 4 + }, +/obj/structure/marker_beacon/bronze, +/turf/open/floor/wood/large, +/area/ruin/syndicate_lava_base/bar) +"jA" = ( +/obj/effect/turf_decal/trimline/dark/filled/corner, +/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/dark/textured_large, +/area/ruin/syndicate_lava_base/cargo) +"jH" = ( +/obj/effect/turf_decal/trimline/dark/filled/corner{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/dark/filled/corner, +/obj/effect/turf_decal/trimline/dark/filled/corner{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/dark/filled/corner{ + dir = 1 + }, +/obj/effect/turf_decal/arrows/blue{ + dir = 1 + }, +/obj/effect/turf_decal/arrows/blue, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/arrivals) +"jI" = ( +/obj/effect/turf_decal/trimline/dark/filled/corner{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/dark/filled/line{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/dark/filled/mid_joiner{ + dir = 8 + }, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/testlab) +"jJ" = ( +/obj/machinery/power/shuttle_engine/propulsion{ + dir = 4; + pixel_x = 8 + }, +/obj/effect/spawner/structure/window/reinforced/plasma/plastitanium, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/arrivals) +"jR" = ( +/obj/machinery/dna_infuser, +/obj/effect/turf_decal/trimline/dark/filled/end{ + dir = 4 + }, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/medbay) +"jT" = ( +/obj/effect/turf_decal/trimline/dark/filled/end{ + dir = 4 + }, +/obj/structure/marker_beacon/burgundy, +/turf/open/floor/iron/dark, +/area/ruin/syndicate_lava_base/main) +"jZ" = ( +/obj/effect/turf_decal/siding/dark{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/dark/filled/end{ + dir = 1 + }, +/obj/structure/sink/directional/south, +/obj/structure/drain, +/turf/open/floor/iron/dark/textured, +/area/ruin/syndicate_lava_base/bar) +"kb" = ( +/obj/effect/turf_decal/box/red/corners, +/obj/effect/turf_decal/tile/dark/full, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/testlab) +"kc" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/window/reinforced/survival_pod/spawner/directional/south{ + pixel_y = -4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/general/hidden, +/obj/structure/reagent_dispensers/watertank/high, +/turf/open/floor/catwalk_floor/iron_dark, +/area/ruin/syndicate_lava_base/main) +"kf" = ( +/turf/closed/wall/r_wall/syndicate/nodiagonal, +/area/ruin/syndicate_lava_base/testlab) +"kh" = ( +/obj/effect/turf_decal/trimline/dark/filled/line{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/dark/filled/mid_joiner{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/medbay) +"kk" = ( +/obj/structure/window/reinforced/survival_pod/spawner/directional/west, +/obj/structure/grille, +/obj/machinery/atmospherics/pipe/smart/manifold4w/general/hidden, +/turf/open/floor/circuit/telecomms, +/area/ruin/syndicate_lava_base/testlab) +"kl" = ( +/obj/machinery/chem_mass_spec, +/obj/effect/turf_decal/tile/dark/full, +/obj/structure/table/reinforced/plastitaniumglass, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/medbay) +"km" = ( +/obj/structure/table/reinforced/plastitaniumglass, +/obj/effect/turf_decal/siding/dark{ + dir = 1 + }, +/obj/effect/turf_decal/tile/dark/full, +/obj/item/reagent_containers/condiment/enzyme{ + pixel_y = 14; + pixel_x = -7 + }, +/obj/item/reagent_containers/condiment/saltshaker{ + pixel_x = -8; + pixel_y = 6 + }, +/obj/item/reagent_containers/condiment/peppermill{ + pixel_x = -3; + pixel_y = 6 + }, +/obj/machinery/reagentgrinder{ + pixel_x = 8; + pixel_y = 18 + }, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/bar) +"kp" = ( +/obj/effect/turf_decal/trimline/dark/filled/corner{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/medbay) +"kr" = ( +/obj/structure/marker_beacon/burgundy, +/obj/structure/railing, +/obj/structure/railing{ + dir = 5 + }, +/turf/open/floor/engine/hull/reinforced/icemoon, +/area/icemoon/underground/explored) +"ks" = ( +/obj/structure/marker_beacon/bronze, +/obj/effect/turf_decal/trimline/dark/filled/line{ + dir = 5 + }, +/turf/open/floor/iron/dark/textured, +/area/ruin/syndicate_lava_base/bar) +"kw" = ( +/obj/effect/spawner/structure/window/reinforced/plasma/plastitanium, +/obj/machinery/door/poddoor{ + id = "interdynexeno"; + name = "Interdyne Storm Shutters Xeno" + }, +/turf/open/floor/plating/reinforced, +/area/ruin/syndicate_lava_base/testlab) +"kE" = ( +/obj/effect/turf_decal/trimline/dark/filled/line{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/dark/filled/mid_joiner{ + dir = 1 + }, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/medbay) +"kL" = ( +/obj/effect/turf_decal/trimline/dark/filled/corner{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/testlab) +"kN" = ( +/obj/structure/marker_beacon/purple, +/obj/effect/turf_decal/trimline/dark/filled/line{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/dark/filled/line{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/dark/filled/mid_joiner{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/dark/filled/mid_joiner{ + dir = 4 + }, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/testlab) +"kU" = ( +/obj/machinery/camera/xray{ + c_tag = "Xenobio West"; + dir = 8; + network = list("fsci") + }, +/obj/effect/turf_decal/stripes/red/line{ + dir = 1 + }, +/obj/effect/turf_decal/box/white/corners{ + dir = 1 + }, +/turf/open/floor/engine, +/area/ruin/syndicate_lava_base/testlab) +"kV" = ( +/obj/structure/marker_beacon/teal, +/obj/structure/fans/tiny/forcefield, +/obj/effect/decal/cleanable/glitter/blue, +/obj/effect/turf_decal/trimline/dark/filled/line{ + dir = 8 + }, +/obj/structure/window/reinforced/survival_pod/spawner/directional/west{ + pixel_x = -4 + }, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/medbay) +"kZ" = ( +/obj/structure/table/wood/fancy/black, +/obj/machinery/chem_dispenser/drinks/fullupgrade, +/turf/open/floor/iron/dark/textured, +/area/ruin/syndicate_lava_base/bar) +"lc" = ( +/obj/structure/marker_beacon/burgundy, +/obj/effect/mapping_helpers/airlock/access/all/syndicate/general, +/obj/machinery/door/airlock/engineering/glass{ + name = "Shield and Engineering" + }, +/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/dark/textured_large, +/area/ruin/syndicate_lava_base/main) +"ln" = ( +/obj/effect/turf_decal/trimline/dark/filled/end, +/obj/effect/turf_decal/box/red/corners{ + dir = 4 + }, +/obj/effect/turf_decal/box/red/corners{ + dir = 1 + }, +/obj/effect/turf_decal/stripes/red/line, +/obj/structure/window/reinforced/survival_pod/spawner/directional/south{ + pixel_y = -4 + }, +/obj/effect/mob_spawn/ghost_role/human/interdyne_planetary_base/ice{ + dir = 1 + }, +/turf/open/floor/iron/dark/textured, +/area/ruin/syndicate_lava_base/arrivals) +"lu" = ( +/obj/effect/turf_decal/stripes/red/corner{ + dir = 4 + }, +/obj/machinery/button/door/directional/north{ + name = "Interdyne Gate"; + id = "interdynegateout"; + icon_state = "tram"; + base_icon_state = "tram"; + light_color = "#22CCFF"; + pixel_x = 7; + pixel_y = 32; + req_access = list("syndicate") + }, +/obj/effect/turf_decal/trimline/dark/filled/line{ + dir = 9 + }, +/obj/effect/turf_decal/trimline/dark/filled/mid_joiner{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/dark/filled/mid_joiner{ + dir = 8 + }, +/obj/effect/turf_decal/box/white/corners{ + dir = 1 + }, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/cargo) +"lD" = ( +/obj/effect/turf_decal/tile/dark/full, +/obj/structure/marker_beacon/indigo, +/obj/machinery/mecha_part_fabricator{ + name = "Interdyne exosuit fabricator"; + color = "#adadcd"; + light_color = "#adadcd" + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/testlab) +"lH" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/turf_decal/stripes/red/line{ + dir = 1 + }, +/obj/effect/turf_decal/siding/dark{ + dir = 1 + }, +/turf/open/floor/catwalk_floor/iron_dark, +/area/ruin/syndicate_lava_base/main) +"lP" = ( +/obj/structure/flora/bush/sparsegrass/style_random, +/obj/structure/flora/bush/flowers_yw/style_random, +/obj/structure/marker_beacon/bronze, +/obj/structure/flora/tree/jungle/small/style_random, +/turf/open/floor/grass, +/area/ruin/syndicate_lava_base/main) +"lT" = ( +/obj/effect/turf_decal/stripes/red/line, +/obj/effect/turf_decal/trimline/dark/filled/line, +/obj/effect/turf_decal/trimline/dark/filled/mid_joiner, +/obj/effect/turf_decal/caution/red, +/obj/machinery/duct, +/obj/machinery/light/directional/south{ + light_color = "#5148A6" + }, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/medbay) +"lZ" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 4 + }, +/obj/structure/marker_beacon/bronze, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/cable, +/turf/open/floor/wood/large, +/area/ruin/syndicate_lava_base/main) +"ma" = ( +/obj/structure/railing{ + dir = 4 + }, +/obj/structure/lattice/catwalk/mining, +/turf/open/lava/plasma/ice_moon, +/area/icemoon/underground/explored) +"mg" = ( +/obj/machinery/quantumpad{ + map_pad_id = "interdyne"; + map_pad_link_id = "ds2"; + name = "quantum pad to DS-2" + }, +/obj/structure/cable, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/cargo) +"mp" = ( +/obj/structure/marker_beacon/burgundy, +/obj/structure/railing{ + dir = 5 + }, +/turf/open/floor/engine/hull/reinforced/icemoon, +/area/ruin/syndicate_lava_base/cargo) +"mr" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 6 + }, +/obj/structure/bed/pillow_large, +/obj/structure/marker_beacon/purple, +/turf/open/floor/carpet/red, +/area/ruin/syndicate_lava_base/bar) +"my" = ( +/obj/structure/window/reinforced/survival_pod/spawner/directional/south{ + pixel_y = -4 + }, +/turf/open/floor/engine, +/area/ruin/syndicate_lava_base/testlab) +"mA" = ( +/obj/machinery/shower/directional/south, +/obj/structure/drain, +/obj/effect/turf_decal/trimline/dark/filled/line{ + dir = 5 + }, +/obj/structure/marker_beacon/violet, +/obj/structure/curtain/bounty{ + color = "#7d7d7d"; + alpha = 180 + }, +/turf/open/floor/iron/dark/small, +/area/ruin/syndicate_lava_base/dormitories) +"mG" = ( +/obj/effect/turf_decal/trimline/dark/filled/line, +/obj/effect/turf_decal/trimline/dark/filled/corner{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/dark/filled/mid_joiner, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/testlab) +"mP" = ( +/obj/structure/railing{ + dir = 9 + }, +/obj/structure/railing, +/obj/structure/marker_beacon/burgundy, +/turf/open/floor/engine/hull/reinforced/icemoon, +/area/icemoon/underground/explored) +"mV" = ( +/obj/effect/turf_decal/tile/dark/full, +/obj/machinery/camera/xray/directional/north{ + color = "#adadcd"; + name = "Inderdyne security camera"; + network = list("Interdyne"); + pixel_x = 10 + }, +/obj/machinery/power/apc/auto_name/directional/north, +/obj/effect/mapping_helpers/apc/syndicate_access, +/obj/structure/cable, +/obj/structure/marker_beacon/indigo, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, +/obj/machinery/airalarm/directional/north{ + req_access = list("syndicate"); + pixel_y = 42 + }, +/obj/machinery/door/window/survival_pod/left/directional/north{ + pixel_y = 4 + }, +/obj/effect/turf_decal/stripes/red/line{ + dir = 1 + }, +/obj/structure/closet/secure_closet{ + icon_state = "qm"; + name = "deck offficer's locker"; + req_access = list("syndicate_leader") + }, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/arrivals) +"nb" = ( +/obj/effect/turf_decal/tile/dark/full, +/obj/structure/closet/secure_closet/ds2atmos{ + anchorable = 0; + anchored = 1 + }, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/main) +"nc" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 4 + }, +/turf/open/floor/wood/large, +/area/ruin/syndicate_lava_base/main) +"nd" = ( +/obj/effect/spawner/structure/window/reinforced/plasma/plastitanium, +/obj/machinery/power/shuttle_engine/propulsion{ + dir = 4; + pixel_x = 8 + }, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/arrivals) +"nn" = ( +/obj/machinery/modular_shield/module/node{ + dir = 1 + }, +/obj/effect/decal/cleanable/glitter/blue, +/turf/open/floor/circuit, +/area/ruin/syndicate_lava_base/main) +"no" = ( +/obj/structure/railing/corner{ + dir = 4 + }, +/turf/open/floor/plating/reinforced/icemoon, +/area/ruin/syndicate_lava_base/cargo) +"nq" = ( +/obj/effect/turf_decal/trimline/dark/filled/line{ + dir = 8 + }, +/obj/effect/turf_decal/stripes/blue{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/dark/filled/mid_joiner{ + dir = 8 + }, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/medbay) +"nr" = ( +/obj/machinery/power/smes/magical{ + desc = "A high-capacity superconducting magnetic energy storage (SMES) unit. Produces power through an unstable bluespace pocket."; + name = "Interdyne power storage"; + output_level = 200000; + color = "#9d9ddd"; + light_color = "#9d9ddd" + }, +/obj/structure/marker_beacon/burgundy, +/obj/structure/cable, +/obj/effect/turf_decal/bot_blue, +/obj/effect/turf_decal/tile/dark/full, +/turf/open/floor/plating/reinforced, +/area/ruin/syndicate_lava_base/main) +"ns" = ( +/obj/machinery/modular_shield/module/relay, +/obj/structure/marker_beacon/purple, +/obj/effect/turf_decal/box/blue/corners{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/dark/filled/line{ + dir = 10 + }, +/obj/effect/turf_decal/trimline/dark/filled/mid_joiner{ + dir = 8 + }, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/main) +"nx" = ( +/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/corner{ + dir = 4 + }, +/turf/open/floor/wood/large, +/area/ruin/syndicate_lava_base/main) +"nz" = ( +/obj/structure/window/reinforced/survival_pod/spawner/directional/south{ + pixel_y = -4 + }, +/obj/effect/turf_decal/box/red/corners{ + dir = 4 + }, +/obj/effect/turf_decal/box/red/corners{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/dark/filled/end, +/obj/structure/marker_beacon/burgundy, +/obj/effect/mob_spawn/ghost_role/human/interdyne_planetary_base/ice{ + dir = 1 + }, +/turf/open/floor/iron/dark, +/area/ruin/syndicate_lava_base/arrivals) +"nA" = ( +/obj/structure/marker_beacon/teal, +/obj/machinery/smartfridge{ + color = "#adadcd"; + name = "Interdyne smartfridge"; + pixel_x = 2; + light_color = "#adadcd" + }, +/obj/structure/window/reinforced/survival_pod/spawner/directional/north{ + pixel_y = 4 + }, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/medbay) +"nC" = ( +/obj/structure/flora/bush/fullgrass/style_random, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 4 + }, +/turf/open/floor/grass, +/area/ruin/syndicate_lava_base/main) +"nJ" = ( +/obj/structure/railing/corner{ + dir = 4 + }, +/obj/structure/railing/corner, +/turf/open/floor/plating/reinforced/icemoon, +/area/icemoon/underground/explored) +"nP" = ( +/obj/effect/spawner/structure/window/reinforced/plasma/plastitanium, +/obj/machinery/door/poddoor{ + id = "interdynelibrary"; + name = "Interdyne Storm Shutters Library" + }, +/turf/open/floor/plating/reinforced, +/area/ruin/syndicate_lava_base/bar) +"nS" = ( +/obj/effect/turf_decal/box/blue/corners{ + dir = 8 + }, +/obj/structure/cable, +/obj/effect/turf_decal/trimline/dark/filled/line{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/dark/filled/mid_joiner{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/dark/filled/line, +/obj/effect/turf_decal/trimline/dark/filled/mid_joiner, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/main) +"nT" = ( +/obj/effect/turf_decal/trimline/dark/filled/line{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/dark/filled/mid_joiner{ + dir = 1 + }, +/obj/machinery/camera/xray/directional/north{ + color = "#adadcd"; + name = "Inderdyne security camera"; + network = list("Interdyne"); + pixel_x = 10 + }, +/obj/machinery/power/apc/auto_name/directional/north, +/obj/effect/mapping_helpers/apc/syndicate_access, +/obj/machinery/airalarm/directional/north{ + req_access = list("syndicate"); + pixel_y = 42 + }, +/obj/structure/cable, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/testlab) +"ob" = ( +/obj/effect/turf_decal/trimline/dark/filled/corner, +/obj/effect/turf_decal/trimline/dark/filled/corner{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/dark/filled/line{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/dark/filled/mid_joiner{ + dir = 8 + }, +/obj/effect/turf_decal/siding/thinplating/dark{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/main) +"oc" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 4 + }, +/obj/structure/marker_beacon/bronze, +/turf/open/floor/wood/large, +/area/ruin/syndicate_lava_base/main) +"oe" = ( +/obj/effect/turf_decal/arrows/blue{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/dark/filled/corner{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/dark/filled/corner{ + dir = 1 + }, +/obj/effect/turf_decal/stripes/blue/corner{ + dir = 1 + }, +/obj/effect/turf_decal/stripes/blue/corner{ + dir = 8 + }, +/obj/machinery/duct, +/obj/machinery/door/window/survival_pod/left/directional/west{ + req_access = list("syndicate"); + pixel_x = -4 + }, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/medbay) +"of" = ( +/obj/effect/turf_decal/tile/dark/full, +/obj/machinery/smartfridge/chemistry/preloaded{ + color = "#adadcd"; + name = "Interdyne smart chemical storage"; + light_color = "#adadcd"; + pixel_x = -3 + }, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/medbay) +"oj" = ( +/obj/machinery/modular_shield/module/well{ + dir = 8 + }, +/obj/structure/marker_beacon/indigo, +/obj/effect/turf_decal/box/blue/corners{ + dir = 1 + }, +/obj/effect/turf_decal/box/blue/corners{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/dark/filled/end{ + dir = 8 + }, +/turf/open/floor/iron/dark, +/area/ruin/syndicate_lava_base/main) +"ol" = ( +/obj/effect/turf_decal/tile/dark/full, +/obj/machinery/rnd/production/circuit_imprinter/offstation{ + name = "Interdyne circuit imprinter"; + color = "#adadcd"; + light_color = "#adadcd" + }, +/obj/structure/marker_beacon/burgundy, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/testlab) +"on" = ( +/obj/item/binoculars, +/turf/open/misc/asteroid/snow/icemoon, +/area/icemoon/underground/explored) +"op" = ( +/obj/effect/turf_decal/trimline/dark/filled/line, +/obj/effect/turf_decal/trimline/dark/filled/line{ + dir = 1 + }, +/obj/effect/mapping_helpers/airlock/access/all/syndicate/general, +/obj/machinery/door/airlock{ + name = "Unisex Showers"; + id_tag = "IDyneWC" + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron/dark/textured, +/area/ruin/syndicate_lava_base/dormitories) +"ov" = ( +/obj/effect/turf_decal/trimline/dark/filled/line{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/dark/filled/mid_joiner{ + dir = 8 + }, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/testlab) +"ox" = ( +/obj/effect/turf_decal/trimline/dark/filled/end, +/obj/effect/turf_decal/box/red/corners{ + dir = 4 + }, +/obj/effect/turf_decal/box/red/corners{ + dir = 1 + }, +/obj/effect/turf_decal/stripes/red/line, +/obj/structure/marker_beacon/burgundy, +/obj/structure/window/reinforced/survival_pod/spawner/directional/south{ + pixel_y = -4 + }, +/obj/effect/mob_spawn/ghost_role/human/interdyne_planetary_base/ice{ + dir = 1 + }, +/turf/open/floor/iron/dark, +/area/ruin/syndicate_lava_base/arrivals) +"oz" = ( +/obj/structure/fans/tiny/forcefield, +/obj/structure/marker_beacon/teal, +/obj/effect/decal/cleanable/glitter/blue, +/obj/effect/turf_decal/trimline/dark/filled/line, +/obj/effect/turf_decal/trimline/dark/filled/line{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/cable, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/dormitories) +"oA" = ( +/obj/structure/marker_beacon/burgundy, +/obj/structure/railing{ + dir = 9 + }, +/obj/machinery/button/door/directional/south{ + base_icon_state = "tram"; + name = "Interdyne Gate"; + icon_state = "tram"; + id = "interdynegateout"; + light_color = "#22CCFF"; + req_access = list("syndicate"); + pixel_x = 7; + pixel_y = -20 + }, +/turf/open/floor/engine/hull/reinforced/icemoon, +/area/ruin/syndicate_lava_base/cargo) +"oB" = ( +/obj/structure/railing/corner{ + dir = 1 + }, +/turf/open/floor/plating/reinforced/icemoon, +/area/ruin/syndicate_lava_base/cargo) +"oE" = ( +/obj/structure/window/reinforced/survival_pod/spawner/directional/west{ + pixel_x = -4 + }, +/obj/machinery/portable_atmospherics/canister/plasma, +/turf/open/floor/catwalk_floor/iron_dark, +/area/ruin/syndicate_lava_base/main) +"oG" = ( +/obj/structure/hedge, +/obj/effect/turf_decal/siding/wood{ + dir = 5 + }, +/turf/open/floor/wood/large, +/area/ruin/syndicate_lava_base/main) +"oN" = ( +/obj/effect/turf_decal/stripes/red/line{ + dir = 10 + }, +/obj/effect/turf_decal/trimline/dark/filled/mid_joiner{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/dark/filled/line{ + dir = 5 + }, +/obj/machinery/duct, +/obj/structure/marker_beacon/burgundy, +/obj/structure/window/reinforced/survival_pod/spawner/directional/north{ + pixel_y = 4 + }, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/medbay) +"oO" = ( +/obj/structure/table/optable, +/obj/structure/marker_beacon/teal, +/obj/effect/turf_decal/tile/dark/full, +/obj/effect/turf_decal/stripes/blue{ + dir = 1 + }, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/medbay) +"oP" = ( +/obj/effect/turf_decal/tile/dark/full, +/obj/machinery/ammo_workbench{ + name = "Interdyne ammunitions workbench"; + color = "#adadcd" + }, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/testlab) +"oS" = ( +/obj/structure/closet/cabinet{ + name = "Dark wood Interdyne closet"; + color = "#8d8d8d"; + light_color = "#8d8d8d" + }, +/obj/effect/turf_decal/trimline/dark/filled/end{ + dir = 8 + }, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 4 + }, +/turf/open/floor/iron/dark/textured, +/area/ruin/syndicate_lava_base/dormitories) +"oV" = ( +/obj/structure/cable, +/turf/open/floor/wood/large, +/area/ruin/syndicate_lava_base/bar) +"oW" = ( +/obj/effect/turf_decal/caution/red, +/obj/effect/turf_decal/stripes/red/line{ + dir = 1 + }, +/obj/effect/turf_decal/arrows/blue{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/dark/filled/line{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/dark/filled/corner{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/medbay) +"oZ" = ( +/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/ruin/syndicate_lava_base/testlab) +"pc" = ( +/obj/effect/turf_decal/trimline/dark/filled/line{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/dark/filled/corner{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/dark/filled/mid_joiner{ + dir = 1 + }, +/obj/effect/turf_decal/stripes/blue/corner, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/medbay) +"pe" = ( +/obj/effect/turf_decal/trimline/dark/filled/line{ + dir = 6 + }, +/obj/effect/turf_decal/trimline/dark/filled/corner{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron/dark/textured, +/area/ruin/syndicate_lava_base/dormitories) +"pg" = ( +/obj/effect/turf_decal/trimline/dark/filled/line{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/dark/filled/line{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/dark/filled/mid_joiner{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/dark/filled/mid_joiner{ + dir = 4 + }, +/obj/effect/turf_decal/stripes/red/line{ + dir = 8 + }, +/obj/effect/turf_decal/stripes/blue{ + dir = 4 + }, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/cargo) +"ph" = ( +/obj/structure/flora/bush/fullgrass/style_random, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 8 + }, +/turf/open/floor/grass, +/area/ruin/syndicate_lava_base/main) +"pk" = ( +/obj/structure/flora/bush/fullgrass/style_random, +/obj/structure/flora/tree/jungle/style_random, +/obj/structure/flora/bush/jungle/b/style_random, +/turf/open/floor/grass, +/area/ruin/syndicate_lava_base/main) +"pp" = ( +/obj/structure/fans/tiny, +/obj/effect/turf_decal/stripes/red/line{ + dir = 1 + }, +/obj/effect/turf_decal/stripes/red/line, +/obj/machinery/door/poddoor{ + id = "interdynegateout"; + name = "Inderdyne Gate" + }, +/turf/open/floor/plating/elevatorshaft, +/area/ruin/syndicate_lava_base/cargo) +"pr" = ( +/obj/structure/fans/tiny, +/obj/effect/turf_decal/stripes/red/line{ + dir = 1 + }, +/obj/effect/turf_decal/stripes/red/line, +/obj/effect/decal/cleanable/blood/old, +/obj/machinery/door/poddoor{ + id = "interdynegateout"; + name = "Inderdyne Gate" + }, +/turf/open/floor/plating/elevatorshaft, +/area/ruin/syndicate_lava_base/cargo) +"pF" = ( +/obj/structure/chair/comfy/black{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/dark/filled/line{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/dark/filled/mid_joiner{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/dark/filled/corner{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/dark/filled/corner{ + dir = 8 + }, +/obj/structure/marker_beacon/olive, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/medbay) +"pH" = ( +/obj/effect/turf_decal/trimline/dark/filled/line{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/dark/filled/line, +/obj/effect/turf_decal/trimline/dark/filled/mid_joiner{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/dark/filled/mid_joiner, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/testlab) +"pI" = ( +/obj/effect/turf_decal/siding/wood/corner{ + dir = 4 + }, +/obj/effect/turf_decal/siding/wood/corner{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/cable, +/turf/open/floor/wood/large, +/area/ruin/syndicate_lava_base/main) +"pK" = ( +/obj/machinery/computer/pandemic{ + name = "Interdyne PanD.E.M.I.C"; + color = "#adadcd" + }, +/obj/effect/turf_decal/tile/dark/full, +/obj/structure/marker_beacon/burgundy, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 8 + }, +/obj/structure/window/reinforced/survival_pod/spawner/directional/east{ + pixel_x = 4 + }, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/medbay) +"pN" = ( +/obj/structure/table/reinforced/plastitaniumglass, +/obj/effect/turf_decal/tile/dark/full, +/obj/machinery/reagentgrinder{ + pixel_x = 5; + pixel_y = 8 + }, +/obj/item/food/tofu{ + pixel_y = -6 + }, +/obj/item/food/tofu, +/obj/item/food/tofu{ + pixel_y = 6 + }, +/obj/item/stack/sheet/mineral/plasma{ + pixel_y = 4 + }, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 8 + }, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/medbay) +"pU" = ( +/obj/machinery/smartfridge/chemistry/virology/preloaded{ + name = "Interdyne virus storage"; + color = "#adadcd" + }, +/obj/effect/turf_decal/tile/dark/full, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 4 + }, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/medbay) +"qa" = ( +/obj/machinery/portable_atmospherics/canister/anesthetic_mix, +/obj/machinery/atmospherics/components/unary/portables_connector/visible{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/dark/filled/line{ + dir = 5 + }, +/obj/effect/turf_decal/trimline/dark/filled/mid_joiner{ + dir = 4 + }, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/medbay) +"qd" = ( +/obj/effect/turf_decal/trimline/dark/filled/line{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/dark/filled/line, +/obj/effect/turf_decal/trimline/dark/filled/mid_joiner{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/dark/filled/mid_joiner, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/medbay) +"qe" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 9 + }, +/turf/open/floor/wood/large, +/area/ruin/syndicate_lava_base/main) +"qg" = ( +/obj/structure/marker_beacon/burgundy, +/obj/structure/flora/rock/pile/icy/style_random, +/turf/open/misc/asteroid/snow/icemoon, +/area/icemoon/underground/explored) +"qp" = ( +/obj/effect/turf_decal/trimline/dark/filled/line{ + dir = 8 + }, +/obj/effect/turf_decal/stripes/blue{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/dark/filled/mid_joiner{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/medbay) +"qA" = ( +/obj/structure/flora/bush/sparsegrass/style_random, +/obj/structure/flora/bush/flowers_pp/style_random, +/obj/structure/marker_beacon/purple, +/obj/structure/flora/tree/jungle/style_random, +/turf/open/floor/grass, +/area/ruin/syndicate_lava_base/main) +"qC" = ( +/obj/effect/turf_decal/stripes/red/line{ + dir = 1 + }, +/obj/structure/window/reinforced/survival_pod/spawner/directional/west{ + pixel_x = -4 + }, +/turf/open/floor/engine, +/area/ruin/syndicate_lava_base/testlab) +"qH" = ( +/obj/item/clothing/glasses/night, +/obj/item/clothing/glasses/night, +/obj/item/clothing/glasses/night, +/obj/item/storage/belt/military, +/obj/item/storage/belt/military, +/obj/item/clothing/mask/gas/syndicate, +/obj/item/clothing/mask/gas/syndicate, +/obj/item/clothing/shoes/combat, +/obj/item/clothing/shoes/combat, +/obj/item/clothing/under/syndicate/combat, +/obj/item/clothing/under/syndicate/combat, +/obj/item/clothing/gloves/combat, +/obj/item/clothing/gloves/combat, +/obj/item/card/id/advanced/chameleon, +/obj/item/card/id/advanced/chameleon, +/obj/item/card/id/advanced/chameleon, +/obj/item/radio/headset/interdyne, +/obj/item/radio/headset/interdyne, +/obj/item/radio/headset/interdyne, +/obj/structure/closet/crate/secure/gear{ + req_access = list("syndicate"); + anchored = 1 + }, +/obj/effect/turf_decal/bot_red, +/obj/structure/marker_beacon/bronze, +/obj/effect/turf_decal/tile/dark/full, +/obj/structure/cable, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/cargo) +"qK" = ( +/obj/structure/flora/bush/sparsegrass/style_random, +/obj/structure/flora/bush/flowers_yw/style_random, +/obj/structure/marker_beacon/bronze, +/obj/structure/flora/tree/jungle/style_random, +/turf/open/floor/grass, +/area/ruin/syndicate_lava_base/main) +"qS" = ( +/obj/structure/marker_beacon/burgundy, +/obj/effect/turf_decal/tile/dark/full, +/obj/structure/table/reinforced/plastitaniumglass, +/obj/item/construction/plumbing, +/obj/item/pipe_dispenser, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/main) +"qU" = ( +/obj/effect/turf_decal/siding/wood/corner{ + dir = 1 + }, +/obj/structure/chair/sofa/corp/left, +/turf/open/floor/wood/large, +/area/ruin/syndicate_lava_base/bar) +"qY" = ( +/obj/structure/table/wood/fancy/black, +/obj/machinery/chem_dispenser/drinks/beer/fullupgrade, +/turf/open/floor/iron/dark/textured, +/area/ruin/syndicate_lava_base/bar) +"rf" = ( +/obj/effect/turf_decal/trimline/dark/filled/line{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/dark/filled/mid_joiner{ + dir = 8 + }, +/obj/effect/turf_decal/siding/thinplating/dark{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/main) +"rg" = ( +/obj/effect/turf_decal/trimline/dark/filled/corner{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/dark/filled/corner{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/dark/filled/line{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/dark/filled/mid_joiner{ + dir = 4 + }, +/obj/effect/turf_decal/siding/thinplating/dark{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/main) +"rv" = ( +/obj/effect/turf_decal/siding/wood/corner{ + 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/wood/large, +/area/ruin/syndicate_lava_base/main) +"ry" = ( +/obj/effect/turf_decal/trimline/dark/filled/line{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/dark/filled/mid_joiner{ + dir = 1 + }, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/bar) +"rD" = ( +/obj/effect/turf_decal/trimline/dark/filled/line{ + dir = 6 + }, +/obj/effect/turf_decal/trimline/dark/filled/mid_joiner{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/dark/filled/mid_joiner, +/obj/machinery/anesthetic_machine{ + pixel_x = 10 + }, +/obj/machinery/iv_drip{ + pixel_x = -10 + }, +/obj/item/tank/internals/anesthetic, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/medbay) +"rG" = ( +/obj/effect/turf_decal/trimline/dark/filled/corner{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/dark/filled/corner, +/obj/effect/turf_decal/stripes/blue/corner, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/medbay) +"rP" = ( +/obj/effect/turf_decal/trimline/dark/filled/line, +/obj/effect/turf_decal/trimline/dark/filled/mid_joiner, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/medbay) +"rT" = ( +/obj/effect/turf_decal/trimline/dark/filled/line{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/dark/filled/corner, +/obj/effect/turf_decal/trimline/dark/filled/corner{ + dir = 8 + }, +/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/dark/textured, +/area/ruin/syndicate_lava_base/dormitories) +"rX" = ( +/obj/effect/turf_decal/trimline/dark/filled/corner{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/dark/filled/corner{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/testlab) +"sa" = ( +/obj/effect/spawner/structure/window/reinforced/plasma/plastitanium, +/obj/structure/fans/tiny/forcefield, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/dormitories) +"sc" = ( +/obj/machinery/light/directional/east{ + bulb_colour = "#2C3BFF"; + color = "#0012FF"; + light_color = "#0012FF" + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/cable, +/turf/open/floor/wood/large, +/area/ruin/syndicate_lava_base/main) +"sg" = ( +/obj/effect/turf_decal/trimline/dark/filled/line{ + dir = 10 + }, +/obj/effect/turf_decal/trimline/dark/filled/mid_joiner{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/dark/filled/mid_joiner, +/obj/effect/turf_decal/box/white/corners{ + dir = 8 + }, +/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/dark/textured_large, +/area/ruin/syndicate_lava_base/cargo) +"sm" = ( +/obj/effect/turf_decal/vg_decals/atmos/air, +/obj/effect/turf_decal/trimline/dark/filled/line{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/dark/filled/mid_joiner{ + dir = 1 + }, +/obj/machinery/atmospherics/components/trinary/mixer/airmix/inverse{ + dir = 4 + }, +/obj/machinery/light/directional/south{ + light_color = "#5148A6" + }, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/main) +"so" = ( +/obj/structure/rack/shelf, +/obj/effect/turf_decal/tile/dark/full, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/testlab) +"sr" = ( +/obj/effect/turf_decal/trimline/dark/filled/line, +/obj/effect/turf_decal/trimline/dark/filled/corner{ + dir = 4 + }, +/turf/open/floor/iron/dark/textured, +/area/ruin/syndicate_lava_base/bar) +"ss" = ( +/obj/machinery/vending/hydronutrients{ + onstation = 0 + }, +/obj/effect/turf_decal/tile/dark/full, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/bar) +"st" = ( +/turf/open/floor/plating/reinforced/icemoon, +/area/ruin/syndicate_lava_base/cargo) +"sv" = ( +/obj/effect/spawner/structure/window/reinforced/plasma/plastitanium, +/obj/machinery/door/poddoor{ + id = "interdynernd"; + name = "Interdyne Storm Shutters RnD" + }, +/turf/open/floor/plating/reinforced, +/area/ruin/syndicate_lava_base/testlab) +"sA" = ( +/obj/effect/turf_decal/box/red/corners, +/obj/effect/turf_decal/box/red/corners{ + dir = 8 + }, +/obj/effect/turf_decal/arrows/blue, +/obj/structure/cable, +/obj/effect/turf_decal/trimline/dark/filled/corner{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/dark/filled/corner{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/dark/filled/line, +/obj/effect/turf_decal/trimline/dark/filled/mid_joiner, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/main) +"sE" = ( +/obj/effect/turf_decal/trimline/dark/filled/corner{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/dark/filled/corner{ + dir = 4 + }, +/obj/effect/turf_decal/siding/thinplating/dark/corner{ + dir = 4 + }, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 4 + }, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/main) +"sF" = ( +/obj/effect/turf_decal/trimline/dark/filled/line{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/dark/filled/mid_joiner{ + dir = 4 + }, +/obj/machinery/atmospherics/components/trinary/filter/flipped, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/main) +"sL" = ( +/obj/structure/marker_beacon/burgundy, +/obj/machinery/door/airlock/vault{ + id_tag = "syndie_lavaland_vault"; + name = "Interdyne Vault" + }, +/obj/effect/mapping_helpers/airlock/locked, +/obj/structure/cable, +/turf/open/floor/iron/recharge_floor, +/area/ruin/syndicate_lava_base/main) +"sP" = ( +/turf/closed/wall/r_wall/syndicate, +/area/ruin/syndicate_lava_base/cargo) +"sQ" = ( +/obj/machinery/modular_shield_generator, +/obj/effect/decal/cleanable/glitter/blue, +/turf/open/floor/circuit, +/area/ruin/syndicate_lava_base/main) +"sR" = ( +/obj/machinery/disposal/bin{ + name = "External disposal unit" + }, +/obj/structure/disposalpipe/trunk{ + dir = 1 + }, +/obj/effect/turf_decal/stripes/red/box, +/obj/effect/turf_decal/tile/dark/full, +/obj/structure/window/reinforced/survival_pod/spawner/directional/east{ + pixel_x = 4 + }, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/medbay) +"sY" = ( +/obj/structure/table/reinforced/plastitaniumglass, +/obj/item/storage/box/beakers/bluespace, +/obj/item/storage/box/beakers/bluespace, +/obj/effect/turf_decal/tile/dark/full, +/obj/structure/marker_beacon/purple, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 4 + }, +/obj/machinery/button/door/directional/west{ + base_icon_state = "tram"; + icon_state = "tram"; + req_access = list("syndicate"); + id = "interdynelabs"; + name = "Interdyne Storm Shutters Labs" + }, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/medbay) +"sZ" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/general/hidden, +/obj/structure/marker_beacon/burgundy, +/obj/machinery/atmospherics/miner/nitrogen, +/turf/open/floor/engine/n2, +/area/ruin/syndicate_lava_base/main) +"ta" = ( +/obj/effect/turf_decal/trimline/dark/filled/line{ + dir = 5 + }, +/obj/effect/turf_decal/trimline/dark/filled/corner{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/dark/filled/mid_joiner{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/dark/filled/mid_joiner{ + dir = 4 + }, +/obj/structure/chair/sofa/corp/corner, +/obj/structure/marker_beacon/purple, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/testlab) +"tc" = ( +/obj/machinery/computer/operating, +/obj/item/disk/surgery/forgottenship, +/obj/effect/turf_decal/tile/dark/full, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/medbay) +"td" = ( +/turf/closed/wall/r_wall/syndicate/nodiagonal, +/area/ruin/syndicate_lava_base/bar) +"tl" = ( +/obj/effect/turf_decal/trimline/dark/filled/line{ + dir = 5 + }, +/obj/effect/turf_decal/trimline/dark/filled/mid_joiner{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/dark/filled/mid_joiner{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/medbay) +"to" = ( +/obj/effect/turf_decal/stripes/red/line{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/dark/filled/corner, +/obj/structure/closet/crate/freezer/sansufentanyl, +/obj/structure/marker_beacon/burgundy, +/obj/effect/turf_decal/trimline/dark/filled/end{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/dark/filled/mid_joiner{ + dir = 1 + }, +/obj/machinery/door/window/survival_pod/left/directional/west{ + req_access = list("syndicate"); + pixel_x = -4 + }, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/medbay) +"tu" = ( +/obj/item/stock_parts/micro_laser/quadultra, +/obj/item/stock_parts/micro_laser/quadultra, +/obj/item/stock_parts/micro_laser/quadultra, +/obj/item/stock_parts/micro_laser/quadultra, +/obj/item/stock_parts/micro_laser/quadultra, +/obj/item/stock_parts/micro_laser/quadultra, +/obj/item/stock_parts/micro_laser/quadultra, +/obj/item/stock_parts/micro_laser/quadultra, +/obj/item/stock_parts/micro_laser/quadultra, +/obj/item/stock_parts/micro_laser/quadultra, +/obj/item/stock_parts/micro_laser/quadultra, +/obj/item/stock_parts/micro_laser/quadultra, +/obj/item/stock_parts/micro_laser/quadultra, +/obj/item/stock_parts/micro_laser/quadultra, +/obj/item/stock_parts/micro_laser/quadultra, +/obj/item/stock_parts/capacitor/quadratic, +/obj/item/stock_parts/capacitor/quadratic, +/obj/item/stock_parts/capacitor/quadratic, +/obj/item/stock_parts/capacitor/quadratic, +/obj/item/stock_parts/capacitor/quadratic, +/obj/item/stock_parts/capacitor/quadratic, +/obj/item/stock_parts/capacitor/quadratic, +/obj/item/stock_parts/capacitor/quadratic, +/obj/item/stock_parts/capacitor/quadratic, +/obj/item/stock_parts/capacitor/quadratic, +/obj/item/stock_parts/capacitor/quadratic, +/obj/item/stock_parts/capacitor/quadratic, +/obj/item/stock_parts/capacitor/quadratic, +/obj/item/stock_parts/capacitor/quadratic, +/obj/item/stock_parts/capacitor/quadratic, +/obj/item/stock_parts/capacitor/quadratic, +/obj/item/stock_parts/capacitor/quadratic, +/obj/item/stock_parts/capacitor/quadratic, +/obj/item/stock_parts/servo/femto, +/obj/item/stock_parts/servo/femto, +/obj/item/stock_parts/servo/femto, +/obj/item/stock_parts/servo/femto, +/obj/item/stock_parts/servo/femto, +/obj/item/stock_parts/servo/femto, +/obj/item/stock_parts/servo/femto, +/obj/item/stock_parts/servo/femto, +/obj/item/stock_parts/servo/femto, +/obj/item/stock_parts/servo/femto, +/obj/item/stock_parts/servo/femto, +/obj/item/stock_parts/servo/femto, +/obj/item/stock_parts/servo/femto, +/obj/item/stock_parts/capacitor/quadratic, +/obj/item/stock_parts/micro_laser/quadultra, +/obj/structure/table/reinforced/plastitaniumglass, +/obj/effect/turf_decal/tile/dark/full, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/main) +"tv" = ( +/obj/item/serviette_pack, +/turf/open/misc/asteroid/snow/icemoon, +/area/icemoon/underground/explored) +"tw" = ( +/obj/structure/table/reinforced/plastitaniumglass, +/obj/item/storage/box/monkeycubes{ + pixel_x = -5; + pixel_y = 1 + }, +/obj/item/storage/box/monkeycubes{ + pixel_x = 6; + pixel_y = 4 + }, +/obj/effect/turf_decal/tile/dark/full, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 8 + }, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/medbay) +"tx" = ( +/obj/structure/closet/secure_closet/freezer/kitchen{ + req_access = list("syndicate"); + color = "#9d9ddd"; + name = "Interdyne kitchen cabinet"; + light_color = "#9d9ddd" + }, +/obj/item/reagent_containers/condiment/milk, +/obj/item/reagent_containers/condiment/soymilk, +/obj/effect/turf_decal/trimline/dark/filled/line, +/obj/effect/turf_decal/trimline/dark/filled/mid_joiner, +/obj/effect/turf_decal/box/white/corners, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/bar) +"tB" = ( +/obj/effect/turf_decal/tile/dark/full, +/obj/structure/reagent_dispensers/fueltank, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/main) +"tJ" = ( +/obj/effect/turf_decal/trimline/dark/filled/corner{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/dark/filled/corner{ + dir = 1 + }, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/bar) +"tM" = ( +/obj/structure/marker_beacon/bronze, +/obj/effect/turf_decal/trimline/dark/filled/line{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/dark/filled/mid_joiner{ + dir = 1 + }, +/obj/structure/window/reinforced/survival_pod/spawner/directional/south{ + pixel_y = -4 + }, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/main) +"tS" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 10 + }, +/turf/open/floor/carpet/red, +/area/ruin/syndicate_lava_base/bar) +"tT" = ( +/obj/structure/railing{ + dir = 5 + }, +/obj/structure/railing, +/obj/structure/marker_beacon/burgundy, +/turf/open/floor/engine/hull/reinforced/icemoon, +/area/icemoon/underground/explored) +"ub" = ( +/obj/effect/turf_decal/trimline/dark/filled/line, +/obj/effect/turf_decal/trimline/dark/filled/corner{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/dark/filled/mid_joiner, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/bar) +"ue" = ( +/obj/effect/turf_decal/stripes/red/line{ + dir = 1 + }, +/obj/structure/marker_beacon/burgundy, +/obj/structure/window/reinforced/survival_pod/spawner/directional/north{ + pixel_y = 4 + }, +/obj/effect/turf_decal/trimline/dark/filled/end{ + dir = 1 + }, +/obj/effect/turf_decal/box/red/corners{ + dir = 8 + }, +/obj/effect/turf_decal/box/red/corners, +/obj/effect/mob_spawn/ghost_role/human/interdyne_planetary_base/shaftminer/ice, +/turf/open/floor/iron/dark, +/area/ruin/syndicate_lava_base/arrivals) +"uk" = ( +/obj/structure/rack/shelf, +/obj/effect/turf_decal/tile/dark/full, +/obj/item/shovel, +/obj/item/pickaxe, +/obj/item/t_scanner/adv_mining_scanner/lesser, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/cargo) +"um" = ( +/obj/structure/disposalpipe/segment{ + dir = 5 + }, +/turf/closed/wall/r_wall/syndicate/nodiagonal, +/area/ruin/syndicate_lava_base/medbay) +"up" = ( +/obj/effect/turf_decal/trimline/dark/filled/line, +/obj/effect/turf_decal/trimline/dark/filled/line{ + dir = 1 + }, +/turf/open/floor/iron/dark/textured, +/area/ruin/syndicate_lava_base/bar) +"us" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/cable, +/turf/open/floor/wood/large, +/area/ruin/syndicate_lava_base/main) +"uw" = ( +/obj/effect/turf_decal/tile/dark/full, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/item/storage/toolbox/syndicate, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/testlab) +"ux" = ( +/obj/structure/flora/bush/fullgrass/style_random, +/turf/open/floor/grass, +/area/ruin/syndicate_lava_base/main) +"uA" = ( +/obj/effect/turf_decal/trimline/dark/filled/mid_joiner{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/dark/filled/line{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/dark/filled/line{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/dark/filled/mid_joiner{ + dir = 4 + }, +/obj/effect/turf_decal/stripes/red/line{ + dir = 4 + }, +/obj/structure/extinguisher_cabinet/directional/west, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 4 + }, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/cargo) +"uB" = ( +/obj/effect/turf_decal/trimline/dark/filled/corner, +/obj/effect/turf_decal/trimline/dark/filled/line{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/dark/filled/mid_joiner{ + dir = 1 + }, +/obj/effect/turf_decal/siding/thinplating/dark{ + dir = 1 + }, +/obj/structure/cable, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/main) +"uN" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 9 + }, +/obj/structure/hedge, +/turf/open/floor/wood/large, +/area/ruin/syndicate_lava_base/main) +"uQ" = ( +/obj/structure/flora/tree/dead/style_random, +/turf/open/misc/asteroid/snow/icemoon, +/area/icemoon/underground/explored) +"uV" = ( +/obj/structure/window/reinforced/survival_pod/spawner/directional/north{ + pixel_y = 4 + }, +/obj/effect/turf_decal/box/red/corners, +/obj/effect/turf_decal/box/red/corners{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/dark/filled/end{ + dir = 1 + }, +/obj/structure/marker_beacon/burgundy, +/obj/effect/mob_spawn/ghost_role/human/interdyne_planetary_base/shaftminer/ice, +/turf/open/floor/iron/dark, +/area/ruin/syndicate_lava_base/arrivals) +"uX" = ( +/obj/effect/turf_decal/trimline/dark/filled/mid_joiner, +/obj/effect/turf_decal/trimline/dark/filled/line{ + dir = 6 + }, +/obj/effect/turf_decal/trimline/dark/filled/mid_joiner{ + dir = 4 + }, +/obj/structure/closet/crate/bin{ + pixel_x = 5 + }, +/obj/effect/turf_decal/box/blue/corners, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/bar) +"vf" = ( +/obj/machinery/atmospherics/miner/oxygen, +/obj/structure/marker_beacon/burgundy, +/turf/open/floor/engine/o2, +/area/ruin/syndicate_lava_base/main) +"vl" = ( +/obj/structure/table/reinforced/plastitaniumglass, +/obj/effect/turf_decal/tile/dark/full, +/obj/item/paper_bin{ + pixel_y = 4 + }, +/obj/item/pen{ + pixel_y = 4 + }, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/testlab) +"vo" = ( +/obj/effect/spawner/structure/window/reinforced/plasma/plastitanium, +/obj/machinery/door/poddoor{ + id = "interdynekitchen"; + name = "Interdyne Storm Shutters Kitchen" + }, +/turf/open/floor/plating/reinforced, +/area/ruin/syndicate_lava_base/bar) +"vq" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 4 + }, +/obj/structure/marker_beacon/violet, +/obj/effect/spawner/random/vending/snackvend, +/turf/open/floor/wood/large, +/area/ruin/syndicate_lava_base/main) +"vt" = ( +/obj/effect/turf_decal/tile/dark/full, +/obj/structure/table/reinforced/plastitaniumglass, +/obj/item/storage/box/drinkingglasses{ + pixel_y = 10 + }, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/bar) +"vv" = ( +/obj/effect/turf_decal/trimline/dark/filled/corner{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/dark/filled/corner{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/dark/filled/corner{ + dir = 4 + }, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/bar) +"vy" = ( +/obj/structure/rack/shelf, +/obj/item/storage/bag/ore, +/obj/item/pickaxe/drill, +/obj/effect/turf_decal/tile/dark/full, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/cargo) +"vz" = ( +/obj/effect/turf_decal/trimline/dark/filled/line{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/dark/filled/mid_joiner{ + dir = 8 + }, +/obj/machinery/atmospherics/components/binary/pump/off{ + dir = 1 + }, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/main) +"vB" = ( +/obj/effect/turf_decal/tile/dark/full, +/obj/structure/table/reinforced/plastitaniumglass, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/bar) +"vH" = ( +/obj/effect/turf_decal/tile/dark/full, +/obj/machinery/vending/drugs{ + name = "\improper SyndiDrug Plus"; + onstation = 0; + extended_inventory = 1; + color = "#adadcd"; + light_color = "#adadcd" + }, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/medbay) +"vL" = ( +/obj/effect/turf_decal/tile/dark/full, +/obj/machinery/smartfridge/food{ + color = "#adadcd"; + name = "Interdyne fridge"; + light_color = "#adadcd" + }, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/bar) +"vT" = ( +/obj/machinery/computer/camera_advanced/xenobio{ + dir = 4; + name = "Interdyne Slime management console"; + pixel_x = -4 + }, +/obj/effect/turf_decal/tile/dark/full, +/obj/machinery/button/door/directional/west{ + base_icon_state = "tram"; + icon_state = "tram"; + req_access = list("syndicate"); + id = "interdynexeno"; + name = "Interdyne Storm Shutters Xeno" + }, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/testlab) +"vW" = ( +/obj/effect/turf_decal/stripes/blue{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/dark/filled/line{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/dark/filled/mid_joiner{ + dir = 8 + }, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/medbay) +"vZ" = ( +/obj/structure/marker_beacon/purple, +/obj/effect/turf_decal/trimline/dark/filled/line{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/dark/filled/line{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/dark/filled/mid_joiner{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/dark/filled/mid_joiner{ + dir = 8 + }, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/testlab) +"wa" = ( +/obj/effect/turf_decal/trimline/dark/filled/end{ + dir = 1 + }, +/obj/effect/turf_decal/box/red/corners{ + dir = 8 + }, +/obj/effect/turf_decal/box/red/corners, +/obj/effect/turf_decal/stripes/red/line{ + dir = 1 + }, +/obj/structure/window/reinforced/survival_pod/spawner/directional/north{ + pixel_y = 4 + }, +/obj/effect/mob_spawn/ghost_role/human/interdyne_planetary_base/deck_officer/ice, +/turf/open/floor/iron/dark/textured, +/area/ruin/syndicate_lava_base/arrivals) +"wl" = ( +/obj/structure/chair/sofa/bench/right{ + dir = 8 + }, +/obj/effect/turf_decal/siding/wood{ + dir = 5 + }, +/turf/open/floor/wood/large, +/area/ruin/syndicate_lava_base/main) +"wm" = ( +/obj/item/flashlight{ + pixel_x = -5; + pixel_y = 5 + }, +/obj/item/flashlight{ + pixel_x = -2; + pixel_y = 2 + }, +/obj/item/flashlight{ + pixel_x = 1; + pixel_y = -1 + }, +/obj/item/extinguisher{ + pixel_x = -5; + pixel_y = 5 + }, +/obj/item/extinguisher{ + pixel_x = -2; + pixel_y = 2 + }, +/obj/item/extinguisher{ + pixel_x = 1; + pixel_y = -1 + }, +/obj/structure/closet/crate/secure/gear{ + req_access = list("syndicate"); + anchored = 1 + }, +/obj/effect/turf_decal/bot_red, +/obj/effect/turf_decal/tile/dark/full, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/cargo) +"wn" = ( +/obj/effect/turf_decal/trimline/dark/filled/corner{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/dark/filled/line{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/dark/filled/mid_joiner{ + dir = 4 + }, +/obj/effect/turf_decal/siding/thinplating/dark{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/main) +"wo" = ( +/obj/structure/marker_beacon/bronze, +/obj/effect/turf_decal/trimline/dark/filled/line{ + dir = 9 + }, +/turf/open/floor/iron/dark/textured, +/area/ruin/syndicate_lava_base/bar) +"wr" = ( +/obj/structure/disposalpipe/trunk, +/obj/structure/drain, +/obj/structure/marker_beacon/purple, +/obj/structure/disposaloutlet{ + dir = 1 + }, +/obj/structure/window/reinforced/survival_pod/spawner/directional/east, +/obj/structure/window/reinforced/survival_pod/spawner/directional/west, +/turf/open/floor/plating/reinforced, +/area/ruin/syndicate_lava_base/medbay) +"wu" = ( +/obj/effect/turf_decal/trimline/dark/filled/line, +/obj/effect/turf_decal/trimline/dark/filled/mid_joiner, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/testlab) +"wv" = ( +/obj/effect/turf_decal/stripes/blue{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/dark/filled/line{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/dark/filled/mid_joiner{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/window/reinforced/survival_pod/spawner/directional/east{ + pixel_x = 4 + }, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/medbay) +"wx" = ( +/obj/effect/turf_decal/trimline/dark/filled/corner{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/dark/filled/corner{ + dir = 4 + }, +/obj/item/paper/fluff/ruins/interdyne/note_1{ + name = "Forcefield Generator Maintenance"; + default_raw_text = "To activate Frozen Moonlight's forcefield, open maintenance hatches of the generator itself, Relay, Well and Charger nodes with a screwdriver and upgrade them with provided parts by using a rapid parts exchange device. Then, close all hatches and, by using a multitool, activate every module of the generator in a chain-like way. When preparations are done, set the generator's radius at maximum and press the power button. If the forcefield sustains overwhelming damage, it will require some time to recharge and has to be turned back on manually. Wavefield Science wishes you a safe and productive day." + }, +/obj/effect/turf_decal/trimline/dark/filled/corner{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/dark/filled/corner, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/main) +"wF" = ( +/obj/structure/marker_beacon/burgundy, +/obj/structure/sign/flag/syndicate/directional/north, +/obj/effect/turf_decal/tile/dark/full, +/obj/machinery/blackbox_recorder{ + name = "Interdyne Blackbox Recorder"; + desc = "Machine that contains lots of confidential Syndicate and Wavefield Science data."; + color = "#adadcd"; + light_color = "#adadcd" + }, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/main) +"wG" = ( +/obj/machinery/bookbinder, +/turf/closed/wall/r_wall/syndicate/nodiagonal, +/area/ruin/syndicate_lava_base/bar) +"wN" = ( +/obj/effect/turf_decal/caution/red, +/obj/effect/turf_decal/stripes/red/line{ + dir = 1 + }, +/obj/effect/decal/remains/human, +/obj/structure/railing/corner{ + dir = 8 + }, +/obj/structure/railing/corner{ + dir = 1 + }, +/turf/open/floor/plating/reinforced/icemoon, +/area/icemoon/underground/explored) +"wP" = ( +/obj/effect/turf_decal/trimline/dark/filled/line{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/dark/filled/line{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/dark/filled/mid_joiner{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/dark/filled/mid_joiner{ + dir = 4 + }, +/obj/effect/turf_decal/stripes/red/line{ + dir = 4 + }, +/obj/effect/turf_decal/stripes/blue/corner{ + dir = 1 + }, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/cargo) +"wU" = ( +/obj/structure/bookcase/random/religion, +/turf/open/floor/wood/large, +/area/ruin/syndicate_lava_base/bar) +"wX" = ( +/obj/effect/turf_decal/trimline/dark/filled/corner{ + dir = 8 + }, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/bar) +"xc" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/cable, +/turf/open/floor/wood/large, +/area/ruin/syndicate_lava_base/main) +"xe" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 8 + }, +/obj/structure/marker_beacon/bronze, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/cable, +/turf/open/floor/wood/large, +/area/ruin/syndicate_lava_base/main) +"xf" = ( +/obj/effect/turf_decal/trimline/dark/filled/line{ + dir = 1 + }, +/turf/open/floor/iron/dark/textured, +/area/ruin/syndicate_lava_base/bar) +"xl" = ( +/obj/effect/turf_decal/trimline/dark/filled/corner{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/dark/filled/corner{ + dir = 1 + }, +/obj/structure/cable, +/obj/effect/turf_decal/trimline/dark/filled/line, +/obj/effect/turf_decal/trimline/dark/filled/mid_joiner, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/main) +"xm" = ( +/obj/effect/turf_decal/trimline/dark/filled/line{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/dark/filled/line, +/obj/effect/turf_decal/trimline/dark/filled/mid_joiner, +/obj/effect/turf_decal/trimline/dark/filled/mid_joiner{ + dir = 1 + }, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/bar) +"xo" = ( +/obj/machinery/power/terminal{ + dir = 1 + }, +/obj/structure/cable, +/obj/structure/window/reinforced/plasma/spawner/directional/south, +/obj/structure/window/reinforced/plasma/spawner/directional/north, +/obj/effect/decal/cleanable/glitter/pink, +/obj/effect/decal/cleanable/glitter/blue, +/obj/effect/decal/cleanable/greenglow, +/obj/machinery/power/rtg/advanced, +/turf/open/floor/plating/reinforced, +/area/ruin/syndicate_lava_base/main) +"xq" = ( +/obj/structure/curtain/cloth/fancy, +/obj/structure/fake_stairs/wood, +/turf/open/floor/wood/large, +/area/ruin/syndicate_lava_base/bar) +"xs" = ( +/obj/effect/turf_decal/trimline/dark/filled/corner{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/dark/filled/line{ + dir = 10 + }, +/obj/effect/turf_decal/trimline/dark/filled/mid_joiner{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/dark/filled/mid_joiner, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/medbay) +"xA" = ( +/obj/effect/turf_decal/trimline/dark/filled/end{ + dir = 8 + }, +/obj/structure/marker_beacon/burgundy, +/turf/open/floor/iron/dark, +/area/ruin/syndicate_lava_base/main) +"xP" = ( +/obj/effect/turf_decal/trimline/dark/filled/line{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/dark/filled/mid_joiner{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/dark/filled/line{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/dark/filled/mid_joiner{ + dir = 4 + }, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/testlab) +"xS" = ( +/obj/effect/turf_decal/tile/dark/full, +/obj/effect/turf_decal/siding/dark/corner{ + dir = 1 + }, +/obj/effect/turf_decal/siding/dark/corner{ + dir = 4 + }, +/obj/machinery/oven/range{ + color = "#9d9ddd"; + name = "Interdyne range"; + light_color = "#9d9ddd" + }, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/bar) +"xY" = ( +/obj/effect/turf_decal/siding/dark{ + dir = 4 + }, +/obj/effect/turf_decal/siding/dark{ + dir = 8 + }, +/obj/item/gun/energy/floragun, +/obj/item/geneshears, +/obj/item/secateurs, +/obj/item/shovel/spade, +/obj/item/hatchet, +/obj/item/cultivator, +/obj/item/plant_analyzer, +/obj/structure/rack/shelf, +/obj/effect/turf_decal/tile/dark/full, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/bar) +"ya" = ( +/obj/machinery/atmospherics/components/binary/volume_pump{ + dir = 4; + name = "BZ Pump" + }, +/obj/structure/window/reinforced/survival_pod/spawner/directional/south, +/obj/effect/turf_decal/trimline/dark/filled/line, +/obj/effect/turf_decal/trimline/dark/filled/line{ + dir = 1 + }, +/turf/open/floor/iron/dark, +/area/ruin/syndicate_lava_base/testlab) +"yd" = ( +/obj/effect/turf_decal/trimline/dark/filled/line{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/dark/filled/mid_joiner{ + dir = 8 + }, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/medbay) +"yi" = ( +/obj/machinery/modular_shield/module/well{ + dir = 1 + }, +/obj/structure/marker_beacon/indigo, +/obj/effect/turf_decal/trimline/dark/filled/end{ + dir = 1 + }, +/obj/effect/turf_decal/box/blue/corners{ + dir = 4 + }, +/obj/effect/turf_decal/box/blue/corners{ + dir = 1 + }, +/turf/open/floor/iron/dark, +/area/ruin/syndicate_lava_base/main) +"yn" = ( +/obj/effect/turf_decal/stripes/red/line, +/obj/effect/turf_decal/stripes/red/line{ + dir = 1 + }, +/obj/effect/decal/cleanable/blood/old, +/obj/machinery/door/poddoor{ + id = "interdynegate"; + name = "Inderdyne Gate" + }, +/turf/open/floor/plating/elevatorshaft, +/area/ruin/syndicate_lava_base/cargo) +"yq" = ( +/obj/machinery/limbgrower/fullupgrade, +/obj/effect/turf_decal/tile/dark/full, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/medbay) +"ys" = ( +/obj/effect/turf_decal/trimline/dark/filled/line{ + dir = 5 + }, +/obj/effect/turf_decal/trimline/dark/filled/mid_joiner{ + dir = 4 + }, +/obj/structure/marker_beacon/burgundy, +/obj/machinery/bci_implanter{ + name = "Interdyne BCI implanter"; + color = "#adadcd"; + light_color = "#adadcd" + }, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/testlab) +"yu" = ( +/obj/effect/turf_decal/stripes/red/line, +/obj/structure/marker_beacon/burgundy, +/obj/structure/window/reinforced/survival_pod/spawner/directional/south{ + pixel_y = -4 + }, +/obj/effect/turf_decal/trimline/dark/filled/end, +/obj/effect/turf_decal/box/red/corners{ + dir = 4 + }, +/obj/effect/turf_decal/box/red/corners{ + dir = 1 + }, +/obj/effect/mob_spawn/ghost_role/human/interdyne_planetary_base/ice{ + dir = 1 + }, +/turf/open/floor/iron/dark, +/area/ruin/syndicate_lava_base/arrivals) +"yy" = ( +/obj/effect/turf_decal/trimline/dark/filled/line{ + dir = 5 + }, +/obj/effect/turf_decal/trimline/dark/filled/mid_joiner{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/dark/filled/mid_joiner{ + dir = 1 + }, +/obj/effect/turf_decal/siding/thinplating/dark{ + dir = 5 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/main) +"yB" = ( +/obj/structure/chair/sofa/bench/right{ + dir = 8 + }, +/obj/effect/turf_decal/siding/wood{ + dir = 4 + }, +/turf/open/floor/wood/large, +/area/ruin/syndicate_lava_base/main) +"yE" = ( +/turf/closed/wall/r_wall/syndicate, +/area/ruin/syndicate_lava_base/testlab) +"yF" = ( +/obj/structure/window/reinforced/survival_pod/spawner/directional/south, +/obj/item/storage/box/monkeycubes/syndicate{ + pixel_x = 3; + pixel_y = 3 + }, +/obj/item/storage/box/monkeycubes/syndicate{ + pixel_y = 5 + }, +/obj/item/slime_extract/grey{ + pixel_x = 2; + pixel_y = -2 + }, +/obj/item/slime_extract/grey, +/obj/item/slime_extract/grey{ + pixel_x = -2; + pixel_y = 2 + }, +/obj/structure/table/reinforced/plastitaniumglass, +/obj/effect/turf_decal/trimline/dark/filled/line, +/obj/effect/turf_decal/tile/dark/full, +/obj/effect/turf_decal/tile/dark/full, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 1 + }, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/testlab) +"yG" = ( +/obj/effect/turf_decal/trimline/dark/filled/mid_joiner{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/dark/filled/line{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/dark/filled/line{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/dark/filled/mid_joiner{ + dir = 4 + }, +/obj/effect/turf_decal/stripes/red/line{ + dir = 4 + }, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 4 + }, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/cargo) +"yJ" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 1 + }, +/turf/open/floor/carpet/red, +/area/ruin/syndicate_lava_base/bar) +"yM" = ( +/obj/structure/flora/bush/sparsegrass/style_random, +/obj/structure/flora/bush/flowers_br/style_random, +/obj/structure/marker_beacon/teal, +/turf/open/floor/grass, +/area/ruin/syndicate_lava_base/main) +"yP" = ( +/obj/effect/turf_decal/siding/wood/corner{ + dir = 4 + }, +/obj/structure/chair/sofa/corp/right, +/turf/open/floor/wood/large, +/area/ruin/syndicate_lava_base/bar) +"yQ" = ( +/turf/closed/wall/r_wall/syndicate/nodiagonal, +/area/ruin/syndicate_lava_base/medbay) +"yR" = ( +/obj/structure/rack/shelf, +/obj/effect/turf_decal/tile/dark/full, +/obj/machinery/light/directional/south{ + light_color = "#5148A6" + }, +/obj/item/gun/syringe/rapidsyringe, +/obj/item/gun/syringe/rapidsyringe, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/testlab) +"yY" = ( +/obj/structure/fans/tiny, +/obj/machinery/door/window/survival_pod/left/directional/south{ + req_access = list("syndicate"); + name = "Slime Pacification Chamber" + }, +/obj/effect/turf_decal/trimline/dark/filled/end{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/general/hidden, +/turf/open/floor/iron/dark, +/area/ruin/syndicate_lava_base/testlab) +"zd" = ( +/obj/machinery/suit_storage_unit/mining, +/obj/structure/marker_beacon/burgundy, +/obj/effect/turf_decal/tile/dark/full, +/obj/effect/turf_decal/stripes/blue{ + dir = 4 + }, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/cargo) +"zl" = ( +/obj/structure/chair/stool/bar, +/obj/effect/turf_decal/siding/wood, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/cable, +/turf/open/floor/wood/large, +/area/ruin/syndicate_lava_base/bar) +"zp" = ( +/obj/structure/table/reinforced/plastitaniumglass, +/obj/item/stack/sheet/mineral/plasma{ + amount = 15 + }, +/obj/effect/turf_decal/tile/dark/full, +/obj/machinery/reagentgrinder{ + pixel_x = -6; + pixel_y = 10 + }, +/obj/structure/marker_beacon/purple, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 4 + }, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/medbay) +"zu" = ( +/obj/machinery/vending/clothing{ + onstation = 0 + }, +/obj/effect/turf_decal/tile/dark/full, +/obj/structure/marker_beacon/olive, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/dormitories) +"zF" = ( +/turf/closed/wall/r_wall/syndicate/nodiagonal, +/area/ruin/syndicate_lava_base/dormitories) +"zI" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 1 + }, +/turf/closed/wall/r_wall/syndicate/nodiagonal, +/area/ruin/syndicate_lava_base/bar) +"zT" = ( +/obj/structure/bookcase/random, +/obj/effect/turf_decal/siding/wood{ + dir = 6 + }, +/turf/open/floor/carpet/red, +/area/ruin/syndicate_lava_base/bar) +"zX" = ( +/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/siding/wood{ + dir = 8 + }, +/turf/open/floor/wood/large, +/area/ruin/syndicate_lava_base/main) +"Ac" = ( +/obj/effect/turf_decal/tile/dark/full, +/obj/machinery/rnd/production/protolathe/offstation{ + name = "Interdyne protolathe"; + color = "#adadcd"; + light_color = "#adadcd" + }, +/obj/structure/marker_beacon/burgundy, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/testlab) +"Ad" = ( +/obj/effect/turf_decal/trimline/dark/filled/line{ + dir = 4 + }, +/obj/effect/turf_decal/stripes/blue{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/dark/filled/line{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/dark/filled/mid_joiner{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/dark/filled/mid_joiner{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/medbay) +"Ae" = ( +/obj/effect/turf_decal/tile/dark/full, +/obj/structure/marker_beacon/indigo, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 1 + }, +/obj/machinery/door/window/survival_pod/left/directional/south{ + req_access = list("syndicate"); + pixel_y = -4 + }, +/obj/effect/turf_decal/stripes/red/line, +/obj/structure/rack/shelf, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/arrivals) +"Am" = ( +/obj/machinery/suit_storage_unit/mining, +/obj/effect/turf_decal/tile/dark/full, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/cargo) +"AF" = ( +/obj/machinery/light/directional/north{ + bulb_colour = "#AC3CFF"; + color = "#A700FF"; + light_color = "#A700FF" + }, +/obj/effect/turf_decal/siding/wood{ + dir = 1 + }, +/turf/open/floor/wood/large, +/area/ruin/syndicate_lava_base/bar) +"AR" = ( +/obj/effect/decal/remains/human, +/obj/structure/flora/tree/pine/style_random, +/turf/open/misc/asteroid/snow/icemoon, +/area/icemoon/underground/explored) +"AT" = ( +/obj/machinery/hydroponics/constructable, +/obj/structure/marker_beacon/burgundy, +/turf/open/floor/grass, +/area/ruin/syndicate_lava_base/bar) +"Bf" = ( +/obj/machinery/computer/order_console/mining/interdyne, +/obj/effect/turf_decal/tile/dark/full, +/obj/effect/turf_decal/stripes/blue/corner{ + dir = 1 + }, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/cargo) +"Bn" = ( +/obj/effect/turf_decal/trimline/dark/filled/line{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/dark/filled/line, +/obj/effect/turf_decal/stripes/blue, +/obj/effect/turf_decal/stripes/blue{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/dark/filled/mid_joiner{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/dark/filled/mid_joiner, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/medbay) +"Bp" = ( +/obj/effect/turf_decal/tile/dark/full, +/obj/structure/window/reinforced/survival_pod/spawner/directional/east{ + pixel_x = 4 + }, +/obj/structure/marker_beacon/olive, +/obj/machinery/computer/crew/syndie{ + dir = 8 + }, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/medbay) +"Bt" = ( +/obj/effect/turf_decal/siding/dark{ + dir = 1 + }, +/obj/effect/turf_decal/siding/dark/corner, +/obj/effect/turf_decal/trimline/dark/filled/line{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/dark/filled/corner, +/obj/effect/turf_decal/trimline/dark/filled/corner{ + dir = 8 + }, +/turf/open/floor/iron/dark/textured, +/area/ruin/syndicate_lava_base/bar) +"BA" = ( +/turf/open/floor/engine, +/area/ruin/syndicate_lava_base/testlab) +"BB" = ( +/obj/structure/chair/comfy/brown{ + color = "#A46106"; + dir = 4 + }, +/turf/open/floor/wood/large, +/area/ruin/syndicate_lava_base/bar) +"BC" = ( +/obj/effect/turf_decal/trimline/dark/filled/line{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/dark/filled/mid_joiner{ + dir = 1 + }, +/obj/effect/turf_decal/stripes/blue, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/medbay) +"BE" = ( +/obj/structure/disposalpipe/segment, +/turf/closed/wall/r_wall/syndicate/nodiagonal, +/area/ruin/syndicate_lava_base/medbay) +"BF" = ( +/obj/structure/flora/rock/pile/icy/style_random, +/obj/structure/flora/tree/pine/style_random, +/turf/open/misc/asteroid/snow/icemoon, +/area/icemoon/underground/explored) +"BL" = ( +/obj/effect/turf_decal/trimline/dark/filled/line{ + dir = 5 + }, +/obj/effect/turf_decal/trimline/dark/filled/mid_joiner{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/dark/filled/mid_joiner{ + dir = 4 + }, +/obj/structure/marker_beacon/bronze, +/obj/machinery/camera/xray/directional/north{ + color = "#adadcd"; + name = "Inderdyne security camera"; + network = list("Interdyne"); + pixel_x = 10 + }, +/obj/machinery/deepfryer{ + color = "#adadcd"; + name = "Interdyne deep fryer"; + light_color = "#adadcd" + }, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/bar) +"BO" = ( +/obj/effect/turf_decal/siding/wood/corner{ + dir = 8 + }, +/obj/effect/turf_decal/siding/wood/corner{ + dir = 4 + }, +/turf/closed/wall/r_wall/syndicate, +/area/ruin/syndicate_lava_base/main) +"BR" = ( +/obj/effect/turf_decal/stripes/red/corner{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/dark/filled/corner{ + 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/dark/textured_large, +/area/ruin/syndicate_lava_base/cargo) +"BS" = ( +/obj/structure/table/reinforced/plastitaniumglass, +/obj/effect/turf_decal/tile/dark/full, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/medbay) +"BT" = ( +/obj/effect/turf_decal/trimline/dark/filled/corner{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/dark/filled/corner{ + dir = 8 + }, +/obj/effect/turf_decal/stripes/blue/corner{ + dir = 8 + }, +/obj/effect/turf_decal/stripes/blue/corner{ + dir = 1 + }, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/medbay) +"BZ" = ( +/obj/effect/turf_decal/trimline/dark/filled/line{ + dir = 5 + }, +/obj/effect/turf_decal/trimline/dark/filled/mid_joiner{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/dark/filled/mid_joiner{ + dir = 4 + }, +/obj/effect/turf_decal/stripes/blue/corner{ + dir = 8 + }, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/medbay) +"Ca" = ( +/obj/effect/turf_decal/stripes/red/line{ + dir = 5 + }, +/obj/effect/turf_decal/trimline/dark/filled/line{ + dir = 10 + }, +/obj/effect/turf_decal/trimline/dark/filled/mid_joiner, +/obj/effect/turf_decal/trimline/dark/filled/mid_joiner{ + dir = 8 + }, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/medbay) +"Cc" = ( +/obj/effect/turf_decal/stripes/red/line{ + dir = 1 + }, +/obj/effect/turf_decal/caution/red, +/obj/structure/marker_beacon/burgundy, +/obj/effect/turf_decal/trimline/dark/filled/corner{ + dir = 4 + }, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/cargo) +"Cd" = ( +/obj/structure/curtain/bounty{ + color = "#7d7d7d" + }, +/obj/effect/turf_decal/trimline/dark/filled/line{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/dark/filled/mid_joiner{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/dark/filled/line, +/obj/effect/turf_decal/trimline/dark/filled/mid_joiner, +/obj/structure/extinguisher_cabinet/directional/north, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/bar) +"Ce" = ( +/obj/structure/marker_beacon/teal, +/obj/structure/fans/tiny/forcefield, +/obj/effect/decal/cleanable/glitter/blue, +/obj/effect/turf_decal/trimline/dark/filled/line{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/window/reinforced/survival_pod/spawner/directional/east{ + pixel_x = 4 + }, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/testlab) +"Ch" = ( +/obj/structure/chair/sofa/bench/left{ + dir = 4 + }, +/obj/effect/turf_decal/siding/wood{ + dir = 9 + }, +/turf/open/floor/wood/large, +/area/ruin/syndicate_lava_base/main) +"Ci" = ( +/obj/machinery/modular_shield/module/charger{ + dir = 8 + }, +/obj/structure/marker_beacon/purple, +/obj/effect/turf_decal/trimline/dark/filled/mid_joiner{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/dark/filled/end{ + dir = 8 + }, +/obj/effect/turf_decal/box/blue/corners{ + dir = 1 + }, +/obj/effect/turf_decal/box/blue/corners{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/dark/filled/mid_joiner, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/main) +"Cj" = ( +/obj/structure/marker_beacon/burgundy, +/obj/structure/sign/poster/contraband/soviet_propaganda/directional/east, +/obj/effect/turf_decal/tile/dark/full, +/obj/machinery/suit_storage_unit/syndicate/chameleon{ + color = "#adadcd"; + light_color = "#adadcd" + }, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/main) +"CA" = ( +/obj/effect/turf_decal/stripes/red/corner{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/dark/filled/line{ + dir = 9 + }, +/obj/effect/turf_decal/trimline/dark/filled/mid_joiner{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/dark/filled/mid_joiner{ + dir = 8 + }, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/medbay) +"CC" = ( +/obj/machinery/vending/dorms{ + onstation = 0; + extended_inventory = 1 + }, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/main) +"CE" = ( +/obj/effect/turf_decal/siding/dark{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/dark/filled/line{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/dark/filled/line{ + dir = 8 + }, +/turf/open/floor/iron/dark/textured, +/area/ruin/syndicate_lava_base/bar) +"CG" = ( +/obj/effect/turf_decal/trimline/dark/filled/line{ + dir = 9 + }, +/obj/effect/turf_decal/trimline/dark/filled/mid_joiner{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/dark/filled/mid_joiner{ + dir = 8 + }, +/obj/effect/turf_decal/stripes/red/line{ + dir = 6 + }, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/cargo) +"CK" = ( +/obj/effect/turf_decal/trimline/dark/filled/line{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/dark/filled/corner, +/obj/effect/turf_decal/trimline/dark/filled/mid_joiner{ + dir = 8 + }, +/obj/structure/sink/directional/east, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/medbay) +"CM" = ( +/obj/effect/turf_decal/stripes/red/line, +/obj/structure/window/reinforced/survival_pod/spawner/directional/south{ + pixel_y = -4 + }, +/obj/effect/turf_decal/tile/dark/full, +/obj/structure/rack/shelf, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/arrivals) +"CN" = ( +/obj/effect/turf_decal/trimline/dark/filled/corner, +/obj/effect/turf_decal/trimline/dark/filled/corner{ + dir = 1 + }, +/obj/effect/turf_decal/siding/thinplating/dark/corner{ + dir = 1 + }, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 8 + }, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/main) +"CQ" = ( +/obj/structure/table/reinforced/plastitaniumglass, +/obj/machinery/cell_charger_multi{ + name = "Interdyne multi-cell charger"; + color = "#adadcd"; + pixel_y = 7; + light_color = "#adadcd" + }, +/obj/item/stock_parts/cell/bluespace, +/obj/item/stock_parts/cell/bluespace, +/obj/item/stock_parts/cell/bluespace, +/obj/item/stock_parts/cell/bluespace, +/obj/effect/turf_decal/tile/dark/full, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/testlab) +"CR" = ( +/obj/effect/turf_decal/stripes/red/line{ + dir = 1 + }, +/obj/effect/turf_decal/siding/dark{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/layer_manifold/supply/hidden, +/turf/open/floor/catwalk_floor/iron_dark, +/area/ruin/syndicate_lava_base/main) +"CX" = ( +/obj/effect/turf_decal/trimline/dark/filled/line{ + dir = 1 + }, +/obj/effect/turf_decal/stripes/red/line{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/dark/filled/mid_joiner{ + dir = 1 + }, +/obj/machinery/plumbing/growing_vat, +/obj/structure/window/reinforced/survival_pod/spawner/directional/north{ + pixel_y = 4 + }, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/medbay) +"CZ" = ( +/obj/effect/turf_decal/trimline/dark/filled/corner{ + dir = 4 + }, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/cargo) +"Df" = ( +/obj/effect/turf_decal/box/blue/corners{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/dark/filled/line{ + dir = 10 + }, +/obj/effect/turf_decal/trimline/dark/filled/corner{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/dark/filled/mid_joiner{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/dark/filled/mid_joiner, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/medbay) +"Dn" = ( +/obj/structure/marker_beacon/olive, +/obj/structure/flora/bush/sparsegrass/style_random, +/obj/structure/flora/bush/jungle/c/style_random, +/turf/open/floor/grass, +/area/ruin/syndicate_lava_base/main) +"Dr" = ( +/obj/effect/turf_decal/trimline/dark/filled/line{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/dark/filled/mid_joiner{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/dark/filled/line{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/dark/filled/mid_joiner{ + dir = 8 + }, +/obj/effect/turf_decal/stripes/red/line{ + dir = 8 + }, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 8 + }, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/cargo) +"DA" = ( +/obj/effect/turf_decal/trimline/dark/filled/line{ + dir = 10 + }, +/obj/effect/turf_decal/trimline/dark/filled/mid_joiner, +/obj/effect/turf_decal/trimline/dark/filled/mid_joiner{ + dir = 8 + }, +/obj/machinery/button/door/directional/west{ + base_icon_state = "tram"; + icon_state = "tram"; + req_access = list("syndicate"); + id = "interdynekitchen"; + name = "Interdyne Storm Shutters Kitchen" + }, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/bar) +"DC" = ( +/obj/machinery/modular_shield/module/node{ + dir = 8 + }, +/obj/effect/decal/cleanable/glitter/blue, +/turf/open/floor/circuit, +/area/ruin/syndicate_lava_base/main) +"DE" = ( +/obj/machinery/shower/directional/south, +/obj/structure/drain, +/obj/structure/marker_beacon/violet, +/obj/effect/turf_decal/trimline/dark/filled/line{ + dir = 9 + }, +/obj/item/soap, +/obj/structure/curtain/bounty{ + color = "#7d7d7d"; + alpha = 180 + }, +/obj/machinery/button/door/directional/west{ + id = "IDyneWC"; + normaldoorcontrol = 1; + specialfunctions = 4; + name = "Door Lock" + }, +/turf/open/floor/iron/dark/small, +/area/ruin/syndicate_lava_base/dormitories) +"DG" = ( +/obj/effect/turf_decal/tile/dark_red{ + dir = 4 + }, +/obj/machinery/light/directional/south{ + light_color = "#5148A6" + }, +/obj/structure/window/reinforced/survival_pod/spawner/directional/west{ + pixel_x = -4 + }, +/turf/open/floor/engine, +/area/ruin/syndicate_lava_base/testlab) +"DH" = ( +/obj/effect/turf_decal/siding/wood, +/turf/open/floor/wood/large, +/area/ruin/syndicate_lava_base/main) +"DI" = ( +/obj/effect/turf_decal/tile/dark/full, +/obj/structure/marker_beacon/burgundy, +/obj/structure/table/reinforced/plastitaniumglass, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/bar) +"DL" = ( +/obj/structure/marker_beacon/bronze, +/obj/effect/turf_decal/trimline/dark/filled/line{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/dark/filled/mid_joiner{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/dark/filled/line, +/obj/effect/turf_decal/trimline/dark/filled/mid_joiner, +/obj/effect/turf_decal/stripes/red/line, +/obj/machinery/power/apc/auto_name/directional/north, +/obj/machinery/airalarm/directional/north{ + req_access = list("syndicate"); + pixel_y = 42 + }, +/obj/structure/cable, +/obj/effect/mapping_helpers/apc/syndicate_access, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/cargo) +"DT" = ( +/obj/structure/hedge, +/obj/effect/turf_decal/siding/wood{ + dir = 9 + }, +/turf/open/floor/wood/large, +/area/ruin/syndicate_lava_base/main) +"DX" = ( +/obj/effect/turf_decal/trimline/dark/filled/line{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/dark/filled/mid_joiner{ + dir = 1 + }, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/testlab) +"DZ" = ( +/obj/effect/turf_decal/tile/dark/full, +/obj/item/disk/ammo_workbench/advanced, +/obj/machinery/module_duplicator{ + name = "Interdyne module duplicator"; + color = "#adadcd"; + light_color = "#adadcd" + }, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/testlab) +"Eh" = ( +/obj/effect/turf_decal/trimline/dark/filled/line, +/obj/effect/turf_decal/trimline/dark/filled/line{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/dark/filled/mid_joiner, +/obj/effect/turf_decal/trimline/dark/filled/mid_joiner{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/testlab) +"El" = ( +/obj/structure/flora/bush/fullgrass/style_random, +/obj/structure/marker_beacon/olive, +/turf/open/floor/grass, +/area/ruin/syndicate_lava_base/main) +"En" = ( +/obj/effect/turf_decal/trimline/dark/filled/corner{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/dark/filled/corner{ + dir = 8 + }, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/bar) +"Eq" = ( +/obj/machinery/washing_machine{ + name = "Interdyne washing machine"; + color = "#adadcd"; + pixel_y = 5; + light_color = "#adadcd" + }, +/obj/effect/turf_decal/tile/dark/full, +/obj/structure/bedsheetbin{ + color = "#adadcd"; + pixel_y = 14; + pixel_x = -1 + }, +/obj/machinery/camera/xray/directional/north{ + color = "#adadcd"; + name = "Inderdyne security camera"; + network = list("Interdyne") + }, +/obj/machinery/airalarm/directional/north{ + req_access = list("syndicate"); + pixel_y = 42 + }, +/obj/machinery/power/apc/auto_name/directional/north, +/obj/effect/mapping_helpers/apc/syndicate_access, +/obj/structure/cable, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/dormitories) +"Er" = ( +/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/ruin/syndicate_lava_base/medbay) +"EA" = ( +/obj/structure/marker_beacon/teal, +/obj/structure/fans/tiny/forcefield, +/obj/effect/decal/cleanable/glitter/blue, +/obj/effect/turf_decal/trimline/dark/filled/line{ + dir = 8 + }, +/obj/structure/window/reinforced/survival_pod/spawner/directional/west{ + pixel_x = -4 + }, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/bar) +"ED" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 9 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/cable, +/turf/open/floor/wood/large, +/area/ruin/syndicate_lava_base/main) +"EJ" = ( +/obj/structure/bookcase/random, +/obj/structure/marker_beacon/bronze, +/turf/open/floor/wood/large, +/area/ruin/syndicate_lava_base/bar) +"EK" = ( +/obj/effect/turf_decal/trimline/dark/filled/line{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/dark/filled/line, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron/dark/textured, +/area/ruin/syndicate_lava_base/arrivals) +"EL" = ( +/obj/structure/flora/bush/flowers_br/style_random, +/obj/structure/flora/bush/sparsegrass/style_random, +/obj/structure/marker_beacon/teal, +/obj/structure/flora/tree/jungle/small/style_random, +/turf/open/floor/grass, +/area/ruin/syndicate_lava_base/main) +"EO" = ( +/obj/structure/marker_beacon/burgundy, +/obj/effect/turf_decal/trimline/dark/filled/corner{ + dir = 4 + }, +/obj/effect/turf_decal/stripes/red/corner{ + dir = 4 + }, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/cargo) +"EP" = ( +/obj/effect/turf_decal/trimline/dark/filled/corner, +/obj/effect/turf_decal/trimline/dark/filled/line{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/dark/filled/mid_joiner{ + dir = 8 + }, +/obj/effect/turf_decal/siding/thinplating/dark{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/main) +"EQ" = ( +/obj/effect/turf_decal/tile/dark/full, +/obj/structure/marker_beacon/burgundy, +/obj/machinery/chem_master/condimaster{ + name = "Interdyne BrewMaster"; + color = "#adadcd"; + light_color = "#adadcd" + }, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/bar) +"ES" = ( +/obj/machinery/vending/dinnerware{ + onstation = 0 + }, +/obj/effect/turf_decal/tile/dark/full, +/obj/structure/marker_beacon/indigo, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/bar) +"EU" = ( +/obj/machinery/vending/autodrobe{ + onstation = 0 + }, +/obj/effect/turf_decal/tile/dark/full, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/dormitories) +"EV" = ( +/obj/machinery/modular_shield/module/node{ + dir = 4 + }, +/obj/effect/decal/cleanable/glitter/blue, +/turf/open/floor/circuit, +/area/ruin/syndicate_lava_base/main) +"Fi" = ( +/obj/structure/fans/tiny, +/obj/effect/turf_decal/trimline/dark/filled/line{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/dark/filled/line, +/obj/effect/turf_decal/trimline/dark/filled/mid_joiner, +/obj/effect/turf_decal/trimline/dark/filled/mid_joiner{ + dir = 1 + }, +/obj/machinery/door/window/survival_pod/left/directional/west{ + req_access = list("syndicate"); + pixel_x = -4 + }, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/medbay) +"Fk" = ( +/obj/effect/turf_decal/stripes/red/line, +/obj/effect/turf_decal/stripes/red/line{ + dir = 1 + }, +/obj/machinery/door/poddoor{ + id = "interdynegate"; + name = "Inderdyne Gate" + }, +/turf/open/floor/plating/elevatorshaft, +/area/ruin/syndicate_lava_base/cargo) +"Fl" = ( +/obj/effect/turf_decal/tile/dark/full, +/obj/structure/rack/shelf, +/obj/item/storage/box/stockparts/deluxe, +/obj/item/storage/box/stockparts/deluxe, +/obj/machinery/light/directional/south{ + light_color = "#5148A6" + }, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/cargo) +"Fn" = ( +/obj/effect/turf_decal/tile/dark/full, +/obj/structure/marker_beacon/bronze, +/obj/structure/table/reinforced/plastitaniumglass, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/bar) +"Fo" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 8 + }, +/turf/open/floor/carpet/red, +/area/ruin/syndicate_lava_base/bar) +"Fq" = ( +/obj/structure/cable, +/obj/machinery/power/rtg/advanced, +/obj/structure/window/reinforced/plasma/spawner/directional/south, +/obj/structure/window/reinforced/plasma/spawner/directional/east, +/obj/structure/window/reinforced/plasma/spawner/directional/north, +/obj/effect/decal/cleanable/glitter/pink, +/obj/effect/decal/cleanable/glitter/blue, +/obj/effect/decal/cleanable/greenglow, +/turf/open/floor/plating/reinforced, +/area/ruin/syndicate_lava_base/main) +"Fu" = ( +/obj/effect/turf_decal/trimline/dark/filled/line{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/dark/filled/line{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/dark/filled/mid_joiner{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/dark/filled/mid_joiner{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/medbay) +"Fx" = ( +/obj/effect/turf_decal/siding/wood/corner{ + dir = 8 + }, +/turf/open/floor/wood/large, +/area/ruin/syndicate_lava_base/main) +"Fy" = ( +/obj/effect/turf_decal/trimline/dark/filled/line{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/dark/filled/mid_joiner{ + dir = 4 + }, +/obj/effect/turf_decal/stripes/blue/corner{ + dir = 1 + }, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/medbay) +"Fz" = ( +/obj/effect/turf_decal/trimline/dark/filled/mid_joiner{ + dir = 8 + }, +/obj/effect/turf_decal/tile/dark/full, +/obj/machinery/rnd/destructive_analyzer{ + name = "Interdyne destructive analyzer"; + color = "#adadcd"; + light_color = "#adadcd" + }, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/testlab) +"FF" = ( +/obj/structure/marker_beacon/burgundy, +/obj/effect/turf_decal/trimline/dark/filled/corner{ + dir = 1 + }, +/obj/effect/turf_decal/stripes/red/corner{ + dir = 1 + }, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/cargo) +"FH" = ( +/obj/effect/turf_decal/stripes/red/corner{ + dir = 1 + }, +/obj/machinery/mining_weather_monitor/directional/north{ + name = "Interdyne Weather Radar"; + color = "#adadcd"; + light_color = "#adadcd" + }, +/obj/effect/turf_decal/trimline/dark/filled/line{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/dark/filled/mid_joiner{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/dark/filled/corner, +/obj/effect/turf_decal/stripes/red/corner, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/cargo) +"FK" = ( +/obj/structure/chair/sofa/bench/left{ + dir = 4 + }, +/obj/effect/turf_decal/siding/wood{ + dir = 8 + }, +/turf/open/floor/wood/large, +/area/ruin/syndicate_lava_base/main) +"FO" = ( +/obj/effect/turf_decal/trimline/dark/filled/line{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/dark/filled/mid_joiner{ + dir = 4 + }, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/bar) +"FQ" = ( +/obj/effect/decal/cleanable/blood/old, +/turf/open/misc/asteroid/snow/icemoon, +/area/icemoon/underground/explored) +"FS" = ( +/obj/structure/cable, +/obj/machinery/power/rtg/advanced, +/obj/structure/window/reinforced/plasma/spawner/directional/south, +/obj/structure/window/reinforced/plasma/spawner/directional/west, +/obj/structure/window/reinforced/plasma/spawner/directional/north, +/obj/effect/decal/cleanable/glitter/pink, +/obj/effect/decal/cleanable/glitter/blue, +/obj/effect/decal/cleanable/greenglow, +/turf/open/floor/plating/reinforced, +/area/ruin/syndicate_lava_base/main) +"FT" = ( +/obj/structure/window/reinforced/survival_pod/spawner/directional/south, +/obj/structure/window/reinforced/survival_pod/spawner/directional/west, +/obj/machinery/atmospherics/components/unary/vent_pump/siphon/monitored{ + chamber_id = "interdyneserver"; + dir = 1; + external_pressure_bound = 120; + name = "server vent" + }, +/turf/open/floor/circuit/telecomms, +/area/ruin/syndicate_lava_base/testlab) +"FU" = ( +/obj/effect/turf_decal/stripes/red/corner{ + dir = 1 + }, +/obj/machinery/button/door{ + id = "syndie_lavaland_vault"; + name = "Vault Bolt Control"; + normaldoorcontrol = 1; + pixel_x = -8; + pixel_y = 24; + req_access = list("syndicate"); + specialfunctions = 4 + }, +/obj/effect/turf_decal/trimline/dark/filled/corner, +/obj/effect/turf_decal/trimline/dark/filled/corner{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/dark/filled/line{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/dark/filled/mid_joiner{ + dir = 1 + }, +/obj/effect/turf_decal/siding/thinplating/dark/corner{ + dir = 4 + }, +/obj/structure/cable, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/main) +"FV" = ( +/obj/effect/turf_decal/tile/dark/full, +/obj/machinery/computer/camera_advanced{ + dir = 4 + }, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/testlab) +"Gb" = ( +/obj/effect/turf_decal/trimline/dark/filled/line{ + dir = 10 + }, +/obj/effect/turf_decal/trimline/dark/filled/corner{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/dark/filled/mid_joiner, +/obj/effect/turf_decal/trimline/dark/filled/mid_joiner{ + dir = 8 + }, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/bar) +"Gd" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 6 + }, +/turf/open/floor/wood/large, +/area/ruin/syndicate_lava_base/main) +"Gh" = ( +/obj/structure/lattice/catwalk/mining, +/obj/structure/railing{ + dir = 8 + }, +/turf/open/lava/plasma/ice_moon, +/area/icemoon/underground/explored) +"Gl" = ( +/obj/effect/turf_decal/trimline/dark/filled/line, +/obj/effect/turf_decal/trimline/dark/filled/corner{ + dir = 1 + }, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron/dark/small, +/area/ruin/syndicate_lava_base/dormitories) +"Gm" = ( +/obj/effect/turf_decal/trimline/dark/filled/mid_joiner, +/obj/effect/turf_decal/trimline/dark/filled/line, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/testlab) +"Gp" = ( +/obj/structure/window/reinforced/survival_pod/spawner/directional/south, +/obj/effect/turf_decal/trimline/dark/filled/line, +/obj/structure/table/reinforced/plastitaniumglass, +/obj/item/storage/bag/xeno, +/obj/item/storage/box/syringes{ + pixel_x = 5; + pixel_y = 10 + }, +/obj/item/storage/backpack/duffelbag/syndie, +/obj/effect/turf_decal/tile/dark/full, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 1 + }, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/testlab) +"Gr" = ( +/obj/structure/marker_beacon/teal, +/obj/structure/fans/tiny/forcefield, +/obj/effect/decal/cleanable/glitter/blue, +/obj/effect/turf_decal/arrows/blue, +/obj/effect/turf_decal/arrows/blue{ + dir = 1 + }, +/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/dark/textured_large, +/area/ruin/syndicate_lava_base/medbay) +"Gs" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 1 + }, +/obj/structure/hedge, +/turf/open/floor/wood/large, +/area/ruin/syndicate_lava_base/bar) +"Gv" = ( +/obj/effect/turf_decal/trimline/dark/filled/corner, +/obj/effect/turf_decal/stripes/blue/corner, +/obj/effect/turf_decal/trimline/dark/filled/line{ + dir = 9 + }, +/obj/effect/turf_decal/trimline/dark/filled/mid_joiner{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/dark/filled/mid_joiner{ + dir = 8 + }, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/medbay) +"Gx" = ( +/obj/effect/turf_decal/trimline/dark/filled/corner{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/dark/filled/line{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/dark/filled/mid_joiner{ + dir = 1 + }, +/obj/effect/turf_decal/siding/thinplating/dark{ + dir = 1 + }, +/obj/structure/cable, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/main) +"GA" = ( +/obj/effect/turf_decal/arrows/blue{ + dir = 1 + }, +/obj/effect/turf_decal/box/red/corners{ + dir = 1 + }, +/obj/effect/turf_decal/box/red/corners{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/dark/filled/corner, +/obj/effect/turf_decal/trimline/dark/filled/corner{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/dark/filled/corner{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/dark/filled/corner{ + dir = 4 + }, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/main) +"GB" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 9 + }, +/turf/open/floor/carpet/red, +/area/ruin/syndicate_lava_base/bar) +"GD" = ( +/obj/effect/turf_decal/siding/wood/corner{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/cable, +/turf/open/floor/wood/large, +/area/ruin/syndicate_lava_base/bar) +"GJ" = ( +/obj/effect/turf_decal/stripes/red/line{ + dir = 9 + }, +/obj/effect/turf_decal/trimline/dark/filled/line{ + dir = 6 + }, +/obj/effect/turf_decal/trimline/dark/filled/mid_joiner{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/dark/filled/mid_joiner, +/obj/machinery/duct, +/obj/structure/window/reinforced/survival_pod/spawner/directional/east{ + pixel_x = 4 + }, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/medbay) +"GM" = ( +/obj/effect/turf_decal/stripes/red/line{ + dir = 1 + }, +/obj/structure/window/reinforced/survival_pod/spawner/directional/north{ + pixel_y = 4 + }, +/obj/effect/turf_decal/tile/dark/full, +/obj/structure/rack/shelf, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/arrivals) +"GQ" = ( +/obj/effect/turf_decal/trimline/dark/filled/line{ + dir = 9 + }, +/obj/effect/turf_decal/stripes/red/line{ + dir = 6 + }, +/obj/effect/turf_decal/trimline/dark/filled/mid_joiner{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/dark/filled/mid_joiner{ + dir = 8 + }, +/obj/structure/marker_beacon/burgundy, +/obj/structure/window/reinforced/survival_pod/spawner/directional/north{ + pixel_y = 4 + }, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/medbay) +"Hb" = ( +/obj/structure/chair/sofa/corp/right{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/dark/filled/line{ + dir = 9 + }, +/obj/effect/turf_decal/trimline/dark/filled/mid_joiner{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/dark/filled/mid_joiner{ + dir = 8 + }, +/obj/machinery/holopad/secure{ + pixel_x = -5; + name = "Interdyne holopad"; + pixel_y = 5 + }, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/testlab) +"Hn" = ( +/obj/effect/turf_decal/tile/dark/full, +/obj/machinery/plumbing/input{ + dir = 1 + }, +/obj/structure/closet/secure_closet/cytology{ + anchored = 1; + pixel_x = 9; + locked = 0; + req_access = list("syndicate") + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/medbay) +"Ho" = ( +/obj/effect/turf_decal/trimline/dark/filled/line{ + dir = 10 + }, +/obj/effect/turf_decal/trimline/dark/filled/mid_joiner{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/dark/filled/mid_joiner, +/obj/structure/closet/crate/bin, +/obj/machinery/light/directional/south{ + light_color = "#5148A6" + }, +/obj/machinery/button/door/directional/west{ + base_icon_state = "tram"; + icon_state = "tram"; + req_access = list("syndicate"); + id = "interdynemed"; + name = "Interdyne Storm Shutters Med" + }, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/medbay) +"Hs" = ( +/obj/machinery/door/window/survival_pod/left/directional/south{ + req_access = list("syndicate"); + name = "Slime Euthanization Chamber" + }, +/turf/open/floor/circuit/telecomms, +/area/ruin/syndicate_lava_base/testlab) +"Hy" = ( +/obj/effect/turf_decal/stripes/red/corner{ + dir = 8 + }, +/obj/structure/drain, +/obj/machinery/shower/directional/west, +/obj/effect/turf_decal/trimline/dark/filled/line{ + dir = 6 + }, +/obj/effect/turf_decal/trimline/dark/filled/mid_joiner, +/obj/effect/turf_decal/trimline/dark/filled/mid_joiner{ + dir = 4 + }, +/obj/effect/turf_decal/box/white/corners, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/cargo) +"HF" = ( +/obj/effect/spawner/structure/window/reinforced/plasma/plastitanium, +/turf/open/floor/plating/reinforced, +/area/ruin/syndicate_lava_base/testlab) +"HI" = ( +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/bar) +"HL" = ( +/obj/effect/turf_decal/stripes/red/corner{ + dir = 4 + }, +/obj/machinery/button/door/directional/north{ + name = "Interdyne Gate"; + id = "interdynegate"; + icon_state = "tram"; + base_icon_state = "tram"; + light_color = "#22CCFF"; + pixel_x = 7; + pixel_y = 32; + req_access = list("syndicate") + }, +/obj/effect/turf_decal/trimline/dark/filled/line{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/dark/filled/mid_joiner{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/dark/filled/corner{ + dir = 8 + }, +/obj/effect/turf_decal/stripes/red/corner{ + dir = 8 + }, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/cargo) +"HN" = ( +/obj/machinery/light/directional/west{ + bulb_colour = "#2C3BFF"; + color = "#0012FF"; + light_color = "#0012FF" + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/cable, +/turf/open/floor/wood/large, +/area/ruin/syndicate_lava_base/main) +"HU" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 8 + }, +/obj/machinery/door/window/survival_pod/left/directional/west{ + req_access = list("syndicate"); + pixel_x = -4 + }, +/turf/open/floor/wood/large, +/area/ruin/syndicate_lava_base/main) +"Ib" = ( +/obj/structure/table/reinforced/plastitaniumglass, +/obj/machinery/door/window/survival_pod/left/directional/north, +/obj/effect/turf_decal/tile/dark/full, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/medbay) +"Ie" = ( +/obj/effect/turf_decal/trimline/dark/filled/corner{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/dark/filled/line{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/dark/filled/mid_joiner{ + dir = 8 + }, +/obj/effect/turf_decal/siding/thinplating/dark{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/main) +"If" = ( +/obj/structure/marker_beacon/bronze, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/cable, +/turf/open/floor/wood/large, +/area/ruin/syndicate_lava_base/main) +"Ih" = ( +/obj/structure/flora/bush/sparsegrass/style_random, +/obj/structure/flora/bush/flowers_yw/style_random, +/obj/structure/marker_beacon/bronze, +/turf/open/floor/grass, +/area/ruin/syndicate_lava_base/main) +"Ij" = ( +/obj/structure/table/reinforced/plastitaniumglass, +/obj/item/healthanalyzer/advanced, +/obj/structure/disposalpipe/segment{ + dir = 10 + }, +/obj/effect/turf_decal/tile/dark/full, +/obj/item/reagent_containers/spray/cleaner{ + pixel_x = -15; + pixel_y = 2 + }, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/medbay) +"Im" = ( +/obj/structure/marker_beacon/burgundy, +/turf/open/misc/asteroid/snow/icemoon, +/area/icemoon/underground/explored) +"Ip" = ( +/obj/structure/table/reinforced/plastitaniumglass, +/obj/structure/marker_beacon/burgundy, +/obj/item/storage/part_replacer{ + pixel_y = 6 + }, +/obj/effect/turf_decal/tile/dark/full, +/obj/item/storage/toolbox/syndicate, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/main) +"Is" = ( +/obj/effect/turf_decal/trimline/dark/filled/line{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/dark/filled/line, +/obj/effect/turf_decal/stripes/blue, +/obj/effect/turf_decal/trimline/dark/filled/mid_joiner{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/dark/filled/mid_joiner, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/medbay) +"Iv" = ( +/obj/effect/turf_decal/trimline/dark/filled/line, +/turf/open/floor/iron/dark/textured, +/area/ruin/syndicate_lava_base/bar) +"Iy" = ( +/turf/open/misc/asteroid/snow/icemoon, +/area/icemoon/underground/explored) +"Iz" = ( +/obj/effect/spawner/structure/window/reinforced/plasma/plastitanium, +/obj/machinery/door/poddoor{ + id = "interdynernd"; + name = "Interdyne Storm Shutters RnD" + }, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/testlab) +"IA" = ( +/obj/effect/turf_decal/trimline/dark/filled/end{ + dir = 1 + }, +/obj/effect/turf_decal/box/red/corners, +/obj/effect/turf_decal/box/red/corners{ + dir = 8 + }, +/obj/effect/turf_decal/stripes/red/line{ + dir = 1 + }, +/obj/structure/marker_beacon/burgundy, +/obj/structure/window/reinforced/survival_pod/spawner/directional/north{ + pixel_y = 4 + }, +/obj/effect/mob_spawn/ghost_role/human/interdyne_planetary_base/shaftminer/ice, +/turf/open/floor/iron/dark, +/area/ruin/syndicate_lava_base/arrivals) +"IM" = ( +/obj/structure/table/reinforced/plastitaniumglass, +/obj/item/storage/backpack/duffelbag/syndie/surgery, +/obj/machinery/defibrillator_mount/loaded{ + pixel_x = 28 + }, +/obj/effect/turf_decal/tile/dark/full, +/obj/item/autopsy_scanner, +/obj/item/healthanalyzer/advanced, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/medbay) +"IP" = ( +/obj/effect/turf_decal/tile/dark/full, +/obj/machinery/vending/boozeomat/syndicate_access{ + onstation = 0 + }, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/bar) +"IS" = ( +/obj/effect/turf_decal/trimline/dark/filled/corner{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/medbay) +"Jd" = ( +/obj/effect/turf_decal/trimline/dark/filled/line{ + dir = 10 + }, +/obj/effect/turf_decal/trimline/dark/filled/mid_joiner, +/obj/effect/turf_decal/trimline/dark/filled/mid_joiner{ + dir = 8 + }, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/bar) +"Jq" = ( +/obj/structure/bookcase/random, +/turf/open/floor/wood/large, +/area/ruin/syndicate_lava_base/bar) +"Jx" = ( +/obj/structure/flora/rock/icy/style_random, +/turf/open/misc/asteroid/snow/icemoon, +/area/icemoon/underground/explored) +"JA" = ( +/obj/structure/flora/bush/sparsegrass/style_random, +/turf/open/floor/grass, +/area/ruin/syndicate_lava_base/main) +"JM" = ( +/obj/structure/flora/grass/brown/style_random, +/obj/structure/flora/grass/brown/style_random, +/turf/open/misc/asteroid/snow/icemoon, +/area/icemoon/underground/explored) +"JN" = ( +/obj/effect/turf_decal/stripes/red/line{ + dir = 1 + }, +/obj/effect/turf_decal/caution/stand_clear/red, +/obj/structure/cable, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/cargo) +"JP" = ( +/obj/item/stack/sheet/plasteel/fifty, +/obj/item/stack/sheet/glass/fifty, +/obj/item/stack/sheet/iron/fifty, +/obj/effect/turf_decal/bot_red, +/obj/effect/turf_decal/tile/dark/full, +/obj/structure/closet/crate/secure/gear{ + req_access = list("syndicate"); + anchored = 1 + }, +/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/dark/textured_large, +/area/ruin/syndicate_lava_base/cargo) +"JQ" = ( +/obj/machinery/suit_storage_unit/mining, +/obj/effect/turf_decal/tile/dark/full, +/obj/effect/turf_decal/stripes/blue/corner{ + dir = 4 + }, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/cargo) +"Kb" = ( +/obj/effect/turf_decal/arrows/red, +/obj/effect/turf_decal/box/red/corners, +/obj/effect/turf_decal/box/red/corners{ + dir = 8 + }, +/obj/structure/cable, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/cargo) +"Kg" = ( +/obj/effect/turf_decal/tile/dark/full, +/obj/effect/turf_decal/stripes/blue{ + dir = 1 + }, +/obj/machinery/stasis{ + dir = 8 + }, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/medbay) +"Kl" = ( +/obj/effect/turf_decal/trimline/dark/filled/line{ + dir = 5 + }, +/obj/effect/turf_decal/trimline/dark/filled/corner{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/dark/filled/mid_joiner{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/dark/filled/mid_joiner{ + dir = 1 + }, +/obj/effect/turf_decal/stripes/red/corner{ + dir = 8 + }, +/obj/effect/turf_decal/box/white/corners{ + dir = 4 + }, +/obj/effect/turf_decal/stripes/blue/corner, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/cargo) +"Km" = ( +/obj/structure/fans/tiny, +/obj/machinery/door/window/survival_pod/left/directional/south{ + req_access = list("syndicate") + }, +/obj/machinery/shower/directional/west, +/obj/structure/drain/big, +/obj/effect/turf_decal/trimline/dark/filled/end, +/obj/effect/turf_decal/trimline/dark/filled/mid_joiner{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/dark/filled/mid_joiner{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/medbay) +"Kn" = ( +/obj/structure/window/reinforced/survival_pod/spawner/directional/west{ + pixel_x = -4 + }, +/obj/effect/turf_decal/trimline/dark/filled/corner{ + dir = 4 + }, +/obj/machinery/atmospherics/components/binary/volume_pump{ + dir = 1 + }, +/turf/open/floor/catwalk_floor/iron_dark, +/area/ruin/syndicate_lava_base/main) +"Ko" = ( +/obj/structure/fans/tiny/forcefield, +/obj/structure/marker_beacon/teal, +/obj/effect/decal/cleanable/glitter/blue, +/obj/effect/turf_decal/trimline/dark/filled/line{ + dir = 8 + }, +/obj/structure/window/reinforced/survival_pod/spawner/directional/west{ + pixel_x = -4 + }, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/medbay) +"Kz" = ( +/obj/effect/turf_decal/siding/wood/corner, +/obj/effect/turf_decal/siding/wood/corner{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/cable, +/turf/open/floor/wood/large, +/area/ruin/syndicate_lava_base/main) +"KC" = ( +/obj/effect/turf_decal/tile/dark/full, +/turf/closed/wall/r_wall/syndicate/nodiagonal, +/area/ruin/syndicate_lava_base/medbay) +"KD" = ( +/obj/effect/turf_decal/trimline/dark/filled/line{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/dark/filled/line{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/dark/filled/mid_joiner{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/dark/filled/mid_joiner{ + dir = 8 + }, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/main) +"KP" = ( +/obj/effect/turf_decal/tile/dark/full, +/obj/machinery/vending/medical/syndicate_access{ + onstation = 0; + contraband = list(/obj/item/storage/box/gum/happiness=3, /obj/item/storage/box/hug/medical=3, /obj/item/mmi/syndie/interdyne=3); + extended_inventory = 1; + color = "#adadcd"; + light_color = "#adadcd" + }, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/medbay) +"KS" = ( +/obj/effect/turf_decal/trimline/dark/filled/corner{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/dark/filled/corner{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/dark/filled/line{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/dark/filled/mid_joiner{ + dir = 4 + }, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/testlab) +"KW" = ( +/obj/effect/turf_decal/trimline/dark/filled/line{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/dark/filled/mid_joiner{ + dir = 4 + }, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 8 + }, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/main) +"KY" = ( +/obj/effect/turf_decal/trimline/dark/filled/mid_joiner, +/obj/effect/turf_decal/box/white/corners{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/dark/filled/line, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/cargo) +"Lc" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 8 + }, +/turf/open/floor/wood/large, +/area/ruin/syndicate_lava_base/main) +"Ld" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/duct, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/medbay) +"Le" = ( +/obj/effect/turf_decal/tile/dark/full, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/marker_beacon/burgundy, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/testlab) +"Lf" = ( +/obj/effect/turf_decal/trimline/dark/filled/mid_joiner{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/dark/filled/line{ + dir = 6 + }, +/obj/structure/marker_beacon/burgundy, +/obj/machinery/recharge_station{ + name = "Interdyne recharging station"; + color = "#adadcd"; + light_color = "#adadcd" + }, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/testlab) +"Lg" = ( +/obj/machinery/atmospherics/components/unary/passive_vent{ + dir = 4 + }, +/turf/open/floor/engine, +/area/ruin/syndicate_lava_base/main) +"Li" = ( +/obj/structure/chair/stool/bar{ + dir = 4 + }, +/obj/effect/turf_decal/siding/wood, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/cable, +/turf/open/floor/wood/large, +/area/ruin/syndicate_lava_base/bar) +"Lm" = ( +/obj/effect/turf_decal/trimline/dark/filled/line{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/dark/filled/line{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/dark/filled/mid_joiner{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/dark/filled/mid_joiner{ + dir = 4 + }, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/testlab) +"Lp" = ( +/obj/effect/turf_decal/tile/dark/full, +/obj/item/choice_beacon/music, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 1 + }, +/obj/structure/table/wood/fancy/black, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/bar) +"Lw" = ( +/obj/effect/turf_decal/siding/wood/end{ + dir = 1 + }, +/turf/open/floor/carpet/red, +/area/ruin/syndicate_lava_base/bar) +"LA" = ( +/obj/structure/marker_beacon/teal, +/obj/structure/fans/tiny/forcefield, +/obj/effect/decal/cleanable/glitter/blue, +/obj/effect/turf_decal/trimline/dark/filled/line{ + dir = 8 + }, +/obj/structure/window/reinforced/survival_pod/spawner/directional/west{ + pixel_x = -4 + }, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/testlab) +"LB" = ( +/obj/effect/turf_decal/arrows/blue{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/dark/filled/line{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/medbay) +"LC" = ( +/obj/machinery/turretid{ + ailock = 1; + control_area = "/area/ruin/syndicate_lava_base/main"; + dir = 1; + icon_state = "control_kill"; + lethal = 1; + name = "Base turret controls"; + pixel_y = 30; + req_access = list("syndicate") + }, +/obj/effect/turf_decal/trimline/dark/filled/end{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/dark/filled/mid_joiner{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/dark/filled/mid_joiner{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/dark/filled/mid_joiner{ + dir = 1 + }, +/obj/machinery/camera/xray/directional/north{ + color = "#adadcd"; + name = "Inderdyne security camera"; + network = list("Interdyne") + }, +/obj/machinery/syndicatebomb/self_destruct{ + anchored = 1; + name = "Interdyne self-destruct device" + }, +/obj/effect/turf_decal/stripes/red/box, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/main) +"LD" = ( +/obj/effect/turf_decal/trimline/dark/filled/line{ + dir = 9 + }, +/obj/effect/turf_decal/trimline/dark/filled/mid_joiner{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/dark/filled/mid_joiner{ + dir = 1 + }, +/obj/effect/turf_decal/siding/thinplating/dark{ + dir = 9 + }, +/obj/structure/cable, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/main) +"LK" = ( +/obj/effect/turf_decal/trimline/dark/filled/mid_joiner, +/obj/effect/turf_decal/trimline/dark/filled/line{ + dir = 10 + }, +/obj/effect/turf_decal/trimline/dark/filled/mid_joiner{ + dir = 8 + }, +/obj/structure/closet/crate/bin{ + pixel_x = -5 + }, +/obj/machinery/button/door/directional/west{ + base_icon_state = "tram"; + icon_state = "tram"; + req_access = list("syndicate"); + id = "interdynebar"; + name = "Interdyne Storm Shutters Bar" + }, +/obj/effect/turf_decal/box/blue/corners{ + dir = 8 + }, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/bar) +"LM" = ( +/obj/effect/turf_decal/tile/dark/full, +/obj/structure/bodycontainer/morgue{ + dir = 8 + }, +/obj/item/bodybag, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/medbay) +"LP" = ( +/obj/effect/turf_decal/tile/dark/full, +/obj/machinery/processor/slime{ + name = "Interdyne slime processor"; + color = "#adadcd"; + light_color = "#adadcd" + }, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/testlab) +"LR" = ( +/obj/effect/turf_decal/stripes/red/corner{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/dark/filled/line{ + dir = 5 + }, +/obj/effect/turf_decal/trimline/dark/filled/mid_joiner{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/dark/filled/mid_joiner{ + dir = 4 + }, +/obj/effect/turf_decal/box/white/corners{ + dir = 4 + }, +/obj/machinery/camera/xray/directional/north{ + color = "#adadcd"; + name = "Inderdyne security camera"; + network = list("Interdyne") + }, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/cargo) +"Mc" = ( +/obj/effect/turf_decal/trimline/dark/filled/line{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/dark/filled/mid_joiner{ + dir = 8 + }, +/obj/effect/turf_decal/stripes/red/corner{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/dark/filled/corner{ + dir = 4 + }, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/cargo) +"Mk" = ( +/obj/effect/turf_decal/siding/wood/corner{ + dir = 1 + }, +/obj/effect/turf_decal/siding/wood{ + dir = 4 + }, +/turf/open/floor/carpet/red, +/area/ruin/syndicate_lava_base/bar) +"Mn" = ( +/turf/closed/wall/r_wall/syndicate, +/area/ruin/syndicate_lava_base/medbay) +"Mp" = ( +/obj/effect/turf_decal/stripes/red/line{ + dir = 1 + }, +/turf/open/floor/engine, +/area/ruin/syndicate_lava_base/testlab) +"Mt" = ( +/obj/effect/turf_decal/tile/dark/full, +/obj/structure/marker_beacon/teal, +/obj/structure/curtain/bounty{ + color = "#7d7d7d"; + alpha = 180 + }, +/obj/machinery/stasis{ + dir = 8 + }, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/medbay) +"Mu" = ( +/obj/effect/turf_decal/trimline/dark/filled/line{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/dark/filled/line, +/obj/effect/turf_decal/trimline/dark/filled/mid_joiner{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/dark/filled/mid_joiner, +/obj/structure/chair/sofa/corp, +/obj/structure/marker_beacon/burgundy, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/testlab) +"Mw" = ( +/obj/effect/turf_decal/trimline/dark/filled/line, +/obj/effect/turf_decal/trimline/dark/filled/corner{ + dir = 1 + }, +/turf/open/floor/iron/dark/textured, +/area/ruin/syndicate_lava_base/bar) +"My" = ( +/obj/effect/turf_decal/trimline/dark/filled/corner{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/marker_beacon/indigo, +/obj/effect/turf_decal/trimline/dark/filled/line{ + dir = 10 + }, +/turf/open/floor/iron/dark/textured, +/area/ruin/syndicate_lava_base/dormitories) +"MD" = ( +/obj/effect/turf_decal/tile/dark/full, +/turf/closed/wall/r_wall/syndicate, +/area/ruin/syndicate_lava_base/arrivals) +"ME" = ( +/obj/effect/turf_decal/caution/red, +/obj/effect/turf_decal/stripes/red/line{ + dir = 1 + }, +/obj/structure/railing/corner{ + dir = 4 + }, +/obj/structure/railing/corner, +/turf/open/floor/plating/reinforced/icemoon, +/area/icemoon/underground/explored) +"MG" = ( +/obj/machinery/modular_shield/module/node{ + dir = 4 + }, +/obj/effect/decal/cleanable/glitter/blue, +/obj/effect/turf_decal/box/red/corners{ + dir = 1 + }, +/turf/open/floor/circuit, +/area/ruin/syndicate_lava_base/main) +"MR" = ( +/obj/structure/marker_beacon/burgundy, +/obj/structure/railing, +/obj/structure/railing{ + dir = 9 + }, +/turf/open/floor/engine/hull/reinforced/icemoon, +/area/icemoon/underground/explored) +"MT" = ( +/obj/effect/spawner/structure/window/reinforced/plasma/plastitanium, +/obj/machinery/atmospherics/pipe/smart/manifold4w/general, +/turf/open/floor/plating/reinforced, +/area/ruin/syndicate_lava_base/main) +"Na" = ( +/obj/structure/marker_beacon/bronze, +/obj/effect/turf_decal/trimline/dark/filled/line{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/dark/filled/mid_joiner{ + dir = 1 + }, +/obj/structure/window/reinforced/survival_pod/spawner/directional/south{ + pixel_y = -4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/general/hidden, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/main) +"Ns" = ( +/obj/structure/table/reinforced/plastitaniumglass, +/obj/effect/turf_decal/tile/dark/full, +/obj/item/clothing/neck/stethoscope, +/obj/item/storage/box/medipens{ + pixel_x = 4; + pixel_y = 13 + }, +/obj/item/reagent_containers/spray/cleaner{ + pixel_x = -8; + pixel_y = 8 + }, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, +/obj/item/storage/backpack/duffelbag/synth_treatment_kit/trauma/advanced/unzipped, +/obj/item/healthanalyzer/advanced, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/medbay) +"Nv" = ( +/obj/effect/turf_decal/trimline/dark/filled/line{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/dark/filled/mid_joiner{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/dark/filled/line{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/dark/filled/mid_joiner{ + dir = 8 + }, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/testlab) +"Ny" = ( +/obj/machinery/barsign/all_access, +/obj/effect/turf_decal/siding/wood{ + dir = 9 + }, +/turf/open/floor/wood/large, +/area/ruin/syndicate_lava_base/bar) +"NB" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 5 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/cable, +/turf/open/floor/wood/large, +/area/ruin/syndicate_lava_base/main) +"NJ" = ( +/obj/effect/turf_decal/trimline/dark/filled/line, +/obj/effect/turf_decal/trimline/dark/filled/mid_joiner, +/obj/structure/marker_beacon/purple, +/obj/effect/turf_decal/trimline/dark/filled/corner{ + dir = 1 + }, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/bar) +"NK" = ( +/obj/effect/turf_decal/trimline/dark/filled/line{ + dir = 10 + }, +/obj/effect/turf_decal/trimline/dark/filled/mid_joiner{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/dark/filled/mid_joiner, +/obj/effect/turf_decal/stripes/red/line{ + dir = 5 + }, +/obj/structure/ore_box, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/cargo) +"NM" = ( +/obj/effect/turf_decal/siding/wood/corner, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/cable, +/turf/open/floor/wood/large, +/area/ruin/syndicate_lava_base/main) +"NS" = ( +/obj/effect/spawner/structure/window/reinforced/plasma/plastitanium, +/obj/machinery/door/poddoor{ + id = "interdynebar"; + name = "Interdyne Storm Shutters Bar" + }, +/turf/open/floor/plating/reinforced, +/area/ruin/syndicate_lava_base/bar) +"NV" = ( +/obj/effect/spawner/structure/window/reinforced/plasma/plastitanium, +/turf/open/floor/plating/reinforced, +/area/ruin/syndicate_lava_base/dormitories) +"NY" = ( +/obj/structure/flora/bush/sparsegrass/style_random, +/obj/structure/flora/bush/flowers_br/style_random, +/obj/structure/marker_beacon/teal, +/obj/structure/flora/tree/jungle/small/style_random, +/turf/open/floor/grass, +/area/ruin/syndicate_lava_base/main) +"Oc" = ( +/obj/effect/turf_decal/trimline/dark/filled/end{ + dir = 1 + }, +/obj/effect/turf_decal/box/white/corners{ + dir = 1 + }, +/obj/effect/turf_decal/box/white/corners{ + dir = 4 + }, +/obj/structure/drain, +/turf/open/floor/iron/dark/textured, +/area/ruin/syndicate_lava_base/bar) +"Oe" = ( +/obj/structure/table/reinforced/plastitaniumglass, +/obj/item/storage/pill_bottle/mutadone, +/obj/effect/turf_decal/tile/dark/full, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 8 + }, +/obj/structure/window/reinforced/survival_pod/spawner/directional/north{ + pixel_y = 4 + }, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/medbay) +"Ok" = ( +/obj/effect/turf_decal/box/red/corners{ + dir = 1 + }, +/obj/effect/turf_decal/tile/dark/full, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/testlab) +"Ol" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 4 + }, +/obj/machinery/vending/cigarette/syndicate{ + onstation = 0 + }, +/turf/open/floor/wood/large, +/area/ruin/syndicate_lava_base/main) +"Os" = ( +/obj/machinery/chem_master{ + name = "Interdyne ChemMaster"; + color = "#adadcd"; + light_color = "#adadcd" + }, +/obj/effect/turf_decal/tile/dark/full, +/obj/structure/marker_beacon/indigo, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/medbay) +"Ou" = ( +/obj/effect/turf_decal/trimline/dark/filled/corner{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/dark/filled/corner, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/bar) +"Ow" = ( +/obj/structure/window/reinforced/survival_pod/spawner/directional/west{ + pixel_x = -4 + }, +/turf/open/floor/engine, +/area/ruin/syndicate_lava_base/testlab) +"Oz" = ( +/obj/structure/flora/bush/sparsegrass/style_random, +/obj/structure/flora/bush/flowers_pp/style_random, +/turf/open/floor/grass, +/area/ruin/syndicate_lava_base/main) +"OD" = ( +/obj/structure/rack, +/obj/item/rcd_ammo, +/obj/item/rcd_ammo, +/obj/item/rcd_ammo, +/obj/item/rcd_ammo, +/obj/effect/turf_decal/tile/dark/full, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/item/flatpacked_machine, +/obj/item/construction/rcd/loaded, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/cargo) +"OH" = ( +/obj/effect/turf_decal/tile/dark/full, +/obj/structure/marker_beacon/burgundy, +/obj/machinery/processor{ + color = "#adadcd"; + name = "Interdyne food processor"; + light_color = "#adadcd" + }, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/bar) +"OI" = ( +/obj/structure/table/reinforced/plastitaniumglass, +/obj/effect/turf_decal/tile/dark/full, +/obj/structure/marker_beacon/indigo, +/obj/machinery/microwave{ + pixel_x = -1; + pixel_y = 5; + color = "#adadcd"; + name = "Interdyne microwave"; + light_color = "#adadcd" + }, +/obj/item/storage/box/donkpockets{ + pixel_y = 19; + pixel_x = 5 + }, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/bar) +"OP" = ( +/obj/machinery/modular_shield/module/well{ + dir = 4 + }, +/obj/structure/marker_beacon/indigo, +/obj/effect/turf_decal/box/blue/corners{ + dir = 4 + }, +/obj/effect/turf_decal/box/blue/corners, +/obj/effect/turf_decal/trimline/dark/filled/end{ + dir = 4 + }, +/turf/open/floor/iron/dark, +/area/ruin/syndicate_lava_base/main) +"OQ" = ( +/obj/effect/turf_decal/trimline/dark/filled/line{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/dark/filled/mid_joiner{ + dir = 8 + }, +/obj/effect/turf_decal/stripes/blue/corner{ + dir = 4 + }, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/medbay) +"OV" = ( +/obj/structure/table/wood/fancy/black, +/obj/item/food/chips/shrimp, +/turf/open/floor/wood/large, +/area/ruin/syndicate_lava_base/bar) +"Pc" = ( +/obj/structure/flora/bush/fullgrass/style_random, +/obj/structure/flora/bush/jungle/c/style_random, +/obj/structure/flora/tree/jungle/style_random, +/turf/open/floor/grass, +/area/ruin/syndicate_lava_base/main) +"Pf" = ( +/obj/effect/turf_decal/trimline/dark/filled/corner{ + dir = 8 + }, +/obj/effect/turf_decal/stripes/red/corner{ + dir = 8 + }, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/cargo) +"Pm" = ( +/obj/effect/turf_decal/siding/wood/corner{ + dir = 4 + }, +/obj/structure/chair/comfy/brown{ + color = "#A46106"; + dir = 4 + }, +/turf/open/floor/carpet/red, +/area/ruin/syndicate_lava_base/bar) +"Pn" = ( +/obj/machinery/porta_turret/syndicate{ + dir = 10; + faction = list("Syndicate","neutral") + }, +/obj/structure/marker_beacon/burgundy, +/obj/machinery/camera/xray{ + pixel_x = 10; + name = "Inderdyne security camera"; + network = list("Interdyne"); + color = "#adadcd"; + pixel_y = 25 + }, +/turf/closed/wall/r_wall/syndicate/nodiagonal, +/area/ruin/syndicate_lava_base/main) +"Po" = ( +/obj/effect/turf_decal/stripes/red/line{ + dir = 1 + }, +/obj/effect/turf_decal/caution/red, +/obj/effect/turf_decal/trimline/dark/filled/corner{ + dir = 4 + }, +/obj/structure/marker_beacon/burgundy, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/cargo) +"Pq" = ( +/obj/effect/turf_decal/tile/dark_red, +/obj/effect/turf_decal/stripes/red/line{ + dir = 1 + }, +/obj/structure/window/reinforced/survival_pod/spawner/directional/west{ + pixel_x = -4 + }, +/turf/open/floor/engine, +/area/ruin/syndicate_lava_base/testlab) +"Pr" = ( +/obj/effect/spawner/structure/window/reinforced/plasma/plastitanium, +/obj/structure/cable, +/turf/open/floor/plating/reinforced, +/area/ruin/syndicate_lava_base/main) +"Pt" = ( +/obj/structure/dresser{ + color = "#8d8d8d"; + name = "Dark wood Interdyne dresser"; + light_color = "#8d8d8d" + }, +/obj/effect/turf_decal/tile/dark/full, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/dormitories) +"Pv" = ( +/obj/machinery/porta_turret/syndicate{ + dir = 9; + faction = list("Syndicate","neutral") + }, +/obj/structure/marker_beacon/burgundy, +/obj/machinery/camera/xray{ + pixel_x = 10; + name = "Inderdyne security camera"; + network = list("Interdyne"); + color = "#adadcd"; + pixel_y = 25 + }, +/turf/closed/wall/r_wall/syndicate/nodiagonal, +/area/ruin/syndicate_lava_base/main) +"Pw" = ( +/turf/closed/wall/r_wall/syndicate, +/area/ruin/syndicate_lava_base/dormitories) +"PB" = ( +/obj/effect/turf_decal/trimline/dark/filled/line{ + dir = 9 + }, +/obj/effect/turf_decal/trimline/dark/filled/mid_joiner{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/dark/filled/mid_joiner{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/dark/filled/corner, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/testlab) +"PG" = ( +/obj/effect/turf_decal/trimline/dark/filled/corner{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/dark/filled/corner{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/dark/filled/corner{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/dark/filled/corner, +/obj/effect/turf_decal/arrows/blue{ + dir = 1 + }, +/obj/effect/turf_decal/arrows/blue, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/arrivals) +"PI" = ( +/obj/machinery/airalarm/directional/north{ + req_access = list("syndicate"); + pixel_y = 42 + }, +/obj/machinery/power/apc/auto_name/directional/north, +/obj/effect/mapping_helpers/apc/syndicate_access, +/obj/effect/turf_decal/siding/wood{ + dir = 1 + }, +/obj/structure/cable, +/obj/structure/chair/sofa/corp/left, +/turf/open/floor/wood/large, +/area/ruin/syndicate_lava_base/bar) +"PK" = ( +/obj/effect/turf_decal/trimline/dark/filled/line{ + dir = 5 + }, +/obj/effect/turf_decal/trimline/dark/filled/mid_joiner{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/dark/filled/mid_joiner{ + dir = 1 + }, +/obj/effect/turf_decal/siding/thinplating/dark{ + dir = 5 + }, +/obj/structure/cable, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/main) +"PO" = ( +/obj/structure/cable, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/cargo) +"PQ" = ( +/obj/effect/turf_decal/trimline/dark/filled/line, +/obj/effect/turf_decal/trimline/dark/filled/mid_joiner, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/medbay) +"PW" = ( +/obj/structure/table/reinforced/plastitaniumglass, +/obj/item/storage/toolbox/electrical, +/obj/effect/turf_decal/tile/dark/full, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/main) +"Qi" = ( +/obj/effect/turf_decal/trimline/dark/filled/line{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/dark/filled/mid_joiner{ + dir = 4 + }, +/obj/machinery/atmospherics/components/unary/portables_connector, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/main) +"Qq" = ( +/obj/effect/turf_decal/tile/dark/full, +/obj/machinery/seed_extractor{ + name = "Interdyne seed extractor"; + color = "#adadcd"; + pixel_x = -4 + }, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/bar) +"Qx" = ( +/obj/effect/turf_decal/tile/dark/full, +/obj/structure/closet/crate/freezer/blood, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/medbay) +"QK" = ( +/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/ruin/syndicate_lava_base/cargo) +"QN" = ( +/obj/machinery/dna_scannernew, +/obj/structure/drain, +/obj/effect/turf_decal/trimline/dark/filled/end{ + dir = 4 + }, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/medbay) +"QU" = ( +/obj/effect/turf_decal/trimline/dark/filled/line, +/obj/effect/turf_decal/trimline/dark/filled/mid_joiner, +/obj/structure/marker_beacon/purple, +/obj/effect/turf_decal/trimline/dark/filled/corner{ + dir = 4 + }, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/bar) +"Rd" = ( +/obj/effect/turf_decal/trimline/dark/filled/line{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/dark/filled/line{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/dark/filled/mid_joiner{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/dark/filled/mid_joiner{ + dir = 4 + }, +/obj/effect/turf_decal/stripes/red/line{ + dir = 4 + }, +/obj/effect/turf_decal/stripes/blue{ + dir = 8 + }, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/cargo) +"Re" = ( +/obj/effect/turf_decal/trimline/dark/filled/corner, +/obj/effect/turf_decal/stripes/red/corner, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/cargo) +"Rl" = ( +/obj/effect/turf_decal/trimline/dark/filled/line{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/dark/filled/mid_joiner{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/testlab) +"Rv" = ( +/obj/effect/turf_decal/trimline/dark/filled/corner{ + dir = 8 + }, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/medbay) +"RE" = ( +/obj/effect/turf_decal/trimline/dark/filled/corner{ + dir = 4 + }, +/obj/effect/turf_decal/box/blue/corners{ + dir = 8 + }, +/obj/structure/cable, +/obj/effect/turf_decal/trimline/dark/filled/corner, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/main) +"RH" = ( +/obj/machinery/light/directional/south{ + light_color = "#5148A6" + }, +/turf/open/floor/engine, +/area/ruin/syndicate_lava_base/testlab) +"RM" = ( +/turf/closed/wall/r_wall/syndicate, +/area/ruin/syndicate_lava_base/bar) +"RN" = ( +/obj/effect/turf_decal/stripes/red/corner{ + dir = 1 + }, +/obj/effect/turf_decal/tile/dark/full, +/obj/structure/marker_beacon/teal, +/obj/structure/curtain/bounty{ + color = "#7d7d7d"; + alpha = 180 + }, +/obj/machinery/stasis{ + dir = 8 + }, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/medbay) +"RQ" = ( +/obj/structure/toilet{ + dir = 8; + pixel_y = 6; + color = "#4d4d4d"; + name = "Interdyne Vacuum Toilet" + }, +/obj/effect/turf_decal/trimline/dark/filled/line{ + dir = 6 + }, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 8 + }, +/turf/open/floor/iron/dark/small, +/area/ruin/syndicate_lava_base/dormitories) +"RV" = ( +/turf/closed/wall/r_wall/syndicate/nodiagonal, +/area/ruin/syndicate_lava_base/cargo) +"RZ" = ( +/obj/effect/turf_decal/trimline/dark/filled/line{ + dir = 5 + }, +/obj/effect/turf_decal/trimline/dark/filled/mid_joiner{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/dark/filled/mid_joiner{ + dir = 4 + }, +/obj/effect/turf_decal/stripes/red/line{ + dir = 10 + }, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/cargo) +"Sb" = ( +/obj/structure/rack/shelf, +/obj/effect/turf_decal/tile/dark/full, +/obj/item/gun/energy/plasmacutter, +/obj/item/gun/energy/plasmacutter, +/obj/item/binoculars, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/cargo) +"Sd" = ( +/obj/machinery/modular_shield/module/node{ + dir = 1 + }, +/obj/effect/decal/cleanable/glitter/blue, +/obj/effect/turf_decal/box/red/corners{ + dir = 2 + }, +/obj/effect/turf_decal/box/red/corners{ + dir = 8 + }, +/turf/open/floor/circuit, +/area/ruin/syndicate_lava_base/main) +"Se" = ( +/obj/structure/flora/grass/brown/style_random, +/turf/open/misc/asteroid/snow/icemoon, +/area/icemoon/underground/explored) +"Sg" = ( +/obj/effect/turf_decal/trimline/dark/filled/line{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/dark/filled/mid_joiner{ + dir = 4 + }, +/obj/effect/turf_decal/siding/thinplating/dark{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/main) +"Sh" = ( +/obj/effect/turf_decal/trimline/dark/filled/line{ + dir = 6 + }, +/obj/effect/turf_decal/trimline/dark/filled/mid_joiner, +/obj/effect/turf_decal/trimline/dark/filled/mid_joiner{ + dir = 4 + }, +/obj/effect/turf_decal/box/white/corners, +/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/dark/textured_large, +/area/ruin/syndicate_lava_base/cargo) +"Sm" = ( +/obj/effect/turf_decal/trimline/dark/filled/end, +/obj/item/mop, +/obj/structure/rack, +/obj/item/reagent_containers/cup/bucket, +/obj/item/soap/syndie, +/obj/structure/marker_beacon/bronze, +/turf/open/floor/iron/dark/textured, +/area/ruin/syndicate_lava_base/bar) +"St" = ( +/obj/effect/turf_decal/box/white/corners{ + dir = 8 + }, +/turf/open/floor/engine, +/area/ruin/syndicate_lava_base/testlab) +"SG" = ( +/obj/effect/turf_decal/trimline/dark/filled/corner{ + dir = 1 + }, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/cargo) +"SH" = ( +/obj/structure/flora/rock/pile/icy/style_random, +/turf/open/misc/asteroid/snow/icemoon, +/area/icemoon/underground/explored) +"SJ" = ( +/obj/effect/turf_decal/trimline/dark/filled/corner{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/dark/filled/corner{ + dir = 1 + }, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/testlab) +"SK" = ( +/obj/effect/turf_decal/siding/dark{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/dark/filled/line{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/dark/filled/corner{ + dir = 4 + }, +/turf/open/floor/iron/dark/textured, +/area/ruin/syndicate_lava_base/bar) +"SM" = ( +/obj/structure/flora/rock/pile/icy/style_random, +/turf/open/lava/plasma/ice_moon, +/area/icemoon/underground/explored) +"SY" = ( +/obj/structure/flora/bush/fullgrass/style_random, +/obj/structure/flora/bush/jungle/b/style_random, +/turf/open/floor/grass, +/area/ruin/syndicate_lava_base/main) +"Tc" = ( +/obj/structure/table/reinforced/plastitaniumglass, +/obj/structure/microscope, +/obj/effect/turf_decal/tile/dark/full, +/obj/structure/window/reinforced/survival_pod/spawner/directional/north{ + pixel_y = 4 + }, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/medbay) +"Td" = ( +/obj/effect/turf_decal/trimline/dark/filled/corner{ + dir = 4 + }, +/obj/effect/turf_decal/stripes/blue, +/obj/effect/turf_decal/stripes/blue/corner{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/dark/filled/line{ + dir = 10 + }, +/obj/effect/turf_decal/trimline/dark/filled/mid_joiner{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/dark/filled/mid_joiner, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/medbay) +"Tf" = ( +/obj/effect/turf_decal/trimline/dark/filled/line{ + dir = 4 + }, +/obj/effect/turf_decal/stripes/blue{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/dark/filled/line{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/dark/filled/mid_joiner{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/dark/filled/mid_joiner{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/medbay) +"Tk" = ( +/obj/effect/turf_decal/tile/dark/full, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, +/obj/machinery/smartfridge/organ{ + color = "#adadcd"; + name = "interdyne smart organ storage"; + light_color = "#adadcd" + }, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/medbay) +"Tl" = ( +/obj/effect/turf_decal/trimline/dark/filled/line{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/dark/filled/mid_joiner{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/dark/filled/line{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/dark/filled/mid_joiner{ + dir = 8 + }, +/obj/structure/chair/sofa/corp/left{ + dir = 8 + }, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/testlab) +"Tm" = ( +/obj/structure/marker_beacon/bronze, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/turf/open/floor/wood/large, +/area/ruin/syndicate_lava_base/main) +"Tn" = ( +/obj/effect/turf_decal/stripes/red/line{ + dir = 1 + }, +/obj/effect/decal/cleanable/blood/old, +/turf/open/floor/plating/reinforced/icemoon, +/area/icemoon/underground/explored) +"Tu" = ( +/obj/effect/turf_decal/box/blue/corners{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/dark/filled/line{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/dark/filled/line{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/dark/filled/mid_joiner{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/dark/filled/mid_joiner{ + dir = 4 + }, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/medbay) +"Tv" = ( +/obj/structure/marker_beacon/bronze, +/obj/effect/turf_decal/trimline/dark/filled/line{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/dark/filled/mid_joiner{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/dark/filled/line, +/obj/effect/turf_decal/trimline/dark/filled/mid_joiner, +/obj/effect/turf_decal/stripes/red/line, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/cargo) +"TB" = ( +/obj/machinery/biogenerator, +/obj/machinery/door/window/survival_pod/left/directional/west{ + req_access = list("syndicate"); + pixel_x = -4 + }, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/main) +"TC" = ( +/obj/structure/rack/shelf, +/obj/item/storage/toolbox/syndicate, +/obj/effect/turf_decal/tile/dark/full, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/cargo) +"TH" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 8 + }, +/obj/structure/closet/cabinet{ + name = "Dark wood Interdyne closet"; + color = "#8d8d8d"; + light_color = "#8d8d8d" + }, +/obj/effect/turf_decal/trimline/dark/filled/end{ + dir = 4 + }, +/turf/open/floor/iron/dark/textured, +/area/ruin/syndicate_lava_base/dormitories) +"TI" = ( +/obj/effect/turf_decal/trimline/dark/filled/line{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/dark/filled/mid_joiner{ + dir = 8 + }, +/obj/effect/turf_decal/stripes/red/line{ + dir = 8 + }, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/cargo) +"TO" = ( +/obj/effect/turf_decal/trimline/dark/filled/line{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/dark/filled/mid_joiner{ + dir = 1 + }, +/obj/effect/turf_decal/stripes/red/line{ + dir = 1 + }, +/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/dark/textured_large, +/area/ruin/syndicate_lava_base/cargo) +"TT" = ( +/obj/machinery/modular_shield/module/relay, +/obj/structure/marker_beacon/purple, +/obj/effect/turf_decal/box/blue/corners, +/obj/effect/turf_decal/trimline/dark/filled/line{ + dir = 6 + }, +/obj/effect/turf_decal/trimline/dark/filled/mid_joiner{ + dir = 4 + }, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/main) +"TZ" = ( +/obj/machinery/coffeemaker{ + pixel_y = 36 + }, +/obj/effect/turf_decal/siding/wood{ + dir = 1 + }, +/obj/structure/chair/sofa/corp/right, +/turf/open/floor/wood/large, +/area/ruin/syndicate_lava_base/bar) +"Ua" = ( +/obj/effect/turf_decal/trimline/dark/filled/line{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/dark/filled/mid_joiner{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/dark/filled/line, +/obj/effect/turf_decal/trimline/dark/filled/mid_joiner, +/obj/structure/chair/sofa/corp/right, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/testlab) +"Ue" = ( +/obj/effect/turf_decal/trimline/dark/filled/line{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/dark/filled/mid_joiner{ + dir = 4 + }, +/obj/effect/turf_decal/stripes/blue{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/window/reinforced/survival_pod/spawner/directional/east{ + pixel_x = 4 + }, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/medbay) +"Uf" = ( +/obj/machinery/atmospherics/components/unary/outlet_injector/on/layer2{ + dir = 1 + }, +/obj/machinery/atmospherics/components/unary/outlet_injector/on{ + dir = 1 + }, +/turf/open/floor/engine, +/area/ruin/syndicate_lava_base/main) +"Uj" = ( +/obj/structure/railing/corner{ + dir = 8 + }, +/obj/structure/railing/corner{ + dir = 1 + }, +/turf/open/floor/plating/reinforced/icemoon, +/area/icemoon/underground/explored) +"Uo" = ( +/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/corner{ + dir = 1 + }, +/turf/open/floor/wood/large, +/area/ruin/syndicate_lava_base/main) +"Uq" = ( +/obj/structure/flora/bush/sparsegrass/style_random, +/obj/structure/flora/bush/flowers_pp/style_random, +/obj/structure/marker_beacon/purple, +/obj/structure/flora/tree/jungle/small/style_random, +/turf/open/floor/grass, +/area/ruin/syndicate_lava_base/main) +"Ut" = ( +/obj/effect/turf_decal/trimline/dark/filled/line{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/dark/filled/line{ + dir = 4 + }, +/obj/machinery/door/airlock{ + name = "Cabin 1"; + id_tag = "Dynbin1" + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron/dark/textured, +/area/ruin/syndicate_lava_base/dormitories) +"UE" = ( +/obj/machinery/chem_dispenser/fullupgrade{ + name = "Interdyne chem dispenser"; + color = "#adadcd"; + light_color = "#adadcd" + }, +/obj/effect/turf_decal/tile/dark/full, +/obj/structure/marker_beacon/indigo, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/medbay) +"UI" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 8 + }, +/obj/structure/marker_beacon/bronze, +/turf/open/floor/wood/large, +/area/ruin/syndicate_lava_base/main) +"UO" = ( +/obj/effect/turf_decal/siding/dark{ + dir = 1 + }, +/obj/effect/turf_decal/siding/dark/corner{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/dark/filled/corner{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/dark/filled/line{ + dir = 5 + }, +/turf/open/floor/iron/dark/textured, +/area/ruin/syndicate_lava_base/bar) +"UP" = ( +/obj/structure/extinguisher_cabinet/directional/north, +/obj/effect/turf_decal/trimline/dark/filled/corner, +/obj/effect/turf_decal/trimline/dark/filled/line{ + dir = 9 + }, +/obj/effect/turf_decal/trimline/dark/filled/mid_joiner{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/dark/filled/mid_joiner{ + dir = 1 + }, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/medbay) +"UT" = ( +/obj/machinery/modular_shield/module/charger{ + dir = 8 + }, +/obj/structure/marker_beacon/purple, +/obj/effect/turf_decal/box/blue/corners{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/dark/filled/line{ + dir = 9 + }, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/main) +"UV" = ( +/obj/structure/flora/bush/fullgrass/style_random, +/obj/structure/flora/tree/jungle/small/style_random, +/obj/structure/flora/bush/flowers_pp/style_random, +/turf/open/floor/grass, +/area/ruin/syndicate_lava_base/main) +"Ve" = ( +/obj/machinery/atmospherics/components/binary/pump/on{ + dir = 1 + }, +/turf/open/floor/catwalk_floor/iron_dark, +/area/ruin/syndicate_lava_base/main) +"Vk" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/fans/tiny/forcefield, +/obj/effect/decal/cleanable/glitter/blue, +/obj/structure/marker_beacon/teal, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/arrivals) +"Vn" = ( +/obj/structure/tank_dispenser, +/obj/effect/turf_decal/tile/dark/full, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/cargo) +"Vp" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/siphon/monitored{ + chamber_id = "interdyneo2"; + dir = 1 + }, +/turf/open/floor/engine/o2, +/area/ruin/syndicate_lava_base/main) +"Vr" = ( +/obj/machinery/vending/wardrobe/syndie_wardrobe{ + onstation = 0; + extended_inventory = 1 + }, +/obj/structure/marker_beacon/burgundy, +/obj/effect/turf_decal/tile/dark/full, +/obj/effect/turf_decal/stripes/blue{ + dir = 8 + }, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/cargo) +"Vs" = ( +/obj/structure/marker_beacon/burgundy, +/obj/effect/turf_decal/trimline/dark/filled/line{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/dark/filled/mid_joiner{ + dir = 8 + }, +/obj/effect/turf_decal/stripes/red/line{ + dir = 8 + }, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/cargo) +"Vt" = ( +/obj/effect/turf_decal/trimline/dark/filled/end, +/turf/open/floor/iron/dark/textured, +/area/ruin/syndicate_lava_base/dormitories) +"Vu" = ( +/obj/effect/turf_decal/trimline/dark/filled/line{ + dir = 4 + }, +/obj/structure/sink/directional/west, +/obj/structure/mirror/directional/east, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron/dark/textured, +/area/ruin/syndicate_lava_base/dormitories) +"Vy" = ( +/obj/structure/chair/comfy/black{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/dark/filled/mid_joiner{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/dark/filled/mid_joiner, +/obj/effect/turf_decal/siding/dark/corner{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/dark/filled/end{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/dark/filled/mid_joiner{ + dir = 1 + }, +/obj/structure/marker_beacon/purple, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/medbay) +"Vz" = ( +/obj/effect/turf_decal/trimline/dark/filled/line{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/dark/filled/mid_joiner{ + dir = 1 + }, +/obj/machinery/camera/xray/directional/north{ + color = "#adadcd"; + name = "Inderdyne security camera"; + network = list("Interdyne"); + pixel_x = 10 + }, +/obj/machinery/power/apc/auto_name/directional/north, +/obj/effect/mapping_helpers/apc/syndicate_access, +/obj/machinery/airalarm/directional/north{ + req_access = list("syndicate"); + pixel_y = 42 + }, +/obj/structure/cable, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/medbay) +"VC" = ( +/obj/effect/turf_decal/trimline/dark/filled/line{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/dark/filled/mid_joiner{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/general/hidden, +/obj/effect/turf_decal/vg_decals/atmos/nitrogen, +/obj/structure/window/reinforced/survival_pod/spawner/directional/south{ + pixel_y = -4 + }, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/main) +"VE" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/siphon/monitored{ + chamber_id = "lavalandsyndieplasma"; + dir = 8 + }, +/turf/open/floor/engine/n2, +/area/ruin/syndicate_lava_base/main) +"VJ" = ( +/obj/effect/turf_decal/trimline/dark/filled/mid_joiner, +/obj/effect/turf_decal/trimline/dark/filled/line{ + dir = 6 + }, +/obj/effect/turf_decal/trimline/dark/filled/mid_joiner{ + dir = 4 + }, +/obj/structure/closet/crate/bin, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/testlab) +"VK" = ( +/obj/effect/turf_decal/trimline/dark/filled/line{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/dark/filled/line{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/dark/filled/mid_joiner{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/dark/filled/mid_joiner{ + dir = 4 + }, +/obj/effect/turf_decal/stripes/red/line{ + dir = 8 + }, +/obj/effect/turf_decal/stripes/blue/corner{ + dir = 4 + }, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/cargo) +"VL" = ( +/obj/effect/turf_decal/tile/dark/full, +/obj/structure/table/reinforced/plastitaniumglass, +/obj/machinery/button/door/directional/west{ + base_icon_state = "tram"; + icon_state = "tram"; + req_access = list("syndicate"); + id = "interdynernd"; + name = "Interdyne Storm Shutters RnD" + }, +/obj/machinery/fax{ + fax_name = "Interdyne Fax"; + name = "Interdyne Fax Machine"; + pixel_y = 7; + syndicate_network = 1; + color = "#adadcd" + }, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/testlab) +"VM" = ( +/obj/effect/turf_decal/trimline/dark/filled/corner{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/dark/filled/corner{ + dir = 8 + }, +/obj/effect/turf_decal/stripes/blue/corner{ + dir = 8 + }, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/medbay) +"VO" = ( +/obj/effect/turf_decal/trimline/dark/filled/line{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/dark/filled/line, +/obj/effect/turf_decal/trimline/dark/filled/mid_joiner{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/dark/filled/mid_joiner, +/obj/structure/chair/sofa/corp, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/testlab) +"VP" = ( +/obj/effect/spawner/structure/window/reinforced/plasma/plastitanium, +/obj/structure/cable, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/main) +"VQ" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/cyan/visible, +/obj/effect/turf_decal/trimline/dark/filled/line{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/dark/filled/mid_joiner{ + dir = 1 + }, +/mob/living/carbon/human/species/monkey{ + ai_controller = null; + faction = list("neutral","Syndicate") + }, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/medbay) +"VW" = ( +/obj/structure/table/wood/fancy, +/obj/item/bedsheet/syndie, +/obj/item/bedsheet/syndie/double{ + dir = 1 + }, +/obj/machinery/camera/xray/directional/north{ + color = "#adadcd"; + name = "Inderdyne security camera"; + network = list("Interdyne") + }, +/turf/open/floor/wood/large, +/area/ruin/syndicate_lava_base/bar) +"Wa" = ( +/obj/effect/turf_decal/stripes/red/line, +/obj/effect/turf_decal/trimline/dark/filled/corner, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/cargo) +"Wt" = ( +/obj/structure/table/reinforced/plastitaniumglass, +/obj/machinery/reagentgrinder{ + pixel_y = 5; + pixel_x = -8 + }, +/obj/item/stack/sheet/mineral/plasma{ + amount = 5 + }, +/obj/structure/window/reinforced/survival_pod/spawner/directional/south, +/obj/effect/turf_decal/tile/dark/full, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/testlab) +"Wu" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 5 + }, +/turf/open/floor/carpet/red, +/area/ruin/syndicate_lava_base/bar) +"Wx" = ( +/obj/item/pillow, +/obj/structure/fireplace, +/obj/effect/turf_decal/siding/wood{ + dir = 1 + }, +/turf/open/floor/carpet/red, +/area/ruin/syndicate_lava_base/bar) +"Wz" = ( +/obj/effect/turf_decal/trimline/dark/filled/line{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/dark/filled/mid_joiner{ + dir = 8 + }, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/bar) +"WC" = ( +/obj/item/stack/sheet/mineral/gold{ + amount = 10 + }, +/obj/item/stack/sheet/mineral/plasma{ + amount = 5 + }, +/obj/item/stack/sheet/mineral/uranium{ + amount = 10 + }, +/obj/item/stack/sheet/mineral/diamond, +/obj/item/stack/sheet/bluespace_crystal, +/obj/item/stack/sheet/mineral/silver, +/obj/item/stack/sheet/mineral/titanium, +/obj/effect/turf_decal/bot_red, +/obj/effect/turf_decal/tile/dark/full, +/obj/structure/closet/crate/secure/gear{ + req_access = list("syndicate"); + anchored = 1 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/cargo) +"WD" = ( +/obj/structure/marker_beacon/teal, +/obj/effect/decal/cleanable/glitter/blue, +/obj/effect/turf_decal/arrows/blue, +/obj/effect/turf_decal/arrows/blue{ + dir = 1 + }, +/obj/structure/fans/tiny/forcefield, +/obj/effect/turf_decal/trimline/dark/filled/line{ + dir = 8 + }, +/obj/structure/window/reinforced/survival_pod/spawner/directional/west{ + pixel_x = -4 + }, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/testlab) +"WE" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 1 + }, +/obj/effect/turf_decal/tile/dark/full, +/obj/structure/bed/double{ + name = "Softest Interdyne bed"; + light_color = "#4d4d4d"; + color = "#5d5d5d" + }, +/obj/item/bedsheet/cosmos/double, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/dormitories) +"WF" = ( +/obj/structure/marker_beacon/teal, +/obj/effect/decal/cleanable/glitter/blue, +/obj/effect/turf_decal/arrows/blue, +/obj/effect/turf_decal/arrows/blue{ + dir = 1 + }, +/obj/structure/fans/tiny/forcefield, +/obj/structure/window/reinforced/survival_pod/spawner/directional/west{ + pixel_x = -4 + }, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/cargo) +"WK" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 5 + }, +/turf/open/floor/wood/large, +/area/ruin/syndicate_lava_base/main) +"WM" = ( +/obj/effect/turf_decal/trimline/dark/filled/line{ + dir = 5 + }, +/obj/effect/turf_decal/trimline/dark/filled/mid_joiner{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/dark/filled/mid_joiner{ + dir = 4 + }, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/bar) +"WS" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 1 + }, +/obj/effect/turf_decal/tile/dark/full, +/obj/structure/bed/double{ + name = "Softest Interdyne bed"; + light_color = "#4d4d4d"; + color = "#5d5d5d" + }, +/obj/item/bedsheet/cosmos/double, +/turf/open/floor/iron/dark/textured, +/area/ruin/syndicate_lava_base/dormitories) +"WX" = ( +/obj/effect/turf_decal/trimline/dark/filled/line{ + dir = 6 + }, +/obj/effect/turf_decal/trimline/dark/filled/mid_joiner, +/obj/effect/turf_decal/trimline/dark/filled/mid_joiner{ + dir = 4 + }, +/obj/effect/turf_decal/stripes/red/line{ + dir = 9 + }, +/obj/structure/ore_box, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/cargo) +"Xa" = ( +/obj/structure/chair/comfy/black{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/dark/filled/end{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/dark/filled/mid_joiner{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/dark/filled/mid_joiner{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/marker_beacon/bronze, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/testlab) +"Xc" = ( +/obj/machinery/cryopod{ + dir = 4 + }, +/obj/structure/marker_beacon/olive, +/obj/machinery/computer/cryopod/interdyne/directional/west{ + pixel_x = -18; + req_one_access = list("syndicate") + }, +/obj/effect/turf_decal/trimline/dark/filled/end{ + dir = 8 + }, +/turf/open/floor/iron/dark, +/area/ruin/syndicate_lava_base/arrivals) +"Xh" = ( +/obj/effect/turf_decal/siding/wood, +/turf/open/floor/carpet/red, +/area/ruin/syndicate_lava_base/bar) +"Xo" = ( +/obj/effect/turf_decal/trimline/dark/filled/corner{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/dark/filled/corner{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/dark/filled/corner{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/dark/filled/corner, +/obj/effect/turf_decal/arrows/blue{ + dir = 1 + }, +/obj/effect/turf_decal/arrows/blue, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/arrivals) +"Xq" = ( +/obj/effect/turf_decal/trimline/dark/filled/corner{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/dark/filled/corner{ + dir = 8 + }, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/bar) +"Xw" = ( +/obj/structure/rack/wooden, +/obj/item/stack/sheet/mineral/wood/fifty, +/obj/item/lighter, +/turf/open/floor/wood/large, +/area/ruin/syndicate_lava_base/bar) +"Xz" = ( +/obj/effect/turf_decal/trimline/dark/filled/line{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/dark/filled/line{ + dir = 4 + }, +/turf/open/floor/iron/dark/textured, +/area/ruin/syndicate_lava_base/bar) +"XC" = ( +/obj/effect/turf_decal/trimline/dark/filled/corner, +/obj/machinery/button/door/directional/north{ + name = "Dorm Bolt Control"; + id = "Dynbin1"; + normaldoorcontrol = 1; + specialfunctions = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/marker_beacon/indigo, +/obj/effect/turf_decal/trimline/dark/filled/line{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/dark/filled/corner{ + dir = 8 + }, +/turf/open/floor/iron/dark/textured, +/area/ruin/syndicate_lava_base/dormitories) +"XD" = ( +/obj/structure/table/reinforced/plastitaniumglass, +/obj/effect/turf_decal/tile/dark/full, +/obj/structure/marker_beacon/burgundy, +/obj/item/kitchen/rollingpin, +/obj/item/storage/box/beakers/bluespace, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/bar) +"XH" = ( +/obj/machinery/modular_shield/module/node{ + dir = 8 + }, +/obj/effect/decal/cleanable/glitter/blue, +/obj/effect/turf_decal/box/red/corners{ + dir = 4 + }, +/turf/open/floor/circuit, +/area/ruin/syndicate_lava_base/main) +"XO" = ( +/obj/effect/turf_decal/siding/wood/corner, +/turf/open/floor/wood/large, +/area/ruin/syndicate_lava_base/main) +"XP" = ( +/obj/effect/turf_decal/trimline/dark/filled/line{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/dark/filled/mid_joiner{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/testlab) +"XS" = ( +/obj/structure/window/reinforced/survival_pod/spawner/directional/south, +/obj/effect/turf_decal/trimline/dark/filled/line{ + dir = 10 + }, +/obj/effect/turf_decal/trimline/dark/filled/mid_joiner, +/obj/effect/turf_decal/trimline/dark/filled/mid_joiner{ + dir = 8 + }, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/testlab) +"XT" = ( +/turf/open/floor/wood/large, +/area/ruin/syndicate_lava_base/bar) +"XW" = ( +/obj/machinery/hydroponics/constructable, +/obj/machinery/door/window/survival_pod/left/directional/west{ + req_access = list("syndicate"); + pixel_x = -4 + }, +/obj/structure/marker_beacon/burgundy, +/turf/open/floor/grass, +/area/ruin/syndicate_lava_base/bar) +"Ya" = ( +/obj/effect/turf_decal/siding/wood/corner{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/cable, +/turf/open/floor/wood/large, +/area/ruin/syndicate_lava_base/main) +"Yb" = ( +/obj/effect/spawner/structure/window/reinforced/plasma/plastitanium, +/turf/open/floor/plating/reinforced, +/area/ruin/syndicate_lava_base/medbay) +"Yc" = ( +/obj/effect/turf_decal/trimline/dark/filled/line{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/dark/filled/mid_joiner{ + dir = 8 + }, +/obj/machinery/atmospherics/components/unary/portables_connector, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/main) +"Yf" = ( +/obj/effect/turf_decal/siding/wood{ + 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/wood/large, +/area/ruin/syndicate_lava_base/main) +"Yk" = ( +/obj/structure/table/reinforced/plastitaniumglass, +/obj/effect/turf_decal/trimline/dark/filled/line{ + dir = 8 + }, +/obj/effect/turf_decal/tile/dark/full, +/obj/machinery/reagentgrinder{ + pixel_x = -6; + pixel_y = 10 + }, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/medbay) +"Yl" = ( +/obj/effect/turf_decal/siding/dark{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/dark/filled/line, +/obj/effect/turf_decal/trimline/dark/filled/line{ + dir = 1 + }, +/obj/effect/turf_decal/siding/dark/corner{ + dir = 8 + }, +/obj/effect/turf_decal/siding/dark/corner, +/turf/open/floor/iron/dark/textured, +/area/ruin/syndicate_lava_base/bar) +"Ym" = ( +/obj/structure/table/reinforced/plastitaniumglass, +/obj/effect/turf_decal/tile/dark/full, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/testlab) +"Yv" = ( +/obj/structure/flora/tree/jungle/small/style_random, +/obj/structure/flora/bush/sparsegrass/style_random, +/obj/structure/flora/bush/flowers_pp/style_random, +/obj/structure/marker_beacon/purple, +/turf/open/floor/grass, +/area/ruin/syndicate_lava_base/main) +"YA" = ( +/obj/effect/turf_decal/trimline/dark/filled/corner{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/general/hidden, +/turf/open/floor/catwalk_floor/iron_dark, +/area/ruin/syndicate_lava_base/main) +"YB" = ( +/obj/machinery/button/door/directional/north{ + name = "Dorm Bolt Control"; + id = "Dynbin2"; + normaldoorcontrol = 1; + specialfunctions = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/turf_decal/trimline/dark/filled/line{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/dark/filled/line, +/turf/open/floor/iron/dark/textured, +/area/ruin/syndicate_lava_base/dormitories) +"YC" = ( +/obj/effect/turf_decal/tile/dark_red/half{ + dir = 4 + }, +/obj/structure/window/reinforced/survival_pod/spawner/directional/west{ + pixel_x = -4 + }, +/turf/open/floor/engine, +/area/ruin/syndicate_lava_base/testlab) +"YI" = ( +/obj/effect/turf_decal/trimline/dark/filled/line{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/dark/filled/mid_joiner{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/dark/filled/line, +/obj/effect/turf_decal/trimline/dark/filled/mid_joiner, +/obj/structure/curtain/bounty{ + color = "#7d7d7d" + }, +/obj/structure/extinguisher_cabinet/directional/north, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/bar) +"YM" = ( +/obj/machinery/vending/hydroseeds{ + onstation = 0 + }, +/obj/effect/turf_decal/tile/dark/full, +/obj/structure/marker_beacon/olive, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/bar) +"YO" = ( +/obj/structure/closet/crate/secure/gear{ + req_access = list("syndicate"); + anchored = 1 + }, +/obj/effect/turf_decal/bot_red, +/obj/effect/turf_decal/tile/dark/full, +/obj/item/ammo_box/c9mm{ + pixel_y = 6 + }, +/obj/item/ammo_box/c9mm, +/obj/item/ammo_box/magazine/m9mm{ + pixel_x = -5; + pixel_y = 5 + }, +/obj/item/ammo_box/magazine/m9mm{ + pixel_x = -2; + pixel_y = 2 + }, +/obj/item/ammo_box/magazine/m9mm{ + pixel_x = 1; + pixel_y = -1 + }, +/obj/item/ammo_box/magazine/m9mm{ + pixel_x = 4; + pixel_y = -4 + }, +/obj/structure/cable, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/cargo) +"YQ" = ( +/obj/effect/turf_decal/trimline/dark/filled/corner{ + dir = 8 + }, +/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/dark/textured_large, +/area/ruin/syndicate_lava_base/cargo) +"YS" = ( +/obj/effect/turf_decal/stripes/red/line{ + dir = 1 + }, +/obj/effect/turf_decal/caution/red, +/obj/effect/turf_decal/trimline/dark/filled/corner{ + dir = 1 + }, +/obj/structure/marker_beacon/burgundy, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/cargo) +"Zh" = ( +/obj/effect/turf_decal/trimline/dark/filled/line{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/dark/filled/mid_joiner{ + dir = 8 + }, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 4 + }, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/main) +"Zi" = ( +/obj/effect/turf_decal/trimline/dark/filled/corner, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/medbay) +"Zj" = ( +/obj/structure/marker_beacon/teal, +/obj/structure/fans/tiny/forcefield, +/obj/effect/decal/cleanable/glitter/blue, +/obj/effect/turf_decal/trimline/dark/filled/line{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/window/reinforced/survival_pod/spawner/directional/east{ + pixel_x = 4 + }, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/medbay) +"Zl" = ( +/turf/closed/wall/r_wall/syndicate, +/area/ruin/syndicate_lava_base/main) +"Zn" = ( +/obj/effect/turf_decal/trimline/dark/filled/line{ + dir = 4 + }, +/obj/effect/turf_decal/stripes/blue{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/dark/filled/line{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/dark/filled/mid_joiner{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/dark/filled/mid_joiner{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/medbay) +"Zo" = ( +/obj/machinery/modular_shield/module/well{ + dir = 8 + }, +/obj/structure/marker_beacon/indigo, +/obj/effect/turf_decal/box/blue/corners{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/dark/filled/line{ + dir = 10 + }, +/obj/effect/turf_decal/trimline/dark/filled/mid_joiner, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/main) +"Zp" = ( +/obj/machinery/hydroponics/constructable, +/obj/structure/marker_beacon/teal, +/turf/open/floor/grass/fairy, +/area/ruin/syndicate_lava_base/bar) +"Zr" = ( +/turf/closed/wall/r_wall/syndicate, +/area/ruin/syndicate_lava_base/arrivals) +"Zw" = ( +/obj/structure/table/reinforced/plastitaniumglass, +/obj/effect/turf_decal/tile/dark/full, +/obj/item/storage/box/beakers/bluespace, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/testlab) +"Zx" = ( +/obj/structure/flora/grass/brown/style_random, +/obj/structure/flora/tree/pine/style_random, +/turf/open/misc/asteroid/snow/icemoon, +/area/icemoon/underground/explored) +"ZA" = ( +/obj/structure/rack, +/obj/item/knife/combat/survival, +/obj/item/flashlight/seclite, +/obj/effect/turf_decal/tile/dark/full, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/item/flatpacked_machine/ore_thumper, +/obj/item/flatpacked_machine/ore_thumper, +/obj/item/flatpacked_machine/ore_thumper, +/obj/item/gun/energy/recharge/kinetic_accelerator, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/cargo) +"ZH" = ( +/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/ruin/syndicate_lava_base/medbay) +"ZK" = ( +/obj/effect/turf_decal/trimline/dark/filled/line{ + dir = 9 + }, +/obj/effect/turf_decal/trimline/dark/filled/mid_joiner{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/dark/filled/mid_joiner{ + dir = 1 + }, +/obj/effect/turf_decal/siding/thinplating/dark{ + dir = 9 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/main) +"ZL" = ( +/obj/machinery/portable_atmospherics/canister/oxygen, +/turf/open/floor/catwalk_floor/iron_dark, +/area/ruin/syndicate_lava_base/main) +"ZN" = ( +/obj/effect/turf_decal/tile/dark_red/half{ + dir = 8 + }, +/turf/open/floor/engine, +/area/ruin/syndicate_lava_base/testlab) +"ZQ" = ( +/obj/effect/turf_decal/siding/wood/corner, +/obj/effect/turf_decal/siding/wood/corner, +/obj/effect/turf_decal/siding/wood/corner{ + dir = 1 + }, +/turf/closed/wall/r_wall/syndicate, +/area/ruin/syndicate_lava_base/main) +"ZR" = ( +/obj/effect/turf_decal/trimline/dark/filled/line{ + dir = 1 + }, +/obj/effect/turf_decal/stripes/red/line{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/dark/filled/mid_joiner{ + dir = 1 + }, +/obj/effect/turf_decal/stripes/red/corner{ + dir = 1 + }, +/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/dark/textured_large, +/area/ruin/syndicate_lava_base/cargo) +"ZU" = ( +/turf/closed/wall/r_wall/syndicate/nodiagonal, +/area/ruin/syndicate_lava_base/main) + +(1,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(2,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +SH +Iy +eE +Im +ac +ac +Jx +SH +Im +ac +ac +ac +dM +Im +SH +ac +ac +ac +ac +ac +ac +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(3,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +ac +ac +ac +ac +ac +Jx +SH +Iy +ac +ac +Im +Iy +Iy +eE +Se +Se +Iy +dM +Iy +Iy +Iy +Iy +Se +Iy +Se +Iy +Iy +SH +Iy +ac +ac +ac +ac +ac +ac +ac +ac +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(4,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +ac +ac +ac +ac +Iy +Im +Iy +Iy +Iy +eE +Iy +Iy +Iy +Iy +Iy +Se +Iy +Se +Iy +Iy +Iy +eE +Iy +dM +Iy +Iy +Iy +uQ +Iy +Iy +Se +eE +Im +Iy +ac +ac +ac +ac +ac +ac +ac +aa +aa +aa +aa +aa +aa +"} +(5,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +ac +ac +ac +ac +Iy +eE +Iy +Se +Iy +Iy +Iy +eE +Iy +eE +Iy +Se +Iy +Iy +SH +Iy +ab +ab +Iy +Se +Se +Se +Iy +ab +ab +ab +ab +ab +Iy +Iy +JM +Se +Iy +SH +ac +ac +ac +ac +ac +ac +ac +ac +aa +aa +aa +aa +"} +(6,1,1) = {" +aa +aa +aa +aa +aa +ac +ac +ac +SH +uQ +Iy +Iy +Iy +Iy +Iy +Iy +eE +Iy +Iy +eE +Se +dM +Iy +uQ +Iy +ab +ab +ab +ab +ab +Iy +Se +ab +ab +ab +ab +ab +ab +ab +ab +Iy +Iy +Iy +Iy +Iy +dM +Iy +Im +Iy +ac +ac +ac +ac +ac +aa +aa +aa +"} +(7,1,1) = {" +aa +aa +aa +aa +aa +ac +eE +SH +Se +Iy +Im +Iy +Iy +Se +Iy +SH +Iy +Se +Iy +Iy +Iy +Iy +Iy +Iy +ab +ab +Pv +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +Pn +ab +ab +Se +Iy +SH +Iy +Iy +Iy +Se +Iy +Jx +ac +ac +ac +ac +aa +aa +aa +"} +(8,1,1) = {" +aa +aa +aa +aa +ac +ac +Se +Iy +Jx +Iy +Se +Iy +SH +Iy +Iy +Se +Iy +Iy +SH +Iy +Se +Iy +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +SH +SH +ab +ab +ab +ab +ab +ab +ab +ab +Iy +Iy +Iy +Iy +eE +Se +Iy +Iy +Iy +Iy +ac +ac +ac +aa +aa +"} +(9,1,1) = {" +aa +aa +aa +ac +Iy +eE +Iy +Iy +Iy +eE +Iy +Iy +Iy +Iy +eE +Iy +Iy +Iy +ab +ab +ab +ab +ab +ab +ab +ab +ab +yE +kf +kf +kw +kw +kw +kw +kf +dL +dL +Zr +ab +ab +ab +ab +ab +Se +Iy +Iy +Iy +Iy +eE +Se +Iy +Im +Iy +ac +ac +ac +aa +"} +(10,1,1) = {" +aa +aa +ac +eE +Iy +dM +Iy +SH +Iy +Iy +eE +dM +Se +Iy +Iy +Iy +Iy +ab +ab +ab +ab +ab +ab +ab +ab +yE +kf +kf +vT +Wt +kU +my +BA +St +kf +MD +Xc +MD +td +RM +ab +ab +ab +ab +ab +ab +ab +Iy +Iy +Iy +uQ +dM +SH +ac +ac +ac +aa +"} +(11,1,1) = {" +aa +ac +Iy +eE +AR +Iy +Im +Iy +Iy +eE +Iy +Iy +Iy +Iy +dM +Iy +ab +ab +ab +ab +ab +ab +SH +Iz +Iz +kf +kf +aP +Xa +yF +Mp +my +BA +RH +kf +wa +Xo +ln +td +td +td +RM +SH +ab +ab +ab +ab +ab +ab +Iy +Iy +Iy +Iy +SH +ac +ac +aa +"} +(12,1,1) = {" +ac +eE +SH +Iy +FQ +Se +Iy +Iy +Iy +Iy +eE +dM +Iy +Iy +Iy +ab +ab +Pv +ab +ab +ab +sv +sv +FV +dO +VL +kf +LP +Eh +Gp +qC +eS +Ow +Ow +kf +mV +EK +Ae +td +ss +YM +td +td +vo +SH +ab +ab +Pn +ab +ab +Iy +Se +Iy +ac +ac +ac +aa +"} +(13,1,1) = {" +ac +Iy +eE +Iy +eE +Iy +Iy +Iy +eE +eE +Iy +Iy +SH +Iy +dM +ab +ab +ab +ab +ab +sv +CQ +vl +Hb +ao +ov +LA +ov +mG +bk +Mp +my +BA +BA +kf +ue +PG +yu +td +jZ +gG +Qq +jt +vL +vo +ab +ab +ab +ab +ab +Iy +Iy +eE +ac +ac +ac +aa +"} +(14,1,1) = {" +ac +ac +ac +Iy +eE +Iy +uQ +Iy +Iy +Iy +SH +Iy +Iy +Iy +ab +ab +ab +ab +ab +sv +PB +Lm +kN +eC +de +gy +Ce +Rl +rX +XS +qC +eS +Ow +Ow +kf +GM +EK +CM +td +AT +Bt +CE +eo +bG +Gb +vo +ab +ab +ab +ab +SH +Iy +Iy +Im +ac +ac +ac +"} +(15,1,1) = {" +ac +ac +ac +Im +Se +Iy +Jx +Iy +Iy +Se +Iy +uQ +Iy +Iy +ab +ab +ab +ab +sv +Fz +pH +ol +Ac +DX +gy +VJ +kf +hr +ej +jo +Mp +my +BA +BA +kf +IA +PG +ox +td +al +eu +Zp +km +XD +xm +OI +vo +ab +ab +ab +Iy +SH +Iy +Iy +eE +ac +ac +"} +(16,1,1) = {" +ac +ac +Se +dM +Se +Iy +Iy +Iy +dM +Iy +SH +dM +Iy +ab +ab +ab +ab +sv +PB +vZ +KS +xP +xP +eC +wu +so +kf +kk +FT +ya +Pq +YC +YC +DG +kf +GM +EK +fd +td +bC +Yl +xY +xS +Oc +vv +Jd +OH +vo +ab +ab +ab +Iy +Iy +eE +Iy +Iy +ac +"} +(17,1,1) = {" +ac +ac +Se +Iy +Iy +SH +Se +Iy +eE +Iy +eE +Iy +ab +ab +ab +ab +ab +sv +Ua +ad +bR +Ok +ha +DX +wu +yR +kf +fx +Hs +yY +el +ZN +ZN +hT +kf +uV +jH +nz +td +al +eu +Zp +cP +DI +ry +wX +gm +td +ab +ab +ab +Iy +Se +Iy +SH +ac +ac +"} +(18,1,1) = {" +ac +SH +Se +Iy +dM +SH +Iy +Iy +Iy +eE +Iy +Iy +ab +ab +ab +ab +sv +fB +Mu +Ym +uw +Le +gj +XP +wu +kf +kf +kf +kf +kf +HF +HF +HF +HF +kf +nd +Vk +jJ +td +XW +UO +SK +iL +Xz +tJ +HI +tx +td +RM +ab +ab +ab +Iy +Iy +Iy +ac +ac +"} +(19,1,1) = {" +ac +Im +Iy +eE +Iy +Iy +Iy +Se +Iy +Iy +Iy +SH +ab +ab +ab +ab +sv +DZ +VO +Zw +lD +hU +kb +DX +db +kf +nC +El +Pc +Ih +uN +FK +bF +aA +NY +qe +zX +Lc +Lc +eg +eg +HU +TB +td +BL +FO +En +DA +td +ab +ab +ab +ab +Iy +Se +ac +ac +"} +(20,1,1) = {" +ac +SH +Iy +Iy +Se +Iy +eE +Iy +Iy +SH +Iy +ab +ab +ab +ab +yE +kf +oP +ta +Tl +Nv +jI +gn +SJ +Gm +kf +bV +SY +JA +ED +Kz +Yf +Yf +pI +xc +Uo +Tm +NM +Yf +rv +us +us +HN +Zl +aY +Fn +WM +ub +td +RM +ab +ab +ab +ab +Iy +ac +ac +"} +(21,1,1) = {" +ac +Iy +eE +Iy +Iy +Iy +Se +Iy +Iy +ab +ab +ab +ab +ab +ab +kf +kf +kf +kf +kf +kf +ys +Lf +DX +kL +WD +ED +xe +xc +iZ +DH +Dn +qA +WK +nc +nc +au +Gd +lP +wl +gh +fq +If +us +Zl +td +ES +ef +Sm +td +ab +ab +Pn +ab +Im +ac +ac +"} +(22,1,1) = {" +ac +Zx +Iy +uQ +SH +Se +Se +ab +ab +ab +ab +ab +ab +ab +sP +RV +RV +dj +zd +JQ +sP +kf +kf +nT +oZ +bq +ck +XO +nc +oc +Gd +Pr +Pr +Pr +Pr +VP +lc +VP +ZU +ZU +ZU +ZQ +fq +us +us +RM +td +Cd +td +td +RM +ab +ab +ab +Se +Se +ac +"} +(23,1,1) = {" +ac +eE +Iy +Se +Iy +Iy +ab +ab +ab +ab +ak +ab +ab +sP +RV +RV +Am +cn +Rd +wP +yG +uA +Mc +SG +jA +fE +WK +Gd +yM +JA +Pr +ZK +EP +ob +Ie +rf +aT +lH +kc +Uf +Lg +ZU +oG +fq +ge +hL +EA +Xq +LK +RM +td +ab +ab +Iy +eE +ac +ac +"} +(24,1,1) = {" +ac +SH +Se +Iy +Iy +ab +ab +ab +ab +ab +ab +ab +ab +RV +RV +RV +RV +DL +YO +qH +OD +JP +TO +jA +Sh +RV +El +UV +fO +Pr +LD +CN +ju +OP +dw +KW +RE +Qi +sF +Kn +eL +ZU +dR +Gs +XT +cu +iX +FO +QU +vL +NS +ab +ab +Iy +Jx +SH +ac +"} +(25,1,1) = {" +ac +Iy +Iy +Iy +MR +ab +ab +ab +mP +ab +ab +ab +oA +RV +lu +jw +RV +HL +NK +vy +TC +CG +dN +ci +Fl +RV +ZU +ZU +ZU +Zl +uB +TT +MG +nn +Sd +yi +xl +qS +FS +tM +vf +ZU +td +TZ +XT +zl +Lp +kZ +up +vB +NS +SH +ab +Se +Se +ac +ac +"} +(26,1,1) = {" +ac +Se +Iy +Iy +wN +jn +Gh +jn +Uj +jn +jn +jn +oB +pp +YS +bM +yn +YS +Pf +Vs +TI +FF +QK +cj +dP +ex +ZU +cm +cQ +ZU +dJ +iB +EV +xA +Ci +tu +aB +PW +fF +dz +Vp +ZU +Ny +qU +XT +zl +ih +wo +Mw +vB +NS +Iy +ab +Se +Iy +ac +ac +"} +(27,1,1) = {" +ac +Iy +Iy +Iy +Tn +ai +ai +ai +ai +ai +ai +ai +st +pp +JN +gY +Fk +JN +PO +PO +mg +Kb +bv +er +dP +dP +ZU +LC +gT +sL +cl +iB +sQ +GA +wx +KD +sA +nr +xo +sm +MT +ZU +AF +OV +XT +zl +cZ +xf +Iv +EQ +NS +SH +ab +Iy +qg +ac +ac +"} +(28,1,1) = {" +ac +Iy +Iy +Iy +ME +ma +ma +ma +nJ +ma +ma +ma +no +pr +Po +Wa +Fk +Cc +Re +ag +bN +EO +QK +cj +dP +dP +ZU +wF +Cj +ZU +FU +iB +DC +jT +eA +Ip +nS +nb +fF +VC +VE +ZU +gp +yP +XT +zl +bd +ks +sr +vt +NS +Se +ab +Iy +Iy +ac +ac +"} +(29,1,1) = {" +ac +SH +Iy +Iy +kr +ab +ab +ab +tT +ab +ab +ab +mp +RV +LR +Hy +RV +FH +WX +uk +Sb +RZ +BR +KY +gF +RV +ZU +ZU +ZU +Zl +Gx +ns +XH +nn +Sd +yi +xl +tB +Fq +Na +sZ +ZU +td +PI +oV +Li +bu +qY +up +eX +NS +Se +ab +ab +dM +ac +ac +"} +(30,1,1) = {" +ac +Se +dT +Iy +Iy +ab +ab +ab +ab +ab +ab +ab +ab +RV +RV +RV +RV +Tv +wm +ht +ZA +WC +ZR +YQ +sg +RV +ux +bz +cV +Pr +PK +sE +Zo +oj +UT +Zh +ie +Yc +vz +YA +oE +ZU +Yv +Gs +XT +GD +EA +Wz +NJ +IP +NS +ab +ab +ab +Iy +ac +ac +"} +(31,1,1) = {" +ac +SH +Iy +Se +Iy +SH +SH +ab +ab +ab +Pv +ab +ab +sP +RV +RV +Vn +Kl +pg +VK +Dr +eQ +ar +CZ +YQ +WF +qe +aA +JA +Oz +Pr +yy +dm +rg +wn +Sg +iy +CR +Ve +jf +ZL +ZU +DT +jg +ge +hL +iX +Ou +uX +RM +td +ab +ab +ab +Se +ac +ac +"} +(32,1,1) = {" +ac +Iy +eE +eE +Iy +Iy +Iy +Iy +ab +ab +ab +ab +Iy +SH +sP +RV +RV +ce +Vr +Bf +sP +yQ +yQ +Vz +Er +Gr +ck +Fx +Lc +UI +aA +Pr +Pr +Pr +Pr +VP +lc +VP +ZU +ZU +ZU +BO +jg +us +us +RM +td +YI +td +td +RM +ab +ab +ab +Se +Iy +ac +"} +(33,1,1) = {" +ac +eE +Im +BF +eE +Iy +eE +Iy +ab +ab +ab +ab +SH +cS +wr +BE +BE +um +yQ +yQ +yQ +KP +vH +kE +Zi +dy +NB +lZ +Yf +rv +DH +jb +qK +qe +Lc +Lc +xc +aA +EL +Ch +bF +jg +If +us +Zl +wG +GB +tS +jy +td +ab +ab +dk +ab +Iy +Im +ac +"} +(34,1,1) = {" +ac +ac +eE +Iy +eE +Se +SH +Iy +uQ +ab +ab +ab +ab +SH +Iy +Mn +yQ +aE +Yk +pU +Yb +CA +yd +as +rP +yQ +aV +ed +yM +NB +fe +xc +xc +Kz +Yf +nx +If +Ya +xc +iZ +us +us +sc +Zl +td +hu +yJ +Xh +td +RM +ab +ab +ab +ab +Iy +SH +ac +"} +(35,1,1) = {" +ac +ac +ac +dS +Iy +eE +Iy +Se +Iy +ab +ab +ab +ab +ab +Iy +SH +ds +iG +cW +Fu +Km +oW +LB +cO +df +yQ +ph +El +pk +JA +gs +yB +gh +Gd +Uq +WK +gZ +nc +nc +nc +Ol +vq +CC +td +Xw +EJ +Wu +zT +td +ab +ab +ab +ab +ab +SH +ac +ac +"} +(36,1,1) = {" +aa +ac +ac +eE +eE +SH +eE +Se +Iy +dM +ab +ab +ab +ab +ab +ab +ds +Ij +sR +pK +Yb +RN +Mt +Bp +qd +yQ +yQ +yQ +yQ +yQ +Yb +Yb +Yb +Yb +yQ +sa +oz +sa +zF +zF +zF +td +td +VW +XT +xq +XT +td +RM +ab +ab +ab +ab +Iy +Iy +ac +ac +"} +(37,1,1) = {" +aa +ac +ac +eE +eE +Im +Iy +SH +Iy +Iy +ab +ab +ab +ab +ab +ab +ab +ds +gA +cN +CK +Tu +Df +Ns +bh +Ho +KC +cY +sY +fG +zp +kl +GQ +Ca +yQ +EU +ft +zF +oS +Pt +zF +wU +gL +Fo +tS +Jq +BB +nP +ab +ab +ab +ab +ab +Se +Iy +ac +ac +"} +(38,1,1) = {" +aa +ac +ac +ac +eE +eE +eE +Se +Iy +Iy +Iy +ab +ab +ab +ab +ab +ab +ds +cx +VQ +PQ +gB +pc +OQ +kp +PQ +Ib +Gv +Zn +Tf +Ad +Td +CX +lT +yQ +zu +ft +zF +XC +Vt +zF +Jq +Wu +Pm +Xh +Jq +bf +nP +ab +ab +ab +ab +Iy +Se +SH +ac +ac +"} +(39,1,1) = {" +aa +aa +ac +ac +Iy +eE +Se +Iy +SH +Se +Iy +Iy +ab +ab +ab +ab +ab +ab +ds +qa +rD +Kg +BC +iQ +ZH +PQ +of +Is +UE +iS +Os +Bn +oN +GJ +yQ +Eq +rT +Ut +pe +WE +zF +td +zI +Wx +gz +Jq +nP +ab +ab +ab +ab +ab +Iy +Im +ac +ac +ac +"} +(40,1,1) = {" +aa +aa +aa +ac +ac +ac +Iy +Iy +Iy +Iy +Iy +eE +Iy +ab +ab +ab +ab +ab +ab +ds +Qx +oO +BZ +Fy +IS +Rv +Ko +VM +nq +qp +nq +BT +oe +vW +kV +eN +hA +zF +zF +zF +zF +Jq +Lw +Mk +mr +nP +ab +ab +ab +ab +ab +SH +Iy +ac +ac +ac +ac +"} +(41,1,1) = {" +aa +aa +aa +ac +ac +ac +ac +ac +Im +Iy +Iy +Iy +Iy +Iy +ab +ab +ab +ab +ab +ab +ds +tc +IM +Tk +tl +kh +Zj +rG +Ue +gN +Ue +Ue +Ld +wv +Zj +Vu +fg +bY +My +Pt +zF +it +BB +ap +nP +ab +ab +ab +ab +ab +Iy +Se +dM +ac +ac +ac +ac +"} +(42,1,1) = {" +aa +aa +aa +aa +aa +ac +ac +ac +ac +Se +Jx +Iy +Se +Iy +ab +ab +ab +ak +ab +ab +ab +ds +yQ +yQ +yq +LM +yQ +to +Oe +Fi +tw +nA +aG +Hn +yQ +zF +op +zF +YB +WS +zF +td +nP +nP +ab +ab +ab +dk +ab +Iy +Se +Se +eE +ac +ac +ac +ac +"} +(43,1,1) = {" +aa +aa +aa +aa +aa +aa +ac +ac +ac +Se +Iy +Iy +Iy +Se +ab +ab +ab +ab +ab +ab +ab +ab +SH +Mn +yQ +yQ +yQ +yQ +UP +pF +xs +Tc +Vy +hb +yQ +DE +Gl +zF +TH +zF +zF +RM +SM +ab +ab +ab +ab +ab +ab +Iy +Se +Iy +ac +ac +ac +ac +aa +"} +(44,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +ac +ac +ac +SH +Iy +eE +Iy +Iy +ab +ab +ab +ab +ab +ab +ab +ab +ab +SH +Mn +yQ +yQ +jR +cD +QN +hz +BS +pN +yQ +mA +RQ +zF +zF +Pw +SM +ab +ab +ab +ab +ab +ab +Iy +Iy +SH +Iy +Im +ac +ac +ac +ac +aa +"} +(45,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +ac +ac +Se +Iy +Iy +eE +Iy +Iy +Iy +uQ +ab +ab +ab +ab +ab +ab +ab +ab +ab +Mn +yQ +yQ +jm +jm +jm +jm +yQ +NV +zF +Pw +ab +SM +ab +ab +ab +ab +Iy +Iy +Iy +Iy +Iy +SH +Iy +dM +ac +ac +ac +aa +aa +"} +(46,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +ac +ac +ac +ac +Im +Iy +dM +Iy +Se +Iy +Iy +ab +ab +ab +ab +ab +ab +ab +ab +ab +SH +Se +Iy +ab +ab +ab +Iy +SH +ab +ab +ab +ab +ab +ab +dM +Jx +Se +Iy +Iy +Se +Iy +Se +Iy +ac +ac +ac +ac +aa +aa +"} +(47,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +ac +ac +ac +ac +Iy +SH +Iy +Iy +Se +Se +Iy +ab +ab +ab +ab +ab +ab +ak +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +dk +ab +ab +ab +Iy +Iy +Iy +eE +Iy +Im +Iy +uQ +ac +ac +ac +ac +aa +aa +aa +"} +(48,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +ac +ac +ac +Iy +Se +Iy +Iy +dM +Iy +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +Iy +Iy +Iy +Iy +eE +Iy +Iy +dM +ac +ac +ac +ac +aa +aa +aa +aa +aa +"} +(49,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +ac +ac +ac +Iy +Iy +Im +Iy +Iy +dM +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +Iy +Iy +Iy +Iy +Iy +Se +Iy +SH +Iy +eE +ac +ac +ac +ac +ac +aa +aa +aa +aa +aa +aa +"} +(50,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +ac +ac +ac +ac +ac +ac +Iy +SH +Iy +Iy +Se +Se +Iy +Iy +Iy +Iy +ab +ab +ab +dM +Iy +Iy +SH +on +Se +Iy +dM +SH +Se +Im +ac +ac +ac +ac +ac +ac +ac +aa +aa +aa +aa +aa +aa +aa +aa +"} +(51,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +ac +ac +ac +ac +ac +ac +ac +ac +ac +Im +SH +ac +ac +Se +Im +ac +ac +ac +SH +Jx +eE +eZ +tv +ac +Se +Se +eE +ac +ac +ac +ac +ac +ac +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(52,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} diff --git a/_maps/RandomRuins/IceRuins/icemoon_surface_engioutpost.dmm b/_maps/RandomRuins/IceRuins/icemoon_surface_engioutpost.dmm index 5c9336c5c5c..6f86429720a 100644 --- a/_maps/RandomRuins/IceRuins/icemoon_surface_engioutpost.dmm +++ b/_maps/RandomRuins/IceRuins/icemoon_surface_engioutpost.dmm @@ -88,7 +88,7 @@ /turf/open/floor/iron, /area/ruin/planetengi) "aA" = ( -/obj/machinery/rnd/production/protolathe/department/engineering/no_tax, +/obj/machinery/rnd/production/protolathe/department/engineering, /obj/effect/turf_decal/trimline/yellow/filled/warning{ dir = 9 }, diff --git a/_maps/RandomRuins/IceRuins/icemoon_surface_gas.dmm b/_maps/RandomRuins/IceRuins/icemoon_surface_gas.dmm index 21862135013..ab89e26af80 100644 --- a/_maps/RandomRuins/IceRuins/icemoon_surface_gas.dmm +++ b/_maps/RandomRuins/IceRuins/icemoon_surface_gas.dmm @@ -13,7 +13,7 @@ "bn" = ( /obj/structure/closet/crate/trashcart/filled, /turf/open/floor/plating/snowed/smoothed/icemoon, -/area/ruin/powered/lizard_gas) +/area/icemoon/underground/unexplored) "bJ" = ( /obj/machinery/light/cold/directional/north, /turf/open/floor/plating/snowed/icemoon, @@ -29,57 +29,22 @@ /area/ruin/powered/lizard_gas) "cF" = ( /obj/structure/rack, -/obj/item/food/cornchips/blue{ - pixel_x = -5; - pixel_y = -5 - }, /obj/item/food/cornchips/blue{ pixel_x = -5; pixel_y = 5 }, -/obj/item/food/cornchips/blue{ - pixel_x = -5; - pixel_y = 3 - }, /obj/item/food/cornchips/blue{ pixel_x = -5; pixel_y = 1 }, -/obj/item/food/cornchips/blue{ - pixel_x = -5; - pixel_y = -1 - }, -/obj/item/food/cornchips/blue{ - pixel_x = -5; - pixel_y = -3 - }, -/obj/item/food/cornchips/green{ - pixel_x = 8; - pixel_y = -5 - }, /obj/item/food/cornchips/green{ pixel_x = 8; pixel_y = 5 }, -/obj/item/food/cornchips/green{ - pixel_x = 8; - pixel_y = 3 - }, /obj/item/food/cornchips/green{ pixel_x = 8; pixel_y = 1 }, -/obj/item/food/cornchips/green{ - pixel_x = 8; - pixel_y = -1 - }, -/obj/item/food/cornchips/green{ - pixel_x = 8; - pixel_y = -3 - }, -/obj/item/food/cornchips/red{ - pixel_y = -5 - }, /obj/item/food/cornchips/red{ pixel_y = 5 }, @@ -92,12 +57,6 @@ /obj/item/food/cornchips/red{ pixel_y = -1 }, -/obj/item/food/cornchips/red{ - pixel_y = -3 - }, -/obj/item/food/cornchips/purple{ - pixel_y = -4 - }, /obj/item/food/cornchips/purple{ pixel_y = 4 }, @@ -118,7 +77,7 @@ "ed" = ( /obj/effect/spawner/random/structure/closet_empty/crate, /turf/open/floor/plating/snowed/smoothed/icemoon, -/area/ruin/powered/lizard_gas) +/area/icemoon/underground/unexplored) "es" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/general/hidden, @@ -134,7 +93,9 @@ /turf/open/floor/plating, /area/ruin/powered/lizard_gas) "eM" = ( -/obj/structure/fans/tiny/invisible, +/obj/machinery/atmospherics/components/unary/vent_pump/high_volume/on{ + dir = 4 + }, /turf/open/floor/iron, /area/ruin/powered/lizard_gas) "eZ" = ( @@ -173,6 +134,7 @@ pixel_x = -7 }, /obj/structure/window/spawner/directional/north, +/obj/machinery/light/cold/directional/east, /turf/open/floor/iron, /area/ruin/powered/lizard_gas) "gv" = ( @@ -185,7 +147,6 @@ "ih" = ( /obj/structure/sign/poster/fluff/lizards_gas_payment/directional/east, /mob/living/basic/lizard/space, -/obj/machinery/light/cold/directional/east, /turf/open/floor/iron, /area/ruin/powered/lizard_gas) "iS" = ( @@ -206,8 +167,10 @@ dir = 4 }, /obj/structure/cable, -/obj/structure/fans/tiny/invisible, /obj/machinery/duct, +/obj/machinery/atmospherics/components/unary/vent_pump/high_volume/on{ + dir = 4 + }, /turf/open/floor/iron, /area/ruin/powered/lizard_gas) "ku" = ( @@ -216,7 +179,7 @@ "kI" = ( /obj/effect/spawner/random/trash/grille_or_waste, /turf/open/floor/plating/snowed/smoothed/icemoon, -/area/ruin/powered/lizard_gas) +/area/icemoon/underground/unexplored) "kS" = ( /obj/machinery/duct, /turf/open/floor/iron, @@ -232,7 +195,7 @@ pixel_y = 2 }, /turf/open/floor/plating/snowed/icemoon, -/area/ruin/powered/lizard_gas) +/area/icemoon/underground/unexplored) "lK" = ( /obj/structure/cable, /turf/open/floor/iron, @@ -242,12 +205,13 @@ /obj/structure/cable, /obj/effect/spawner/random/trash/food_packaging, /obj/machinery/duct, +/obj/machinery/atmospherics/pipe/smart/manifold4w/general/hidden, /turf/open/floor/iron, /area/ruin/powered/lizard_gas) "mE" = ( /obj/structure/bonfire/prelit, /turf/open/floor/plating/snowed/smoothed/icemoon, -/area/ruin/powered/lizard_gas) +/area/icemoon/underground/unexplored) "oo" = ( /turf/closed/wall, /area/ruin/powered/lizard_gas) @@ -272,7 +236,7 @@ "pO" = ( /obj/effect/spawner/random/trash/hobo_squat, /turf/open/misc/asteroid/snow/icemoon, -/area/ruin/powered/lizard_gas) +/area/icemoon/underground/unexplored) "qM" = ( /obj/structure/reagent_dispensers/watertank, /obj/machinery/duct, @@ -303,23 +267,22 @@ "sQ" = ( /obj/effect/spawner/random/structure/grille, /turf/open/floor/plating/snowed/smoothed/icemoon, -/area/ruin/powered/lizard_gas) +/area/icemoon/underground/unexplored) "sU" = ( /obj/structure/barricade/wooden/snowed, /obj/structure/barricade/wooden/crude/snow, /turf/open/floor/plating/snowed/smoothed/icemoon, -/area/ruin/powered/lizard_gas) +/area/icemoon/underground/unexplored) "tx" = ( /obj/effect/turf_decal/delivery, /turf/open/floor/plating/snowed/icemoon, -/area/ruin/powered/lizard_gas) +/area/icemoon/underground/unexplored) "tW" = ( /obj/machinery/atmospherics/components/tank/air, /turf/open/floor/plating, /area/ruin/powered/lizard_gas) "ul" = ( /obj/effect/decal/cleanable/dirt, -/obj/machinery/light/cold/directional/east, /turf/open/floor/iron, /area/ruin/powered/lizard_gas) "ur" = ( @@ -328,7 +291,7 @@ "uv" = ( /obj/structure/shipping_container/donk_co, /turf/open/misc/asteroid/snow/icemoon, -/area/ruin/powered/lizard_gas) +/area/icemoon/underground/unexplored) "vA" = ( /obj/effect/decal/cleanable/dirt, /obj/structure/sign/poster/official/jim_nortons/directional/south, @@ -344,7 +307,7 @@ "wN" = ( /obj/effect/spawner/random/structure/closet_empty/crate, /turf/open/misc/asteroid/snow/icemoon, -/area/ruin/powered/lizard_gas) +/area/icemoon/underground/unexplored) "wU" = ( /obj/structure/table/reinforced, /obj/item/food/croissant{ @@ -395,7 +358,7 @@ pixel_y = 2 }, /turf/open/floor/plating/snowed/icemoon, -/area/ruin/powered/lizard_gas) +/area/icemoon/underground/unexplored) "zm" = ( /obj/machinery/light/cold/directional/east, /turf/open/floor/plating/snowed/smoothed/icemoon, @@ -427,7 +390,7 @@ "El" = ( /obj/structure/table, /turf/open/floor/plating/snowed/icemoon, -/area/ruin/powered/lizard_gas) +/area/icemoon/underground/unexplored) "Ez" = ( /obj/structure/billboard/roadsign/twothousand, /turf/open/misc/asteroid/snow/icemoon, @@ -449,6 +412,10 @@ }, /turf/open/floor/iron, /area/ruin/powered/lizard_gas) +"Gn" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/general/hidden, +/turf/open/floor/iron, +/area/ruin/powered/lizard_gas) "GO" = ( /obj/structure/water_source/puddle, /turf/open/floor/plating/snowed/smoothed/icemoon, @@ -477,24 +444,24 @@ "KG" = ( /obj/effect/spawner/random/structure/grille, /turf/open/misc/asteroid/snow/icemoon, -/area/ruin/powered/lizard_gas) +/area/icemoon/underground/unexplored) "Lh" = ( /obj/structure/barricade/wooden/snowed, /obj/structure/barricade/wooden/crude/snow, /turf/open/misc/asteroid/snow/icemoon, -/area/ruin/powered/lizard_gas) +/area/icemoon/underground/unexplored) "LG" = ( /obj/structure/billboard/lizards_gas, /turf/open/misc/asteroid/snow/icemoon, /area/icemoon/underground/unexplored) "LP" = ( /obj/structure/mop_bucket, -/turf/open/floor/plating/snowed/smoothed/icemoon, +/turf/open/floor/plating/snowed/icemoon, /area/icemoon/underground/unexplored) "Md" = ( /obj/effect/spawner/random/structure/crate_abandoned, /turf/open/floor/plating/snowed/smoothed/icemoon, -/area/ruin/powered/lizard_gas) +/area/icemoon/underground/unexplored) "Mz" = ( /obj/machinery/light/cold/directional/south, /turf/open/floor/plating/snowed/icemoon, @@ -568,7 +535,7 @@ "Rc" = ( /obj/structure/shipping_container/nanotrasen, /turf/open/floor/plating/snowed/smoothed/icemoon, -/area/ruin/powered/lizard_gas) +/area/icemoon/underground/unexplored) "Rs" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/general, @@ -577,9 +544,6 @@ "RC" = ( /obj/effect/decal/cleanable/dirt/dust, /obj/machinery/power/apc/auto_name/directional/south, -/obj/machinery/power/terminal, -/obj/effect/mapping_helpers/apc/full_charge, -/obj/effect/mapping_helpers/apc/cell_10k, /obj/effect/mapping_helpers/apc/unlocked, /obj/machinery/power/port_gen/pacman/pre_loaded, /obj/structure/cable, @@ -598,12 +562,12 @@ "RW" = ( /obj/effect/spawner/random/structure/crate_loot, /turf/open/misc/asteroid/snow/icemoon, -/area/ruin/powered/lizard_gas) +/area/icemoon/underground/unexplored) "SZ" = ( /obj/structure/table, /obj/item/mop, /turf/open/floor/plating/snowed/icemoon, -/area/ruin/powered/lizard_gas) +/area/icemoon/underground/unexplored) "Tz" = ( /obj/effect/decal/cleanable/dirt, /obj/structure/rack, @@ -620,6 +584,15 @@ pixel_x = 4 }, /obj/machinery/light/cold/directional/west, +/obj/machinery/atmospherics/pipe/smart/manifold4w/general/hidden, +/obj/item/food/chocolatebar{ + pixel_y = 2; + pixel_x = 5 + }, +/obj/item/food/chocolatebar{ + pixel_y = -3; + pixel_x = -4 + }, /turf/open/floor/iron, /area/ruin/powered/lizard_gas) "TA" = ( @@ -637,6 +610,9 @@ /obj/effect/spawner/random/food_or_drink/booze, /turf/open/floor/iron, /area/ruin/powered/lizard_gas) +"Vq" = ( +/turf/open/floor/plating/snowed/icemoon, +/area/icemoon/underground/unexplored) "Ww" = ( /obj/machinery/duct, /turf/open/floor/plating/snowed/icemoon, @@ -669,7 +645,7 @@ "YC" = ( /obj/effect/spawner/random/structure/crate_loot, /turf/open/floor/plating/snowed/smoothed/icemoon, -/area/ruin/powered/lizard_gas) +/area/icemoon/underground/unexplored) (1,1,1) = {" gv @@ -709,7 +685,7 @@ gv gv gv gv -LP +Ji Ji Ji Ji @@ -736,10 +712,10 @@ gv Ji Ji Ji -GO +Ji tx tx -El +GO Ji Ji gv @@ -767,7 +743,7 @@ zh tx tx El -Bc +Vq Ji gv gv @@ -794,7 +770,7 @@ SZ tx tx kT -Bc +LP Ji gv gv @@ -1036,7 +1012,7 @@ FP yG cF Tz -Ao +Gn ma sn oo @@ -1063,7 +1039,7 @@ QQ lK dd es -es +lK es eZ oo @@ -1135,10 +1111,10 @@ gv gv gv sQ -Jv +Ji Rc -Jv -Jv +Ji +Ji oo QK ul @@ -1162,10 +1138,10 @@ gv gv gv sQ -Jv -HE -Jv -Jv +Ji +ur +Ji +Ji oo oo oo @@ -1189,12 +1165,12 @@ gv gv gv sU -Jv -Jv +Ji +Ji sU YC ed -Jv +Ji oo tW Py @@ -1217,10 +1193,10 @@ gv gv Lh bn -Jv -Jv +Ji +Ji wN -Jv +Ji ed oo xK @@ -1243,12 +1219,12 @@ gv gv gv sU -Jv +Ji uv sU -Jv -Jv -Jv +Ji +Ji +Ji xw ku HI @@ -1270,12 +1246,12 @@ gv gv gv sQ -Jv -Jv -Jv -Jv +Ji +Ji +Ji +Ji ed -Jv +Ji oo aR aR @@ -1297,18 +1273,18 @@ gv gv gv sQ -Jv -Jv +Ji +Ji ed wN RW mE pO -HE -Jv -Jv -Jv -HE +ur +Ji +Ji +Ji +ur kI gv gv @@ -1324,18 +1300,18 @@ gv gv gv KG -Jv -Jv +Ji +Ji YC Md -Jv -Jv -Jv -Jv -Jv -HE -Jv -Jv +Ji +Ji +Ji +Ji +Ji +ur +Ji +Ji kI gv gv diff --git a/_maps/RandomRuins/IceRuins/icemoon_surface_ore_vent.dmm b/_maps/RandomRuins/IceRuins/icemoon_surface_ore_vent.dmm new file mode 100644 index 00000000000..51584f90f86 --- /dev/null +++ b/_maps/RandomRuins/IceRuins/icemoon_surface_ore_vent.dmm @@ -0,0 +1,27 @@ +//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE +"a" = ( +/turf/template_noop, +/area/template_noop) +"l" = ( +/turf/open/misc/asteroid/snow/icemoon, +/area/icemoon/surface/outdoors/unexplored/rivers/no_monsters) +"L" = ( +/obj/structure/ore_vent/random/icebox, +/turf/open/misc/asteroid/snow/icemoon, +/area/icemoon/surface/outdoors/unexplored/rivers/no_monsters) + +(1,1,1) = {" +a +l +a +"} +(2,1,1) = {" +l +L +l +"} +(3,1,1) = {" +a +l +a +"} diff --git a/_maps/RandomRuins/IceRuins/icemoon_surface_phonebooth.dmm b/_maps/RandomRuins/IceRuins/icemoon_surface_phonebooth.dmm index 5f938145714..1a12daf1c6b 100644 --- a/_maps/RandomRuins/IceRuins/icemoon_surface_phonebooth.dmm +++ b/_maps/RandomRuins/IceRuins/icemoon_surface_phonebooth.dmm @@ -6,10 +6,8 @@ }, /area/ruin/powered/icemoon_phone_booth) "c" = ( -/obj/machinery/door/window{ - dir = 1 - }, -/obj/machinery/door/window, +/obj/machinery/door/window/left/directional/north, +/obj/machinery/door/window/left/directional/south, /turf/open/floor/iron/dark/smooth_edge{ dir = 4 }, diff --git a/_maps/RandomRuins/IceRuins/icemoon_underground_abandoned_plasma_facility.dmm b/_maps/RandomRuins/IceRuins/icemoon_underground_abandoned_plasma_facility.dmm index 865695e5b33..356bed29f9f 100644 --- a/_maps/RandomRuins/IceRuins/icemoon_underground_abandoned_plasma_facility.dmm +++ b/_maps/RandomRuins/IceRuins/icemoon_underground_abandoned_plasma_facility.dmm @@ -1016,7 +1016,7 @@ /area/ruin/plasma_facility/commons) "pE" = ( /obj/structure/bed/maint, -/obj/item/bedsheet/dorms, +/obj/effect/spawner/random/bedsheet, /obj/item/flashlight/flare/candle{ pixel_x = 12; pixel_y = 9 diff --git a/_maps/RandomRuins/IceRuins/icemoon_underground_abandoned_village.dmm b/_maps/RandomRuins/IceRuins/icemoon_underground_abandoned_village.dmm index c2b11194dfb..97b4e3d53c9 100644 --- a/_maps/RandomRuins/IceRuins/icemoon_underground_abandoned_village.dmm +++ b/_maps/RandomRuins/IceRuins/icemoon_underground_abandoned_village.dmm @@ -40,7 +40,7 @@ "fD" = ( /obj/structure/bed, /obj/effect/decal/cleanable/blood/bubblegum, -/obj/item/bedsheet/random, +/obj/effect/spawner/random/bedsheet/any, /turf/open/floor/wood, /area/ruin/powered) "gG" = ( @@ -416,7 +416,7 @@ /obj/structure/bed{ dir = 4 }, -/obj/item/bedsheet/random{ +/obj/effect/spawner/random/bedsheet/any{ dir = 4 }, /turf/open/floor/wood, diff --git a/_maps/RandomRuins/IceRuins/icemoon_underground_frozen_comms.dmm b/_maps/RandomRuins/IceRuins/icemoon_underground_frozen_comms.dmm index 25f29890f45..eb537cd26f6 100644 --- a/_maps/RandomRuins/IceRuins/icemoon_underground_frozen_comms.dmm +++ b/_maps/RandomRuins/IceRuins/icemoon_underground_frozen_comms.dmm @@ -63,7 +63,7 @@ "oj" = ( /obj/effect/decal/cleanable/dirt, /obj/structure/bed, -/obj/item/bedsheet/dorms, +/obj/effect/spawner/random/bedsheet, /turf/open/floor/iron/grimy{ initial_gas_mix = "ICEMOON_ATMOS" }, diff --git a/_maps/RandomRuins/IceRuins/icemoon_underground_mailroom.dmm b/_maps/RandomRuins/IceRuins/icemoon_underground_mailroom.dmm index 0f2fcf59ba7..05d5324cac0 100644 --- a/_maps/RandomRuins/IceRuins/icemoon_underground_mailroom.dmm +++ b/_maps/RandomRuins/IceRuins/icemoon_underground_mailroom.dmm @@ -113,7 +113,7 @@ /area/ruin/powered/mailroom) "kZ" = ( /obj/structure/filingcabinet/chestdrawer/wheeled, -/obj/item/valentine, +/obj/item/paper/valentine, /obj/item/grenade/c4, /obj/item/clothing/accessory/medal/conduct, /obj/item/paper/crumpled/muddy/fluff/instructions, @@ -270,15 +270,11 @@ /area/icemoon/underground/explored) "DY" = ( /obj/structure/table/reinforced, -/obj/machinery/door/window{ - dir = 1 - }, -/obj/machinery/door/window{ - dir = 2 - }, +/obj/machinery/door/window/left/directional/north, /obj/structure/window/spawner/directional/east, /obj/item/toy/figure/cargotech, /obj/item/paper/crumpled/bloody/fluff/stations/lavaland/mailroom/waiting, +/obj/machinery/door/window/left/directional/south, /turf/open/floor/noslip, /area/ruin/powered/mailroom) "FC" = ( diff --git a/_maps/RandomRuins/IceRuins/icemoon_underground_ore_vent.dmm b/_maps/RandomRuins/IceRuins/icemoon_underground_ore_vent.dmm new file mode 100644 index 00000000000..db409d08c8c --- /dev/null +++ b/_maps/RandomRuins/IceRuins/icemoon_underground_ore_vent.dmm @@ -0,0 +1,27 @@ +//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE +"a" = ( +/turf/template_noop, +/area/template_noop) +"l" = ( +/turf/open/misc/asteroid/snow/icemoon, +/area/icemoon/underground/unexplored) +"L" = ( +/obj/structure/ore_vent/random/icebox/lower, +/turf/open/misc/asteroid/snow/icemoon, +/area/icemoon/underground/unexplored) + +(1,1,1) = {" +a +l +a +"} +(2,1,1) = {" +l +L +l +"} +(3,1,1) = {" +a +l +a +"} diff --git a/_maps/RandomRuins/IceRuins/nova/icemoon_underground_icewalker_lower.dmm b/_maps/RandomRuins/IceRuins/nova/icemoon_underground_icewalker_lower.dmm index 6c1b5fc71eb..0231c4bb4f6 100644 --- a/_maps/RandomRuins/IceRuins/nova/icemoon_underground_icewalker_lower.dmm +++ b/_maps/RandomRuins/IceRuins/nova/icemoon_underground_icewalker_lower.dmm @@ -167,12 +167,8 @@ /turf/open/misc/dirt/icemoon, /area/ruin/unpowered/primitive_catgirl_den) "dS" = ( -/obj/structure/bed/maint{ - pixel_y = 13 - }, -/obj/item/bedsheet/black{ - pixel_y = 12 - }, +/obj/structure/wall_torch/spawns_lit/directional/north, +/obj/structure/curtain/bounty, /turf/open/misc/dirt/icemoon, /area/ruin/unpowered/primitive_catgirl_den) "ed" = ( @@ -246,6 +242,22 @@ /obj/structure/flora/ash, /turf/open/misc/dirt/icemoon, /area/ruin/unpowered/primitive_catgirl_den) +"gd" = ( +/obj/structure/rack/wooden, +/obj/item/towel{ + pixel_y = 9; + pixel_x = 5 + }, +/obj/item/towel{ + pixel_y = -5; + pixel_x = 1 + }, +/obj/item/towel{ + pixel_y = -5; + pixel_x = -5 + }, +/turf/open/floor/wood/icemoon, +/area/ruin/unpowered/primitive_catgirl_den) "gt" = ( /obj/structure/rack/wooden, /obj/item/shovel, @@ -556,18 +568,12 @@ /area/ruin/unpowered/primitive_catgirl_den) "mN" = ( /obj/structure/wall_torch/spawns_lit/directional/north, -/obj/structure/rack/wooden, -/obj/item/towel{ - pixel_y = -5; - pixel_x = -5 - }, -/obj/item/towel{ - pixel_y = -5; - pixel_x = 1 +/obj/structure/bed/maint, +/obj/structure/bed/maint{ + pixel_y = 13 }, -/obj/item/towel{ - pixel_y = 9; - pixel_x = 5 +/obj/item/bedsheet/black/double{ + dir = 1 }, /turf/open/misc/dirt/icemoon, /area/ruin/unpowered/primitive_catgirl_den) @@ -678,15 +684,13 @@ /turf/open/misc/dirt/icemoon, /area/ruin/unpowered/primitive_catgirl_den) "pc" = ( -/obj/structure/table/wood, -/obj/item/plate/oven_tray/material/fake_brass{ - pixel_y = 5; - pixel_x = -13 +/obj/item/bedsheet/black{ + pixel_y = 12 }, -/obj/item/stack/sheet/bone{ - pixel_y = 7; - pixel_x = -13 +/obj/structure/bed/maint{ + pixel_y = 13 }, +/obj/structure/bed/dogbed, /turf/open/misc/dirt/icemoon, /area/ruin/unpowered/primitive_catgirl_den) "pA" = ( @@ -783,6 +787,18 @@ /obj/machinery/oven/stone, /turf/open/floor/stone/icemoon, /area/ruin/unpowered/primitive_catgirl_den) +"qU" = ( +/obj/effect/turf_decal/weather/snow/corner{ + dir = 4 + }, +/obj/effect/turf_decal/weather/snow/corner{ + dir = 8 + }, +/obj/structure/mineral_door/wood/large_gate{ + dir = 1 + }, +/turf/open/misc/dirt/icemoon, +/area/ruin/unpowered/primitive_catgirl_den) "ra" = ( /obj/structure/rack/wooden, /turf/open/misc/dirt/icemoon, @@ -839,15 +855,8 @@ /turf/open/misc/dirt/icemoon, /area/ruin/unpowered/primitive_catgirl_den) "rX" = ( -/obj/structure/rack/wooden, -/obj/item/reagent_containers/cup/glass/bottle/hooch{ - pixel_y = 2; - pixel_x = -5 - }, -/obj/item/reagent_containers/cup/glass/trophy/bronze_cup{ - pixel_x = 8; - pixel_y = 4 - }, +/obj/structure/wall_torch/spawns_lit/directional/south, +/obj/structure/curtain/bounty, /turf/open/misc/dirt/icemoon, /area/ruin/unpowered/primitive_catgirl_den) "sf" = ( @@ -952,6 +961,7 @@ /obj/item/seeds/olive, /obj/item/seeds/peanut, /obj/item/seeds/peas, +/obj/item/seeds/banana, /turf/open/misc/dirt/icemoon, /area/ruin/unpowered/primitive_catgirl_den) "vx" = ( @@ -1173,8 +1183,9 @@ /turf/open/misc/asteroid/snow/icemoon, /area/ruin/unpowered/primitive_catgirl_den) "Br" = ( -/obj/structure/wall_torch/spawns_lit/directional/north, -/obj/structure/bed/dogbed, +/obj/structure/closet/xenoarch/ashwalker_version, +/obj/item/stack/cable_coil, +/obj/item/stack/cable_coil, /turf/open/misc/dirt/icemoon, /area/ruin/unpowered/primitive_catgirl_den) "BO" = ( @@ -1188,8 +1199,13 @@ /turf/open/floor/stone/icemoon, /area/ruin/unpowered/primitive_catgirl_den) "CQ" = ( -/obj/structure/wall_torch/spawns_lit/directional/north, -/obj/effect/turf_decal/siding/wood/corner, +/obj/effect/turf_decal/weather/snow/corner{ + dir = 8 + }, +/obj/effect/turf_decal/weather/snow/corner{ + dir = 4 + }, +/obj/structure/mineral_door/wood/large_gate, /turf/open/misc/dirt/icemoon, /area/ruin/unpowered/primitive_catgirl_den) "CT" = ( @@ -1479,6 +1495,24 @@ }, /turf/open/water/hot_spring, /area/ruin/unpowered/primitive_catgirl_den) +"KO" = ( +/obj/structure/rack/wooden, +/obj/item/pickaxe/mini{ + pixel_x = -5 + }, +/obj/item/pickaxe/mini{ + pixel_x = 5 + }, +/obj/item/ore_sensor{ + pixel_y = -1; + pixel_x = -5 + }, +/obj/item/ore_sensor{ + pixel_y = -1; + pixel_x = 5 + }, +/turf/open/misc/dirt/icemoon, +/area/ruin/unpowered/primitive_catgirl_den) "Lj" = ( /obj/effect/turf_decal/siding/wood{ dir = 6 @@ -1546,19 +1580,7 @@ /turf/open/misc/dirt/icemoon, /area/ruin/unpowered/primitive_catgirl_den) "NC" = ( -/obj/structure/rack/wooden, -/obj/item/reagent_containers/cup/beaker/large/blowing_glass{ - pixel_y = 9; - pixel_x = -5 - }, -/obj/item/reagent_containers/cup/beaker/large/blowing_glass{ - pixel_y = 9; - pixel_x = 5 - }, -/obj/item/reagent_containers/cup/beaker/large/ceramic{ - pixel_y = -5; - pixel_x = 7 - }, +/obj/structure/curtain/bounty, /turf/open/misc/dirt/icemoon, /area/ruin/unpowered/primitive_catgirl_den) "NJ" = ( @@ -1803,9 +1825,12 @@ /turf/open/misc/dirt/icemoon, /area/ruin/unpowered/primitive_catgirl_den) "Ti" = ( -/obj/structure/table/wood, -/obj/item/knife/combat/bone{ - pixel_y = 5 +/obj/structure/bed/maint, +/obj/structure/bed/maint{ + pixel_y = 13 + }, +/obj/item/bedsheet/black/double{ + dir = 1 }, /turf/open/misc/dirt/icemoon, /area/ruin/unpowered/primitive_catgirl_den) @@ -1857,7 +1882,15 @@ /turf/open/floor/wood/icemoon, /area/ruin/unpowered/primitive_catgirl_den) "UT" = ( -/obj/structure/mineral_door/wood/large_gate, +/obj/item/reagent_containers/cup/glass/bottle/hooch{ + pixel_y = 2; + pixel_x = -5 + }, +/obj/item/reagent_containers/cup/glass/trophy/bronze_cup{ + pixel_x = 8; + pixel_y = 4 + }, +/obj/structure/rack/wooden, /turf/open/misc/dirt/icemoon, /area/ruin/unpowered/primitive_catgirl_den) "UV" = ( @@ -1907,6 +1940,10 @@ pixel_y = 5; pixel_x = 4 }, +/obj/item/ore_sensor{ + pixel_y = -1; + pixel_x = -5 + }, /turf/open/misc/asteroid/snow/icemoon, /area/ruin/unpowered/primitive_catgirl_den) "Vi" = ( @@ -1964,6 +2001,18 @@ pixel_y = 11; pixel_x = -1 }, +/obj/item/reagent_containers/cup/beaker/large/blowing_glass{ + pixel_y = 9; + pixel_x = -5 + }, +/obj/item/reagent_containers/cup/beaker/large/blowing_glass{ + pixel_y = 9; + pixel_x = 5 + }, +/obj/item/reagent_containers/cup/beaker/large/ceramic{ + pixel_y = -5; + pixel_x = 7 + }, /turf/open/floor/stone/icemoon, /area/ruin/unpowered/primitive_catgirl_den) "XK" = ( @@ -2001,7 +2050,6 @@ /turf/open/floor/stone/icemoon, /area/ruin/unpowered/primitive_catgirl_den) "Zs" = ( -/obj/structure/wall_torch/spawns_lit/directional/south, /obj/item/pillow/random{ pixel_y = 4 }, @@ -2638,7 +2686,7 @@ PG Sf ou GU -Sf +gd Ob GN GN @@ -2680,7 +2728,7 @@ cw cw Df Lz -qM +ZJ Uk Ry GN @@ -3077,7 +3125,7 @@ oJ yF VT ra -ZJ +Br yF oJ oJ @@ -3188,7 +3236,7 @@ GN pa oX ZJ -lf +ZJ ZJ rL pa @@ -3231,7 +3279,7 @@ pa hA ZJ Ti -au +ZJ sJ pa oJ @@ -3271,7 +3319,7 @@ GN GN pa kF -Vs +ZJ pc ZJ OM @@ -3313,9 +3361,9 @@ GN yF yF yF -OI +dS NC -RC +rX yF yF yF @@ -3354,15 +3402,15 @@ GN GN GN pa -hA +rv ZJ RR ZJ -rX +ZJ +UT pa oJ oJ -oJ Te qu oJ @@ -3396,13 +3444,13 @@ yF GN GN pa -kF +kp ZJ ZJ ZJ ZJ -UT -aW +ZJ +CQ Zu Zu yK @@ -3438,13 +3486,13 @@ II JN zS pa -dS +eS ZJ lf ZJ +ZJ mk pa -oJ JN Ug oJ @@ -3480,11 +3528,11 @@ oJ oJ yF yF -yF -Br +OI +ZJ oA Zs -yF +RC yF yF bX @@ -3520,13 +3568,13 @@ aW aW aW qu -oJ pa qq +ZJ gU jm au -rv +ZJ pa pb qu @@ -3562,13 +3610,13 @@ oJ oJ Vb JN -RY -iJ +qU +ZJ ZJ rK DY ZJ -kp +ZJ pa jw qg @@ -3604,13 +3652,13 @@ hQ Bc xI oJ -oJ pa lg +ZJ Vs gY wM -eS +ZJ pa Ug oJ @@ -3637,7 +3685,7 @@ Yf EA yF ZJ -Yf +KO pa JW yD @@ -3648,8 +3696,8 @@ kS FI yF yF -yF -CQ +OI +sK tI wN yF @@ -3777,7 +3825,7 @@ pa PO oK qM -aK +ZJ vx qO yF diff --git a/_maps/RandomRuins/IceRuins/nova/icemoon_underground_icewalker_upper.dmm b/_maps/RandomRuins/IceRuins/nova/icemoon_underground_icewalker_upper.dmm index 1f7e407ed3a..2672c1314af 100644 --- a/_maps/RandomRuins/IceRuins/nova/icemoon_underground_icewalker_upper.dmm +++ b/_maps/RandomRuins/IceRuins/nova/icemoon_underground_icewalker_upper.dmm @@ -809,6 +809,10 @@ pixel_x = 3 }, /obj/item/pen/charcoal, +/obj/item/reagent_containers/cup/primitive_centrifuge{ + pixel_x = -14; + pixel_y = -1 + }, /turf/open/floor/wood/icemoon, /area/ruin/unpowered/primitive_catgirl_den) "CS" = ( @@ -1018,18 +1022,6 @@ /area/ruin/unpowered/primitive_catgirl_den) "Op" = ( /obj/structure/closet/crate/wooden/storage_barrel, -/obj/item/bedsheet/black{ - pixel_x = 5; - pixel_y = -2 - }, -/obj/item/bedsheet/black{ - pixel_x = 5; - pixel_y = 3 - }, -/obj/item/bedsheet/black{ - pixel_x = 5; - pixel_y = 8 - }, /turf/open/misc/dirt/icemoon, /area/ruin/unpowered/primitive_catgirl_den) "Ou" = ( @@ -2672,7 +2664,7 @@ gG gG Rk Rk -ua +Rk ua ua ua @@ -2714,7 +2706,7 @@ gG Rk Rk Rk -ua +Rk ua ua ua @@ -2756,7 +2748,7 @@ gG Rk Rk Rk -ua +Rk ua ua ua @@ -2798,7 +2790,7 @@ gG Rk Rk Rk -ua +Rk ua ua ua @@ -2832,7 +2824,7 @@ ua ua ua ua -ua +Rk Rk Rk gG @@ -2840,7 +2832,7 @@ gG gG Rk Rk -ua +Rk ua ua ua @@ -2874,7 +2866,7 @@ ua ua ua ua -ua +Rk Rk Rk Rk @@ -2916,7 +2908,7 @@ ua ua ua ua -ua +Rk Rk Rk Rk @@ -2958,7 +2950,7 @@ ua ua ua ua -ua +Rk Rk Rk Rk diff --git a/_maps/RandomRuins/IceRuins/nova/icemoon_underground_interdyne_base1.dmm b/_maps/RandomRuins/IceRuins/nova/icemoon_underground_interdyne_base1.dmm index da3ee61e839..b4c408c4c0c 100644 --- a/_maps/RandomRuins/IceRuins/nova/icemoon_underground_interdyne_base1.dmm +++ b/_maps/RandomRuins/IceRuins/nova/icemoon_underground_interdyne_base1.dmm @@ -320,7 +320,7 @@ /area/ruin/interdyne_planetary_base/cargo) "ba" = ( /obj/structure/bed, -/obj/item/bedsheet/dorms, +/obj/effect/spawner/random/bedsheet, /turf/open/floor/iron/smooth_large, /area/ruin/interdyne_planetary_base/cargo) "bb" = ( @@ -1326,7 +1326,7 @@ "dp" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/cable, -/obj/machinery/door/window/survival_pod{ +/obj/machinery/door/window/survival_pod/left/directional/south{ req_access = list("syndicate") }, /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, @@ -1587,7 +1587,7 @@ }, /obj/item/serviette_used, /obj/item/shard/plastitanium, -/obj/item/valentine, +/obj/item/paper/valentine, /obj/machinery/light/small/directional/west, /obj/item/trash/ready_donk, /turf/open/floor/plating/reinforced, @@ -1822,7 +1822,7 @@ /turf/open/floor/iron/dark/textured_large, /area/ruin/interdyne_planetary_base/med/viro) "eE" = ( -/obj/machinery/door/window/survival_pod{ +/obj/machinery/door/window/survival_pod/left/directional/south{ req_access = list("syndicate") }, /turf/open/floor/iron/dark/textured_large, @@ -2540,10 +2540,8 @@ "gA" = ( /obj/machinery/door/firedoor, /obj/structure/table/reinforced, -/obj/machinery/door/window/survival_pod{ - dir = 1 - }, -/obj/machinery/door/window/survival_pod{ +/obj/machinery/door/window/survival_pod/left/directional/north, +/obj/machinery/door/window/survival_pod/left/directional/south{ req_access = list("syndicate") }, /turf/open/floor/iron/dark/textured_large, @@ -3283,8 +3281,7 @@ /turf/closed/wall/r_wall/syndicate/nodiagonal, /area/ruin/interdyne_planetary_base/science/xeno) "iv" = ( -/obj/machinery/door/window/survival_pod{ - dir = 4; +/obj/machinery/door/window/survival_pod/left/directional/east{ req_access = list("syndicate") }, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -3532,7 +3529,7 @@ }, /area/ruin/interdyne_planetary_base/science/xeno) "iZ" = ( -/obj/machinery/door/window/survival_pod{ +/obj/machinery/door/window/survival_pod/left/directional/south{ name = "Slime Euthanization Chamber"; req_access = list("syndicate") }, @@ -3944,7 +3941,7 @@ "jX" = ( /obj/structure/fans/tiny, /obj/machinery/atmospherics/pipe/smart/manifold4w/general/hidden, -/obj/machinery/door/window/survival_pod{ +/obj/machinery/door/window/survival_pod/left/directional/south{ name = "Slime Pacification Chamber"; req_access = list("syndicate") }, @@ -4567,13 +4564,13 @@ /turf/closed/wall/r_wall/syndicate/nodiagonal, /area/ruin/interdyne_planetary_base/main/dorms) "lw" = ( -/obj/item/bedsheet/dorms{ - dir = 4 - }, /obj/structure/bed{ dir = 4 }, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/spawner/random/bedsheet{ + dir = 4 + }, /turf/open/floor/iron/smooth_large, /area/ruin/interdyne_planetary_base/main/dorms) "lx" = ( @@ -5349,10 +5346,8 @@ "nn" = ( /obj/machinery/door/firedoor, /obj/structure/table/reinforced, -/obj/machinery/door/window/survival_pod{ - dir = 1 - }, -/obj/machinery/door/window/survival_pod{ +/obj/machinery/door/window/survival_pod/left/directional/north, +/obj/machinery/door/window/survival_pod/left/directional/south{ req_access = list("syndicate") }, /obj/effect/turf_decal/siding/thinplating/dark/corner{ @@ -6121,12 +6116,10 @@ "oZ" = ( /obj/structure/table/reinforced, /obj/machinery/door/firedoor, -/obj/machinery/door/window/survival_pod{ - dir = 4; +/obj/machinery/door/window/survival_pod/left/directional/east{ req_access = list("syndicate") }, -/obj/machinery/door/window/survival_pod{ - dir = 8; +/obj/machinery/door/window/survival_pod/left/directional/west{ req_access = list("syndicate") }, /turf/open/floor/iron/dark/textured_large, @@ -6684,6 +6677,9 @@ /obj/machinery/hydroponics/constructable{ dir = 8 }, +/obj/machinery/door/window/survival_pod/left/directional/east{ + req_access = list("syndicate_leader") + }, /turf/open/floor/iron/dark/textured_large, /area/ruin/interdyne_planetary_base/serv/hydr) "qA" = ( @@ -7048,7 +7044,6 @@ /turf/closed/wall/r_wall/syndicate/nodiagonal, /area/ruin/interdyne_planetary_base/science/xeno) "tZ" = ( -/obj/structure/pod, /obj/effect/supplypod_rubble, /obj/effect/turf_decal/weather/snow{ layer = 3 @@ -7064,8 +7059,16 @@ }, /turf/closed/wall/r_wall/syndicate/nodiagonal, /area/ruin/interdyne_planetary_base) +"ui" = ( +/obj/machinery/hydroponics/constructable{ + dir = 8 + }, +/obj/machinery/door/window/survival_pod/left/directional/south{ + req_access = list("syndicate") + }, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/interdyne_planetary_base/serv/hydr) "uJ" = ( -/obj/structure/pod, /obj/effect/supplypod_rubble, /turf/open/floor/plating/reinforced{ initial_gas_mix = "ICEMOON_ATMOS" @@ -7580,6 +7583,15 @@ }, /turf/open/floor/iron/smooth_large, /area/ruin/interdyne_planetary_base/main/dorms) +"Xz" = ( +/obj/machinery/hydroponics/constructable{ + dir = 4 + }, +/obj/machinery/door/window/survival_pod/left/directional/south{ + req_access = list("syndicate") + }, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/interdyne_planetary_base/serv/hydr) "XB" = ( /obj/structure/sign/poster/contraband/moffuchis_pizza, /turf/closed/wall/r_wall/syndicate/nodiagonal, @@ -7612,6 +7624,18 @@ initial_gas_mix = "ICEMOON_ATMOS" }, /area/icemoon/underground/explored) +"ZP" = ( +/obj/machinery/hydroponics/constructable{ + dir = 8 + }, +/obj/machinery/door/window/survival_pod/left/directional/south{ + req_access = list("syndicate") + }, +/obj/machinery/door/window/survival_pod/left/directional/east{ + req_access = list("syndicate_leader") + }, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/interdyne_planetary_base/serv/hydr) (1,1,1) = {" aa @@ -9728,9 +9752,9 @@ nI nI os oM -EM -EM -EM +Xz +Xz +Xz qB rd ab @@ -9846,9 +9870,9 @@ of oL ou oO -qz -qz -qz +ZP +ZP +ZP qz mP ab @@ -9905,9 +9929,9 @@ om oQ ou oO -EM -EM -EM +Xz +Xz +Xz EM mP ab @@ -10023,9 +10047,9 @@ oo oV pb pf -qz -qz -qz +ui +ui +ui qC re ab diff --git a/_maps/RandomRuins/LavaRuins/fluffy/lavaland_interdyne_base_ff.dmm b/_maps/RandomRuins/LavaRuins/fluffy/lavaland_interdyne_base_ff.dmm new file mode 100644 index 00000000000..acf85539c72 --- /dev/null +++ b/_maps/RandomRuins/LavaRuins/fluffy/lavaland_interdyne_base_ff.dmm @@ -0,0 +1,11125 @@ +//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE +"am" = ( +/obj/machinery/computer/pandemic{ + name = "Interdyne PanD.E.M.I.C"; + color = "#adadcd" + }, +/obj/effect/turf_decal/tile/dark/full, +/obj/structure/marker_beacon/burgundy, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 8 + }, +/obj/structure/window/reinforced/survival_pod/spawner/directional/east{ + pixel_x = 4 + }, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/medbay) +"an" = ( +/obj/effect/turf_decal/trimline/dark/filled/line{ + dir = 5 + }, +/obj/effect/turf_decal/trimline/dark/filled/mid_joiner{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/dark/filled/mid_joiner{ + dir = 4 + }, +/obj/effect/turf_decal/stripes/blue/corner{ + dir = 8 + }, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/medbay) +"ap" = ( +/obj/structure/railing{ + dir = 5 + }, +/obj/structure/railing, +/obj/structure/marker_beacon/burgundy, +/turf/open/floor/engine/hull/reinforced/lavaland, +/area/lavaland/surface/outdoors) +"as" = ( +/obj/structure/marker_beacon/burgundy, +/obj/effect/turf_decal/trimline/dark/filled/corner{ + dir = 1 + }, +/obj/effect/turf_decal/stripes/red/corner{ + dir = 1 + }, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/cargo) +"ay" = ( +/obj/structure/table/reinforced/plastitaniumglass, +/obj/effect/turf_decal/tile/dark/full, +/obj/item/clothing/neck/stethoscope, +/obj/item/storage/box/medipens{ + pixel_x = 4; + pixel_y = 13 + }, +/obj/item/reagent_containers/spray/cleaner{ + pixel_x = -8; + pixel_y = 8 + }, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, +/obj/item/storage/backpack/duffelbag/synth_treatment_kit/trauma/advanced/unzipped, +/obj/item/healthanalyzer/advanced, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/medbay) +"az" = ( +/obj/effect/turf_decal/trimline/dark/filled/mid_joiner, +/obj/effect/turf_decal/trimline/dark/filled/line{ + dir = 6 + }, +/obj/effect/turf_decal/trimline/dark/filled/mid_joiner{ + dir = 4 + }, +/obj/structure/closet/crate/bin, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/testlab) +"aA" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/cyan/visible, +/obj/effect/turf_decal/trimline/dark/filled/line{ + dir = 9 + }, +/obj/effect/turf_decal/trimline/dark/filled/mid_joiner{ + dir = 1 + }, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/medbay) +"aB" = ( +/obj/effect/turf_decal/tile/dark/full, +/obj/machinery/plumbing/input{ + dir = 1 + }, +/obj/structure/closet/secure_closet/cytology{ + anchored = 1; + pixel_x = 9; + locked = 0; + req_access = list("syndicate") + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/medbay) +"aI" = ( +/obj/machinery/hydroponics/constructable, +/obj/structure/marker_beacon/teal, +/turf/open/floor/grass/fairy, +/area/ruin/syndicate_lava_base/bar) +"aL" = ( +/obj/structure/bookcase/random, +/obj/effect/turf_decal/siding/wood{ + dir = 6 + }, +/turf/open/floor/carpet/red, +/area/ruin/syndicate_lava_base/bar) +"aR" = ( +/obj/effect/turf_decal/trimline/dark/filled/corner{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/medbay) +"aT" = ( +/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/ruin/syndicate_lava_base/medbay) +"aV" = ( +/obj/effect/turf_decal/arrows/blue{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/dark/filled/corner{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/dark/filled/corner{ + dir = 1 + }, +/obj/effect/turf_decal/stripes/blue/corner{ + dir = 1 + }, +/obj/effect/turf_decal/stripes/blue/corner{ + dir = 8 + }, +/obj/machinery/duct, +/obj/machinery/door/window/survival_pod/left/directional/west{ + req_access = list("syndicate"); + pixel_x = -4 + }, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/medbay) +"aW" = ( +/obj/machinery/smartfridge/chemistry/virology/preloaded{ + name = "Interdyne virus storage"; + color = "#adadcd" + }, +/obj/effect/turf_decal/tile/dark/full, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 4 + }, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/medbay) +"aX" = ( +/obj/effect/turf_decal/trimline/dark/filled/line{ + dir = 5 + }, +/obj/effect/turf_decal/trimline/dark/filled/mid_joiner{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/dark/filled/mid_joiner{ + dir = 4 + }, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/bar) +"bk" = ( +/obj/machinery/modular_shield/module/node{ + dir = 1 + }, +/obj/effect/decal/cleanable/glitter/blue, +/obj/effect/turf_decal/box/red/corners{ + dir = 2 + }, +/obj/effect/turf_decal/box/red/corners{ + dir = 8 + }, +/turf/open/floor/circuit, +/area/ruin/syndicate_lava_base/main) +"bn" = ( +/obj/effect/turf_decal/trimline/dark/filled/line{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/dark/filled/mid_joiner{ + dir = 1 + }, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/testlab) +"bo" = ( +/obj/structure/marker_beacon/teal, +/obj/machinery/smartfridge{ + color = "#adadcd"; + name = "Interdyne smartfridge"; + pixel_x = 2; + light_color = "#adadcd" + }, +/obj/structure/window/reinforced/survival_pod/spawner/directional/north{ + pixel_y = 4 + }, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/medbay) +"bp" = ( +/obj/effect/turf_decal/trimline/dark/filled/line{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/dark/filled/mid_joiner{ + dir = 8 + }, +/obj/effect/turf_decal/stripes/red/corner{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/dark/filled/corner{ + dir = 4 + }, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/cargo) +"bv" = ( +/obj/structure/marker_beacon/burgundy, +/obj/structure/sign/poster/contraband/soviet_propaganda/directional/east, +/obj/effect/turf_decal/tile/dark/full, +/obj/machinery/suit_storage_unit/syndicate/chameleon{ + color = "#adadcd"; + light_color = "#adadcd" + }, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/main) +"bx" = ( +/obj/effect/turf_decal/tile/dark/full, +/obj/machinery/component_printer{ + name = "Interdyne component printer"; + color = "#adadcd"; + light_color = "#adadcd" + }, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/testlab) +"by" = ( +/obj/machinery/modular_shield/module/well{ + dir = 1 + }, +/obj/structure/marker_beacon/indigo, +/obj/effect/turf_decal/trimline/dark/filled/end{ + dir = 1 + }, +/obj/effect/turf_decal/box/blue/corners{ + dir = 4 + }, +/obj/effect/turf_decal/box/blue/corners{ + dir = 1 + }, +/turf/open/floor/iron/dark, +/area/ruin/syndicate_lava_base/main) +"bz" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 9 + }, +/turf/open/floor/wood/large, +/area/ruin/syndicate_lava_base/main) +"bA" = ( +/obj/structure/window/reinforced/survival_pod/spawner/directional/south, +/obj/item/storage/box/monkeycubes/syndicate{ + pixel_x = 3; + pixel_y = 3 + }, +/obj/item/storage/box/monkeycubes/syndicate{ + pixel_y = 5 + }, +/obj/item/slime_extract/grey{ + pixel_x = 2; + pixel_y = -2 + }, +/obj/item/slime_extract/grey, +/obj/item/slime_extract/grey{ + pixel_x = -2; + pixel_y = 2 + }, +/obj/structure/table/reinforced/plastitaniumglass, +/obj/effect/turf_decal/trimline/dark/filled/line, +/obj/effect/turf_decal/tile/dark/full, +/obj/effect/turf_decal/tile/dark/full, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 1 + }, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/testlab) +"bH" = ( +/obj/effect/turf_decal/stripes/red/corner{ + dir = 4 + }, +/obj/machinery/button/door/directional/north{ + name = "Interdyne Gate"; + id = "interdynegate"; + icon_state = "tram"; + base_icon_state = "tram"; + light_color = "#22CCFF"; + pixel_x = 7; + pixel_y = 32; + req_access = list("syndicate") + }, +/obj/effect/turf_decal/trimline/dark/filled/line{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/dark/filled/mid_joiner{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/dark/filled/corner{ + dir = 8 + }, +/obj/effect/turf_decal/stripes/red/corner{ + dir = 8 + }, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/cargo) +"bJ" = ( +/obj/effect/turf_decal/trimline/dark/filled/corner{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/dark/filled/corner, +/obj/effect/turf_decal/stripes/blue/corner, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/medbay) +"bP" = ( +/obj/effect/turf_decal/trimline/dark/filled/corner{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/dark/filled/corner{ + dir = 4 + }, +/obj/item/paper/fluff/ruins/interdyne/note_1{ + name = "Forcefield Generator Maintenance"; + default_raw_text = "To activate Frozen Moonlight's forcefield, open maintenance hatches of the generator itself, Relay, Well and Charger nodes with a screwdriver and upgrade them with provided parts by using a rapid parts exchange device. Then, close all hatches and, by using a multitool, activate every module of the generator in a chain-like way. When preparations are done, set the generator's radius at maximum and press the power button. If the forcefield sustains overwhelming damage, it will require some time to recharge and has to be turned back on manually. Wavefield Science wishes you a safe and productive day." + }, +/obj/effect/turf_decal/trimline/dark/filled/corner{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/dark/filled/corner, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/main) +"bS" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 5 + }, +/turf/open/floor/wood/large, +/area/ruin/syndicate_lava_base/main) +"bX" = ( +/obj/structure/railing{ + dir = 5 + }, +/obj/structure/lattice/catwalk/mining, +/turf/open/lava/smooth/lava_land_surface, +/area/lavaland/surface/outdoors) +"cc" = ( +/obj/effect/turf_decal/trimline/dark/filled/corner, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/testlab) +"cd" = ( +/obj/effect/turf_decal/trimline/dark/filled/mid_joiner{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/dark/filled/line{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/dark/filled/line{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/dark/filled/mid_joiner{ + dir = 4 + }, +/obj/effect/turf_decal/stripes/red/line{ + dir = 4 + }, +/obj/structure/extinguisher_cabinet/directional/west, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 4 + }, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/cargo) +"cg" = ( +/obj/effect/turf_decal/trimline/dark/filled/corner{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/dark/filled/line{ + dir = 10 + }, +/obj/effect/turf_decal/trimline/dark/filled/mid_joiner{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/dark/filled/mid_joiner, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/medbay) +"cj" = ( +/obj/effect/turf_decal/trimline/dark/filled/line{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/dark/filled/mid_joiner{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/medbay) +"co" = ( +/obj/machinery/porta_turret/syndicate{ + dir = 6; + faction = list("Syndicate","neutral") + }, +/obj/structure/marker_beacon/burgundy, +/obj/machinery/camera/xray{ + pixel_x = 10; + name = "Inderdyne security camera"; + network = list("Interdyne"); + color = "#adadcd"; + pixel_y = 25 + }, +/turf/closed/wall/r_wall/syndicate/nodiagonal, +/area/ruin/syndicate_lava_base/main) +"cq" = ( +/obj/effect/turf_decal/box/red/corners, +/obj/effect/turf_decal/box/red/corners{ + dir = 8 + }, +/obj/effect/turf_decal/arrows/blue, +/obj/structure/cable, +/obj/effect/turf_decal/trimline/dark/filled/corner{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/dark/filled/corner{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/dark/filled/line, +/obj/effect/turf_decal/trimline/dark/filled/mid_joiner, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/main) +"cv" = ( +/obj/effect/turf_decal/box/blue/corners{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/dark/filled/line{ + dir = 10 + }, +/obj/effect/turf_decal/trimline/dark/filled/corner{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/dark/filled/mid_joiner{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/dark/filled/mid_joiner, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/medbay) +"cw" = ( +/obj/effect/turf_decal/siding/wood/corner, +/obj/effect/turf_decal/siding/wood/corner{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/cable, +/turf/open/floor/wood/large, +/area/ruin/syndicate_lava_base/main) +"cz" = ( +/obj/structure/railing/corner{ + dir = 1 + }, +/turf/open/floor/plating/reinforced/lavaland, +/area/ruin/syndicate_lava_base/cargo) +"cL" = ( +/obj/structure/flora/ash/tall_shroom, +/turf/open/misc/asteroid/basalt/lava_land_surface, +/area/lavaland/surface/outdoors) +"cN" = ( +/obj/machinery/light/directional/east{ + bulb_colour = "#2C3BFF"; + color = "#0012FF"; + light_color = "#0012FF" + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/cable, +/turf/open/floor/wood/large, +/area/ruin/syndicate_lava_base/main) +"cS" = ( +/obj/structure/marker_beacon/burgundy, +/turf/closed/mineral/random/volcanic, +/area/lavaland/surface/outdoors) +"cZ" = ( +/turf/closed/wall/r_wall/syndicate, +/area/ruin/syndicate_lava_base/cargo) +"db" = ( +/obj/effect/turf_decal/siding/dark{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/dark/filled/line{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/dark/filled/line{ + dir = 8 + }, +/turf/open/floor/iron/dark/textured, +/area/ruin/syndicate_lava_base/bar) +"dd" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/cable, +/turf/open/floor/wood/large, +/area/ruin/syndicate_lava_base/main) +"df" = ( +/obj/structure/marker_beacon/burgundy, +/obj/effect/mapping_helpers/airlock/access/all/syndicate/general, +/obj/machinery/door/airlock/engineering/glass{ + name = "Shield and Engineering" + }, +/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/dark/textured_large, +/area/ruin/syndicate_lava_base/main) +"dn" = ( +/obj/effect/turf_decal/trimline/dark/filled/line{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/dark/filled/line, +/obj/effect/turf_decal/trimline/dark/filled/mid_joiner, +/obj/effect/turf_decal/trimline/dark/filled/mid_joiner{ + dir = 1 + }, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/bar) +"dw" = ( +/obj/machinery/photocopier, +/turf/closed/wall/r_wall/syndicate/nodiagonal, +/area/ruin/syndicate_lava_base/bar) +"dA" = ( +/obj/effect/turf_decal/stripes/red/line, +/obj/effect/turf_decal/trimline/dark/filled/corner{ + dir = 8 + }, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/cargo) +"dD" = ( +/obj/effect/turf_decal/trimline/dark/filled/mid_joiner{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/dark/filled/line{ + dir = 6 + }, +/obj/structure/marker_beacon/burgundy, +/obj/machinery/recharge_station{ + name = "Interdyne recharging station"; + color = "#adadcd"; + light_color = "#adadcd" + }, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/testlab) +"dF" = ( +/obj/effect/turf_decal/trimline/dark/filled/line{ + dir = 10 + }, +/obj/effect/turf_decal/trimline/dark/filled/mid_joiner{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/dark/filled/mid_joiner, +/obj/effect/turf_decal/box/white/corners{ + dir = 8 + }, +/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/dark/textured_large, +/area/ruin/syndicate_lava_base/cargo) +"dG" = ( +/obj/effect/turf_decal/tile/dark_red/half{ + dir = 4 + }, +/obj/structure/window/reinforced/survival_pod/spawner/directional/west{ + pixel_x = -4 + }, +/turf/open/floor/engine, +/area/ruin/syndicate_lava_base/testlab) +"dQ" = ( +/obj/structure/fans/tiny, +/obj/effect/turf_decal/stripes/red/line{ + dir = 1 + }, +/obj/effect/turf_decal/stripes/red/line, +/obj/machinery/door/poddoor{ + id = "interdynegateout"; + name = "Inderdyne Gate" + }, +/turf/open/floor/plating/elevatorshaft, +/area/ruin/syndicate_lava_base/cargo) +"dR" = ( +/obj/effect/turf_decal/siding/wood/corner{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/cable, +/turf/open/floor/wood/large, +/area/ruin/syndicate_lava_base/main) +"dW" = ( +/obj/effect/turf_decal/box/white/corners{ + dir = 8 + }, +/turf/open/floor/engine, +/area/ruin/syndicate_lava_base/testlab) +"eb" = ( +/obj/structure/flora/bush/fullgrass/style_random, +/obj/structure/flora/bush/jungle/c/style_random, +/turf/open/floor/grass, +/area/ruin/syndicate_lava_base/main) +"ec" = ( +/obj/structure/fans/tiny/forcefield, +/obj/structure/marker_beacon/teal, +/obj/effect/decal/cleanable/glitter/blue, +/obj/effect/turf_decal/arrows/blue, +/obj/effect/turf_decal/arrows/blue{ + dir = 1 + }, +/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/dark/textured_large, +/area/ruin/syndicate_lava_base/testlab) +"ee" = ( +/obj/effect/turf_decal/trimline/dark/filled/line{ + dir = 5 + }, +/obj/effect/turf_decal/trimline/dark/filled/corner{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/dark/filled/mid_joiner{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/dark/filled/mid_joiner{ + dir = 4 + }, +/obj/structure/chair/sofa/corp/corner, +/obj/structure/marker_beacon/purple, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/testlab) +"ef" = ( +/obj/effect/turf_decal/box/blue/corners{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/dark/filled/line{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/dark/filled/line{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/dark/filled/mid_joiner{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/dark/filled/mid_joiner{ + dir = 4 + }, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/medbay) +"eg" = ( +/turf/closed/wall/r_wall/syndicate/nodiagonal, +/area/ruin/syndicate_lava_base/bar) +"eh" = ( +/obj/effect/turf_decal/stripes/red/line, +/obj/structure/marker_beacon/burgundy, +/obj/structure/window/reinforced/survival_pod/spawner/directional/south{ + pixel_y = -4 + }, +/obj/effect/turf_decal/trimline/dark/filled/end, +/obj/effect/turf_decal/box/red/corners{ + dir = 4 + }, +/obj/effect/turf_decal/box/red/corners{ + dir = 1 + }, +/obj/effect/mob_spawn/ghost_role/human/interdyne_planetary_base{ + dir = 1 + }, +/turf/open/floor/iron/dark, +/area/ruin/syndicate_lava_base/arrivals) +"en" = ( +/obj/structure/closet/secure_closet/freezer/meat{ + req_access = list("syndicate"); + color = "#9d9ddd"; + name = "Interdyne meat fridge"; + light_color = "#9d9ddd" + }, +/obj/effect/turf_decal/trimline/dark/filled/line{ + dir = 10 + }, +/obj/effect/turf_decal/trimline/dark/filled/mid_joiner, +/obj/effect/turf_decal/trimline/dark/filled/mid_joiner{ + dir = 8 + }, +/obj/structure/marker_beacon/indigo, +/obj/structure/drain, +/obj/effect/turf_decal/box/white/corners{ + dir = 8 + }, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/bar) +"ep" = ( +/obj/structure/fans/tiny, +/obj/effect/turf_decal/trimline/dark/filled/line{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/dark/filled/line, +/obj/effect/turf_decal/trimline/dark/filled/mid_joiner, +/obj/effect/turf_decal/trimline/dark/filled/mid_joiner{ + dir = 1 + }, +/obj/machinery/door/window/survival_pod/left/directional/west{ + req_access = list("syndicate"); + pixel_x = -4 + }, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/medbay) +"es" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/general/hidden, +/obj/structure/window/reinforced/survival_pod/spawner/directional/south, +/obj/effect/turf_decal/trimline/dark/filled/line, +/obj/effect/turf_decal/trimline/dark/filled/corner{ + dir = 4 + }, +/obj/effect/turf_decal/caution/stand_clear/red, +/turf/open/floor/iron/dark, +/area/ruin/syndicate_lava_base/testlab) +"ev" = ( +/obj/structure/marker_beacon/bronze, +/obj/effect/turf_decal/trimline/dark/filled/line{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/dark/filled/mid_joiner{ + dir = 1 + }, +/obj/structure/window/reinforced/survival_pod/spawner/directional/south{ + pixel_y = -4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/general/hidden, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/main) +"ey" = ( +/obj/effect/turf_decal/tile/dark/full, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, +/obj/machinery/smartfridge/organ{ + color = "#adadcd"; + name = "Interdyne smart organ storage"; + light_color = "#adadcd" + }, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/medbay) +"eA" = ( +/obj/machinery/computer/operating, +/obj/item/disk/surgery/forgottenship, +/obj/effect/turf_decal/tile/dark/full, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/medbay) +"eC" = ( +/turf/closed/wall/r_wall/syndicate, +/area/ruin/syndicate_lava_base/testlab) +"eH" = ( +/obj/machinery/hydroponics/constructable, +/obj/machinery/light/directional/north, +/obj/machinery/door/window/survival_pod/left/directional/west{ + req_access = list("syndicate"); + pixel_x = -4 + }, +/obj/structure/marker_beacon/bronze, +/turf/open/floor/grass, +/area/ruin/syndicate_lava_base/bar) +"eN" = ( +/obj/effect/turf_decal/trimline/dark/filled/line, +/obj/effect/turf_decal/trimline/dark/filled/mid_joiner, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/medbay) +"eO" = ( +/turf/open/lava/smooth/lava_land_surface, +/area/lavaland/surface/outdoors) +"eR" = ( +/obj/effect/turf_decal/siding/wood/corner, +/obj/effect/turf_decal/siding/wood/corner, +/obj/effect/turf_decal/siding/wood/corner{ + dir = 1 + }, +/turf/closed/wall/r_wall/syndicate, +/area/ruin/syndicate_lava_base/main) +"eS" = ( +/obj/structure/rack/shelf, +/obj/item/storage/bag/ore, +/obj/item/pickaxe/drill, +/obj/effect/turf_decal/tile/dark/full, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/cargo) +"fe" = ( +/obj/effect/spawner/structure/window/reinforced/plasma/plastitanium, +/obj/structure/fans/tiny/forcefield, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/dormitories) +"fg" = ( +/obj/effect/turf_decal/siding/wood/corner{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/cable, +/turf/open/floor/wood/large, +/area/ruin/syndicate_lava_base/main) +"fi" = ( +/obj/machinery/dna_infuser, +/obj/effect/turf_decal/trimline/dark/filled/end{ + dir = 4 + }, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/medbay) +"fm" = ( +/obj/effect/turf_decal/trimline/dark/filled/line{ + dir = 5 + }, +/obj/effect/turf_decal/trimline/dark/filled/corner{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/dark/filled/mid_joiner{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/dark/filled/mid_joiner{ + dir = 1 + }, +/obj/effect/turf_decal/stripes/red/corner{ + dir = 8 + }, +/obj/effect/turf_decal/box/white/corners{ + dir = 4 + }, +/obj/effect/turf_decal/stripes/blue/corner, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/cargo) +"fn" = ( +/obj/machinery/vending/dorms{ + onstation = 0; + extended_inventory = 1 + }, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/main) +"fp" = ( +/obj/effect/turf_decal/trimline/dark/filled/line{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/dark/filled/line{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/dark/filled/mid_joiner{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/dark/filled/mid_joiner{ + dir = 4 + }, +/obj/effect/turf_decal/stripes/red/line{ + dir = 8 + }, +/obj/effect/turf_decal/stripes/blue{ + dir = 4 + }, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/cargo) +"ft" = ( +/obj/machinery/smartfridge/extract/preloaded{ + color = "#adadcd"; + name = "Interdyne smart slime extract storage"; + light_color = "#adadcd" + }, +/obj/effect/turf_decal/tile/dark/full, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/testlab) +"fw" = ( +/obj/effect/turf_decal/trimline/dark/filled/line{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/dark/filled/line{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/dark/filled/mid_joiner{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/dark/filled/mid_joiner{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/medbay) +"fy" = ( +/obj/structure/table/wood/fancy, +/obj/structure/marker_beacon/bronze, +/obj/machinery/computer/libraryconsole/bookmanagement{ + dir = 8 + }, +/obj/machinery/libraryscanner{ + pixel_x = -30; + pixel_y = 12 + }, +/turf/open/floor/wood/large, +/area/ruin/syndicate_lava_base/bar) +"fK" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 4 + }, +/obj/structure/marker_beacon/violet, +/obj/effect/spawner/random/vending/snackvend, +/turf/open/floor/wood/large, +/area/ruin/syndicate_lava_base/main) +"fN" = ( +/obj/effect/turf_decal/trimline/dark/filled/line{ + dir = 4 + }, +/obj/structure/sink/directional/west, +/obj/structure/mirror/directional/east, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron/dark/textured, +/area/ruin/syndicate_lava_base/dormitories) +"fP" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/turf_decal/stripes/red/line{ + dir = 1 + }, +/obj/effect/turf_decal/siding/dark{ + dir = 1 + }, +/turf/open/floor/catwalk_floor/iron_dark, +/area/ruin/syndicate_lava_base/main) +"fU" = ( +/obj/structure/marker_beacon/burgundy, +/turf/open/misc/asteroid/basalt/lava_land_surface, +/area/lavaland/surface/outdoors) +"gd" = ( +/obj/effect/turf_decal/tile/dark/full, +/obj/machinery/computer/rdconsole{ + dir = 4 + }, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/testlab) +"gh" = ( +/obj/structure/fans/tiny, +/obj/effect/turf_decal/stripes/red/line{ + dir = 1 + }, +/obj/effect/turf_decal/stripes/red/line, +/obj/effect/decal/cleanable/blood/old, +/obj/machinery/door/poddoor{ + id = "interdynegateout"; + name = "Inderdyne Gate" + }, +/turf/open/floor/plating/elevatorshaft, +/area/ruin/syndicate_lava_base/cargo) +"gm" = ( +/obj/structure/marker_beacon/olive, +/obj/structure/flora/bush/sparsegrass/style_random, +/obj/structure/flora/bush/jungle/a/style_random, +/turf/open/floor/grass, +/area/ruin/syndicate_lava_base/main) +"gy" = ( +/obj/structure/closet/crate/secure/gear{ + req_access = list("syndicate"); + anchored = 1 + }, +/obj/effect/turf_decal/bot_red, +/obj/effect/turf_decal/tile/dark/full, +/obj/item/ammo_box/c9mm{ + pixel_y = 6 + }, +/obj/item/ammo_box/c9mm, +/obj/item/ammo_box/magazine/m9mm{ + pixel_x = -5; + pixel_y = 5 + }, +/obj/item/ammo_box/magazine/m9mm{ + pixel_x = -2; + pixel_y = 2 + }, +/obj/item/ammo_box/magazine/m9mm{ + pixel_x = 1; + pixel_y = -1 + }, +/obj/item/ammo_box/magazine/m9mm{ + pixel_x = 4; + pixel_y = -4 + }, +/obj/structure/cable, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/cargo) +"gB" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/general/hidden, +/obj/structure/marker_beacon/burgundy, +/obj/machinery/atmospherics/miner/nitrogen, +/turf/open/floor/engine/n2, +/area/ruin/syndicate_lava_base/main) +"gE" = ( +/obj/effect/turf_decal/trimline/dark/filled/line, +/obj/effect/turf_decal/trimline/dark/filled/mid_joiner, +/obj/structure/marker_beacon/purple, +/obj/effect/turf_decal/trimline/dark/filled/corner{ + dir = 1 + }, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/bar) +"gI" = ( +/obj/effect/turf_decal/trimline/dark/filled/line{ + dir = 5 + }, +/obj/effect/turf_decal/trimline/dark/filled/mid_joiner{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/dark/filled/mid_joiner{ + dir = 4 + }, +/obj/effect/turf_decal/stripes/red/line{ + dir = 10 + }, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/cargo) +"gO" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 1 + }, +/turf/open/floor/carpet/red, +/area/ruin/syndicate_lava_base/bar) +"gR" = ( +/obj/structure/rack/wooden, +/obj/item/stack/sheet/mineral/wood/fifty, +/obj/item/lighter, +/turf/open/floor/wood/large, +/area/ruin/syndicate_lava_base/bar) +"gU" = ( +/obj/structure/flora/bush/fullgrass/style_random, +/obj/structure/marker_beacon/olive, +/turf/open/floor/grass, +/area/ruin/syndicate_lava_base/main) +"gV" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 4 + }, +/obj/machinery/vending/cigarette/syndicate{ + onstation = 0 + }, +/turf/open/floor/wood/large, +/area/ruin/syndicate_lava_base/main) +"ha" = ( +/obj/structure/table/reinforced/plastitaniumglass, +/obj/effect/turf_decal/trimline/dark/filled/line{ + dir = 8 + }, +/obj/effect/turf_decal/tile/dark/full, +/obj/machinery/reagentgrinder{ + pixel_x = -6; + pixel_y = 10 + }, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/medbay) +"hc" = ( +/obj/effect/turf_decal/stripes/red/line, +/obj/effect/turf_decal/tile/dark/full, +/obj/structure/rack/shelf, +/obj/structure/window/reinforced/survival_pod/spawner/directional/south{ + pixel_y = -4 + }, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/arrivals) +"hf" = ( +/obj/structure/chair/stool/bar{ + dir = 4 + }, +/obj/effect/turf_decal/siding/wood, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/cable, +/turf/open/floor/wood/large, +/area/ruin/syndicate_lava_base/bar) +"hh" = ( +/obj/effect/turf_decal/trimline/dark/filled/corner{ + dir = 8 + }, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/bar) +"hi" = ( +/obj/machinery/modular_shield/module/relay, +/obj/structure/marker_beacon/purple, +/obj/effect/turf_decal/box/blue/corners, +/obj/effect/turf_decal/trimline/dark/filled/line{ + dir = 6 + }, +/obj/effect/turf_decal/trimline/dark/filled/mid_joiner{ + dir = 4 + }, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/main) +"hk" = ( +/obj/effect/turf_decal/trimline/dark/filled/line{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/dark/filled/mid_joiner{ + dir = 1 + }, +/obj/machinery/camera/xray/directional/north{ + color = "#adadcd"; + name = "Inderdyne security camera"; + network = list("Interdyne"); + pixel_x = 10 + }, +/obj/machinery/power/apc/auto_name/directional/north, +/obj/effect/mapping_helpers/apc/syndicate_access, +/obj/machinery/airalarm/directional/north{ + req_access = list("syndicate"); + pixel_y = 42 + }, +/obj/structure/cable, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/testlab) +"hl" = ( +/obj/effect/turf_decal/trimline/dark/filled/line{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/dark/filled/mid_joiner{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/general/hidden, +/obj/effect/turf_decal/vg_decals/atmos/oxygen, +/obj/structure/window/reinforced/survival_pod/spawner/directional/south{ + pixel_y = -4 + }, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/main) +"hx" = ( +/obj/structure/window/reinforced/survival_pod/spawner/directional/west{ + pixel_x = -4 + }, +/obj/structure/window/reinforced/survival_pod/spawner/directional/south{ + pixel_y = -4 + }, +/turf/open/floor/engine, +/area/ruin/syndicate_lava_base/testlab) +"hC" = ( +/obj/effect/turf_decal/stripes/red/line{ + dir = 1 + }, +/obj/effect/turf_decal/caution/stand_clear/red, +/obj/effect/turf_decal/trimline/dark/filled/corner, +/obj/effect/turf_decal/trimline/dark/filled/corner{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/dark/filled/corner{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/dark/filled/corner{ + dir = 1 + }, +/obj/structure/cable, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/main) +"hH" = ( +/obj/structure/table/reinforced/plastitaniumglass, +/obj/item/clothing/glasses/hud/health, +/obj/item/reagent_containers/dropper{ + pixel_y = -6 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/effect/turf_decal/tile/dark/full, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/medbay) +"hI" = ( +/obj/structure/flora/bush/sparsegrass/style_random, +/obj/structure/flora/bush/flowers_yw/style_random, +/obj/structure/marker_beacon/bronze, +/obj/structure/flora/tree/jungle/style_random, +/turf/open/floor/grass, +/area/ruin/syndicate_lava_base/main) +"hK" = ( +/obj/effect/turf_decal/trimline/dark/filled/end{ + dir = 1 + }, +/obj/effect/turf_decal/box/red/corners{ + dir = 8 + }, +/obj/effect/turf_decal/box/red/corners, +/obj/effect/turf_decal/stripes/red/line{ + dir = 1 + }, +/obj/structure/window/reinforced/survival_pod/spawner/directional/north{ + pixel_y = 4 + }, +/obj/effect/mob_spawn/ghost_role/human/interdyne_planetary_base/deck_officer, +/turf/open/floor/iron/dark/textured, +/area/ruin/syndicate_lava_base/arrivals) +"hV" = ( +/obj/effect/spawner/structure/window/reinforced/plasma/plastitanium, +/obj/machinery/door/poddoor{ + id = "interdynekitchen"; + name = "Interdyne Storm Shutters Kitchen" + }, +/turf/open/floor/plating/reinforced, +/area/ruin/syndicate_lava_base/bar) +"hW" = ( +/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/ruin/syndicate_lava_base/main) +"hY" = ( +/obj/structure/flora/ash/stem_shroom, +/turf/open/misc/asteroid/basalt/lava_land_surface, +/area/lavaland/surface/outdoors) +"ie" = ( +/obj/structure/table/reinforced/plastitaniumglass, +/obj/effect/turf_decal/siding/dark{ + dir = 1 + }, +/obj/effect/turf_decal/tile/dark/full, +/obj/item/reagent_containers/condiment/enzyme{ + pixel_y = 14; + pixel_x = -7 + }, +/obj/item/reagent_containers/condiment/saltshaker{ + pixel_x = -8; + pixel_y = 6 + }, +/obj/item/reagent_containers/condiment/peppermill{ + pixel_x = -3; + pixel_y = 6 + }, +/obj/machinery/reagentgrinder{ + pixel_x = 8; + pixel_y = 18 + }, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/bar) +"ij" = ( +/obj/effect/turf_decal/trimline/dark/filled/line{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/dark/filled/mid_joiner{ + dir = 8 + }, +/obj/effect/turf_decal/stripes/red/line{ + dir = 8 + }, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/cargo) +"il" = ( +/obj/machinery/modular_shield/module/charger{ + dir = 8 + }, +/obj/structure/marker_beacon/purple, +/obj/effect/turf_decal/box/blue/corners{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/dark/filled/line{ + dir = 9 + }, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/main) +"io" = ( +/obj/structure/marker_beacon/teal, +/obj/structure/fans/tiny/forcefield, +/obj/effect/decal/cleanable/glitter/blue, +/obj/effect/turf_decal/trimline/dark/filled/line{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/window/reinforced/survival_pod/spawner/directional/east{ + pixel_x = 4 + }, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/testlab) +"it" = ( +/obj/effect/turf_decal/stripes/red/line, +/obj/structure/window/reinforced/survival_pod/spawner/directional/south{ + pixel_y = -4 + }, +/obj/effect/turf_decal/tile/dark/full, +/obj/structure/rack/shelf, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/arrivals) +"iu" = ( +/obj/structure/frame/machine{ + anchored = 1; + state = 2; + icon_state = "box_1" + }, +/obj/item/circuitboard/machine/ore_redemption, +/obj/item/assembly/igniter, +/obj/structure/marker_beacon/burgundy, +/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/dark/textured_large, +/area/ruin/syndicate_lava_base/cargo) +"iw" = ( +/obj/effect/turf_decal/trimline/dark/filled/line{ + dir = 8 + }, +/obj/effect/turf_decal/stripes/blue{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/dark/filled/mid_joiner{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/medbay) +"iB" = ( +/obj/machinery/shower/directional/south, +/obj/structure/drain, +/obj/effect/turf_decal/trimline/dark/filled/line{ + dir = 5 + }, +/obj/structure/marker_beacon/violet, +/obj/structure/curtain/bounty{ + color = "#7d7d7d"; + alpha = 180 + }, +/turf/open/floor/iron/dark/small, +/area/ruin/syndicate_lava_base/dormitories) +"iD" = ( +/obj/effect/turf_decal/trimline/dark/filled/line{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/dark/filled/mid_joiner{ + dir = 4 + }, +/obj/effect/turf_decal/stripes/blue{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/window/reinforced/survival_pod/spawner/directional/east{ + pixel_x = 4 + }, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/medbay) +"iH" = ( +/obj/effect/turf_decal/box/blue/corners{ + dir = 8 + }, +/obj/structure/cable, +/obj/effect/turf_decal/trimline/dark/filled/line{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/dark/filled/mid_joiner{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/dark/filled/line, +/obj/effect/turf_decal/trimline/dark/filled/mid_joiner, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/main) +"iL" = ( +/obj/structure/flora/bush/fullgrass/style_random, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/flora/tree/jungle/small/style_random, +/turf/open/floor/grass, +/area/ruin/syndicate_lava_base/main) +"iP" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 8 + }, +/turf/open/floor/wood/large, +/area/ruin/syndicate_lava_base/main) +"iT" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 10 + }, +/turf/open/floor/carpet/red, +/area/ruin/syndicate_lava_base/bar) +"iW" = ( +/obj/effect/turf_decal/trimline/dark/filled/line{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/dark/filled/line, +/obj/effect/turf_decal/trimline/dark/filled/mid_joiner{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/dark/filled/mid_joiner, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/medbay) +"iX" = ( +/obj/machinery/button/door/directional/north{ + name = "Dorm Bolt Control"; + id = "Dynbin2"; + normaldoorcontrol = 1; + specialfunctions = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/turf_decal/trimline/dark/filled/line{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/dark/filled/line, +/turf/open/floor/iron/dark/textured, +/area/ruin/syndicate_lava_base/dormitories) +"iZ" = ( +/obj/effect/turf_decal/vg_decals/atmos/air, +/obj/effect/turf_decal/trimline/dark/filled/line{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/dark/filled/mid_joiner{ + dir = 1 + }, +/obj/machinery/atmospherics/components/trinary/mixer/airmix/inverse{ + dir = 4 + }, +/obj/machinery/light/directional/south{ + light_color = "#5148A6" + }, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/main) +"jb" = ( +/obj/structure/chair/comfy/black{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/dark/filled/mid_joiner{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/dark/filled/mid_joiner, +/obj/effect/turf_decal/siding/dark/corner{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/dark/filled/end{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/dark/filled/mid_joiner{ + dir = 1 + }, +/obj/structure/marker_beacon/purple, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/medbay) +"je" = ( +/obj/effect/turf_decal/trimline/dark/filled/corner, +/obj/machinery/button/door/directional/north{ + name = "Dorm Bolt Control"; + id = "Dynbin1"; + normaldoorcontrol = 1; + specialfunctions = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/marker_beacon/indigo, +/obj/effect/turf_decal/trimline/dark/filled/line{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/dark/filled/corner{ + dir = 8 + }, +/turf/open/floor/iron/dark/textured, +/area/ruin/syndicate_lava_base/dormitories) +"jl" = ( +/obj/effect/turf_decal/trimline/dark/filled/line, +/obj/effect/turf_decal/trimline/dark/filled/line{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/dark/filled/mid_joiner, +/obj/effect/turf_decal/trimline/dark/filled/mid_joiner{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/testlab) +"jn" = ( +/obj/machinery/coffeemaker{ + pixel_y = 36 + }, +/obj/effect/turf_decal/siding/wood{ + dir = 1 + }, +/obj/structure/chair/sofa/corp/right, +/turf/open/floor/wood/large, +/area/ruin/syndicate_lava_base/bar) +"jv" = ( +/obj/effect/turf_decal/stripes/red/line{ + dir = 1 + }, +/turf/open/floor/engine, +/area/ruin/syndicate_lava_base/testlab) +"jx" = ( +/obj/structure/chair/sofa/bench/right{ + dir = 8 + }, +/obj/effect/turf_decal/siding/wood{ + dir = 5 + }, +/turf/open/floor/wood/large, +/area/ruin/syndicate_lava_base/main) +"jz" = ( +/obj/structure/table/reinforced/plastitaniumglass, +/obj/effect/turf_decal/tile/dark/full, +/obj/structure/marker_beacon/indigo, +/obj/machinery/microwave{ + pixel_x = -1; + pixel_y = 5; + color = "#adadcd"; + name = "Interdyne microwave"; + light_color = "#adadcd" + }, +/obj/item/storage/box/donkpockets{ + pixel_y = 19; + pixel_x = 5 + }, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/bar) +"jE" = ( +/obj/structure/rack, +/obj/item/storage/box/syndie_kit/chameleon/ghostcafe{ + desc = "It's a box, for storing things."; + name = "chameleon kit" + }, +/obj/item/clothing/mask/gas/syndicate, +/obj/item/clothing/mask/gas/syndicate, +/obj/item/clothing/mask/gas/syndicate, +/obj/item/clothing/mask/gas/syndicate, +/obj/structure/marker_beacon/burgundy, +/obj/structure/sign/poster/contraband/communist_state/directional/west, +/obj/effect/turf_decal/tile/dark/full, +/obj/item/gun/ballistic/rifle/sniper_rifle, +/obj/item/gun/ballistic/rifle/sniper_rifle, +/obj/item/modular_computer/laptop/preset/syndicate, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/main) +"jG" = ( +/obj/effect/turf_decal/trimline/dark/filled/line{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/dark/filled/mid_joiner{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/dark/filled/line, +/obj/effect/turf_decal/trimline/dark/filled/mid_joiner, +/obj/structure/chair/sofa/corp/right, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/testlab) +"jH" = ( +/obj/machinery/modular_shield_generator, +/obj/effect/decal/cleanable/glitter/blue, +/turf/open/floor/circuit, +/area/ruin/syndicate_lava_base/main) +"jO" = ( +/obj/structure/table/reinforced/plastitaniumglass, +/obj/item/storage/pill_bottle/mutadone, +/obj/effect/turf_decal/tile/dark/full, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 8 + }, +/obj/structure/window/reinforced/survival_pod/spawner/directional/north{ + pixel_y = 4 + }, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/medbay) +"jP" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 8 + }, +/obj/structure/window/reinforced/survival_pod/spawner/directional/west{ + pixel_x = -4 + }, +/turf/open/floor/wood/large, +/area/ruin/syndicate_lava_base/main) +"jR" = ( +/obj/structure/closet/cabinet{ + name = "Dark wood Interdyne closet"; + color = "#8d8d8d"; + light_color = "#8d8d8d" + }, +/obj/effect/turf_decal/trimline/dark/filled/end{ + dir = 8 + }, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 4 + }, +/turf/open/floor/iron/dark/textured, +/area/ruin/syndicate_lava_base/dormitories) +"jX" = ( +/obj/effect/turf_decal/trimline/dark/filled/line{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/dark/filled/line{ + dir = 8 + }, +/turf/open/floor/iron/dark/textured, +/area/ruin/syndicate_lava_base/bar) +"kc" = ( +/obj/structure/marker_beacon/bronze, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/cable, +/turf/open/floor/wood/large, +/area/ruin/syndicate_lava_base/main) +"kg" = ( +/turf/closed/wall/r_wall/syndicate/nodiagonal, +/area/ruin/syndicate_lava_base/arrivals) +"kh" = ( +/obj/effect/turf_decal/tile/dark/full, +/obj/structure/table/wood/fancy/black, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/bar) +"kk" = ( +/obj/effect/turf_decal/loading_area/red, +/obj/effect/turf_decal/trimline/dark/filled/corner{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/dark/filled/corner, +/obj/effect/turf_decal/stripes/blue/corner{ + dir = 8 + }, +/obj/effect/turf_decal/stripes/blue/corner, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/cargo) +"kp" = ( +/obj/effect/turf_decal/trimline/dark/filled/line{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/dark/filled/mid_joiner{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/testlab) +"kr" = ( +/obj/effect/turf_decal/trimline/dark/filled/mid_joiner, +/obj/effect/turf_decal/trimline/dark/filled/line{ + dir = 10 + }, +/obj/effect/turf_decal/trimline/dark/filled/mid_joiner{ + dir = 8 + }, +/obj/structure/closet/crate/bin{ + pixel_x = -5 + }, +/obj/machinery/button/door/directional/west{ + base_icon_state = "tram"; + icon_state = "tram"; + req_access = list("syndicate"); + id = "interdynebar"; + name = "Interdyne Storm Shutters Bar" + }, +/obj/effect/turf_decal/box/blue/corners{ + dir = 8 + }, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/bar) +"kt" = ( +/obj/effect/spawner/structure/window/reinforced/plasma/plastitanium, +/turf/open/floor/plating/reinforced, +/area/ruin/syndicate_lava_base/dormitories) +"ku" = ( +/obj/structure/lattice/catwalk/mining, +/obj/structure/railing{ + dir = 9 + }, +/turf/open/lava/smooth/lava_land_surface, +/area/lavaland/surface/outdoors) +"kv" = ( +/obj/effect/turf_decal/trimline/dark/filled/line{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/dark/filled/line{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/dark/filled/mid_joiner{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/dark/filled/mid_joiner{ + dir = 8 + }, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/main) +"kB" = ( +/obj/effect/turf_decal/trimline/dark/filled/line{ + dir = 9 + }, +/obj/effect/turf_decal/trimline/dark/filled/mid_joiner{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/dark/filled/mid_joiner{ + dir = 1 + }, +/obj/effect/turf_decal/siding/thinplating/dark{ + dir = 9 + }, +/obj/structure/cable, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/main) +"kD" = ( +/obj/effect/turf_decal/trimline/dark/filled/corner{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/dark/filled/corner{ + dir = 8 + }, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/bar) +"kI" = ( +/obj/effect/spawner/structure/window/reinforced/plasma/plastitanium, +/obj/machinery/door/poddoor{ + id = "interdynelabs"; + name = "Interdyne Storm Shutters Labs" + }, +/turf/open/floor/plating/reinforced, +/area/ruin/syndicate_lava_base/medbay) +"kL" = ( +/obj/effect/turf_decal/tile/dark/full, +/obj/effect/turf_decal/siding/dark/corner{ + dir = 1 + }, +/obj/effect/turf_decal/siding/dark/corner{ + dir = 4 + }, +/obj/machinery/oven/range{ + color = "#9d9ddd"; + name = "Interdyne range"; + light_color = "#9d9ddd" + }, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/bar) +"kO" = ( +/obj/machinery/hydroponics/constructable, +/obj/structure/marker_beacon/burgundy, +/turf/open/floor/grass, +/area/ruin/syndicate_lava_base/bar) +"kP" = ( +/obj/effect/turf_decal/trimline/dark/filled/line{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/dark/filled/mid_joiner{ + dir = 1 + }, +/obj/effect/turf_decal/stripes/red/line{ + dir = 1 + }, +/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/dark/textured_large, +/area/ruin/syndicate_lava_base/cargo) +"kU" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/turf/open/floor/wood/large, +/area/ruin/syndicate_lava_base/main) +"kV" = ( +/obj/effect/turf_decal/trimline/dark/filled/line{ + dir = 6 + }, +/obj/effect/turf_decal/trimline/dark/filled/mid_joiner{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/dark/filled/mid_joiner, +/obj/machinery/anesthetic_machine{ + pixel_x = 10 + }, +/obj/machinery/iv_drip{ + pixel_x = -10 + }, +/obj/item/tank/internals/anesthetic, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/medbay) +"kY" = ( +/obj/effect/spawner/structure/window/reinforced/plasma/plastitanium, +/obj/machinery/door/poddoor{ + id = "interdynebar"; + name = "Interdyne Storm Shutters Bar" + }, +/turf/open/floor/plating/reinforced, +/area/ruin/syndicate_lava_base/bar) +"lc" = ( +/obj/structure/marker_beacon/teal, +/obj/structure/fans/tiny/forcefield, +/obj/effect/decal/cleanable/glitter/blue, +/obj/effect/turf_decal/arrows/blue, +/obj/effect/turf_decal/arrows/blue{ + dir = 1 + }, +/obj/structure/window/reinforced/survival_pod/spawner/directional/east{ + pixel_x = 4 + }, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/medbay) +"lh" = ( +/obj/item/chair, +/turf/open/misc/asteroid/basalt/lava_land_surface, +/area/lavaland/surface/outdoors) +"lq" = ( +/obj/machinery/atmospherics/components/unary/passive_vent{ + dir = 4 + }, +/turf/open/floor/engine, +/area/ruin/syndicate_lava_base/main) +"lr" = ( +/obj/effect/turf_decal/tile/dark/full, +/obj/structure/marker_beacon/indigo, +/obj/machinery/mecha_part_fabricator{ + name = "Interdyne exosuit fabricator"; + color = "#adadcd"; + light_color = "#adadcd" + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/testlab) +"lx" = ( +/obj/machinery/porta_turret/syndicate{ + dir = 9; + faction = list("Syndicate","neutral") + }, +/obj/structure/marker_beacon/burgundy, +/obj/machinery/camera/xray{ + pixel_x = 10; + name = "Inderdyne security camera"; + network = list("Interdyne"); + color = "#adadcd"; + pixel_y = 25 + }, +/turf/closed/wall/r_wall/syndicate/nodiagonal, +/area/ruin/syndicate_lava_base/main) +"lA" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 8 + }, +/obj/machinery/door/window/survival_pod/left/directional/west{ + req_access = list("syndicate"); + pixel_x = -4 + }, +/turf/open/floor/wood/large, +/area/ruin/syndicate_lava_base/main) +"lD" = ( +/obj/structure/marker_beacon/bronze, +/obj/effect/turf_decal/trimline/dark/filled/line{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/dark/filled/mid_joiner{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/dark/filled/line, +/obj/effect/turf_decal/trimline/dark/filled/mid_joiner, +/obj/effect/turf_decal/stripes/red/line, +/obj/machinery/power/apc/auto_name/directional/north, +/obj/machinery/airalarm/directional/north{ + req_access = list("syndicate"); + pixel_y = 42 + }, +/obj/structure/cable, +/obj/effect/mapping_helpers/apc/syndicate_access, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/cargo) +"lH" = ( +/obj/effect/turf_decal/trimline/dark/filled/corner{ + dir = 1 + }, +/obj/effect/turf_decal/box/blue/corners, +/obj/structure/cable, +/obj/effect/turf_decal/trimline/dark/filled/corner{ + dir = 8 + }, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/main) +"lI" = ( +/obj/structure/cable, +/obj/machinery/power/rtg/advanced, +/obj/structure/window/reinforced/plasma/spawner/directional/south, +/obj/structure/window/reinforced/plasma/spawner/directional/west, +/obj/structure/window/reinforced/plasma/spawner/directional/north, +/obj/effect/decal/cleanable/glitter/pink, +/obj/effect/decal/cleanable/glitter/blue, +/obj/effect/decal/cleanable/greenglow, +/turf/open/floor/plating/reinforced, +/area/ruin/syndicate_lava_base/main) +"lJ" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 6 + }, +/turf/open/floor/wood/large, +/area/ruin/syndicate_lava_base/main) +"lR" = ( +/obj/effect/turf_decal/tile/dark/full, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/item/storage/toolbox/syndicate, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/testlab) +"lS" = ( +/turf/closed/wall/r_wall/syndicate, +/area/ruin/syndicate_lava_base/dormitories) +"lV" = ( +/obj/effect/spawner/structure/window/reinforced/plasma/plastitanium, +/obj/machinery/door/poddoor{ + id = "interdynernd"; + name = "Interdyne Storm Shutters RnD" + }, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/testlab) +"lW" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 9 + }, +/obj/structure/chair/pillow_small, +/obj/structure/marker_beacon/purple, +/obj/machinery/button/door/directional/west{ + base_icon_state = "tram"; + icon_state = "tram"; + req_access = list("syndicate"); + id = "interdynelibrary"; + name = "Interdyne Storm Shutters Library" + }, +/turf/open/floor/carpet/red, +/area/ruin/syndicate_lava_base/bar) +"md" = ( +/obj/item/pillow, +/obj/structure/fireplace, +/obj/effect/turf_decal/siding/wood{ + dir = 1 + }, +/turf/open/floor/carpet/red, +/area/ruin/syndicate_lava_base/bar) +"mh" = ( +/obj/structure/table/optable, +/obj/structure/marker_beacon/teal, +/obj/effect/turf_decal/tile/dark/full, +/obj/effect/turf_decal/stripes/blue{ + dir = 1 + }, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/medbay) +"mi" = ( +/obj/machinery/computer/camera_advanced/xenobio{ + dir = 4; + name = "Interdyne Slime management console"; + pixel_x = -4 + }, +/obj/effect/turf_decal/tile/dark/full, +/obj/machinery/button/door/directional/west{ + base_icon_state = "tram"; + icon_state = "tram"; + req_access = list("syndicate"); + id = "interdynexeno"; + name = "Interdyne Storm Shutters Xeno" + }, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/testlab) +"mj" = ( +/obj/structure/cable, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/cargo) +"mo" = ( +/obj/structure/lattice/catwalk/mining, +/obj/structure/railing, +/turf/open/lava/smooth/lava_land_surface, +/area/lavaland/surface/outdoors) +"mr" = ( +/obj/structure/rack/shelf, +/obj/effect/turf_decal/tile/dark/full, +/obj/machinery/light/directional/south{ + light_color = "#5148A6" + }, +/obj/item/gun/syringe/rapidsyringe, +/obj/item/gun/syringe/rapidsyringe, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/testlab) +"mE" = ( +/obj/effect/turf_decal/tile/dark/full, +/obj/structure/closet/crate/freezer/blood, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/medbay) +"mF" = ( +/obj/effect/turf_decal/trimline/dark/filled/line{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/dark/filled/mid_joiner{ + dir = 4 + }, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/bar) +"mS" = ( +/obj/effect/turf_decal/tile/dark/full, +/obj/structure/table/reinforced/plastitaniumglass, +/obj/item/toy/crayon/spraycan{ + pixel_x = 4; + pixel_y = 10 + }, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/bar) +"mT" = ( +/obj/effect/turf_decal/trimline/dark/filled/line{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/dark/filled/mid_joiner{ + dir = 4 + }, +/obj/effect/turf_decal/siding/thinplating/dark{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/main) +"na" = ( +/obj/structure/window/reinforced/survival_pod/spawner/directional/west{ + pixel_x = -4 + }, +/turf/open/floor/engine, +/area/ruin/syndicate_lava_base/testlab) +"nc" = ( +/obj/effect/turf_decal/stripes/blue{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/dark/filled/line{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/dark/filled/mid_joiner{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/window/reinforced/survival_pod/spawner/directional/east{ + pixel_x = 4 + }, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/medbay) +"ne" = ( +/obj/machinery/atmospherics/components/unary/thermomachine/freezer/on{ + name = "Interdyne slime freezer"; + dir = 4; + initialize_directions = 4; + color = "#adadcd"; + light_color = "#adadcd" + }, +/obj/effect/turf_decal/tile/dark/full, +/obj/machinery/camera/xray/directional/north{ + color = "#adadcd"; + name = "Inderdyne security camera"; + network = list("Interdyne") + }, +/turf/open/floor/iron/dark, +/area/ruin/syndicate_lava_base/testlab) +"nh" = ( +/obj/machinery/atmospherics/miner/oxygen, +/obj/structure/marker_beacon/burgundy, +/turf/open/floor/engine/o2, +/area/ruin/syndicate_lava_base/main) +"ni" = ( +/obj/structure/marker_beacon/bronze, +/obj/effect/turf_decal/trimline/dark/filled/line{ + dir = 9 + }, +/turf/open/floor/iron/dark/textured, +/area/ruin/syndicate_lava_base/bar) +"nm" = ( +/obj/effect/turf_decal/tile/dark/full, +/obj/effect/turf_decal/stripes/blue{ + dir = 1 + }, +/obj/machinery/stasis{ + dir = 8 + }, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/medbay) +"no" = ( +/obj/effect/turf_decal/trimline/dark/filled/corner{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/dark/filled/corner{ + dir = 4 + }, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/testlab) +"nr" = ( +/turf/open/floor/plating/reinforced/lavaland, +/area/lavaland/surface/outdoors) +"nu" = ( +/obj/effect/turf_decal/trimline/dark/filled/line{ + dir = 8 + }, +/turf/open/floor/iron/dark/textured, +/area/ruin/syndicate_lava_base/dormitories) +"nv" = ( +/obj/machinery/modular_shield/module/node{ + dir = 4 + }, +/obj/effect/decal/cleanable/glitter/blue, +/turf/open/floor/circuit, +/area/ruin/syndicate_lava_base/main) +"ny" = ( +/obj/effect/turf_decal/trimline/dark/filled/line{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/dark/filled/mid_joiner{ + dir = 4 + }, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 8 + }, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/main) +"nz" = ( +/obj/effect/turf_decal/trimline/dark/filled/corner, +/obj/effect/turf_decal/trimline/dark/filled/corner{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/dark/filled/line{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/dark/filled/mid_joiner{ + dir = 8 + }, +/obj/effect/turf_decal/siding/thinplating/dark{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/main) +"nB" = ( +/obj/structure/closet/crate/bin, +/obj/machinery/camera/xray/directional/north{ + color = "#adadcd"; + name = "Inderdyne security camera"; + network = list("Interdyne") + }, +/obj/effect/turf_decal/siding/wood{ + dir = 5 + }, +/turf/open/floor/wood/large, +/area/ruin/syndicate_lava_base/bar) +"nC" = ( +/obj/structure/table/reinforced/plastitaniumglass, +/obj/item/storage/backpack/duffelbag/syndie/surgery, +/obj/machinery/defibrillator_mount/loaded{ + pixel_x = 28 + }, +/obj/effect/turf_decal/tile/dark/full, +/obj/item/autopsy_scanner, +/obj/item/healthanalyzer/advanced, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/medbay) +"nE" = ( +/obj/effect/turf_decal/trimline/dark/filled/line{ + dir = 10 + }, +/obj/effect/turf_decal/trimline/dark/filled/mid_joiner, +/obj/effect/turf_decal/trimline/dark/filled/mid_joiner{ + dir = 8 + }, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/bar) +"nG" = ( +/obj/effect/turf_decal/trimline/dark/filled/line{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/dark/filled/mid_joiner{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/dark/filled/line{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/dark/filled/mid_joiner{ + dir = 4 + }, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/testlab) +"nH" = ( +/obj/structure/flora/bush/sparsegrass/style_random, +/obj/structure/flora/bush/flowers_br/style_random, +/obj/structure/marker_beacon/teal, +/obj/structure/flora/tree/jungle/small/style_random, +/turf/open/floor/grass, +/area/ruin/syndicate_lava_base/main) +"nI" = ( +/obj/effect/turf_decal/trimline/dark/filled/corner{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/dark/filled/corner{ + dir = 8 + }, +/obj/effect/turf_decal/stripes/blue/corner{ + dir = 8 + }, +/obj/effect/turf_decal/stripes/blue/corner{ + dir = 1 + }, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/medbay) +"nW" = ( +/obj/effect/turf_decal/arrows/blue{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/dark/filled/line{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/medbay) +"of" = ( +/obj/structure/marker_beacon/burgundy, +/obj/effect/turf_decal/tile/dark/full, +/obj/structure/table/reinforced/plastitaniumglass, +/obj/item/construction/plumbing, +/obj/item/pipe_dispenser, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/main) +"oh" = ( +/obj/structure/railing{ + dir = 1 + }, +/obj/structure/lattice/catwalk/mining, +/turf/open/lava/smooth/lava_land_surface, +/area/lavaland/surface/outdoors) +"on" = ( +/obj/effect/turf_decal/stripes/red/line{ + dir = 5 + }, +/obj/effect/turf_decal/trimline/dark/filled/line{ + dir = 10 + }, +/obj/effect/turf_decal/trimline/dark/filled/mid_joiner, +/obj/effect/turf_decal/trimline/dark/filled/mid_joiner{ + dir = 8 + }, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/medbay) +"ot" = ( +/obj/structure/table/wood/fancy, +/obj/item/paper_bin{ + pixel_y = 4 + }, +/obj/item/pen{ + pixel_y = 4 + }, +/obj/structure/marker_beacon/bronze, +/turf/open/floor/wood/large, +/area/ruin/syndicate_lava_base/bar) +"ox" = ( +/obj/structure/bookcase/random/adult, +/turf/open/floor/wood/large, +/area/ruin/syndicate_lava_base/bar) +"oC" = ( +/obj/effect/turf_decal/tile/dark/full, +/obj/structure/rack/shelf, +/obj/item/circuitboard/machine/smoke_machine, +/obj/item/circuitboard/machine/cell_charger, +/obj/item/circuitboard/machine/deep_fryer, +/obj/item/circuitboard/machine/gibber, +/obj/item/circuitboard/machine/processor, +/obj/machinery/light/directional/south{ + light_color = "#5148A6" + }, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/cargo) +"oD" = ( +/obj/effect/turf_decal/arrows/blue{ + dir = 1 + }, +/obj/effect/turf_decal/box/red/corners{ + dir = 1 + }, +/obj/effect/turf_decal/box/red/corners{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/dark/filled/corner, +/obj/effect/turf_decal/trimline/dark/filled/corner{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/dark/filled/corner{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/dark/filled/corner{ + dir = 4 + }, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/main) +"oF" = ( +/obj/effect/turf_decal/trimline/dark/filled/corner, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/medbay) +"oH" = ( +/obj/machinery/power/terminal{ + dir = 1 + }, +/obj/structure/cable, +/obj/structure/window/reinforced/plasma/spawner/directional/south, +/obj/structure/window/reinforced/plasma/spawner/directional/north, +/obj/effect/decal/cleanable/glitter/pink, +/obj/effect/decal/cleanable/glitter/blue, +/obj/effect/decal/cleanable/greenglow, +/obj/machinery/power/rtg/advanced, +/turf/open/floor/plating/reinforced, +/area/ruin/syndicate_lava_base/main) +"oM" = ( +/obj/effect/turf_decal/siding/wood/end{ + dir = 1 + }, +/turf/open/floor/carpet/red, +/area/ruin/syndicate_lava_base/bar) +"oN" = ( +/obj/machinery/modular_shield/module/node{ + dir = 1 + }, +/obj/effect/decal/cleanable/glitter/blue, +/turf/open/floor/circuit, +/area/ruin/syndicate_lava_base/main) +"oP" = ( +/obj/effect/turf_decal/stripes/red/line, +/obj/effect/turf_decal/stripes/red/line{ + dir = 1 + }, +/obj/effect/decal/cleanable/blood/old, +/obj/machinery/door/poddoor{ + id = "interdynegate"; + name = "Inderdyne Gate" + }, +/turf/open/floor/plating/elevatorshaft, +/area/ruin/syndicate_lava_base/cargo) +"oQ" = ( +/obj/machinery/vending/clothing{ + onstation = 0 + }, +/obj/effect/turf_decal/tile/dark/full, +/obj/structure/marker_beacon/olive, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/dormitories) +"oS" = ( +/obj/effect/turf_decal/trimline/dark/filled/corner{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/dark/filled/corner{ + dir = 4 + }, +/obj/effect/turf_decal/siding/thinplating/dark/corner{ + dir = 4 + }, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 4 + }, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/main) +"oT" = ( +/obj/effect/turf_decal/stripes/red/line{ + dir = 1 + }, +/obj/structure/window/reinforced/survival_pod/spawner/directional/north{ + pixel_y = 4 + }, +/obj/effect/turf_decal/tile/dark/full, +/obj/structure/rack/shelf, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/arrivals) +"oU" = ( +/obj/structure/railing/corner{ + dir = 8 + }, +/obj/structure/railing/corner{ + dir = 1 + }, +/obj/structure/lattice/catwalk/mining, +/turf/open/lava/smooth/lava_land_surface, +/area/lavaland/surface/outdoors) +"pc" = ( +/obj/effect/turf_decal/stripes/red/corner{ + dir = 4 + }, +/obj/machinery/button/door/directional/north{ + name = "Interdyne Gate"; + id = "interdynegateout"; + icon_state = "tram"; + base_icon_state = "tram"; + light_color = "#22CCFF"; + pixel_x = 7; + pixel_y = 32; + req_access = list("syndicate") + }, +/obj/effect/turf_decal/trimline/dark/filled/line{ + dir = 9 + }, +/obj/effect/turf_decal/trimline/dark/filled/mid_joiner{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/dark/filled/mid_joiner{ + dir = 8 + }, +/obj/effect/turf_decal/box/white/corners{ + dir = 1 + }, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/cargo) +"pk" = ( +/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 = 4 + }, +/turf/open/floor/wood/large, +/area/ruin/syndicate_lava_base/main) +"pn" = ( +/obj/structure/marker_beacon/burgundy, +/obj/structure/railing, +/obj/structure/railing{ + dir = 5 + }, +/turf/open/floor/engine/hull/reinforced/lavaland, +/area/lavaland/surface/outdoors) +"pq" = ( +/turf/closed/wall/r_wall/syndicate/nodiagonal, +/area/ruin/syndicate_lava_base/main) +"pt" = ( +/obj/effect/turf_decal/trimline/dark/filled/line{ + dir = 5 + }, +/obj/effect/turf_decal/trimline/dark/filled/mid_joiner{ + dir = 4 + }, +/obj/structure/marker_beacon/burgundy, +/obj/machinery/bci_implanter{ + name = "Interdyne BCI implanter"; + color = "#adadcd"; + light_color = "#adadcd" + }, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/testlab) +"pu" = ( +/obj/structure/lattice/catwalk/mining, +/turf/open/lava/smooth/lava_land_surface, +/area/lavaland/surface/outdoors) +"pG" = ( +/obj/effect/turf_decal/trimline/dark/filled/line{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/dark/filled/mid_joiner{ + dir = 4 + }, +/obj/machinery/atmospherics/components/trinary/filter/flipped, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/main) +"pK" = ( +/obj/structure/table/wood/fancy, +/turf/open/floor/wood/large, +/area/ruin/syndicate_lava_base/bar) +"pN" = ( +/obj/structure/railing, +/obj/structure/railing{ + dir = 1 + }, +/obj/structure/lattice/catwalk/mining, +/turf/open/lava/smooth/lava_land_surface, +/area/lavaland/surface/outdoors) +"pP" = ( +/obj/effect/turf_decal/trimline/dark/filled/line{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/dark/filled/corner, +/obj/effect/turf_decal/trimline/dark/filled/mid_joiner{ + dir = 8 + }, +/obj/structure/sink/directional/east, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/medbay) +"pY" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/siphon/monitored{ + chamber_id = "lavalandsyndieplasma"; + dir = 8 + }, +/turf/open/floor/engine/n2, +/area/ruin/syndicate_lava_base/main) +"qa" = ( +/obj/effect/spawner/structure/window/reinforced/plasma/plastitanium, +/turf/open/floor/plating/reinforced, +/area/ruin/syndicate_lava_base/medbay) +"qb" = ( +/obj/machinery/modular_shield/module/well{ + dir = 8 + }, +/obj/structure/marker_beacon/indigo, +/obj/effect/turf_decal/box/blue/corners{ + dir = 1 + }, +/obj/effect/turf_decal/box/blue/corners{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/dark/filled/end{ + dir = 8 + }, +/turf/open/floor/iron/dark, +/area/ruin/syndicate_lava_base/main) +"qe" = ( +/obj/effect/turf_decal/trimline/dark/filled/mid_joiner{ + dir = 8 + }, +/obj/effect/turf_decal/tile/dark/full, +/obj/machinery/rnd/destructive_analyzer{ + name = "Interdyne destructive analyzer"; + color = "#adadcd"; + light_color = "#adadcd" + }, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/testlab) +"ql" = ( +/obj/effect/turf_decal/trimline/dark/filled/corner{ + dir = 8 + }, +/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/dark/textured_large, +/area/ruin/syndicate_lava_base/cargo) +"qr" = ( +/obj/effect/turf_decal/tile/dark/full, +/obj/structure/rack/shelf, +/obj/item/storage/box/stockparts/deluxe, +/obj/item/storage/box/stockparts/deluxe, +/obj/machinery/light/directional/south{ + light_color = "#5148A6" + }, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/cargo) +"qy" = ( +/obj/effect/turf_decal/trimline/dark/filled/line{ + dir = 10 + }, +/obj/effect/turf_decal/trimline/dark/filled/mid_joiner{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/dark/filled/mid_joiner, +/obj/structure/closet/crate/bin, +/obj/machinery/light/directional/south{ + light_color = "#5148A6" + }, +/obj/machinery/button/door/directional/west{ + base_icon_state = "tram"; + icon_state = "tram"; + req_access = list("syndicate"); + id = "interdynemed"; + name = "Interdyne Storm Shutters Med" + }, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/medbay) +"qA" = ( +/obj/effect/turf_decal/trimline/dark/filled/line, +/obj/effect/turf_decal/trimline/dark/filled/corner{ + dir = 1 + }, +/obj/machinery/light/directional/south{ + bulb_colour = "#2C3BFF"; + color = "#2C3BFF"; + light_color = "#2C3BFF" + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron/dark/textured, +/area/ruin/syndicate_lava_base/dormitories) +"qD" = ( +/obj/structure/closet/secure_closet/freezer/kitchen{ + req_access = list("syndicate"); + color = "#9d9ddd"; + name = "Interdyne kitchen cabinet"; + light_color = "#9d9ddd" + }, +/obj/item/reagent_containers/condiment/milk, +/obj/item/reagent_containers/condiment/soymilk, +/obj/effect/turf_decal/trimline/dark/filled/line, +/obj/effect/turf_decal/trimline/dark/filled/mid_joiner, +/obj/effect/turf_decal/box/white/corners, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/bar) +"qE" = ( +/obj/structure/fans/tiny, +/obj/machinery/door/window/survival_pod/left/directional/south{ + req_access = list("syndicate"); + name = "Slime Pacification Chamber" + }, +/obj/effect/turf_decal/trimline/dark/filled/end{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/general/hidden, +/turf/open/floor/iron/dark, +/area/ruin/syndicate_lava_base/testlab) +"qH" = ( +/obj/item/stack/sheet/mineral/gold{ + amount = 10 + }, +/obj/item/stack/sheet/mineral/plasma{ + amount = 5 + }, +/obj/item/stack/sheet/mineral/uranium{ + amount = 10 + }, +/obj/item/stack/sheet/mineral/diamond, +/obj/item/stack/sheet/bluespace_crystal, +/obj/item/stack/sheet/mineral/silver, +/obj/item/stack/sheet/mineral/titanium, +/obj/effect/turf_decal/bot_red, +/obj/effect/turf_decal/tile/dark/full, +/obj/structure/closet/crate/secure/gear{ + req_access = list("syndicate"); + anchored = 1 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/cargo) +"qK" = ( +/obj/effect/turf_decal/trimline/dark/filled/line{ + dir = 4 + }, +/obj/effect/turf_decal/stripes/blue{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/dark/filled/line{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/dark/filled/mid_joiner{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/dark/filled/mid_joiner{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/medbay) +"qL" = ( +/obj/machinery/portable_atmospherics/canister/anesthetic_mix, +/obj/machinery/atmospherics/components/unary/portables_connector/visible{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/dark/filled/line{ + dir = 5 + }, +/obj/effect/turf_decal/trimline/dark/filled/mid_joiner{ + dir = 4 + }, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/medbay) +"qM" = ( +/obj/machinery/light/directional/south{ + light_color = "#5148A6" + }, +/turf/open/floor/engine, +/area/ruin/syndicate_lava_base/testlab) +"qN" = ( +/obj/effect/turf_decal/stripes/red/corner{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/dark/filled/line{ + dir = 5 + }, +/obj/effect/turf_decal/trimline/dark/filled/mid_joiner{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/dark/filled/mid_joiner{ + dir = 4 + }, +/obj/effect/turf_decal/box/white/corners{ + dir = 4 + }, +/obj/machinery/camera/xray/directional/north{ + color = "#adadcd"; + name = "Inderdyne security camera"; + network = list("Interdyne") + }, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/cargo) +"qR" = ( +/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/ruin/syndicate_lava_base/testlab) +"rc" = ( +/obj/effect/turf_decal/trimline/dark/filled/corner{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/dark/filled/corner{ + dir = 8 + }, +/obj/effect/turf_decal/stripes/blue/corner{ + dir = 8 + }, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/medbay) +"re" = ( +/obj/effect/turf_decal/trimline/dark/filled/line, +/obj/effect/turf_decal/trimline/dark/filled/line{ + dir = 1 + }, +/obj/effect/mapping_helpers/airlock/access/all/syndicate/general, +/obj/machinery/door/airlock{ + name = "Unisex Showers"; + id_tag = "IDyneWC" + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron/dark/textured, +/area/ruin/syndicate_lava_base/dormitories) +"rk" = ( +/obj/effect/turf_decal/trimline/dark/filled/corner{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/testlab) +"rm" = ( +/obj/effect/turf_decal/trimline/dark/filled/line{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/dark/filled/mid_joiner{ + dir = 1 + }, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/bar) +"rs" = ( +/obj/effect/turf_decal/trimline/dark/filled/corner{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/marker_beacon/indigo, +/obj/effect/turf_decal/trimline/dark/filled/line{ + dir = 10 + }, +/turf/open/floor/iron/dark/textured, +/area/ruin/syndicate_lava_base/dormitories) +"ru" = ( +/obj/effect/turf_decal/tile/dark/full, +/obj/structure/marker_beacon/burgundy, +/obj/machinery/processor{ + color = "#adadcd"; + name = "Interdyne food processor"; + light_color = "#adadcd" + }, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/bar) +"rw" = ( +/obj/effect/turf_decal/trimline/dark/filled/corner{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/dark/filled/corner{ + dir = 1 + }, +/obj/structure/cable, +/obj/effect/turf_decal/trimline/dark/filled/line, +/obj/effect/turf_decal/trimline/dark/filled/mid_joiner, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/main) +"ry" = ( +/obj/effect/turf_decal/siding/dark{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/dark/filled/line{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/dark/filled/corner{ + dir = 4 + }, +/turf/open/floor/iron/dark/textured, +/area/ruin/syndicate_lava_base/bar) +"rz" = ( +/obj/structure/chair/sofa/bench/left{ + dir = 8 + }, +/obj/effect/turf_decal/siding/wood{ + dir = 4 + }, +/turf/open/floor/wood/large, +/area/ruin/syndicate_lava_base/main) +"rA" = ( +/obj/machinery/modular_shield/module/well{ + dir = 8 + }, +/obj/structure/marker_beacon/indigo, +/obj/effect/turf_decal/box/blue/corners{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/dark/filled/line{ + dir = 10 + }, +/obj/effect/turf_decal/trimline/dark/filled/mid_joiner, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/main) +"rI" = ( +/obj/effect/spawner/structure/window/reinforced/plasma/plastitanium, +/obj/machinery/power/shuttle_engine/propulsion{ + dir = 4; + pixel_x = 8 + }, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/arrivals) +"rP" = ( +/obj/effect/turf_decal/trimline/dark/filled/corner{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/dark/filled/line{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/dark/filled/mid_joiner{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/dark/filled/corner, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/bar) +"rS" = ( +/obj/effect/turf_decal/tile/dark/full, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 1 + }, +/obj/structure/table/wood/fancy/black, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/bar) +"rW" = ( +/obj/structure/railing{ + dir = 6 + }, +/obj/structure/lattice/catwalk/mining, +/turf/open/lava/smooth/lava_land_surface, +/area/lavaland/surface/outdoors) +"sb" = ( +/obj/structure/table/wood/fancy, +/obj/item/bedsheet/syndie, +/obj/item/bedsheet/syndie/double{ + dir = 1 + }, +/obj/machinery/camera/xray/directional/north{ + color = "#adadcd"; + name = "Inderdyne security camera"; + network = list("Interdyne") + }, +/turf/open/floor/wood/large, +/area/ruin/syndicate_lava_base/bar) +"se" = ( +/obj/effect/turf_decal/trimline/dark/filled/line, +/turf/open/floor/iron/dark/textured, +/area/ruin/syndicate_lava_base/bar) +"sf" = ( +/obj/structure/marker_beacon/burgundy, +/turf/open/floor/engine/hull/reinforced/lavaland, +/area/lavaland/surface/outdoors) +"sg" = ( +/obj/effect/turf_decal/tile/dark/full, +/obj/item/reagent_containers/cup/glass/drinkingglass{ + pixel_y = 8 + }, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 1 + }, +/obj/structure/table/wood/fancy/black, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/bar) +"sh" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/turf/open/floor/catwalk_floor/iron_dark, +/area/ruin/syndicate_lava_base/main) +"sj" = ( +/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/corner{ + dir = 4 + }, +/turf/open/floor/wood/large, +/area/ruin/syndicate_lava_base/main) +"sl" = ( +/obj/effect/turf_decal/siding/dark{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/dark/filled/line, +/obj/effect/turf_decal/trimline/dark/filled/line{ + dir = 1 + }, +/obj/effect/turf_decal/siding/dark/corner{ + dir = 8 + }, +/obj/effect/turf_decal/siding/dark/corner, +/turf/open/floor/iron/dark/textured, +/area/ruin/syndicate_lava_base/bar) +"sm" = ( +/obj/machinery/hydroponics/constructable, +/obj/machinery/door/window/survival_pod/left/directional/west{ + req_access = list("syndicate"); + pixel_x = -4 + }, +/turf/open/floor/grass, +/area/ruin/syndicate_lava_base/bar) +"so" = ( +/obj/machinery/chem_master{ + name = "Interdyne ChemMaster"; + color = "#adadcd"; + light_color = "#adadcd" + }, +/obj/effect/turf_decal/tile/dark/full, +/obj/structure/marker_beacon/indigo, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/medbay) +"sD" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 8 + }, +/turf/open/floor/carpet/red, +/area/ruin/syndicate_lava_base/bar) +"sI" = ( +/obj/machinery/airalarm/directional/north{ + req_access = list("syndicate"); + pixel_y = 42 + }, +/obj/machinery/power/apc/auto_name/directional/north, +/obj/effect/mapping_helpers/apc/syndicate_access, +/obj/effect/turf_decal/siding/wood{ + dir = 1 + }, +/obj/structure/cable, +/obj/structure/chair/sofa/corp/left, +/turf/open/floor/wood/large, +/area/ruin/syndicate_lava_base/bar) +"sS" = ( +/turf/closed/wall/r_wall/syndicate, +/area/ruin/syndicate_lava_base/main) +"sV" = ( +/obj/structure/fans/tiny/forcefield, +/obj/structure/marker_beacon/teal, +/obj/effect/decal/cleanable/glitter/blue, +/obj/effect/turf_decal/trimline/dark/filled/line{ + dir = 8 + }, +/obj/structure/window/reinforced/survival_pod/spawner/directional/west{ + pixel_x = -4 + }, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/medbay) +"te" = ( +/obj/structure/railing, +/obj/structure/lattice/catwalk/mining, +/turf/open/misc/asteroid/basalt/lava_land_surface, +/area/lavaland/surface/outdoors) +"tn" = ( +/obj/structure/table/reinforced/plastitaniumglass, +/obj/item/healthanalyzer/advanced, +/obj/structure/disposalpipe/segment{ + dir = 10 + }, +/obj/effect/turf_decal/tile/dark/full, +/obj/item/reagent_containers/spray/cleaner{ + pixel_x = -15; + pixel_y = 2 + }, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/medbay) +"to" = ( +/obj/effect/turf_decal/tile/dark/full, +/obj/structure/table/reinforced/plastitaniumglass, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/bar) +"tx" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 9 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/cable, +/turf/open/floor/wood/large, +/area/ruin/syndicate_lava_base/main) +"ty" = ( +/obj/machinery/modular_shield/module/charger{ + dir = 4 + }, +/obj/structure/marker_beacon/purple, +/obj/effect/turf_decal/trimline/dark/filled/mid_joiner{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/dark/filled/end{ + dir = 4 + }, +/obj/effect/turf_decal/box/blue/corners{ + dir = 4 + }, +/obj/effect/turf_decal/box/blue/corners, +/obj/effect/turf_decal/trimline/dark/filled/mid_joiner, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/main) +"tG" = ( +/obj/effect/turf_decal/stripes/blue{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/dark/filled/line{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/dark/filled/mid_joiner{ + dir = 8 + }, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/medbay) +"tS" = ( +/obj/effect/spawner/structure/window/reinforced/plasma/plastitanium, +/obj/machinery/door/poddoor{ + id = "interdynelibrary"; + name = "Interdyne Storm Shutters Library" + }, +/turf/open/floor/plating/reinforced, +/area/ruin/syndicate_lava_base/bar) +"tT" = ( +/obj/structure/extinguisher_cabinet/directional/north, +/obj/effect/turf_decal/trimline/dark/filled/corner, +/obj/effect/turf_decal/trimline/dark/filled/line{ + dir = 9 + }, +/obj/effect/turf_decal/trimline/dark/filled/mid_joiner{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/dark/filled/mid_joiner{ + dir = 1 + }, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/medbay) +"tY" = ( +/obj/structure/fans/tiny/forcefield, +/obj/structure/marker_beacon/teal, +/obj/effect/decal/cleanable/glitter/blue, +/obj/effect/turf_decal/trimline/dark/filled/line, +/obj/effect/turf_decal/trimline/dark/filled/line{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/cable, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/dormitories) +"ui" = ( +/obj/structure/flora/bush/sparsegrass/style_random, +/obj/structure/flora/bush/flowers_br/style_random, +/obj/structure/marker_beacon/teal, +/turf/open/floor/grass, +/area/ruin/syndicate_lava_base/main) +"uj" = ( +/obj/effect/turf_decal/tile/dark/full, +/obj/structure/table/reinforced/plastitaniumglass, +/obj/machinery/button/door/directional/west{ + base_icon_state = "tram"; + icon_state = "tram"; + req_access = list("syndicate"); + id = "interdynernd"; + name = "Interdyne Storm Shutters RnD" + }, +/obj/machinery/fax{ + fax_name = "Interdyne Fax"; + name = "Interdyne Fax Machine"; + pixel_y = 7; + syndicate_network = 1; + color = "#adadcd" + }, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/testlab) +"uk" = ( +/obj/structure/marker_beacon/teal, +/obj/structure/chair/sofa/corp/left{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/dark/filled/line{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/dark/filled/mid_joiner{ + dir = 8 + }, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/testlab) +"ul" = ( +/obj/effect/turf_decal/tile/dark/full, +/obj/machinery/vending/drugs{ + name = "\improper SyndiDrug Plus"; + onstation = 0; + extended_inventory = 1; + color = "#adadcd"; + light_color = "#adadcd" + }, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/medbay) +"ur" = ( +/obj/effect/turf_decal/trimline/dark/filled/line, +/obj/effect/turf_decal/trimline/dark/filled/line{ + dir = 1 + }, +/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/dark/textured, +/area/ruin/syndicate_lava_base/dormitories) +"ut" = ( +/obj/effect/turf_decal/trimline/dark/filled/end{ + dir = 1 + }, +/obj/effect/turf_decal/box/red/corners, +/obj/effect/turf_decal/box/red/corners{ + dir = 8 + }, +/obj/effect/turf_decal/stripes/red/line{ + dir = 1 + }, +/obj/structure/marker_beacon/burgundy, +/obj/structure/window/reinforced/survival_pod/spawner/directional/north{ + pixel_y = 4 + }, +/obj/effect/mob_spawn/ghost_role/human/interdyne_planetary_base/shaftminer, +/turf/open/floor/iron/dark, +/area/ruin/syndicate_lava_base/arrivals) +"uu" = ( +/obj/machinery/suit_storage_unit/mining, +/obj/effect/turf_decal/tile/dark/full, +/obj/effect/turf_decal/stripes/blue/corner{ + dir = 4 + }, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/cargo) +"uw" = ( +/obj/machinery/portable_atmospherics/canister/bz, +/obj/machinery/atmospherics/components/unary/portables_connector, +/obj/effect/turf_decal/trimline/dark/filled/line{ + dir = 5 + }, +/turf/open/floor/iron/dark, +/area/ruin/syndicate_lava_base/testlab) +"uH" = ( +/turf/open/floor/engine/hull/reinforced/lavaland, +/area/lavaland/surface/outdoors) +"uJ" = ( +/obj/effect/turf_decal/tile/dark_red/half{ + dir = 8 + }, +/turf/open/floor/engine, +/area/ruin/syndicate_lava_base/testlab) +"uQ" = ( +/obj/effect/turf_decal/trimline/dark/filled/corner{ + dir = 4 + }, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/cargo) +"uR" = ( +/obj/effect/turf_decal/siding/wood/corner{ + dir = 4 + }, +/obj/effect/turf_decal/siding/wood/corner{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/cable, +/turf/open/floor/wood/large, +/area/ruin/syndicate_lava_base/main) +"uX" = ( +/obj/effect/turf_decal/siding/wood/corner{ + 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/wood/large, +/area/ruin/syndicate_lava_base/main) +"uY" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 4 + }, +/obj/structure/marker_beacon/bronze, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/cable, +/turf/open/floor/wood/large, +/area/ruin/syndicate_lava_base/main) +"vb" = ( +/obj/structure/flora/bush/fullgrass/style_random, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 4 + }, +/turf/open/floor/grass, +/area/ruin/syndicate_lava_base/main) +"vm" = ( +/turf/closed/wall/r_wall/syndicate/nodiagonal, +/area/ruin/syndicate_lava_base/cargo) +"vn" = ( +/obj/effect/turf_decal/trimline/dark/filled/corner{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/dark/filled/corner{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/testlab) +"vv" = ( +/obj/effect/turf_decal/stripes/red/line{ + dir = 10 + }, +/obj/effect/turf_decal/trimline/dark/filled/mid_joiner{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/dark/filled/line{ + dir = 5 + }, +/obj/machinery/duct, +/obj/structure/marker_beacon/burgundy, +/obj/structure/window/reinforced/survival_pod/spawner/directional/north{ + pixel_y = 4 + }, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/medbay) +"vy" = ( +/obj/item/tank/internals/oxygen/yellow, +/obj/item/tank/internals/oxygen/yellow, +/obj/item/tank/internals/oxygen/yellow, +/obj/item/tank/internals/emergency_oxygen/double, +/obj/item/tank/internals/emergency_oxygen/double, +/obj/item/tank/internals/emergency_oxygen/double, +/obj/item/clothing/mask/gas, +/obj/item/clothing/mask/gas, +/obj/structure/closet/crate/internals{ + anchored = 1 + }, +/obj/item/clothing/mask/gas, +/obj/effect/turf_decal/tile/dark/full, +/obj/effect/turf_decal/stripes/blue/corner{ + dir = 8 + }, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/cargo) +"vA" = ( +/obj/effect/turf_decal/stripes/red/corner, +/obj/machinery/button/door/directional/south{ + base_icon_state = "tram"; + name = "Interdyne Gate"; + icon_state = "tram"; + id = "interdynegate"; + light_color = "#22CCFF"; + req_access = list("syndicate"); + pixel_x = 7; + pixel_y = -20 + }, +/obj/effect/turf_decal/trimline/dark/filled/line{ + dir = 10 + }, +/obj/effect/turf_decal/trimline/dark/filled/mid_joiner, +/obj/effect/turf_decal/trimline/dark/filled/mid_joiner{ + dir = 8 + }, +/obj/effect/turf_decal/box/white/corners{ + dir = 8 + }, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/cargo) +"vF" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 4 + }, +/obj/structure/marker_beacon/bronze, +/turf/open/floor/wood/large, +/area/ruin/syndicate_lava_base/main) +"vI" = ( +/obj/structure/marker_beacon/burgundy, +/obj/structure/railing{ + dir = 5 + }, +/turf/open/floor/engine/hull/reinforced/lavaland, +/area/ruin/syndicate_lava_base/cargo) +"vJ" = ( +/obj/machinery/suit_storage_unit/mining, +/obj/effect/turf_decal/tile/dark/full, +/obj/effect/turf_decal/stripes/blue/corner, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/cargo) +"vQ" = ( +/obj/structure/flora/bush/fullgrass/style_random, +/obj/structure/flora/tree/jungle/small/style_random, +/obj/structure/flora/bush/flowers_pp/style_random, +/turf/open/floor/grass, +/area/ruin/syndicate_lava_base/main) +"vR" = ( +/obj/effect/turf_decal/siding/wood/corner, +/turf/open/floor/wood/large, +/area/ruin/syndicate_lava_base/main) +"vS" = ( +/obj/effect/turf_decal/trimline/dark/filled/line, +/obj/effect/turf_decal/trimline/dark/filled/corner{ + dir = 4 + }, +/turf/open/floor/iron/dark/textured, +/area/ruin/syndicate_lava_base/bar) +"vT" = ( +/obj/structure/lattice/catwalk/mining, +/obj/structure/railing{ + dir = 8 + }, +/turf/open/lava/smooth/lava_land_surface, +/area/lavaland/surface/outdoors) +"vV" = ( +/obj/effect/turf_decal/trimline/dark/filled/corner{ + dir = 4 + }, +/obj/effect/turf_decal/stripes/blue, +/obj/effect/turf_decal/stripes/blue/corner{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/dark/filled/line{ + dir = 10 + }, +/obj/effect/turf_decal/trimline/dark/filled/mid_joiner{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/dark/filled/mid_joiner, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/medbay) +"vX" = ( +/obj/effect/turf_decal/trimline/dark/filled/line{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/dark/filled/corner, +/obj/effect/turf_decal/trimline/dark/filled/corner{ + dir = 8 + }, +/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/dark/textured, +/area/ruin/syndicate_lava_base/dormitories) +"wa" = ( +/obj/effect/turf_decal/trimline/dark/filled/corner{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/dark/filled/corner{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/dark/filled/line{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/dark/filled/mid_joiner{ + dir = 4 + }, +/obj/effect/turf_decal/siding/thinplating/dark{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/main) +"wb" = ( +/obj/effect/turf_decal/trimline/dark/filled/mid_joiner, +/obj/effect/turf_decal/trimline/dark/filled/line{ + dir = 6 + }, +/obj/effect/turf_decal/trimline/dark/filled/mid_joiner{ + dir = 4 + }, +/obj/structure/closet/crate/bin{ + pixel_x = 5 + }, +/obj/effect/turf_decal/box/blue/corners, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/bar) +"wl" = ( +/obj/effect/turf_decal/trimline/dark/filled/end{ + dir = 4 + }, +/obj/structure/marker_beacon/burgundy, +/turf/open/floor/iron/dark, +/area/ruin/syndicate_lava_base/main) +"wA" = ( +/obj/machinery/turretid{ + ailock = 1; + control_area = "/area/ruin/syndicate_lava_base/main"; + dir = 1; + icon_state = "control_kill"; + lethal = 1; + name = "Base turret controls"; + pixel_y = 30; + req_access = list("syndicate") + }, +/obj/effect/turf_decal/trimline/dark/filled/end{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/dark/filled/mid_joiner{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/dark/filled/mid_joiner{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/dark/filled/mid_joiner{ + dir = 1 + }, +/obj/machinery/camera/xray/directional/north{ + color = "#adadcd"; + name = "Inderdyne security camera"; + network = list("Interdyne") + }, +/obj/machinery/syndicatebomb/self_destruct{ + anchored = 1; + name = "Interdyne self-destruct device" + }, +/obj/effect/turf_decal/stripes/red/box, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/main) +"wB" = ( +/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/ruin/syndicate_lava_base/medbay) +"wF" = ( +/obj/machinery/shower/directional/south, +/obj/structure/drain, +/obj/structure/marker_beacon/violet, +/obj/effect/turf_decal/trimline/dark/filled/line{ + dir = 9 + }, +/obj/item/soap, +/obj/structure/curtain/bounty{ + color = "#7d7d7d"; + alpha = 180 + }, +/obj/machinery/button/door/directional/west{ + id = "IDyneWC"; + normaldoorcontrol = 1; + specialfunctions = 4; + name = "Door Lock" + }, +/turf/open/floor/iron/dark/small, +/area/ruin/syndicate_lava_base/dormitories) +"wP" = ( +/obj/effect/turf_decal/trimline/dark/filled/line{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/dark/filled/corner{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/dark/filled/mid_joiner{ + dir = 1 + }, +/obj/effect/turf_decal/stripes/blue/corner, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/medbay) +"wS" = ( +/obj/structure/marker_beacon/bronze, +/obj/effect/turf_decal/trimline/dark/filled/line{ + dir = 5 + }, +/turf/open/floor/iron/dark/textured, +/area/ruin/syndicate_lava_base/bar) +"wT" = ( +/obj/effect/turf_decal/trimline/dark/filled/corner{ + dir = 4 + }, +/obj/effect/turf_decal/stripes/blue/corner{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/dark/filled/corner, +/obj/effect/turf_decal/stripes/blue/corner, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/medbay) +"wU" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 9 + }, +/turf/open/floor/carpet/red, +/area/ruin/syndicate_lava_base/bar) +"wV" = ( +/obj/structure/marker_beacon/teal, +/obj/structure/fans/tiny/forcefield, +/obj/effect/decal/cleanable/glitter/blue, +/obj/effect/turf_decal/trimline/dark/filled/line{ + dir = 4 + }, +/obj/structure/window/reinforced/survival_pod/spawner/directional/east{ + pixel_x = 4 + }, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/bar) +"wY" = ( +/obj/machinery/chem_dispenser/fullupgrade{ + name = "Interdyne chem dispenser"; + color = "#adadcd"; + light_color = "#adadcd" + }, +/obj/effect/turf_decal/tile/dark/full, +/obj/structure/marker_beacon/indigo, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/medbay) +"xa" = ( +/obj/machinery/modular_shield/module/well{ + dir = 4 + }, +/obj/structure/marker_beacon/indigo, +/obj/effect/turf_decal/box/blue/corners, +/obj/effect/turf_decal/trimline/dark/filled/line{ + dir = 6 + }, +/obj/effect/turf_decal/trimline/dark/filled/mid_joiner, +/turf/open/floor/iron/dark, +/area/ruin/syndicate_lava_base/main) +"xc" = ( +/obj/effect/turf_decal/stripes/red/corner{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/dark/filled/corner{ + 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/dark/textured_large, +/area/ruin/syndicate_lava_base/cargo) +"xe" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 1 + }, +/turf/closed/wall/r_wall/syndicate/nodiagonal, +/area/ruin/syndicate_lava_base/bar) +"xh" = ( +/obj/effect/turf_decal/trimline/dark/filled/line{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/dark/filled/line{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/dark/filled/mid_joiner{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/dark/filled/mid_joiner{ + dir = 4 + }, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/testlab) +"xr" = ( +/obj/structure/chair/comfy/black{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/dark/filled/line{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/dark/filled/mid_joiner{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/dark/filled/corner{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/dark/filled/corner{ + dir = 8 + }, +/obj/structure/marker_beacon/olive, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/medbay) +"xt" = ( +/obj/structure/table/reinforced/plastitaniumglass, +/obj/effect/turf_decal/tile/dark/full, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/testlab) +"xy" = ( +/obj/effect/turf_decal/tile/dark/full, +/turf/closed/wall/r_wall/syndicate/nodiagonal, +/area/ruin/syndicate_lava_base/medbay) +"xB" = ( +/obj/structure/railing/corner{ + dir = 4 + }, +/obj/structure/railing/corner, +/obj/structure/lattice/catwalk/mining, +/turf/open/lava/smooth/lava_land_surface, +/area/lavaland/surface/outdoors) +"xD" = ( +/obj/effect/turf_decal/trimline/dark/filled/line{ + dir = 9 + }, +/obj/effect/turf_decal/trimline/dark/filled/mid_joiner{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/dark/filled/mid_joiner{ + dir = 8 + }, +/obj/effect/turf_decal/stripes/red/line{ + dir = 6 + }, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/cargo) +"xE" = ( +/obj/effect/turf_decal/box/red/corners{ + dir = 1 + }, +/obj/effect/turf_decal/tile/dark/full, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/testlab) +"xG" = ( +/obj/effect/turf_decal/trimline/dark/filled/corner{ + dir = 8 + }, +/obj/effect/turf_decal/stripes/red/corner{ + dir = 8 + }, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/cargo) +"xH" = ( +/obj/effect/turf_decal/tile/dark_red{ + dir = 1 + }, +/obj/effect/turf_decal/box/white/corners, +/turf/open/floor/engine, +/area/ruin/syndicate_lava_base/testlab) +"xR" = ( +/obj/effect/turf_decal/trimline/dark/filled/line, +/obj/effect/turf_decal/trimline/dark/filled/corner{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/dark/filled/mid_joiner, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/testlab) +"xV" = ( +/obj/effect/turf_decal/trimline/dark/filled/corner{ + dir = 8 + }, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/medbay) +"xW" = ( +/obj/effect/turf_decal/stripes/red/corner{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/dark/filled/corner, +/obj/effect/turf_decal/trimline/dark/filled/corner{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/dark/filled/line{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/dark/filled/mid_joiner{ + dir = 1 + }, +/obj/effect/turf_decal/siding/thinplating/dark/corner{ + dir = 1 + }, +/obj/machinery/camera/xray/directional/north{ + color = "#adadcd"; + name = "Inderdyne security camera"; + network = list("Interdyne") + }, +/obj/machinery/power/apc/auto_name/directional/north, +/obj/effect/mapping_helpers/apc/syndicate_access, +/obj/structure/cable, +/obj/machinery/airalarm/directional/north{ + req_access = list("syndicate"); + pixel_y = 42 + }, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/main) +"xX" = ( +/obj/effect/turf_decal/trimline/dark/filled/corner{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/dark/filled/corner, +/obj/effect/turf_decal/trimline/dark/filled/corner{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron/dark/textured, +/area/ruin/syndicate_lava_base/dormitories) +"xZ" = ( +/obj/machinery/quantumpad{ + map_pad_id = "interdyne"; + map_pad_link_id = "ds2"; + name = "quantum pad to DS-2" + }, +/obj/structure/cable, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/cargo) +"yc" = ( +/obj/effect/turf_decal/tile/dark/full, +/obj/structure/bodycontainer/morgue{ + dir = 8 + }, +/obj/item/bodybag, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/medbay) +"yi" = ( +/obj/effect/turf_decal/trimline/dark/filled/line{ + dir = 9 + }, +/obj/effect/turf_decal/stripes/red/line{ + dir = 6 + }, +/obj/effect/turf_decal/trimline/dark/filled/mid_joiner{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/dark/filled/mid_joiner{ + dir = 8 + }, +/obj/structure/marker_beacon/burgundy, +/obj/structure/window/reinforced/survival_pod/spawner/directional/north{ + pixel_y = 4 + }, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/medbay) +"yj" = ( +/obj/effect/turf_decal/trimline/dark/filled/line{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/dark/filled/mid_joiner{ + dir = 1 + }, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/medbay) +"yt" = ( +/obj/structure/railing{ + dir = 1 + }, +/obj/structure/lattice/catwalk/mining, +/turf/open/misc/asteroid/basalt/lava_land_surface, +/area/lavaland/surface/outdoors) +"yw" = ( +/obj/structure/bookcase/random/religion, +/turf/open/floor/wood/large, +/area/ruin/syndicate_lava_base/bar) +"yA" = ( +/obj/effect/turf_decal/tile/dark/full, +/obj/structure/marker_beacon/indigo, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 1 + }, +/obj/machinery/door/window/survival_pod/left/directional/south{ + req_access = list("syndicate"); + pixel_y = -4 + }, +/obj/effect/turf_decal/stripes/red/line, +/obj/structure/rack/shelf, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/arrivals) +"yE" = ( +/obj/structure/railing{ + dir = 9 + }, +/obj/structure/railing, +/obj/structure/marker_beacon/burgundy, +/turf/open/floor/engine/hull/reinforced/lavaland, +/area/lavaland/surface/outdoors) +"yF" = ( +/obj/effect/turf_decal/trimline/dark/filled/line{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/dark/filled/mid_joiner{ + dir = 8 + }, +/obj/effect/turf_decal/stripes/blue/corner{ + dir = 4 + }, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/medbay) +"yI" = ( +/obj/machinery/chem_heater/withbuffer{ + name = "interdyne reaction chamber"; + color = "#adadcd"; + light_color = "#adadcd" + }, +/obj/effect/turf_decal/trimline/dark_red, +/obj/effect/turf_decal/tile/dark/full, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/medbay) +"yJ" = ( +/obj/effect/turf_decal/tile/dark/full, +/obj/machinery/smartfridge/food{ + color = "#adadcd"; + name = "Interdyne fridge"; + light_color = "#adadcd" + }, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/bar) +"yM" = ( +/obj/effect/turf_decal/trimline/dark/filled/line{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/dark/filled/mid_joiner{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/general/hidden, +/obj/effect/turf_decal/vg_decals/atmos/nitrogen, +/obj/structure/window/reinforced/survival_pod/spawner/directional/south{ + pixel_y = -4 + }, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/main) +"yN" = ( +/obj/effect/turf_decal/tile/dark/full, +/turf/closed/wall/r_wall/syndicate, +/area/ruin/syndicate_lava_base/arrivals) +"yO" = ( +/obj/effect/turf_decal/trimline/dark/filled/line{ + dir = 9 + }, +/obj/effect/turf_decal/trimline/dark/filled/corner, +/obj/effect/turf_decal/trimline/dark/filled/mid_joiner{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/dark/filled/mid_joiner{ + dir = 1 + }, +/obj/effect/turf_decal/stripes/red/corner, +/obj/effect/turf_decal/box/white/corners{ + dir = 1 + }, +/obj/effect/turf_decal/stripes/blue/corner{ + dir = 8 + }, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/cargo) +"yS" = ( +/obj/structure/bookcase/random, +/turf/open/floor/wood/large, +/area/ruin/syndicate_lava_base/bar) +"yT" = ( +/obj/effect/turf_decal/siding/wood/corner, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/cable, +/turf/open/floor/wood/large, +/area/ruin/syndicate_lava_base/bar) +"yU" = ( +/obj/structure/chair/sofa/bench/right{ + dir = 4 + }, +/obj/effect/turf_decal/siding/wood{ + dir = 8 + }, +/turf/open/floor/wood/large, +/area/ruin/syndicate_lava_base/main) +"yW" = ( +/obj/effect/turf_decal/tile/dark/full, +/obj/structure/shipping_container/interdyne, +/turf/open/floor/plating/elevatorshaft, +/area/ruin/syndicate_lava_base/cargo) +"zd" = ( +/obj/structure/chair/comfy/black{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/dark/filled/end{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/dark/filled/mid_joiner{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/dark/filled/mid_joiner{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/marker_beacon/bronze, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/testlab) +"zh" = ( +/obj/structure/rack, +/obj/item/rcd_ammo, +/obj/item/rcd_ammo, +/obj/item/rcd_ammo, +/obj/item/rcd_ammo, +/obj/effect/turf_decal/tile/dark/full, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/item/flatpacked_machine, +/obj/item/construction/rcd/loaded, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/cargo) +"zm" = ( +/obj/effect/turf_decal/trimline/dark/filled/corner, +/obj/effect/turf_decal/trimline/dark/filled/line{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/dark/filled/mid_joiner{ + dir = 8 + }, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/testlab) +"zn" = ( +/obj/structure/lattice/catwalk/mining, +/obj/structure/railing{ + dir = 1 + }, +/turf/open/lava/smooth/lava_land_surface, +/area/lavaland/surface/outdoors) +"zq" = ( +/obj/effect/turf_decal/siding/wood/corner{ + dir = 8 + }, +/obj/effect/turf_decal/siding/wood/corner{ + 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/wood/large, +/area/ruin/syndicate_lava_base/main) +"zr" = ( +/obj/structure/marker_beacon/burgundy, +/obj/structure/railing, +/obj/structure/railing{ + dir = 9 + }, +/turf/open/floor/engine/hull/reinforced/lavaland, +/area/lavaland/surface/outdoors) +"zv" = ( +/obj/machinery/suit_storage_unit/mining, +/obj/structure/marker_beacon/burgundy, +/obj/effect/turf_decal/tile/dark/full, +/obj/effect/turf_decal/stripes/blue{ + dir = 4 + }, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/cargo) +"zy" = ( +/obj/structure/curtain/bounty{ + color = "#7d7d7d" + }, +/obj/effect/turf_decal/trimline/dark/filled/line{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/dark/filled/mid_joiner{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/dark/filled/line, +/obj/effect/turf_decal/trimline/dark/filled/mid_joiner, +/obj/structure/extinguisher_cabinet/directional/north, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/bar) +"zQ" = ( +/obj/structure/railing/corner{ + dir = 8 + }, +/obj/structure/railing/corner{ + dir = 1 + }, +/turf/open/floor/plating/reinforced/lavaland, +/area/lavaland/surface/outdoors) +"zV" = ( +/obj/item/flashlight{ + pixel_x = -5; + pixel_y = 5 + }, +/obj/item/flashlight{ + pixel_x = -2; + pixel_y = 2 + }, +/obj/item/flashlight{ + pixel_x = 1; + pixel_y = -1 + }, +/obj/item/extinguisher{ + pixel_x = -5; + pixel_y = 5 + }, +/obj/item/extinguisher{ + pixel_x = -2; + pixel_y = 2 + }, +/obj/item/extinguisher{ + pixel_x = 1; + pixel_y = -1 + }, +/obj/structure/closet/crate/secure/gear{ + req_access = list("syndicate"); + anchored = 1 + }, +/obj/effect/turf_decal/bot_red, +/obj/effect/turf_decal/tile/dark/full, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/cargo) +"zY" = ( +/obj/effect/turf_decal/trimline/dark/filled/mid_joiner, +/obj/effect/turf_decal/box/white/corners, +/obj/effect/turf_decal/trimline/dark/filled/line, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/cargo) +"zZ" = ( +/obj/effect/turf_decal/trimline/dark/filled/corner{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/dark/filled/line{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/dark/filled/mid_joiner{ + dir = 8 + }, +/obj/effect/turf_decal/siding/thinplating/dark{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/main) +"Aj" = ( +/obj/structure/dresser{ + color = "#8d8d8d"; + name = "Dark wood Interdyne dresser"; + light_color = "#8d8d8d" + }, +/obj/effect/turf_decal/tile/dark/full, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/dormitories) +"An" = ( +/obj/effect/turf_decal/trimline/dark/filled/corner{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/dark/filled/corner{ + dir = 1 + }, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/testlab) +"Ao" = ( +/obj/structure/flora/bush/fullgrass/style_random, +/turf/open/floor/grass, +/area/ruin/syndicate_lava_base/main) +"Ap" = ( +/obj/structure/cable, +/turf/open/floor/wood/large, +/area/ruin/syndicate_lava_base/bar) +"Ar" = ( +/obj/structure/table/reinforced/plastitaniumglass, +/obj/effect/turf_decal/tile/dark/full, +/obj/item/reagent_containers/dropper{ + pixel_y = -4 + }, +/obj/item/storage/box/petridish{ + pixel_x = -5; + pixel_y = 8 + }, +/obj/item/biopsy_tool{ + pixel_x = 8; + pixel_y = 2 + }, +/obj/structure/window/reinforced/survival_pod/spawner/directional/north{ + pixel_y = 4 + }, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/medbay) +"AJ" = ( +/obj/effect/turf_decal/trimline/dark/filled/line{ + dir = 8 + }, +/obj/effect/turf_decal/stripes/blue{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/dark/filled/mid_joiner{ + dir = 8 + }, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/medbay) +"AM" = ( +/obj/effect/turf_decal/siding/wood, +/turf/open/floor/carpet/red, +/area/ruin/syndicate_lava_base/bar) +"AN" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/cable, +/turf/open/floor/wood/large, +/area/ruin/syndicate_lava_base/main) +"AQ" = ( +/obj/structure/flora/bush/fullgrass/style_random, +/obj/structure/flora/bush/jungle/c/style_random, +/obj/structure/flora/tree/jungle/style_random, +/turf/open/floor/grass, +/area/ruin/syndicate_lava_base/main) +"AT" = ( +/obj/machinery/cryopod{ + dir = 4 + }, +/obj/structure/marker_beacon/olive, +/obj/machinery/computer/cryopod/interdyne/directional/west{ + pixel_x = -18; + req_one_access = list("syndicate") + }, +/obj/effect/turf_decal/trimline/dark/filled/end{ + dir = 8 + }, +/turf/open/floor/iron/dark, +/area/ruin/syndicate_lava_base/arrivals) +"AY" = ( +/obj/structure/chair/sofa/bench/left{ + dir = 4 + }, +/obj/effect/turf_decal/siding/wood{ + dir = 9 + }, +/turf/open/floor/wood/large, +/area/ruin/syndicate_lava_base/main) +"Ba" = ( +/obj/structure/sign/poster/contraband/c20r/directional/south, +/obj/effect/turf_decal/trimline/dark/filled/line, +/obj/effect/turf_decal/trimline/dark/filled/mid_joiner, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/testlab) +"Bb" = ( +/obj/effect/turf_decal/tile/dark/full, +/obj/machinery/smartfridge/chemistry/preloaded{ + color = "#adadcd"; + name = "Interdyne smart chemical storage"; + light_color = "#adadcd"; + pixel_x = -3 + }, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/medbay) +"Bc" = ( +/obj/effect/turf_decal/trimline/dark/filled/corner{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/dark/filled/corner{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/dark/filled/corner{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/dark/filled/corner, +/obj/effect/turf_decal/arrows/blue{ + dir = 1 + }, +/obj/effect/turf_decal/arrows/blue, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/arrivals) +"Bk" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 1 + }, +/obj/structure/hedge, +/turf/open/floor/wood/large, +/area/ruin/syndicate_lava_base/bar) +"Bl" = ( +/obj/effect/turf_decal/trimline/dark/filled/line{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/dark/filled/mid_joiner{ + dir = 8 + }, +/obj/machinery/atmospherics/components/binary/pump/off{ + dir = 1 + }, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/main) +"Bm" = ( +/obj/effect/turf_decal/trimline/dark/filled/line{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/dark/filled/mid_joiner{ + dir = 8 + }, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 4 + }, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/main) +"Br" = ( +/obj/effect/turf_decal/trimline/dark/filled/corner{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/dark/filled/corner{ + dir = 1 + }, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/bar) +"Bt" = ( +/obj/structure/marker_beacon/olive, +/obj/structure/flora/bush/sparsegrass/style_random, +/obj/structure/flora/bush/jungle/c/style_random, +/turf/open/floor/grass, +/area/ruin/syndicate_lava_base/main) +"Bu" = ( +/obj/structure/marker_beacon/burgundy, +/obj/machinery/door/airlock/vault{ + id_tag = "syndie_lavaland_vault"; + name = "Interdyne Vault" + }, +/obj/effect/mapping_helpers/airlock/locked, +/obj/structure/cable, +/turf/open/floor/iron/recharge_floor, +/area/ruin/syndicate_lava_base/main) +"BE" = ( +/obj/effect/turf_decal/trimline/dark/filled/corner{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/general/hidden, +/turf/open/floor/catwalk_floor/iron_dark, +/area/ruin/syndicate_lava_base/main) +"BM" = ( +/obj/effect/turf_decal/trimline/dark/filled/corner{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/dark/filled/corner{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/dark/filled/corner{ + dir = 4 + }, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/bar) +"BO" = ( +/turf/open/misc/asteroid/basalt/lava_land_surface, +/area/lavaland/surface/outdoors) +"BX" = ( +/obj/structure/flora/bush/sparsegrass/style_random, +/obj/structure/flora/bush/flowers_pp/style_random, +/turf/open/floor/grass, +/area/ruin/syndicate_lava_base/main) +"BY" = ( +/obj/machinery/power/rtg/advanced, +/obj/structure/cable, +/obj/structure/window/reinforced/plasma/spawner/directional/south, +/obj/structure/window/reinforced/plasma/spawner/directional/north, +/obj/effect/decal/cleanable/glitter/pink, +/obj/effect/decal/cleanable/glitter/blue, +/obj/effect/decal/cleanable/greenglow, +/turf/open/floor/plating/reinforced, +/area/ruin/syndicate_lava_base/main) +"BZ" = ( +/obj/structure/lattice/catwalk/mining, +/turf/open/misc/asteroid/basalt/lava_land_surface, +/area/lavaland/surface/outdoors) +"Cb" = ( +/obj/effect/turf_decal/trimline/dark/filled/line, +/obj/effect/turf_decal/trimline/dark/filled/mid_joiner, +/obj/effect/turf_decal/stripes/blue, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/cargo) +"Cc" = ( +/obj/effect/turf_decal/siding/wood/corner{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/cable, +/turf/open/floor/wood/large, +/area/ruin/syndicate_lava_base/bar) +"Ci" = ( +/obj/effect/turf_decal/trimline/dark/filled/line{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/dark/filled/line, +/obj/effect/turf_decal/stripes/blue, +/obj/effect/turf_decal/stripes/blue{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/dark/filled/mid_joiner{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/dark/filled/mid_joiner, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/medbay) +"Cl" = ( +/obj/effect/turf_decal/stripes/red/corner{ + dir = 8 + }, +/obj/structure/drain, +/obj/machinery/shower/directional/west, +/obj/effect/turf_decal/trimline/dark/filled/line{ + dir = 6 + }, +/obj/effect/turf_decal/trimline/dark/filled/mid_joiner, +/obj/effect/turf_decal/trimline/dark/filled/mid_joiner{ + dir = 4 + }, +/obj/effect/turf_decal/box/white/corners, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/cargo) +"Cn" = ( +/obj/structure/rack/shelf, +/obj/effect/turf_decal/tile/dark/full, +/obj/item/storage/toolbox/syndicate, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/cargo) +"Co" = ( +/turf/closed/mineral/random/volcanic, +/area/lavaland/surface/outdoors) +"Cq" = ( +/obj/item/stack/sheet/plasteel/fifty, +/obj/item/stack/sheet/glass/fifty, +/obj/item/stack/sheet/iron/fifty, +/obj/effect/turf_decal/bot_red, +/obj/effect/turf_decal/tile/dark/full, +/obj/structure/closet/crate/secure/gear{ + req_access = list("syndicate"); + anchored = 1 + }, +/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/dark/textured_large, +/area/ruin/syndicate_lava_base/cargo) +"Cu" = ( +/obj/effect/turf_decal/trimline/dark/filled/line{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/dark/filled/mid_joiner{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/dark/filled/line{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/dark/filled/mid_joiner{ + dir = 8 + }, +/obj/effect/turf_decal/stripes/red/line{ + dir = 8 + }, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 8 + }, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/cargo) +"Cw" = ( +/obj/structure/table/reinforced/plastitaniumglass, +/obj/structure/reagent_dispensers/wall/virusfood/directional/west, +/obj/item/storage/box/beakers{ + pixel_x = 2; + pixel_y = 2 + }, +/obj/item/storage/box/syringes, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/effect/turf_decal/tile/dark/full, +/obj/structure/marker_beacon/purple, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/medbay) +"CH" = ( +/turf/template_noop, +/area/template_noop) +"CM" = ( +/obj/structure/flora/rock/style_random, +/turf/open/misc/asteroid/basalt/lava_land_surface, +/area/lavaland/surface/outdoors) +"CR" = ( +/obj/effect/turf_decal/box/red/corners{ + dir = 8 + }, +/obj/effect/turf_decal/tile/dark/full, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/testlab) +"CS" = ( +/obj/structure/rack/shelf, +/obj/effect/turf_decal/tile/dark/full, +/obj/item/shovel, +/obj/item/pickaxe, +/obj/item/t_scanner/adv_mining_scanner/lesser, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/cargo) +"CT" = ( +/obj/effect/turf_decal/trimline/dark/filled/line{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/dark/filled/line{ + dir = 4 + }, +/obj/machinery/door/airlock{ + name = "Cabin 2"; + id_tag = "Dynbin2" + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron/dark/textured, +/area/ruin/syndicate_lava_base/dormitories) +"Dk" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 1 + }, +/obj/effect/turf_decal/tile/dark/full, +/obj/structure/bed/double{ + name = "Softest Interdyne bed"; + light_color = "#4d4d4d"; + color = "#5d5d5d" + }, +/obj/item/bedsheet/cosmos/double, +/turf/open/floor/iron/dark/textured, +/area/ruin/syndicate_lava_base/dormitories) +"Ds" = ( +/turf/open/floor/wood/large, +/area/ruin/syndicate_lava_base/bar) +"Dt" = ( +/obj/effect/turf_decal/box/red/corners, +/obj/effect/turf_decal/tile/dark/full, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/testlab) +"Du" = ( +/turf/closed/wall/r_wall/syndicate, +/area/ruin/syndicate_lava_base/arrivals) +"DD" = ( +/obj/machinery/camera/xray{ + c_tag = "Xenobio East"; + dir = 4; + network = list("fsci") + }, +/obj/effect/turf_decal/tile/dark_red{ + dir = 8 + }, +/obj/machinery/atmospherics/components/unary/passive_vent{ + dir = 1 + }, +/obj/effect/turf_decal/stripes/red/line{ + dir = 1 + }, +/obj/effect/turf_decal/box/white/corners{ + dir = 4 + }, +/turf/open/floor/engine, +/area/ruin/syndicate_lava_base/testlab) +"DJ" = ( +/obj/structure/marker_beacon/teal, +/obj/structure/fans/tiny/forcefield, +/obj/effect/decal/cleanable/glitter/blue, +/obj/effect/turf_decal/trimline/dark/filled/line{ + dir = 8 + }, +/obj/structure/window/reinforced/survival_pod/spawner/directional/west{ + pixel_x = -4 + }, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/bar) +"DK" = ( +/obj/structure/rack/shelf, +/obj/effect/turf_decal/tile/dark/full, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/testlab) +"DM" = ( +/obj/structure/marker_beacon/teal, +/obj/structure/fans/tiny/forcefield, +/obj/effect/decal/cleanable/glitter/blue, +/obj/effect/turf_decal/arrows/blue, +/obj/effect/turf_decal/arrows/blue{ + dir = 1 + }, +/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/dark/textured_large, +/area/ruin/syndicate_lava_base/medbay) +"DP" = ( +/obj/effect/turf_decal/stripes/red/line, +/obj/effect/turf_decal/stripes/red/line{ + dir = 1 + }, +/obj/machinery/door/poddoor{ + id = "interdynegate"; + name = "Inderdyne Gate" + }, +/turf/open/floor/plating/elevatorshaft, +/area/ruin/syndicate_lava_base/cargo) +"DS" = ( +/obj/item/clothing/glasses/night, +/obj/item/clothing/glasses/night, +/obj/item/clothing/glasses/night, +/obj/item/storage/belt/military, +/obj/item/storage/belt/military, +/obj/item/clothing/mask/gas/syndicate, +/obj/item/clothing/mask/gas/syndicate, +/obj/item/clothing/shoes/combat, +/obj/item/clothing/shoes/combat, +/obj/item/clothing/under/syndicate/combat, +/obj/item/clothing/under/syndicate/combat, +/obj/item/clothing/gloves/combat, +/obj/item/clothing/gloves/combat, +/obj/item/card/id/advanced/chameleon, +/obj/item/card/id/advanced/chameleon, +/obj/item/card/id/advanced/chameleon, +/obj/item/radio/headset/interdyne, +/obj/item/radio/headset/interdyne, +/obj/item/radio/headset/interdyne, +/obj/structure/closet/crate/secure/gear{ + req_access = list("syndicate"); + anchored = 1 + }, +/obj/effect/turf_decal/bot_red, +/obj/structure/marker_beacon/bronze, +/obj/effect/turf_decal/tile/dark/full, +/obj/structure/cable, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/cargo) +"DT" = ( +/obj/effect/spawner/structure/window/reinforced/plasma/plastitanium, +/obj/machinery/door/poddoor{ + id = "interdynernd"; + name = "Interdyne Storm Shutters RnD" + }, +/turf/open/floor/plating/reinforced, +/area/ruin/syndicate_lava_base/testlab) +"DU" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 9 + }, +/obj/structure/hedge, +/turf/open/floor/wood/large, +/area/ruin/syndicate_lava_base/main) +"DW" = ( +/obj/effect/turf_decal/trimline/dark/filled/corner{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/medbay) +"DY" = ( +/obj/effect/turf_decal/caution/red, +/obj/effect/turf_decal/stripes/red/line{ + dir = 1 + }, +/obj/effect/decal/remains/human, +/obj/structure/railing/corner{ + dir = 8 + }, +/obj/structure/railing/corner{ + dir = 1 + }, +/turf/open/floor/plating/reinforced/lavaland, +/area/lavaland/surface/outdoors) +"Eb" = ( +/obj/structure/table/reinforced/plastitaniumglass, +/obj/item/storage/box/beakers/bluespace, +/obj/item/storage/box/beakers/bluespace, +/obj/effect/turf_decal/tile/dark/full, +/obj/structure/marker_beacon/purple, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 4 + }, +/obj/machinery/button/door/directional/west{ + base_icon_state = "tram"; + icon_state = "tram"; + req_access = list("syndicate"); + id = "interdynelabs"; + name = "Interdyne Storm Shutters Labs" + }, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/medbay) +"Ec" = ( +/obj/effect/turf_decal/stripes/red/corner{ + dir = 1 + }, +/obj/machinery/mining_weather_monitor/directional/north{ + name = "Interdyne Weather Radar"; + color = "#adadcd"; + light_color = "#adadcd" + }, +/obj/effect/turf_decal/trimline/dark/filled/line{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/dark/filled/mid_joiner{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/dark/filled/corner, +/obj/effect/turf_decal/stripes/red/corner, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/cargo) +"Ef" = ( +/obj/structure/tank_dispenser, +/obj/effect/turf_decal/tile/dark/full, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/cargo) +"Eh" = ( +/obj/effect/turf_decal/stripes/red/line{ + dir = 1 + }, +/obj/effect/turf_decal/caution/stand_clear/red, +/obj/structure/cable, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/cargo) +"El" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 4 + }, +/turf/open/floor/wood/large, +/area/ruin/syndicate_lava_base/main) +"Et" = ( +/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/siding/wood{ + dir = 8 + }, +/turf/open/floor/wood/large, +/area/ruin/syndicate_lava_base/main) +"EA" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 5 + }, +/turf/open/floor/carpet/red, +/area/ruin/syndicate_lava_base/bar) +"EE" = ( +/obj/structure/railing{ + dir = 4 + }, +/obj/structure/lattice/catwalk/mining, +/turf/open/lava/smooth/lava_land_surface, +/area/lavaland/surface/outdoors) +"EH" = ( +/obj/machinery/autolathe/hacked{ + color = "#adadcd"; + name = "Interdyne autolathe"; + light_color = "#adadcd" + }, +/obj/effect/turf_decal/tile/dark/full, +/obj/structure/marker_beacon/indigo, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/testlab) +"EI" = ( +/obj/machinery/modular_shield/module/charger{ + dir = 8 + }, +/obj/structure/marker_beacon/purple, +/obj/effect/turf_decal/trimline/dark/filled/mid_joiner{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/dark/filled/end{ + dir = 8 + }, +/obj/effect/turf_decal/box/blue/corners{ + dir = 1 + }, +/obj/effect/turf_decal/box/blue/corners{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/dark/filled/mid_joiner, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/main) +"EQ" = ( +/obj/effect/turf_decal/trimline/dark/filled/corner, +/obj/effect/turf_decal/stripes/blue/corner, +/obj/effect/turf_decal/trimline/dark/filled/line{ + dir = 9 + }, +/obj/effect/turf_decal/trimline/dark/filled/mid_joiner{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/dark/filled/mid_joiner{ + dir = 8 + }, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/medbay) +"ER" = ( +/obj/effect/turf_decal/siding/wood/corner{ + dir = 1 + }, +/obj/structure/flora/tree/jungle/small/style_random, +/obj/structure/flora/bush/sparsegrass/style_random, +/obj/structure/marker_beacon/teal, +/obj/structure/flora/bush/flowers_br/style_random, +/turf/open/floor/grass, +/area/ruin/syndicate_lava_base/main) +"EV" = ( +/obj/effect/turf_decal/trimline/dark/filled/corner{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/dark/filled/corner{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/dark/filled/line{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/dark/filled/mid_joiner{ + dir = 4 + }, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/testlab) +"Fb" = ( +/obj/effect/turf_decal/tile/dark/full, +/obj/machinery/camera/xray/directional/north{ + color = "#adadcd"; + name = "Inderdyne security camera"; + network = list("Interdyne"); + pixel_x = 10 + }, +/obj/machinery/power/apc/auto_name/directional/north, +/obj/effect/mapping_helpers/apc/syndicate_access, +/obj/structure/cable, +/obj/structure/marker_beacon/indigo, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, +/obj/machinery/airalarm/directional/north{ + req_access = list("syndicate"); + pixel_y = 42 + }, +/obj/machinery/door/window/survival_pod/left/directional/north{ + pixel_y = 4 + }, +/obj/effect/turf_decal/stripes/red/line{ + dir = 1 + }, +/obj/structure/closet/secure_closet{ + icon_state = "qm"; + name = "deck offficer's locker"; + req_access = list("syndicate_leader") + }, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/arrivals) +"Fc" = ( +/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/corner{ + dir = 1 + }, +/turf/open/floor/wood/large, +/area/ruin/syndicate_lava_base/main) +"Fd" = ( +/obj/effect/turf_decal/siding/dark/corner{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/dark/filled/line{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/dark/filled/line{ + dir = 8 + }, +/turf/open/floor/iron/dark/textured, +/area/ruin/syndicate_lava_base/bar) +"Ff" = ( +/obj/effect/turf_decal/tile/dark/full, +/obj/structure/marker_beacon/burgundy, +/obj/structure/table/reinforced/plastitaniumglass, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/bar) +"Fj" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 1 + }, +/obj/effect/turf_decal/tile/dark/full, +/obj/structure/bed/double{ + name = "Softest Interdyne bed"; + light_color = "#4d4d4d"; + color = "#5d5d5d" + }, +/obj/item/bedsheet/cosmos/double, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/dormitories) +"Fk" = ( +/obj/effect/turf_decal/tile/dark/full, +/obj/structure/closet/secure_closet/ds2atmos{ + anchorable = 0; + anchored = 1 + }, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/main) +"Fn" = ( +/obj/effect/turf_decal/siding/dark{ + dir = 1 + }, +/obj/effect/turf_decal/siding/dark, +/obj/effect/turf_decal/trimline/dark/filled/line, +/obj/effect/turf_decal/trimline/dark/filled/line{ + dir = 1 + }, +/turf/open/floor/iron/dark/textured, +/area/ruin/syndicate_lava_base/bar) +"Fq" = ( +/obj/structure/flora/bush/fullgrass/style_random, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 8 + }, +/turf/open/floor/grass, +/area/ruin/syndicate_lava_base/main) +"FG" = ( +/obj/effect/turf_decal/tile/dark/full, +/obj/item/choice_beacon/music, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 1 + }, +/obj/structure/table/wood/fancy/black, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/bar) +"FO" = ( +/obj/effect/turf_decal/stripes/red/line{ + dir = 1 + }, +/obj/effect/turf_decal/caution/red, +/obj/effect/turf_decal/trimline/dark/filled/corner{ + dir = 4 + }, +/obj/structure/marker_beacon/burgundy, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/cargo) +"FQ" = ( +/obj/machinery/suit_storage_unit/mining, +/obj/effect/turf_decal/tile/dark/full, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/cargo) +"FS" = ( +/obj/effect/turf_decal/trimline/dark/filled/corner{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/dark/filled/line{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/dark/filled/mid_joiner{ + dir = 4 + }, +/obj/effect/turf_decal/siding/thinplating/dark{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/main) +"FZ" = ( +/obj/machinery/bookbinder, +/turf/closed/wall/r_wall/syndicate/nodiagonal, +/area/ruin/syndicate_lava_base/bar) +"Gc" = ( +/obj/structure/frame/machine{ + anchored = 1; + state = 2; + icon_state = "box_1" + }, +/obj/item/circuitboard/machine/ore_silo, +/obj/structure/marker_beacon/burgundy, +/obj/structure/sign/flag/syndicate/directional/north, +/obj/effect/turf_decal/tile/dark/full, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/main) +"Gf" = ( +/obj/machinery/vending/hydronutrients{ + onstation = 0 + }, +/obj/effect/turf_decal/tile/dark/full, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/bar) +"Gj" = ( +/obj/machinery/light/directional/west{ + bulb_colour = "#2C3BFF"; + color = "#0012FF"; + light_color = "#0012FF" + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/cable, +/turf/open/floor/wood/large, +/area/ruin/syndicate_lava_base/main) +"Gr" = ( +/obj/structure/marker_beacon/purple, +/obj/effect/turf_decal/trimline/dark/filled/line{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/dark/filled/line{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/dark/filled/mid_joiner{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/dark/filled/mid_joiner{ + dir = 8 + }, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/testlab) +"Gt" = ( +/obj/effect/turf_decal/trimline/dark/filled/line{ + dir = 5 + }, +/obj/effect/turf_decal/trimline/dark/filled/mid_joiner{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/dark/filled/mid_joiner{ + dir = 1 + }, +/obj/effect/turf_decal/siding/thinplating/dark{ + dir = 5 + }, +/obj/structure/cable, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/main) +"Gw" = ( +/obj/machinery/door/window/survival_pod/left/directional/south{ + req_access = list("syndicate"); + name = "Slime Euthanization Chamber" + }, +/turf/open/floor/circuit/telecomms, +/area/ruin/syndicate_lava_base/testlab) +"GB" = ( +/obj/machinery/chem_mass_spec, +/obj/effect/turf_decal/tile/dark/full, +/obj/structure/table/reinforced/plastitaniumglass, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/medbay) +"GE" = ( +/obj/effect/turf_decal/trimline/dark/filled/line{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/dark/filled/line{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/dark/filled/mid_joiner{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/dark/filled/mid_joiner{ + dir = 4 + }, +/obj/effect/turf_decal/stripes/red/line{ + dir = 4 + }, +/obj/effect/turf_decal/stripes/blue/corner{ + dir = 1 + }, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/cargo) +"GF" = ( +/obj/effect/turf_decal/siding/dark{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/dark/filled/end{ + dir = 1 + }, +/obj/structure/sink/directional/south, +/obj/structure/drain, +/turf/open/floor/iron/dark/textured, +/area/ruin/syndicate_lava_base/bar) +"GG" = ( +/obj/effect/turf_decal/trimline/dark/filled/line{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/dark/filled/mid_joiner{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/medbay) +"GK" = ( +/obj/structure/fans/tiny, +/obj/machinery/door/window/survival_pod/left/directional/south{ + req_access = list("syndicate") + }, +/obj/machinery/shower/directional/west, +/obj/structure/drain/big, +/obj/effect/turf_decal/trimline/dark/filled/end, +/obj/effect/turf_decal/trimline/dark/filled/mid_joiner{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/dark/filled/mid_joiner{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/medbay) +"GR" = ( +/obj/effect/turf_decal/trimline/dark/filled/line{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/dark/filled/mid_joiner{ + dir = 1 + }, +/obj/machinery/camera/xray/directional/north{ + color = "#adadcd"; + name = "Inderdyne security camera"; + network = list("Interdyne"); + pixel_x = 10 + }, +/obj/machinery/power/apc/auto_name/directional/north, +/obj/effect/mapping_helpers/apc/syndicate_access, +/obj/machinery/airalarm/directional/north{ + req_access = list("syndicate"); + pixel_y = 42 + }, +/obj/structure/cable, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/medbay) +"GT" = ( +/obj/structure/chair/sofa/bench/right{ + dir = 8 + }, +/obj/effect/turf_decal/siding/wood{ + dir = 4 + }, +/turf/open/floor/wood/large, +/area/ruin/syndicate_lava_base/main) +"GX" = ( +/obj/structure/table/reinforced/plastitaniumglass, +/obj/structure/microscope, +/obj/effect/turf_decal/tile/dark/full, +/obj/structure/window/reinforced/survival_pod/spawner/directional/north{ + pixel_y = 4 + }, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/medbay) +"Hd" = ( +/obj/structure/marker_beacon/burgundy, +/obj/effect/turf_decal/trimline/dark/filled/line{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/dark/filled/mid_joiner{ + dir = 4 + }, +/obj/effect/turf_decal/stripes/red/line{ + dir = 4 + }, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/cargo) +"He" = ( +/obj/structure/cable, +/obj/machinery/power/rtg/advanced, +/obj/structure/window/reinforced/plasma/spawner/directional/south, +/obj/structure/window/reinforced/plasma/spawner/directional/east, +/obj/structure/window/reinforced/plasma/spawner/directional/north, +/obj/effect/decal/cleanable/glitter/pink, +/obj/effect/decal/cleanable/glitter/blue, +/obj/effect/decal/cleanable/greenglow, +/turf/open/floor/plating/reinforced, +/area/ruin/syndicate_lava_base/main) +"Hf" = ( +/obj/effect/turf_decal/trimline/dark/filled/line{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/dark/filled/line{ + dir = 4 + }, +/obj/machinery/door/airlock{ + name = "Cabin 1"; + id_tag = "Dynbin1" + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron/dark/textured, +/area/ruin/syndicate_lava_base/dormitories) +"Hh" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on{ + external_pressure_bound = 140; + name = "server vent"; + pressure_checks = 0; + dir = 8 + }, +/obj/structure/grille, +/turf/open/floor/circuit/telecomms, +/area/ruin/syndicate_lava_base/testlab) +"Hj" = ( +/obj/effect/turf_decal/stripes/red/line{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/dark/filled/corner, +/obj/structure/closet/crate/freezer/sansufentanyl, +/obj/structure/marker_beacon/burgundy, +/obj/effect/turf_decal/trimline/dark/filled/end{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/dark/filled/mid_joiner{ + dir = 1 + }, +/obj/machinery/door/window/survival_pod/left/directional/west{ + req_access = list("syndicate"); + pixel_x = -4 + }, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/medbay) +"Hk" = ( +/obj/effect/turf_decal/trimline/dark/filled/line{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/dark/filled/mid_joiner{ + dir = 4 + }, +/obj/effect/turf_decal/stripes/red/line{ + dir = 4 + }, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/cargo) +"Hn" = ( +/obj/effect/turf_decal/trimline/dark/filled/line{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/dark/filled/mid_joiner{ + dir = 4 + }, +/obj/effect/turf_decal/stripes/blue/corner{ + dir = 1 + }, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/medbay) +"Ho" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/fans/tiny/forcefield, +/obj/effect/decal/cleanable/glitter/blue, +/obj/structure/marker_beacon/teal, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/arrivals) +"Hs" = ( +/obj/effect/turf_decal/tile/dark/full, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/testlab) +"HD" = ( +/obj/structure/table/reinforced/plastitaniumglass, +/obj/machinery/reagentgrinder{ + pixel_y = 5; + pixel_x = -8 + }, +/obj/item/stack/sheet/mineral/plasma{ + amount = 5 + }, +/obj/structure/window/reinforced/survival_pod/spawner/directional/south, +/obj/effect/turf_decal/tile/dark/full, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/testlab) +"HF" = ( +/obj/effect/turf_decal/trimline/dark/filled/line{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/dark/filled/line{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/dark/filled/mid_joiner{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/dark/filled/mid_joiner{ + dir = 4 + }, +/obj/effect/turf_decal/stripes/red/line{ + dir = 4 + }, +/obj/effect/turf_decal/stripes/blue{ + dir = 8 + }, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/cargo) +"HH" = ( +/obj/machinery/washing_machine{ + name = "Interdyne washing machine"; + color = "#adadcd"; + pixel_y = 5; + light_color = "#adadcd" + }, +/obj/effect/turf_decal/tile/dark/full, +/obj/structure/bedsheetbin{ + color = "#adadcd"; + pixel_y = 14; + pixel_x = -1 + }, +/obj/machinery/camera/xray/directional/north{ + color = "#adadcd"; + name = "Inderdyne security camera"; + network = list("Interdyne") + }, +/obj/machinery/airalarm/directional/north{ + req_access = list("syndicate"); + pixel_y = 42 + }, +/obj/machinery/power/apc/auto_name/directional/north, +/obj/effect/mapping_helpers/apc/syndicate_access, +/obj/structure/cable, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/dormitories) +"HM" = ( +/obj/structure/flora/bush/fullgrass/style_random, +/obj/structure/flora/tree/jungle/small/style_random, +/turf/open/floor/grass, +/area/ruin/syndicate_lava_base/main) +"HP" = ( +/obj/structure/disposalpipe/trunk, +/obj/structure/drain, +/obj/structure/marker_beacon/purple, +/obj/structure/disposaloutlet{ + dir = 1 + }, +/obj/structure/window/reinforced/survival_pod/spawner/directional/east, +/obj/structure/window/reinforced/survival_pod/spawner/directional/west, +/turf/open/floor/plating/reinforced, +/area/ruin/syndicate_lava_base/medbay) +"HQ" = ( +/obj/structure/lattice/catwalk/mining, +/obj/structure/railing{ + dir = 8 + }, +/turf/open/misc/asteroid/basalt/lava_land_surface, +/area/lavaland/surface/outdoors) +"Ia" = ( +/obj/structure/disposalpipe/segment{ + dir = 5 + }, +/turf/closed/wall/r_wall/syndicate/nodiagonal, +/area/ruin/syndicate_lava_base/medbay) +"If" = ( +/obj/effect/turf_decal/trimline/dark/filled/end, +/obj/effect/turf_decal/box/red/corners{ + dir = 4 + }, +/obj/effect/turf_decal/box/red/corners{ + dir = 1 + }, +/obj/effect/turf_decal/stripes/red/line, +/obj/structure/window/reinforced/survival_pod/spawner/directional/south{ + pixel_y = -4 + }, +/obj/effect/mob_spawn/ghost_role/human/interdyne_planetary_base{ + dir = 1 + }, +/turf/open/floor/iron/dark/textured, +/area/ruin/syndicate_lava_base/arrivals) +"Ii" = ( +/obj/effect/spawner/structure/window/reinforced/plasma/plastitanium, +/obj/structure/cable, +/turf/open/floor/plating/reinforced, +/area/ruin/syndicate_lava_base/main) +"In" = ( +/obj/machinery/power/shuttle_engine/propulsion{ + dir = 4; + pixel_x = 8 + }, +/obj/effect/spawner/structure/window/reinforced/plasma/plastitanium, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/arrivals) +"It" = ( +/obj/structure/flora/bush/fullgrass/style_random, +/obj/structure/flora/bush/jungle/b/style_random, +/turf/open/floor/grass, +/area/ruin/syndicate_lava_base/main) +"Iw" = ( +/obj/structure/railing/corner{ + dir = 4 + }, +/turf/open/floor/plating/reinforced/lavaland, +/area/ruin/syndicate_lava_base/cargo) +"IB" = ( +/obj/effect/turf_decal/tile/dark_red{ + dir = 4 + }, +/obj/machinery/light/directional/south{ + light_color = "#5148A6" + }, +/obj/structure/window/reinforced/survival_pod/spawner/directional/west{ + pixel_x = -4 + }, +/turf/open/floor/engine, +/area/ruin/syndicate_lava_base/testlab) +"ID" = ( +/turf/open/floor/plating/reinforced/lavaland, +/area/ruin/syndicate_lava_base/cargo) +"II" = ( +/obj/structure/table/reinforced/plastitaniumglass, +/obj/item/knife/kitchen, +/obj/item/storage/box/syringes{ + pixel_x = -4; + pixel_y = 4 + }, +/obj/item/storage/box/beakers/bluespace, +/obj/effect/turf_decal/tile/dark/full, +/obj/machinery/light/directional/south{ + light_color = "#5148A6" + }, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/medbay) +"IL" = ( +/obj/structure/window/reinforced/survival_pod/spawner/directional/west, +/obj/structure/grille, +/obj/machinery/atmospherics/pipe/smart/manifold4w/general/hidden, +/turf/open/floor/circuit/telecomms, +/area/ruin/syndicate_lava_base/testlab) +"IN" = ( +/obj/structure/drain, +/obj/structure/window/reinforced/survival_pod/spawner/directional/east, +/obj/structure/window/reinforced/survival_pod/spawner/directional/west, +/obj/structure/window/reinforced/survival_pod/spawner/directional/north, +/turf/open/floor/plating/reinforced, +/area/lavaland/surface/outdoors) +"IP" = ( +/obj/effect/turf_decal/trimline/dark/filled/line{ + dir = 9 + }, +/obj/effect/turf_decal/trimline/dark/filled/mid_joiner{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/dark/filled/mid_joiner{ + dir = 1 + }, +/obj/effect/turf_decal/siding/thinplating/dark{ + dir = 9 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/main) +"IR" = ( +/turf/open/floor/engine, +/area/ruin/syndicate_lava_base/testlab) +"Jb" = ( +/obj/effect/turf_decal/trimline/dark/filled/line{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/dark/filled/mid_joiner{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/dark/filled/line{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/dark/filled/mid_joiner{ + dir = 8 + }, +/obj/effect/turf_decal/stripes/red/line{ + dir = 8 + }, +/obj/structure/extinguisher_cabinet/directional/east, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 8 + }, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/cargo) +"Jh" = ( +/obj/item/serviette_pack, +/turf/open/misc/asteroid/basalt/lava_land_surface, +/area/lavaland/surface/outdoors) +"Jm" = ( +/obj/effect/turf_decal/trimline/dark/filled/line{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/dark/filled/line, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron/dark/textured, +/area/ruin/syndicate_lava_base/arrivals) +"Jn" = ( +/obj/effect/turf_decal/trimline/dark/filled/corner{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/dark/filled/line{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/dark/filled/mid_joiner{ + dir = 1 + }, +/obj/effect/turf_decal/siding/thinplating/dark{ + dir = 1 + }, +/obj/structure/cable, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/main) +"Jq" = ( +/obj/structure/flora/bush/sparsegrass/style_random, +/obj/structure/flora/bush/flowers_yw/style_random, +/obj/structure/marker_beacon/bronze, +/turf/open/floor/grass, +/area/ruin/syndicate_lava_base/main) +"Jt" = ( +/obj/structure/flora/ash/cap_shroom, +/turf/open/misc/asteroid/basalt/lava_land_surface, +/area/lavaland/surface/outdoors) +"Jz" = ( +/obj/effect/turf_decal/siding/wood/corner{ + dir = 4 + }, +/obj/structure/chair/sofa/corp/right, +/turf/open/floor/wood/large, +/area/ruin/syndicate_lava_base/bar) +"JB" = ( +/obj/effect/turf_decal/stripes/red/corner{ + dir = 1 + }, +/obj/machinery/button/door{ + id = "syndie_lavaland_vault"; + name = "Vault Bolt Control"; + normaldoorcontrol = 1; + pixel_x = -8; + pixel_y = 24; + req_access = list("syndicate"); + specialfunctions = 4 + }, +/obj/effect/turf_decal/trimline/dark/filled/corner, +/obj/effect/turf_decal/trimline/dark/filled/corner{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/dark/filled/line{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/dark/filled/mid_joiner{ + dir = 1 + }, +/obj/effect/turf_decal/siding/thinplating/dark/corner{ + dir = 4 + }, +/obj/structure/cable, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/main) +"JJ" = ( +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/bar) +"JK" = ( +/obj/effect/turf_decal/siding/dark{ + dir = 4 + }, +/obj/effect/turf_decal/siding/dark{ + dir = 8 + }, +/obj/item/gun/energy/floragun, +/obj/item/geneshears, +/obj/item/secateurs, +/obj/item/shovel/spade, +/obj/item/hatchet, +/obj/item/cultivator, +/obj/item/plant_analyzer, +/obj/structure/rack/shelf, +/obj/effect/turf_decal/tile/dark/full, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/bar) +"JL" = ( +/obj/structure/window/reinforced/survival_pod/spawner/directional/south, +/obj/machinery/monkey_recycler{ + name = "Interdyne monkey recycler"; + color = "#adadcd" + }, +/obj/effect/turf_decal/tile/dark/full, +/obj/structure/marker_beacon/burgundy, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/testlab) +"JM" = ( +/obj/effect/turf_decal/tile/dark/full, +/obj/item/disk/ammo_workbench/advanced, +/obj/machinery/module_duplicator{ + name = "Interdyne module duplicator"; + color = "#adadcd"; + light_color = "#adadcd" + }, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/testlab) +"JS" = ( +/obj/effect/turf_decal/trimline/dark/filled/corner{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/dark/filled/corner{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/dark/filled/corner{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/dark/filled/corner, +/obj/effect/turf_decal/arrows/blue{ + dir = 1 + }, +/obj/effect/turf_decal/arrows/blue, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/arrivals) +"JU" = ( +/obj/effect/turf_decal/trimline/dark/filled/corner, +/obj/effect/turf_decal/trimline/dark/filled/line{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/dark/filled/mid_joiner{ + dir = 8 + }, +/obj/effect/turf_decal/siding/thinplating/dark{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/main) +"JV" = ( +/turf/closed/wall/r_wall/syndicate/nodiagonal, +/area/ruin/syndicate_lava_base/testlab) +"JW" = ( +/obj/effect/turf_decal/trimline/dark/filled/line{ + dir = 4 + }, +/obj/effect/turf_decal/stripes/blue{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/dark/filled/line{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/dark/filled/mid_joiner{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/dark/filled/mid_joiner{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/medbay) +"Kd" = ( +/obj/structure/table/reinforced/plastitaniumglass, +/obj/machinery/cell_charger_multi{ + name = "Interdyne multi-cell charger"; + color = "#adadcd"; + pixel_y = 7; + light_color = "#adadcd" + }, +/obj/item/stock_parts/cell/bluespace, +/obj/item/stock_parts/cell/bluespace, +/obj/item/stock_parts/cell/bluespace, +/obj/item/stock_parts/cell/bluespace, +/obj/effect/turf_decal/tile/dark/full, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/testlab) +"Kh" = ( +/obj/effect/turf_decal/stripes/red/line{ + dir = 1 + }, +/obj/effect/decal/cleanable/blood/old, +/turf/open/floor/plating/reinforced/lavaland, +/area/lavaland/surface/outdoors) +"Kt" = ( +/obj/effect/turf_decal/trimline/dark/filled/line, +/obj/effect/turf_decal/trimline/dark/filled/mid_joiner, +/obj/structure/marker_beacon/purple, +/obj/effect/turf_decal/trimline/dark/filled/corner{ + dir = 4 + }, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/bar) +"Kv" = ( +/obj/effect/turf_decal/tile/dark_red, +/obj/effect/turf_decal/stripes/red/line{ + dir = 1 + }, +/obj/structure/window/reinforced/survival_pod/spawner/directional/west{ + pixel_x = -4 + }, +/turf/open/floor/engine, +/area/ruin/syndicate_lava_base/testlab) +"Kw" = ( +/obj/item/stock_parts/micro_laser/quadultra, +/obj/item/stock_parts/micro_laser/quadultra, +/obj/item/stock_parts/micro_laser/quadultra, +/obj/item/stock_parts/micro_laser/quadultra, +/obj/item/stock_parts/micro_laser/quadultra, +/obj/item/stock_parts/micro_laser/quadultra, +/obj/item/stock_parts/micro_laser/quadultra, +/obj/item/stock_parts/micro_laser/quadultra, +/obj/item/stock_parts/micro_laser/quadultra, +/obj/item/stock_parts/micro_laser/quadultra, +/obj/item/stock_parts/micro_laser/quadultra, +/obj/item/stock_parts/micro_laser/quadultra, +/obj/item/stock_parts/micro_laser/quadultra, +/obj/item/stock_parts/micro_laser/quadultra, +/obj/item/stock_parts/micro_laser/quadultra, +/obj/item/stock_parts/capacitor/quadratic, +/obj/item/stock_parts/capacitor/quadratic, +/obj/item/stock_parts/capacitor/quadratic, +/obj/item/stock_parts/capacitor/quadratic, +/obj/item/stock_parts/capacitor/quadratic, +/obj/item/stock_parts/capacitor/quadratic, +/obj/item/stock_parts/capacitor/quadratic, +/obj/item/stock_parts/capacitor/quadratic, +/obj/item/stock_parts/capacitor/quadratic, +/obj/item/stock_parts/capacitor/quadratic, +/obj/item/stock_parts/capacitor/quadratic, +/obj/item/stock_parts/capacitor/quadratic, +/obj/item/stock_parts/capacitor/quadratic, +/obj/item/stock_parts/capacitor/quadratic, +/obj/item/stock_parts/capacitor/quadratic, +/obj/item/stock_parts/capacitor/quadratic, +/obj/item/stock_parts/capacitor/quadratic, +/obj/item/stock_parts/capacitor/quadratic, +/obj/item/stock_parts/servo/femto, +/obj/item/stock_parts/servo/femto, +/obj/item/stock_parts/servo/femto, +/obj/item/stock_parts/servo/femto, +/obj/item/stock_parts/servo/femto, +/obj/item/stock_parts/servo/femto, +/obj/item/stock_parts/servo/femto, +/obj/item/stock_parts/servo/femto, +/obj/item/stock_parts/servo/femto, +/obj/item/stock_parts/servo/femto, +/obj/item/stock_parts/servo/femto, +/obj/item/stock_parts/servo/femto, +/obj/item/stock_parts/servo/femto, +/obj/item/stock_parts/capacitor/quadratic, +/obj/item/stock_parts/micro_laser/quadultra, +/obj/structure/table/reinforced/plastitaniumglass, +/obj/effect/turf_decal/tile/dark/full, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/main) +"KA" = ( +/obj/effect/turf_decal/stripes/red/line{ + dir = 1 + }, +/obj/effect/turf_decal/siding/dark{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/layer_manifold/supply/hidden, +/turf/open/floor/catwalk_floor/iron_dark, +/area/ruin/syndicate_lava_base/main) +"KB" = ( +/obj/effect/turf_decal/tile/dark/full, +/obj/machinery/vending/boozeomat/syndicate_access{ + onstation = 0 + }, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/bar) +"KE" = ( +/obj/effect/turf_decal/siding/wood/corner{ + dir = 8 + }, +/obj/effect/turf_decal/siding/wood/corner{ + dir = 4 + }, +/turf/closed/wall/r_wall/syndicate, +/area/ruin/syndicate_lava_base/main) +"KG" = ( +/obj/structure/chair/sofa/bench/left{ + dir = 4 + }, +/obj/effect/turf_decal/siding/wood{ + dir = 8 + }, +/turf/open/floor/wood/large, +/area/ruin/syndicate_lava_base/main) +"KM" = ( +/obj/effect/turf_decal/trimline/dark/filled/line{ + dir = 1 + }, +/obj/effect/turf_decal/stripes/red/line{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/dark/filled/mid_joiner{ + dir = 1 + }, +/obj/machinery/plumbing/growing_vat, +/obj/structure/window/reinforced/survival_pod/spawner/directional/north{ + pixel_y = 4 + }, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/medbay) +"KN" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 8 + }, +/obj/structure/marker_beacon/bronze, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/cable, +/turf/open/floor/wood/large, +/area/ruin/syndicate_lava_base/main) +"KQ" = ( +/obj/effect/turf_decal/trimline/dark/filled/line{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/dark/filled/mid_joiner{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/dark/filled/line, +/obj/effect/turf_decal/trimline/dark/filled/mid_joiner, +/obj/structure/curtain/bounty{ + color = "#7d7d7d" + }, +/obj/structure/extinguisher_cabinet/directional/north, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/bar) +"KR" = ( +/obj/structure/railing{ + dir = 4 + }, +/obj/structure/lattice/catwalk/mining, +/turf/open/misc/asteroid/basalt/lava_land_surface, +/area/lavaland/surface/outdoors) +"KZ" = ( +/obj/machinery/modular_shield/module/node{ + dir = 4 + }, +/obj/effect/decal/cleanable/glitter/blue, +/obj/effect/turf_decal/box/red/corners{ + dir = 1 + }, +/turf/open/floor/circuit, +/area/ruin/syndicate_lava_base/main) +"Ld" = ( +/obj/effect/turf_decal/tile/dark/full, +/obj/structure/reagent_dispensers/fueltank, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/main) +"Lf" = ( +/obj/effect/turf_decal/tile/dark/full, +/obj/structure/table/reinforced/plastitaniumglass, +/obj/item/storage/box/drinkingglasses{ + pixel_y = 10 + }, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/bar) +"Lg" = ( +/obj/effect/turf_decal/trimline/dark/filled/corner{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/dark/filled/line{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/dark/filled/mid_joiner{ + dir = 8 + }, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/testlab) +"Lp" = ( +/obj/machinery/modular_shield/module/relay, +/obj/structure/marker_beacon/purple, +/obj/effect/turf_decal/box/blue/corners{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/dark/filled/line{ + dir = 10 + }, +/obj/effect/turf_decal/trimline/dark/filled/mid_joiner{ + dir = 8 + }, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/main) +"Lq" = ( +/obj/effect/turf_decal/stripes/red/corner{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/dark/filled/corner{ + dir = 1 + }, +/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/dark/textured_large, +/area/ruin/syndicate_lava_base/cargo) +"Lr" = ( +/obj/structure/railing, +/obj/structure/lattice/catwalk/mining, +/turf/open/lava/smooth/lava_land_surface, +/area/lavaland/surface/outdoors) +"Lu" = ( +/obj/structure/marker_beacon/bronze, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/cable, +/turf/open/floor/wood/large, +/area/ruin/syndicate_lava_base/bar) +"Ly" = ( +/obj/effect/turf_decal/trimline/dark/filled/line{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/dark/filled/mid_joiner{ + dir = 8 + }, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/bar) +"LB" = ( +/obj/structure/toilet{ + dir = 8; + pixel_y = 6; + color = "#4d4d4d"; + name = "Interdyne Vacuum Toilet" + }, +/obj/effect/turf_decal/trimline/dark/filled/line{ + dir = 6 + }, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 8 + }, +/turf/open/floor/iron/dark/small, +/area/ruin/syndicate_lava_base/dormitories) +"LE" = ( +/obj/machinery/porta_turret/syndicate{ + dir = 5; + faction = list("Syndicate","neutral") + }, +/obj/structure/marker_beacon/burgundy, +/obj/machinery/camera/xray{ + pixel_x = 10; + name = "Inderdyne security camera"; + network = list("Interdyne"); + color = "#adadcd"; + pixel_y = 25 + }, +/turf/closed/wall/r_wall/syndicate/nodiagonal, +/area/ruin/syndicate_lava_base/main) +"LQ" = ( +/obj/effect/turf_decal/siding/wood{ + 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/wood/large, +/area/ruin/syndicate_lava_base/main) +"LS" = ( +/obj/effect/turf_decal/trimline/dark/filled/corner{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/dark/filled/corner, +/obj/effect/turf_decal/trimline/dark/filled/corner{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/dark/filled/corner{ + dir = 1 + }, +/obj/effect/turf_decal/arrows/blue{ + dir = 1 + }, +/obj/effect/turf_decal/arrows/blue, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/arrivals) +"LT" = ( +/obj/structure/flora/tree/jungle/small/style_random, +/obj/structure/flora/bush/sparsegrass/style_random, +/obj/structure/flora/bush/flowers_pp/style_random, +/obj/structure/marker_beacon/purple, +/turf/open/floor/grass, +/area/ruin/syndicate_lava_base/main) +"LW" = ( +/obj/structure/hedge, +/obj/effect/turf_decal/siding/wood{ + dir = 5 + }, +/turf/open/floor/wood/large, +/area/ruin/syndicate_lava_base/main) +"LX" = ( +/obj/effect/turf_decal/trimline/dark/filled/end{ + dir = 8 + }, +/obj/structure/marker_beacon/burgundy, +/turf/open/floor/iron/dark, +/area/ruin/syndicate_lava_base/main) +"Md" = ( +/obj/effect/turf_decal/trimline/dark/filled/mid_joiner, +/obj/effect/turf_decal/box/white/corners{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/dark/filled/line, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/cargo) +"Mg" = ( +/obj/machinery/computer/scan_consolenew{ + dir = 8; + name = "Interdyne DNA Console"; + pixel_x = 4 + }, +/obj/structure/marker_beacon/olive, +/obj/effect/turf_decal/tile/dark/full, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/medbay) +"Mh" = ( +/obj/effect/turf_decal/siding/wood/corner{ + dir = 1 + }, +/obj/effect/turf_decal/siding/wood{ + dir = 4 + }, +/turf/open/floor/carpet/red, +/area/ruin/syndicate_lava_base/bar) +"Mj" = ( +/obj/structure/window/reinforced/survival_pod/spawner/directional/west{ + pixel_x = -4 + }, +/obj/machinery/portable_atmospherics/canister/plasma, +/turf/open/floor/catwalk_floor/iron_dark, +/area/ruin/syndicate_lava_base/main) +"Mo" = ( +/obj/item/reagent_containers/cup/glass/shaker{ + pixel_x = 6; + pixel_y = 2 + }, +/obj/item/reagent_containers/cup/rag{ + pixel_x = -4; + pixel_y = 3 + }, +/obj/effect/turf_decal/tile/dark/full, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 1 + }, +/obj/structure/table/wood/fancy/black, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/bar) +"Mp" = ( +/obj/effect/turf_decal/tile/dark/full, +/obj/machinery/processor/slime{ + name = "Interdyne slime processor"; + color = "#adadcd"; + light_color = "#adadcd" + }, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/testlab) +"Mr" = ( +/obj/structure/table/reinforced/plastitaniumglass, +/obj/effect/turf_decal/tile/dark/full, +/obj/structure/marker_beacon/burgundy, +/obj/item/kitchen/rollingpin, +/obj/item/storage/box/beakers/bluespace, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/bar) +"MF" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 5 + }, +/obj/structure/hedge, +/turf/open/floor/wood/large, +/area/ruin/syndicate_lava_base/main) +"MJ" = ( +/obj/structure/flora/bush/sparsegrass/style_random, +/obj/structure/flora/bush/flowers_pp/style_random, +/obj/structure/marker_beacon/purple, +/obj/structure/flora/tree/jungle/small/style_random, +/turf/open/floor/grass, +/area/ruin/syndicate_lava_base/main) +"ML" = ( +/obj/effect/turf_decal/trimline/dark/filled/corner{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/dark/filled/corner, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/bar) +"MN" = ( +/obj/effect/turf_decal/trimline/dark/filled/end{ + dir = 1 + }, +/obj/effect/turf_decal/box/white/corners{ + dir = 1 + }, +/obj/effect/turf_decal/box/white/corners{ + dir = 4 + }, +/obj/structure/drain, +/turf/open/floor/iron/dark/textured, +/area/ruin/syndicate_lava_base/bar) +"MO" = ( +/obj/structure/marker_beacon/burgundy, +/obj/effect/turf_decal/trimline/dark/filled/line{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/dark/filled/mid_joiner{ + dir = 8 + }, +/obj/effect/turf_decal/stripes/red/line{ + dir = 8 + }, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/cargo) +"MT" = ( +/obj/machinery/power/smes/magical{ + desc = "A high-capacity superconducting magnetic energy storage (SMES) unit. Produces power through an unstable bluespace pocket."; + name = "Interdyne power storage"; + output_level = 200000; + color = "#9d9ddd"; + light_color = "#9d9ddd" + }, +/obj/structure/marker_beacon/burgundy, +/obj/structure/cable, +/obj/effect/turf_decal/bot_blue, +/obj/effect/turf_decal/tile/dark/full, +/turf/open/floor/plating/reinforced, +/area/ruin/syndicate_lava_base/main) +"MX" = ( +/obj/effect/turf_decal/trimline/dark/filled/line{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/dark/filled/mid_joiner{ + dir = 4 + }, +/obj/machinery/atmospherics/components/unary/portables_connector, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/main) +"Na" = ( +/obj/structure/marker_beacon/bronze, +/obj/effect/turf_decal/trimline/dark/filled/line{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/dark/filled/mid_joiner{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/dark/filled/line, +/obj/effect/turf_decal/trimline/dark/filled/mid_joiner, +/obj/effect/turf_decal/stripes/red/line, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/cargo) +"Nf" = ( +/obj/effect/turf_decal/stripes/red/line{ + dir = 1 + }, +/obj/effect/turf_decal/caution/red, +/obj/effect/turf_decal/trimline/dark/filled/corner{ + dir = 1 + }, +/obj/structure/marker_beacon/burgundy, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/cargo) +"Nq" = ( +/obj/structure/marker_beacon/teal, +/obj/effect/decal/cleanable/glitter/blue, +/obj/effect/turf_decal/arrows/blue, +/obj/effect/turf_decal/arrows/blue{ + dir = 1 + }, +/obj/structure/fans/tiny/forcefield, +/obj/effect/turf_decal/trimline/dark/filled/line{ + dir = 8 + }, +/obj/structure/window/reinforced/survival_pod/spawner/directional/west{ + pixel_x = -4 + }, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/testlab) +"Nr" = ( +/obj/effect/turf_decal/tile/dark/full, +/obj/machinery/vending/syndichem{ + onstation = 0 + }, +/obj/structure/marker_beacon/bronze, +/obj/machinery/camera/xray/directional/north{ + color = "#adadcd"; + name = "Inderdyne security camera"; + network = list("Interdyne") + }, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/medbay) +"Ns" = ( +/obj/effect/turf_decal/trimline/dark/filled/line{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/dark/filled/mid_joiner{ + dir = 1 + }, +/obj/effect/turf_decal/stripes/blue, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/medbay) +"Nv" = ( +/obj/structure/flora/ash/leaf_shroom, +/turf/open/misc/asteroid/basalt/lava_land_surface, +/area/lavaland/surface/outdoors) +"Nx" = ( +/obj/structure/lattice/catwalk/mining, +/obj/structure/railing{ + dir = 10 + }, +/turf/open/lava/smooth/lava_land_surface, +/area/lavaland/surface/outdoors) +"Ny" = ( +/obj/effect/spawner/structure/window/reinforced/plasma/plastitanium, +/obj/machinery/atmospherics/pipe/smart/manifold4w/general, +/turf/open/floor/plating/reinforced, +/area/ruin/syndicate_lava_base/main) +"NA" = ( +/obj/structure/window/reinforced/survival_pod/spawner/directional/south, +/obj/effect/turf_decal/trimline/dark/filled/line{ + dir = 10 + }, +/obj/effect/turf_decal/trimline/dark/filled/mid_joiner, +/obj/effect/turf_decal/trimline/dark/filled/mid_joiner{ + dir = 8 + }, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/testlab) +"NB" = ( +/obj/effect/turf_decal/trimline/dark/filled/line{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/dark/filled/mid_joiner{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/dark/filled/corner{ + dir = 1 + }, +/obj/effect/turf_decal/stripes/red/corner{ + dir = 1 + }, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/cargo) +"ND" = ( +/obj/effect/turf_decal/siding/wood, +/obj/structure/chair/comfy/brown{ + color = "#A46106"; + dir = 1 + }, +/turf/open/floor/carpet/red, +/area/ruin/syndicate_lava_base/bar) +"NH" = ( +/obj/effect/turf_decal/stripes/red/line, +/obj/effect/turf_decal/trimline/dark/filled/corner, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/cargo) +"NI" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/window/reinforced/survival_pod/spawner/directional/south{ + pixel_y = -4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/general/hidden, +/obj/structure/reagent_dispensers/watertank/high, +/turf/open/floor/catwalk_floor/iron_dark, +/area/ruin/syndicate_lava_base/main) +"NR" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/general/hidden, +/turf/open/floor/catwalk_floor/iron_dark, +/area/ruin/syndicate_lava_base/main) +"NU" = ( +/obj/machinery/vending/wardrobe/syndie_wardrobe{ + onstation = 0; + extended_inventory = 1 + }, +/obj/structure/marker_beacon/burgundy, +/obj/effect/turf_decal/tile/dark/full, +/obj/effect/turf_decal/stripes/blue{ + dir = 8 + }, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/cargo) +"Oc" = ( +/obj/effect/turf_decal/siding/wood, +/turf/open/floor/wood/large, +/area/ruin/syndicate_lava_base/main) +"Od" = ( +/obj/structure/closet/crate/secure/gear{ + req_access = list("syndicate"); + anchored = 1 + }, +/obj/effect/turf_decal/bot_red, +/obj/structure/marker_beacon/bronze, +/obj/effect/turf_decal/tile/dark/full, +/obj/item/storage/medkit/fire{ + pixel_x = 3; + pixel_y = 3 + }, +/obj/item/storage/medkit/brute, +/obj/item/storage/medkit/regular{ + pixel_x = -3; + pixel_y = -3 + }, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/cargo) +"Of" = ( +/obj/effect/turf_decal/trimline/dark/filled/mid_joiner, +/obj/effect/turf_decal/trimline/dark/filled/line, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/testlab) +"Oh" = ( +/obj/effect/turf_decal/stripes/red/line{ + dir = 1 + }, +/obj/effect/turf_decal/caution/red, +/obj/structure/marker_beacon/burgundy, +/obj/effect/turf_decal/trimline/dark/filled/corner{ + dir = 4 + }, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/cargo) +"Ok" = ( +/obj/structure/table/reinforced/plastitaniumglass, +/obj/item/stack/sheet/mineral/plasma{ + amount = 15 + }, +/obj/effect/turf_decal/tile/dark/full, +/obj/machinery/reagentgrinder{ + pixel_x = -6; + pixel_y = 10 + }, +/obj/structure/marker_beacon/purple, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 4 + }, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/medbay) +"Om" = ( +/obj/structure/fans/tiny/forcefield, +/obj/effect/decal/cleanable/glitter/blue, +/obj/structure/marker_beacon/teal, +/obj/effect/turf_decal/arrows/blue, +/obj/effect/turf_decal/arrows/blue{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/dark/filled/line{ + dir = 4 + }, +/obj/structure/window/reinforced/survival_pod/spawner/directional/east{ + pixel_x = 4 + }, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/cargo) +"Ov" = ( +/obj/effect/turf_decal/stripes/red/line, +/obj/effect/turf_decal/trimline/dark/filled/line, +/obj/effect/turf_decal/trimline/dark/filled/mid_joiner, +/obj/effect/turf_decal/caution/red, +/obj/machinery/duct, +/obj/machinery/light/directional/south{ + light_color = "#5148A6" + }, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/medbay) +"Ox" = ( +/obj/effect/turf_decal/trimline/dark/filled/line{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/dark/filled/line, +/obj/effect/turf_decal/trimline/dark/filled/mid_joiner{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/dark/filled/mid_joiner, +/obj/structure/chair/sofa/corp, +/obj/structure/marker_beacon/burgundy, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/testlab) +"OB" = ( +/obj/machinery/atmospherics/components/binary/pump/on{ + dir = 1 + }, +/turf/open/floor/catwalk_floor/iron_dark, +/area/ruin/syndicate_lava_base/main) +"OF" = ( +/obj/effect/turf_decal/trimline/dark/filled/line{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/dark/filled/mid_joiner{ + dir = 8 + }, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/testlab) +"OO" = ( +/obj/structure/table/reinforced/plastitaniumglass, +/obj/effect/turf_decal/tile/dark/full, +/obj/machinery/reagentgrinder{ + pixel_x = 5; + pixel_y = 8 + }, +/obj/item/food/tofu{ + pixel_y = -6 + }, +/obj/item/food/tofu, +/obj/item/food/tofu{ + pixel_y = 6 + }, +/obj/item/stack/sheet/mineral/plasma{ + pixel_y = 4 + }, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 8 + }, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/medbay) +"OP" = ( +/obj/structure/marker_beacon/bronze, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/turf/open/floor/wood/large, +/area/ruin/syndicate_lava_base/main) +"OQ" = ( +/obj/effect/turf_decal/box/blue/corners, +/obj/structure/cable, +/obj/effect/turf_decal/trimline/dark/filled/line{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/dark/filled/mid_joiner{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/dark/filled/line, +/obj/effect/turf_decal/trimline/dark/filled/mid_joiner, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/main) +"OS" = ( +/obj/structure/rack/shelf, +/obj/effect/turf_decal/tile/dark/full, +/obj/item/gun/energy/plasmacutter, +/obj/item/gun/energy/plasmacutter, +/obj/item/binoculars, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/cargo) +"OX" = ( +/obj/effect/turf_decal/tile/dark/full, +/obj/structure/marker_beacon/teal, +/obj/structure/curtain/bounty{ + color = "#7d7d7d"; + alpha = 180 + }, +/obj/machinery/stasis{ + dir = 8 + }, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/medbay) +"Pb" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 8 + }, +/obj/structure/marker_beacon/bronze, +/turf/open/floor/wood/large, +/area/ruin/syndicate_lava_base/main) +"Pd" = ( +/obj/effect/turf_decal/stripes/red/line, +/obj/structure/cable, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/cargo) +"Pe" = ( +/obj/effect/turf_decal/tile/dark/full, +/obj/machinery/rnd/production/protolathe/offstation{ + name = "Interdyne protolathe"; + color = "#adadcd"; + light_color = "#adadcd" + }, +/obj/structure/marker_beacon/burgundy, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/testlab) +"Pf" = ( +/obj/effect/turf_decal/siding/dark{ + dir = 1 + }, +/obj/effect/turf_decal/siding/dark/corner, +/obj/effect/turf_decal/trimline/dark/filled/line{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/dark/filled/corner, +/obj/effect/turf_decal/trimline/dark/filled/corner{ + dir = 8 + }, +/turf/open/floor/iron/dark/textured, +/area/ruin/syndicate_lava_base/bar) +"Ph" = ( +/obj/effect/turf_decal/caution/red, +/obj/effect/turf_decal/stripes/red/line{ + dir = 1 + }, +/obj/structure/railing/corner{ + dir = 4 + }, +/obj/structure/railing/corner, +/turf/open/floor/plating/reinforced/lavaland, +/area/lavaland/surface/outdoors) +"Pk" = ( +/obj/structure/window/reinforced/survival_pod/spawner/directional/south, +/obj/effect/turf_decal/trimline/dark/filled/line, +/obj/structure/table/reinforced/plastitaniumglass, +/obj/item/storage/bag/xeno, +/obj/item/storage/box/syringes{ + pixel_x = 5; + pixel_y = 10 + }, +/obj/item/storage/backpack/duffelbag/syndie, +/obj/effect/turf_decal/tile/dark/full, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 1 + }, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/testlab) +"Pl" = ( +/obj/effect/turf_decal/trimline/dark/filled/corner, +/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/dark/textured_large, +/area/ruin/syndicate_lava_base/cargo) +"Pv" = ( +/turf/closed/wall/r_wall/syndicate/nodiagonal, +/area/ruin/syndicate_lava_base/dormitories) +"Px" = ( +/obj/structure/rack, +/obj/item/knife/combat/survival, +/obj/item/flashlight/seclite, +/obj/effect/turf_decal/tile/dark/full, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/item/flatpacked_machine/ore_thumper, +/obj/item/flatpacked_machine/ore_thumper, +/obj/item/flatpacked_machine/ore_thumper, +/obj/item/gun/energy/recharge/kinetic_accelerator, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/cargo) +"Pz" = ( +/obj/machinery/modular_shield/module/node{ + dir = 8 + }, +/obj/effect/decal/cleanable/glitter/blue, +/obj/effect/turf_decal/box/red/corners{ + dir = 4 + }, +/turf/open/floor/circuit, +/area/ruin/syndicate_lava_base/main) +"PA" = ( +/obj/effect/turf_decal/trimline/dark/filled/mid_joiner{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/dark/filled/line{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/dark/filled/line{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/dark/filled/mid_joiner{ + dir = 4 + }, +/obj/effect/turf_decal/stripes/red/line{ + dir = 4 + }, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 4 + }, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/cargo) +"PB" = ( +/obj/structure/flora/bush/fullgrass/style_random, +/obj/structure/flora/tree/jungle/small/style_random, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/grass, +/area/ruin/syndicate_lava_base/main) +"PC" = ( +/obj/item/binoculars, +/turf/open/misc/asteroid/basalt/lava_land_surface, +/area/lavaland/surface/outdoors) +"PD" = ( +/obj/structure/marker_beacon/teal, +/obj/structure/fans/tiny/forcefield, +/obj/effect/decal/cleanable/glitter/blue, +/obj/effect/turf_decal/trimline/dark/filled/line{ + dir = 8 + }, +/obj/structure/window/reinforced/survival_pod/spawner/directional/west{ + pixel_x = -4 + }, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/medbay) +"PE" = ( +/obj/machinery/disposal/bin{ + name = "External disposal unit" + }, +/obj/structure/disposalpipe/trunk{ + dir = 1 + }, +/obj/effect/turf_decal/stripes/red/box, +/obj/effect/turf_decal/tile/dark/full, +/obj/structure/window/reinforced/survival_pod/spawner/directional/east{ + pixel_x = 4 + }, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/medbay) +"PF" = ( +/obj/effect/turf_decal/trimline/dark/filled/line{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/dark/filled/line{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/dark/filled/mid_joiner{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/dark/filled/mid_joiner{ + dir = 4 + }, +/obj/effect/turf_decal/stripes/red/line{ + dir = 8 + }, +/obj/effect/turf_decal/stripes/blue/corner{ + dir = 4 + }, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/cargo) +"PG" = ( +/obj/machinery/sleeper/syndie/fullupgrade{ + dir = 4 + }, +/obj/structure/marker_beacon/burgundy, +/obj/effect/turf_decal/tile/dark/full, +/obj/effect/turf_decal/stripes/blue{ + dir = 1 + }, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/medbay) +"PP" = ( +/obj/effect/turf_decal/trimline/dark/filled/line{ + dir = 6 + }, +/obj/effect/turf_decal/trimline/dark/filled/mid_joiner, +/obj/effect/turf_decal/trimline/dark/filled/mid_joiner{ + dir = 4 + }, +/obj/effect/turf_decal/box/white/corners, +/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/dark/textured_large, +/area/ruin/syndicate_lava_base/cargo) +"PT" = ( +/obj/structure/flora/bush/sparsegrass/style_random, +/obj/structure/flora/bush/flowers_pp/style_random, +/obj/structure/marker_beacon/purple, +/obj/structure/flora/tree/jungle/style_random, +/turf/open/floor/grass, +/area/ruin/syndicate_lava_base/main) +"PV" = ( +/obj/structure/table/wood/fancy/black, +/obj/machinery/chem_dispenser/drinks/beer/fullupgrade, +/turf/open/floor/iron/dark/textured, +/area/ruin/syndicate_lava_base/bar) +"PW" = ( +/obj/effect/turf_decal/tile/dark/full, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/marker_beacon/burgundy, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/testlab) +"PX" = ( +/obj/machinery/modular_shield/module/relay, +/obj/structure/marker_beacon/purple, +/obj/effect/turf_decal/box/blue/corners, +/obj/effect/turf_decal/box/blue/corners{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/dark/filled/end, +/turf/open/floor/iron/dark, +/area/ruin/syndicate_lava_base/main) +"PY" = ( +/obj/machinery/vending/hydroseeds{ + onstation = 0 + }, +/obj/effect/turf_decal/tile/dark/full, +/obj/structure/marker_beacon/olive, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/bar) +"PZ" = ( +/obj/structure/window/reinforced/survival_pod/spawner/directional/south{ + pixel_y = -4 + }, +/obj/effect/turf_decal/box/red/corners{ + dir = 4 + }, +/obj/effect/turf_decal/box/red/corners{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/dark/filled/end, +/obj/structure/marker_beacon/burgundy, +/obj/effect/mob_spawn/ghost_role/human/interdyne_planetary_base{ + dir = 1 + }, +/turf/open/floor/iron/dark, +/area/ruin/syndicate_lava_base/arrivals) +"Qb" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/cable, +/turf/open/floor/wood/large, +/area/ruin/syndicate_lava_base/main) +"Qi" = ( +/obj/effect/turf_decal/trimline/dark/filled/line{ + dir = 9 + }, +/obj/effect/turf_decal/trimline/dark/filled/mid_joiner{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/dark/filled/mid_joiner{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/dark/filled/corner, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/testlab) +"Qj" = ( +/obj/machinery/modular_shield/module/charger{ + dir = 4 + }, +/obj/structure/marker_beacon/purple, +/obj/effect/turf_decal/box/blue/corners{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/dark/filled/line{ + dir = 5 + }, +/turf/open/floor/iron/dark, +/area/ruin/syndicate_lava_base/main) +"Qt" = ( +/obj/structure/window/reinforced/survival_pod/spawner/directional/south{ + pixel_y = -4 + }, +/turf/open/floor/engine, +/area/ruin/syndicate_lava_base/testlab) +"Qu" = ( +/obj/machinery/modular_shield/module/well{ + dir = 4 + }, +/obj/structure/marker_beacon/indigo, +/obj/effect/turf_decal/box/blue/corners{ + dir = 4 + }, +/obj/effect/turf_decal/box/blue/corners, +/obj/effect/turf_decal/trimline/dark/filled/end{ + dir = 4 + }, +/turf/open/floor/iron/dark, +/area/ruin/syndicate_lava_base/main) +"Qx" = ( +/turf/closed/wall/r_wall/syndicate, +/area/ruin/syndicate_lava_base/medbay) +"Qy" = ( +/obj/effect/turf_decal/tile/dark/full, +/turf/open/floor/plating/elevatorshaft, +/area/ruin/syndicate_lava_base/cargo) +"QD" = ( +/obj/structure/flora/bush/fullgrass/style_random, +/obj/structure/flora/bush/jungle/a/style_random, +/obj/structure/marker_beacon/olive, +/turf/open/floor/grass, +/area/ruin/syndicate_lava_base/main) +"QF" = ( +/obj/effect/turf_decal/trimline/dark/filled/line{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/dark/filled/line{ + dir = 4 + }, +/turf/open/floor/iron/dark/textured, +/area/ruin/syndicate_lava_base/bar) +"QP" = ( +/obj/effect/turf_decal/tile/dark/full, +/obj/machinery/seed_extractor{ + name = "Interdyne seed extractor"; + color = "#adadcd"; + pixel_x = -4 + }, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/bar) +"QQ" = ( +/obj/effect/turf_decal/trimline/dark/filled/line, +/obj/effect/turf_decal/trimline/dark/filled/mid_joiner, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/testlab) +"QZ" = ( +/obj/structure/marker_beacon/burgundy, +/obj/effect/turf_decal/trimline/dark/filled/corner{ + dir = 4 + }, +/obj/effect/turf_decal/stripes/red/corner{ + dir = 4 + }, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/cargo) +"Rb" = ( +/obj/effect/turf_decal/trimline/dark/filled/line{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/dark/filled/mid_joiner{ + dir = 8 + }, +/obj/machinery/atmospherics/components/unary/portables_connector, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/main) +"Rd" = ( +/obj/structure/railing{ + dir = 8 + }, +/obj/structure/lattice/catwalk/mining, +/turf/open/lava/smooth/lava_land_surface, +/area/lavaland/surface/outdoors) +"Rf" = ( +/obj/structure/railing/corner{ + dir = 4 + }, +/obj/structure/railing/corner, +/turf/open/floor/plating/reinforced/lavaland, +/area/lavaland/surface/outdoors) +"Rj" = ( +/obj/machinery/modular_shield/module/node{ + dir = 8 + }, +/obj/effect/decal/cleanable/glitter/blue, +/turf/open/floor/circuit, +/area/ruin/syndicate_lava_base/main) +"Rm" = ( +/obj/effect/turf_decal/box/red/corners{ + dir = 4 + }, +/obj/effect/turf_decal/tile/dark/full, +/obj/item/storage/box/stockparts/deluxe{ + pixel_x = -6; + pixel_y = 11 + }, +/obj/item/storage/box/stockparts/deluxe{ + pixel_x = 8; + pixel_y = 5 + }, +/obj/item/stack/cable_coil, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/testlab) +"Rn" = ( +/obj/effect/turf_decal/tile/dark/full, +/obj/structure/marker_beacon/burgundy, +/obj/machinery/chem_master/condimaster{ + name = "Interdyne BrewMaster"; + color = "#adadcd"; + light_color = "#adadcd" + }, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/bar) +"Ro" = ( +/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/ruin/syndicate_lava_base/cargo) +"Rs" = ( +/obj/effect/turf_decal/trimline/dark/filled/line{ + dir = 10 + }, +/obj/effect/turf_decal/trimline/dark/filled/mid_joiner{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/dark/filled/mid_joiner, +/obj/effect/turf_decal/stripes/red/line{ + dir = 5 + }, +/obj/structure/ore_box, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/cargo) +"Ru" = ( +/obj/effect/turf_decal/trimline/dark/filled/line{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/dark/filled/corner{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/dark/filled/mid_joiner{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/medbay) +"Ry" = ( +/obj/effect/turf_decal/siding/wood/corner{ + dir = 1 + }, +/turf/open/floor/wood/large, +/area/ruin/syndicate_lava_base/main) +"RB" = ( +/obj/effect/turf_decal/trimline/dark/filled/corner{ + dir = 1 + }, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/medbay) +"RD" = ( +/obj/effect/turf_decal/trimline/dark/filled/line{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/dark/filled/mid_joiner{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/testlab) +"RH" = ( +/obj/structure/flora/bush/sparsegrass/style_random, +/obj/structure/flora/bush/flowers_yw/style_random, +/obj/structure/marker_beacon/bronze, +/obj/structure/flora/tree/jungle/small/style_random, +/turf/open/floor/grass, +/area/ruin/syndicate_lava_base/main) +"RJ" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/cyan/visible, +/obj/effect/turf_decal/trimline/dark/filled/line{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/dark/filled/mid_joiner{ + dir = 1 + }, +/mob/living/carbon/human/species/monkey{ + ai_controller = null; + faction = list("neutral","Syndicate") + }, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/medbay) +"RK" = ( +/obj/structure/table/wood/fancy/black, +/obj/machinery/chem_dispenser/drinks/fullupgrade, +/turf/open/floor/iron/dark/textured, +/area/ruin/syndicate_lava_base/bar) +"RM" = ( +/obj/effect/turf_decal/tile/dark/full, +/turf/closed/wall/r_wall/syndicate/nodiagonal, +/area/ruin/syndicate_lava_base/bar) +"RQ" = ( +/obj/machinery/vending/dinnerware{ + onstation = 0 + }, +/obj/effect/turf_decal/tile/dark/full, +/obj/structure/marker_beacon/indigo, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/bar) +"RU" = ( +/obj/structure/table/reinforced/plastitaniumglass, +/obj/effect/turf_decal/tile/dark/full, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/medbay) +"Sc" = ( +/obj/structure/table/reinforced/plastitaniumglass, +/obj/effect/turf_decal/tile/dark/full, +/obj/item/storage/box/beakers/bluespace, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/testlab) +"Sf" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/cable, +/turf/open/floor/wood/large, +/area/ruin/syndicate_lava_base/bar) +"Sg" = ( +/obj/effect/turf_decal/trimline/dark/filled/corner{ + dir = 1 + }, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/cargo) +"Si" = ( +/turf/closed/wall/r_wall/syndicate, +/area/ruin/syndicate_lava_base/bar) +"Sl" = ( +/obj/effect/spawner/structure/window/reinforced/plasma/plastitanium, +/obj/machinery/door/poddoor{ + id = "interdynemed"; + name = "Interdyne Storm Shutters Med" + }, +/turf/open/floor/plating/reinforced, +/area/ruin/syndicate_lava_base/medbay) +"So" = ( +/obj/effect/turf_decal/tile/dark/full, +/obj/structure/window/reinforced/survival_pod/spawner/directional/east{ + pixel_x = 4 + }, +/obj/structure/marker_beacon/olive, +/obj/machinery/computer/crew/syndie{ + dir = 8 + }, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/medbay) +"Sq" = ( +/obj/effect/turf_decal/trimline/dark/filled/line{ + dir = 1 + }, +/turf/open/floor/iron/dark/textured, +/area/ruin/syndicate_lava_base/bar) +"Sr" = ( +/obj/effect/turf_decal/trimline/dark/filled/end, +/obj/effect/turf_decal/box/red/corners{ + dir = 4 + }, +/obj/effect/turf_decal/box/red/corners{ + dir = 1 + }, +/obj/effect/turf_decal/stripes/red/line, +/obj/structure/marker_beacon/burgundy, +/obj/structure/window/reinforced/survival_pod/spawner/directional/south{ + pixel_y = -4 + }, +/obj/effect/mob_spawn/ghost_role/human/interdyne_planetary_base{ + dir = 1 + }, +/turf/open/floor/iron/dark, +/area/ruin/syndicate_lava_base/arrivals) +"Sw" = ( +/obj/structure/table/wood/fancy/black, +/obj/item/food/chips/shrimp, +/turf/open/floor/wood/large, +/area/ruin/syndicate_lava_base/bar) +"Sz" = ( +/obj/effect/turf_decal/trimline/dark/filled/line{ + dir = 10 + }, +/obj/effect/turf_decal/trimline/dark/filled/mid_joiner, +/obj/effect/turf_decal/trimline/dark/filled/mid_joiner{ + dir = 8 + }, +/obj/machinery/button/door/directional/west{ + base_icon_state = "tram"; + icon_state = "tram"; + req_access = list("syndicate"); + id = "interdynekitchen"; + name = "Interdyne Storm Shutters Kitchen" + }, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/bar) +"SC" = ( +/obj/structure/marker_beacon/purple, +/obj/effect/turf_decal/trimline/dark/filled/line{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/dark/filled/line{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/dark/filled/mid_joiner{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/dark/filled/mid_joiner{ + dir = 4 + }, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/testlab) +"SE" = ( +/obj/structure/marker_beacon/burgundy, +/obj/structure/railing{ + dir = 9 + }, +/obj/machinery/button/door/directional/south{ + base_icon_state = "tram"; + name = "Interdyne Gate"; + icon_state = "tram"; + id = "interdynegateout"; + light_color = "#22CCFF"; + req_access = list("syndicate"); + pixel_x = 7; + pixel_y = -20 + }, +/turf/open/floor/engine/hull/reinforced/lavaland, +/area/ruin/syndicate_lava_base/cargo) +"SG" = ( +/obj/effect/turf_decal/siding/wood/corner, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/cable, +/turf/open/floor/wood/large, +/area/ruin/syndicate_lava_base/main) +"SH" = ( +/obj/structure/table/reinforced/plastitaniumglass, +/obj/machinery/door/window/survival_pod/left/directional/north, +/obj/effect/turf_decal/tile/dark/full, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/medbay) +"SL" = ( +/obj/structure/chair/stool/bar, +/obj/effect/turf_decal/siding/wood, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/cable, +/turf/open/floor/wood/large, +/area/ruin/syndicate_lava_base/bar) +"SR" = ( +/obj/effect/turf_decal/arrows/red, +/obj/effect/turf_decal/box/red/corners, +/obj/effect/turf_decal/box/red/corners{ + dir = 8 + }, +/obj/structure/cable, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/cargo) +"SZ" = ( +/obj/structure/table/reinforced/plastitaniumglass, +/obj/structure/marker_beacon/burgundy, +/obj/item/storage/part_replacer{ + pixel_y = 6 + }, +/obj/effect/turf_decal/tile/dark/full, +/obj/item/storage/toolbox/syndicate, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/main) +"Tf" = ( +/obj/structure/chair/comfy/brown{ + color = "#A46106"; + dir = 4 + }, +/turf/open/floor/wood/large, +/area/ruin/syndicate_lava_base/bar) +"Tk" = ( +/obj/structure/marker_beacon/burgundy, +/obj/structure/sign/flag/syndicate/directional/north, +/obj/effect/turf_decal/tile/dark/full, +/obj/machinery/blackbox_recorder{ + name = "Interdyne Blackbox Recorder"; + desc = "Machine that contains lots of confidential Syndicate and Wavefield Science data."; + color = "#adadcd"; + light_color = "#adadcd" + }, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/main) +"Tl" = ( +/obj/effect/turf_decal/trimline/dark/filled/line{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/dark/filled/line, +/obj/effect/turf_decal/trimline/dark/filled/mid_joiner{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/dark/filled/mid_joiner, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/testlab) +"Tm" = ( +/obj/effect/turf_decal/tile/dark/full, +/obj/machinery/chem_dispenser/mutagensaltpeter{ + color = "#adadcd"; + name = "Interdyne botanical chemical dispenser"; + pixel_x = -4; + light_color = "#adadcd" + }, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/bar) +"Tp" = ( +/obj/machinery/cryo_cell, +/obj/structure/marker_beacon/teal, +/obj/effect/turf_decal/tile/dark/full, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/medbay) +"TC" = ( +/obj/effect/turf_decal/trimline/dark/filled/line{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/dark/filled/line, +/obj/effect/turf_decal/trimline/dark/filled/mid_joiner{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/dark/filled/mid_joiner, +/obj/structure/chair/sofa/corp, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/testlab) +"TD" = ( +/obj/effect/turf_decal/trimline/dark/filled/corner{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/dark/filled/corner{ + dir = 8 + }, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/bar) +"TF" = ( +/obj/machinery/barsign/all_access, +/obj/effect/turf_decal/siding/wood{ + dir = 9 + }, +/turf/open/floor/wood/large, +/area/ruin/syndicate_lava_base/bar) +"TJ" = ( +/obj/effect/turf_decal/trimline/dark/filled/line{ + dir = 1 + }, +/obj/effect/turf_decal/stripes/red/line{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/dark/filled/mid_joiner{ + dir = 1 + }, +/obj/effect/turf_decal/stripes/red/corner{ + dir = 1 + }, +/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/dark/textured_large, +/area/ruin/syndicate_lava_base/cargo) +"TO" = ( +/obj/structure/hedge, +/obj/effect/turf_decal/siding/wood{ + dir = 9 + }, +/turf/open/floor/wood/large, +/area/ruin/syndicate_lava_base/main) +"TS" = ( +/obj/effect/turf_decal/trimline/dark/filled/line{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/dark/filled/mid_joiner{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/dark/filled/line{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/dark/filled/mid_joiner{ + dir = 8 + }, +/obj/structure/chair/sofa/corp/left{ + dir = 8 + }, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/testlab) +"TT" = ( +/obj/effect/turf_decal/trimline/dark/filled/corner{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/dark/filled/line{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/dark/filled/mid_joiner{ + dir = 4 + }, +/obj/effect/turf_decal/siding/thinplating/dark{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/main) +"Ub" = ( +/obj/structure/fans/tiny, +/obj/effect/turf_decal/trimline/dark/filled/line, +/obj/effect/turf_decal/trimline/dark/filled/line{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/dark/filled/mid_joiner{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/dark/filled/mid_joiner, +/obj/effect/turf_decal/siding/dark{ + dir = 1 + }, +/obj/machinery/duct, +/obj/machinery/door/window/survival_pod/left/directional/west{ + req_access = list("syndicate"); + pixel_x = -4 + }, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/medbay) +"Ug" = ( +/obj/machinery/atmospherics/components/unary/outlet_injector/on/layer2{ + dir = 1 + }, +/obj/machinery/atmospherics/components/unary/outlet_injector/on{ + dir = 1 + }, +/turf/open/floor/engine, +/area/ruin/syndicate_lava_base/main) +"Ui" = ( +/obj/machinery/dna_scannernew, +/obj/structure/drain, +/obj/effect/turf_decal/trimline/dark/filled/end{ + dir = 4 + }, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/medbay) +"Uw" = ( +/obj/structure/bookcase/random, +/obj/structure/marker_beacon/bronze, +/turf/open/floor/wood/large, +/area/ruin/syndicate_lava_base/bar) +"UA" = ( +/obj/machinery/vending/autodrobe{ + onstation = 0 + }, +/obj/effect/turf_decal/tile/dark/full, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/dormitories) +"UB" = ( +/obj/effect/turf_decal/tile/dark/full, +/obj/machinery/ammo_workbench{ + name = "Interdyne ammunitions workbench"; + color = "#adadcd" + }, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/testlab) +"UD" = ( +/obj/effect/turf_decal/trimline/dark/filled/line, +/obj/effect/turf_decal/trimline/dark/filled/mid_joiner, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/medbay) +"UE" = ( +/obj/effect/turf_decal/stripes/red/corner{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/dark/filled/line{ + dir = 9 + }, +/obj/effect/turf_decal/trimline/dark/filled/mid_joiner{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/dark/filled/mid_joiner{ + dir = 8 + }, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/medbay) +"UF" = ( +/obj/effect/turf_decal/siding/wood/corner{ + dir = 8 + }, +/turf/open/floor/wood/large, +/area/ruin/syndicate_lava_base/main) +"UN" = ( +/obj/structure/marker_beacon/teal, +/obj/effect/decal/cleanable/glitter/blue, +/obj/effect/turf_decal/arrows/blue, +/obj/effect/turf_decal/arrows/blue{ + dir = 1 + }, +/obj/structure/fans/tiny/forcefield, +/obj/structure/window/reinforced/survival_pod/spawner/directional/west{ + pixel_x = -4 + }, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/cargo) +"UO" = ( +/obj/machinery/porta_turret/syndicate{ + dir = 10; + faction = list("Syndicate","neutral") + }, +/obj/structure/marker_beacon/burgundy, +/obj/machinery/camera/xray{ + pixel_x = 10; + name = "Inderdyne security camera"; + network = list("Interdyne"); + color = "#adadcd"; + pixel_y = 25 + }, +/turf/closed/wall/r_wall/syndicate/nodiagonal, +/area/ruin/syndicate_lava_base/main) +"UU" = ( +/obj/machinery/atmospherics/components/unary/thermomachine/freezer/on{ + name = "Interdyne Cryo freezer"; + dir = 6; + initialize_directions = 6; + color = "#adadcd" + }, +/obj/effect/turf_decal/tile/dark/full, +/obj/item/reagent_containers/cup/beaker/cryoxadone{ + pixel_x = -6; + pixel_y = 6 + }, +/obj/item/reagent_containers/cup/beaker/cryoxadone{ + pixel_x = 6; + pixel_y = 6 + }, +/obj/item/storage/pill_bottle/mannitol, +/obj/item/reagent_containers/dropper, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/medbay) +"UZ" = ( +/obj/structure/marker_beacon/teal, +/obj/structure/fans/tiny/forcefield, +/obj/effect/decal/cleanable/glitter/blue, +/obj/effect/turf_decal/trimline/dark/filled/line{ + dir = 8 + }, +/obj/structure/window/reinforced/survival_pod/spawner/directional/west{ + pixel_x = -4 + }, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/testlab) +"Vc" = ( +/obj/effect/turf_decal/siding/wood/corner{ + dir = 4 + }, +/obj/structure/chair/comfy/brown{ + color = "#A46106"; + dir = 4 + }, +/turf/open/floor/carpet/red, +/area/ruin/syndicate_lava_base/bar) +"Ve" = ( +/obj/structure/flora/bush/flowers_br/style_random, +/obj/structure/flora/bush/sparsegrass/style_random, +/obj/structure/marker_beacon/teal, +/obj/structure/flora/tree/jungle/small/style_random, +/turf/open/floor/grass, +/area/ruin/syndicate_lava_base/main) +"Vi" = ( +/obj/structure/table/reinforced/plastitaniumglass, +/obj/effect/turf_decal/tile/dark/full, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/testlab) +"Vj" = ( +/obj/effect/turf_decal/siding/dark{ + dir = 1 + }, +/obj/effect/turf_decal/tile/dark/full, +/obj/machinery/griddle{ + color = "#9d9ddd"; + name = "Interdyne griddle"; + light_color = "#9d9ddd" + }, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/bar) +"Vl" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 6 + }, +/obj/structure/bed/pillow_large, +/obj/structure/marker_beacon/purple, +/turf/open/floor/carpet/red, +/area/ruin/syndicate_lava_base/bar) +"Vm" = ( +/obj/effect/turf_decal/trimline/dark/filled/end{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/dark/filled/mid_joiner{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/dark/filled/mid_joiner{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/dark/filled/mid_joiner{ + dir = 4 + }, +/obj/structure/marker_beacon/bronze, +/obj/structure/chair/comfy/black{ + dir = 8 + }, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/medbay) +"Vn" = ( +/obj/effect/turf_decal/tile/dark/full, +/obj/machinery/computer/camera_advanced{ + dir = 4 + }, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/testlab) +"Vx" = ( +/obj/effect/turf_decal/trimline/dark/filled/end, +/turf/open/floor/iron/dark/textured, +/area/ruin/syndicate_lava_base/dormitories) +"Vz" = ( +/obj/machinery/biogenerator, +/obj/machinery/door/window/survival_pod/left/directional/west{ + req_access = list("syndicate"); + pixel_x = -4 + }, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/main) +"VH" = ( +/obj/structure/table/reinforced/plastitaniumglass, +/obj/effect/turf_decal/tile/dark/full, +/obj/item/clothing/glasses/science, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/medbay) +"VN" = ( +/obj/effect/turf_decal/trimline/dark/filled/line{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/dark/filled/mid_joiner{ + dir = 8 + }, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/medbay) +"VP" = ( +/turf/closed/wall/r_wall/syndicate/nodiagonal, +/area/ruin/syndicate_lava_base/medbay) +"VS" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 5 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/cable, +/turf/open/floor/wood/large, +/area/ruin/syndicate_lava_base/main) +"VT" = ( +/obj/structure/flora/bush/fullgrass/style_random, +/obj/structure/flora/bush/jungle/a/style_random, +/turf/open/floor/grass, +/area/ruin/syndicate_lava_base/main) +"VU" = ( +/obj/machinery/camera/xray{ + c_tag = "Xenobio West"; + dir = 8; + network = list("fsci") + }, +/obj/effect/turf_decal/stripes/red/line{ + dir = 1 + }, +/obj/effect/turf_decal/box/white/corners{ + dir = 1 + }, +/turf/open/floor/engine, +/area/ruin/syndicate_lava_base/testlab) +"VY" = ( +/obj/effect/turf_decal/tile/dark/full, +/obj/machinery/vending/medical/syndicate_access{ + onstation = 0; + contraband = list(/obj/item/storage/box/gum/happiness=3, /obj/item/storage/box/hug/medical=3, /obj/item/mmi/syndie/interdyne=3); + extended_inventory = 1; + color = "#adadcd"; + light_color = "#adadcd" + }, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/medbay) +"VZ" = ( +/obj/effect/turf_decal/siding/dark{ + dir = 1 + }, +/obj/effect/turf_decal/siding/dark/corner{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/dark/filled/corner{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/dark/filled/line{ + dir = 5 + }, +/turf/open/floor/iron/dark/textured, +/area/ruin/syndicate_lava_base/bar) +"Wc" = ( +/obj/structure/marker_beacon/bronze, +/obj/effect/turf_decal/trimline/dark/filled/line{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/dark/filled/mid_joiner{ + dir = 1 + }, +/obj/structure/window/reinforced/survival_pod/spawner/directional/south{ + pixel_y = -4 + }, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/main) +"Wf" = ( +/obj/effect/spawner/structure/window/reinforced/plasma/plastitanium, +/obj/structure/cable, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/main) +"Wu" = ( +/obj/effect/turf_decal/tile/dark/full, +/obj/structure/marker_beacon/bronze, +/obj/structure/table/reinforced/plastitaniumglass, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/bar) +"Wx" = ( +/obj/structure/window/reinforced/survival_pod/spawner/directional/south, +/obj/structure/window/reinforced/survival_pod/spawner/directional/west, +/obj/machinery/atmospherics/components/unary/vent_pump/siphon/monitored{ + chamber_id = "interdyneserver"; + dir = 1; + external_pressure_bound = 120; + name = "server vent" + }, +/turf/open/floor/circuit/telecomms, +/area/ruin/syndicate_lava_base/testlab) +"Wy" = ( +/obj/effect/turf_decal/stripes/red/corner{ + dir = 1 + }, +/obj/effect/turf_decal/tile/dark/full, +/obj/structure/marker_beacon/teal, +/obj/structure/curtain/bounty{ + color = "#7d7d7d"; + alpha = 180 + }, +/obj/machinery/stasis{ + dir = 8 + }, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/medbay) +"WC" = ( +/obj/structure/window/reinforced/survival_pod/spawner/directional/east{ + pixel_x = 4 + }, +/obj/structure/window/reinforced/survival_pod/spawner/directional/west{ + pixel_x = -4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/general/hidden, +/obj/machinery/portable_atmospherics/scrubber, +/turf/open/floor/catwalk_floor/iron_dark, +/area/ruin/syndicate_lava_base/main) +"WG" = ( +/obj/effect/turf_decal/trimline/dark/filled/line{ + dir = 5 + }, +/obj/effect/turf_decal/trimline/dark/filled/mid_joiner{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/dark/filled/mid_joiner{ + dir = 1 + }, +/obj/effect/turf_decal/siding/thinplating/dark{ + dir = 5 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/main) +"WJ" = ( +/obj/effect/turf_decal/caution/red, +/obj/effect/turf_decal/stripes/red/line{ + dir = 1 + }, +/obj/effect/turf_decal/arrows/blue{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/dark/filled/line{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/dark/filled/corner{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/medbay) +"WL" = ( +/obj/effect/turf_decal/trimline/dark/filled/line{ + dir = 6 + }, +/obj/effect/turf_decal/trimline/dark/filled/mid_joiner, +/obj/effect/turf_decal/trimline/dark/filled/mid_joiner{ + dir = 4 + }, +/obj/effect/turf_decal/stripes/red/line{ + dir = 9 + }, +/obj/structure/ore_box, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/cargo) +"WM" = ( +/obj/structure/table/reinforced/plastitaniumglass, +/obj/item/storage/box/monkeycubes{ + pixel_x = -5; + pixel_y = 1 + }, +/obj/item/storage/box/monkeycubes{ + pixel_x = 6; + pixel_y = 4 + }, +/obj/effect/turf_decal/tile/dark/full, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 8 + }, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/medbay) +"WR" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 8 + }, +/obj/structure/closet/cabinet{ + name = "Dark wood Interdyne closet"; + color = "#8d8d8d"; + light_color = "#8d8d8d" + }, +/obj/effect/turf_decal/trimline/dark/filled/end{ + dir = 4 + }, +/turf/open/floor/iron/dark/textured, +/area/ruin/syndicate_lava_base/dormitories) +"WS" = ( +/obj/structure/flora/bush/fullgrass/style_random, +/obj/structure/flora/tree/jungle/style_random, +/obj/structure/flora/bush/jungle/b/style_random, +/turf/open/floor/grass, +/area/ruin/syndicate_lava_base/main) +"WW" = ( +/obj/machinery/hydroponics/constructable, +/obj/machinery/door/window/survival_pod/left/directional/west{ + req_access = list("syndicate"); + pixel_x = -4 + }, +/obj/structure/marker_beacon/burgundy, +/turf/open/floor/grass, +/area/ruin/syndicate_lava_base/bar) +"WX" = ( +/obj/effect/turf_decal/trimline/dark/filled/line{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/dark/filled/mid_joiner{ + dir = 8 + }, +/obj/effect/turf_decal/siding/thinplating/dark{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/main) +"WY" = ( +/obj/effect/turf_decal/trimline/dark/filled/line{ + dir = 5 + }, +/obj/effect/turf_decal/trimline/dark/filled/mid_joiner{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/dark/filled/mid_joiner{ + dir = 4 + }, +/obj/structure/marker_beacon/bronze, +/obj/machinery/camera/xray/directional/north{ + color = "#adadcd"; + name = "Inderdyne security camera"; + network = list("Interdyne"); + pixel_x = 10 + }, +/obj/machinery/deepfryer{ + color = "#adadcd"; + name = "Interdyne deep fryer"; + light_color = "#adadcd" + }, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/bar) +"Xa" = ( +/obj/effect/turf_decal/trimline/dark/filled/line, +/obj/effect/turf_decal/trimline/dark/filled/corner{ + dir = 1 + }, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron/dark/small, +/area/ruin/syndicate_lava_base/dormitories) +"Xd" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/duct, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/medbay) +"Xf" = ( +/obj/effect/turf_decal/stripes/red/line{ + dir = 1 + }, +/obj/structure/marker_beacon/burgundy, +/obj/structure/window/reinforced/survival_pod/spawner/directional/north{ + pixel_y = 4 + }, +/obj/effect/turf_decal/trimline/dark/filled/end{ + dir = 1 + }, +/obj/effect/turf_decal/box/red/corners{ + dir = 8 + }, +/obj/effect/turf_decal/box/red/corners, +/obj/effect/mob_spawn/ghost_role/human/interdyne_planetary_base/shaftminer, +/turf/open/floor/iron/dark, +/area/ruin/syndicate_lava_base/arrivals) +"Xg" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 10 + }, +/turf/open/floor/wood/large, +/area/ruin/syndicate_lava_base/main) +"Xh" = ( +/obj/structure/chair/sofa/corp/right{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/dark/filled/line{ + dir = 9 + }, +/obj/effect/turf_decal/trimline/dark/filled/mid_joiner{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/dark/filled/mid_joiner{ + dir = 8 + }, +/obj/machinery/holopad/secure{ + pixel_x = -5; + name = "Interdyne holopad"; + pixel_y = 5 + }, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/testlab) +"Xm" = ( +/obj/structure/table/reinforced/plastitaniumglass, +/obj/item/storage/toolbox/electrical, +/obj/effect/turf_decal/tile/dark/full, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/main) +"Xr" = ( +/obj/machinery/computer/order_console/mining/interdyne, +/obj/effect/turf_decal/tile/dark/full, +/obj/effect/turf_decal/stripes/blue/corner{ + dir = 1 + }, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/cargo) +"Xs" = ( +/obj/structure/window/reinforced/survival_pod/spawner/directional/west{ + pixel_x = -4 + }, +/obj/effect/turf_decal/trimline/dark/filled/corner{ + dir = 4 + }, +/obj/machinery/atmospherics/components/binary/volume_pump{ + dir = 1 + }, +/turf/open/floor/catwalk_floor/iron_dark, +/area/ruin/syndicate_lava_base/main) +"Xv" = ( +/obj/structure/table/reinforced/plastitaniumglass, +/obj/effect/turf_decal/tile/dark/full, +/obj/item/paper_bin{ + pixel_y = 4 + }, +/obj/item/pen{ + pixel_y = 4 + }, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/testlab) +"Xw" = ( +/obj/machinery/portable_atmospherics/canister/oxygen, +/turf/open/floor/catwalk_floor/iron_dark, +/area/ruin/syndicate_lava_base/main) +"Xx" = ( +/obj/effect/turf_decal/trimline/dark/filled/line, +/obj/effect/turf_decal/trimline/dark/filled/line{ + dir = 1 + }, +/turf/open/floor/iron/dark/textured, +/area/ruin/syndicate_lava_base/bar) +"Xy" = ( +/obj/structure/window/reinforced/survival_pod/spawner/directional/north{ + pixel_y = 4 + }, +/obj/effect/turf_decal/box/red/corners, +/obj/effect/turf_decal/box/red/corners{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/dark/filled/end{ + dir = 1 + }, +/obj/structure/marker_beacon/burgundy, +/obj/effect/mob_spawn/ghost_role/human/interdyne_planetary_base/shaftminer, +/turf/open/floor/iron/dark, +/area/ruin/syndicate_lava_base/arrivals) +"Xz" = ( +/obj/effect/turf_decal/trimline/dark/filled/line, +/obj/effect/turf_decal/trimline/dark/filled/corner{ + dir = 1 + }, +/turf/open/floor/iron/dark/textured, +/area/ruin/syndicate_lava_base/bar) +"XD" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/siphon/monitored{ + chamber_id = "interdyneo2"; + dir = 1 + }, +/turf/open/floor/engine/o2, +/area/ruin/syndicate_lava_base/main) +"XF" = ( +/obj/effect/turf_decal/siding/dark/corner{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/dark/filled/line{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/dark/filled/corner, +/turf/open/floor/iron/dark/textured, +/area/ruin/syndicate_lava_base/bar) +"XI" = ( +/obj/effect/turf_decal/trimline/dark/filled/line, +/obj/effect/turf_decal/trimline/dark/filled/corner{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/dark/filled/mid_joiner, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/bar) +"XK" = ( +/obj/effect/turf_decal/trimline/dark/filled/corner, +/obj/effect/turf_decal/trimline/dark/filled/line{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/dark/filled/mid_joiner{ + dir = 1 + }, +/obj/effect/turf_decal/siding/thinplating/dark{ + dir = 1 + }, +/obj/structure/cable, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/main) +"XL" = ( +/obj/machinery/limbgrower/fullupgrade, +/obj/effect/turf_decal/tile/dark/full, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/medbay) +"XM" = ( +/obj/effect/turf_decal/trimline/dark/filled/line{ + dir = 4 + }, +/obj/effect/turf_decal/stripes/blue{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/dark/filled/line{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/dark/filled/mid_joiner{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/dark/filled/mid_joiner{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/medbay) +"XP" = ( +/obj/machinery/light/directional/north{ + bulb_colour = "#AC3CFF"; + color = "#A700FF"; + light_color = "#A700FF" + }, +/obj/effect/turf_decal/siding/wood{ + dir = 1 + }, +/turf/open/floor/wood/large, +/area/ruin/syndicate_lava_base/bar) +"XU" = ( +/obj/structure/disposalpipe/segment, +/turf/closed/wall/r_wall/syndicate/nodiagonal, +/area/ruin/syndicate_lava_base/medbay) +"Yi" = ( +/obj/effect/turf_decal/trimline/dark/filled/line{ + dir = 10 + }, +/obj/effect/turf_decal/trimline/dark/filled/corner{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/dark/filled/mid_joiner, +/obj/effect/turf_decal/trimline/dark/filled/mid_joiner{ + dir = 8 + }, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/bar) +"Yo" = ( +/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/ruin/syndicate_lava_base/testlab) +"Yv" = ( +/obj/effect/turf_decal/tile/dark/full, +/obj/machinery/rnd/production/circuit_imprinter/offstation{ + name = "Interdyne circuit imprinter"; + color = "#adadcd"; + light_color = "#adadcd" + }, +/obj/structure/marker_beacon/burgundy, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/testlab) +"Yw" = ( +/obj/effect/turf_decal/trimline/dark/filled/corner, +/obj/effect/turf_decal/stripes/red/corner, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/cargo) +"YC" = ( +/obj/effect/turf_decal/siding/dark/corner{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/dark/filled/line{ + dir = 10 + }, +/obj/effect/turf_decal/trimline/dark/filled/corner{ + dir = 4 + }, +/turf/open/floor/iron/dark/textured, +/area/ruin/syndicate_lava_base/bar) +"YE" = ( +/obj/structure/curtain/cloth/fancy, +/obj/structure/fake_stairs/wood, +/turf/open/floor/wood/large, +/area/ruin/syndicate_lava_base/bar) +"YF" = ( +/obj/effect/turf_decal/trimline/dark/filled/line{ + dir = 6 + }, +/obj/effect/turf_decal/trimline/dark/filled/corner{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron/dark/textured, +/area/ruin/syndicate_lava_base/dormitories) +"YS" = ( +/obj/effect/spawner/structure/window/reinforced/plasma/plastitanium, +/obj/machinery/door/poddoor{ + id = "interdynexeno"; + name = "Interdyne Storm Shutters Xeno" + }, +/turf/open/floor/plating/reinforced, +/area/ruin/syndicate_lava_base/testlab) +"YT" = ( +/obj/effect/turf_decal/trimline/dark/filled/line{ + dir = 5 + }, +/obj/effect/turf_decal/trimline/dark/filled/mid_joiner{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/dark/filled/mid_joiner{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/medbay) +"YZ" = ( +/obj/effect/turf_decal/siding/wood/corner{ + dir = 4 + }, +/turf/open/floor/wood/large, +/area/ruin/syndicate_lava_base/main) +"Ze" = ( +/obj/effect/turf_decal/trimline/dark/filled/line{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/dark/filled/line, +/obj/effect/turf_decal/stripes/blue, +/obj/effect/turf_decal/trimline/dark/filled/mid_joiner{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/dark/filled/mid_joiner, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/medbay) +"Zf" = ( +/obj/effect/turf_decal/stripes/red/line{ + dir = 9 + }, +/obj/effect/turf_decal/trimline/dark/filled/line{ + dir = 6 + }, +/obj/effect/turf_decal/trimline/dark/filled/mid_joiner{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/dark/filled/mid_joiner, +/obj/machinery/duct, +/obj/structure/window/reinforced/survival_pod/spawner/directional/east{ + pixel_x = 4 + }, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/medbay) +"Zg" = ( +/obj/effect/turf_decal/siding/wood/corner{ + dir = 1 + }, +/obj/structure/chair/sofa/corp/left, +/turf/open/floor/wood/large, +/area/ruin/syndicate_lava_base/bar) +"Zo" = ( +/obj/structure/sign/poster/contraband/syndicate_medical/directional/south, +/obj/effect/turf_decal/trimline/dark/filled/line, +/obj/effect/turf_decal/trimline/dark/filled/corner{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/dark/filled/mid_joiner, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/medbay) +"Zr" = ( +/obj/effect/turf_decal/trimline/dark/filled/corner, +/obj/effect/turf_decal/trimline/dark/filled/corner{ + dir = 1 + }, +/obj/effect/turf_decal/siding/thinplating/dark/corner{ + dir = 1 + }, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 8 + }, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/main) +"Zu" = ( +/obj/effect/turf_decal/trimline/dark/filled/line{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/dark/filled/mid_joiner{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/dark/filled/line{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/dark/filled/mid_joiner{ + dir = 8 + }, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/testlab) +"Zy" = ( +/obj/effect/turf_decal/stripes/red/line{ + dir = 1 + }, +/obj/structure/window/reinforced/survival_pod/spawner/directional/west{ + pixel_x = -4 + }, +/turf/open/floor/engine, +/area/ruin/syndicate_lava_base/testlab) +"Zz" = ( +/obj/structure/marker_beacon/teal, +/obj/structure/fans/tiny/forcefield, +/obj/effect/decal/cleanable/glitter/blue, +/obj/effect/turf_decal/trimline/dark/filled/line{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/window/reinforced/survival_pod/spawner/directional/east{ + pixel_x = 4 + }, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/medbay) +"ZB" = ( +/obj/structure/flora/bush/sparsegrass/style_random, +/turf/open/floor/grass, +/area/ruin/syndicate_lava_base/main) +"ZD" = ( +/obj/effect/turf_decal/trimline/dark/filled/line{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/dark/filled/line{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/dark/filled/mid_joiner{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/dark/filled/mid_joiner{ + dir = 8 + }, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/main) +"ZJ" = ( +/obj/effect/turf_decal/trimline/dark/filled/end, +/obj/item/mop, +/obj/structure/rack, +/obj/item/reagent_containers/cup/bucket, +/obj/item/soap/syndie, +/obj/structure/marker_beacon/bronze, +/turf/open/floor/iron/dark/textured, +/area/ruin/syndicate_lava_base/bar) +"ZQ" = ( +/obj/effect/turf_decal/stripes/blue{ + dir = 1 + }, +/obj/effect/turf_decal/caution/stand_clear/blue, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/medbay) +"ZS" = ( +/obj/machinery/atmospherics/components/binary/volume_pump{ + dir = 4; + name = "BZ Pump" + }, +/obj/structure/window/reinforced/survival_pod/spawner/directional/south, +/obj/effect/turf_decal/trimline/dark/filled/line, +/obj/effect/turf_decal/trimline/dark/filled/line{ + dir = 1 + }, +/turf/open/floor/iron/dark, +/area/ruin/syndicate_lava_base/testlab) +"ZT" = ( +/obj/structure/flora/rock/pile/style_random, +/turf/open/misc/asteroid/basalt/lava_land_surface, +/area/lavaland/surface/outdoors) +"ZU" = ( +/obj/effect/turf_decal/trimline/dark/filled/corner{ + dir = 4 + }, +/obj/effect/turf_decal/box/blue/corners{ + dir = 8 + }, +/obj/structure/cable, +/obj/effect/turf_decal/trimline/dark/filled/corner, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/syndicate_lava_base/main) +"ZX" = ( +/obj/effect/spawner/structure/window/reinforced/plasma/plastitanium, +/turf/open/floor/plating/reinforced, +/area/ruin/syndicate_lava_base/testlab) + +(1,1,1) = {" +CH +CH +CH +CH +CH +CH +CH +CH +CH +CH +CH +CH +CH +CH +CH +Co +Co +Co +Co +Co +Co +Co +Co +Co +Co +Co +Co +Co +Co +Co +Co +Co +Co +Co +Co +Co +Co +Co +Co +Co +Co +Co +CH +CH +CH +CH +CH +CH +CH +CH +CH +CH +CH +CH +CH +CH +CH +"} +(2,1,1) = {" +CH +CH +CH +CH +CH +CH +CH +CH +CH +CH +CH +CH +CH +Co +Co +Co +Co +Co +Co +Co +Co +Co +Co +ZT +BO +BO +fU +Co +Co +hY +ZT +fU +Co +Co +Co +Jt +fU +ZT +Co +Co +Co +Co +Co +Co +CH +CH +CH +CH +CH +CH +CH +CH +CH +CH +CH +CH +CH +"} +(3,1,1) = {" +CH +CH +CH +CH +CH +CH +CH +CH +CH +CH +CH +Co +Co +Co +Co +Co +BO +ZT +Nv +Co +Co +fU +BO +eO +eO +eO +eO +eO +eO +eO +eO +eO +eO +eO +eO +eO +eO +eO +ZT +BO +Co +Co +Co +Co +Co +Co +Co +Co +CH +CH +CH +CH +CH +CH +CH +CH +CH +"} +(4,1,1) = {" +CH +CH +CH +CH +CH +CH +CH +CH +Co +Co +Co +Co +Co +Co +BO +fU +BO +eO +eO +eO +eO +eO +eO +eO +eO +eO +eO +eO +eO +eO +eO +eO +eO +eO +eO +eO +eO +eO +eO +eO +eO +eO +fU +cL +BO +Co +Co +Co +Co +Co +Co +CH +CH +CH +CH +CH +CH +"} +(5,1,1) = {" +CH +CH +CH +CH +CH +Co +Co +Co +Co +Co +Co +BO +cL +BO +BO +eO +eO +eO +eO +eO +eO +eO +eO +eO +eO +ZT +eO +eO +eO +eO +eO +eO +eO +eO +eO +eO +eO +eO +eO +eO +eO +eO +eO +eO +eO +ZT +BO +Co +Co +Co +Co +Co +Co +CH +CH +CH +CH +"} +(6,1,1) = {" +CH +CH +CH +CH +Co +Co +Co +Co +Co +Co +BO +BO +BO +BO +eO +eO +eO +eO +eO +eO +eO +eO +eO +eO +eO +eO +eO +eO +eO +eO +eO +eO +eO +eO +eO +eO +eO +eO +eO +eO +eO +eO +eO +eO +eO +eO +eO +fU +Jt +BO +Co +Co +Co +Co +CH +CH +CH +"} +(7,1,1) = {" +CH +CH +CH +Co +Co +Co +Co +Co +eO +BO +BO +fU +BO +BO +eO +ZT +eO +eO +eO +eO +eO +eO +eO +eO +eO +eO +lx +eO +eO +eO +eO +eO +eO +eO +eO +eO +eO +eO +UO +eO +eO +eO +BO +ZT +eO +eO +eO +eO +eO +eO +BO +Co +Co +Co +CH +CH +CH +"} +(8,1,1) = {" +CH +CH +Co +Co +ZT +Jt +eO +eO +eO +Nv +BO +BO +ZT +eO +eO +eO +eO +eO +ZT +eO +eO +eO +eO +eO +eO +eO +eO +eO +eO +eO +eO +BO +ZT +ZT +eO +eO +eO +eO +eO +eO +eO +eO +eO +eO +eO +eO +eO +eO +eO +eO +eO +fU +hY +Co +Co +CH +CH +"} +(9,1,1) = {" +CH +Co +Co +eO +BO +eO +eO +eO +eO +eO +BO +eO +eO +eO +eO +eO +eO +BO +BO +eO +eO +eO +eO +eO +eO +eO +eO +eC +JV +JV +YS +YS +YS +YS +JV +kg +kg +Du +eO +eO +eO +eO +eO +eO +eO +eO +eO +eO +eO +eO +eO +eO +BO +BO +Co +Co +CH +"} +(10,1,1) = {" +CH +Co +eO +eO +eO +eO +eO +ZT +eO +eO +eO +eO +eO +eO +eO +eO +eO +ZT +eO +eO +eO +eO +eO +eO +eO +eC +JV +JV +mi +HD +VU +Qt +IR +dW +JV +yN +AT +yN +eg +Si +eO +eO +eO +eO +eO +eO +eO +eO +eO +eO +eO +eO +eO +ZT +BO +Co +CH +"} +(11,1,1) = {" +CH +Co +eO +ku +vT +vT +HQ +HQ +vT +Nx +eO +eO +eO +eO +eO +eO +eO +eO +eO +eO +eO +BO +ZT +lV +lV +JV +JV +ft +zd +bA +jv +Qt +IR +qM +JV +hK +JS +If +eg +eg +eg +Si +ZT +BO +eO +eO +eO +eO +eO +eO +eO +eO +eO +eO +ZT +Co +CH +"} +(12,1,1) = {" +CH +Co +eO +zn +uH +sf +BZ +sf +uH +mo +eO +BO +eO +eO +eO +eO +eO +lx +eO +eO +BO +DT +DT +Vn +gd +uj +JV +Mp +jl +Pk +Zy +hx +na +na +JV +Fb +Jm +yA +eg +Gf +PY +eg +eg +hV +ZT +eO +eO +UO +eO +eO +eO +eO +eO +eO +BO +Co +CH +"} +(13,1,1) = {" +Co +Co +eO +zn +BZ +BZ +BZ +BZ +pu +mo +eO +BO +ZT +eO +eO +eO +eO +eO +eO +eO +DT +Kd +Xv +Xh +uk +OF +UZ +OF +xR +JL +jv +Qt +IR +IR +JV +Xf +Bc +eh +eg +GF +YC +QP +Tm +yJ +hV +eO +eO +eO +eO +eO +eO +BO +eO +eO +fU +Co +CH +"} +(14,1,1) = {" +Co +Co +eO +yt +sf +nr +BZ +nr +sf +te +ZT +BO +eO +eO +eO +eO +eO +eO +eO +DT +Qi +xh +SC +no +Yo +cc +io +RD +vn +NA +Zy +hx +na +na +JV +oT +Jm +it +eg +kO +Pf +db +Fd +jX +Yi +hV +eO +eO +eO +eO +ZT +BO +eO +eO +eO +Co +Co +"} +(15,1,1) = {" +Co +Co +eO +yt +pu +BZ +BZ +BZ +BZ +te +hY +BO +eO +eO +eO +eO +eO +eO +DT +qe +Tl +Yv +Pe +bn +cc +az +JV +ne +uw +es +jv +Qt +IR +IR +JV +ut +Bc +Sr +eg +sm +Fn +aI +ie +Mr +dn +jz +hV +eO +eO +eO +BO +ZT +eO +eO +eO +Co +Co +"} +(16,1,1) = {" +Co +eO +eO +oh +sf +nr +BZ +nr +sf +te +ZT +eO +eO +eO +eO +eO +eO +DT +Qi +Gr +EV +nG +nG +no +QQ +DK +JV +IL +Wx +ZS +Kv +dG +dG +IB +JV +oT +Jm +hc +eg +eH +sl +JK +kL +MN +BM +nE +ru +hV +eO +eO +BO +eO +eO +eO +eO +BO +Co +"} +(17,1,1) = {" +Co +eO +eO +oh +pu +BZ +BZ +BZ +BZ +te +eO +eO +eO +eO +eO +eO +eO +DT +jG +xt +EH +xE +CR +bn +QQ +mr +JV +Hh +Gw +qE +DD +uJ +uJ +xH +JV +Xy +LS +PZ +eg +sm +Fn +aI +Vj +Ff +rm +hh +en +eg +eO +eO +eO +eO +eO +eO +Nv +ZT +Co +"} +(18,1,1) = {" +Co +Co +eO +oh +sf +nr +BZ +nr +sf +Lr +eO +eO +eO +eO +eO +eO +DT +bx +Ox +Vi +lR +PW +Hs +kp +QQ +JV +JV +JV +JV +JV +ZX +ZX +ZX +ZX +JV +rI +Ho +In +eg +WW +VZ +ry +XF +QF +Br +JJ +qD +eg +Si +eO +eO +eO +eO +eO +BO +Co +Co +"} +(19,1,1) = {" +Co +Co +eO +oh +BZ +BZ +BZ +BZ +pu +Lr +eO +eO +eO +eO +eO +eO +DT +JM +TC +Sc +lr +Rm +Dt +bn +Ba +JV +vb +gU +AQ +Jq +DU +KG +yU +Xg +nH +bz +Et +iP +iP +jP +jP +lA +Vz +eg +WY +mF +kD +Sz +eg +eO +eO +eO +eO +eO +eO +Co +Co +"} +(20,1,1) = {" +Co +eO +eO +oh +uH +sf +BZ +sf +uH +Lr +eO +eO +eO +eO +eO +eC +JV +UB +ee +TS +Zu +Lg +zm +An +Of +JV +iL +It +ZB +tx +cw +LQ +LQ +uR +Qb +Fc +OP +SG +LQ +uX +dd +dd +Gj +sS +RM +Wu +aX +XI +eg +Si +eO +eO +eO +eO +eO +Co +Co +"} +(21,1,1) = {" +Co +fU +eO +bX +KR +EE +xB +EE +EE +rW +eO +eO +eO +eO +eO +JV +JV +JV +JV +JV +JV +pt +dD +bn +rk +Nq +tx +KN +Qb +dR +Oc +Bt +PT +bS +El +El +kU +lJ +RH +jx +rz +YZ +kc +dd +sS +eg +RQ +rP +ZJ +eg +eO +eO +UO +eO +eO +fU +Co +"} +(22,1,1) = {" +Co +BO +eO +BO +ZT +eO +pN +eO +eO +eO +eO +eO +eO +eO +cZ +vm +vm +vJ +zv +uu +cZ +JV +JV +hk +qR +ec +AN +vR +El +vF +lJ +Ii +Ii +Ii +Ii +Wf +df +Wf +pq +pq +pq +eR +YZ +dd +dd +Si +eg +zy +eg +eg +Si +eO +eO +eO +eO +BO +Co +"} +(23,1,1) = {" +Co +cL +eO +ZT +eO +eO +pN +eO +eO +eO +LE +eO +eO +cZ +vm +vm +FQ +yO +HF +GE +PA +cd +bp +Sg +Pl +Om +bS +lJ +ui +ZB +Ii +IP +JU +nz +zZ +WX +sh +fP +NI +Ug +lq +pq +LW +YZ +Lu +Sf +DJ +TD +kr +Si +eg +eO +eO +eO +eO +Co +Co +"} +(24,1,1) = {" +Co +CM +eO +eO +eO +eO +pN +eO +eO +eO +eO +eO +eO +vm +vm +vm +vm +lD +gy +DS +zh +Cq +kP +Pl +PP +vm +gU +vQ +eb +Ii +kB +Zr +xa +Qu +Qj +ny +ZU +MX +pG +Xs +WC +pq +ER +Bk +Ds +yT +wV +mF +Kt +yJ +kY +eO +eO +eO +eO +BO +Co +"} +(25,1,1) = {" +Co +BO +ZT +eO +zr +eO +pN +eO +yE +eO +eO +eO +SE +vm +pc +vA +vm +bH +Rs +eS +Cn +xD +Lq +zY +qr +vm +pq +pq +pq +sS +XK +hi +KZ +oN +bk +by +rw +of +lI +Wc +nh +pq +eg +jn +Ds +SL +FG +RK +Xx +to +kY +ZT +eO +eO +eO +ZT +Co +"} +(26,1,1) = {" +Co +BO +BO +BO +DY +Rd +oU +Rd +zQ +Rd +Rd +Rd +cz +dQ +Nf +dA +oP +Nf +xG +MO +ij +as +Ro +Cb +Qy +yW +pq +Gc +jE +pq +xW +PX +nv +LX +EI +Kw +OQ +Xm +BY +hl +XD +pq +TF +Zg +Ds +SL +sg +ni +Xz +to +kY +BO +eO +eO +eO +Co +Co +"} +(27,1,1) = {" +Co +BO +BO +BO +Kh +nr +nr +nr +nr +nr +nr +nr +ID +dQ +Eh +Pd +DP +Eh +mj +mj +xZ +SR +iu +kk +Qy +Qy +pq +wA +ZD +Bu +hC +PX +jH +oD +bP +kv +cq +MT +oH +iZ +Ny +pq +XP +Sw +Ds +SL +kh +Sq +se +Rn +kY +ZT +eO +eO +ZT +fU +Co +"} +(28,1,1) = {" +Co +ZT +BO +BO +Ph +EE +EE +EE +Rf +EE +EE +EE +Iw +gh +FO +NH +DP +Oh +Yw +Hd +Hk +QZ +Ro +Cb +Qy +Qy +pq +Tk +bv +pq +JB +PX +Rj +wl +ty +SZ +iH +Fk +BY +yM +pY +pq +nB +Jz +Ds +SL +rS +wS +vS +Lf +kY +Nv +eO +eO +BO +Co +Co +"} +(29,1,1) = {" +Co +BO +BO +BO +pn +eO +eO +eO +ap +eO +eO +eO +vI +vm +qN +Cl +vm +Ec +WL +CS +OS +gI +xc +Md +oC +vm +pq +pq +pq +sS +Jn +Lp +Pz +oN +bk +by +rw +Ld +He +ev +gB +pq +eg +sI +Ap +hf +Mo +PV +Xx +mS +kY +BO +eO +eO +BO +Co +Co +"} +(30,1,1) = {" +Co +Nv +BO +BO +eO +eO +eO +eO +eO +eO +eO +eO +eO +vm +vm +vm +vm +Na +zV +Od +Px +qH +TJ +ql +dF +vm +Ao +HM +QD +Ii +Gt +oS +rA +qb +il +Bm +lH +Rb +Bl +BE +Mj +pq +LT +Bk +Ds +Cc +DJ +Ly +gE +KB +kY +eO +eO +eO +eO +Co +Co +"} +(31,1,1) = {" +Co +BO +BO +BO +eO +eO +eO +eO +eO +eO +lx +eO +eO +cZ +vm +vm +Ef +fm +fp +PF +Cu +Jb +NB +uQ +ql +UN +bz +Xg +ZB +BX +Ii +WG +TT +wa +FS +mT +hW +KA +OB +NR +Xw +pq +TO +Ry +Lu +Sf +wV +ML +wb +Si +eg +eO +eO +eO +eO +Co +Co +"} +(32,1,1) = {" +Co +BO +BO +BO +BO +eO +eO +eO +eO +eO +eO +eO +eO +ZT +cZ +vm +vm +vy +NU +Xr +cZ +VP +VP +GR +aT +DM +AN +UF +iP +Pb +Xg +Ii +Ii +Ii +Ii +Wf +df +Wf +pq +pq +pq +KE +Ry +dd +dd +Si +eg +KQ +eg +eg +Si +eO +eO +eO +eO +Jt +Co +"} +(33,1,1) = {" +Co +fU +BO +ZT +BO +Jt +eO +eO +eO +eO +eO +eO +ZT +IN +HP +XU +XU +Ia +VP +VP +VP +VY +ul +yj +oF +lc +VS +uY +LQ +uX +Oc +gm +hI +bz +iP +iP +Qb +Xg +Ve +AY +yU +Ry +kc +dd +sS +FZ +wU +iT +ot +eg +eO +eO +co +eO +eO +fU +Co +"} +(34,1,1) = {" +Co +ZT +BO +BO +BO +BO +eO +eO +eO +eO +eO +eO +BO +ZT +Jt +Qx +VP +Cw +ha +aW +qa +UE +VN +RB +eN +VP +PB +VT +ui +VS +zq +Qb +Qb +cw +LQ +sj +kc +fg +Qb +dR +dd +dd +cN +sS +eg +dw +gO +AM +eg +Si +eO +eO +eO +eO +eO +ZT +Co +"} +(35,1,1) = {" +Co +Co +BO +BO +BO +BO +BO +eO +eO +eO +eO +eO +eO +BO +BO +ZT +Sl +hH +Vm +fw +GK +WJ +nW +GG +Zo +VP +Fq +gU +WS +ZB +MF +GT +rz +lJ +MJ +bS +pk +El +El +El +gV +fK +fn +eg +gR +Uw +EA +aL +eg +eO +eO +eO +eO +eO +eO +ZT +Co +"} +(36,1,1) = {" +CH +Co +Co +BO +BO +ZT +BO +BO +eO +eO +eO +eO +eO +eO +eO +BO +Sl +tn +PE +am +qa +Wy +OX +So +iW +VP +VP +VP +VP +VP +qa +qa +qa +qa +VP +fe +tY +fe +Pv +Pv +Pv +eg +eg +sb +Ds +YE +Ds +eg +Si +eO +eO +BO +eO +eO +eO +Co +Co +"} +(37,1,1) = {" +CH +Co +Co +BO +fU +BO +BO +ZT +eO +eO +eO +eO +eO +eO +eO +eO +BO +Sl +Tp +aA +pP +ef +cv +ay +Ru +qy +xy +Nr +Eb +VH +Ok +GB +yi +on +VP +UA +ur +Pv +jR +Aj +Pv +yw +lW +sD +iT +yS +Tf +tS +eO +eO +eO +ZT +eO +eO +eO +BO +Co +"} +(38,1,1) = {" +CH +Co +Co +Co +ZT +BO +BO +BO +BO +eO +eO +eO +eO +eO +eO +eO +eO +Sl +UU +RJ +UD +PG +wP +yF +DW +UD +SH +EQ +qK +JW +XM +vV +KM +Ov +VP +oQ +ur +Pv +je +Vx +Pv +yS +EA +Vc +AM +yS +fy +tS +eO +eO +eO +eO +eO +eO +eO +ZT +Co +"} +(39,1,1) = {" +CH +CH +Co +Co +Co +BO +Jt +BO +ZT +eO +eO +eO +eO +eO +eO +eO +eO +eO +Sl +qL +kV +nm +Ns +ZQ +wB +UD +Bb +Ze +wY +yI +so +Ci +vv +Zf +VP +HH +vX +Hf +YF +Fj +Pv +eg +xe +md +ND +yS +tS +eO +eO +eO +eO +BO +eO +eO +eO +cS +Co +"} +(40,1,1) = {" +CH +CH +CH +Co +Co +Co +Co +BO +BO +BO +eO +eO +eO +eO +eO +eO +eO +eO +eO +Sl +mE +mh +an +Hn +aR +xV +sV +rc +AJ +iw +AJ +nI +aV +tG +PD +nu +qA +Pv +Pv +Pv +Pv +yS +oM +Mh +Vl +tS +eO +eO +eO +eO +ZT +BO +eO +eO +eO +Co +Co +"} +(41,1,1) = {" +CH +CH +CH +Co +Co +Co +Co +BO +BO +BO +BO +ZT +eO +eO +eO +eO +eO +eO +eO +eO +Sl +eA +nC +ey +YT +cj +Zz +bJ +iD +wT +iD +iD +Xd +nc +Zz +fN +xX +CT +rs +Aj +Pv +ox +Tf +pK +tS +eO +eO +eO +eO +eO +eO +eO +eO +eO +hY +Co +Co +"} +(42,1,1) = {" +CH +CH +CH +CH +CH +Co +Co +fU +BO +BO +BO +Jt +BO +eO +eO +eO +hY +LE +eO +eO +eO +Sl +VP +VP +XL +yc +VP +Hj +jO +ep +WM +bo +Ub +aB +VP +Pv +re +Pv +iX +Dk +Pv +eg +tS +tS +eO +eO +eO +co +BO +eO +eO +eO +eO +BO +Co +Co +Co +"} +(43,1,1) = {" +CH +CH +CH +CH +CH +CH +Co +Co +Nv +BO +BO +BO +ZT +eO +eO +eO +eO +ZT +eO +eO +eO +BO +ZT +Qx +VP +VP +VP +VP +tT +xr +cg +GX +jb +II +VP +wF +Xa +Pv +WR +Pv +Pv +Si +ZT +eO +eO +eO +eO +ZT +BO +eO +eO +eO +eO +BO +Co +Co +CH +"} +(44,1,1) = {" +CH +CH +CH +CH +CH +CH +CH +Co +Co +BO +BO +BO +BO +eO +eO +eO +eO +eO +eO +eO +eO +eO +BO +Nv +ZT +Qx +VP +VP +fi +Mg +Ui +Ar +RU +OO +VP +iB +LB +Pv +Pv +lS +ZT +BO +eO +eO +eO +eO +eO +eO +eO +eO +eO +eO +eO +BO +Co +Co +CH +"} +(45,1,1) = {" +CH +CH +CH +CH +CH +CH +CH +CH +Co +Co +BO +BO +BO +BO +eO +eO +eO +eO +eO +eO +eO +eO +eO +eO +eO +eO +eO +Qx +VP +VP +kI +kI +kI +kI +VP +kt +Pv +lS +eO +ZT +BO +eO +eO +eO +eO +eO +eO +eO +eO +eO +eO +eO +fU +Co +Co +CH +CH +"} +(46,1,1) = {" +CH +CH +CH +CH +CH +CH +CH +CH +Co +Co +Co +fU +BO +BO +BO +eO +eO +eO +eO +eO +eO +eO +eO +eO +eO +eO +eO +eO +ZT +BO +eO +eO +eO +eO +BO +ZT +eO +eO +eO +eO +eO +eO +eO +eO +eO +eO +eO +eO +eO +eO +eO +ZT +Co +Co +Co +CH +CH +"} +(47,1,1) = {" +CH +CH +CH +CH +CH +CH +CH +CH +CH +Co +Co +Co +Co +BO +BO +BO +eO +eO +eO +eO +eO +eO +eO +eO +eO +eO +LE +eO +eO +eO +eO +eO +eO +eO +eO +eO +eO +eO +co +eO +eO +eO +eO +eO +eO +eO +eO +eO +eO +cL +BO +Co +Co +Co +CH +CH +CH +"} +(48,1,1) = {" +CH +CH +CH +CH +CH +CH +CH +CH +CH +CH +CH +Co +Co +Jt +BO +BO +BO +BO +eO +eO +eO +eO +eO +eO +eO +eO +eO +eO +eO +eO +eO +eO +eO +eO +eO +eO +eO +eO +eO +eO +eO +eO +eO +eO +eO +eO +eO +eO +BO +Co +Co +Co +CH +CH +CH +CH +CH +"} +(49,1,1) = {" +CH +CH +CH +CH +CH +CH +CH +CH +CH +CH +CH +CH +Co +ZT +Co +BO +BO +BO +BO +BO +eO +eO +eO +eO +eO +eO +eO +eO +eO +eO +eO +eO +eO +BO +BO +eO +eO +eO +eO +eO +eO +eO +eO +ZT +eO +BO +BO +fU +Co +Co +Co +CH +CH +CH +CH +CH +CH +"} +(50,1,1) = {" +CH +CH +CH +CH +CH +CH +CH +CH +CH +CH +CH +CH +Co +Co +Co +BO +BO +fU +cL +ZT +BO +BO +ZT +eO +eO +BO +ZT +eO +eO +eO +eO +eO +BO +Jt +ZT +BO +BO +BO +eO +ZT +BO +eO +Co +Co +Co +Co +Co +Co +Co +CH +CH +CH +CH +CH +CH +CH +CH +"} +(51,1,1) = {" +CH +CH +CH +CH +CH +CH +CH +CH +CH +CH +CH +CH +CH +CH +Co +Co +Co +Co +Co +Co +Co +Co +BO +fU +ZT +Co +Co +Co +BO +fU +Nv +ZT +PC +lh +Jh +fU +Co +BO +Jt +BO +fU +Co +Co +Co +Co +Co +Co +CH +CH +CH +CH +CH +CH +CH +CH +CH +CH +"} +(52,1,1) = {" +CH +CH +CH +CH +CH +CH +CH +CH +CH +CH +CH +CH +CH +CH +CH +Co +Co +Co +Co +Co +Co +Co +Co +Co +Co +Co +Co +Co +Co +Co +Co +Co +Co +Co +Co +Co +Co +Co +Co +Co +Co +Co +Co +Co +CH +CH +CH +CH +CH +CH +CH +CH +CH +CH +CH +CH +CH +"} diff --git a/_maps/RandomRuins/LavaRuins/lavaland_biodome_beach.dmm b/_maps/RandomRuins/LavaRuins/lavaland_biodome_beach.dmm index 127267c24eb..42f5441e35a 100644 --- a/_maps/RandomRuins/LavaRuins/lavaland_biodome_beach.dmm +++ b/_maps/RandomRuins/LavaRuins/lavaland_biodome_beach.dmm @@ -286,7 +286,7 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer4{ dir = 4 }, -/obj/item/bedsheet/dorms{ +/obj/effect/spawner/random/bedsheet{ dir = 4 }, /obj/structure/bed{ @@ -524,8 +524,8 @@ /turf/closed/wall/mineral/sandstone, /area/ruin/powered/beach) "qK" = ( -/obj/structure/closet/secure_closet/bar/lavaland_bartender_clothes, /obj/machinery/light/small/directional/east, +/obj/structure/closet/secure_closet/bar/lavaland_bartender_clothes, /turf/open/floor/wood, /area/ruin/powered/beach) "qT" = ( diff --git a/_maps/RandomRuins/LavaRuins/lavaland_surface_ore_vent.dmm b/_maps/RandomRuins/LavaRuins/lavaland_surface_ore_vent.dmm new file mode 100644 index 00000000000..6379b7f084b --- /dev/null +++ b/_maps/RandomRuins/LavaRuins/lavaland_surface_ore_vent.dmm @@ -0,0 +1,27 @@ +//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE +"a" = ( +/turf/template_noop, +/area/template_noop) +"l" = ( +/turf/open/misc/asteroid/basalt/lava_land_surface, +/area/lavaland/surface/outdoors) +"L" = ( +/obj/structure/ore_vent/random, +/turf/open/misc/asteroid/basalt/lava_land_surface, +/area/lavaland/surface/outdoors) + +(1,1,1) = {" +a +l +a +"} +(2,1,1) = {" +l +L +l +"} +(3,1,1) = {" +a +l +a +"} diff --git a/_maps/RandomRuins/LavaRuins/lavaland_surface_phonebooth.dmm b/_maps/RandomRuins/LavaRuins/lavaland_surface_phonebooth.dmm index b3386c8bcf4..d4ebe90811f 100644 --- a/_maps/RandomRuins/LavaRuins/lavaland_surface_phonebooth.dmm +++ b/_maps/RandomRuins/LavaRuins/lavaland_surface_phonebooth.dmm @@ -4,10 +4,8 @@ /turf/open/floor/iron/dark, /area/ruin/powered/lavaland_phone_booth) "c" = ( -/obj/machinery/door/window{ - dir = 1 - }, -/obj/machinery/door/window, +/obj/machinery/door/window/left/directional/north, +/obj/machinery/door/window/left/directional/south, /turf/open/floor/iron/dark/smooth_edge, /area/ruin/powered/lavaland_phone_booth) "e" = ( diff --git a/_maps/RandomRuins/LavaRuins/lavaland_surface_syndicate_base1.dmm b/_maps/RandomRuins/LavaRuins/lavaland_surface_syndicate_base1.dmm index 7497b5bb907..fb738781bc7 100644 --- a/_maps/RandomRuins/LavaRuins/lavaland_surface_syndicate_base1.dmm +++ b/_maps/RandomRuins/LavaRuins/lavaland_surface_syndicate_base1.dmm @@ -62,9 +62,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/orange/visible/layer4, /turf/open/floor/iron, /area/ruin/syndicate_lava_base/engineering) -"aL" = ( -/turf/closed/wall/mineral/plastitanium/explosive, -/area/ruin/syndicate_lava_base/testlab) "aM" = ( /obj/effect/turf_decal/stripes/line{ dir = 8 @@ -650,8 +647,7 @@ /obj/machinery/door/window/left/directional/south{ name = "Chemistry" }, -/obj/machinery/door/window/left/directional/south{ - dir = 1; +/obj/machinery/door/window/left/directional/north{ name = "Chemistry"; req_access = list("syndicate") }, @@ -2636,7 +2632,7 @@ "zC" = ( /obj/structure/cable, /obj/effect/turf_decal/stripes/end, -/obj/machinery/door/window/brigdoor{ +/obj/machinery/door/window/brigdoor/left/directional/south{ name = "Turbine Access" }, /obj/machinery/light/small/directional/west, @@ -3128,10 +3124,7 @@ /turf/open/floor/iron, /area/ruin/syndicate_lava_base/arrivals) "FX" = ( -/obj/machinery/door/window/left/directional/south{ - base_state = "right"; - dir = 1; - icon_state = "right"; +/obj/machinery/door/window/right/directional/north{ name = "Bar" }, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -5700,7 +5693,7 @@ pa pa ae ae -aL +ae ae ae ae @@ -5999,7 +5992,7 @@ ab ab as as -as +PW dI NE ew diff --git a/_maps/RandomRuins/LavaRuins/nova/lavaland_surface_interdyne_base1.dmm b/_maps/RandomRuins/LavaRuins/nova/lavaland_surface_interdyne_base1.dmm index d7e92431cf8..0e4e788b379 100644 --- a/_maps/RandomRuins/LavaRuins/nova/lavaland_surface_interdyne_base1.dmm +++ b/_maps/RandomRuins/LavaRuins/nova/lavaland_surface_interdyne_base1.dmm @@ -282,14 +282,13 @@ "aV" = ( /obj/structure/closet/secure_closet/personal/wall{ pixel_y = 30; - pixel_w = 0; icon_door = "locker_wall" }, /turf/open/floor/iron/smooth_edge, /area/ruin/interdyne_planetary_base/cargo) "aW" = ( /obj/structure/bed, -/obj/item/bedsheet/dorms, +/obj/effect/spawner/random/bedsheet, /turf/open/floor/iron/smooth_large, /area/ruin/interdyne_planetary_base/cargo) "aX" = ( @@ -810,7 +809,6 @@ "cf" = ( /obj/structure/closet/secure_closet/personal/wall{ pixel_y = -30; - pixel_w = 0; icon_door = "locker_wall" }, /turf/open/floor/iron/smooth_edge{ @@ -1315,9 +1313,7 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/firealarm/directional/north{ - dir = 1 - }, +/obj/machinery/firealarm/directional/north, /turf/open/floor/catwalk_floor/iron_dark, /area/ruin/interdyne_planetary_base/main) "dr" = ( @@ -1328,9 +1324,7 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/cable, -/obj/machinery/firealarm/directional/north{ - dir = 1 - }, +/obj/machinery/firealarm/directional/north, /obj/machinery/light/directional/north, /obj/structure/disposalpipe/segment{ dir = 6 @@ -1528,7 +1522,7 @@ /turf/open/floor/iron/dark/textured_large, /area/ruin/interdyne_planetary_base/med/viro) "dM" = ( -/obj/machinery/door/window/survival_pod{ +/obj/machinery/door/window/survival_pod/left/directional/south{ req_access = list("syndicate") }, /turf/open/floor/iron/dark/textured_large, @@ -1552,7 +1546,7 @@ "dQ" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/cable, -/obj/machinery/door/window/survival_pod{ +/obj/machinery/door/window/survival_pod/left/directional/south{ req_access = list("syndicate") }, /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, @@ -2149,9 +2143,7 @@ /turf/open/floor/catwalk_floor/iron_dark, /area/ruin/interdyne_planetary_base/science) "fw" = ( -/obj/machinery/firealarm/directional/north{ - dir = 1 - }, +/obj/machinery/firealarm/directional/north, /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ dir = 8 }, @@ -2579,7 +2571,6 @@ /obj/machinery/button/door/directional/south{ name = "window security button"; pixel_x = -24; - pixel_w = 0; id = "interdynesciencehall"; req_access = list("syndicate") }, @@ -2598,7 +2589,6 @@ /obj/machinery/button/door/directional/south{ name = "window security button"; pixel_x = 24; - pixel_w = 0; id = "interdynesciencehall"; req_access = list("syndicate") }, @@ -3021,10 +3011,8 @@ "hG" = ( /obj/machinery/door/firedoor, /obj/structure/table/reinforced, -/obj/machinery/door/window/survival_pod{ - dir = 1 - }, -/obj/machinery/door/window/survival_pod{ +/obj/machinery/door/window/survival_pod/left/directional/north, +/obj/machinery/door/window/survival_pod/left/directional/south{ req_access = list("syndicate") }, /turf/open/floor/iron/dark/textured_large, @@ -3129,8 +3117,7 @@ /turf/open/floor/iron/dark/textured_large, /area/ruin/interdyne_planetary_base/science/xeno) "hU" = ( -/obj/machinery/door/window/survival_pod{ - dir = 4; +/obj/machinery/door/window/survival_pod/left/directional/east{ req_access = list("syndicate") }, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -3379,7 +3366,7 @@ }, /area/ruin/interdyne_planetary_base/science/xeno) "iz" = ( -/obj/machinery/door/window/survival_pod{ +/obj/machinery/door/window/survival_pod/left/directional/south{ name = "Slime Euthanization Chamber"; req_access = list("syndicate") }, @@ -3411,7 +3398,6 @@ /area/ruin/interdyne_planetary_base/med/pharm) "iD" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron/white/textured_large, /area/ruin/interdyne_planetary_base/med/pharm) @@ -3545,7 +3531,7 @@ "iU" = ( /obj/structure/fans/tiny, /obj/machinery/atmospherics/pipe/smart/manifold4w/general/hidden, -/obj/machinery/door/window/survival_pod{ +/obj/machinery/door/window/survival_pod/left/directional/south{ name = "Slime Pacification Chamber"; req_access = list("syndicate") }, @@ -4360,12 +4346,12 @@ /area/ruin/interdyne_planetary_base/main/dorms) "kV" = ( /obj/structure/bed, -/obj/item/bedsheet/dorms, +/obj/effect/spawner/random/bedsheet, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/smooth_large, /area/ruin/interdyne_planetary_base/main/dorms) "kW" = ( -/obj/item/bedsheet/dorms{ +/obj/effect/spawner/random/bedsheet{ dir = 4 }, /obj/structure/bed{ @@ -4526,9 +4512,7 @@ /turf/open/floor/iron/dark/textured_large, /area/ruin/interdyne_planetary_base/eng) "lr" = ( -/obj/structure/weightmachine{ - dir = 2 - }, +/obj/structure/weightmachine, /obj/effect/turf_decal/siding/dark{ dir = 4 }, @@ -4710,7 +4694,7 @@ }, /obj/item/serviette_used, /obj/item/shard/plastitanium, -/obj/item/valentine, +/obj/item/paper/valentine, /obj/machinery/light/small/directional/west, /turf/open/floor/plating/reinforced, /area/ruin/interdyne_planetary_base/eng/disp) @@ -4771,7 +4755,6 @@ pixel_x = 30 }, /obj/machinery/button/door/directional/north{ - pixel_x = 0; id = "interdynecabin4"; name = "door bolt control"; specialfunctions = 4; @@ -4931,9 +4914,7 @@ /area/ruin/interdyne_planetary_base/eng) "mj" = ( /obj/effect/turf_decal/stripes/white/line, -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ - dir = 2 - }, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, /turf/open/floor/iron/dark/textured_large, /area/ruin/interdyne_planetary_base/eng) "mk" = ( @@ -5046,10 +5027,8 @@ "mC" = ( /obj/machinery/door/firedoor, /obj/structure/table/reinforced, -/obj/machinery/door/window/survival_pod{ - dir = 1 - }, -/obj/machinery/door/window/survival_pod{ +/obj/machinery/door/window/survival_pod/left/directional/north, +/obj/machinery/door/window/survival_pod/left/directional/south{ req_access = list("syndicate") }, /obj/effect/turf_decal/siding/thinplating/dark/corner{ @@ -6036,12 +6015,10 @@ "oU" = ( /obj/structure/table/reinforced, /obj/machinery/door/firedoor, -/obj/machinery/door/window/survival_pod{ - dir = 4; +/obj/machinery/door/window/survival_pod/left/directional/east{ req_access = list("syndicate") }, -/obj/machinery/door/window/survival_pod{ - dir = 8; +/obj/machinery/door/window/survival_pod/left/directional/west{ req_access = list("syndicate") }, /turf/open/floor/iron/dark/textured_large, @@ -6138,8 +6115,7 @@ /area/ruin/interdyne_planetary_base/main/dorms) "ph" = ( /obj/machinery/vending/dorms{ - onstation = 0; - extended_inventory = 0 + onstation = 0 }, /turf/open/floor/catwalk_floor/iron_dark, /area/ruin/interdyne_planetary_base/main/dorms) @@ -6286,9 +6262,7 @@ /turf/open/floor/iron/white/textured_large, /area/ruin/interdyne_planetary_base/med) "py" = ( -/obj/machinery/processor{ - pixel_z = 0 - }, +/obj/machinery/processor, /obj/structure/table/reinforced, /turf/open/floor/iron/dark/textured_large, /area/ruin/interdyne_planetary_base/serv/kitchen) @@ -6317,6 +6291,7 @@ /area/ruin/interdyne_planetary_base/serv/hydr) "pC" = ( /obj/machinery/hydroponics/constructable, +/obj/machinery/door/window/survival_pod/left/directional/south, /turf/open/floor/iron/dark/textured_large, /area/ruin/interdyne_planetary_base/serv/hydr) "pD" = ( @@ -6574,6 +6549,13 @@ initial_gas_mix = "LAVALAND_ATMOS" }, /area/lavaland/surface/outdoors) +"tA" = ( +/obj/machinery/hydroponics/constructable{ + dir = 4 + }, +/obj/machinery/door/window/survival_pod/left/directional/south, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/interdyne_planetary_base/serv/hydr) "tG" = ( /obj/structure/shipping_container/kosmologistika{ pixel_y = -14 @@ -6601,7 +6583,6 @@ dir = 4 }, /obj/machinery/button/door/directional/north{ - pixel_x = 0; id = "interdynecabin3"; name = "door bolt control"; specialfunctions = 4; @@ -6735,6 +6716,10 @@ /obj/machinery/hydroponics/constructable{ dir = 8 }, +/obj/machinery/door/window/survival_pod/left/directional/south, +/obj/machinery/door/window/survival_pod/left/directional/east{ + req_access = list("syndicate_leader") + }, /turf/open/floor/iron/dark/textured_large, /area/ruin/interdyne_planetary_base/serv/hydr) "LH" = ( @@ -6773,6 +6758,13 @@ }, /turf/closed/wall/r_wall/syndicate/nodiagonal, /area/ruin/interdyne_planetary_base) +"PN" = ( +/obj/machinery/hydroponics/constructable{ + dir = 8 + }, +/obj/machinery/door/window/survival_pod/left/directional/south, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/interdyne_planetary_base/serv/hydr) "Qm" = ( /obj/structure/shipping_container/donk_co{ pixel_x = -1; @@ -6802,6 +6794,15 @@ initial_gas_mix = "LAVALAND_ATMOS" }, /area/lavaland/surface/outdoors) +"UZ" = ( +/obj/machinery/hydroponics/constructable{ + dir = 8 + }, +/obj/machinery/door/window/survival_pod/left/directional/east{ + req_access = list("syndicate_leader") + }, +/turf/open/floor/iron/dark/textured_large, +/area/ruin/interdyne_planetary_base/serv/hydr) "Vf" = ( /obj/effect/baseturf_helper/reinforced_plating, /turf/closed/wall/r_wall/syndicate/nodiagonal, @@ -6845,7 +6846,6 @@ /turf/open/floor/stone, /area/ruin/interdyne_planetary_base/serv/hydr) "XP" = ( -/obj/structure/pod, /obj/effect/supplypod_rubble, /turf/open/floor/plating/reinforced{ initial_gas_mix = "LAVALAND_ATMOS" @@ -8976,7 +8976,7 @@ nz ox oV pC -sa +tA pH mD ac @@ -9095,7 +9095,7 @@ oz oX Ls Ls -Ls +UZ mD ac ac @@ -9152,8 +9152,8 @@ nX ot oz oX -sa -sa +tA +tA sa mD ac @@ -9270,8 +9270,8 @@ nY ou oZ pl -Ls -Ls +PN +PN pI mD ac diff --git a/_maps/RandomRuins/SpaceRuins/DJstation/kitchen_4.dmm b/_maps/RandomRuins/SpaceRuins/DJstation/kitchen_4.dmm index b1e312f9936..9b6e108bf6e 100644 --- a/_maps/RandomRuins/SpaceRuins/DJstation/kitchen_4.dmm +++ b/_maps/RandomRuins/SpaceRuins/DJstation/kitchen_4.dmm @@ -12,7 +12,7 @@ /turf/template_noop, /area/space/nearstation) "f" = ( -/obj/machinery/door/window{ +/obj/machinery/door/window/left/directional/south{ name = "Kitchen Coldroom" }, /turf/open/floor/iron/freezer, diff --git a/_maps/RandomRuins/SpaceRuins/DJstation/quarters_1.dmm b/_maps/RandomRuins/SpaceRuins/DJstation/quarters_1.dmm index c389af77150..dc6cea464f7 100644 --- a/_maps/RandomRuins/SpaceRuins/DJstation/quarters_1.dmm +++ b/_maps/RandomRuins/SpaceRuins/DJstation/quarters_1.dmm @@ -16,7 +16,7 @@ /area/ruin/space/djstation) "k" = ( /obj/structure/bed, -/obj/item/bedsheet/random, +/obj/effect/spawner/random/bedsheet/any, /turf/open/floor/iron/grimy, /area/ruin/space/djstation) "p" = ( @@ -41,7 +41,7 @@ /obj/structure/bed{ dir = 4 }, -/obj/item/bedsheet/random{ +/obj/effect/spawner/random/bedsheet/any{ dir = 4 }, /turf/open/floor/iron/grimy, diff --git a/_maps/RandomRuins/SpaceRuins/DJstation/quarters_4.dmm b/_maps/RandomRuins/SpaceRuins/DJstation/quarters_4.dmm index 8e632403b36..52ec466ae86 100644 --- a/_maps/RandomRuins/SpaceRuins/DJstation/quarters_4.dmm +++ b/_maps/RandomRuins/SpaceRuins/DJstation/quarters_4.dmm @@ -39,7 +39,7 @@ /turf/open/floor/iron/freezer/airless, /area/ruin/space/djstation) "x" = ( -/obj/item/bedsheet/random, +/obj/effect/spawner/random/bedsheet/any, /turf/open/floor/plating/airless, /area/ruin/space/djstation) "A" = ( diff --git a/_maps/RandomRuins/SpaceRuins/allamericandiner.dmm b/_maps/RandomRuins/SpaceRuins/allamericandiner.dmm index bc383941257..546e46abb5f 100644 --- a/_maps/RandomRuins/SpaceRuins/allamericandiner.dmm +++ b/_maps/RandomRuins/SpaceRuins/allamericandiner.dmm @@ -150,7 +150,6 @@ }, /obj/effect/turf_decal/siding/brown, /obj/machinery/jukebox{ - active = 1; req_access = null }, /turf/open/floor/iron, @@ -361,7 +360,7 @@ /turf/open/floor/iron/kitchen, /area/ruin/space/has_grav/allamericandiner) "ri" = ( -/obj/machinery/door/window{ +/obj/machinery/door/window/left/directional/south{ name = "Trash Dumpster" }, /obj/structure/plasticflaps, @@ -656,8 +655,7 @@ /turf/open/floor/iron, /area/ruin/space/has_grav/allamericandiner) "DZ" = ( -/obj/machinery/door/window{ - dir = 4; +/obj/machinery/door/window/left/directional/east{ name = "Kitchen" }, /obj/effect/decal/cleanable/dirt, diff --git a/_maps/RandomRuins/SpaceRuins/deepstorage.dmm b/_maps/RandomRuins/SpaceRuins/deepstorage.dmm index 5645ac3ef15..2c23219b7d3 100644 --- a/_maps/RandomRuins/SpaceRuins/deepstorage.dmm +++ b/_maps/RandomRuins/SpaceRuins/deepstorage.dmm @@ -1958,7 +1958,7 @@ /area/ruin/space/has_grav/deepstorage/hydroponics) "zl" = ( /obj/structure/bed/double, -/obj/item/bedsheet/dorms_double, +/obj/effect/spawner/random/bedsheet/double, /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, /turf/open/floor/wood, /area/ruin/space/has_grav/deepstorage/dorm) @@ -2128,7 +2128,7 @@ "Ev" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, /obj/structure/bed/double, -/obj/item/bedsheet/dorms_double, +/obj/effect/spawner/random/bedsheet/double, /turf/open/floor/wood, /area/ruin/space/has_grav/deepstorage/dorm) "EA" = ( diff --git a/_maps/RandomRuins/SpaceRuins/forgottenship.dmm b/_maps/RandomRuins/SpaceRuins/forgottenship.dmm index 4bcfbd0805e..0853eb15a91 100644 --- a/_maps/RandomRuins/SpaceRuins/forgottenship.dmm +++ b/_maps/RandomRuins/SpaceRuins/forgottenship.dmm @@ -594,15 +594,14 @@ /area/ruin/space/has_grav/syndicate_forgotten_ship) "co" = ( /obj/structure/filingcabinet, -/obj/machinery/door/window{ - dir = 8; +/obj/machinery/door/window/left/directional/west{ name = "Syndicate Interior Door"; req_access = list("syndicate") }, /turf/open/floor/mineral/plastitanium/red, /area/ruin/space/has_grav/syndicate_forgotten_ship) "cp" = ( -/obj/machinery/door/window{ +/obj/machinery/door/window/left/directional/south{ name = "Control Room"; req_access = list("syndicate") }, @@ -731,8 +730,7 @@ /turf/open/floor/mineral/plastitanium, /area/ruin/space/has_grav/syndicate_forgotten_ship) "cJ" = ( -/obj/machinery/door/window{ - dir = 1; +/obj/machinery/door/window/left/directional/north{ name = "Spare Equipment"; req_access = list("syndicate") }, diff --git a/_maps/RandomRuins/SpaceRuins/hellfactory.dmm b/_maps/RandomRuins/SpaceRuins/hellfactory.dmm index f2ddafd3096..524e81ebb69 100644 --- a/_maps/RandomRuins/SpaceRuins/hellfactory.dmm +++ b/_maps/RandomRuins/SpaceRuins/hellfactory.dmm @@ -285,7 +285,7 @@ /area/ruin/space/has_grav/hellfactory) "aT" = ( /obj/effect/mine/gas/water_vapor, -/obj/machinery/door/window, +/obj/machinery/door/window/left/directional/south, /turf/open/floor/plastic, /area/ruin/space/has_grav/hellfactory) "aU" = ( @@ -570,7 +570,7 @@ /area/ruin/space/has_grav/hellfactory) "cc" = ( /obj/structure/bed, -/obj/item/bedsheet/dorms, +/obj/effect/spawner/random/bedsheet, /turf/open/floor/holofloor/wood, /area/ruin/space/has_grav/hellfactory) "cd" = ( @@ -899,7 +899,7 @@ /area/ruin/space/has_grav/hellfactoryoffice) "xK" = ( /obj/structure/bed, -/obj/item/bedsheet/dorms, +/obj/effect/spawner/random/bedsheet, /obj/effect/decal/cleanable/cobweb/cobweb2, /turf/open/floor/holofloor/wood, /area/ruin/space/has_grav/hellfactory) diff --git a/_maps/RandomRuins/SpaceRuins/hilbertresearchfacility.dmm b/_maps/RandomRuins/SpaceRuins/hilbertresearchfacility.dmm index 470cd2d8379..f9d42f8c332 100644 --- a/_maps/RandomRuins/SpaceRuins/hilbertresearchfacility.dmm +++ b/_maps/RandomRuins/SpaceRuins/hilbertresearchfacility.dmm @@ -52,7 +52,7 @@ pixel_y = 8 }, /obj/structure/window/reinforced/survival_pod/spawner/directional/east, -/obj/machinery/door/window/survival_pod, +/obj/machinery/door/window/survival_pod/left/directional/south, /turf/open/floor/mineral/plastitanium/red, /area/ruin/space/has_grav/powered/hilbertresearchfacility) "bE" = ( @@ -253,9 +253,7 @@ /turf/open/floor/glass, /area/ruin/space/has_grav/powered/hilbertresearchfacility) "hB" = ( -/obj/machinery/door/window/survival_pod{ - dir = 4 - }, +/obj/machinery/door/window/survival_pod/left/directional/east, /obj/effect/turf_decal/siding/wideplating_new/dark{ dir = 5 }, @@ -351,7 +349,7 @@ /area/ruin/space/has_grav/powered/hilbertresearchfacility) "jt" = ( /obj/structure/bed, -/obj/item/bedsheet/dorms, +/obj/effect/spawner/random/bedsheet, /turf/open/floor/carpet/black, /area/ruin/space/has_grav/powered/hilbertresearchfacility) "jC" = ( @@ -742,9 +740,7 @@ "th" = ( /obj/structure/rack, /obj/item/gun/syringe, -/obj/machinery/door/window/survival_pod{ - dir = 8 - }, +/obj/machinery/door/window/survival_pod/left/directional/west, /turf/open/floor/mineral/plastitanium/red, /area/ruin/space/has_grav/powered/hilbertresearchfacility) "ty" = ( @@ -796,9 +792,7 @@ /turf/open/floor/mineral/plastitanium, /area/ruin/space/has_grav/powered/hilbertresearchfacility) "us" = ( -/obj/machinery/door/window/survival_pod{ - dir = 8 - }, +/obj/machinery/door/window/survival_pod/left/directional/west, /obj/effect/turf_decal/siding/wideplating_new/dark{ dir = 10 }, @@ -836,7 +830,7 @@ /obj/item/clothing/suit/bio_suit/cmo, /obj/item/clothing/head/bio_hood/cmo, /obj/structure/window/reinforced/survival_pod/spawner/directional/west, -/obj/machinery/door/window/survival_pod, +/obj/machinery/door/window/survival_pod/left/directional/south, /turf/open/floor/mineral/plastitanium/red, /area/ruin/space/has_grav/powered/hilbertresearchfacility) "vG" = ( @@ -983,9 +977,7 @@ /turf/open/floor/glass, /area/ruin/space/has_grav/powered/hilbertresearchfacility) "yK" = ( -/obj/machinery/door/window/survival_pod{ - dir = 8 - }, +/obj/machinery/door/window/survival_pod/left/directional/west, /obj/effect/turf_decal/siding/wideplating_new/dark{ dir = 9 }, @@ -1173,9 +1165,7 @@ /turf/open/floor/wood, /area/ruin/space/has_grav/powered/hilbertresearchfacility) "BF" = ( -/obj/machinery/door/window/survival_pod{ - dir = 8 - }, +/obj/machinery/door/window/survival_pod/left/directional/west, /obj/effect/turf_decal/siding/wideplating_new/dark{ dir = 9 }, @@ -1281,9 +1271,7 @@ /turf/open/floor/engine, /area/ruin/space/has_grav/powered/hilbertresearchfacility) "DO" = ( -/obj/machinery/door/window/survival_pod{ - dir = 4 - }, +/obj/machinery/door/window/survival_pod/left/directional/east, /obj/effect/turf_decal/siding/wideplating_new/dark{ dir = 5 }, @@ -1734,9 +1722,7 @@ /area/ruin/space/has_grav/powered/hilbertresearchfacility) "NJ" = ( /obj/effect/decal/remains/human, -/obj/machinery/door/window/survival_pod{ - dir = 4 - }, +/obj/machinery/door/window/survival_pod/left/directional/east, /obj/effect/turf_decal/siding/wideplating_new/dark{ dir = 6 }, @@ -2178,9 +2164,7 @@ /turf/open/floor/plating, /area/ruin/space/has_grav/powered/hilbertresearchfacility) "WC" = ( -/obj/machinery/door/window/survival_pod{ - dir = 8 - }, +/obj/machinery/door/window/survival_pod/left/directional/west, /obj/effect/turf_decal/siding/wideplating_new/dark{ dir = 10 }, diff --git a/_maps/RandomRuins/SpaceRuins/infested_frigate.dmm b/_maps/RandomRuins/SpaceRuins/infested_frigate.dmm index 52cfe31d2b8..2e224118ea1 100644 --- a/_maps/RandomRuins/SpaceRuins/infested_frigate.dmm +++ b/_maps/RandomRuins/SpaceRuins/infested_frigate.dmm @@ -1928,8 +1928,7 @@ /obj/effect/decal/cleanable/blood/gibs{ icon_state = "gib1-old" }, -/obj/machinery/door/window{ - dir = 4; +/obj/machinery/door/window/left/directional/east{ layer = 3.2 }, /obj/machinery/door/poddoor/shutters/window/preopen{ diff --git a/_maps/RandomRuins/SpaceRuins/listeningstation.dmm b/_maps/RandomRuins/SpaceRuins/listeningstation.dmm index 2b2fc26649a..beb0f27084a 100644 --- a/_maps/RandomRuins/SpaceRuins/listeningstation.dmm +++ b/_maps/RandomRuins/SpaceRuins/listeningstation.dmm @@ -233,7 +233,7 @@ /obj/machinery/syndicatebomb/self_destruct{ anchored = 1 }, -/obj/machinery/door/window/brigdoor{ +/obj/machinery/door/window/brigdoor/left/directional/south{ req_access = list("syndicate"); name = "Self Destruct Option" }, diff --git a/_maps/RandomRuins/SpaceRuins/mrow_thats_right.dmm b/_maps/RandomRuins/SpaceRuins/mrow_thats_right.dmm index 0a51efbd58a..6c08525d8f2 100644 --- a/_maps/RandomRuins/SpaceRuins/mrow_thats_right.dmm +++ b/_maps/RandomRuins/SpaceRuins/mrow_thats_right.dmm @@ -235,7 +235,7 @@ id = "meow"; name = "Kitty Protection Door" }, -/obj/machinery/door/window{ +/obj/machinery/door/window/left/directional/south{ name = "Kitty Door"; req_access = list("away_general") }, diff --git a/_maps/RandomRuins/SpaceRuins/nova/cargodiselost.dmm b/_maps/RandomRuins/SpaceRuins/nova/cargodiselost.dmm index 801a11da4fe..a4043f3f450 100644 --- a/_maps/RandomRuins/SpaceRuins/nova/cargodiselost.dmm +++ b/_maps/RandomRuins/SpaceRuins/nova/cargodiselost.dmm @@ -104,6 +104,7 @@ }, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/door/firedoor, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/dark/smooth_half, /area/ruin/space/has_grav/cargodise_freighter/kitchen) "bM" = ( @@ -119,6 +120,10 @@ }, /turf/open/floor/iron/dark, /area/ruin/space/has_grav/cargodise_freighter/mining) +"ca" = ( +/obj/machinery/light/directional/north, +/turf/open/floor/mineral/plastitanium, +/area/ruin/space/has_grav/cargodise_freighter/primaryhall) "cd" = ( /obj/effect/turf_decal/tile/brown/half/contrasted{ dir = 8 @@ -294,6 +299,7 @@ /obj/effect/turf_decal/tile/green/anticorner/contrasted{ dir = 1 }, +/obj/machinery/light/directional/west, /turf/open/floor/iron/dark, /area/ruin/space/has_grav/cargodise_freighter/kitchen) "eo" = ( @@ -310,6 +316,11 @@ }, /turf/open/floor/iron/dark, /area/ruin/space/has_grav/cargodise_freighter/quarters) +"ev" = ( +/obj/structure/lattice, +/mob, +/turf/template_noop, +/area/template_noop) "ex" = ( /obj/machinery/door/airlock/survival_pod/glass, /obj/structure/fans/tiny, @@ -384,6 +395,7 @@ dir = 4 }, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/dark/smooth_half{ dir = 1 }, @@ -404,6 +416,7 @@ "fS" = ( /obj/item/disk/ammo_workbench, /obj/structure/table/reinforced, +/obj/machinery/recharger, /turf/open/floor/mineral/plastitanium/red, /area/ruin/space/has_grav/cargodise_freighter/vault) "fV" = ( @@ -577,6 +590,9 @@ "iT" = ( /obj/machinery/computer/cryopod/directional/south, /obj/effect/turf_decal/tile/green/half/contrasted, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 1 + }, /turf/open/floor/iron/dark, /area/ruin/space/has_grav/cargodise_freighter/kitchen) "iU" = ( @@ -973,6 +989,12 @@ /obj/structure/cable, /turf/open/floor/iron/dark, /area/ruin/space/has_grav/cargodise_freighter/mining) +"pu" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 1 + }, +/turf/open/floor/iron/kitchen, +/area/ruin/space/has_grav/cargodise_freighter/kitchen) "pv" = ( /obj/effect/turf_decal/tile/yellow/half{ dir = 1 @@ -1085,6 +1107,15 @@ /obj/item/kirbyplants/random, /turf/open/floor/iron/dark, /area/ruin/space/has_grav/cargodise_freighter/bridge) +"rI" = ( +/obj/effect/turf_decal/tile/yellow/half{ + dir = 4 + }, +/obj/machinery/light/directional/east, +/turf/open/floor/iron/dark/smooth_half{ + dir = 1 + }, +/area/ruin/space/has_grav/cargodise_freighter/primaryhall) "rR" = ( /obj/structure/chair/comfy/shuttle{ dir = 1 @@ -1138,7 +1169,7 @@ /area/ruin/space/has_grav/cargodise_freighter/cargo) "sW" = ( /obj/structure/table/reinforced, -/obj/item/storage/medkit, +/obj/item/storage/medkit/regular, /obj/item/storage/medkit/surgery{ pixel_x = 6; pixel_y = 8 @@ -1162,13 +1193,15 @@ /obj/item/stack/sheet/glass/fifty, /obj/item/circuitboard/machine/protolathe/offstation, /obj/effect/spawner/random/engineering/toolbox, -/obj/item/circuitboard/machine/circuit_imprinter/department/no_tax, +/obj/item/circuitboard/machine/circuit_imprinter/department, /obj/item/circuitboard/machine/rtg/advanced, /obj/item/circuitboard/machine/rtg/advanced, /obj/item/circuitboard/machine/rtg/advanced, /obj/item/folded_navigation_gigabeacon, /obj/structure/cable, /obj/item/circuitboard/computer/powermonitor, +/obj/item/circuitboard/machine/biogenerator/food_replicator, +/obj/item/flatpacked_machine, /turf/open/floor/plating, /area/ruin/space/has_grav/cargodise_freighter/utility) "ty" = ( @@ -1198,6 +1231,11 @@ "tL" = ( /obj/effect/turf_decal/siding/wood/corner, /obj/structure/extinguisher_cabinet/directional/north, +/obj/structure/table/reinforced, +/obj/item/gun/ballistic/automatic/pistol/sol, +/obj/item/gun/energy/e_gun/mini{ + pixel_y = 5 + }, /turf/open/floor/wood/parquet, /area/ruin/space/has_grav/cargodise_freighter/quarters) "tN" = ( @@ -1219,7 +1257,7 @@ /area/ruin/space/has_grav/cargodise_freighter/primaryhall) "tW" = ( /obj/structure/bed/double, -/obj/item/bedsheet/dorms_double, +/obj/effect/spawner/random/bedsheet/double, /turf/open/floor/wood/parquet, /area/ruin/space/has_grav/cargodise_freighter/kitchen) "tY" = ( @@ -1399,9 +1437,9 @@ /turf/open/floor/iron/kitchen, /area/ruin/space/has_grav/cargodise_freighter/kitchen) "xw" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/light/cold/directional/west, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, /turf/open/floor/wood/parquet, /area/ruin/space/has_grav/cargodise_freighter/kitchen) "xy" = ( @@ -1562,7 +1600,7 @@ /obj/structure/bed/double{ dir = 1 }, -/obj/item/bedsheet/dorms_double{ +/obj/effect/spawner/random/bedsheet/double{ dir = 4 }, /turf/open/floor/wood/parquet, @@ -1803,6 +1841,14 @@ /obj/machinery/door/firedoor, /turf/open/floor/iron/dark, /area/ruin/space/has_grav/cargodise_freighter/kitchen) +"Du" = ( +/obj/effect/turf_decal/tile/yellow/half, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 1 + }, +/obj/machinery/light/directional/south, +/turf/open/floor/iron/dark/smooth_half, +/area/ruin/space/has_grav/cargodise_freighter/primaryhall) "DE" = ( /obj/effect/turf_decal/tile/yellow/half{ dir = 4 @@ -1904,9 +1950,6 @@ "ES" = ( /obj/structure/rack/gunrack, /obj/item/gun/ballistic/automatic/lanca, -/obj/item/gun/ballistic/automatic/lanca{ - pixel_x = 3 - }, /turf/open/floor/mineral/plastitanium/red, /area/ruin/space/has_grav/cargodise_freighter/vault) "Fb" = ( @@ -2011,6 +2054,10 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden, /turf/open/floor/iron/smooth, /area/ruin/space/has_grav/cargodise_freighter/utility) +"Ha" = ( +/obj/machinery/light/directional/west, +/turf/open/floor/iron/kitchen, +/area/ruin/space/has_grav/cargodise_freighter/kitchen) "Hi" = ( /obj/effect/turf_decal/trimline/blue/corner{ dir = 4 @@ -2276,6 +2323,7 @@ }, /area/ruin/space/has_grav/cargodise_freighter/primaryhall) "Kr" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, /turf/open/floor/wood/parquet, /area/ruin/space/has_grav/cargodise_freighter/kitchen) "Kt" = ( @@ -2479,6 +2527,7 @@ "Ny" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, /obj/machinery/light/cold/directional/east, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/wood/parquet, /area/ruin/space/has_grav/cargodise_freighter/kitchen) "NC" = ( @@ -2504,7 +2553,7 @@ /area/ruin/space/has_grav/cargodise_freighter/kitchen) "NQ" = ( /obj/structure/safe, -/obj/item/mod/module/jetpack/advanced, +/obj/item/mod/module/jetpack, /obj/item/mod/control/pre_equipped/standard, /turf/open/floor/mineral/plastitanium, /area/ruin/space/has_grav/cargodise_freighter/vault) @@ -2594,14 +2643,12 @@ "OY" = ( /obj/structure/rack/gunrack, /obj/item/gun/ballistic/rifle/boltaction, -/obj/item/gun/ballistic/rifle/boltaction{ - pixel_x = 3 - }, /turf/open/floor/mineral/plastitanium/red, /area/ruin/space/has_grav/cargodise_freighter/vault) "Pa" = ( /obj/machinery/shower/directional/south, /obj/item/soap, +/obj/machinery/light/directional/east, /turf/open/floor/iron/white, /area/ruin/space/has_grav/cargodise_freighter/kitchen) "Pe" = ( @@ -3800,7 +3847,7 @@ Gh Gh Gh JQ -Ef +ev Ef Ef Yr @@ -4543,7 +4590,7 @@ vH Gg By ty -Da +pu Da Df Da @@ -4552,7 +4599,7 @@ iX Gg EC tV -qS +Du Hv ci TC @@ -4628,8 +4675,8 @@ FT FT FT JC -Da -Da +pu +Ha IP Gg UL @@ -4681,7 +4728,7 @@ Hv eC HJ Hv -Wk +ca Wk ex Gh @@ -4845,7 +4892,7 @@ DE gY BF WY -Lp +rI Lp YT kF diff --git a/_maps/RandomRuins/SpaceRuins/nova/codealpha.dmm b/_maps/RandomRuins/SpaceRuins/nova/codealpha.dmm index de75f0b4d00..104ff4af84d 100644 --- a/_maps/RandomRuins/SpaceRuins/nova/codealpha.dmm +++ b/_maps/RandomRuins/SpaceRuins/nova/codealpha.dmm @@ -14,7 +14,7 @@ /turf/open/floor/iron, /area/ruin/space/has_grav) "eE" = ( -/obj/machinery/door/window, +/obj/machinery/door/window/left/directional/south, /obj/effect/turf_decal/trimline/red/filled/warning, /obj/effect/turf_decal/trimline/red/filled/warning{ dir = 1 diff --git a/_maps/RandomRuins/SpaceRuins/nova/des_two.dmm b/_maps/RandomRuins/SpaceRuins/nova/des_two.dmm index 06ba678837c..90b52e5db09 100644 --- a/_maps/RandomRuins/SpaceRuins/nova/des_two.dmm +++ b/_maps/RandomRuins/SpaceRuins/nova/des_two.dmm @@ -210,8 +210,7 @@ /area/ruin/space/has_grav/nova/des_two/engineering) "aP" = ( /obj/machinery/door/firedoor, -/obj/machinery/door/window/survival_pod{ - dir = 8; +/obj/machinery/door/window/survival_pod/left/directional/west{ req_access = list("syndicate") }, /obj/machinery/atmospherics/pipe/smart/simple/supply/hidden/layer4{ @@ -1957,8 +1956,7 @@ "io" = ( /obj/machinery/door/firedoor, /obj/structure/table/reinforced/plastitaniumglass, -/obj/machinery/door/window/survival_pod{ - dir = 8; +/obj/machinery/door/window/survival_pod/left/directional/west{ req_access = list("syndicate") }, /turf/open/floor/iron/dark/textured_large, @@ -2527,9 +2525,7 @@ /area/ruin/space/has_grav/nova/des_two/medbay) "kI" = ( /obj/machinery/hydroponics/constructable, -/obj/machinery/door/window/survival_pod{ - dir = 1 - }, +/obj/machinery/door/window/survival_pod/left/directional/north, /obj/machinery/airalarm/directional/east, /obj/effect/mapping_helpers/airalarm/syndicate_access, /turf/open/floor/iron/dark/small, @@ -2543,12 +2539,10 @@ "kN" = ( /obj/machinery/door/firedoor, /obj/structure/table/reinforced, -/obj/machinery/door/window/survival_pod{ - dir = 4; +/obj/machinery/door/window/survival_pod/left/directional/east{ req_access = list("syndicate_leader") }, -/obj/machinery/door/window/survival_pod{ - dir = 8; +/obj/machinery/door/window/survival_pod/left/directional/west{ heat_proof = 1 }, /obj/machinery/door/poddoor/shutters{ @@ -2931,8 +2925,7 @@ "mH" = ( /obj/machinery/door/firedoor, /obj/structure/table/reinforced/plastitaniumglass, -/obj/machinery/door/window/survival_pod{ - dir = 4; +/obj/machinery/door/window/survival_pod/left/directional/east{ req_access = list("syndicate_leader") }, /obj/effect/turf_decal/delivery/red, @@ -4945,9 +4938,7 @@ /area/ruin/space/has_grav/nova/des_two/halls) "vO" = ( /obj/machinery/hydroponics/constructable, -/obj/machinery/door/window/survival_pod{ - dir = 1 - }, +/obj/machinery/door/window/survival_pod/left/directional/north, /turf/open/floor/iron/dark/small, /area/ruin/space/has_grav/nova/des_two/service/hydroponics) "vQ" = ( @@ -5216,9 +5207,7 @@ /area/ruin/space/has_grav/nova/des_two/engineering) "xG" = ( /obj/structure/table/reinforced/plastitaniumglass, -/obj/machinery/door/window/survival_pod{ - dir = 4 - }, +/obj/machinery/door/window/survival_pod/left/directional/east, /obj/effect/turf_decal/siding/thinplating/dark{ dir = 4 }, @@ -6132,7 +6121,7 @@ dir = 8 }, /obj/effect/turf_decal/siding/wood, -/obj/machinery/door/window/survival_pod{ +/obj/machinery/door/window/survival_pod/left/directional/south{ name = "Diner"; req_access = list("syndicate") }, @@ -7164,8 +7153,7 @@ /area/ruin/space/has_grav/nova/des_two/service/lounge) "Ha" = ( /obj/machinery/door/firedoor, -/obj/machinery/door/window/survival_pod{ - dir = 4; +/obj/machinery/door/window/survival_pod/left/directional/east{ req_access = list("syndicate_leader") }, /obj/structure/table/reinforced/plastitaniumglass, @@ -7767,8 +7755,7 @@ /turf/open/floor/catwalk_floor/iron_dark, /area/ruin/space/has_grav/nova/des_two/engineering) "Kb" = ( -/obj/machinery/door/window/survival_pod{ - dir = 1; +/obj/machinery/door/window/survival_pod/left/directional/north{ req_access = list("syndicate_leader") }, /obj/effect/turf_decal/siding/thinplating/dark{ @@ -8484,8 +8471,7 @@ pixel_x = -6; pixel_y = -24 }, -/obj/machinery/door/window/survival_pod{ - dir = 8; +/obj/machinery/door/window/survival_pod/left/directional/west{ req_access = list("syndicate") }, /turf/open/floor/iron/dark, @@ -10228,8 +10214,7 @@ /area/ruin/space/has_grav/nova/des_two/service/dorms) "UX" = ( /obj/machinery/door/firedoor, -/obj/machinery/door/window/survival_pod{ - dir = 1; +/obj/machinery/door/window/survival_pod/left/directional/north{ req_access = list("syndicate_leader") }, /obj/structure/table/reinforced/plastitaniumglass, @@ -10636,13 +10621,11 @@ /obj/effect/turf_decal/delivery/red, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/door/window/survival_pod{ - dir = 8; +/obj/machinery/door/window/survival_pod/left/directional/west{ name = "Isolation Cell"; req_access = list("syndicate_leader") }, -/obj/machinery/door/window/survival_pod{ - dir = 4; +/obj/machinery/door/window/survival_pod/left/directional/east{ name = "Isolation Cell"; req_access = list("syndicate_leader") }, diff --git a/_maps/RandomRuins/SpaceRuins/nova/piratefort.dmm b/_maps/RandomRuins/SpaceRuins/nova/piratefort.dmm index e79f5902d5d..b0770c8277a 100644 --- a/_maps/RandomRuins/SpaceRuins/nova/piratefort.dmm +++ b/_maps/RandomRuins/SpaceRuins/nova/piratefort.dmm @@ -688,7 +688,7 @@ /area/ruin/space/has_grav/powered) "wR" = ( /obj/structure/bed, -/obj/item/bedsheet/random, +/obj/effect/spawner/random/bedsheet/any, /turf/open/floor/wood, /area/ruin/space/has_grav/powered) "wT" = ( diff --git a/_maps/RandomRuins/SpaceRuins/nova/port_tarkon.dmm b/_maps/RandomRuins/SpaceRuins/nova/port_tarkon.dmm index 4b47dae5a74..be2c41b1eb8 100644 --- a/_maps/RandomRuins/SpaceRuins/nova/port_tarkon.dmm +++ b/_maps/RandomRuins/SpaceRuins/nova/port_tarkon.dmm @@ -1,5107 +1,12044 @@ //MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE -"cw" = ( -/obj/machinery/airalarm/directional/north, -/obj/effect/mapping_helpers/airalarm/all_access, +"ab" = ( +/obj/effect/turf_decal/tile/brown/half{ + dir = 1 + }, +/turf/open/floor/iron, +/area/ruin/space/has_grav/port_tarkon/cargo) +"ae" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron, +/area/ruin/space/has_grav/port_tarkon/mining) +"af" = ( +/obj/machinery/chem_heater/withbuffer, +/obj/effect/turf_decal/tile/blue/half{ + dir = 1 + }, +/turf/open/floor/iron, +/area/ruin/space/has_grav/port_tarkon/trauma) +"ah" = ( +/obj/effect/spawner/structure/window/reinforced/no_firelock, +/turf/open/floor/plating, +/area/ruin/space/has_grav/port_tarkon/power1) +"ai" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, +/turf/open/floor/iron, +/area/ruin/space/has_grav/port_tarkon/secoff) +"ak" = ( +/obj/machinery/atmospherics/miner/carbon_dioxide, +/turf/open/floor/engine/co2, +/area/ruin/space/has_grav/port_tarkon/atmos) +"al" = ( +/obj/structure/table/reinforced, +/obj/item/clothing/gloves/color/yellow, +/obj/structure/cable, +/turf/open/floor/plating, +/area/ruin/space/has_grav/port_tarkon/power1) +"am" = ( +/obj/structure/closet, +/obj/item/clothing/under/tarkon/eng, +/obj/item/clothing/under/tarkon/eng, +/obj/item/clothing/under/tarkon/eng, +/obj/item/clothing/under/tarkon/eng, +/obj/item/clothing/under/tarkon/eng, +/obj/item/clothing/under/tarkon/eng, +/obj/item/storage/backpack/duffelbag/engineering, +/obj/item/storage/backpack/industrial, +/obj/item/storage/backpack/messenger/eng, +/obj/item/storage/backpack/satchel/eng, +/obj/item/clothing/head/utility/welding/hat, +/obj/item/clothing/head/utility/welding/hat, /turf/open/floor/iron, /area/ruin/space/has_grav/port_tarkon) -"cZ" = ( -/obj/structure/fluff/empty_sleeper{ +"aq" = ( +/obj/structure/cable, +/obj/machinery/airalarm/directional/west, +/obj/effect/mapping_helpers/airalarm/all_access, +/obj/effect/turf_decal/tile/yellow/half{ dir = 8 }, /turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon) -"jD" = ( -/obj/machinery/light/warm/directional/north, +/area/ruin/space/has_grav/port_tarkon/power1) +"ar" = ( +/turf/closed/wall, +/area/ruin/space/has_grav/port_tarkon/starboardhall) +"at" = ( +/obj/structure/closet/crate, +/obj/item/stack/sheet/iron/fifty, +/obj/item/stack/sheet/iron/fifty, +/turf/open/floor/plating, +/area/ruin/space/has_grav/port_tarkon/centerhall) +"av" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/cable, +/obj/structure/alien/weeds/node, /turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon) -"kV" = ( -/obj/structure/fluff/metalpole, -/turf/open/misc/asteroid/airless, -/area/space) -"mn" = ( +/area/ruin/space/has_grav/port_tarkon/forehall) +"ax" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/cable, +/obj/machinery/light/directional/west, +/obj/structure/disposalpipe/segment, +/turf/open/floor/iron, +/area/ruin/space/has_grav/port_tarkon/porthall) +"aD" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/door/firedoor/solid, +/turf/open/floor/iron, +/area/ruin/space/has_grav/port_tarkon/garden) +"aG" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, +/turf/open/floor/iron, +/area/ruin/space/has_grav/port_tarkon/mining) +"aI" = ( +/turf/closed/wall/r_wall, +/area/ruin/space/has_grav/port_tarkon/developement) +"aJ" = ( +/obj/structure/fence/corner, /turf/open/misc/asteroid/airless, -/area/space) -"qo" = ( -/obj/machinery/computer{ - desc = "A computer long since rendered non-functional due to lack of maintenance. Spitting out error messages."; - dir = 1; - name = "Broken Computer" +/area/ruin/space/has_grav/outdoors) +"aM" = ( +/obj/machinery/power/apc/auto_name/directional/north, +/obj/effect/mapping_helpers/apc/full_charge, +/obj/effect/mapping_helpers/apc/unlocked, +/obj/structure/cable, +/obj/structure/closet/crate/radiation, +/obj/effect/mapping_helpers/apc/cell_10k, +/obj/effect/turf_decal/tile/yellow/half{ + dir = 1 }, +/obj/item/stack/sheet/mineral/uranium/half, /turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon) -"sU" = ( -/obj/structure/fluff/metalpole/end/right, -/turf/open/space/basic, -/area/space) -"tD" = ( -/obj/structure/fluff/empty_sleeper{ +/area/ruin/space/has_grav/port_tarkon/atmos) +"aR" = ( +/obj/machinery/light/directional/west, +/obj/effect/turf_decal/tile/yellow/half{ + dir = 8 + }, +/turf/open/floor/iron, +/area/ruin/space/has_grav/port_tarkon/afthall) +"aT" = ( +/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/ruin/space/has_grav/port_tarkon/centerhall) +"aW" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/cable, +/obj/structure/alien/resin/wall, +/obj/structure/disposalpipe/segment, +/obj/machinery/camera/tarkon/directional/west, +/turf/open/floor/iron, +/area/ruin/space/has_grav/port_tarkon/porthall) +"aY" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/turf_decal/tile/yellow/half{ + dir = 8 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/iron, +/area/ruin/space/has_grav/port_tarkon/atmos) +"bb" = ( +/obj/structure/alien/resin/wall, +/obj/effect/turf_decal/tile/purple/half{ + dir = 4 + }, +/turf/open/floor/iron, +/area/ruin/space/has_grav/port_tarkon/porthall) +"be" = ( +/obj/effect/turf_decal/tile/purple/half{ dir = 1 }, +/obj/machinery/module_duplicator, +/turf/open/floor/iron/dark, +/area/ruin/space/has_grav/port_tarkon/developement) +"bf" = ( +/obj/machinery/light/directional/east, +/obj/effect/turf_decal/tile/purple/half{ + dir = 4 + }, +/obj/machinery/button/polarizer{ + id = "tarkondisect"; + pixel_x = 31 + }, +/turf/open/floor/iron/dark, +/area/ruin/space/has_grav/port_tarkon/developement) +"bg" = ( +/obj/machinery/light/directional/south, +/obj/effect/turf_decal/tile/brown/half, +/obj/effect/mob_spawn/ghost_role/human/tarkon/cargo{ + dir = 8 + }, +/turf/open/floor/iron, +/area/ruin/space/has_grav/port_tarkon/cargo) +"bj" = ( +/obj/effect/turf_decal/tile/purple/half, +/obj/item/storage/toolbox/mechanical, +/obj/item/experi_scanner, +/obj/item/experi_scanner, +/obj/structure/table/reinforced, +/turf/open/floor/iron/dark, +/area/ruin/space/has_grav/port_tarkon/developement) +"bk" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, +/obj/structure/alien/resin/wall, +/turf/open/floor/iron, +/area/ruin/space/has_grav/port_tarkon/forehall) +"bl" = ( +/obj/machinery/door/window/brigdoor/tarkon/left/directional/south, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/door/poddoor/shutters{ + id = "ptcell1" + }, +/turf/open/floor/iron, +/area/ruin/space/has_grav/port_tarkon/secoff) +"bp" = ( +/obj/machinery/cryopod, /turf/open/floor/iron, /area/ruin/space/has_grav/port_tarkon) -"ux" = ( -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ +"br" = ( +/obj/structure/toilet{ + dir = 8 + }, +/obj/machinery/light/small/directional/north, +/obj/machinery/door/window/left/directional/west{ + opacity = 1 + }, +/turf/open/floor/iron/white, +/area/ruin/space/has_grav/port_tarkon/centerhall) +"bt" = ( +/turf/closed/mineral/random/high_chance, +/area/ruin/space/has_grav/outdoors) +"bA" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, +/turf/open/floor/plating, +/area/ruin/space/has_grav/port_tarkon/centerhall) +"bB" = ( +/turf/closed/wall, +/area/ruin/space/has_grav/port_tarkon/observ) +"bD" = ( +/obj/structure/window/reinforced/spawner/directional/west, +/turf/open/floor/plating, +/area/ruin/space/has_grav/port_tarkon/atmos) +"bF" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/disposalpipe/segment{ + dir = 9 + }, +/turf/open/floor/iron/dark, +/area/ruin/space/has_grav/port_tarkon/developement) +"bH" = ( +/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/blue/half{ dir = 4 }, +/obj/structure/disposalpipe/segment, /turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon) -"Bx" = ( -/obj/structure/fluff/metalpole, -/turf/open/space/basic, -/area/space) -"Fi" = ( -/obj/effect/mob_spawn/ghost_role/human/tarkon/ensign, +/area/ruin/space/has_grav/port_tarkon/afthall) +"bL" = ( +/obj/machinery/door/firedoor/solid, +/obj/machinery/door/airlock/public/glass{ + name = "Public Observatory" + }, /turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon) -"Ge" = ( -/obj/machinery/light_switch/directional/north, +/area/ruin/space/has_grav/port_tarkon/porthall) +"bM" = ( +/obj/effect/spawner/structure/window/reinforced/no_firelock, +/obj/machinery/atmospherics/pipe/layer_manifold/pink/hidden{ + dir = 4 + }, +/turf/open/floor/plating, +/area/ruin/space/has_grav/port_tarkon/atmos) +"bO" = ( +/obj/structure/cable, +/obj/machinery/door/airlock/engineering{ + name = "Engineering" + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/door/firedoor/solid, +/obj/effect/turf_decal/tile/yellow/half{ + dir = 1 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/iron, +/area/ruin/space/has_grav/port_tarkon/power1) +"bS" = ( +/obj/machinery/modular_computer/console{ + dir = 4 + }, +/obj/effect/turf_decal/tile/blue/anticorner{ + dir = 8 + }, +/turf/open/floor/iron/dark, +/area/ruin/space/has_grav/port_tarkon/comms) +"bT" = ( +/obj/effect/turf_decal/tile/blue{ + dir = 8 + }, +/turf/open/floor/iron/dark, +/area/ruin/space/has_grav/port_tarkon/comms) +"bU" = ( +/obj/structure/table/reinforced, +/obj/item/stack/sheet/iron/twenty, +/obj/effect/turf_decal/tile/red/real_red/half{ + dir = 1 + }, +/turf/open/floor/iron, +/area/ruin/space/has_grav/port_tarkon/secoff) +"bY" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 1 + }, +/obj/effect/turf_decal/tile/neutral/half, +/turf/open/floor/iron, +/area/ruin/space/has_grav/port_tarkon/centerhall) +"cl" = ( +/obj/machinery/biogenerator/food_replicator, +/turf/open/floor/iron, +/area/ruin/space/has_grav/port_tarkon/garden) +"cm" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 4 + }, +/turf/open/floor/plating, +/area/ruin/space/has_grav/port_tarkon/observ) +"cn" = ( +/obj/structure/closet, +/obj/item/clothing/under/tarkon/sec, +/obj/item/clothing/under/tarkon/sec, +/obj/item/clothing/under/tarkon/sec, +/obj/item/clothing/under/tarkon/sec, +/obj/item/clothing/under/tarkon/sec, +/obj/item/clothing/under/tarkon/sec, +/obj/item/storage/backpack/duffelbag/sec/redsec, +/obj/item/storage/backpack/satchel/sec/redsec, +/obj/item/storage/backpack/security/redsec, +/obj/item/clothing/head/utility/welding/hat, +/obj/item/clothing/head/utility/welding/hat, +/obj/machinery/camera/tarkon/directional/east, /turf/open/floor/iron, /area/ruin/space/has_grav/port_tarkon) -"IC" = ( -/obj/machinery/light_switch/directional/east, +"cq" = ( +/obj/machinery/recharge_station, +/obj/machinery/camera/tarkon/directional/south, +/turf/open/floor/plating, +/area/ruin/space/has_grav/port_tarkon/centerhall) +"ct" = ( +/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/purple/half, +/obj/structure/disposalpipe/junction/flip, +/turf/open/floor/iron/dark, +/area/ruin/space/has_grav/port_tarkon/developement) +"cu" = ( +/obj/machinery/firealarm/directional/east, +/obj/effect/turf_decal/tile/brown/half{ + dir = 4 + }, +/obj/machinery/computer/order_console/mining{ + express_cost_multiplier = 1; + forced_express = 1 + }, +/turf/open/floor/iron, +/area/ruin/space/has_grav/port_tarkon/mining) +"cv" = ( +/obj/item/stack/tile/carpet/neon/simple/teal/nodots/sixty, +/turf/open/floor/plating, +/area/ruin/space/has_grav/port_tarkon/cargo) +"cy" = ( /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/yellow/half{ + dir = 4 + }, +/obj/structure/window/reinforced/spawner/directional/south, /turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon) -"IX" = ( +/area/ruin/space/has_grav/port_tarkon/power1) +"cz" = ( +/obj/structure/cable, +/obj/effect/turf_decal/tile/brown/half{ + dir = 8 + }, +/turf/open/floor/iron, +/area/ruin/space/has_grav/port_tarkon/mining) +"cC" = ( +/obj/effect/turf_decal/tile/brown/half{ + dir = 8 + }, +/turf/open/floor/iron, +/area/ruin/space/has_grav/port_tarkon/storage) +"cD" = ( +/obj/effect/turf_decal/tile/neutral{ + dir = 8 + }, +/turf/open/floor/iron, +/area/ruin/space/has_grav/port_tarkon/centerhall) +"cH" = ( +/obj/machinery/door/firedoor/solid, +/turf/open/floor/iron, +/area/ruin/space/has_grav/port_tarkon/forehall) +"cI" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/power/apc/auto_name/directional/west, +/obj/effect/mapping_helpers/apc/unlocked, +/obj/effect/mapping_helpers/apc/full_charge, +/obj/structure/disposalpipe/segment, +/turf/open/floor/iron, +/area/ruin/space/has_grav/port_tarkon/porthall) +"cK" = ( +/obj/structure/cable, +/obj/machinery/power/terminal{ + dir = 4 + }, +/obj/effect/turf_decal/tile/yellow/anticorner{ + dir = 1 + }, +/turf/open/floor/iron, +/area/ruin/space/has_grav/port_tarkon/power1) +"cL" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/turf_decal/tile/neutral/half{ + dir = 1 + }, +/turf/open/floor/iron, +/area/ruin/space/has_grav/port_tarkon/centerhall) +"cM" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron/dark, +/area/ruin/space/has_grav/port_tarkon/developement) +"cQ" = ( +/obj/effect/spawner/structure/window/reinforced/no_firelock, +/obj/machinery/door/poddoor/shutters{ + id = "ptcomms" + }, +/turf/open/floor/plating, +/area/ruin/space/has_grav/port_tarkon/comms) +"cU" = ( +/obj/effect/spawner/structure/window/reinforced/no_firelock, +/obj/machinery/door/poddoor/shutters{ + id = "ptobservatory" + }, +/turf/open/floor/plating, +/area/ruin/space/has_grav/port_tarkon/observ) +"cX" = ( +/obj/machinery/atmospherics/miner/plasma, +/turf/open/floor/engine/plasma, +/area/ruin/space/has_grav/port_tarkon/atmos) +"dc" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/cable, +/obj/machinery/camera/tarkon/directional/south, /turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon) -"Nk" = ( -/obj/structure/fluff/empty_sleeper{ +/area/ruin/space/has_grav/port_tarkon/forehall) +"dd" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, +/turf/open/floor/iron, +/area/ruin/space/has_grav/port_tarkon/porthall) +"dg" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/turf_decal/tile/red/real_red/half, +/turf/open/floor/iron, +/area/ruin/space/has_grav/port_tarkon/secoff) +"dj" = ( +/obj/machinery/airalarm/directional/north, +/obj/effect/mapping_helpers/airalarm/all_access, +/turf/open/floor/iron, +/area/ruin/space/has_grav/port_tarkon/forehall) +"dm" = ( +/obj/machinery/light/directional/east, +/obj/effect/turf_decal/tile/brown/half{ dir = 4 }, /turf/open/floor/iron, +/area/ruin/space/has_grav/port_tarkon/mining) +"dn" = ( +/obj/structure/spawner/tarkon_xenos/minor, +/turf/open/floor/iron, +/area/ruin/space/has_grav/port_tarkon/forehall) +"do" = ( +/obj/structure/closet, +/obj/item/clothing/under/tarkon/com, +/obj/item/clothing/under/tarkon/com, +/obj/item/clothing/under/tarkon/com, +/obj/item/clothing/under/tarkon/com, +/obj/item/clothing/under/tarkon/com, +/obj/item/clothing/under/tarkon/com, +/obj/item/storage/backpack/duffelbag/blueshield, +/obj/item/storage/backpack/messenger/blueshield, +/obj/item/storage/backpack/satchel/blueshield, +/obj/item/clothing/head/utility/welding/hat, +/obj/item/clothing/head/utility/welding/hat, +/turf/open/floor/iron, /area/ruin/space/has_grav/port_tarkon) -"QR" = ( -/obj/item/crowbar, +"dp" = ( +/obj/effect/turf_decal/tile/yellow/half{ + dir = 1 + }, +/turf/open/floor/iron, +/area/ruin/space/has_grav/port_tarkon/atmos) +"ds" = ( +/obj/effect/turf_decal/tile/brown/anticorner{ + dir = 4 + }, +/obj/machinery/camera/tarkon/directional/east, +/turf/open/floor/iron, +/area/ruin/space/has_grav/port_tarkon/storage) +"dv" = ( +/obj/effect/turf_decal/caution/stand_clear, +/obj/effect/turf_decal/tile/brown/half, +/turf/open/floor/iron, +/area/ruin/space/has_grav/port_tarkon/storage) +"dz" = ( +/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/blue{ + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 5 + }, +/turf/open/floor/iron, +/area/ruin/space/has_grav/port_tarkon/afthall) +"dB" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 1 + }, +/turf/open/floor/iron, +/area/ruin/space/has_grav/port_tarkon/storage) +"dC" = ( +/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/neutral/anticorner{ + dir = 1 + }, +/obj/structure/disposalpipe/segment{ + dir = 10 + }, +/turf/open/floor/iron, +/area/ruin/space/has_grav/port_tarkon/centerhall) +"dE" = ( +/obj/machinery/door/airlock/public/glass{ + name = "Starboard Primary Hallway" + }, +/obj/machinery/door/firedoor/solid, +/turf/open/floor/iron, +/area/ruin/space/has_grav/port_tarkon/starboardhall) +"dF" = ( +/obj/machinery/light_switch/directional/west, +/obj/effect/turf_decal/tile/purple/half{ + dir = 8 + }, +/turf/open/floor/iron/dark, +/area/ruin/space/has_grav/port_tarkon/developement) +"dG" = ( +/obj/machinery/power/turbine/core_rotor{ + dir = 4; + mapping_id = "tarkon_turbine" + }, +/obj/structure/cable, +/turf/open/floor/engine/vacuum, +/area/ruin/space/has_grav/port_tarkon/atmos) +"dJ" = ( +/obj/structure/table/reinforced, +/turf/open/floor/iron, +/area/ruin/space/has_grav/port_tarkon/centerhall) +"dN" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 4 + }, +/turf/open/floor/iron, +/area/ruin/space/has_grav/port_tarkon/starboardhall) +"dO" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/general, +/obj/machinery/meter, +/obj/structure/cable, +/obj/effect/spawner/random/maintenance, +/turf/open/floor/plating, +/area/ruin/space/has_grav/port_tarkon/centerhall) +"dS" = ( +/obj/effect/spawner/structure/window/reinforced, +/turf/open/floor/plating, +/area/ruin/space/has_grav/port_tarkon/afthall) +"dU" = ( +/obj/structure/table/reinforced, +/obj/machinery/cell_charger, +/obj/item/stock_parts/cell/high/empty, +/obj/effect/turf_decal/tile/yellow/half{ + dir = 8 + }, +/obj/machinery/camera/tarkon/directional/west, +/turf/open/floor/iron, +/area/ruin/space/has_grav/port_tarkon/toolstorage) +"dV" = ( +/obj/machinery/airalarm/directional/east, +/obj/effect/mapping_helpers/airalarm/all_access, +/turf/open/floor/plating, +/area/ruin/space/has_grav/port_tarkon/observ) +"dW" = ( +/obj/machinery/atmospherics/components/binary/pump/off/general{ + dir = 4 + }, +/obj/effect/turf_decal/tile/blue/fourcorners, +/turf/open/floor/iron, +/area/ruin/space/has_grav/port_tarkon/atmos) +"eu" = ( +/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/ruin/space/has_grav/port_tarkon/forehall) +"ev" = ( +/obj/structure/table/reinforced, +/obj/machinery/vending/boozeomat, +/turf/open/floor/iron, +/area/ruin/space/has_grav/port_tarkon/centerhall) +"ex" = ( +/obj/effect/turf_decal/tile/brown/anticorner, +/obj/machinery/camera/tarkon/directional/east, +/turf/open/floor/iron, +/area/ruin/space/has_grav/port_tarkon/storage) +"ey" = ( +/obj/structure/table/reinforced, +/obj/effect/turf_decal/tile/blue/anticorner, +/turf/open/floor/iron/dark, +/area/ruin/space/has_grav/port_tarkon/comms) +"eA" = ( +/obj/structure/cable, +/obj/machinery/power/apc/auto_name/directional/west, +/obj/effect/mapping_helpers/apc/full_charge, +/obj/effect/mapping_helpers/apc/unlocked, +/obj/effect/turf_decal/tile/yellow/anticorner{ + dir = 8 + }, +/turf/open/floor/iron, +/area/ruin/space/has_grav/port_tarkon/toolstorage) +"eC" = ( +/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 = 4 + }, +/turf/open/floor/iron/dark, +/area/ruin/space/has_grav/port_tarkon/developement) +"eF" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 4 + }, +/obj/effect/turf_decal/tile/neutral/half{ + dir = 8 + }, +/turf/open/floor/iron, +/area/ruin/space/has_grav/port_tarkon/centerhall) +"eG" = ( /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/tile/neutral/anticorner{ + dir = 4 + }, +/obj/structure/closet/firecloset, +/obj/structure/disposalpipe/segment{ + dir = 10 + }, /turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon) -"Up" = ( +/area/ruin/space/has_grav/port_tarkon/centerhall) +"eH" = ( /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, +/turf/open/floor/plating, +/area/ruin/space/has_grav/port_tarkon/observ) +"eL" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/cable, +/obj/structure/alien/weeds/node, +/turf/open/floor/plating, +/area/ruin/space/has_grav/port_tarkon/observ) +"eM" = ( +/obj/machinery/firealarm/directional/north, +/obj/effect/turf_decal/tile/brown/half{ + dir = 1 + }, +/obj/structure/displaycase{ + start_showpiece_type = /obj/item/gun/energy/recharge/resonant_system; + req_access = list("tarkon") + }, /turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon) -"Vb" = ( +/area/ruin/space/has_grav/port_tarkon/mining) +"eN" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon) -"Vj" = ( -/obj/structure/fluff/empty_sleeper, +/area/ruin/space/has_grav/port_tarkon/power1) +"eP" = ( +/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/ruin/space/has_grav/port_tarkon) -"ZX" = ( -/obj/modular_map_root/port_tarkon{ - key = "port" +/area/ruin/space/has_grav/port_tarkon/mining) +"eQ" = ( +/obj/effect/turf_decal/tile/blue/half{ + dir = 4 }, -/turf/open/misc/asteroid/airless, -/area/space) -"ZY" = ( -/turf/open/space/basic, -/area/space) - -(1,1,1) = {" -ZY -ZY -ZY -ZY -ZY -ZY -ZY -ZY -ZY -ZY -ZY -ZY -ZY -ZY -ZY -ZY -ZY -ZY -ZY -ZY -ZY -ZY -ZY -ZY -ZY -ZY -ZY -ZY -ZY -ZY -ZY -ZY -ZY -ZY -ZY -ZY -ZY -ZY -ZY -ZY -ZY -ZY -ZY -ZY -ZY -ZY -ZY -ZY -ZY -ZY -ZY -ZY -ZY -ZY -ZY -ZY -ZY -ZY -ZY -ZY -ZY -ZY -ZY -ZY -ZY -ZY -ZY -ZY -ZY -ZY -ZY -"} -(2,1,1) = {" -ZY -ZY -ZY -ZY -ZY -ZY -ZY -ZY -ZY -ZY -ZY -ZY -ZY -ZY -ZY -ZY -ZY -ZY -ZY -ZY -ZY -ZY -ZY -ZY -ZY -ZY -ZY -ZY -ZY -ZY -ZY -ZY -ZY -ZY -ZY -ZY -ZY -ZY -ZY -ZY -ZY -ZY -ZY -ZY -ZY -ZY -ZY -ZY -ZY -ZY -ZY -ZY -ZY -ZY -ZY -ZY -ZY -ZY -ZY -ZY -ZY -ZY -ZY -ZY -ZY -ZY -ZY -ZY -ZY -ZY -ZY -"} -(3,1,1) = {" -ZY -ZY -ZY -ZY -ZY -ZY -ZY -ZY -ZY -ZY -ZY -ZY -ZY -ZY -ZY -ZY -ZY -ZY -ZY -ZY -ZY -ZY -ZY -ZY -ZY -ZY -ZY -ZY -ZY -ZY -ZY -ZY -ZY -ZY -ZY -ZY -ZY -ZY -ZY -ZY -ZY -ZY -ZY -ZY -ZY -ZY -ZY -ZY -ZY -ZY -ZY -ZY -ZY -ZY -ZY -ZY -ZY -ZY -ZY -ZY -ZY -ZY -ZY -ZY -ZY -ZY -ZY -ZY -ZY -ZY -ZY -"} -(4,1,1) = {" -ZY -ZY -ZY -ZY -ZY -ZY -ZY -ZY -ZY -ZY -ZY -ZY -ZY -ZY -ZY -ZY -ZY -ZY -ZY -ZY -ZY -ZY -ZY -ZY -ZY -ZY -ZY -ZY -ZY -ZY -ZY -ZY -ZY -ZY -ZY -ZY -ZY -ZY -ZY -ZY -ZY -ZY -ZY -ZY -ZY -ZY -ZY -ZY -ZY -ZY -ZY -ZY -ZY -ZY -ZY -ZY -ZY -ZY -ZY -ZY -ZY -ZY -ZY -ZY -ZY -ZY -ZY -ZY -ZY -ZY -ZY -"} -(5,1,1) = {" -ZY -ZY -ZY -ZY -ZY -ZY -ZY -ZY -ZY -ZY -ZY -ZY -ZY -ZY -ZY -ZY -ZY -ZY -ZY -ZY -ZY -ZY -ZY -ZY -ZY -ZY -mn -mn -mn -mn -mn -mn -mn -mn -ZY -ZY -ZY -ZY -ZY -ZY -ZY -ZY -ZY -ZY -ZY -ZY -ZY -ZY -ZY -ZY -ZY -ZY -ZY -ZY -ZY -ZY -ZY -ZY -ZY -ZY -ZY -ZY -ZY -ZY -ZY -ZY -ZY -ZY -ZY -ZY -ZY -"} -(6,1,1) = {" -ZY -ZY -ZY -ZY -ZY -ZY -ZY -ZY -ZY -ZY -ZY -ZY -ZY -ZY -ZY -ZY -ZY -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -ZY -ZY -ZY -ZY -ZY -ZY -ZY -ZY -ZY -ZY -ZY -ZY -"} -(7,1,1) = {" -ZY -ZY -ZY -ZY -ZY -ZY -ZY -ZY -ZY -ZY -ZY -ZY -ZY -ZY -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -ZY -ZY -ZY -ZY -ZY -ZY -ZY -ZY -ZY -ZY -"} -(8,1,1) = {" -ZY -ZY -ZY -ZY -ZY -ZY -ZY -ZY -ZY -ZY -ZY -ZY -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -ZY -ZY -ZY -ZY -ZY -ZY -ZY -ZY -"} -(9,1,1) = {" -ZY -ZY -ZY -ZY -ZY -ZY -ZY -ZY -ZY -ZY -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -ZY -ZY -ZY -ZY -ZY -ZY -ZY -"} -(10,1,1) = {" -ZY -ZY -ZY -ZY -ZY -ZY -ZY -ZY -ZY -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -ZY -ZY -ZY -ZY -ZY -ZY -ZY -"} -(11,1,1) = {" -ZY -ZY -ZY -ZY -ZY -ZY -ZY -ZY -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -ZY -ZY -ZY -ZY -ZY -ZY -"} -(12,1,1) = {" -ZY -ZY -ZY -ZY -ZY -ZY -ZY -ZY -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -ZY -ZY -ZY -ZY -ZY -ZY -"} -(13,1,1) = {" -ZY -ZY -ZY -ZY -ZY -ZY -ZY -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -ZY -ZY -ZY -ZY -ZY -"} -(14,1,1) = {" -ZY -ZY -ZY -ZY -ZY -ZY -ZY -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -ZY -ZY -ZY -ZY -ZY -"} -(15,1,1) = {" -ZY -ZY -ZY -ZY -ZY -ZY -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -ZY -ZY -ZY -ZY -ZY -"} -(16,1,1) = {" -ZY -ZY -ZY -ZY -ZY -ZY -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -ZY -ZY -ZY -ZY -ZY -"} -(17,1,1) = {" -ZY -ZY -ZY -ZY -ZY -ZY -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -ZY -ZY -ZY -ZY -ZY -"} -(18,1,1) = {" -ZY -ZY -ZY -ZY -ZY -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -ZY -ZY -ZY +/turf/open/floor/iron/dark, +/area/ruin/space/has_grav/port_tarkon/comms) +"eS" = ( +/obj/effect/turf_decal/tile/brown/half{ + dir = 4 + }, +/turf/open/floor/iron, +/area/ruin/space/has_grav/port_tarkon/mining) +"eT" = ( +/turf/closed/wall, +/area/ruin/space/has_grav/port_tarkon/forehall) +"fc" = ( +/obj/structure/trash_pile, +/turf/open/floor/plating, +/area/ruin/space/has_grav/port_tarkon/centerhall) +"fd" = ( +/obj/machinery/camera/tarkon/directional/east, +/turf/open/floor/wood/large, +/area/ruin/space/has_grav/port_tarkon/dorms) +"fe" = ( +/obj/machinery/computer/atmos_control/tarkon/incinerator{ + dir = 1 + }, +/obj/machinery/airalarm/directional/south, +/obj/effect/mapping_helpers/airalarm/all_access, +/obj/effect/turf_decal/stripes{ + dir = 4 + }, +/obj/structure/cable, +/turf/open/floor/engine, +/area/ruin/space/has_grav/port_tarkon/atmos) +"fg" = ( +/obj/structure/table/reinforced, +/obj/item/card/id/advanced/tarkon{ + pixel_y = -6 + }, +/obj/item/card/id/advanced/tarkon, +/obj/item/card/id/advanced/tarkon{ + pixel_y = 6 + }, +/obj/item/folder/red, +/obj/effect/turf_decal/tile/red/real_red/half, +/turf/open/floor/iron, +/area/ruin/space/has_grav/port_tarkon/secoff) +"fk" = ( +/obj/effect/turf_decal/tile/blue{ + dir = 1 + }, +/turf/open/floor/iron, +/area/ruin/space/has_grav/port_tarkon/trauma) +"fr" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron/dark, +/area/ruin/space/has_grav/port_tarkon/comms) +"fu" = ( +/turf/closed/wall, +/area/ruin/space/has_grav/port_tarkon/porthall) +"fy" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 4 + }, +/turf/open/floor/iron, +/area/ruin/space/has_grav/port_tarkon/mining) +"fA" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 1 + }, +/obj/effect/turf_decal/tile/neutral/half, +/turf/open/floor/iron, +/area/ruin/space/has_grav/port_tarkon/centerhall) +"fD" = ( +/obj/machinery/light/directional/south, +/obj/effect/turf_decal/tile/purple/half, +/turf/open/floor/iron/dark, +/area/ruin/space/has_grav/port_tarkon/developement) +"fI" = ( +/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{ + dir = 10 + }, +/turf/open/floor/iron, +/area/ruin/space/has_grav/port_tarkon/secoff) +"fJ" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 8 + }, +/obj/effect/turf_decal/tile/brown/half{ + dir = 1 + }, +/turf/open/floor/iron, +/area/ruin/space/has_grav/port_tarkon/cargo) +"fM" = ( +/obj/effect/turf_decal/tile/purple/anticorner{ + dir = 1 + }, +/obj/structure/chair/comfy/black, +/obj/effect/mob_spawn/ghost_role/human/tarkon/sci, +/turf/open/floor/iron/dark, +/area/ruin/space/has_grav/port_tarkon/developement) +"fP" = ( +/turf/open/floor/iron, +/area/ruin/space/has_grav/port_tarkon/starboardhall) +"fS" = ( +/obj/effect/mapping_helpers/apc/full_charge, +/obj/effect/mapping_helpers/apc/unlocked, +/obj/machinery/power/apc/auto_name/directional/west, +/obj/structure/cable, +/obj/effect/turf_decal/tile/blue/half{ + dir = 8 + }, +/turf/open/floor/iron, +/area/ruin/space/has_grav/port_tarkon/trauma) +"fW" = ( +/obj/effect/turf_decal/tile/brown{ + dir = 1 + }, +/turf/open/floor/iron, +/area/ruin/space/has_grav/port_tarkon/starboardhall) +"fX" = ( +/obj/structure/table/reinforced, +/obj/machinery/firealarm/directional/north, +/obj/item/storage/pouch/ammo{ + pixel_x = 7; + pixel_y = -6 + }, +/obj/item/storage/pouch/ammo{ + pixel_x = 7 + }, +/obj/item/storage/pouch/ammo{ + pixel_x = 7; + pixel_y = 7 + }, +/obj/effect/turf_decal/tile/red/real_red/half{ + dir = 1 + }, +/turf/open/floor/iron, +/area/ruin/space/has_grav/port_tarkon/secoff) +"fZ" = ( +/obj/effect/turf_decal/tile/red/real_red/half{ + dir = 1 + }, +/obj/machinery/camera/tarkon/directional/north, +/turf/open/floor/iron, +/area/ruin/space/has_grav/port_tarkon/starboardhall) +"gb" = ( +/turf/open/misc/asteroid/airless, +/area/solars/tarkon) +"gc" = ( +/obj/effect/spawner/structure/window/reinforced, +/obj/machinery/door/poddoor/shutters{ + id = "ptxeno" + }, +/turf/open/floor/iron/dark, +/area/ruin/space/has_grav/port_tarkon/developement) +"gd" = ( +/obj/structure/table/reinforced, +/obj/item/kitchen/rollingpin, +/turf/open/floor/iron/cafeteria, +/area/ruin/space/has_grav/port_tarkon/kitchen) +"gm" = ( +/obj/machinery/door/airlock/engineering{ + name = "Backup Power Storage" + }, +/obj/structure/cable, +/turf/open/floor/iron, +/area/ruin/space/has_grav/port_tarkon/power1) +"gq" = ( +/obj/effect/spawner/structure/window/reinforced, +/turf/open/floor/plating, +/area/ruin/space/has_grav/port_tarkon/mining) +"gv" = ( +/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 = 10 + }, +/turf/open/floor/iron, +/area/ruin/space/has_grav/port_tarkon/starboardhall) +"gy" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 4 + }, +/turf/open/floor/iron, +/area/ruin/space/has_grav/port_tarkon/secoff) +"gz" = ( +/obj/machinery/door/airlock/public/glass{ + name = "Fore Primary Hallway" + }, +/obj/machinery/door/firedoor/solid, +/turf/open/floor/iron, +/area/ruin/space/has_grav/port_tarkon/forehall) +"gB" = ( +/obj/effect/spawner/structure/window{ + polarizer_id = "tarkondisect" + }, +/turf/open/floor/plating, +/area/ruin/space/has_grav/port_tarkon/developement) +"gD" = ( +/obj/effect/turf_decal/tile/yellow/anticorner{ + dir = 4 + }, +/obj/machinery/camera/tarkon/directional/north, +/turf/open/floor/iron, +/area/ruin/space/has_grav/port_tarkon/toolstorage) +"gE" = ( +/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 = 10 + }, +/turf/open/floor/iron/dark, +/area/ruin/space/has_grav/port_tarkon/developement) +"gF" = ( +/obj/machinery/door/airlock/research/glass, +/obj/effect/mapping_helpers/airlock/access/all/tarkon/general, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/iron/dark, +/area/ruin/space/has_grav/port_tarkon/developement) +"gG" = ( +/obj/machinery/airalarm/directional/north, +/obj/machinery/light/directional/north, +/obj/effect/turf_decal/tile/brown/half{ + dir = 1 + }, +/turf/open/floor/iron, +/area/ruin/space/has_grav/port_tarkon/cargo) +"gN" = ( +/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/blue/half{ + dir = 4 + }, +/obj/structure/disposalpipe/segment, +/obj/machinery/camera/tarkon/directional/east, +/turf/open/floor/iron, +/area/ruin/space/has_grav/port_tarkon/afthall) +"gR" = ( +/obj/machinery/power/smes/engineering{ + charge = 0 + }, +/obj/structure/cable, +/obj/structure/window/reinforced/spawner/directional/south, +/turf/open/floor/iron, +/area/ruin/space/has_grav/port_tarkon/power1) +"gT" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/firealarm/directional/east, +/obj/structure/disposalpipe/segment, +/turf/open/floor/iron, +/area/ruin/space/has_grav/port_tarkon/starboardhall) +"gV" = ( +/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, +/turf/open/floor/iron, +/area/ruin/space/has_grav/port_tarkon/mining) +"gW" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 1 + }, +/turf/open/floor/iron, +/area/ruin/space/has_grav/port_tarkon/power1) +"gX" = ( +/obj/effect/turf_decal/tile/purple/half, +/obj/structure/table/reinforced, +/obj/item/autopsy_scanner, +/turf/open/floor/iron/dark, +/area/ruin/space/has_grav/port_tarkon/developement) +"ha" = ( +/obj/machinery/cryopod{ + dir = 8 + }, +/turf/open/floor/iron, +/area/ruin/space/has_grav/port_tarkon) +"hb" = ( +/obj/effect/turf_decal/tile/yellow/anticorner{ + dir = 4 + }, +/obj/structure/rack, +/obj/item/stock_parts/cell/high, +/obj/item/stock_parts/cell/high, +/obj/machinery/camera/tarkon/directional/north, +/turf/open/floor/iron, +/area/ruin/space/has_grav/port_tarkon/power1) +"hc" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron, +/area/ruin/space/has_grav/port_tarkon/storage) +"he" = ( +/turf/closed/wall/r_wall/rust, +/area/ruin/space/has_grav/outdoors) +"hf" = ( +/obj/machinery/chem_dispenser, +/obj/effect/turf_decal/tile/blue/anticorner{ + dir = 1 + }, +/obj/machinery/camera/tarkon/directional/west, +/turf/open/floor/iron, +/area/ruin/space/has_grav/port_tarkon/trauma) +"hh" = ( +/obj/effect/turf_decal/sand, +/obj/structure/closet/emcloset, +/turf/open/floor/iron, +/area/ruin/space/has_grav/port_tarkon/mining) +"hm" = ( +/obj/machinery/atmospherics/components/binary/dp_vent_pump/high_volume/incinerator_tarkon{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/visible/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/dark/visible, +/turf/open/floor/engine/vacuum, +/area/ruin/space/has_grav/port_tarkon/atmos) +"ho" = ( +/obj/effect/turf_decal/tile/purple/half{ + dir = 1 + }, +/obj/machinery/rnd/production/circuit_imprinter, +/turf/open/floor/iron/dark, +/area/ruin/space/has_grav/port_tarkon/developement) +"hp" = ( +/obj/structure/chair/office{ + dir = 1 + }, +/turf/open/floor/iron/dark, +/area/ruin/space/has_grav/port_tarkon/developement) +"hv" = ( +/obj/machinery/door/poddoor/shutters/window{ + id = "tarkoninner"; + name = "Interior Bay Shutter" + }, +/obj/effect/turf_decal/trimline/yellow/filled/warning{ + dir = 1 + }, +/turf/open/floor/iron, +/area/ruin/space/has_grav/port_tarkon/storage) +"hB" = ( +/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/east, +/obj/effect/mapping_helpers/apc/full_charge, +/obj/effect/mapping_helpers/apc/unlocked, +/obj/structure/disposalpipe/segment, +/turf/open/floor/iron, +/area/ruin/space/has_grav/port_tarkon/starboardhall) +"hD" = ( +/obj/effect/turf_decal/tile/purple/half{ + dir = 1 + }, +/obj/machinery/computer/camera_advanced/xenobio/tarkon, +/obj/machinery/button/door{ + id = "ptxeno"; + name = "shutter controls"; + pixel_y = 32 + }, +/turf/open/floor/iron/dark, +/area/ruin/space/has_grav/port_tarkon/developement) +"hG" = ( +/turf/closed/wall, +/area/ruin/space/has_grav/port_tarkon/kitchen) +"hH" = ( +/turf/open/floor/grass, +/area/ruin/space/has_grav/port_tarkon/garden) +"hM" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 8 + }, +/turf/open/floor/iron/cafeteria, +/area/ruin/space/has_grav/port_tarkon/kitchen) +"hO" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/machinery/door/poddoor/incinerator_atmos_aux, +/turf/open/floor/engine/vacuum, +/area/ruin/space/has_grav/port_tarkon/atmos) +"hP" = ( +/obj/machinery/light_switch/directional/west, +/obj/machinery/shower/directional/east, +/obj/effect/turf_decal/stripes{ + dir = 6 + }, +/obj/machinery/button/door{ + id = "ptatmos"; + name = "shutter controls"; + pixel_x = -39; + pixel_y = -10 + }, +/turf/open/floor/iron/dark, +/area/ruin/space/has_grav/port_tarkon/atmos) +"hQ" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/turf_decal/tile/neutral/anticorner{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/disposalpipe/segment{ + dir = 10 + }, +/turf/open/floor/iron, +/area/ruin/space/has_grav/port_tarkon/centerhall) +"hS" = ( +/obj/item/flashlight/lantern, +/obj/item/flashlight/lantern, +/obj/item/flashlight/lantern, +/obj/item/flashlight/lantern, +/obj/structure/table, +/turf/open/floor/iron, +/area/ruin/space/has_grav/port_tarkon) +"hX" = ( +/obj/effect/turf_decal/vg_decals/atmos/mix, +/obj/machinery/light/small/directional/west, +/turf/open/floor/engine/vacuum, +/area/ruin/space/has_grav/port_tarkon/atmos) +"id" = ( +/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{ + dir = 4 + }, +/turf/open/floor/iron, +/area/ruin/space/has_grav/port_tarkon/secoff) +"ie" = ( +/obj/structure/alien/weeds/node, +/turf/open/floor/iron, +/area/ruin/space/has_grav/port_tarkon/porthall) +"if" = ( +/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/neutral{ + dir = 8 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/iron, +/area/ruin/space/has_grav/port_tarkon/centerhall) +"ig" = ( +/obj/machinery/modular_computer/console{ + dir = 8 + }, +/obj/effect/turf_decal/tile/brown/anticorner{ + dir = 4 + }, +/turf/open/floor/iron, +/area/ruin/space/has_grav/port_tarkon/cargo) +"ii" = ( +/obj/effect/spawner/structure/window/reinforced/no_firelock, +/obj/machinery/atmospherics/pipe/layer_manifold/cyan/hidden{ + dir = 4 + }, +/turf/open/floor/plating, +/area/ruin/space/has_grav/port_tarkon/atmos) +"ix" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 8 + }, +/obj/effect/turf_decal/tile/neutral/half{ + dir = 4 + }, +/turf/open/floor/iron, +/area/ruin/space/has_grav/port_tarkon/centerhall) +"iz" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 4 + }, +/turf/open/floor/iron, +/area/ruin/space/has_grav/port_tarkon/forehall) +"iB" = ( +/obj/structure/cable, +/obj/effect/turf_decal/tile/blue/half{ + dir = 8 + }, +/obj/machinery/light/directional/west, +/obj/machinery/light_switch/directional/west, +/obj/machinery/disposal/bin, +/obj/structure/disposalpipe/trunk, +/turf/open/floor/iron, +/area/ruin/space/has_grav/port_tarkon/trauma) +"iD" = ( +/obj/structure/alien/resin/membrane, +/obj/effect/turf_decal/tile/purple, +/turf/open/floor/iron, +/area/ruin/space/has_grav/port_tarkon/porthall) +"iF" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/turf_decal/tile/neutral/anticorner{ + dir = 1 + }, +/turf/open/floor/iron, +/area/ruin/space/has_grav/port_tarkon/centerhall) +"iG" = ( +/obj/machinery/light/small/directional/east, +/obj/machinery/hydroponics/constructable, +/obj/structure/window/reinforced/spawner/directional/north, +/turf/open/floor/grass, +/area/ruin/space/has_grav/port_tarkon/garden) +"iL" = ( +/mob/living/basic/carp, +/turf/open/misc/asteroid/airless, +/area/ruin/space/has_grav/outdoors) +"iR" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 8 + }, +/obj/structure/alien/weeds/node, +/turf/open/floor/iron, +/area/ruin/space/has_grav/port_tarkon/porthall) +"iU" = ( +/obj/machinery/firealarm/directional/west, +/turf/open/floor/iron, +/area/ruin/space/has_grav/port_tarkon/forehall) +"iW" = ( +/obj/effect/turf_decal/vg_decals/atmos/plasma, +/obj/machinery/light/small/directional/east, +/obj/machinery/air_sensor/tarkon/plasma_tank{ + pixel_x = 26 + }, +/turf/open/floor/engine/plasma, +/area/ruin/space/has_grav/port_tarkon/atmos) +"iX" = ( +/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/neutral, +/obj/structure/disposalpipe/segment{ + dir = 6 + }, +/turf/open/floor/iron, +/area/ruin/space/has_grav/port_tarkon/centerhall) +"iZ" = ( +/obj/machinery/door/airlock/research, +/obj/machinery/door/firedoor/solid, +/obj/effect/mapping_helpers/airlock/access/all/tarkon/general, +/obj/effect/turf_decal/tile/purple/half, +/turf/open/floor/iron, +/area/ruin/space/has_grav/port_tarkon/developement) +"jb" = ( +/obj/effect/turf_decal/stripes{ + dir = 1 + }, +/turf/open/floor/iron/dark, +/area/ruin/space/has_grav/port_tarkon/atmos) +"jd" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/grass/lavaland{ + initial_gas_mix = "o2=22;n2=82;TEMP=293.15" + }, +/area/ruin/space/has_grav/port_tarkon/garden) +"jg" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 4 + }, +/turf/open/floor/iron, +/area/ruin/space/has_grav/port_tarkon/forehall) +"jh" = ( +/obj/machinery/light/directional/north, +/turf/open/floor/iron, +/area/ruin/space/has_grav/port_tarkon/forehall) +"jq" = ( +/obj/effect/spawner/structure/window/reinforced, +/turf/open/floor/plating, +/area/ruin/space/has_grav/port_tarkon/secoff) +"jr" = ( +/turf/closed/wall/r_wall, +/area/ruin/space/has_grav/port_tarkon/toolstorage) +"jt" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/door/poddoor/shutters{ + id = "ptatmos" + }, +/obj/effect/spawner/structure/window/reinforced/no_firelock, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/plating, +/area/ruin/space/has_grav/port_tarkon/atmos) +"jx" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/plating, +/area/ruin/space/has_grav/port_tarkon/observ) +"jA" = ( +/obj/structure/table/reinforced, +/obj/item/paper_bin/carbon, +/obj/item/pen, +/turf/open/floor/iron/dark, +/area/ruin/space/has_grav/port_tarkon/comms) +"jB" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/button/door{ + id = "ptporthall"; + name = "shutter controls"; + pixel_x = -31 + }, +/obj/structure/alien/resin/membrane, +/obj/structure/disposalpipe/segment, +/turf/open/floor/iron, +/area/ruin/space/has_grav/port_tarkon/porthall) +"jE" = ( +/obj/effect/turf_decal/tile/blue/half{ + dir = 4 + }, +/obj/structure/noticeboard/directional/east, +/obj/item/paper/fluff/ruins/tarkon/goals, +/obj/item/paper/fluff/ruins/tarkon/vaulter, +/obj/item/paper/fluff/ruins/tarkon/driverpitch, +/obj/structure/disposalpipe/segment{ + dir = 9 + }, +/obj/item/paper/fluff/ruins/tarkon/comsafe, +/obj/item/paper/fluff/ruins/tarkon/arcs, +/obj/item/paper/fluff/ruins/tarkon/trcd, +/turf/open/floor/iron/dark, +/area/ruin/space/has_grav/port_tarkon/comms) +"jH" = ( +/obj/structure/closet/emcloset, +/obj/effect/turf_decal/tile/brown/half{ + dir = 1 + }, +/obj/machinery/camera/tarkon/directional/north, +/turf/open/floor/iron, +/area/ruin/space/has_grav/port_tarkon/mining) +"jL" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/layer2{ + dir = 8 + }, +/turf/open/floor/engine/vacuum, +/area/ruin/space/has_grav/port_tarkon/atmos) +"jO" = ( +/obj/structure/table/reinforced, +/obj/item/clothing/gloves/color/yellow, +/obj/item/wirecutters, +/obj/item/wrench, +/obj/effect/turf_decal/tile/yellow/half{ + dir = 1 + }, +/turf/open/floor/plating, +/area/ruin/space/has_grav/port_tarkon/atmos) +"jQ" = ( +/obj/machinery/biogenerator, +/turf/open/floor/iron, +/area/ruin/space/has_grav/port_tarkon/garden) +"jT" = ( +/obj/machinery/camera/tarkon/directional/north, +/turf/open/floor/iron, +/area/ruin/space/has_grav/port_tarkon/forehall) +"jV" = ( +/obj/effect/turf_decal/sand/plating, +/obj/structure/cable, +/turf/open/floor/plating/airless, +/area/solars/tarkon) +"jX" = ( +/turf/open/floor/iron/dark, +/area/ruin/space/has_grav/port_tarkon/developement) +"jY" = ( +/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/blue/half, +/obj/machinery/door/airlock/medical, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/iron, +/area/ruin/space/has_grav/port_tarkon/trauma) +"jZ" = ( +/obj/effect/turf_decal/sand, +/obj/machinery/light/small/directional/east, +/obj/machinery/camera/tarkon/directional/north, +/turf/open/floor/iron, +/area/ruin/space/has_grav/port_tarkon/mining) +"kc" = ( +/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{ + dir = 8 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/iron, +/area/ruin/space/has_grav/port_tarkon/starboardhall) +"kh" = ( +/obj/effect/turf_decal/stripes/asteroid/corner{ + dir = 1 + }, +/turf/open/misc/asteroid/airless, +/area/solars/tarkon) +"kk" = ( +/obj/effect/turf_decal/tile/neutral, +/obj/effect/turf_decal/tile/neutral{ + dir = 1 + }, +/turf/open/floor/iron, +/area/ruin/space/has_grav/port_tarkon/centerhall) +"kl" = ( +/obj/structure/table, +/obj/item/reagent_containers/dropper, +/turf/open/floor/iron, +/area/ruin/space/has_grav/port_tarkon/trauma) +"kn" = ( +/obj/machinery/seed_extractor, +/turf/open/floor/iron, +/area/ruin/space/has_grav/port_tarkon/garden) +"kp" = ( +/obj/structure/fence{ + dir = 4 + }, +/turf/open/misc/asteroid/airless, +/area/ruin/space/has_grav/outdoors) +"ku" = ( +/obj/effect/turf_decal/tile/purple/half, +/obj/machinery/airalarm/directional/south, +/obj/effect/mapping_helpers/airalarm/all_access, +/turf/open/floor/iron/dark, +/area/ruin/space/has_grav/port_tarkon/developement) +"kA" = ( +/turf/open/floor/iron, +/area/ruin/space/has_grav/port_tarkon/centerhall) +"kC" = ( +/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/neutral{ + dir = 8 + }, +/obj/effect/turf_decal/tile/neutral{ + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 10 + }, +/turf/open/floor/iron, +/area/ruin/space/has_grav/port_tarkon/centerhall) +"kD" = ( +/obj/effect/spawner/structure/window{ + polarizer_id = "tarkondisect" + }, +/obj/effect/turf_decal/tile/purple/half, +/turf/open/floor/iron/dark, +/area/ruin/space/has_grav/port_tarkon/developement) +"kE" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 8 + }, +/obj/machinery/light/small/directional/east, +/turf/open/floor/iron, +/area/ruin/space/has_grav/port_tarkon/secoff) +"kF" = ( +/obj/structure/table/reinforced, +/obj/effect/turf_decal/tile/blue/half{ + dir = 8 + }, +/obj/machinery/button/door{ + id = "ptcomms"; + name = "shutter controls" + }, +/turf/open/floor/iron/dark, +/area/ruin/space/has_grav/port_tarkon/comms) +"kG" = ( +/obj/machinery/light/small/directional/north, +/turf/open/floor/iron, +/area/ruin/space/has_grav/port_tarkon/forehall) +"kJ" = ( +/turf/template_noop, +/area/ruin/space/has_grav/outdoors) +"kN" = ( +/obj/structure/table/reinforced, +/obj/machinery/door/window/brigdoor/tarkon/right/directional/south, +/obj/machinery/door/window/brigdoor/tarkon/left/directional/north, +/obj/item/paper_bin{ + pixel_x = 7 + }, +/turf/open/floor/iron, +/area/ruin/space/has_grav/port_tarkon/secoff) +"kR" = ( +/obj/structure/closet, +/obj/machinery/firealarm/directional/east, +/obj/item/clothing/under/tarkon/sci, +/obj/item/clothing/under/tarkon/sci, +/obj/item/clothing/under/tarkon/sci, +/obj/item/clothing/under/tarkon/sci, +/obj/item/clothing/under/tarkon/sci, +/obj/item/clothing/under/tarkon/sci, +/obj/item/storage/backpack/duffelbag/science/robo, +/obj/item/storage/backpack/duffelbag/science, +/obj/item/storage/backpack/messenger/science, +/obj/item/storage/backpack/messenger/science/robo, +/obj/item/storage/backpack/satchel/science, +/obj/item/storage/backpack/satchel/science/robo, +/obj/item/storage/backpack/science, +/obj/item/storage/backpack/science/robo, +/obj/item/clothing/head/utility/welding/hat, +/obj/item/clothing/head/utility/welding/hat, +/turf/open/floor/iron, +/area/ruin/space/has_grav/port_tarkon) +"kS" = ( +/obj/machinery/button/door{ + id = "tarkonouter"; + name = "Exterior Shutter Control"; + pixel_x = -6 + }, +/obj/machinery/button/door{ + id = "tarkoninner"; + name = "Inner Shutter Control"; + pixel_x = 6 + }, +/turf/closed/wall, +/area/ruin/space/has_grav/port_tarkon/storage) +"kU" = ( +/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/tile/neutral/half{ + dir = 1 + }, +/obj/structure/disposalpipe/segment{ + dir = 5 + }, +/turf/open/floor/iron, +/area/ruin/space/has_grav/port_tarkon/centerhall) +"kV" = ( +/turf/open/misc/asteroid/airless, +/area/ruin/space/has_grav/outdoors) +"kX" = ( +/obj/effect/turf_decal/stripes/asteroid/corner, +/turf/open/misc/asteroid/airless, +/area/solars/tarkon) +"kY" = ( +/obj/effect/spawner/structure/window/reinforced, +/turf/open/floor/plating, +/area/ruin/space/has_grav/port_tarkon/storage) +"lh" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 8 + }, +/turf/open/floor/iron/dark, +/area/ruin/space/has_grav/port_tarkon/comms) +"lk" = ( +/obj/effect/turf_decal/tile/blue/half{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/cyan/visible, +/obj/structure/table, +/obj/item/reagent_containers/cup/beaker/cryoxadone{ + pixel_x = 6; + pixel_y = 6 + }, +/obj/item/emergency_bed, +/turf/open/floor/iron, +/area/ruin/space/has_grav/port_tarkon/trauma) +"lm" = ( +/obj/effect/turf_decal/tile/purple/half{ + dir = 1 + }, +/obj/structure/table/reinforced, +/obj/machinery/research/anomaly_refinery, +/turf/open/floor/iron/dark, +/area/ruin/space/has_grav/port_tarkon/developement) +"lq" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/turf_decal/tile/purple/half{ + dir = 1 + }, +/obj/structure/disposalpipe/segment, +/turf/open/floor/iron/dark, +/area/ruin/space/has_grav/port_tarkon/developement) +"lt" = ( +/obj/effect/spawner/structure/window/reinforced, +/turf/open/floor/plating, +/area/ruin/space/has_grav/port_tarkon/atmos) +"lu" = ( +/obj/machinery/light/directional/west, +/obj/effect/turf_decal/tile/brown/half{ + dir = 8 + }, +/turf/open/floor/iron, +/area/ruin/space/has_grav/port_tarkon/storage) +"lv" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/cable, +/obj/machinery/power/apc/auto_name/directional/south, +/obj/effect/mapping_helpers/apc/full_charge, +/obj/effect/mapping_helpers/apc/unlocked, +/turf/open/floor/iron, +/area/ruin/space/has_grav/port_tarkon/forehall) +"lz" = ( +/obj/machinery/firealarm/directional/west, +/obj/effect/turf_decal/tile/yellow/half{ + dir = 8 + }, +/obj/structure/disposalpipe/trunk{ + dir = 4 + }, +/obj/machinery/disposal/bin, +/turf/open/floor/iron, +/area/ruin/space/has_grav/port_tarkon/toolstorage) +"lA" = ( +/obj/machinery/light/small/directional/east, +/obj/effect/turf_decal/tile/blue/half{ + dir = 4 + }, +/turf/open/floor/iron, +/area/ruin/space/has_grav/port_tarkon/trauma) +"lB" = ( +/obj/machinery/firealarm/directional/east, +/turf/open/floor/plating, +/area/ruin/space/has_grav/port_tarkon/observ) +"lC" = ( +/obj/structure/table/reinforced, +/obj/item/stack/sheet/iron/fifty, +/obj/item/stack/sheet/glass/fifty, +/obj/effect/turf_decal/tile/yellow/half, +/turf/open/floor/iron, +/area/ruin/space/has_grav/port_tarkon/atmos) +"lD" = ( +/obj/structure/fence, +/turf/open/misc/asteroid/airless, +/area/ruin/space/has_grav/outdoors) +"lE" = ( +/obj/machinery/power/smes/engineering{ + charge = 0 + }, +/obj/structure/cable, +/obj/effect/turf_decal/tile/yellow/half{ + dir = 1 + }, +/turf/open/floor/iron, +/area/ruin/space/has_grav/port_tarkon/power1) +"lG" = ( +/obj/machinery/light_switch/directional/north, +/obj/effect/turf_decal/tile/neutral/half{ + dir = 1 + }, +/obj/machinery/camera/tarkon/directional/north, +/turf/open/floor/iron, +/area/ruin/space/has_grav/port_tarkon/centerhall) +"lM" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/disposalpipe/segment{ + dir = 9 + }, +/turf/open/floor/iron, +/area/ruin/space/has_grav/port_tarkon/atmos) +"lN" = ( +/obj/structure/grille, +/turf/closed/wall/r_wall, +/area/ruin/space/has_grav/port_tarkon/atmos) +"lO" = ( +/obj/machinery/firealarm/directional/north, +/obj/effect/turf_decal/tile/yellow/half{ + dir = 1 + }, +/obj/effect/mob_spawn/ghost_role/human/tarkon, +/turf/open/floor/iron, +/area/ruin/space/has_grav/port_tarkon/toolstorage) +"lS" = ( +/obj/effect/turf_decal/tile/purple/half{ + dir = 1 + }, +/obj/effect/spawner/structure/window/reinforced, +/obj/machinery/door/poddoor/shutters{ + id = "ptxeno" + }, +/turf/open/floor/iron/dark, +/area/ruin/space/has_grav/port_tarkon/developement) +"lU" = ( +/obj/machinery/door/airlock/public/glass/incinerator/tarkon_exterior, +/obj/effect/mapping_helpers/airlock/locked, +/obj/effect/mapping_helpers/airlock/cyclelink_helper{ + dir = 1 + }, +/obj/effect/turf_decal/stripes, +/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/visible/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/dark/visible, +/turf/open/floor/engine/vacuum, +/area/ruin/space/has_grav/port_tarkon/atmos) +"ma" = ( +/obj/effect/turf_decal/sand, +/obj/machinery/light/directional/east, +/obj/machinery/airalarm/directional/east, +/obj/effect/mapping_helpers/airalarm/all_access, +/obj/effect/turf_decal/tile/brown/half{ + dir = 4 + }, +/turf/open/floor/iron, +/area/ruin/space/has_grav/port_tarkon/mining) +"mb" = ( +/obj/machinery/camera/tarkon/directional/west, +/turf/closed/wall, +/area/ruin/space/has_grav/port_tarkon/power1) +"mc" = ( +/obj/effect/turf_decal/sand/plating, +/obj/effect/turf_decal/tile/brown, +/obj/structure/cable, +/turf/open/floor/iron, +/area/ruin/space/has_grav/port_tarkon/mining) +"md" = ( +/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{ + dir = 4 + }, +/turf/open/floor/iron, +/area/ruin/space/has_grav/port_tarkon/cargo) +"me" = ( +/obj/effect/turf_decal/tile/purple/half{ + dir = 4 + }, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 1 + }, +/turf/open/floor/iron/dark, +/area/ruin/space/has_grav/port_tarkon/developement) +"mf" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/turf_decal/tile/purple/half, +/obj/structure/disposalpipe/segment{ + dir = 10 + }, +/turf/open/floor/iron/dark, +/area/ruin/space/has_grav/port_tarkon/developement) +"mh" = ( +/obj/structure/cable, +/obj/machinery/door/window/brigdoor/tarkon/left/directional/south, +/turf/open/floor/iron, +/area/ruin/space/has_grav/port_tarkon/power1) +"mi" = ( +/obj/effect/turf_decal/tile/purple/half{ + dir = 8 + }, +/turf/open/floor/iron/dark, +/area/ruin/space/has_grav/port_tarkon/developement) +"mj" = ( +/obj/machinery/light/warm/directional/south, +/obj/effect/turf_decal/tile/neutral/anticorner, +/turf/open/floor/iron, +/area/ruin/space/has_grav/port_tarkon/centerhall) +"ml" = ( +/obj/effect/turf_decal/tile/brown/half{ + dir = 8 + }, +/obj/structure/disposalpipe/segment, +/turf/open/floor/iron, +/area/ruin/space/has_grav/port_tarkon/mining) +"mm" = ( +/obj/item/electronics/apc, +/obj/item/electronics/apc, +/obj/item/electronics/airlock, +/obj/item/electronics/airlock, +/obj/item/electronics/airalarm, +/obj/item/electronics/airalarm, +/obj/structure/closet/crate/engineering/electrical{ + name = "electronics crate" + }, +/obj/item/electronics/tracker, +/obj/item/stack/cable_coil, +/obj/item/clothing/gloves/color/yellow, +/obj/item/circuitboard/computer/atmos_control/tarkon/carbon_tank, +/obj/item/circuitboard/computer/atmos_control/tarkon/mix_tank, +/obj/item/circuitboard/computer/atmos_control/tarkon/nitrogen_tank, +/obj/item/circuitboard/computer/atmos_control/tarkon/incinerator, +/obj/item/circuitboard/computer/atmos_control/tarkon/oxygen_tank, +/obj/item/circuitboard/computer/atmos_control/tarkon/plasma_tank, +/obj/item/circuitboard/computer/tarkon_driver, +/obj/effect/turf_decal/tile/yellow/half{ + dir = 1 + }, +/obj/item/circuitboard/machine/circulator, +/obj/item/circuitboard/machine/circulator, +/obj/item/circuitboard/machine/thermoelectric_generator, +/turf/open/floor/iron, +/area/ruin/space/has_grav/port_tarkon/atmos) +"mn" = ( +/obj/structure/spawner/tarkon_xenos/minor, +/turf/open/misc/asteroid/airless, +/area/ruin/space/has_grav/outdoors) +"mo" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/cable, +/obj/machinery/door/firedoor/solid, +/obj/machinery/door/airlock/public/glass{ + name = "Public Observatory" + }, +/obj/structure/disposalpipe/segment, +/turf/open/floor/iron, +/area/ruin/space/has_grav/port_tarkon/porthall) +"mp" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, +/turf/open/floor/iron, +/area/ruin/space/has_grav/port_tarkon/porthall) +"mq" = ( +/obj/structure/ore_box, +/obj/effect/turf_decal/tile/brown/anticorner{ + dir = 8 + }, +/turf/open/floor/iron, +/area/ruin/space/has_grav/port_tarkon/mining) +"ms" = ( +/turf/closed/wall, +/area/ruin/space/has_grav/port_tarkon/power1) +"mt" = ( +/turf/open/floor/iron/white, +/area/ruin/space/has_grav/port_tarkon/centerhall) +"mB" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron, +/area/ruin/space/has_grav/port_tarkon/mining) +"mC" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/machinery/door/poddoor/incinerator_atmos_main, +/turf/open/floor/engine/vacuum, +/area/ruin/space/has_grav/port_tarkon/atmos) +"mD" = ( +/turf/closed/wall, +/area/ruin/space/has_grav/port_tarkon/mining) +"mG" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/modular_map_root/port_tarkon{ + key = "xeno" + }, +/turf/open/floor/iron/dark, +/area/ruin/space/has_grav/port_tarkon/developement) +"mJ" = ( +/obj/machinery/door/airlock/public/glass{ + name = "Aft Primary Hallway" + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/cable, +/obj/machinery/door/firedoor/solid, +/obj/effect/turf_decal/tile/blue/half{ + dir = 4 + }, +/obj/structure/disposalpipe/segment, +/turf/open/floor/iron, +/area/ruin/space/has_grav/port_tarkon/afthall) +"mK" = ( +/obj/structure/table/reinforced, +/obj/item/assembly/signaler, +/obj/effect/turf_decal/tile/yellow/half{ + dir = 1 + }, +/turf/open/floor/iron, +/area/ruin/space/has_grav/port_tarkon/toolstorage) +"mM" = ( +/obj/structure/cable, +/turf/open/floor/iron, +/area/ruin/space/has_grav/port_tarkon/secoff) +"mO" = ( +/obj/effect/turf_decal/tile/brown/half{ + dir = 8 + }, +/obj/modular_map_root/port_tarkon{ + key = "cargo" + }, +/turf/open/floor/iron, +/area/ruin/space/has_grav/port_tarkon/storage) +"mQ" = ( +/obj/structure/spawner/tarkon_xenos/minor, +/obj/effect/mapping_helpers/broken_floor, +/turf/open/floor/plating, +/area/ruin/space/has_grav/port_tarkon/observ) +"mS" = ( +/obj/machinery/airalarm/directional/west, +/obj/effect/mapping_helpers/airalarm/all_access, +/obj/effect/turf_decal/tile/neutral/half{ + dir = 8 + }, +/turf/open/floor/iron, +/area/ruin/space/has_grav/port_tarkon/centerhall) +"mX" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron, +/area/ruin/space/has_grav/port_tarkon/mining) +"nb" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 8 + }, +/obj/machinery/airalarm/directional/south, +/obj/effect/mapping_helpers/airalarm/all_access, +/obj/effect/turf_decal/tile/brown/half, +/turf/open/floor/iron, +/area/ruin/space/has_grav/port_tarkon/storage) +"ne" = ( +/obj/machinery/power/terminal, +/obj/structure/cable, +/turf/open/floor/plating, +/area/ruin/space/has_grav/port_tarkon/power1) +"nh" = ( +/obj/machinery/door/firedoor/solid, +/obj/machinery/door/airlock/public/glass{ + name = "Public Observatory" + }, +/turf/open/floor/iron, +/area/ruin/space/has_grav/port_tarkon/observ) +"nj" = ( +/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/iron, +/area/ruin/space/has_grav/port_tarkon/porthall) +"nq" = ( +/obj/effect/turf_decal/stripes{ + dir = 1 + }, +/obj/machinery/light/directional/west, +/obj/structure/window/reinforced/spawner/directional/north, +/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/visible/layer2{ + dir = 6 + }, +/obj/structure/closet/radiation, +/obj/item/clothing/head/utility/radiation, +/obj/item/clothing/suit/utility/radiation, +/obj/machinery/camera/tarkon/directional/south, +/turf/open/floor/iron/dark, +/area/ruin/space/has_grav/port_tarkon/atmos) +"nr" = ( +/obj/effect/turf_decal/tile/purple/half{ + dir = 4 + }, +/obj/structure/table/reinforced, +/obj/item/storage/part_replacer/cargo, +/obj/structure/noticeboard/directional/east, +/obj/item/paper/fluff/ruins/tarkon/scisafe, +/obj/machinery/camera/tarkon/directional/east, +/turf/open/floor/iron/dark, +/area/ruin/space/has_grav/port_tarkon/developement) +"ns" = ( +/obj/structure/table/reinforced, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/iron, +/area/ruin/space/has_grav/port_tarkon/centerhall) +"nw" = ( +/obj/machinery/door/airlock/research, +/obj/machinery/door/firedoor/solid, +/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/tarkon/general, +/obj/effect/turf_decal/tile/purple/full, +/obj/structure/disposalpipe/segment, +/turf/open/floor/iron, +/area/ruin/space/has_grav/port_tarkon/developement) +"nC" = ( +/obj/structure/safe/floor, +/obj/item/stack/sheet/bluespace_crystal{ + amount = 5 + }, +/obj/item/stack/sheet/mineral/diamond{ + amount = 10 + }, +/turf/open/floor/iron/dark, +/area/ruin/space/has_grav/port_tarkon/developement) +"nE" = ( +/obj/effect/turf_decal/sand/plating, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron, +/area/ruin/space/has_grav/port_tarkon/mining) +"nJ" = ( +/obj/machinery/airalarm/directional/north, +/obj/effect/mapping_helpers/airalarm/all_access, +/obj/machinery/light/directional/north, +/obj/structure/table/reinforced, +/obj/item/circuitboard/machine/tank_compressor, +/obj/item/circuitboard/machine/rtg/advanced, +/obj/effect/turf_decal/tile/yellow/half{ + dir = 1 + }, +/turf/open/floor/iron, +/area/ruin/space/has_grav/port_tarkon/atmos) +"nK" = ( +/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/yellow{ + dir = 4 + }, +/turf/open/floor/iron, +/area/ruin/space/has_grav/port_tarkon/power1) +"nQ" = ( +/obj/structure/spawner/tarkon_xenos/common, +/obj/effect/mapping_helpers/broken_floor, +/turf/open/floor/plating, +/area/ruin/space/has_grav/port_tarkon/observ) +"nR" = ( +/obj/effect/turf_decal/tile/purple/half{ + dir = 4 + }, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, +/turf/open/floor/iron/dark, +/area/ruin/space/has_grav/port_tarkon/developement) +"nT" = ( +/obj/effect/turf_decal/stripes/asteroid/line{ + dir = 10 + }, +/turf/open/misc/asteroid/airless, +/area/solars/tarkon) +"nU" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron, +/area/ruin/space/has_grav/port_tarkon) +"nW" = ( +/obj/structure/cable, +/turf/open/floor/iron, +/area/ruin/space/has_grav/port_tarkon/atmos) +"nZ" = ( +/obj/structure/cable, +/obj/machinery/door/airlock/mining/glass, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/door/firedoor/solid, +/turf/open/floor/iron, +/area/ruin/space/has_grav/port_tarkon/mining) +"oh" = ( +/obj/effect/turf_decal/tile/neutral/anticorner{ + dir = 4 + }, +/turf/open/floor/iron, +/area/ruin/space/has_grav/port_tarkon/centerhall) +"om" = ( +/obj/effect/turf_decal/tile/blue/half{ + dir = 4 + }, +/obj/structure/table/reinforced, +/obj/item/reagent_containers/cup/glass/flask/gold, +/turf/open/floor/iron/dark, +/area/ruin/space/has_grav/port_tarkon/comms) +"os" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 4 + }, +/turf/open/floor/iron/dark, +/area/ruin/space/has_grav/port_tarkon/developement) +"ou" = ( +/obj/structure/rack, +/obj/item/ammo_box/magazine/c35sol_pistol, +/obj/item/ammo_box/magazine/c35sol_pistol, +/obj/item/ammo_box/magazine/c35sol_pistol, +/obj/item/ammo_box/magazine/c35sol_pistol, +/obj/item/ammo_box/magazine/c35sol_pistol, +/obj/item/ammo_box/magazine/c35sol_pistol, +/obj/item/ammo_box/magazine/c35sol_pistol, +/obj/item/ammo_box/magazine/c35sol_pistol, +/obj/item/ammo_box/magazine/c35sol_pistol, +/obj/effect/turf_decal/tile/red/real_red/half{ + dir = 1 + }, +/turf/open/floor/iron, +/area/ruin/space/has_grav/port_tarkon/secoff) +"ov" = ( +/obj/machinery/griddle, +/obj/structure/noticeboard/directional/south, +/turf/open/floor/iron/cafeteria, +/area/ruin/space/has_grav/port_tarkon/kitchen) +"oy" = ( +/obj/structure/cable, +/obj/machinery/door/airlock/public/glass{ + name = "Starboard Primary Hallway" + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/door/firedoor/solid, +/obj/effect/turf_decal/tile/brown/half, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/iron, +/area/ruin/space/has_grav/port_tarkon/starboardhall) +"oA" = ( +/obj/effect/turf_decal/tile/neutral/half, +/obj/machinery/camera/tarkon/directional/south, +/turf/open/floor/iron, +/area/ruin/space/has_grav/port_tarkon/centerhall) +"oE" = ( +/obj/effect/turf_decal/tile/brown/half{ + dir = 4 + }, +/obj/item/stack/spacecash/c10000, +/obj/item/stack/spacecash/c10000, +/obj/item/stack/spacecash/c10000, +/obj/item/stack/spacecash/c10000, +/obj/item/stack/spacecash/c10000, +/obj/structure/safe/floor, +/turf/open/floor/iron, +/area/ruin/space/has_grav/port_tarkon/storage) +"oG" = ( +/obj/effect/turf_decal/sand/plating, +/obj/structure/fence/door/opened{ + dir = 4 + }, +/turf/open/floor/plating/airless, +/area/ruin/space/has_grav/outdoors) +"oH" = ( +/obj/structure/cable, +/obj/machinery/power/apc/auto_name/directional/west, +/obj/effect/mapping_helpers/apc/full_charge, +/obj/effect/mapping_helpers/apc/unlocked, +/obj/structure/table/reinforced, +/obj/item/folder/yellow, +/obj/item/folder/red, +/obj/effect/turf_decal/tile/brown/half{ + dir = 8 + }, +/turf/open/floor/iron, +/area/ruin/space/has_grav/port_tarkon/cargo) +"oJ" = ( +/obj/structure/fireaxecabinet/directional/north, +/obj/machinery/pipedispenser, +/obj/effect/turf_decal/tile/yellow/half{ + dir = 1 + }, +/turf/open/floor/iron, +/area/ruin/space/has_grav/port_tarkon/atmos) +"oL" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/cable, +/obj/structure/alien/resin/membrane, +/obj/structure/disposalpipe/segment{ + dir = 6 + }, +/turf/open/floor/plating, +/area/ruin/space/has_grav/port_tarkon/observ) +"oN" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/disposalpipe/segment{ + dir = 5 + }, +/obj/machinery/camera/tarkon/directional/west, +/turf/open/floor/iron, +/area/ruin/space/has_grav/port_tarkon/porthall) +"oQ" = ( +/obj/machinery/door/airlock/multi_tile/public/glass{ + dir = 8 + }, +/obj/machinery/door/firedoor/solid, +/turf/open/floor/iron, +/area/ruin/space/has_grav/port_tarkon/garden) +"oU" = ( +/obj/effect/turf_decal/tile/purple/half, +/obj/machinery/camera/tarkon/directional/south, +/turf/open/floor/iron/dark, +/area/ruin/space/has_grav/port_tarkon/developement) +"oV" = ( +/obj/effect/turf_decal/tile/neutral/anticorner{ + dir = 8 + }, +/turf/open/floor/iron, +/area/ruin/space/has_grav/port_tarkon/centerhall) +"oX" = ( +/obj/machinery/power/turbine/inlet_compressor{ + dir = 4 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/effect/turf_decal/stripes/red/line{ + dir = 8 + }, +/obj/structure/cable, +/turf/open/floor/engine/vacuum, +/area/ruin/space/has_grav/port_tarkon/atmos) +"oZ" = ( +/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 = 8 + }, +/obj/structure/cable, +/turf/open/floor/iron, +/area/ruin/space/has_grav/port_tarkon/mining) +"pb" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, +/turf/open/floor/grass/lavaland{ + initial_gas_mix = "o2=22;n2=82;TEMP=293.15" + }, +/area/ruin/space/has_grav/port_tarkon/garden) +"pe" = ( +/obj/effect/turf_decal/tile/purple/half{ + dir = 8 + }, +/obj/machinery/computer/rdconsole{ + dir = 4 + }, +/obj/machinery/camera/tarkon/directional/west, +/turf/open/floor/iron/dark, +/area/ruin/space/has_grav/port_tarkon/developement) +"pf" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 8 + }, +/turf/open/floor/grass/lavaland{ + initial_gas_mix = "o2=22;n2=82;TEMP=293.15" + }, +/area/ruin/space/has_grav/port_tarkon/garden) +"ph" = ( +/obj/machinery/airalarm/directional/north, +/obj/effect/mapping_helpers/airalarm/all_access, +/obj/structure/closet, +/obj/item/clothing/gloves/color/plasmaman/black, +/obj/item/clothing/gloves/color/plasmaman/black, +/obj/item/clothing/gloves/color/plasmaman/black, +/obj/item/clothing/gloves/color/plasmaman/black, +/obj/item/clothing/gloves/color/plasmaman/chief_engineer, +/obj/item/clothing/head/helmet/space/plasmaman, +/obj/item/clothing/head/helmet/space/plasmaman, +/obj/item/clothing/head/helmet/space/plasmaman, +/obj/item/clothing/head/helmet/space/plasmaman, +/obj/item/clothing/head/helmet/space/plasmaman, +/obj/item/clothing/under/plasmaman, +/obj/item/clothing/under/plasmaman, +/obj/item/clothing/under/plasmaman, +/obj/item/clothing/under/plasmaman, +/obj/item/clothing/under/plasmaman, +/obj/item/tank/internals/plasmaman/belt/full, +/obj/item/tank/internals/plasmaman/belt/full, +/obj/item/tank/internals/plasmaman/belt/full, +/obj/item/tank/internals/plasmaman/belt/full, +/obj/item/tank/internals/plasmaman/belt/full, +/obj/item/tank/internals/nitrogen/belt/full, +/obj/item/tank/internals/nitrogen/belt/full, +/obj/item/tank/internals/nitrogen/belt/full, +/obj/item/tank/internals/nitrogen/belt/full, +/obj/item/tank/internals/nitrogen/belt/full, +/obj/item/clothing/mask/breath/vox, +/obj/item/clothing/mask/breath/vox, +/obj/item/clothing/mask/breath/vox, +/obj/item/clothing/mask/breath/vox, +/obj/item/clothing/mask/breath/vox, +/turf/open/floor/iron, +/area/ruin/space/has_grav/port_tarkon) +"pi" = ( +/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/blue/half{ + dir = 4 + }, +/obj/structure/disposalpipe/junction/flip{ + dir = 1 + }, +/turf/open/floor/iron, +/area/ruin/space/has_grav/port_tarkon/afthall) +"pk" = ( +/obj/effect/spawner/structure/window/reinforced, +/turf/open/floor/plating, +/area/ruin/space/has_grav/port_tarkon/porthall) +"pq" = ( +/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/blue, +/obj/structure/disposalpipe/segment{ + dir = 6 + }, +/turf/open/floor/iron, +/area/ruin/space/has_grav/port_tarkon/forehall) +"pr" = ( +/obj/structure/chair/greyscale{ + dir = 1 + }, +/obj/effect/mob_spawn/ghost_role/human/tarkon/sec{ + dir = 1 + }, +/obj/effect/turf_decal/tile/red/real_red/half, +/turf/open/floor/iron, +/area/ruin/space/has_grav/port_tarkon/secoff) +"pt" = ( +/obj/structure/cable, +/obj/machinery/camera/tarkon/directional/south, +/turf/open/floor/plating, +/area/ruin/space/has_grav/port_tarkon/observ) +"py" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/turf_decal/tile/brown/half{ + dir = 1 + }, +/turf/open/floor/iron, +/area/ruin/space/has_grav/port_tarkon/storage) +"pA" = ( +/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/neutral/anticorner, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/iron, +/area/ruin/space/has_grav/port_tarkon/centerhall) +"pC" = ( +/obj/structure/table/reinforced, +/obj/item/reagent_containers/condiment/saltshaker{ + pixel_x = -2 + }, +/obj/item/reagent_containers/condiment/saltshaker{ + pixel_x = -2 + }, +/obj/item/reagent_containers/condiment/peppermill{ + pixel_x = 2; + pixel_y = 2 + }, +/obj/item/reagent_containers/condiment/peppermill{ + pixel_x = 2; + pixel_y = 1 + }, +/obj/structure/cable, +/obj/machinery/power/apc/auto_name/directional/west, +/obj/effect/mapping_helpers/apc/full_charge, +/obj/effect/mapping_helpers/apc/unlocked, +/turf/open/floor/iron/cafeteria, +/area/ruin/space/has_grav/port_tarkon/kitchen) +"pF" = ( +/obj/machinery/light/warm/directional/south, +/obj/effect/turf_decal/tile/neutral/anticorner{ + dir = 8 + }, +/turf/open/floor/iron, +/area/ruin/space/has_grav/port_tarkon/centerhall) +"pJ" = ( +/obj/structure/cable, +/obj/machinery/power/terminal{ + dir = 4 + }, +/turf/open/floor/iron/dark, +/area/ruin/space/has_grav/port_tarkon/atmos) +"pK" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 1 + }, +/turf/open/floor/iron, +/area/ruin/space/has_grav/port_tarkon/centerhall) +"pN" = ( +/obj/structure/closet, +/obj/item/clothing/under/tarkon/cargo, +/obj/item/clothing/under/tarkon/cargo, +/obj/item/clothing/under/tarkon/cargo, +/obj/item/clothing/under/tarkon/cargo, +/obj/item/clothing/under/tarkon/cargo, +/obj/item/clothing/under/tarkon/cargo, +/obj/item/storage/backpack/duffelbag/explorer, +/obj/item/storage/backpack/messenger/explorer, +/obj/item/storage/backpack/satchel/explorer, +/obj/item/clothing/head/utility/welding/hat, +/obj/item/clothing/head/utility/welding/hat, +/obj/machinery/camera/tarkon/directional/west, +/turf/open/floor/iron, +/area/ruin/space/has_grav/port_tarkon) +"pP" = ( +/obj/effect/spawner/structure/window/reinforced, +/obj/structure/cable, +/turf/open/floor/iron, +/area/ruin/space/has_grav/port_tarkon/forehall) +"pR" = ( +/obj/structure/cable, +/obj/machinery/power/apc/auto_name/directional/east, +/obj/effect/mapping_helpers/apc/unlocked, +/obj/effect/mapping_helpers/apc/no_charge, +/turf/open/floor/plating, +/area/ruin/space/has_grav/port_tarkon/observ) +"pS" = ( +/obj/effect/turf_decal/tile/red/real_red/half, +/obj/machinery/disposal/bin, +/obj/structure/disposalpipe/trunk{ + dir = 1 + }, +/turf/open/floor/iron, +/area/ruin/space/has_grav/port_tarkon/secoff) +"pT" = ( +/obj/effect/turf_decal/sand/plating, +/turf/open/floor/plating/airless, +/area/ruin/space/has_grav/outdoors) +"pY" = ( +/obj/effect/spawner/structure/window/reinforced/no_firelock, +/obj/machinery/atmospherics/pipe/layer_manifold/yellow/hidden{ + dir = 4 + }, +/turf/open/floor/plating, +/area/ruin/space/has_grav/port_tarkon/atmos) +"qc" = ( +/obj/effect/turf_decal/tile/red/real_red/half, +/turf/open/floor/iron, +/area/ruin/space/has_grav/port_tarkon/secoff) +"qd" = ( +/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/visible/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/dark/visible, +/obj/machinery/air_sensor/tarkon/incinerator_tank{ + pixel_x = -26 + }, +/turf/open/floor/engine/vacuum, +/area/ruin/space/has_grav/port_tarkon/atmos) +"qe" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 4 + }, +/turf/open/floor/iron, +/area/ruin/space/has_grav/port_tarkon/starboardhall) +"qf" = ( +/obj/machinery/light/directional/east, +/obj/structure/window/reinforced/spawner/directional/north, +/obj/effect/turf_decal/tile/yellow/fourcorners, +/obj/machinery/computer/atmos_control/tarkon/nitrous_tank{ + dir = 8 + }, +/turf/open/floor/iron, +/area/ruin/space/has_grav/port_tarkon/atmos) +"qg" = ( +/obj/effect/spawner/structure/window/reinforced, +/turf/open/floor/plating, +/area/ruin/space/has_grav/port_tarkon/toolstorage) +"qh" = ( +/obj/structure/table/reinforced, +/obj/item/stack/sheet/iron/fifty, +/obj/effect/turf_decal/tile/yellow/anticorner, +/turf/open/floor/iron, +/area/ruin/space/has_grav/port_tarkon/toolstorage) +"qk" = ( +/obj/structure/ore_box, +/obj/effect/turf_decal/tile/brown/anticorner, +/turf/open/floor/iron, +/area/ruin/space/has_grav/port_tarkon/mining) +"qm" = ( +/obj/structure/alien/resin/membrane, +/turf/open/floor/iron, +/area/ruin/space/has_grav/port_tarkon/forehall) +"qo" = ( +/obj/machinery/light/warm/directional/south, +/turf/open/floor/iron, +/area/ruin/space/has_grav/port_tarkon) +"qq" = ( +/obj/machinery/cryopod{ + dir = 8 + }, +/obj/machinery/camera/tarkon/directional/east, +/turf/open/floor/iron, +/area/ruin/space/has_grav/port_tarkon) +"qr" = ( +/obj/machinery/portable_atmospherics/scrubber, +/turf/open/floor/plating, +/area/ruin/space/has_grav/port_tarkon/afthall) +"qt" = ( +/obj/structure/closet/emcloset, +/obj/effect/turf_decal/tile/brown/anticorner{ + dir = 4 + }, +/turf/open/floor/iron, +/area/ruin/space/has_grav/port_tarkon/mining) +"qv" = ( +/obj/machinery/door/airlock/mining, +/obj/machinery/door/firedoor/solid, +/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 = 4 + }, +/turf/open/floor/iron, +/area/ruin/space/has_grav/port_tarkon/cargo) +"qx" = ( +/obj/effect/turf_decal/tile/blue, +/turf/open/floor/iron, +/area/ruin/space/has_grav/port_tarkon/afthall) +"qz" = ( +/obj/machinery/light/directional/east, +/obj/effect/turf_decal/tile/purple/half{ + dir = 4 + }, +/turf/open/floor/iron, +/area/ruin/space/has_grav/port_tarkon/porthall) +"qB" = ( +/obj/machinery/door/airlock/wood/glass, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/door/firedoor/solid, +/turf/open/floor/iron, +/area/ruin/space/has_grav/port_tarkon/starboardhall) +"qE" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/cable, +/turf/open/floor/plating, +/area/ruin/space/has_grav/port_tarkon/observ) +"qF" = ( +/obj/structure/closet/secure_closet/freezer/fridge/open, +/obj/item/reagent_containers/condiment/flour, +/obj/item/reagent_containers/condiment/flour, +/obj/item/reagent_containers/condiment/flour, +/obj/item/reagent_containers/condiment/flour, +/obj/item/reagent_containers/condiment/sugar, +/obj/item/reagent_containers/condiment/sugar, +/obj/machinery/camera/tarkon/directional/east, +/turf/open/floor/iron/cafeteria, +/area/ruin/space/has_grav/port_tarkon/kitchen) +"qG" = ( +/obj/effect/turf_decal/stripes{ + dir = 5 + }, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden, +/turf/open/floor/engine, +/area/ruin/space/has_grav/port_tarkon/atmos) +"qL" = ( +/obj/effect/spawner/structure/window/reinforced/no_firelock, +/obj/machinery/atmospherics/pipe/layer_manifold/dark/hidden{ + dir = 4 + }, +/turf/open/floor/plating, +/area/ruin/space/has_grav/port_tarkon/atmos) +"qM" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 4 + }, +/obj/structure/table, +/obj/item/defibrillator, +/obj/item/stock_parts/cell/super, +/turf/open/floor/iron, +/area/ruin/space/has_grav/port_tarkon/trauma) +"qO" = ( +/obj/machinery/cryopod{ + dir = 4 + }, +/obj/machinery/camera/tarkon/directional/west, +/turf/open/floor/iron, +/area/ruin/space/has_grav/port_tarkon) +"qP" = ( +/obj/structure/table/reinforced, +/obj/machinery/door/window/brigdoor/tarkon/right/directional/west, +/obj/item/mod/module/springlock, +/obj/structure/window/reinforced/spawner/directional/south, +/obj/effect/turf_decal/tile/red/real_red/half{ + dir = 4 + }, +/turf/open/floor/iron, +/area/ruin/space/has_grav/port_tarkon/secoff) +"qR" = ( +/obj/machinery/airalarm/directional/east, +/obj/effect/mapping_helpers/airalarm/all_access, +/obj/effect/turf_decal/tile/brown/half{ + dir = 4 + }, +/turf/open/floor/iron, +/area/ruin/space/has_grav/port_tarkon/mining) +"qS" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron, +/area/ruin/space/has_grav/port_tarkon/trauma) +"qT" = ( +/obj/effect/turf_decal/sand, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, +/turf/open/floor/iron, +/area/ruin/space/has_grav/port_tarkon/mining) +"qX" = ( +/obj/structure/chair/office, +/obj/effect/turf_decal/tile/blue{ + dir = 8 + }, +/turf/open/floor/iron/dark, +/area/ruin/space/has_grav/port_tarkon/comms) +"qZ" = ( +/obj/effect/turf_decal/tile/purple/half{ + dir = 1 + }, +/obj/machinery/component_printer, +/turf/open/floor/iron/dark, +/area/ruin/space/has_grav/port_tarkon/developement) +"ra" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 4 + }, +/turf/open/floor/iron, +/area/ruin/space/has_grav/port_tarkon/centerhall) +"rb" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 8 + }, +/turf/open/floor/iron, +/area/ruin/space/has_grav/port_tarkon/toolstorage) +"rc" = ( +/obj/structure/window/reinforced/spawner/directional/north, +/obj/effect/turf_decal/tile/purple/fourcorners, +/obj/structure/cable, +/obj/machinery/computer/atmos_control/tarkon/plasma_tank{ + dir = 8 + }, +/turf/open/floor/iron, +/area/ruin/space/has_grav/port_tarkon/atmos) +"rg" = ( +/obj/structure/cable, +/turf/open/floor/plating, +/area/ruin/space/has_grav/port_tarkon/atmos) +"rh" = ( +/turf/closed/wall, +/area/ruin/space/has_grav/port_tarkon/centerhall) +"rj" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron, +/area/ruin/space/has_grav/port_tarkon/secoff) +"rk" = ( +/obj/structure/sign/warning/electric_shock, +/turf/closed/wall/r_wall, +/area/ruin/space/has_grav/port_tarkon/atmos) +"rl" = ( +/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/neutral/half{ + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 10 + }, +/obj/machinery/camera/tarkon/directional/east, +/turf/open/floor/iron, +/area/ruin/space/has_grav/port_tarkon/centerhall) +"rp" = ( +/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{ + dir = 4 + }, +/turf/open/floor/iron, +/area/ruin/space/has_grav/port_tarkon/cargo) +"rq" = ( +/obj/machinery/button/door{ + id = "ptcell2"; + name = "shutter controls"; + pixel_x = 8 + }, +/obj/machinery/button/door{ + id = "ptcell1"; + name = "shutter controls"; + pixel_x = -8 + }, +/turf/closed/wall/r_wall, +/area/ruin/space/has_grav/port_tarkon/secoff) +"rr" = ( +/obj/machinery/atmospherics/components/binary/pump/off/general{ + dir = 4 + }, +/obj/effect/turf_decal/tile/neutral/fourcorners, +/turf/open/floor/iron, +/area/ruin/space/has_grav/port_tarkon/atmos) +"rs" = ( +/obj/structure/cable, +/obj/effect/turf_decal/tile/blue/half{ + dir = 1 + }, +/obj/machinery/power/apc/auto_name/directional/north, +/obj/effect/mapping_helpers/apc/full_charge, +/obj/effect/mapping_helpers/apc/unlocked, +/turf/open/floor/iron/dark, +/area/ruin/space/has_grav/port_tarkon/comms) +"rt" = ( +/obj/machinery/atmospherics/components/unary/portables_connector/visible{ + dir = 4 + }, +/obj/effect/turf_decal/tile/dark/fourcorners, +/obj/machinery/portable_atmospherics/canister/carbon_dioxide, +/turf/open/floor/iron, +/area/ruin/space/has_grav/port_tarkon/atmos) +"rA" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/plating, +/area/ruin/space/has_grav/port_tarkon/centerhall) +"rC" = ( +/obj/machinery/firealarm/directional/west, +/obj/effect/turf_decal/tile/blue/half{ + dir = 8 + }, +/obj/machinery/light/directional/west, +/turf/open/floor/iron/dark, +/area/ruin/space/has_grav/port_tarkon/comms) +"rD" = ( +/obj/structure/alien/resin/membrane, +/obj/effect/turf_decal/tile/purple/half{ + dir = 4 + }, +/turf/open/floor/iron, +/area/ruin/space/has_grav/port_tarkon/porthall) +"rG" = ( +/obj/machinery/airalarm/directional/north, +/obj/effect/mapping_helpers/airalarm/all_access, +/obj/structure/table/wood/fancy/blue, +/obj/effect/turf_decal/tile/blue/half{ + dir = 1 + }, +/obj/item/coin, +/obj/item/coin, +/obj/machinery/light/directional/north, +/turf/open/floor/iron/dark, +/area/ruin/space/has_grav/port_tarkon/comms) +"rL" = ( +/obj/effect/turf_decal/tile/yellow/half, +/turf/open/floor/iron, +/area/ruin/space/has_grav/port_tarkon/atmos) +"rM" = ( +/obj/effect/turf_decal/tile/yellow/half{ + dir = 4 + }, +/turf/open/floor/iron, +/area/ruin/space/has_grav/port_tarkon/atmos) +"rN" = ( +/obj/effect/turf_decal/tile/neutral/half{ + dir = 8 + }, +/turf/open/floor/iron, +/area/ruin/space/has_grav/port_tarkon/centerhall) +"rO" = ( +/obj/effect/turf_decal/tile/brown/half{ + dir = 8 + }, +/turf/open/floor/iron, +/area/ruin/space/has_grav/port_tarkon/mining) +"rP" = ( +/obj/effect/turf_decal/stripes{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/visible/layer2{ + dir = 10 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/dark/visible, +/turf/open/floor/iron/dark, +/area/ruin/space/has_grav/port_tarkon/atmos) +"rS" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/cable, +/obj/machinery/door/airlock/security/old, +/obj/effect/mapping_helpers/airlock/access/all/tarkon/general, +/obj/machinery/door/firedoor/solid, +/obj/effect/turf_decal/tile/red/real_red/half{ + dir = 8 + }, +/obj/structure/disposalpipe/segment, +/turf/open/floor/iron, +/area/ruin/space/has_grav/port_tarkon/secoff) +"sa" = ( +/obj/machinery/light/small/directional/north, +/turf/open/floor/iron/white, +/area/ruin/space/has_grav/port_tarkon/centerhall) +"sc" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron/dark, +/area/ruin/space/has_grav/port_tarkon/developement) +"sf" = ( +/obj/structure/sign/warning/no_smoking, +/turf/closed/wall/r_wall, +/area/ruin/space/has_grav/port_tarkon/atmos) +"sh" = ( +/obj/machinery/autolathe, +/obj/effect/turf_decal/tile/yellow/anticorner, +/turf/open/floor/iron, +/area/ruin/space/has_grav/port_tarkon/toolstorage) +"sj" = ( +/obj/machinery/door/airlock/multi_tile/public/glass{ + dir = 8 + }, +/obj/effect/turf_decal/tile/blue/half, +/obj/machinery/door/firedoor/solid, +/turf/open/floor/iron, +/area/ruin/space/has_grav/port_tarkon/comms) +"sk" = ( +/obj/effect/turf_decal/tile/brown/half, +/turf/open/floor/iron, +/area/ruin/space/has_grav/port_tarkon/storage) +"so" = ( +/turf/closed/wall, +/area/ruin/space/has_grav/port_tarkon/afthall) +"sp" = ( +/obj/structure/spawner/tarkon_xenos/minor, +/obj/effect/mapping_helpers/broken_floor, +/turf/open/floor/plating, +/area/ruin/space/has_grav/port_tarkon/forehall) +"sq" = ( +/obj/structure/cable, +/obj/machinery/power/terminal{ + dir = 1 + }, +/turf/open/floor/plating, +/area/ruin/space/has_grav/port_tarkon/power1) +"su" = ( +/obj/structure/table/reinforced, +/obj/item/storage/belt/utility, +/obj/effect/turf_decal/tile/yellow/half{ + dir = 8 + }, +/turf/open/floor/iron, +/area/ruin/space/has_grav/port_tarkon/toolstorage) +"sv" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, +/turf/open/floor/iron, +/area/ruin/space/has_grav/port_tarkon/secoff) +"sx" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/cable, +/obj/machinery/door/firedoor/solid, +/obj/machinery/door/airlock/public/glass{ + name = "Fore Primary Hallway" + }, +/turf/open/floor/iron, +/area/ruin/space/has_grav/port_tarkon/forehall) +"sA" = ( +/obj/machinery/atmospherics/components/unary/portables_connector/visible{ + dir = 4 + }, +/obj/effect/turf_decal/tile/purple/fourcorners, +/obj/structure/cable, +/obj/machinery/portable_atmospherics/canister/plasma, +/turf/open/floor/iron, +/area/ruin/space/has_grav/port_tarkon/atmos) +"sG" = ( +/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{ + dir = 4 + }, +/obj/structure/disposalpipe/segment, +/turf/open/floor/iron, +/area/ruin/space/has_grav/port_tarkon/starboardhall) +"sI" = ( +/obj/structure/mop_bucket, +/obj/item/mop, +/obj/item/reagent_containers/cup/bucket, +/obj/item/soap/nanotrasen, +/obj/item/tape/ruins/tarkon/celebration, +/turf/open/floor/plating, +/area/ruin/space/has_grav/port_tarkon/afthall) +"sO" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/siphon/monitored/oxygen_output/tarkon{ + dir = 4 + }, +/turf/open/floor/engine/o2, +/area/ruin/space/has_grav/port_tarkon/atmos) +"sS" = ( +/obj/machinery/airalarm/directional/north, +/obj/effect/mapping_helpers/airalarm/all_access, +/obj/effect/turf_decal/tile/purple/half{ + dir = 1 + }, +/obj/structure/closet/crate, +/obj/item/transfer_valve, +/obj/item/transfer_valve, +/obj/item/pipe_dispenser, +/turf/open/floor/iron/dark, +/area/ruin/space/has_grav/port_tarkon/developement) +"sU" = ( +/obj/structure/fluff/metalpole/end/right, +/turf/template_noop, +/area/template_noop) +"sX" = ( +/obj/machinery/light/directional/north, +/obj/effect/turf_decal/tile/purple/half{ + dir = 1 + }, +/turf/open/floor/iron/dark, +/area/ruin/space/has_grav/port_tarkon/developement) +"tc" = ( +/obj/structure/cable, +/obj/effect/turf_decal/sand/plating, +/turf/open/floor/plating/airless, +/area/solars/tarkon) +"tf" = ( +/obj/effect/turf_decal/tile/yellow/half{ + dir = 8 + }, +/obj/machinery/camera/tarkon/directional/west, +/turf/open/floor/iron, +/area/ruin/space/has_grav/port_tarkon/afthall) +"tg" = ( +/obj/effect/turf_decal/tile/yellow/anticorner{ + dir = 8 + }, +/obj/machinery/rnd/production/colony_lathe, +/turf/open/floor/iron, +/area/ruin/space/has_grav/port_tarkon/power1) +"tj" = ( +/obj/structure/cable, +/turf/open/floor/iron, +/area/ruin/space/has_grav/port_tarkon/cargo) +"tk" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/disposalpipe/segment{ + dir = 6 + }, +/turf/open/floor/iron/dark, +/area/ruin/space/has_grav/port_tarkon/developement) +"tm" = ( +/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/tile/red/real_red/half{ + dir = 8 + }, +/obj/structure/disposalpipe/segment{ + dir = 6 + }, +/turf/open/floor/iron, +/area/ruin/space/has_grav/port_tarkon/secoff) +"tn" = ( +/obj/effect/turf_decal/vg_decals/atmos/nitrous_oxide, +/obj/machinery/light/small/directional/east, +/obj/machinery/air_sensor/tarkon/nitrous_tank{ + pixel_x = 26 + }, +/turf/open/floor/engine/n2o, +/area/ruin/space/has_grav/port_tarkon/atmos) +"tx" = ( +/obj/effect/spawner/random/vending/colavend, +/turf/open/floor/iron, +/area/ruin/space/has_grav/port_tarkon/afthall) +"tz" = ( +/obj/effect/turf_decal/sand/plating, +/turf/open/floor/iron, +/area/ruin/space/has_grav/port_tarkon/mining) +"tA" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/cable, +/obj/machinery/light_switch/directional/south, +/obj/structure/alien/resin/wall, +/turf/open/floor/iron, +/area/ruin/space/has_grav/port_tarkon/forehall) +"tC" = ( +/obj/machinery/door/airlock/public{ + name = "Kitchen Freezer" + }, +/obj/machinery/door/firedoor/solid, +/turf/open/floor/iron/freezer, +/area/ruin/space/has_grav/port_tarkon/kitchen) +"tE" = ( +/turf/open/floor/iron/cafeteria, +/area/ruin/space/has_grav/port_tarkon/kitchen) +"tG" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/airalarm/directional/east, +/obj/effect/mapping_helpers/airalarm/all_access, +/obj/structure/disposalpipe/segment, +/turf/open/floor/iron, +/area/ruin/space/has_grav/port_tarkon/starboardhall) +"tL" = ( +/obj/effect/turf_decal/sand/plating, +/obj/structure/grille, +/turf/open/floor/plating/airless, +/area/ruin/space/has_grav/outdoors) +"tN" = ( +/obj/structure/table/reinforced, +/obj/item/paper_bin, +/obj/item/pen/blue, +/turf/open/floor/iron/dark, +/area/ruin/space/has_grav/port_tarkon/comms) +"tR" = ( +/obj/machinery/light/small/directional/north, +/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden, +/turf/open/floor/engine/vacuum, +/area/ruin/space/has_grav/port_tarkon/atmos) +"tS" = ( +/obj/machinery/atmospherics/pipe/layer_manifold/scrubbers/visible, +/turf/closed/wall/r_wall, +/area/ruin/space/has_grav/port_tarkon/atmos) +"tT" = ( +/obj/machinery/hydroponics/constructable, +/obj/structure/window/reinforced/spawner/directional/north, +/turf/open/floor/grass, +/area/ruin/space/has_grav/port_tarkon/garden) +"tZ" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/spawner/structure/window/reinforced, +/obj/structure/cable, +/turf/open/floor/iron, +/area/ruin/space/has_grav/port_tarkon/forehall) +"ud" = ( +/obj/effect/turf_decal/tile/brown/anticorner, +/obj/machinery/camera/tarkon/directional/east, +/turf/open/floor/iron, +/area/ruin/space/has_grav/port_tarkon/starboardhall) +"ug" = ( +/obj/effect/turf_decal/sand/plating, +/obj/structure/alien/resin/membrane, +/turf/open/misc/asteroid/airless, +/area/ruin/space/has_grav/outdoors) +"uh" = ( +/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, +/turf/open/floor/iron, +/area/ruin/space/has_grav/port_tarkon/centerhall) +"uj" = ( +/obj/effect/turf_decal/tile/purple/half{ + dir = 1 + }, +/obj/machinery/airalarm/directional/north, +/obj/effect/mapping_helpers/airalarm/all_access, +/turf/open/floor/iron/dark, +/area/ruin/space/has_grav/port_tarkon/developement) +"us" = ( +/obj/effect/turf_decal/tile/blue/half, +/obj/structure/table, +/obj/item/storage/medkit/regular, +/obj/item/storage/medkit/regular, +/obj/machinery/firealarm/directional/south, +/obj/machinery/camera/tarkon/directional/south, +/turf/open/floor/iron, +/area/ruin/space/has_grav/port_tarkon/trauma) +"uu" = ( +/obj/effect/turf_decal/stripes/asteroid/corner{ + dir = 8 + }, +/turf/open/misc/asteroid/airless, +/area/solars/tarkon) +"uB" = ( +/obj/machinery/atmospherics/components/binary/pump/off/general{ + dir = 4 + }, +/obj/effect/turf_decal/tile/red/fourcorners{ + color = "#DE3A3A" + }, +/turf/open/floor/iron, +/area/ruin/space/has_grav/port_tarkon/atmos) +"uC" = ( +/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/tile/red/real_red{ + dir = 1 + }, +/obj/structure/disposalpipe/segment{ + dir = 9 + }, +/turf/open/floor/iron, +/area/ruin/space/has_grav/port_tarkon/starboardhall) +"uE" = ( +/obj/structure/table/reinforced, +/obj/item/stack/sheet/glass/fifty, +/obj/effect/turf_decal/tile/yellow/anticorner, +/turf/open/floor/iron, +/area/ruin/space/has_grav/port_tarkon/toolstorage) +"uF" = ( +/obj/structure/trash_pile, +/turf/open/floor/plating, +/area/ruin/space/has_grav/port_tarkon/afthall) +"uJ" = ( +/obj/effect/turf_decal/tile/brown/anticorner{ + dir = 8 + }, +/turf/open/floor/iron, +/area/ruin/space/has_grav/port_tarkon/starboardhall) +"uO" = ( +/obj/structure/closet, +/obj/item/storage/backpack/satchel/explorer, +/obj/item/clothing/mask/gas/explorer, +/obj/item/gps/mining, +/obj/item/storage/bag/ore, +/obj/effect/turf_decal/tile/brown/anticorner{ + dir = 8 + }, +/turf/open/floor/iron, +/area/ruin/space/has_grav/port_tarkon/mining) +"uQ" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, +/turf/open/floor/iron/dark, +/area/ruin/space/has_grav/port_tarkon/developement) +"uS" = ( +/turf/closed/mineral/random/high_chance, +/area/solars/tarkon) +"uT" = ( +/turf/open/floor/iron, +/area/ruin/space/has_grav/port_tarkon/toolstorage) +"uW" = ( +/obj/machinery/light_switch/directional/north, +/obj/effect/turf_decal/tile/brown/anticorner{ + dir = 4 + }, +/obj/machinery/disposal/bin, +/obj/structure/disposalpipe/trunk, +/turf/open/floor/iron, +/area/ruin/space/has_grav/port_tarkon/cargo) +"va" = ( +/obj/structure/table/reinforced, +/obj/machinery/recharger, +/obj/effect/turf_decal/tile/red/real_red/anticorner{ + dir = 1 + }, +/obj/machinery/camera/tarkon/directional/north, +/turf/open/floor/iron, +/area/ruin/space/has_grav/port_tarkon/secoff) +"vb" = ( +/turf/open/floor/plating, +/area/ruin/space/has_grav/port_tarkon/atmos) +"ve" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/siphon/monitored/carbon_output/tarkon{ + dir = 8 + }, +/turf/open/floor/engine/co2, +/area/ruin/space/has_grav/port_tarkon/atmos) +"vg" = ( +/obj/machinery/atmospherics/components/unary/outlet_injector/monitored/nitrous_input/tarkon{ + dir = 8 + }, +/turf/open/floor/engine/n2o, +/area/ruin/space/has_grav/port_tarkon/atmos) +"vj" = ( +/obj/effect/turf_decal/tile/neutral/half{ + dir = 8 + }, +/obj/machinery/camera/tarkon/directional/west, +/turf/open/floor/iron, +/area/ruin/space/has_grav/port_tarkon/centerhall) +"vl" = ( +/obj/machinery/door/airlock/public/glass/incinerator/tarkon_interior, +/obj/machinery/airlock_controller/incinerator_tarkon{ + pixel_x = 40; + pixel_y = 5 + }, +/obj/effect/mapping_helpers/airlock/locked, +/obj/effect/mapping_helpers/airlock/cyclelink_helper, +/obj/effect/turf_decal/stripes{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/visible/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/dark/visible, +/turf/open/floor/engine/vacuum, +/area/ruin/space/has_grav/port_tarkon/atmos) +"vm" = ( +/obj/effect/turf_decal/tile/purple/half, +/obj/effect/spawner/structure/window/reinforced, +/obj/machinery/door/poddoor/shutters{ + id = "ptxeno" + }, +/turf/open/floor/iron/dark, +/area/ruin/space/has_grav/port_tarkon/developement) +"vo" = ( +/obj/machinery/light/directional/north, +/obj/structure/rack, +/obj/item/screwdriver, +/obj/item/wrench, +/obj/effect/turf_decal/tile/yellow/half{ + dir = 1 + }, +/turf/open/floor/iron, +/area/ruin/space/has_grav/port_tarkon/toolstorage) +"vr" = ( +/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, +/obj/structure/disposalpipe/junction{ + dir = 8 + }, +/turf/open/floor/iron, +/area/ruin/space/has_grav/port_tarkon/starboardhall) +"vw" = ( +/turf/closed/wall/r_wall, +/area/ruin/space/has_grav/port_tarkon/dorms) +"vx" = ( +/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/ruin/space/has_grav/port_tarkon/observ) +"vG" = ( +/obj/structure/table/reinforced, +/obj/item/stack/sheet/glass/fifty, +/obj/item/stack/sheet/iron/fifty, +/obj/item/holosign_creator/atmos, +/turf/open/floor/iron/dark, +/area/ruin/space/has_grav/port_tarkon/atmos) +"vO" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 1 + }, +/obj/effect/turf_decal/tile/neutral, +/obj/effect/turf_decal/tile/neutral{ + dir = 1 + }, +/turf/open/floor/iron, +/area/ruin/space/has_grav/port_tarkon/centerhall) +"vP" = ( +/turf/closed/wall, +/area/ruin/space/has_grav/port_tarkon/toolstorage) +"vR" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, +/obj/effect/turf_decal/tile/yellow/half{ + dir = 4 + }, +/obj/structure/disposalpipe/segment, +/turf/open/floor/iron, +/area/ruin/space/has_grav/port_tarkon/toolstorage) +"vS" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 4 + }, +/obj/structure/cable, +/turf/open/floor/iron/dark, +/area/ruin/space/has_grav/port_tarkon/developement) +"vX" = ( +/obj/machinery/light/warm/directional/west, +/obj/effect/turf_decal/tile/neutral/anticorner{ + dir = 1 + }, +/turf/open/floor/iron, +/area/ruin/space/has_grav/port_tarkon/centerhall) +"wa" = ( +/obj/machinery/door/airlock/public/glass{ + name = "Starboard Primary Hallway" + }, +/obj/machinery/door/firedoor/solid, +/obj/effect/turf_decal/tile/red/real_red/half{ + dir = 1 + }, +/turf/open/floor/iron, +/area/ruin/space/has_grav/port_tarkon/starboardhall) +"wb" = ( +/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/neutral/half{ + dir = 8 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/iron, +/area/ruin/space/has_grav/port_tarkon/centerhall) +"wc" = ( +/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/blue/half{ + dir = 4 + }, +/obj/structure/disposalpipe/segment, +/turf/open/floor/iron, +/area/ruin/space/has_grav/port_tarkon/forehall) +"we" = ( +/obj/effect/turf_decal/stripes{ + dir = 1 + }, +/obj/machinery/atmospherics/components/unary/portables_connector/visible{ + dir = 8 + }, +/turf/open/floor/iron/dark, +/area/ruin/space/has_grav/port_tarkon/atmos) +"wf" = ( +/obj/structure/cable, +/obj/machinery/power/apc/auto_name/directional/north, +/obj/effect/mapping_helpers/apc/full_charge, +/obj/effect/mapping_helpers/apc/unlocked, +/obj/effect/turf_decal/tile/red/real_red/half{ + dir = 1 + }, +/turf/open/floor/iron, +/area/ruin/space/has_grav/port_tarkon/secoff) +"wj" = ( +/obj/machinery/light/small/directional/east, +/obj/machinery/hydroponics/constructable, +/turf/open/floor/grass, +/area/ruin/space/has_grav/port_tarkon/garden) +"wk" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 8 + }, +/turf/open/floor/iron, +/area/ruin/space/has_grav/port_tarkon/porthall) +"wm" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 1 + }, +/turf/open/floor/iron/dark, +/area/ruin/space/has_grav/port_tarkon/developement) +"wo" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/autolathe, +/turf/open/floor/iron/dark, +/area/ruin/space/has_grav/port_tarkon/developement) +"wp" = ( +/obj/effect/turf_decal/trimline/yellow/filled/warning{ + dir = 4 + }, +/turf/open/floor/iron/airless, +/area/ruin/space/has_grav/port_tarkon/storage) +"wq" = ( +/obj/machinery/processor, +/obj/machinery/camera/tarkon/directional/west, +/turf/open/floor/iron/cafeteria, +/area/ruin/space/has_grav/port_tarkon/kitchen) +"wr" = ( +/obj/effect/turf_decal/tile/yellow/half{ + dir = 8 + }, +/turf/open/floor/iron, +/area/ruin/space/has_grav/port_tarkon/afthall) +"wu" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/plating, +/area/ruin/space/has_grav/port_tarkon/atmos) +"wv" = ( +/obj/structure/table/wood/fancy/blue, +/obj/effect/turf_decal/tile/blue/half{ + dir = 1 + }, +/obj/item/dice, +/turf/open/floor/iron/dark, +/area/ruin/space/has_grav/port_tarkon/comms) +"wx" = ( +/turf/closed/wall, +/area/ruin/space/has_grav/port_tarkon/cargo) +"wA" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron, +/area/ruin/space/has_grav/port_tarkon/atmos) +"wF" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/iron, +/area/ruin/space/has_grav/port_tarkon/atmos) +"wH" = ( +/obj/machinery/atmospherics/components/unary/outlet_injector/monitored/incinerator_input/tarkon{ + dir = 8 + }, +/turf/open/floor/engine/vacuum, +/area/ruin/space/has_grav/port_tarkon/atmos) +"wK" = ( +/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/iron/dark, +/area/ruin/space/has_grav/port_tarkon/developement) +"wP" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, +/turf/open/floor/iron, +/area/ruin/space/has_grav/port_tarkon/starboardhall) +"wT" = ( +/obj/structure/chair/office, +/obj/effect/turf_decal/tile/blue/half{ + dir = 8 + }, +/turf/open/floor/iron/dark, +/area/ruin/space/has_grav/port_tarkon/comms) +"wV" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/turf_decal/tile/neutral/half{ + dir = 1 + }, +/turf/open/floor/iron, +/area/ruin/space/has_grav/port_tarkon/centerhall) +"wW" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/cable, +/obj/structure/alien/weeds/node, +/obj/structure/alien/resin/membrane, +/turf/open/floor/iron, +/area/ruin/space/has_grav/port_tarkon/forehall) +"wZ" = ( +/obj/structure/sign/warning/docking, +/turf/closed/wall/r_wall/rust, +/area/ruin/space/has_grav/port_tarkon/mining) +"xa" = ( +/obj/structure/cable, +/obj/machinery/airalarm/directional/north, +/obj/effect/mapping_helpers/airalarm/all_access, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/turf_decal/tile/yellow/half{ + dir = 1 + }, +/turf/open/floor/iron, +/area/ruin/space/has_grav/port_tarkon/power1) +"xb" = ( +/obj/structure/window/reinforced/spawner/directional/north, +/obj/effect/turf_decal/tile/dark/fourcorners, +/obj/machinery/computer/atmos_control/tarkon/carbon_tank{ + dir = 8 + }, +/obj/machinery/camera/tarkon/directional/east, +/turf/open/floor/iron, +/area/ruin/space/has_grav/port_tarkon/atmos) +"xc" = ( +/obj/effect/turf_decal/tile/blue/half{ + dir = 8 + }, +/obj/machinery/light_switch/directional/west, +/turf/open/floor/iron/dark, +/area/ruin/space/has_grav/port_tarkon/comms) +"xd" = ( +/obj/effect/turf_decal/tile/purple/half{ + dir = 1 + }, +/obj/machinery/firealarm/directional/north, +/obj/structure/table/reinforced, +/obj/item/storage/box/monkeycubes, +/obj/item/storage/box/monkeycubes, +/turf/open/floor/iron/dark, +/area/ruin/space/has_grav/port_tarkon/developement) +"xe" = ( +/obj/docking_port/stationary{ + dir = 4; + dwidth = 6; + height = 16; + name = "Port Tarkon"; + roundstart_template = /datum/map_template/shuttle/ruin/tarkon_driver; + shuttle_id = "port_tarkon"; + width = 14 + }, +/turf/open/misc/asteroid/airless, +/area/ruin/space/has_grav/outdoors) +"xm" = ( +/obj/machinery/firealarm/directional/east, +/obj/effect/turf_decal/tile/blue/half{ + dir = 4 + }, +/obj/machinery/light/directional/east, +/turf/open/floor/iron/dark, +/area/ruin/space/has_grav/port_tarkon/comms) +"xn" = ( +/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/tile/yellow/half{ + dir = 1 + }, +/obj/structure/disposalpipe/segment, +/turf/open/floor/iron, +/area/ruin/space/has_grav/port_tarkon/atmos) +"xo" = ( +/obj/effect/turf_decal/tile/blue/half{ + dir = 4 + }, +/obj/effect/spawner/structure/window{ + polarizer_id = "tarkon_med1" + }, +/turf/open/floor/iron, +/area/ruin/space/has_grav/port_tarkon/trauma) +"xp" = ( +/turf/closed/wall, +/area/ruin/space/has_grav/port_tarkon/atmos) +"xr" = ( +/turf/open/floor/iron, +/area/ruin/space/has_grav/port_tarkon/forehall) +"xs" = ( +/turf/closed/wall/r_wall, +/area/ruin/space/has_grav/port_tarkon/forehall) +"xu" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 8 + }, +/turf/open/floor/iron, +/area/ruin/space/has_grav/port_tarkon/porthall) +"xw" = ( +/mob/living/basic/carp, +/turf/template_noop, +/area/template_noop) +"xx" = ( +/turf/closed/wall, +/area/ruin/space/has_grav/port_tarkon) +"xB" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/cable, +/obj/structure/alien/resin/wall, +/turf/open/floor/iron, +/area/ruin/space/has_grav/port_tarkon/forehall) +"xC" = ( +/obj/structure/alien/resin/wall, +/turf/open/misc/asteroid/airless, +/area/ruin/space/has_grav/outdoors) +"xD" = ( +/obj/structure/reagent_dispensers/fueltank/large, +/obj/effect/turf_decal/tile/yellow/half, +/turf/open/floor/iron, +/area/ruin/space/has_grav/port_tarkon/power1) +"xE" = ( +/obj/effect/turf_decal/tile/purple/half, +/obj/structure/table/reinforced, +/obj/item/surgery_tray/full, +/turf/open/floor/iron/dark, +/area/ruin/space/has_grav/port_tarkon/developement) +"xG" = ( +/obj/effect/turf_decal/tile/purple/anticorner, +/turf/open/floor/iron/dark, +/area/ruin/space/has_grav/port_tarkon/developement) +"xI" = ( +/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, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/iron, +/area/ruin/space/has_grav/port_tarkon/starboardhall) +"xK" = ( +/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, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/iron, +/area/ruin/space/has_grav/port_tarkon/starboardhall) +"xO" = ( +/obj/machinery/portable_atmospherics/canister/air, +/obj/machinery/atmospherics/components/unary/portables_connector{ + dir = 1 + }, +/obj/machinery/camera/tarkon/directional/east, +/turf/open/floor/iron/dark, +/area/ruin/space/has_grav/port_tarkon/atmos) +"xT" = ( +/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/neutral/half, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/iron, +/area/ruin/space/has_grav/port_tarkon/centerhall) +"ya" = ( +/obj/structure/sign/warning/electric_shock, +/turf/closed/wall, +/area/ruin/space/has_grav/port_tarkon/power1) +"yb" = ( +/obj/structure/sign/warning/explosives, +/turf/closed/wall, +/area/ruin/space/has_grav/port_tarkon/developement) +"yc" = ( +/obj/effect/spawner/structure/window/reinforced, +/turf/open/floor/plating, +/area/ruin/space/has_grav/port_tarkon/cargo) +"yf" = ( +/obj/machinery/door/airlock/public/glass{ + name = "Port Primary Hallway" + }, +/obj/machinery/door/firedoor/solid, +/obj/effect/turf_decal/tile/purple/half{ + dir = 1 + }, +/turf/open/floor/iron, +/area/ruin/space/has_grav/port_tarkon/porthall) +"yj" = ( +/obj/machinery/door/airlock/mining/glass, +/obj/effect/turf_decal/sand/plating, +/obj/effect/mapping_helpers/airlock/access/all/tarkon/general, +/obj/machinery/door/firedoor/solid, +/obj/structure/cable, +/obj/structure/fans/tiny, +/turf/open/floor/iron, +/area/ruin/space/has_grav/port_tarkon/mining) +"yk" = ( +/obj/structure/toilet{ + dir = 8 + }, +/obj/structure/window/reinforced/tinted/spawner/directional/north, +/obj/machinery/door/window/left/directional/west{ + opacity = 1 + }, +/turf/open/floor/iron/white, +/area/ruin/space/has_grav/port_tarkon/centerhall) +"ym" = ( +/obj/machinery/light/directional/north, +/obj/structure/closet/crate, +/obj/item/stack/sheet/glass/fifty, +/obj/item/stack/sheet/glass/fifty, +/turf/open/floor/plating, +/area/ruin/space/has_grav/port_tarkon/centerhall) +"yo" = ( +/obj/machinery/door/airlock/research, +/obj/machinery/door/firedoor/solid, +/obj/effect/mapping_helpers/airlock/access/all/tarkon/general, +/turf/open/floor/iron, +/area/ruin/space/has_grav/port_tarkon/developement) +"yq" = ( +/obj/machinery/door/firedoor/solid, +/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/multi_tile/metal, +/turf/open/floor/iron, +/area/ruin/space/has_grav/port_tarkon/storage) +"ys" = ( +/obj/machinery/light/directional/west, +/obj/effect/turf_decal/tile/brown/half{ + dir = 8 + }, +/turf/open/floor/iron, +/area/ruin/space/has_grav/port_tarkon/starboardhall) +"yy" = ( +/obj/effect/turf_decal/tile/brown/anticorner{ + dir = 4 + }, +/obj/item/gps/computer/space{ + gpstag = "Port Tarkon" + }, +/turf/open/floor/iron, +/area/ruin/space/has_grav/port_tarkon/mining) +"yD" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/airalarm/directional/east, +/obj/structure/safe/floor, +/obj/item/mod/module/armor_booster/retractplates{ + desc = "A complex set of actuators, micro-seals and a simple guide on how to install it, This... \"Modification\" allows the plating around the joints to retract, giving minor protection and a bit better mobility. There also seems to be a small, wireless microphone... how odd." + }, +/obj/item/gun/ballistic/shotgun/doublebarrel, +/obj/effect/turf_decal/tile/red/real_red/half{ + dir = 4 + }, +/turf/open/floor/iron, +/area/ruin/space/has_grav/port_tarkon/secoff) +"yG" = ( +/obj/effect/turf_decal/tile/purple/half, +/turf/open/floor/iron/dark, +/area/ruin/space/has_grav/port_tarkon/developement) +"yH" = ( +/obj/machinery/atmospherics/components/binary/pump/off/general{ + dir = 8 + }, +/obj/effect/turf_decal/tile/dark/fourcorners, +/turf/open/floor/iron, +/area/ruin/space/has_grav/port_tarkon/atmos) +"yO" = ( +/obj/machinery/light/directional/west, +/obj/structure/window/reinforced/spawner/directional/north, +/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/machinery/computer/atmos_control/tarkon/mix_tank{ + dir = 4 + }, +/turf/open/floor/iron, +/area/ruin/space/has_grav/port_tarkon/atmos) +"yP" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/turf/open/floor/iron/dark, +/area/ruin/space/has_grav/port_tarkon/developement) +"yT" = ( +/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, +/turf/open/floor/iron, +/area/ruin/space/has_grav/port_tarkon/mining) +"yU" = ( +/obj/effect/turf_decal/stripes/asteroid/line{ + dir = 1 + }, +/turf/open/misc/asteroid/airless, +/area/ruin/space/has_grav/outdoors) +"yV" = ( +/obj/machinery/door/firedoor/solid, +/obj/machinery/light_switch/directional/east, +/obj/effect/turf_decal/tile/blue/half{ + dir = 4 + }, +/turf/open/floor/iron, +/area/ruin/space/has_grav/port_tarkon/trauma) +"yY" = ( +/obj/structure/table/reinforced, +/turf/open/floor/iron, +/area/ruin/space/has_grav/port_tarkon/kitchen) +"yZ" = ( +/obj/structure/table/reinforced, +/obj/item/storage/backpack/duffelbag/synth_treatment_kit/trauma, +/turf/open/floor/iron/dark, +/area/ruin/space/has_grav/port_tarkon/developement) +"za" = ( +/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/tile/yellow/half, +/obj/structure/disposalpipe/junction{ + dir = 8 + }, +/turf/open/floor/iron, +/area/ruin/space/has_grav/port_tarkon/porthall) +"zf" = ( +/obj/effect/turf_decal/tile/neutral/half{ + dir = 4 + }, +/turf/open/floor/iron, +/area/ruin/space/has_grav/port_tarkon/centerhall) +"zg" = ( +/turf/closed/wall/r_wall, +/area/ruin/space/has_grav/port_tarkon/comms) +"zh" = ( +/obj/machinery/camera/tarkon/directional/north, +/turf/open/floor/plating, +/area/ruin/space/has_grav/port_tarkon/afthall) +"zk" = ( +/obj/effect/turf_decal/tile/brown/half{ + dir = 8 + }, +/turf/open/floor/iron, +/area/ruin/space/has_grav/port_tarkon/starboardhall) +"zm" = ( +/obj/structure/cable, +/obj/machinery/light_switch/directional/west, +/obj/effect/turf_decal/tile/brown/half{ + dir = 8 + }, +/turf/open/floor/iron, +/area/ruin/space/has_grav/port_tarkon/mining) +"zn" = ( +/obj/effect/turf_decal/tile/yellow/half, +/turf/open/floor/iron, +/area/ruin/space/has_grav/port_tarkon/toolstorage) +"zp" = ( +/obj/item/flashlight/lantern, +/obj/item/flashlight/lantern, +/obj/item/flashlight/lantern, +/obj/item/flashlight/lantern, +/obj/structure/table, +/obj/machinery/light/warm/directional/south, +/obj/structure/cable, +/obj/machinery/power/apc/auto_name/directional/south, +/obj/effect/mapping_helpers/apc/full_charge, +/obj/effect/mapping_helpers/apc/unlocked, +/obj/effect/mapping_helpers/apc/cell_10k, +/turf/open/floor/iron, +/area/ruin/space/has_grav/port_tarkon) +"zz" = ( +/mob/living/basic/carp/mega, +/turf/open/misc/asteroid/airless, +/area/ruin/space/has_grav/outdoors) +"zA" = ( +/obj/machinery/door/firedoor/solid, +/obj/machinery/door/airlock/public/glass{ + name = "Port Primary Hallway" + }, +/obj/effect/turf_decal/tile/purple/half{ + dir = 1 + }, +/turf/open/floor/iron, +/area/ruin/space/has_grav/port_tarkon/porthall) +"zB" = ( +/obj/machinery/door/poddoor/shutters/window{ + id = "tarkoninner"; + name = "Interior Bay Shutter" + }, +/obj/effect/turf_decal/trimline/yellow/filled/warning{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/yellow/filled/warning{ + dir = 8 + }, +/turf/open/floor/iron, +/area/ruin/space/has_grav/port_tarkon/storage) +"zC" = ( +/obj/machinery/door/poddoor/shutters/window{ + id = "tarkoninner"; + name = "Interior Bay Shutter" + }, +/obj/effect/turf_decal/trimline/yellow/filled/warning{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/yellow/filled/warning{ + dir = 4 + }, +/turf/open/floor/iron, +/area/ruin/space/has_grav/port_tarkon/storage) +"zE" = ( +/obj/effect/spawner/structure/window/reinforced, +/turf/open/floor/plating, +/area/ruin/space/has_grav/port_tarkon) +"zH" = ( +/obj/machinery/door/firedoor/solid, +/turf/open/floor/iron, +/area/ruin/space/has_grav/port_tarkon/storage) +"zL" = ( +/obj/effect/spawner/structure/window{ + polarizer_id = "tarkondisect" + }, +/turf/open/floor/iron/dark, +/area/ruin/space/has_grav/port_tarkon/developement) +"zM" = ( +/obj/structure/sign/warning/biohazard, +/turf/closed/wall, +/area/ruin/space/has_grav/port_tarkon/toolstorage) +"zQ" = ( +/obj/machinery/shower/directional/east, +/obj/structure/window/reinforced/tinted/spawner/directional/east, +/obj/machinery/door/window/right/directional/north{ + opacity = 1 + }, +/turf/open/floor/iron/white, +/area/ruin/space/has_grav/port_tarkon/centerhall) +"zR" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron/cafeteria, +/area/ruin/space/has_grav/port_tarkon/kitchen) +"zT" = ( +/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{ + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 5 + }, +/turf/open/floor/iron, +/area/ruin/space/has_grav/port_tarkon/cargo) +"zV" = ( +/obj/effect/turf_decal/tile/blue/half{ + dir = 8 + }, +/obj/machinery/firealarm/directional/west, +/obj/structure/chair{ + dir = 4 + }, +/turf/open/floor/iron, +/area/ruin/space/has_grav/port_tarkon/trauma) +"zY" = ( +/turf/closed/mineral/random, +/area/ruin/space/has_grav/outdoors) +"zZ" = ( +/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, +/turf/open/floor/iron, +/area/ruin/space/has_grav/port_tarkon/starboardhall) +"Aa" = ( +/obj/machinery/camera/tarkon/directional/west, +/turf/open/floor/iron, +/area/ruin/space/has_grav/port_tarkon/forehall) +"Ab" = ( +/obj/structure/cable, +/obj/machinery/power/apc/auto_name/directional/north, +/obj/effect/mapping_helpers/apc/full_charge, +/obj/effect/mapping_helpers/apc/unlocked, +/turf/open/floor/plating, +/area/ruin/space/has_grav/port_tarkon/afthall) +"Ad" = ( +/obj/machinery/firealarm/directional/north, +/obj/effect/turf_decal/tile/purple/half{ + dir = 1 + }, +/turf/open/floor/iron, +/area/ruin/space/has_grav/port_tarkon/porthall) +"Ae" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron, +/area/ruin/space/has_grav/port_tarkon/toolstorage) +"Ah" = ( +/obj/structure/window/reinforced/spawner/directional/north, +/obj/effect/turf_decal/tile/blue/fourcorners, +/obj/machinery/computer/atmos_control/tarkon/oxygen_tank{ + dir = 4 + }, +/turf/open/floor/iron, +/area/ruin/space/has_grav/port_tarkon/atmos) +"Ai" = ( +/obj/machinery/firealarm/directional/east, +/obj/effect/turf_decal/tile/blue/half{ + dir = 4 + }, +/obj/structure/safe/floor, +/obj/item/circuitboard/machine/circuit_imprinter, +/obj/item/circuitboard/machine/protolathe/tarkon, +/obj/item/circuitboard/computer/tarkon_driver, +/obj/item/circuitboard/machine/rdserver/tarkon, +/obj/machinery/camera/tarkon/directional/east, +/obj/item/circuitboard/computer/tarkon_cam, +/obj/item/circuitboard/computer/xenobiology/tarkon, +/turf/open/floor/iron/dark, +/area/ruin/space/has_grav/port_tarkon/comms) +"Ao" = ( +/obj/effect/turf_decal/tile/blue/half, +/obj/structure/table, +/obj/item/storage/medkit/surgery, +/obj/item/storage/medkit/advanced, +/obj/machinery/airalarm/directional/south, +/obj/effect/mapping_helpers/airalarm/all_access, +/turf/open/floor/iron, +/area/ruin/space/has_grav/port_tarkon/trauma) +"At" = ( +/obj/machinery/light/warm/directional/south, +/obj/effect/turf_decal/tile/purple/half, +/turf/open/floor/iron/dark, +/area/ruin/space/has_grav/port_tarkon/developement) +"AA" = ( +/obj/effect/turf_decal/trimline/yellow/filled/warning, +/obj/effect/turf_decal/trimline/yellow/filled/warning{ + dir = 4 + }, +/obj/machinery/door/poddoor/shutters{ + id = "tarkonouter"; + name = "External Bay Shutters" + }, +/turf/open/floor/iron/airless, +/area/ruin/space/has_grav/port_tarkon/storage) +"AG" = ( +/obj/effect/turf_decal/tile/purple/half{ + dir = 1 + }, +/turf/open/floor/iron, +/area/ruin/space/has_grav/port_tarkon/porthall) +"AH" = ( +/obj/effect/turf_decal/stripes{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden, +/turf/open/floor/engine, +/area/ruin/space/has_grav/port_tarkon/atmos) +"AP" = ( +/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/tile/neutral{ + dir = 4 + }, +/obj/effect/turf_decal/tile/neutral{ + dir = 8 + }, +/obj/structure/disposalpipe/segment{ + dir = 5 + }, +/turf/open/floor/iron, +/area/ruin/space/has_grav/port_tarkon/centerhall) +"AQ" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/door/firedoor/solid, +/obj/machinery/door/airlock/public/glass{ + name = "Port Primary Hallway" + }, +/obj/structure/cable, +/obj/effect/turf_decal/tile/yellow/half, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/iron, +/area/ruin/space/has_grav/port_tarkon/porthall) +"AR" = ( +/turf/closed/wall, +/area/ruin/space/has_grav/port_tarkon/storage) +"AS" = ( +/obj/effect/turf_decal/tile/purple/half{ + dir = 1 + }, +/obj/structure/table/reinforced, +/obj/item/crowbar, +/obj/machinery/doppler_array, +/turf/open/floor/iron/dark, +/area/ruin/space/has_grav/port_tarkon/developement) +"AW" = ( +/obj/structure/closet/firecloset/full, +/turf/open/floor/plating, +/area/ruin/space/has_grav/port_tarkon/power1) +"AZ" = ( +/obj/effect/turf_decal/tile/blue/anticorner, +/obj/machinery/computer/operating{ + dir = 1 + }, +/turf/open/floor/iron, +/area/ruin/space/has_grav/port_tarkon/trauma) +"Bb" = ( +/obj/effect/turf_decal/stripes/asteroid/line{ + dir = 8 + }, +/turf/open/misc/asteroid/airless, +/area/solars/tarkon) +"Bd" = ( +/obj/machinery/door/airlock/maintenance_hatch, +/obj/structure/cable, +/turf/open/floor/iron, +/area/ruin/space/has_grav/port_tarkon/afthall) +"Bj" = ( +/obj/structure/table/reinforced, +/obj/machinery/microwave{ + desc = "Cooks and boils stuff, somehow."; + pixel_x = -3; + pixel_y = 5 + }, +/turf/open/floor/iron/cafeteria, +/area/ruin/space/has_grav/port_tarkon/kitchen) +"Bk" = ( +/turf/open/floor/iron, +/area/ruin/space/has_grav/port_tarkon/trauma) +"Bl" = ( +/obj/effect/turf_decal/sand/plating, +/obj/effect/turf_decal/tile/brown{ + dir = 4 + }, +/turf/open/floor/iron, +/area/ruin/space/has_grav/port_tarkon/mining) +"Bp" = ( +/obj/structure/table/reinforced, +/obj/item/reagent_containers/cup/beaker/large, +/obj/item/reagent_containers/cup/beaker/large, +/turf/open/floor/iron/cafeteria, +/area/ruin/space/has_grav/port_tarkon/kitchen) +"Bt" = ( +/obj/effect/turf_decal/stripes/asteroid/line, +/turf/open/misc/asteroid/airless, +/area/solars/tarkon) +"Bu" = ( +/obj/structure/table, +/obj/machinery/light/warm/directional/south, +/obj/item/storage/box/nif_ghost_box/ghost_role, +/obj/item/storage/box/nif_ghost_box/ghost_role, +/obj/item/storage/box/nif_ghost_box/ghost_role, +/obj/item/storage/box/nif_ghost_box/ghost_role, +/turf/open/floor/iron, +/area/ruin/space/has_grav/port_tarkon) +"Bv" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/door/airlock/medical, +/turf/open/floor/iron, +/area/ruin/space/has_grav/port_tarkon/trauma) +"BB" = ( +/obj/machinery/atmospherics/components/unary/outlet_injector/monitored/oxygen_input/tarkon{ + dir = 4 + }, +/turf/open/floor/engine/o2, +/area/ruin/space/has_grav/port_tarkon/atmos) +"BE" = ( +/obj/effect/turf_decal/tile/purple/half{ + dir = 4 + }, +/obj/machinery/airalarm/directional/east, +/obj/effect/mapping_helpers/airalarm/all_access, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/camera/tarkon_xenob, +/turf/open/floor/iron/dark, +/area/ruin/space/has_grav/port_tarkon/developement) +"BI" = ( +/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/purple/half{ + dir = 1 + }, +/obj/structure/disposalpipe/segment, +/turf/open/floor/iron, +/area/ruin/space/has_grav/port_tarkon/porthall) +"BL" = ( +/obj/effect/spawner/structure/window/reinforced, +/turf/open/floor/plating, +/area/ruin/space/has_grav/port_tarkon/forehall) +"BN" = ( +/obj/machinery/vending/dinnerware, +/turf/open/floor/iron/cafeteria, +/area/ruin/space/has_grav/port_tarkon/kitchen) +"BO" = ( +/obj/structure/alien/resin/membrane, +/turf/open/floor/iron, +/area/ruin/space/has_grav/port_tarkon/porthall) +"BS" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 4 + }, +/turf/open/floor/iron/dark, +/area/ruin/space/has_grav/port_tarkon/comms) +"BW" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 1 + }, +/turf/open/floor/iron, +/area/ruin/space/has_grav/port_tarkon/trauma) +"BZ" = ( +/obj/structure/closet, +/obj/item/pickaxe/silver, +/obj/item/storage/backpack/duffelbag, +/obj/item/clothing/glasses/meson, +/obj/item/t_scanner/adv_mining_scanner/lesser, +/obj/effect/turf_decal/tile/brown/half, +/turf/open/floor/iron, +/area/ruin/space/has_grav/port_tarkon/mining) +"Ca" = ( +/obj/machinery/light/small/directional/east, +/obj/machinery/light_switch/directional/east, +/turf/open/floor/iron/cafeteria, +/area/ruin/space/has_grav/port_tarkon/kitchen) +"Cc" = ( +/obj/machinery/firealarm/directional/east, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, +/obj/effect/turf_decal/tile/yellow/half{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron, +/area/ruin/space/has_grav/port_tarkon/power1) +"Cf" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 8 + }, +/turf/open/floor/iron, +/area/ruin/space/has_grav/port_tarkon/trauma) +"Cg" = ( +/obj/effect/turf_decal/tile/blue/anticorner{ + dir = 4 + }, +/obj/machinery/cryo_cell{ + dir = 8 + }, +/obj/machinery/camera/tarkon/directional/east, +/turf/open/floor/iron, +/area/ruin/space/has_grav/port_tarkon/trauma) +"Ch" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/door/firedoor/solid, +/obj/structure/cable, +/obj/structure/alien/resin/wall, +/turf/open/floor/iron, +/area/ruin/space/has_grav/port_tarkon/forehall) +"Ci" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/cyan/visible, +/turf/open/floor/iron, +/area/ruin/space/has_grav/port_tarkon/trauma) +"Cm" = ( +/obj/effect/turf_decal/tile/blue/half{ + dir = 1 + }, +/obj/structure/sink/directional/south, +/turf/open/floor/iron, +/area/ruin/space/has_grav/port_tarkon/trauma) +"Cn" = ( +/obj/effect/turf_decal/tile/blue/half, +/obj/effect/spawner/structure/window{ + polarizer_id = "tarkon_med1" + }, +/turf/open/floor/iron, +/area/ruin/space/has_grav/port_tarkon/trauma) +"Cp" = ( +/obj/machinery/computer/camera_advanced/tarkon_cam{ + dir = 8 + }, +/obj/effect/turf_decal/tile/red/real_red/half, +/turf/open/floor/iron, +/area/ruin/space/has_grav/port_tarkon/secoff) +"Cq" = ( +/obj/machinery/button/door{ + id = "ptafthall"; + name = "shutter controls"; + pixel_x = -26 + }, +/turf/open/floor/iron, +/area/ruin/space/has_grav/port_tarkon/afthall) +"Cu" = ( +/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/tile/neutral/anticorner{ + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 10 + }, +/turf/open/floor/iron, +/area/ruin/space/has_grav/port_tarkon/centerhall) +"CA" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/firealarm/directional/north, +/obj/effect/turf_decal/tile/brown/half{ + dir = 1 + }, +/turf/open/floor/iron, +/area/ruin/space/has_grav/port_tarkon/storage) +"CC" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron/dark, +/area/ruin/space/has_grav/port_tarkon/developement) +"CF" = ( +/obj/effect/spawner/structure/window{ + polarizer_id = "tarkon_med1" + }, +/turf/open/floor/iron, +/area/ruin/space/has_grav/port_tarkon/trauma) +"CN" = ( +/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/yellow/half{ + dir = 1 + }, +/turf/open/floor/iron, +/area/ruin/space/has_grav/port_tarkon/power1) +"CS" = ( +/turf/open/floor/iron, +/area/ruin/space/has_grav/port_tarkon/cargo) +"CY" = ( +/obj/structure/filingcabinet, +/obj/effect/turf_decal/tile/brown/anticorner{ + dir = 8 + }, +/turf/open/floor/iron, +/area/ruin/space/has_grav/port_tarkon/cargo) +"Db" = ( +/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/ruin/space/has_grav/port_tarkon) +"Dc" = ( +/obj/machinery/airalarm/directional/north, +/obj/effect/mapping_helpers/airalarm/all_access, +/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/tile/neutral/anticorner{ + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 10 + }, +/turf/open/floor/iron, +/area/ruin/space/has_grav/port_tarkon/centerhall) +"Dg" = ( +/obj/machinery/light/directional/east, +/obj/effect/turf_decal/tile/blue/half{ + dir = 4 + }, +/obj/machinery/atmospherics/components/unary/portables_connector/visible{ + dir = 8 + }, +/turf/open/floor/iron, +/area/ruin/space/has_grav/port_tarkon/trauma) +"Di" = ( +/obj/effect/spawner/structure/window/reinforced, +/obj/machinery/door/poddoor/shutters{ + id = "ptcell2" + }, +/turf/open/floor/plating, +/area/ruin/space/has_grav/port_tarkon/secoff) +"Dj" = ( +/obj/effect/turf_decal/tile/purple/half{ + dir = 1 + }, +/turf/open/floor/iron/dark, +/area/ruin/space/has_grav/port_tarkon/developement) +"Do" = ( +/obj/structure/spawner/tarkon_xenos/minor, +/obj/effect/mapping_helpers/broken_floor, +/turf/open/floor/plating, +/area/ruin/space/has_grav/port_tarkon/porthall) +"Dq" = ( +/obj/effect/spawner/structure/window/reinforced/no_firelock, +/obj/machinery/atmospherics/pipe/layer_manifold/purple/hidden{ + dir = 4 + }, +/turf/open/floor/plating, +/area/ruin/space/has_grav/port_tarkon/atmos) +"Dr" = ( +/obj/structure/chair/office{ + dir = 8 + }, +/obj/effect/turf_decal/tile/blue{ + dir = 8 + }, +/turf/open/floor/iron/dark, +/area/ruin/space/has_grav/port_tarkon/comms) +"Dt" = ( +/obj/effect/turf_decal/tile/purple/half{ + dir = 4 + }, +/turf/open/floor/iron, +/area/ruin/space/has_grav/port_tarkon/porthall) +"Du" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/cable, +/obj/machinery/door/firedoor/solid, +/obj/machinery/door/airlock/public/glass{ + name = "Public Observatory" + }, +/turf/open/floor/iron, +/area/ruin/space/has_grav/port_tarkon/observ) +"Dv" = ( +/obj/effect/turf_decal/tile/neutral{ + dir = 1 + }, +/turf/open/floor/iron, +/area/ruin/space/has_grav/port_tarkon/centerhall) +"Dz" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/cable, +/obj/structure/alien/resin/wall, +/obj/structure/disposalpipe/segment, +/turf/open/floor/iron, +/area/ruin/space/has_grav/port_tarkon/porthall) +"DA" = ( +/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/cafeteria, +/area/ruin/space/has_grav/port_tarkon/kitchen) +"DB" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/cable, +/obj/machinery/button/door{ + id = "ptobservatory"; + name = "shutter controls"; + pixel_y = -32 + }, +/turf/open/floor/plating, +/area/ruin/space/has_grav/port_tarkon/observ) +"DD" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 1 + }, +/turf/open/floor/iron/dark, +/area/ruin/space/has_grav/port_tarkon/developement) +"DE" = ( +/obj/structure/chair/office, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 1 + }, +/obj/effect/turf_decal/tile/red/real_red/half, +/turf/open/floor/iron, +/area/ruin/space/has_grav/port_tarkon/secoff) +"DG" = ( +/obj/structure/table/reinforced, +/obj/machinery/reagentgrinder/constructed, +/obj/machinery/light/small/directional/west, +/turf/open/floor/iron/cafeteria, +/area/ruin/space/has_grav/port_tarkon/kitchen) +"DH" = ( +/obj/effect/turf_decal/stripes{ + dir = 1 + }, +/obj/structure/cable, +/obj/machinery/power/terminal{ + dir = 4 + }, +/turf/open/floor/iron/dark, +/area/ruin/space/has_grav/port_tarkon/atmos) +"DI" = ( +/obj/effect/turf_decal/tile/purple/half{ + dir = 8 + }, +/obj/machinery/atmospherics/components/binary/tank_compressor, +/obj/machinery/camera/tarkon/directional/west, +/turf/open/floor/iron/dark, +/area/ruin/space/has_grav/port_tarkon/developement) +"DL" = ( +/obj/effect/turf_decal/tile/blue/half{ + dir = 8 + }, +/obj/structure/chair{ + dir = 4 + }, +/obj/structure/noticeboard/directional/west, +/turf/open/floor/iron, +/area/ruin/space/has_grav/port_tarkon/trauma) +"DM" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/light_switch/directional/east, +/obj/effect/turf_decal/tile/yellow/anticorner{ + dir = 4 + }, +/obj/machinery/disposal/bin, +/obj/structure/disposalpipe/trunk, +/obj/machinery/camera/tarkon/directional/north, +/turf/open/floor/iron, +/area/ruin/space/has_grav/port_tarkon/power1) +"DN" = ( +/obj/structure/table/reinforced, +/obj/machinery/light/directional/west, +/obj/item/paper_bin, +/obj/effect/turf_decal/tile/brown/half{ + dir = 8 + }, +/obj/item/pen/survival, +/turf/open/floor/iron, +/area/ruin/space/has_grav/port_tarkon/cargo) +"DQ" = ( +/obj/machinery/light_switch/directional/south, +/obj/effect/turf_decal/tile/purple/half, +/turf/open/floor/iron/dark, +/area/ruin/space/has_grav/port_tarkon/developement) +"DS" = ( +/obj/effect/turf_decal/tile/brown/anticorner{ + dir = 8 + }, +/turf/open/floor/iron, +/area/ruin/space/has_grav/port_tarkon/storage) +"DT" = ( +/obj/machinery/airlock_sensor/incinerator_tarkon{ + pixel_x = 6; + pixel_y = 23 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden, +/turf/open/floor/engine/vacuum, +/area/ruin/space/has_grav/port_tarkon/atmos) +"DW" = ( +/obj/machinery/light/directional/south, +/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/tile/yellow/half, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/iron, +/area/ruin/space/has_grav/port_tarkon/porthall) +"DZ" = ( +/obj/machinery/light_switch/directional/north, +/obj/effect/turf_decal/tile/brown/anticorner{ + dir = 1 + }, +/obj/machinery/camera/tarkon/directional/west, +/turf/open/floor/iron, +/area/ruin/space/has_grav/port_tarkon/storage) +"Eb" = ( +/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/blue{ + dir = 1 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/iron/dark, +/area/ruin/space/has_grav/port_tarkon/comms) +"Eg" = ( +/obj/machinery/power/turbine/turbine_outlet{ + dir = 4 + }, +/obj/structure/cable, +/turf/open/floor/engine/vacuum, +/area/ruin/space/has_grav/port_tarkon/atmos) +"Ei" = ( +/turf/open/floor/iron/airless, +/area/ruin/space/has_grav/port_tarkon/storage) +"Ej" = ( +/obj/machinery/light/warm/directional/east, +/obj/effect/turf_decal/tile/neutral/anticorner{ + dir = 4 + }, +/turf/open/floor/iron, +/area/ruin/space/has_grav/port_tarkon/centerhall) +"Em" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/turf_decal/tile/brown, +/turf/open/floor/iron, +/area/ruin/space/has_grav/port_tarkon/storage) +"En" = ( +/obj/machinery/atmospherics/miner/nitrogen, +/turf/open/floor/engine/n2, +/area/ruin/space/has_grav/port_tarkon/atmos) +"Eo" = ( +/obj/effect/turf_decal/tile/neutral/full, +/turf/open/floor/iron, +/area/ruin/space/has_grav/port_tarkon/centerhall) +"Eq" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 1 + }, +/turf/open/floor/iron, +/area/ruin/space/has_grav/port_tarkon/secoff) +"Ex" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/iron/dark, +/area/ruin/space/has_grav/port_tarkon/developement) +"EE" = ( +/obj/item/stack/sheet/mineral/gold{ + amount = 25 + }, +/obj/effect/turf_decal/tile/purple/half{ + dir = 4 + }, +/obj/structure/table/reinforced, +/turf/open/floor/iron/dark, +/area/ruin/space/has_grav/port_tarkon/developement) +"EG" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 1 + }, +/obj/effect/turf_decal/tile/red/real_red/half, +/turf/open/floor/iron, +/area/ruin/space/has_grav/port_tarkon/secoff) +"EH" = ( +/turf/closed/wall, +/area/ruin/space/has_grav/port_tarkon/trauma) +"EN" = ( +/obj/structure/alien/weeds/node, +/turf/open/misc/asteroid/airless, +/area/ruin/space/has_grav/outdoors) +"EQ" = ( +/turf/closed/wall/r_wall, +/area/ruin/space/has_grav/port_tarkon/cargo) +"ER" = ( +/obj/machinery/atmospherics/miner/oxygen, +/turf/open/floor/engine/o2, +/area/ruin/space/has_grav/port_tarkon/atmos) +"ET" = ( +/obj/effect/turf_decal/stripes{ + dir = 1 + }, +/obj/machinery/button/door/incinerator_vent_atmos_aux{ + pixel_x = -8; + pixel_y = -24; + req_one_access = list("tarkon") + }, +/obj/machinery/button/door/incinerator_vent_atmos_main{ + pixel_x = -8; + pixel_y = -36; + req_one_access = list("tarkon") + }, +/obj/machinery/atmospherics/components/binary/pump/off/general{ + dir = 8 + }, +/turf/open/floor/iron/dark, +/area/ruin/space/has_grav/port_tarkon/atmos) +"EU" = ( +/obj/effect/turf_decal/vg_decals/atmos/oxygen, +/obj/machinery/light/small/directional/west, +/obj/machinery/air_sensor/tarkon/oxygen_tank{ + pixel_x = -26 + }, +/turf/open/floor/engine/o2, +/area/ruin/space/has_grav/port_tarkon/atmos) +"EW" = ( +/obj/effect/spawner/structure/window, +/turf/open/floor/iron/dark, +/area/ruin/space/has_grav/port_tarkon/developement) +"EX" = ( +/obj/machinery/airalarm/directional/west, +/obj/effect/mapping_helpers/airalarm/all_access, +/turf/open/floor/iron, +/area/ruin/space/has_grav/port_tarkon/forehall) +"Fa" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, +/turf/open/floor/iron/dark, +/area/ruin/space/has_grav/port_tarkon/developement) +"Fb" = ( +/obj/machinery/door/airlock/external/ruin, +/obj/effect/mapping_helpers/airlock/access/all/tarkon/general, +/obj/effect/mapping_helpers/airlock/cyclelink_helper{ + dir = 4 + }, +/turf/open/floor/iron, +/area/ruin/space/has_grav/port_tarkon/forehall) +"Fc" = ( +/obj/structure/closet/emcloset, +/turf/open/floor/plating, +/area/ruin/space/has_grav/port_tarkon/power1) +"Fd" = ( +/obj/structure/table/reinforced, +/obj/machinery/coffeemaker, +/turf/open/floor/iron, +/area/ruin/space/has_grav/port_tarkon/centerhall) +"FB" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 4 + }, +/turf/open/floor/iron, +/area/ruin/space/has_grav/port_tarkon/cargo) +"FF" = ( +/obj/structure/table/reinforced, +/obj/item/stamp/denied, +/obj/item/stamp/granted, +/turf/open/floor/iron/dark, +/area/ruin/space/has_grav/port_tarkon/comms) +"FG" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 8 + }, +/turf/open/floor/iron, +/area/ruin/space/has_grav/port_tarkon) +"FI" = ( +/obj/machinery/door/airlock/mining/glass, +/obj/structure/cable, +/obj/machinery/door/firedoor/solid, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/iron, +/area/ruin/space/has_grav/port_tarkon/mining) +"FO" = ( +/obj/effect/turf_decal/tile/brown/anticorner{ + dir = 1 + }, +/obj/machinery/disposal/bin, +/obj/structure/disposalpipe/trunk, +/turf/open/floor/iron, +/area/ruin/space/has_grav/port_tarkon/mining) +"FR" = ( +/obj/structure/cable, +/obj/effect/turf_decal/tile/yellow/half, +/turf/open/floor/iron, +/area/ruin/space/has_grav/port_tarkon/atmos) +"FS" = ( +/turf/open/floor/iron, +/area/ruin/space/has_grav/port_tarkon/porthall) +"FW" = ( +/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/neutral/anticorner{ + dir = 8 + }, +/obj/structure/disposalpipe/segment{ + dir = 5 + }, +/turf/open/floor/iron, +/area/ruin/space/has_grav/port_tarkon/centerhall) +"FY" = ( +/obj/structure/alien/resin/wall, +/turf/open/floor/iron, +/area/ruin/space/has_grav/port_tarkon/porthall) +"FZ" = ( +/obj/structure/fluff/metalpole, +/turf/open/misc/asteroid/airless, +/area/ruin/space/has_grav/outdoors) +"Gj" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 4 + }, +/turf/open/floor/iron, +/area/ruin/space/has_grav/port_tarkon/trauma) +"Gk" = ( +/obj/structure/closet, +/obj/item/pickaxe/mini, +/obj/item/storage/backpack/duffelbag, +/obj/item/clothing/mask/gas/explorer, +/obj/item/clothing/shoes/workboots/mining, +/obj/item/gps/mining, +/obj/item/storage/bag/ore, +/obj/item/storage/belt/mining, +/obj/effect/turf_decal/tile/brown/anticorner, +/turf/open/floor/iron, +/area/ruin/space/has_grav/port_tarkon/mining) +"Gr" = ( +/obj/effect/spawner/structure/window/reinforced/plasma, +/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden{ + dir = 8 + }, +/turf/open/floor/plating, +/area/ruin/space/has_grav/port_tarkon/atmos) +"Gu" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/modular_computer/preset/command{ + dir = 1 + }, +/turf/open/floor/iron/dark, +/area/ruin/space/has_grav/port_tarkon/comms) +"Gz" = ( +/turf/open/floor/iron, +/area/ruin/space/has_grav/port_tarkon/mining) +"GA" = ( +/obj/effect/spawner/structure/window, +/obj/effect/turf_decal/tile/purple/half{ + dir = 1 + }, +/turf/open/floor/iron/dark, +/area/ruin/space/has_grav/port_tarkon/developement) +"GD" = ( +/obj/machinery/atmospherics/components/unary/outlet_injector/monitored/carbon_input/tarkon{ + dir = 8 + }, +/turf/open/floor/engine/co2, +/area/ruin/space/has_grav/port_tarkon/atmos) +"GF" = ( +/obj/machinery/door/airlock/external/ruin{ + name = "Engineering External Access" + }, +/obj/effect/mapping_helpers/airlock/cyclelink_helper{ + dir = 1 + }, +/obj/structure/cable, +/obj/effect/mapping_helpers/airlock/access/all/tarkon/general, +/obj/structure/fans/tiny, +/turf/open/floor/plating, +/area/ruin/space/has_grav/port_tarkon/power1) +"GH" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/disposalpipe/junction{ + dir = 8 + }, +/turf/open/floor/iron, +/area/ruin/space/has_grav/port_tarkon/atmos) +"GJ" = ( +/obj/machinery/suit_storage_unit/engine, +/obj/effect/turf_decal/tile/yellow/half, +/turf/open/floor/iron, +/area/ruin/space/has_grav/port_tarkon/atmos) +"GK" = ( +/obj/machinery/airalarm/directional/west, +/obj/effect/mapping_helpers/airalarm/all_access, +/obj/effect/turf_decal/tile/yellow/half{ + dir = 8 + }, +/turf/open/floor/iron, +/area/ruin/space/has_grav/port_tarkon/toolstorage) +"GL" = ( +/obj/structure/table/reinforced, +/obj/item/pipe_dispenser, +/obj/item/storage/belt/utility/full, +/obj/effect/turf_decal/tile/yellow/anticorner{ + dir = 8 + }, +/obj/item/construction/rcd/tarkon, +/obj/machinery/camera/tarkon/directional/south, +/turf/open/floor/iron, +/area/ruin/space/has_grav/port_tarkon/atmos) +"GN" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/airalarm/directional/north, +/obj/effect/mapping_helpers/airalarm/all_access, +/obj/effect/turf_decal/tile/brown/half{ + dir = 1 + }, +/turf/open/floor/iron, +/area/ruin/space/has_grav/port_tarkon/storage) +"GQ" = ( +/obj/machinery/igniter/incinerator_tarkon, +/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/visible/layer2{ + dir = 5 + }, +/turf/open/floor/engine/vacuum, +/area/ruin/space/has_grav/port_tarkon/atmos) +"GV" = ( +/obj/machinery/disposal/bin, +/obj/structure/disposalpipe/trunk, +/turf/open/floor/iron/dark, +/area/ruin/space/has_grav/port_tarkon/developement) +"Hc" = ( +/obj/structure/chair/stool/directional/south, +/obj/effect/turf_decal/stripes{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden, +/turf/open/floor/engine, +/area/ruin/space/has_grav/port_tarkon/atmos) +"Hf" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 8 + }, +/turf/open/floor/iron/dark, +/area/ruin/space/has_grav/port_tarkon/developement) +"Hg" = ( +/obj/machinery/door/airlock/external/ruin, +/obj/effect/mapping_helpers/airlock/access/all/tarkon/general, +/obj/effect/mapping_helpers/airlock/cyclelink_helper{ + dir = 8 + }, +/turf/open/floor/iron, +/area/ruin/space/has_grav/port_tarkon/forehall) +"Hh" = ( +/obj/item/stack/sheet/mineral/silver{ + amount = 25 + }, +/obj/machinery/airalarm/directional/east, +/obj/effect/mapping_helpers/airalarm/all_access, +/obj/effect/turf_decal/tile/purple/anticorner, +/obj/item/stack/sheet/mineral/titanium{ + amount = 30 + }, +/obj/structure/table/reinforced, +/turf/open/floor/iron/dark, +/area/ruin/space/has_grav/port_tarkon/developement) +"Hi" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/disposalpipe/segment, +/turf/open/floor/iron, +/area/ruin/space/has_grav/port_tarkon/porthall) +"Hk" = ( +/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, +/turf/open/floor/iron, +/area/ruin/space/has_grav/port_tarkon/cargo) +"Hm" = ( +/obj/machinery/atmospherics/components/binary/pump/off/general{ + dir = 8 + }, +/obj/effect/turf_decal/tile/yellow/fourcorners, +/turf/open/floor/iron, +/area/ruin/space/has_grav/port_tarkon/atmos) +"Hn" = ( +/obj/effect/turf_decal/stripes/asteroid/line{ + dir = 6 + }, +/turf/open/misc/asteroid/airless, +/area/solars/tarkon) +"Ho" = ( +/obj/effect/turf_decal/tile/purple/anticorner{ + dir = 8 + }, +/turf/open/floor/iron/dark, +/area/ruin/space/has_grav/port_tarkon/developement) +"Hq" = ( +/obj/machinery/disposal/bin, +/obj/structure/disposalpipe/trunk{ + dir = 8 + }, +/turf/open/floor/iron/cafeteria, +/area/ruin/space/has_grav/port_tarkon/kitchen) +"Hs" = ( +/obj/effect/turf_decal/tile/purple/half{ + dir = 1 + }, +/obj/structure/table/reinforced, +/obj/item/stack/cable_coil, +/obj/item/stack/sheet/glass{ + amount = 25 + }, +/turf/open/floor/iron/dark, +/area/ruin/space/has_grav/port_tarkon/developement) +"Ht" = ( +/obj/structure/table/reinforced, +/obj/effect/turf_decal/tile/purple/half{ + dir = 1 + }, +/obj/item/multitool/circuit, +/turf/open/floor/iron/dark, +/area/ruin/space/has_grav/port_tarkon/developement) +"HB" = ( +/obj/machinery/door/window/left/directional/west, +/obj/machinery/door/window/right/directional/east, +/obj/machinery/mineral/ore_redemption/offstation, +/turf/open/floor/iron, +/area/ruin/space/has_grav/port_tarkon/mining) +"HC" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 8 + }, +/obj/structure/alien/weeds/node, +/turf/open/floor/iron, +/area/ruin/space/has_grav/port_tarkon/porthall) +"HE" = ( +/obj/effect/turf_decal/tile/blue/half, +/obj/structure/table/reinforced, +/turf/open/floor/iron/dark, +/area/ruin/space/has_grav/port_tarkon/comms) +"HH" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/chair/office, +/obj/effect/mob_spawn/ghost_role/human/tarkon/director, +/turf/open/floor/iron/dark, +/area/ruin/space/has_grav/port_tarkon/comms) +"HM" = ( +/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/ruin/space/has_grav/port_tarkon/mining) +"HN" = ( +/obj/machinery/atmospherics/components/unary/outlet_injector/monitored/air_input/tarkon{ + dir = 4 + }, +/turf/open/floor/engine/vacuum, +/area/ruin/space/has_grav/port_tarkon/atmos) +"HP" = ( +/obj/machinery/light/directional/west, +/turf/open/floor/iron, +/area/ruin/space/has_grav/port_tarkon/forehall) +"HS" = ( +/obj/machinery/power/solar_control{ + dir = 1; + id = "aftport"; + name = "Station Solar Control" + }, +/obj/structure/cable, +/obj/item/paper/guides/jobs/engi/solars, +/obj/effect/turf_decal/tile/yellow/half, +/turf/open/floor/iron, +/area/ruin/space/has_grav/port_tarkon/power1) +"HU" = ( +/turf/closed/wall/r_wall, +/area/ruin/space/has_grav/port_tarkon/starboardhall) +"HV" = ( +/obj/machinery/door/airlock/public/glass{ + name = "Crew Storage"; + state_open = 1 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/cable, +/obj/machinery/door/firedoor/solid, +/turf/open/floor/iron, +/area/ruin/space/has_grav/port_tarkon) +"HX" = ( +/obj/structure/closet/secure_closet/medical2{ + req_access = list("medical") + }, +/obj/effect/turf_decal/tile/blue/half{ + dir = 4 + }, +/turf/open/floor/iron, +/area/ruin/space/has_grav/port_tarkon/trauma) +"Ia" = ( +/obj/structure/cable, +/obj/machinery/power/apc/auto_name/directional/west, +/obj/effect/mapping_helpers/apc/full_charge, +/obj/effect/mapping_helpers/apc/unlocked, +/obj/effect/turf_decal/tile/purple/half{ + dir = 8 + }, +/obj/effect/mapping_helpers/apc/cell_10k, +/turf/open/floor/iron/dark, +/area/ruin/space/has_grav/port_tarkon/developement) +"Ic" = ( +/obj/modular_map_root/port_tarkon{ + key = "dorm" + }, +/turf/open/floor/wood/large, +/area/ruin/space/has_grav/port_tarkon/dorms) +"Id" = ( +/obj/machinery/door/window/brigdoor/tarkon/left/directional/west, +/turf/open/floor/plating, +/area/ruin/space/has_grav/port_tarkon/atmos) +"Ie" = ( +/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/neutral{ + dir = 4 + }, +/obj/structure/disposalpipe/segment, +/turf/open/floor/iron, +/area/ruin/space/has_grav/port_tarkon/centerhall) +"If" = ( +/obj/structure/cable, +/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/iron, +/area/ruin/space/has_grav/port_tarkon/afthall) +"Ik" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/structure/disposalpipe/segment, +/turf/open/floor/iron, +/area/ruin/space/has_grav/port_tarkon/starboardhall) +"Io" = ( +/obj/structure/alien/weeds/node, +/turf/open/floor/plating, +/area/ruin/space/has_grav/port_tarkon/observ) +"Ip" = ( +/obj/structure/closet, +/obj/item/clothing/under/tarkon/med, +/obj/item/clothing/under/tarkon/med, +/obj/item/clothing/under/tarkon/med, +/obj/item/clothing/under/tarkon/med, +/obj/item/clothing/under/tarkon/med, +/obj/item/clothing/under/tarkon/med, +/obj/item/storage/backpack/duffelbag/genetics, +/obj/item/storage/backpack/duffelbag/med, +/obj/item/storage/backpack/duffelbag/coroner, +/obj/item/storage/backpack/duffelbag/chemistry, +/obj/item/storage/backpack/duffelbag/virology, +/obj/item/storage/backpack/medic, +/obj/item/storage/backpack/messenger/chem, +/obj/item/storage/backpack/messenger/coroner, +/obj/item/storage/backpack/messenger/gen, +/obj/item/storage/backpack/messenger/vir, +/obj/item/storage/backpack/satchel/chem, +/obj/item/storage/backpack/satchel/coroner, +/obj/item/storage/backpack/satchel/gen, +/obj/item/storage/backpack/satchel/med, +/obj/item/storage/backpack/satchel/vir, +/obj/item/storage/backpack/virology, +/obj/item/storage/backpack/chemistry, +/obj/item/storage/backpack/coroner, +/obj/item/clothing/head/utility/welding/hat, +/obj/item/clothing/head/utility/welding/hat, +/turf/open/floor/iron, +/area/ruin/space/has_grav/port_tarkon) +"Iq" = ( +/obj/effect/turf_decal/stripes/asteroid/line{ + dir = 1 + }, +/turf/open/misc/asteroid/airless, +/area/solars/tarkon) +"It" = ( +/obj/machinery/door/firedoor/solid, +/obj/machinery/door/airlock/mining/glass, +/turf/open/floor/iron, +/area/ruin/space/has_grav/port_tarkon/mining) +"Iv" = ( +/obj/effect/turf_decal/bot, +/turf/open/floor/plating, +/area/ruin/space/has_grav/port_tarkon/atmos) +"Iz" = ( +/obj/machinery/air_sensor/tarkon/mix_tank{ + pixel_x = -26 + }, +/turf/open/floor/engine/vacuum, +/area/ruin/space/has_grav/port_tarkon/atmos) +"IB" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, +/turf/open/floor/iron, +/area/ruin/space/has_grav/port_tarkon/forehall) +"IF" = ( +/obj/structure/bed/maint, +/obj/machinery/camera/tarkon/directional/west, +/turf/open/floor/iron, +/area/ruin/space/has_grav/port_tarkon/secoff) +"IJ" = ( +/obj/structure/table/reinforced, +/obj/item/paper_bin/construction, +/obj/item/pen/red, +/turf/open/floor/iron/dark, +/area/ruin/space/has_grav/port_tarkon/comms) +"IL" = ( +/obj/machinery/door/airlock/research/glass, +/obj/effect/mapping_helpers/airlock/access/all/tarkon/general, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/door/poddoor/shutters{ + id = "ptxeno" + }, +/turf/open/floor/iron/dark, +/area/ruin/space/has_grav/port_tarkon/developement) +"IM" = ( +/obj/machinery/firealarm/directional/west, +/obj/effect/turf_decal/tile/neutral/half{ + dir = 8 + }, +/turf/open/floor/iron, +/area/ruin/space/has_grav/port_tarkon/centerhall) +"IO" = ( +/obj/effect/turf_decal/stripes/asteroid/line{ + dir = 9 + }, +/turf/open/misc/asteroid/airless, +/area/solars/tarkon) +"IQ" = ( +/obj/structure/sink/directional/south, +/turf/open/floor/iron/cafeteria, +/area/ruin/space/has_grav/port_tarkon/kitchen) +"IT" = ( +/obj/machinery/airalarm/directional/north, +/obj/effect/mapping_helpers/airalarm/all_access, +/obj/effect/turf_decal/tile/neutral/half{ + dir = 1 + }, +/turf/open/floor/iron, +/area/ruin/space/has_grav/port_tarkon/centerhall) +"IU" = ( +/obj/machinery/light/warm/directional/west, +/obj/effect/turf_decal/tile/neutral/half{ + dir = 8 + }, +/turf/open/floor/iron, +/area/ruin/space/has_grav/port_tarkon/centerhall) +"IV" = ( +/obj/machinery/power/smes/tarkon_backup, +/obj/structure/cable, +/turf/open/floor/plating, +/area/ruin/space/has_grav/port_tarkon/power1) +"IW" = ( +/obj/effect/turf_decal/tile/blue/half{ + dir = 4 + }, +/obj/structure/table/rolling, +/obj/item/surgery_tray/full, +/obj/machinery/button/polarizer{ + id = "tarkon_med1"; + pixel_x = 31 + }, +/turf/open/floor/iron, +/area/ruin/space/has_grav/port_tarkon/trauma) +"IZ" = ( +/obj/machinery/atmospherics/components/binary/pump, +/turf/open/floor/plating, +/area/ruin/space/has_grav/port_tarkon/centerhall) +"Jb" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/turf_decal/tile/brown{ + dir = 8 + }, +/turf/open/floor/iron, +/area/ruin/space/has_grav/port_tarkon/storage) +"Jd" = ( +/obj/effect/turf_decal/loading_area{ + dir = 8 + }, +/turf/open/floor/iron/dark, +/area/ruin/space/has_grav/port_tarkon/developement) +"Je" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/siphon/monitored/nitrogen_output/tarkon{ + dir = 4 + }, +/turf/open/floor/engine/n2, +/area/ruin/space/has_grav/port_tarkon/atmos) +"Jf" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, +/turf/open/floor/iron, +/area/ruin/space/has_grav/port_tarkon/mining) +"Jg" = ( +/obj/structure/safe/floor, +/obj/item/areaeditor/blueprints/tarkon, +/obj/item/flatpacked_machine/ore_thumper, +/obj/item/flatpacked_machine/ore_thumper, +/obj/item/flatpacked_machine/ore_thumper, +/turf/open/floor/iron, +/area/ruin/space/has_grav/port_tarkon/power1) +"Jq" = ( +/obj/machinery/light/warm/directional/east, +/obj/effect/turf_decal/tile/neutral/half{ + dir = 4 + }, +/turf/open/floor/iron, +/area/ruin/space/has_grav/port_tarkon/centerhall) +"Js" = ( +/obj/item/shovel, +/turf/open/misc/asteroid/airless, +/area/ruin/space/has_grav/outdoors) +"Ju" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 8 + }, +/turf/open/floor/iron, +/area/ruin/space/has_grav/port_tarkon/trauma) +"Jv" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, +/turf/open/floor/iron, +/area/ruin/space/has_grav/port_tarkon/trauma) +"JA" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, +/turf/open/floor/iron/cafeteria, +/area/ruin/space/has_grav/port_tarkon/kitchen) +"JB" = ( +/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/iron/dark, +/area/ruin/space/has_grav/port_tarkon/developement) +"JD" = ( +/obj/structure/rack, +/obj/effect/turf_decal/tile/yellow/half{ + dir = 1 + }, +/turf/open/floor/iron, +/area/ruin/space/has_grav/port_tarkon/toolstorage) +"JF" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/turf/open/floor/grass/lavaland{ + initial_gas_mix = "o2=22;n2=82;TEMP=293.15" + }, +/area/ruin/space/has_grav/port_tarkon/garden) +"JI" = ( +/obj/effect/turf_decal/tile/purple/anticorner, +/obj/machinery/computer/operating/oldstation{ + dir = 1 + }, +/turf/open/floor/iron/dark, +/area/ruin/space/has_grav/port_tarkon/developement) +"JL" = ( +/obj/machinery/door/window/brigdoor/tarkon/right/directional/south, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/door/poddoor/shutters{ + id = "ptcell2" + }, +/turf/open/floor/iron, +/area/ruin/space/has_grav/port_tarkon/secoff) +"JM" = ( +/obj/structure/table/wood/fancy/blue, +/obj/effect/turf_decal/tile/blue/anticorner{ + dir = 1 + }, +/obj/machinery/recharger, +/obj/machinery/camera/tarkon/directional/west, +/turf/open/floor/iron/dark, +/area/ruin/space/has_grav/port_tarkon/comms) +"JP" = ( +/obj/structure/rack/gunrack, +/obj/machinery/light/directional/north, +/obj/item/gun/ballistic/automatic/m6pdw{ + pixel_x = 4 + }, +/obj/item/gun/ballistic/automatic/m6pdw, +/obj/item/gun/ballistic/automatic/m6pdw{ + pixel_x = -4 + }, +/obj/machinery/door/window/brigdoor/right/directional/south{ + req_access = list("tarkon") + }, +/obj/structure/window/reinforced/spawner/directional/east, +/obj/structure/window/reinforced/spawner/directional/west, +/obj/effect/turf_decal/tile/red/real_red/half{ + dir = 1 + }, +/turf/open/floor/iron, +/area/ruin/space/has_grav/port_tarkon/secoff) +"JQ" = ( +/obj/structure/cable, +/obj/effect/turf_decal/tile/yellow/half{ + dir = 8 + }, +/obj/structure/closet/crate/internals, +/obj/item/clothing/head/helmet/space/eva, +/obj/item/clothing/suit/space/eva, +/obj/item/clothing/mask/breath, +/obj/item/tank/internals/oxygen, +/turf/open/floor/iron, +/area/ruin/space/has_grav/port_tarkon/power1) +"JV" = ( +/obj/effect/spawner/structure/window/reinforced/no_firelock, +/obj/machinery/door/poddoor/shutters{ + id = "ptporthall" + }, +/turf/open/floor/plating, +/area/ruin/space/has_grav/port_tarkon/porthall) +"JY" = ( +/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{ + dir = 8 + }, +/obj/structure/disposalpipe/segment{ + dir = 9 + }, +/turf/open/floor/iron, +/area/ruin/space/has_grav/port_tarkon/mining) +"JZ" = ( +/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/blue/half{ + dir = 4 + }, +/obj/structure/disposalpipe/segment, +/turf/open/floor/iron, +/area/ruin/space/has_grav/port_tarkon/afthall) +"Kb" = ( +/obj/machinery/airalarm/directional/east, +/obj/effect/mapping_helpers/airalarm/all_access, +/obj/effect/turf_decal/tile/neutral/half{ + dir = 4 + }, +/turf/open/floor/iron, +/area/ruin/space/has_grav/port_tarkon/centerhall) +"Kc" = ( +/obj/machinery/airalarm/directional/east, +/obj/effect/mapping_helpers/airalarm/all_access, +/obj/effect/turf_decal/tile/blue/half{ + dir = 4 + }, +/obj/machinery/light/directional/east, +/turf/open/floor/iron/dark, +/area/ruin/space/has_grav/port_tarkon/comms) +"Kf" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/siphon/monitored/nitrous_output/tarkon{ + dir = 8 + }, +/turf/open/floor/engine/n2o, +/area/ruin/space/has_grav/port_tarkon/atmos) +"Kg" = ( +/obj/structure/tank_dispenser, +/obj/effect/turf_decal/tile/brown/anticorner{ + dir = 1 + }, +/turf/open/floor/iron, +/area/ruin/space/has_grav/port_tarkon/mining) +"Kh" = ( +/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/yellow{ + dir = 1 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/iron, +/area/ruin/space/has_grav/port_tarkon/afthall) +"Km" = ( +/obj/structure/cable, +/obj/machinery/power/apc/auto_name/directional/south, +/obj/effect/mapping_helpers/apc/full_charge, +/obj/effect/mapping_helpers/apc/unlocked, +/turf/open/floor/grass, +/area/ruin/space/has_grav/port_tarkon/garden) +"Kn" = ( +/obj/structure/spawner/tarkon_xenos/common, +/turf/open/misc/asteroid/airless, +/area/ruin/space/has_grav/outdoors) +"Ko" = ( +/obj/structure/falsewall, +/turf/open/floor/plating, +/area/ruin/space/has_grav/port_tarkon/cargo) +"Kr" = ( +/obj/structure/table/reinforced, +/obj/machinery/cell_charger, +/obj/item/clothing/gloves/color/yellow, +/turf/open/floor/iron/dark, +/area/ruin/space/has_grav/port_tarkon/atmos) +"Ks" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/plating, +/area/ruin/space/has_grav/port_tarkon/observ) +"Kt" = ( +/obj/machinery/door/airlock/external/ruin{ + name = "Engineering External Access" + }, +/obj/effect/mapping_helpers/airlock/cyclelink_helper, +/obj/structure/cable, +/obj/effect/mapping_helpers/airlock/access/all/tarkon/general, +/turf/open/floor/plating, +/area/ruin/space/has_grav/port_tarkon/power1) +"Kv" = ( +/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/tile/neutral/anticorner, +/obj/structure/disposalpipe/segment, +/turf/open/floor/iron, +/area/ruin/space/has_grav/port_tarkon/centerhall) +"Kx" = ( +/obj/structure/table/wood/fancy/blue, +/obj/effect/turf_decal/tile/blue/half{ + dir = 1 + }, +/obj/machinery/cell_charger, +/turf/open/floor/iron/dark, +/area/ruin/space/has_grav/port_tarkon/comms) +"KB" = ( +/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/neutral/half{ + dir = 8 + }, +/obj/structure/disposalpipe/segment, +/turf/open/floor/iron, +/area/ruin/space/has_grav/port_tarkon/centerhall) +"KE" = ( +/obj/structure/disposalpipe/segment, +/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/ruin/space/has_grav/port_tarkon/porthall) +"KF" = ( +/obj/effect/turf_decal/tile/blue/anticorner{ + dir = 8 + }, +/obj/structure/chair{ + dir = 4 + }, +/turf/open/floor/iron, +/area/ruin/space/has_grav/port_tarkon/trauma) +"KG" = ( +/obj/machinery/firealarm/directional/east, +/obj/effect/turf_decal/tile/brown/half{ + dir = 4 + }, +/obj/effect/turf_decal/sand, +/turf/open/floor/iron, +/area/ruin/space/has_grav/port_tarkon/mining) +"KH" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/general, +/obj/structure/cable, +/obj/machinery/power/apc/auto_name/directional/east, +/obj/effect/mapping_helpers/apc/full_charge, +/obj/effect/mapping_helpers/apc/unlocked, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 8 + }, +/turf/open/floor/plating, +/area/ruin/space/has_grav/port_tarkon/centerhall) +"KJ" = ( +/obj/machinery/airalarm/directional/east, +/obj/effect/mapping_helpers/airalarm/all_access, +/obj/effect/turf_decal/tile/blue/half{ + dir = 4 + }, +/obj/machinery/atmospherics/components/unary/thermomachine/freezer/on{ + dir = 8 + }, +/turf/open/floor/iron, +/area/ruin/space/has_grav/port_tarkon/trauma) +"KP" = ( +/obj/effect/turf_decal/tile/brown/anticorner{ + dir = 1 + }, +/obj/structure/frame/machine, +/obj/item/circuitboard/machine/ore_silo, +/obj/item/stack/cable_coil, +/obj/structure/noticeboard/directional/west, +/obj/item/paper/fluff/ruins/tarkon/cargosafe, +/turf/open/floor/iron, +/area/ruin/space/has_grav/port_tarkon/cargo) +"KQ" = ( +/obj/effect/turf_decal/sand/plating, +/turf/open/floor/plating/airless, +/area/solars/tarkon) +"KR" = ( +/turf/open/floor/plating, +/area/ruin/space/has_grav/port_tarkon/centerhall) +"KU" = ( +/obj/effect/turf_decal/tile/blue{ + dir = 8 + }, +/turf/open/floor/iron, +/area/ruin/space/has_grav/port_tarkon/trauma) +"KZ" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/cable, +/obj/machinery/light_switch/directional/west, +/obj/effect/turf_decal/tile/red/real_red/anticorner{ + dir = 8 + }, +/obj/structure/disposalpipe/segment, +/turf/open/floor/iron, +/area/ruin/space/has_grav/port_tarkon/secoff) +"Lj" = ( +/obj/structure/chair/office{ + dir = 1 + }, +/obj/effect/turf_decal/tile/brown/half{ + dir = 1 + }, +/turf/open/floor/iron, +/area/ruin/space/has_grav/port_tarkon/cargo) +"Lk" = ( +/obj/effect/turf_decal/tile/purple, +/obj/structure/curtain/cloth, +/turf/open/floor/iron/dark, +/area/ruin/space/has_grav/port_tarkon/developement) +"Ll" = ( +/obj/machinery/light/small/directional/south, +/obj/machinery/light_switch/directional/south, +/obj/structure/sink/directional/north, +/turf/open/floor/grass, +/area/ruin/space/has_grav/port_tarkon/garden) +"Ln" = ( +/obj/machinery/camera/tarkon/directional/east, +/turf/open/floor/plating, +/area/ruin/space/has_grav/port_tarkon/observ) +"Lt" = ( +/obj/structure/cable, +/obj/effect/turf_decal/tile/yellow/half, +/turf/open/floor/iron, +/area/ruin/space/has_grav/port_tarkon/power1) +"Lu" = ( +/obj/effect/turf_decal/tile/purple/anticorner{ + dir = 4 + }, +/obj/machinery/rnd/production/protolathe/tarkon, +/turf/open/floor/iron/dark, +/area/ruin/space/has_grav/port_tarkon/developement) +"Lv" = ( +/obj/structure/table, +/obj/item/stack/spacecash/c200, +/obj/item/stack/spacecash/c200, +/obj/item/stack/spacecash/c200, +/obj/item/stack/spacecash/c200, +/obj/item/stack/spacecash/c200, +/obj/item/stack/spacecash/c200, +/obj/item/stack/spacecash/c200, +/obj/item/stack/spacecash/c200, +/obj/item/stack/spacecash/c200, +/obj/item/stack/spacecash/c200, +/obj/effect/turf_decal/tile/brown/half, +/obj/item/stack/spacecash/c200, +/obj/item/stack/spacecash/c200, +/obj/item/stack/spacecash/c200, +/obj/item/stack/spacecash/c200, +/obj/item/stack/spacecash/c200, +/turf/open/floor/iron, +/area/ruin/space/has_grav/port_tarkon/cargo) +"Lw" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/door/firedoor/solid, +/obj/machinery/door/airlock/engineering/glass{ + name = "P-T Tool Storage" + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/iron, +/area/ruin/space/has_grav/port_tarkon/toolstorage) +"Ly" = ( +/obj/structure/table/reinforced, +/obj/item/flashlight, +/obj/effect/turf_decal/tile/yellow/anticorner{ + dir = 1 + }, +/turf/open/floor/iron, +/area/ruin/space/has_grav/port_tarkon/toolstorage) +"Lz" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 1 + }, +/turf/open/floor/iron, +/area/ruin/space/has_grav/port_tarkon/power1) +"LL" = ( +/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/tile/yellow/half, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/iron, +/area/ruin/space/has_grav/port_tarkon/porthall) +"LQ" = ( +/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/neutral, +/obj/structure/disposalpipe/junction/flip{ + dir = 8 + }, +/turf/open/floor/iron, +/area/ruin/space/has_grav/port_tarkon/centerhall) +"LR" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/plating, +/area/ruin/space/has_grav/port_tarkon/observ) +"LS" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 4 + }, +/turf/open/floor/iron, +/area/ruin/space/has_grav/port_tarkon/afthall) +"LV" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/plating, +/area/ruin/space/has_grav/port_tarkon/centerhall) +"LW" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, +/turf/open/floor/iron, +/area/ruin/space/has_grav/port_tarkon/starboardhall) +"LY" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/cable, +/obj/machinery/door/firedoor/solid, +/obj/structure/alien/resin/wall, +/turf/open/floor/iron, +/area/ruin/space/has_grav/port_tarkon/forehall) +"Ma" = ( +/obj/structure/cable, +/obj/effect/turf_decal/tile/yellow/half{ + dir = 8 + }, +/obj/structure/rack, +/obj/item/stack/sheet/iron/fifty, +/obj/item/stack/sheet/glass/fifty, +/turf/open/floor/iron, +/area/ruin/space/has_grav/port_tarkon/power1) +"Mf" = ( +/obj/effect/turf_decal/tile/blue/half{ + dir = 1 + }, +/obj/machinery/vending/cigarette, +/turf/open/floor/iron/dark, +/area/ruin/space/has_grav/port_tarkon/comms) +"Mg" = ( +/obj/structure/table/reinforced, +/obj/item/crowbar, +/obj/effect/turf_decal/tile/red/real_red/half{ + dir = 8 + }, +/turf/open/floor/iron, +/area/ruin/space/has_grav/port_tarkon/secoff) +"Mp" = ( +/obj/machinery/light/directional/south, +/obj/effect/turf_decal/tile/brown/anticorner{ + dir = 8 + }, +/turf/open/floor/iron, +/area/ruin/space/has_grav/port_tarkon/storage) +"Mq" = ( +/obj/effect/turf_decal/tile/purple/half{ + dir = 4 + }, +/obj/machinery/mecha_part_fabricator{ + dir = 8 + }, +/turf/open/floor/iron/dark, +/area/ruin/space/has_grav/port_tarkon/developement) +"Mw" = ( +/obj/effect/spawner/structure/window/reinforced/no_firelock, +/obj/machinery/door/poddoor/shutters{ + id = "ptafthall" + }, +/turf/open/floor/plating, +/area/ruin/space/has_grav/port_tarkon/afthall) +"Mx" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 8 + }, +/turf/open/floor/iron/dark, +/area/ruin/space/has_grav/port_tarkon/developement) +"Mz" = ( +/obj/effect/turf_decal/tile/neutral/anticorner{ + dir = 1 + }, +/turf/open/floor/iron, +/area/ruin/space/has_grav/port_tarkon/centerhall) +"MD" = ( +/obj/machinery/door/airlock{ + name = "Bathroom" + }, +/obj/machinery/door/firedoor/solid, +/turf/open/floor/iron, +/area/ruin/space/has_grav/port_tarkon/centerhall) +"MG" = ( +/turf/open/floor/iron/dark, +/area/ruin/space/has_grav/port_tarkon/atmos) +"MH" = ( +/obj/structure/table, +/obj/machinery/firealarm/directional/south, +/obj/effect/turf_decal/tile/yellow/anticorner, +/obj/item/clothing/head/utility/welding, +/obj/item/clothing/gloves/color/yellow, +/turf/open/floor/iron, +/area/ruin/space/has_grav/port_tarkon/power1) +"MJ" = ( +/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{ + dir = 8 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/iron, +/area/ruin/space/has_grav/port_tarkon/starboardhall) +"MM" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/light/directional/south, +/obj/machinery/light_switch/directional/south, +/turf/open/floor/plating, +/area/ruin/space/has_grav/port_tarkon/observ) +"MQ" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/iron/dark, +/area/ruin/space/has_grav/port_tarkon/comms) +"MT" = ( +/obj/machinery/vending/hydroseeds, +/turf/open/floor/iron, +/area/ruin/space/has_grav/port_tarkon/garden) +"MV" = ( +/obj/machinery/atmospherics/components/unary/outlet_injector/monitored/nitrogen_input/tarkon{ + dir = 4 + }, +/turf/open/floor/engine/n2, +/area/ruin/space/has_grav/port_tarkon/atmos) +"MX" = ( +/turf/closed/wall/r_wall/rust, +/area/ruin/space/has_grav/port_tarkon/mining) +"MY" = ( +/obj/effect/turf_decal/vg_decals/atmos/mix, +/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/visible/layer2, +/turf/open/floor/engine/vacuum, +/area/ruin/space/has_grav/port_tarkon/atmos) +"MZ" = ( +/obj/effect/turf_decal/tile/purple/anticorner{ + dir = 1 + }, +/obj/machinery/recharge_station, +/turf/open/floor/iron/dark, +/area/ruin/space/has_grav/port_tarkon/developement) +"Na" = ( +/obj/machinery/atmospherics/components/tank/air, +/turf/open/floor/plating, +/area/ruin/space/has_grav/port_tarkon/centerhall) +"Nc" = ( +/obj/structure/table/reinforced, +/obj/machinery/firealarm/directional/north, +/obj/item/assembly/flash, +/obj/item/assembly/flash, +/obj/item/restraints/handcuffs, +/obj/item/restraints/handcuffs, +/obj/effect/turf_decal/tile/red/real_red/half{ + dir = 1 + }, +/turf/open/floor/iron, +/area/ruin/space/has_grav/port_tarkon/secoff) +"Nd" = ( +/obj/effect/turf_decal/tile/purple/anticorner{ + dir = 8 + }, +/obj/machinery/rnd/server/tarkon, +/turf/open/floor/iron/dark, +/area/ruin/space/has_grav/port_tarkon/developement) +"Nf" = ( +/obj/machinery/door/airlock/mining/glass, +/obj/effect/turf_decal/sand/plating, +/obj/effect/turf_decal/sand/plating, +/obj/effect/mapping_helpers/airlock/cyclelink_helper{ + dir = 1 + }, +/obj/effect/mapping_helpers/airlock/access/all/tarkon/general, +/obj/structure/fans/tiny, +/turf/open/floor/iron, +/area/ruin/space/has_grav/port_tarkon/mining) +"Nh" = ( +/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/neutral{ + dir = 8 + }, +/obj/structure/disposalpipe/segment{ + dir = 10 + }, +/turf/open/floor/iron, +/area/ruin/space/has_grav/port_tarkon/centerhall) +"Nj" = ( +/obj/effect/turf_decal/tile/brown{ + dir = 1 + }, +/turf/open/floor/iron, +/area/ruin/space/has_grav/port_tarkon/mining) +"Nn" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/light/directional/east, +/obj/structure/noticeboard/directional/east, +/obj/item/paper/fluff/ruins/tarkon/detain, +/obj/effect/turf_decal/tile/red/real_red/anticorner, +/obj/item/paper/fluff/ruins/tarkon/sop, +/turf/open/floor/iron, +/area/ruin/space/has_grav/port_tarkon/secoff) +"Np" = ( +/obj/machinery/door/airlock/public/glass{ + name = "Aft Primary Hallway" + }, +/obj/machinery/door/firedoor/solid, +/obj/effect/turf_decal/tile/yellow/half{ + dir = 8 + }, +/turf/open/floor/iron, +/area/ruin/space/has_grav/port_tarkon/afthall) +"Ns" = ( +/obj/structure/table, +/obj/item/storage/box/nif_ghost_box/ghost_role, +/obj/item/storage/box/nif_ghost_box/ghost_role, +/obj/item/storage/box/nif_ghost_box/ghost_role, +/obj/item/storage/box/nif_ghost_box/ghost_role, +/turf/open/floor/iron, +/area/ruin/space/has_grav/port_tarkon) +"Nv" = ( +/obj/effect/spawner/structure/window/reinforced, +/turf/open/floor/plating, +/area/ruin/space/has_grav/port_tarkon/garden) +"Nx" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/turf_decal/tile/neutral, +/turf/open/floor/iron, +/area/ruin/space/has_grav/port_tarkon/centerhall) +"Nz" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/turf_decal/tile/purple/half, +/obj/structure/disposalpipe/segment{ + dir = 5 + }, +/turf/open/floor/iron/dark, +/area/ruin/space/has_grav/port_tarkon/developement) +"NA" = ( +/obj/machinery/firealarm/directional/east, +/obj/effect/turf_decal/tile/neutral/anticorner, +/turf/open/floor/iron, +/area/ruin/space/has_grav/port_tarkon/centerhall) +"NB" = ( +/obj/machinery/vending/dorms, +/turf/open/floor/plating, +/area/ruin/space/has_grav/port_tarkon/cargo) +"NC" = ( +/obj/machinery/atmospherics/components/unary/passive_vent{ + dir = 4; + name = "killroom vent" + }, +/obj/effect/turf_decal/sand/plating, +/turf/open/floor/plating/airless, +/area/ruin/space/has_grav/outdoors) +"NE" = ( +/obj/machinery/firealarm/directional/north, +/obj/effect/turf_decal/tile/yellow/half{ + dir = 1 + }, +/obj/structure/disposalpipe/trunk, +/obj/machinery/disposal/bin, +/turf/open/floor/iron, +/area/ruin/space/has_grav/port_tarkon/atmos) +"NI" = ( +/obj/machinery/light/directional/south, +/obj/effect/turf_decal/tile/brown/anticorner, +/obj/machinery/camera/tarkon/directional/east, +/turf/open/floor/iron, +/area/ruin/space/has_grav/port_tarkon/storage) +"NO" = ( +/obj/effect/turf_decal/tile/purple/half{ + dir = 1 + }, +/obj/machinery/modular_computer/console, +/turf/open/floor/iron/dark, +/area/ruin/space/has_grav/port_tarkon/developement) +"NS" = ( +/obj/structure/cable, +/obj/machinery/power/smes/tarkon_backup, +/obj/machinery/camera/tarkon/directional/west, +/turf/open/floor/plating, +/area/ruin/space/has_grav/port_tarkon/power1) +"NT" = ( +/obj/machinery/door/airlock/multi_tile/public/glass, +/obj/machinery/door/firedoor/solid, +/obj/structure/cable, +/obj/effect/turf_decal/tile/blue/half{ + dir = 8 + }, +/turf/open/floor/iron, +/area/ruin/space/has_grav/port_tarkon/trauma) +"NU" = ( +/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/neutral{ + dir = 8 + }, +/obj/effect/turf_decal/tile/neutral{ + dir = 4 + }, +/obj/structure/disposalpipe/segment, +/turf/open/floor/iron, +/area/ruin/space/has_grav/port_tarkon/centerhall) +"NV" = ( +/obj/structure/cable, +/obj/machinery/power/terminal{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden, +/turf/open/floor/iron/dark, +/area/ruin/space/has_grav/port_tarkon/atmos) +"NX" = ( +/obj/effect/turf_decal/trimline/yellow/filled/warning, +/obj/machinery/door/poddoor/shutters{ + id = "tarkonouter"; + name = "External Bay Shutters" + }, +/turf/open/floor/iron/airless, +/area/ruin/space/has_grav/port_tarkon/storage) +"NY" = ( +/obj/machinery/door/firedoor/solid, +/obj/machinery/door/airlock/engineering/glass{ + name = "P-T Tool Storage" + }, +/turf/open/floor/iron, +/area/ruin/space/has_grav/port_tarkon/toolstorage) +"Oa" = ( +/obj/effect/turf_decal/tile/blue/half{ + dir = 1 + }, +/obj/structure/table, +/obj/item/reagent_containers/cup/beaker/large, +/obj/item/reagent_containers/cup/beaker/large, +/obj/machinery/light/directional/north, +/turf/open/floor/iron, +/area/ruin/space/has_grav/port_tarkon/trauma) +"Ob" = ( +/obj/effect/turf_decal/stripes{ + dir = 1 + }, +/obj/machinery/light/directional/east, +/obj/structure/window/reinforced/spawner/directional/north, +/obj/machinery/power/smes, +/obj/structure/cable, +/turf/open/floor/iron/dark, +/area/ruin/space/has_grav/port_tarkon/atmos) +"Of" = ( +/obj/structure/closet/emcloset, +/obj/effect/turf_decal/tile/neutral/full, +/turf/open/floor/iron, +/area/ruin/space/has_grav/port_tarkon/centerhall) +"Og" = ( +/obj/effect/turf_decal/tile/purple/anticorner{ + dir = 4 + }, +/turf/open/floor/iron/dark, +/area/ruin/space/has_grav/port_tarkon/developement) +"Ol" = ( +/obj/effect/turf_decal/tile/brown/half{ + dir = 1 + }, +/obj/structure/displaycase{ + start_showpiece_type = /obj/item/gun/energy/recharge/resonant_system; + req_access = list("tarkon") + }, +/obj/machinery/camera/tarkon/directional/north, +/turf/open/floor/iron, +/area/ruin/space/has_grav/port_tarkon/mining) +"Om" = ( +/obj/structure/cable, +/turf/open/floor/plating, +/area/ruin/space/has_grav/port_tarkon/observ) +"Op" = ( +/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/blue/half{ + dir = 4 + }, +/obj/structure/disposalpipe/segment, +/turf/open/floor/iron, +/area/ruin/space/has_grav/port_tarkon/forehall) +"Ot" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/cable, +/obj/machinery/door/firedoor/solid, +/obj/machinery/door/airlock/atmos/glass, +/obj/effect/mapping_helpers/airlock/access/all/tarkon/general, +/obj/effect/turf_decal/tile/yellow/half{ + dir = 4 + }, +/obj/structure/disposalpipe/segment, +/turf/open/floor/iron, +/area/ruin/space/has_grav/port_tarkon/atmos) +"Oz" = ( +/obj/structure/cable, +/turf/open/floor/engine, +/area/ruin/space/has_grav/port_tarkon/atmos) +"OA" = ( +/obj/machinery/recharge_station, +/turf/open/floor/plating, +/area/ruin/space/has_grav/port_tarkon/centerhall) +"OC" = ( +/obj/machinery/atmospherics/components/unary/outlet_injector/monitored/plasma_input/tarkon{ + dir = 8 + }, +/turf/open/floor/engine/plasma, +/area/ruin/space/has_grav/port_tarkon/atmos) +"OG" = ( +/obj/effect/turf_decal/vg_decals/atmos/nitrogen, +/obj/machinery/light/small/directional/west, +/obj/machinery/air_sensor/tarkon/nitrogen_tank{ + pixel_x = -26 + }, +/turf/open/floor/engine/n2, +/area/ruin/space/has_grav/port_tarkon/atmos) +"OI" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, +/turf/open/floor/iron, +/area/ruin/space/has_grav/port_tarkon/forehall) +"OM" = ( +/obj/machinery/light_switch/directional/east, +/obj/effect/turf_decal/tile/yellow/anticorner, +/turf/open/floor/iron, +/area/ruin/space/has_grav/port_tarkon/toolstorage) +"OP" = ( +/obj/machinery/airalarm/directional/west, +/obj/effect/mapping_helpers/airalarm/all_access, +/obj/effect/turf_decal/tile/yellow/half{ + dir = 8 + }, +/turf/open/floor/iron, +/area/ruin/space/has_grav/port_tarkon/afthall) +"OQ" = ( +/obj/effect/turf_decal/tile/blue/anticorner{ + dir = 8 + }, +/obj/structure/closet/secure_closet/medical1, +/obj/item/gun/medbeam/afad, +/obj/item/clothing/suit/toggle/labcoat/medical, +/turf/open/floor/iron, +/area/ruin/space/has_grav/port_tarkon/trauma) +"OS" = ( +/mob/living/basic/carp/mega, +/turf/template_noop, +/area/template_noop) +"OU" = ( +/obj/machinery/atmospherics/components/unary/portables_connector/visible{ + dir = 8 + }, +/obj/effect/turf_decal/tile/red/fourcorners{ + color = "#DE3A3A" + }, +/obj/machinery/portable_atmospherics/canister/nitrogen, +/turf/open/floor/iron, +/area/ruin/space/has_grav/port_tarkon/atmos) +"OV" = ( +/turf/closed/wall/r_wall, +/area/ruin/space/has_grav/port_tarkon/secoff) +"OW" = ( +/obj/machinery/light/directional/west, +/obj/effect/turf_decal/tile/purple/half{ + dir = 8 + }, +/turf/open/floor/iron/dark, +/area/ruin/space/has_grav/port_tarkon/developement) +"OZ" = ( +/turf/open/floor/grass/lavaland{ + initial_gas_mix = "o2=22;n2=82;TEMP=293.15" + }, +/area/ruin/space/has_grav/port_tarkon/garden) +"Pa" = ( +/obj/machinery/light/directional/east, +/turf/open/floor/plating, +/area/ruin/space/has_grav/port_tarkon/observ) +"Pb" = ( +/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/neutral/half{ + dir = 4 + }, +/obj/structure/disposalpipe/segment, +/turf/open/floor/iron, +/area/ruin/space/has_grav/port_tarkon/centerhall) +"Pc" = ( +/obj/machinery/firealarm/directional/east, +/obj/effect/turf_decal/tile/purple/half{ + dir = 4 + }, +/turf/open/floor/iron, +/area/ruin/space/has_grav/port_tarkon/porthall) +"Pe" = ( +/obj/machinery/door/window/left/directional/east, +/obj/machinery/door/window/right/directional/west, +/obj/structure/table/reinforced, +/obj/machinery/door/firedoor/solid, +/turf/open/floor/iron, +/area/ruin/space/has_grav/port_tarkon/mining) +"Pf" = ( +/obj/effect/turf_decal/stripes/line, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/machinery/door/airlock/external/glass{ + name = "Turbine Maintenance Door" + }, +/obj/structure/cable, +/turf/open/floor/plating, +/area/ruin/space/has_grav/port_tarkon/atmos) +"Ph" = ( +/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 = 4 + }, +/turf/open/floor/iron, +/area/ruin/space/has_grav/port_tarkon/starboardhall) +"Pj" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 4 + }, +/obj/effect/turf_decal/tile/brown/half, +/turf/open/floor/iron, +/area/ruin/space/has_grav/port_tarkon/storage) +"Pk" = ( +/obj/effect/spawner/structure/window/reinforced/plasma, +/turf/open/floor/plating, +/area/ruin/space/has_grav/port_tarkon/atmos) +"Pl" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/disposalpipe/broken{ + dir = 8 + }, +/obj/machinery/camera/tarkon/directional/south, +/turf/open/floor/plating, +/area/ruin/space/has_grav/port_tarkon/observ) +"Po" = ( +/obj/effect/turf_decal/vg_decals/atmos/carbon_dioxide, +/obj/machinery/light/small/directional/east, +/obj/machinery/air_sensor/tarkon/carbon_tank{ + pixel_x = 26 + }, +/turf/open/floor/engine/co2, +/area/ruin/space/has_grav/port_tarkon/atmos) +"Pq" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/turf_decal/tile/neutral{ + dir = 1 + }, +/turf/open/floor/iron, +/area/ruin/space/has_grav/port_tarkon/centerhall) +"Pt" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/iron/cafeteria, +/area/ruin/space/has_grav/port_tarkon/kitchen) +"Pw" = ( +/obj/machinery/atmospherics/components/binary/pump/off/general{ + dir = 8 + }, +/obj/effect/turf_decal/tile/purple/fourcorners, +/obj/structure/cable, +/turf/open/floor/iron, +/area/ruin/space/has_grav/port_tarkon/atmos) +"Px" = ( +/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 = 4 + }, +/turf/open/floor/iron, +/area/ruin/space/has_grav/port_tarkon/centerhall) +"Py" = ( +/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/neutral{ + dir = 1 + }, +/obj/structure/disposalpipe/segment, +/turf/open/floor/iron, +/area/ruin/space/has_grav/port_tarkon/centerhall) +"Pz" = ( +/obj/machinery/door/poddoor/shutters{ + id = "tarkonouter"; + name = "External Bay Shutters" + }, +/obj/effect/turf_decal/trimline/yellow/filled/warning, +/obj/effect/turf_decal/trimline/yellow/filled/warning{ + dir = 8 + }, +/turf/open/floor/iron/airless, +/area/ruin/space/has_grav/port_tarkon/storage) +"PA" = ( +/obj/effect/turf_decal/tile/brown{ + dir = 4 + }, +/turf/open/floor/iron, +/area/ruin/space/has_grav/port_tarkon/mining) +"PD" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/disposalpipe/junction{ + dir = 8 + }, +/turf/open/floor/iron, +/area/ruin/space/has_grav/port_tarkon/centerhall) +"PG" = ( +/obj/machinery/light_switch/directional/north, +/obj/effect/turf_decal/tile/red/real_red/half{ + dir = 1 + }, +/turf/open/floor/iron, +/area/ruin/space/has_grav/port_tarkon/starboardhall) +"PK" = ( +/obj/effect/spawner/structure/window, +/turf/open/floor/plating, +/area/ruin/space/has_grav/port_tarkon/developement) +"PL" = ( +/obj/effect/mob_spawn/ghost_role/human/tarkon/engi, +/obj/effect/turf_decal/tile/yellow/anticorner{ + dir = 4 + }, +/obj/machinery/camera/tarkon/directional/north, +/turf/open/floor/iron, +/area/ruin/space/has_grav/port_tarkon/atmos) +"PW" = ( +/obj/effect/turf_decal/tile/yellow/anticorner, +/turf/open/floor/iron, +/area/ruin/space/has_grav/port_tarkon/atmos) +"Qa" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron/dark, +/area/ruin/space/has_grav/port_tarkon/developement) +"Qb" = ( +/obj/effect/turf_decal/tile/purple/half, +/obj/structure/table/optable, +/turf/open/floor/iron/dark, +/area/ruin/space/has_grav/port_tarkon/developement) +"Qc" = ( +/obj/structure/table/reinforced, +/obj/item/folder/blue, +/obj/item/folder, +/obj/effect/turf_decal/tile/brown/half{ + dir = 8 + }, +/turf/open/floor/iron, +/area/ruin/space/has_grav/port_tarkon/cargo) +"Qi" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 4 + }, +/turf/open/floor/iron, +/area/ruin/space/has_grav/port_tarkon/power1) +"Qm" = ( +/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/blue/half{ + dir = 1 + }, +/obj/machinery/door/firedoor/solid, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/iron, +/area/ruin/space/has_grav/port_tarkon/comms) +"Qo" = ( +/obj/effect/turf_decal/trimline/yellow/filled/warning{ + dir = 8 + }, +/obj/machinery/camera/tarkon/directional/west, +/turf/open/floor/iron/airless, +/area/ruin/space/has_grav/port_tarkon/storage) +"Qq" = ( +/obj/machinery/firealarm/directional/west, +/obj/effect/turf_decal/tile/brown/half{ + dir = 8 + }, +/obj/machinery/suit_storage_unit/industrial/hauler, +/turf/open/floor/iron, +/area/ruin/space/has_grav/port_tarkon/cargo) +"Qx" = ( +/obj/effect/turf_decal/tile/blue{ + dir = 4 + }, +/turf/open/floor/iron, +/area/ruin/space/has_grav/port_tarkon/trauma) +"Qy" = ( +/obj/structure/alien/weeds/node, +/turf/open/floor/iron, +/area/ruin/space/has_grav/port_tarkon/forehall) +"QE" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/light_switch/directional/south, +/obj/effect/turf_decal/tile/yellow/anticorner, +/obj/structure/disposalpipe/segment{ + dir = 5 + }, +/turf/open/floor/iron, +/area/ruin/space/has_grav/port_tarkon/toolstorage) +"QF" = ( +/obj/machinery/door/airlock/public/glass{ + name = "Fore Primary Hallway" + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/door/firedoor/solid, +/obj/structure/cable, +/obj/effect/turf_decal/tile/blue/half{ + dir = 4 + }, +/obj/structure/disposalpipe/segment, +/turf/open/floor/iron, +/area/ruin/space/has_grav/port_tarkon/forehall) +"QG" = ( +/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{ + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 9 + }, +/turf/open/floor/iron, +/area/ruin/space/has_grav/port_tarkon/starboardhall) +"QH" = ( +/obj/effect/turf_decal/tile/brown/half, +/turf/open/floor/iron, +/area/ruin/space/has_grav/port_tarkon/starboardhall) +"QK" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/disposalpipe/segment{ + dir = 5 + }, +/turf/open/misc/asteroid/airless, +/area/ruin/space/has_grav/outdoors) +"QL" = ( +/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/tile/neutral/half{ + dir = 1 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/iron, +/area/ruin/space/has_grav/port_tarkon/centerhall) +"QM" = ( +/obj/structure/closet, +/obj/item/storage/backpack/satchel/explorer, +/obj/item/clothing/shoes/workboots/mining, +/obj/item/t_scanner/adv_mining_scanner/lesser, +/obj/item/storage/bag/ore, +/obj/effect/turf_decal/tile/brown/half, +/turf/open/floor/iron, +/area/ruin/space/has_grav/port_tarkon/mining) +"QO" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/light/directional/north, +/obj/effect/turf_decal/tile/brown/half{ + dir = 1 + }, +/turf/open/floor/iron, +/area/ruin/space/has_grav/port_tarkon/storage) +"QP" = ( +/obj/machinery/cryopod{ + dir = 1 + }, +/turf/open/floor/iron, +/area/ruin/space/has_grav/port_tarkon) +"QS" = ( +/turf/open/floor/plating, +/area/ruin/space/has_grav/port_tarkon/observ) +"QV" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/turf_decal/tile/yellow/half, +/turf/open/floor/iron, +/area/ruin/space/has_grav/port_tarkon/atmos) +"QZ" = ( +/obj/structure/table/reinforced, +/obj/item/reagent_containers/condiment/enzyme, +/obj/item/reagent_containers/condiment/sugar, +/turf/open/floor/iron/cafeteria, +/area/ruin/space/has_grav/port_tarkon/kitchen) +"Re" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/light/small/directional/south, +/obj/structure/cable, +/turf/open/floor/iron, +/area/ruin/space/has_grav/port_tarkon/forehall) +"Ri" = ( +/obj/machinery/chem_master, +/obj/effect/turf_decal/tile/blue/half{ + dir = 1 + }, +/turf/open/floor/iron, +/area/ruin/space/has_grav/port_tarkon/trauma) +"Rp" = ( +/obj/machinery/light/directional/east, +/obj/effect/turf_decal/tile/brown/half{ + dir = 4 + }, +/turf/open/floor/iron, +/area/ruin/space/has_grav/port_tarkon/storage) +"Rs" = ( +/obj/machinery/door/window/left/directional/north, +/obj/machinery/door/window/left/directional/south, +/obj/structure/table/reinforced, +/turf/open/floor/iron, +/area/ruin/space/has_grav/port_tarkon/cargo) +"Rv" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 1 + }, +/turf/open/floor/iron/dark, +/area/ruin/space/has_grav/port_tarkon/comms) +"Rx" = ( +/obj/structure/table/reinforced, +/obj/effect/turf_decal/tile/blue/half, +/obj/item/reagent_containers/cup/glass/coffee/no_lid, +/turf/open/floor/iron/dark, +/area/ruin/space/has_grav/port_tarkon/comms) +"RA" = ( +/obj/machinery/computer/turbine_computer{ + dir = 1; + mapping_id = "tarkon_turbine" + }, +/obj/structure/cable, +/obj/machinery/light/directional/south, +/turf/open/floor/engine, +/area/ruin/space/has_grav/port_tarkon/atmos) +"RC" = ( +/turf/open/floor/iron, +/area/ruin/space/has_grav/port_tarkon/afthall) +"RE" = ( +/obj/structure/alien/resin/membrane, +/turf/open/misc/asteroid/airless, +/area/ruin/space/has_grav/outdoors) +"RF" = ( +/obj/effect/turf_decal/tile/purple{ + dir = 4 + }, +/turf/open/floor/iron, +/area/ruin/space/has_grav/port_tarkon/porthall) +"RG" = ( +/obj/effect/spawner/structure/window/reinforced, +/obj/machinery/door/poddoor/shutters{ + id = "ptcell1" + }, +/turf/open/floor/plating, +/area/ruin/space/has_grav/port_tarkon/secoff) +"RJ" = ( +/obj/effect/turf_decal/tile/neutral/half, +/turf/open/floor/iron, +/area/ruin/space/has_grav/port_tarkon/centerhall) +"RL" = ( +/obj/machinery/atmospherics/components/unary/portables_connector/visible{ + dir = 8 + }, +/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/machinery/portable_atmospherics/canister, +/turf/open/floor/iron, +/area/ruin/space/has_grav/port_tarkon/atmos) +"RS" = ( +/turf/closed/wall/r_wall, +/area/ruin/space/has_grav/port_tarkon/centerhall) +"RV" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 4 + }, +/turf/open/floor/iron, +/area/ruin/space/has_grav/port_tarkon/afthall) +"RW" = ( +/obj/effect/turf_decal/stripes/asteroid/corner{ + dir = 4 + }, +/turf/open/misc/asteroid/airless, +/area/solars/tarkon) +"RY" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/iron/dark, +/area/ruin/space/has_grav/port_tarkon/comms) +"RZ" = ( +/obj/machinery/firealarm/directional/north, +/turf/open/floor/iron, +/area/ruin/space/has_grav/port_tarkon/forehall) +"Se" = ( +/obj/structure/bed/maint, +/obj/machinery/camera/tarkon/directional/east, +/turf/open/floor/iron, +/area/ruin/space/has_grav/port_tarkon/secoff) +"Sg" = ( +/obj/structure/table/reinforced, +/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 = 5 + }, +/turf/open/floor/iron, +/area/ruin/space/has_grav/port_tarkon/centerhall) +"Sl" = ( +/obj/structure/spawner/tarkon_xenos, +/turf/open/misc/asteroid/airless, +/area/ruin/space/has_grav/outdoors) +"Sm" = ( +/obj/structure/fluff/metalpole, +/turf/template_noop, +/area/template_noop) +"Sn" = ( +/turf/closed/wall/r_wall, +/area/ruin/space/has_grav/port_tarkon/atmos) +"Sq" = ( +/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/ruin/space/has_grav/port_tarkon/forehall) +"Su" = ( +/obj/machinery/light/directional/west, +/obj/effect/turf_decal/tile/purple/half{ + dir = 8 + }, +/obj/machinery/rnd/destructive_analyzer, +/turf/open/floor/iron/dark, +/area/ruin/space/has_grav/port_tarkon/developement) +"Sw" = ( +/obj/structure/cable, +/obj/machinery/firealarm/directional/east, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/turf_decal/tile/blue/half{ + dir = 4 + }, +/obj/structure/disposalpipe/segment, +/turf/open/floor/iron, +/area/ruin/space/has_grav/port_tarkon/afthall) +"Sx" = ( +/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{ + dir = 1 + }, +/turf/open/floor/iron, +/area/ruin/space/has_grav/port_tarkon/storage) +"Sy" = ( +/obj/item/stack/spacecash/c100, +/obj/item/stack/spacecash/c100{ + pixel_x = 4; + pixel_y = 7 + }, +/obj/item/stack/spacecash/c100{ + pixel_x = 4; + pixel_y = -8 + }, +/obj/item/stack/spacecash/c20{ + pixel_x = -4; + pixel_y = 3 + }, +/obj/item/stack/spacecash/c20{ + pixel_y = 10 + }, +/obj/item/stack/spacecash/c20{ + pixel_x = 5 + }, +/obj/item/stack/spacecash/c10{ + pixel_x = -4; + pixel_y = -5 + }, +/obj/item/stack/spacecash/c10{ + pixel_x = -6; + pixel_y = 12 + }, +/obj/item/stack/spacecash/c10{ + pixel_x = 4; + pixel_y = 4 + }, +/obj/item/mod/module/visor/rave, +/turf/open/floor/plating, +/area/ruin/space/has_grav/port_tarkon/cargo) +"Sz" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron/cafeteria, +/area/ruin/space/has_grav/port_tarkon/kitchen) +"SA" = ( +/obj/machinery/airalarm/directional/north, +/obj/effect/turf_decal/tile/brown/anticorner{ + dir = 1 + }, +/turf/open/floor/iron, +/area/ruin/space/has_grav/port_tarkon/starboardhall) +"SD" = ( +/obj/structure/cable, +/obj/machinery/power/terminal{ + dir = 4 + }, +/obj/effect/turf_decal/tile/yellow/half{ + dir = 8 + }, +/obj/structure/window/reinforced/spawner/directional/south, +/turf/open/floor/iron, +/area/ruin/space/has_grav/port_tarkon/power1) +"SM" = ( +/obj/machinery/door/airlock/maintenance_hatch, +/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/ruin/space/has_grav/port_tarkon/centerhall) +"SN" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 1 + }, +/turf/open/floor/iron, +/area/ruin/space/has_grav/port_tarkon/power1) +"SR" = ( +/obj/effect/turf_decal/tile/brown/half, +/turf/open/floor/iron, +/area/ruin/space/has_grav/port_tarkon/cargo) +"SW" = ( +/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 = 5 + }, +/turf/open/floor/iron/dark, +/area/ruin/space/has_grav/port_tarkon/developement) +"SZ" = ( +/turf/closed/wall/r_wall, +/area/ruin/space/has_grav/port_tarkon/storage) +"Tc" = ( +/obj/structure/rack, +/obj/item/clothing/suit/armor/vest, +/obj/item/clothing/suit/armor/vest, +/obj/machinery/airalarm/directional/north, +/obj/item/clothing/suit/armor/vest, +/obj/effect/turf_decal/tile/red/real_red/half{ + dir = 1 + }, +/turf/open/floor/iron, +/area/ruin/space/has_grav/port_tarkon/secoff) +"Td" = ( +/obj/structure/window/reinforced/tinted/spawner/directional/north, +/obj/machinery/door/window/left/directional/east{ + opacity = 1 + }, +/obj/machinery/shower/directional/east, +/turf/open/floor/iron/white, +/area/ruin/space/has_grav/port_tarkon/centerhall) +"Tg" = ( +/obj/machinery/door/airlock/public/glass{ + name = "Starboard Primary Hallway" + }, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/door/firedoor/solid, +/obj/effect/turf_decal/tile/brown/half, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/iron, +/area/ruin/space/has_grav/port_tarkon/starboardhall) +"Ti" = ( +/obj/machinery/door/airlock/mining/glass, +/obj/effect/turf_decal/sand, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/door/firedoor/solid, +/obj/effect/mapping_helpers/airlock/cyclelink_helper, +/obj/effect/mapping_helpers/airlock/access/all/tarkon/general, +/turf/open/floor/iron, +/area/ruin/space/has_grav/port_tarkon/mining) +"Tj" = ( +/obj/effect/turf_decal/sand, +/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/ruin/space/has_grav/port_tarkon/mining) +"Tk" = ( +/obj/machinery/firealarm/directional/west, +/obj/effect/turf_decal/tile/purple/half{ + dir = 8 + }, +/turf/open/floor/iron/dark, +/area/ruin/space/has_grav/port_tarkon/developement) +"Tl" = ( +/obj/machinery/atmospherics/miner/n2o, +/turf/open/floor/engine/n2o, +/area/ruin/space/has_grav/port_tarkon/atmos) +"Tm" = ( +/obj/structure/closet, +/obj/item/clothing/under/tarkon, +/obj/item/clothing/under/tarkon, +/obj/item/clothing/under/tarkon, +/obj/item/clothing/under/tarkon, +/obj/item/clothing/under/tarkon, +/obj/item/clothing/under/tarkon, +/obj/item/storage/backpack/messenger/hyd, +/obj/item/storage/backpack/duffelbag/hydroponics, +/obj/item/storage/backpack/satchel, +/obj/item/storage/backpack/satchel/hyd, +/obj/item/storage/backpack/satchel/leather/withwallet, +/obj/item/storage/backpack, +/obj/item/clothing/head/utility/welding/hat, +/obj/item/clothing/head/utility/welding/hat, +/turf/open/floor/iron, +/area/ruin/space/has_grav/port_tarkon) +"Tn" = ( +/obj/structure/cable, +/turf/open/floor/plating, +/area/ruin/space/has_grav/port_tarkon/power1) +"Tt" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 1 + }, +/obj/effect/turf_decal/tile/brown/half, +/turf/open/floor/iron, +/area/ruin/space/has_grav/port_tarkon/starboardhall) +"Tv" = ( +/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/tile/neutral/half{ + dir = 1 + }, +/turf/open/floor/iron, +/area/ruin/space/has_grav/port_tarkon/centerhall) +"Tw" = ( +/obj/effect/turf_decal/tile/purple/half, +/obj/machinery/disposal/bin, +/obj/structure/disposalpipe/trunk{ + dir = 8 + }, +/turf/open/floor/iron/dark, +/area/ruin/space/has_grav/port_tarkon/developement) +"Tx" = ( +/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/tile/yellow, +/obj/structure/disposalpipe/junction/yjunction, +/turf/open/floor/iron, +/area/ruin/space/has_grav/port_tarkon/porthall) +"Tz" = ( +/obj/effect/spawner/random/vending/snackvend, +/turf/open/floor/iron, +/area/ruin/space/has_grav/port_tarkon/afthall) +"TD" = ( +/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/tile/yellow/half, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/iron, +/area/ruin/space/has_grav/port_tarkon/porthall) +"TE" = ( +/obj/machinery/airalarm/directional/north, +/obj/effect/mapping_helpers/airalarm/all_access, +/obj/effect/turf_decal/tile/purple/half{ + dir = 1 + }, +/turf/open/floor/iron, +/area/ruin/space/has_grav/port_tarkon/porthall) +"TF" = ( +/obj/machinery/cell_charger, +/obj/machinery/light/directional/east, +/obj/effect/turf_decal/tile/purple/half{ + dir = 4 + }, +/obj/structure/table/reinforced, +/turf/open/floor/iron/dark, +/area/ruin/space/has_grav/port_tarkon/developement) +"TG" = ( +/obj/effect/turf_decal/stripes/asteroid/line{ + dir = 5 + }, +/turf/open/misc/asteroid/airless, +/area/solars/tarkon) +"TO" = ( +/obj/machinery/airalarm/directional/north, +/obj/effect/mapping_helpers/airalarm/all_access, +/turf/open/floor/iron, +/area/ruin/space/has_grav/port_tarkon/porthall) +"TP" = ( +/obj/effect/turf_decal/tile/yellow, +/turf/open/floor/iron, +/area/ruin/space/has_grav/port_tarkon/toolstorage) +"TQ" = ( +/obj/effect/turf_decal/tile/brown/half{ + dir = 4 + }, +/turf/open/floor/iron, +/area/ruin/space/has_grav/port_tarkon/storage) +"TT" = ( +/obj/effect/turf_decal/caution/stand_clear, +/turf/open/floor/iron/airless, +/area/ruin/space/has_grav/port_tarkon/storage) +"TV" = ( +/obj/machinery/light/warm/directional/north, +/turf/open/floor/iron, +/area/ruin/space/has_grav/port_tarkon) +"TX" = ( +/obj/machinery/power/port_gen/pacman/super{ + name = "\improper emergency power generator"; + time_per_sheet = 40 + }, +/obj/effect/turf_decal/tile/yellow/half{ + dir = 1 + }, +/turf/open/floor/plating, +/area/ruin/space/has_grav/port_tarkon/atmos) +"TZ" = ( +/turf/open/floor/iron/dark, +/area/ruin/space/has_grav/port_tarkon/comms) +"Uc" = ( +/obj/machinery/space_heater, +/turf/open/floor/plating, +/area/ruin/space/has_grav/port_tarkon/afthall) +"Uf" = ( +/obj/effect/turf_decal/tile/neutral/half{ + dir = 1 + }, +/turf/open/floor/iron, +/area/ruin/space/has_grav/port_tarkon/centerhall) +"Uj" = ( +/obj/structure/alien/resin/wall, +/turf/open/floor/iron, +/area/ruin/space/has_grav/port_tarkon/forehall) +"Uk" = ( +/obj/machinery/modular_computer/console{ + dir = 1 + }, +/obj/effect/turf_decal/tile/blue/anticorner{ + dir = 8 + }, +/turf/open/floor/iron/dark, +/area/ruin/space/has_grav/port_tarkon/comms) +"Um" = ( +/obj/structure/table/reinforced, +/obj/structure/window/reinforced/spawner/directional/west, +/obj/item/knife/combat/survival, +/obj/item/tape/ruins/tarkon, +/obj/effect/turf_decal/tile/red/real_red/anticorner{ + dir = 4 + }, +/obj/machinery/camera/tarkon/directional/north, +/turf/open/floor/iron, +/area/ruin/space/has_grav/port_tarkon/secoff) +"Uo" = ( +/obj/effect/spawner/structure/window/reinforced/plasma, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden, +/turf/open/floor/plating, +/area/ruin/space/has_grav/port_tarkon/atmos) +"Up" = ( +/turf/open/floor/iron, +/area/ruin/space/has_grav/port_tarkon) +"Ur" = ( +/obj/structure/closet, +/obj/item/storage/backpack/duffelbag/captain, +/obj/item/storage/backpack/messenger/cap, +/obj/item/storage/backpack/satchel/cap, +/obj/item/clothing/under/tarkon/com, +/obj/item/clothing/under/tarkon/com, +/obj/item/clothing/under/tarkon/com, +/obj/item/clothing/under/tarkon/com, +/obj/item/clothing/under/tarkon/com, +/obj/item/clothing/under/tarkon/com, +/obj/item/clothing/head/utility/welding/hat, +/obj/item/clothing/head/utility/welding/hat, +/turf/open/floor/iron, +/area/ruin/space/has_grav/port_tarkon) +"Ut" = ( +/obj/structure/closet/secure_closet/freezer/meat/open, +/turf/open/floor/iron/freezer, +/area/ruin/space/has_grav/port_tarkon/kitchen) +"Uu" = ( +/obj/structure/sign/warning/vacuum, +/turf/closed/wall/r_wall, +/area/ruin/space/has_grav/port_tarkon/mining) +"UD" = ( +/obj/machinery/ammo_workbench/unlocked, +/obj/effect/turf_decal/tile/red/real_red/half{ + dir = 1 + }, +/turf/open/floor/iron, +/area/ruin/space/has_grav/port_tarkon/secoff) +"UH" = ( +/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/neutral, +/obj/structure/disposalpipe/junction/flip, +/turf/open/floor/iron, +/area/ruin/space/has_grav/port_tarkon/centerhall) +"UI" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron, +/area/ruin/space/has_grav/port_tarkon/mining) +"UN" = ( +/obj/machinery/light/small/directional/east, +/obj/machinery/oven/range, +/turf/open/floor/iron/cafeteria, +/area/ruin/space/has_grav/port_tarkon/kitchen) +"UO" = ( +/obj/structure/filingcabinet, +/obj/effect/turf_decal/tile/red/real_red/half{ + dir = 1 + }, +/turf/open/floor/iron, +/area/ruin/space/has_grav/port_tarkon/secoff) +"UP" = ( +/obj/machinery/firealarm/directional/east, +/turf/open/floor/iron, +/area/ruin/space/has_grav/port_tarkon/starboardhall) +"Va" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron, +/area/ruin/space/has_grav/port_tarkon/secoff) +"Vb" = ( +/obj/machinery/cryopod{ + dir = 4 + }, +/turf/open/floor/iron, +/area/ruin/space/has_grav/port_tarkon) +"Vc" = ( +/obj/machinery/door/airlock/public/glass{ + name = "Cryogenics Room" + }, +/obj/machinery/door/firedoor/solid, +/turf/open/floor/iron, +/area/ruin/space/has_grav/port_tarkon) +"Vh" = ( +/obj/machinery/atmospherics/components/unary/portables_connector/visible{ + dir = 4 + }, +/obj/effect/turf_decal/tile/yellow/fourcorners, +/obj/machinery/portable_atmospherics/canister/nitrous_oxide, +/turf/open/floor/iron, +/area/ruin/space/has_grav/port_tarkon/atmos) +"Vi" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron/dark, +/area/ruin/space/has_grav/port_tarkon/comms) +"Vj" = ( +/obj/machinery/computer/cryopod/tarkon/directional/north, +/turf/open/floor/iron, +/area/ruin/space/has_grav/port_tarkon) +"Vl" = ( +/obj/machinery/light_switch/directional/south, +/obj/effect/turf_decal/tile/neutral/half, +/turf/open/floor/iron, +/area/ruin/space/has_grav/port_tarkon/centerhall) +"Vo" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/light/directional/north, +/obj/machinery/power/apc/auto_name/directional/north, +/obj/effect/mapping_helpers/apc/full_charge, +/obj/effect/mapping_helpers/apc/unlocked, +/obj/effect/turf_decal/tile/yellow/half{ + dir = 1 + }, +/obj/effect/mapping_helpers/apc/cell_10k, +/turf/open/floor/iron, +/area/ruin/space/has_grav/port_tarkon/power1) +"Vs" = ( +/obj/machinery/light/directional/north, +/obj/item/crowbar, +/obj/effect/turf_decal/tile/yellow/half{ + dir = 1 + }, +/obj/structure/noticeboard/directional/north, +/obj/item/paper/fluff/ruins/oldstation/generator_manual, +/obj/item/paper/fluff/ruins/tarkon, +/turf/open/floor/iron, +/area/ruin/space/has_grav/port_tarkon/atmos) +"Vv" = ( +/obj/item/wrench, +/turf/open/floor/plating, +/area/ruin/space/has_grav/port_tarkon/atmos) +"Vw" = ( +/obj/machinery/door/airlock/public/glass{ + name = "Crew Storage" + }, +/obj/machinery/door/firedoor/solid, +/turf/open/floor/iron, +/area/ruin/space/has_grav/port_tarkon) +"VA" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, +/turf/open/floor/plating, +/area/ruin/space/has_grav/port_tarkon/observ) +"VB" = ( +/obj/effect/spawner/structure/window/reinforced, +/turf/open/floor/plating, +/area/ruin/space/has_grav/port_tarkon/starboardhall) +"VC" = ( +/obj/machinery/light/directional/west, +/obj/structure/table/reinforced, +/obj/item/clothing/gloves/color/yellow, +/obj/effect/turf_decal/tile/yellow/half{ + dir = 8 + }, +/turf/open/floor/iron, +/area/ruin/space/has_grav/port_tarkon/toolstorage) +"VE" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/high_volume/siphon/monitored/air_output/tarkon{ + dir = 4 + }, +/turf/open/floor/engine/vacuum, +/area/ruin/space/has_grav/port_tarkon/atmos) +"VH" = ( +/obj/machinery/atmospherics/components/unary/portables_connector/visible{ + dir = 8 + }, +/obj/effect/turf_decal/tile/blue/fourcorners, +/obj/machinery/portable_atmospherics/canister/oxygen, +/turf/open/floor/iron, +/area/ruin/space/has_grav/port_tarkon/atmos) +"VJ" = ( +/obj/structure/sign/warning/docking, +/turf/closed/wall/r_wall, +/area/ruin/space/has_grav/port_tarkon/storage) +"VK" = ( +/turf/open/floor/iron, +/area/ruin/space/has_grav/port_tarkon/storage) +"VN" = ( +/obj/structure/table, +/obj/effect/turf_decal/tile/yellow/half, +/obj/item/multitool, +/obj/item/storage/belt/utility/full, +/turf/open/floor/iron, +/area/ruin/space/has_grav/port_tarkon/power1) +"VO" = ( +/turf/open/floor/engine/vacuum, +/area/ruin/space/has_grav/port_tarkon/atmos) +"VQ" = ( +/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/neutral/anticorner, +/obj/structure/disposalpipe/segment{ + dir = 9 + }, +/turf/open/floor/iron, +/area/ruin/space/has_grav/port_tarkon/centerhall) +"VR" = ( +/obj/machinery/airalarm/directional/north, +/obj/effect/turf_decal/tile/yellow/half{ + dir = 1 + }, +/obj/structure/closet/firecloset, +/obj/effect/mapping_helpers/airalarm/all_access, +/turf/open/floor/iron, +/area/ruin/space/has_grav/port_tarkon/toolstorage) +"VU" = ( +/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/tile/neutral{ + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 5 + }, +/turf/open/floor/iron, +/area/ruin/space/has_grav/port_tarkon/centerhall) +"VV" = ( +/obj/machinery/hydroponics/constructable, +/turf/open/floor/grass, +/area/ruin/space/has_grav/port_tarkon/garden) +"VY" = ( +/obj/structure/cable, +/obj/machinery/light/directional/north, +/obj/effect/turf_decal/tile/yellow/half{ + dir = 1 + }, +/turf/open/floor/iron, +/area/ruin/space/has_grav/port_tarkon/power1) +"VZ" = ( +/turf/open/floor/iron/freezer, +/area/ruin/space/has_grav/port_tarkon/kitchen) +"Wa" = ( +/obj/effect/turf_decal/tile/brown/half{ + dir = 4 + }, +/obj/machinery/camera/tarkon/directional/east, +/turf/open/floor/iron, +/area/ruin/space/has_grav/port_tarkon/mining) +"Wd" = ( +/obj/effect/turf_decal/tile/blue/half, +/obj/machinery/light/directional/south, +/obj/structure/closet/secure_closet/medical1, +/obj/item/circuitboard/machine/sleeper, +/obj/item/clothing/suit/toggle/labcoat/medical, +/turf/open/floor/iron, +/area/ruin/space/has_grav/port_tarkon/trauma) +"We" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/cable, +/obj/machinery/light_switch/directional/south, +/obj/effect/turf_decal/tile/yellow/half, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/iron, +/area/ruin/space/has_grav/port_tarkon/porthall) +"Wi" = ( +/obj/structure/chair/office, +/obj/effect/turf_decal/tile/blue{ + dir = 8 + }, +/obj/effect/mob_spawn/ghost_role/human/tarkon/ensign, +/turf/open/floor/iron/dark, +/area/ruin/space/has_grav/port_tarkon/comms) +"Wj" = ( +/turf/closed/wall/r_wall, +/area/ruin/space/has_grav/port_tarkon/mining) +"Wk" = ( +/turf/open/floor/iron, +/area/ruin/space/has_grav/port_tarkon/secoff) +"Wr" = ( +/obj/structure/reagent_dispensers/watertank, +/turf/open/floor/plating, +/area/ruin/space/has_grav/port_tarkon/afthall) +"Ws" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 4 + }, +/turf/open/floor/iron/dark, +/area/ruin/space/has_grav/port_tarkon/developement) +"Wt" = ( +/obj/machinery/door/airlock/public/glass{ + name = "Kitchen" + }, +/obj/machinery/door/firedoor/solid, +/turf/open/floor/iron, +/area/ruin/space/has_grav/port_tarkon/kitchen) +"Wx" = ( +/obj/machinery/light/directional/north, +/obj/effect/turf_decal/tile/purple/half{ + dir = 1 + }, +/obj/structure/table/reinforced, +/obj/machinery/reagentgrinder/constructed, +/turf/open/floor/iron/dark, +/area/ruin/space/has_grav/port_tarkon/developement) +"Wy" = ( +/obj/machinery/light/directional/west, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 4 + }, +/obj/effect/turf_decal/tile/brown/half{ + dir = 8 + }, +/turf/open/floor/iron, +/area/ruin/space/has_grav/port_tarkon/mining) +"WA" = ( +/obj/machinery/button/ignition/incinerator/tarkon, +/turf/closed/wall/r_wall, +/area/ruin/space/has_grav/port_tarkon/atmos) +"WC" = ( +/obj/structure/cable, +/obj/machinery/power/apc/auto_name/directional/west, +/obj/effect/mapping_helpers/apc/full_charge, +/obj/effect/mapping_helpers/apc/unlocked, +/obj/machinery/light/directional/west, +/obj/effect/turf_decal/tile/brown/half{ + dir = 8 + }, +/turf/open/floor/iron, +/area/ruin/space/has_grav/port_tarkon/mining) +"WG" = ( +/obj/structure/mirror/directional/west, +/obj/structure/sink/directional/east, +/turf/open/floor/iron/white, +/area/ruin/space/has_grav/port_tarkon/centerhall) +"WI" = ( +/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/yellow/half{ + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 5 + }, +/turf/open/floor/iron, +/area/ruin/space/has_grav/port_tarkon/power1) +"WL" = ( +/obj/structure/rack, +/obj/item/clothing/head/helmet, +/obj/item/clothing/head/helmet, +/obj/item/clothing/head/helmet, +/obj/effect/turf_decal/tile/red/real_red/half{ + dir = 1 + }, +/turf/open/floor/iron, +/area/ruin/space/has_grav/port_tarkon/secoff) +"WS" = ( +/obj/structure/sign/warning/deathsposal, +/turf/closed/wall, +/area/ruin/space/has_grav/port_tarkon/power1) +"WT" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/siphon/monitored/plasma_output/tarkon{ + dir = 8 + }, +/turf/open/floor/engine/plasma, +/area/ruin/space/has_grav/port_tarkon/atmos) +"WX" = ( +/turf/open/floor/plating, +/area/ruin/space/has_grav/port_tarkon/afthall) +"Xa" = ( +/obj/machinery/firealarm/directional/south{ + pixel_y = -31 + }, +/obj/machinery/camera/tarkon/directional/south, +/turf/open/floor/grass, +/area/ruin/space/has_grav/port_tarkon/garden) +"Xf" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/light/directional/east, +/obj/structure/disposalpipe/segment, +/turf/open/floor/iron, +/area/ruin/space/has_grav/port_tarkon/starboardhall) +"Xi" = ( +/obj/structure/closet/crate/bin{ + pixel_y = 8 + }, +/obj/effect/spawner/random/entertainment/cigarette_pack, +/obj/item/reagent_containers/cup/rag, +/turf/open/floor/iron/white, +/area/ruin/space/has_grav/port_tarkon/centerhall) +"Xo" = ( +/obj/effect/turf_decal/tile/yellow/full, +/obj/structure/rack/shelf, +/obj/effect/spawner/random/engineering/tool, +/obj/effect/spawner/random/engineering/tool, +/turf/open/floor/iron, +/area/ruin/space/has_grav/port_tarkon/toolstorage) +"Xr" = ( +/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{ + dir = 1 + }, +/turf/open/floor/iron, +/area/ruin/space/has_grav/port_tarkon/storage) +"Xs" = ( +/turf/open/floor/wood/large, +/area/ruin/space/has_grav/port_tarkon/dorms) +"Xu" = ( +/obj/machinery/door/airlock/public/glass{ + name = "Port Primary Hallway" + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/door/firedoor/solid, +/obj/structure/cable, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/iron, +/area/ruin/space/has_grav/port_tarkon/porthall) +"XE" = ( +/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{ + dir = 4 + }, +/obj/structure/disposalpipe/junction{ + dir = 1 + }, +/turf/open/floor/iron, +/area/ruin/space/has_grav/port_tarkon/starboardhall) +"XH" = ( +/obj/machinery/light/directional/west, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/disposalpipe/segment, +/turf/open/floor/iron, +/area/ruin/space/has_grav/port_tarkon/porthall) +"XJ" = ( +/obj/effect/turf_decal/tile/blue/half, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 1 + }, +/obj/machinery/light/directional/south, +/obj/machinery/iv_drip, +/obj/structure/closet/crate/freezer/blood, +/turf/open/floor/iron, +/area/ruin/space/has_grav/port_tarkon/trauma) +"XL" = ( +/obj/effect/spawner/structure/window/reinforced/no_firelock, +/obj/machinery/atmospherics/pipe/layer_manifold/green/hidden{ + dir = 4 + }, +/turf/open/floor/plating, +/area/ruin/space/has_grav/port_tarkon/atmos) +"XN" = ( +/obj/effect/turf_decal/tile/purple/half{ + dir = 4 + }, +/obj/machinery/camera/tarkon/directional/east, +/turf/open/floor/iron, +/area/ruin/space/has_grav/port_tarkon/porthall) +"XO" = ( +/obj/structure/cable, +/obj/effect/turf_decal/tile/blue/half{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/disposalpipe/segment{ + dir = 9 + }, +/turf/open/floor/iron, +/area/ruin/space/has_grav/port_tarkon/trauma) +"XW" = ( +/obj/structure/sink/kitchen/directional/south, +/turf/open/floor/iron/cafeteria, +/area/ruin/space/has_grav/port_tarkon/kitchen) +"XX" = ( +/obj/structure/disposalpipe/trunk, +/obj/structure/disposaloutlet{ + dir = 8 + }, +/turf/open/misc/asteroid/airless, +/area/ruin/space/has_grav/outdoors) +"Yc" = ( +/obj/effect/spawner/structure/window/reinforced/no_firelock, +/obj/machinery/atmospherics/pipe/layer_manifold/brown/hidden{ + dir = 4 + }, +/turf/open/floor/plating, +/area/ruin/space/has_grav/port_tarkon/atmos) +"Ye" = ( +/obj/machinery/griddle, +/turf/open/floor/iron/cafeteria, +/area/ruin/space/has_grav/port_tarkon/kitchen) +"Yj" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron, +/area/ruin/space/has_grav/port_tarkon/trauma) +"Yk" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, +/obj/effect/turf_decal/tile/neutral{ + dir = 4 + }, +/turf/open/floor/iron, +/area/ruin/space/has_grav/port_tarkon/centerhall) +"Yl" = ( +/obj/structure/table/reinforced, +/obj/item/storage/fancy/coffee_condi_display{ + pixel_x = 6 + }, +/obj/item/storage/fancy/coffee_cart_rack{ + pixel_x = -9; + pixel_y = -3 + }, +/turf/open/floor/iron, +/area/ruin/space/has_grav/port_tarkon/centerhall) +"Yn" = ( +/obj/structure/alien/resin/membrane, +/turf/open/floor/plating, +/area/ruin/space/has_grav/port_tarkon/observ) +"Yr" = ( +/turf/closed/wall, +/area/ruin/space/has_grav/port_tarkon/developement) +"Ys" = ( +/obj/machinery/door/firedoor/solid, +/obj/machinery/door/airlock/public/glass{ + name = "Fore Primary Hallway" + }, +/turf/open/floor/iron, +/area/ruin/space/has_grav/port_tarkon/forehall) +"Yv" = ( +/obj/item/stack/tile/carpet/neon/simple/purple/nodots/sixty, +/turf/open/floor/plating, +/area/ruin/space/has_grav/port_tarkon/cargo) +"Yw" = ( +/turf/open/floor/iron, +/area/ruin/space/has_grav/port_tarkon/power1) +"Yx" = ( +/obj/structure/cable, +/turf/open/floor/iron/dark, +/area/ruin/space/has_grav/port_tarkon/developement) +"Yy" = ( +/obj/machinery/vending/hydronutrients, +/turf/open/floor/iron, +/area/ruin/space/has_grav/port_tarkon/garden) +"YD" = ( +/obj/effect/turf_decal/tile/purple/half{ + dir = 1 + }, +/obj/item/areaeditor/blueprints/slime, +/obj/item/slime_extract/grey, +/obj/item/slime_extract/grey, +/obj/item/slime_extract/grey, +/obj/structure/closet/crate/secure/science, +/turf/open/floor/iron/dark, +/area/ruin/space/has_grav/port_tarkon/developement) +"YL" = ( +/obj/machinery/light/directional/east, +/turf/open/floor/iron, +/area/ruin/space/has_grav/port_tarkon/porthall) +"YM" = ( +/obj/machinery/airalarm/directional/north, +/obj/machinery/light/directional/north, +/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/tile/red/real_red/half{ + dir = 1 + }, +/obj/structure/disposalpipe/segment{ + dir = 6 + }, +/turf/open/floor/iron, +/area/ruin/space/has_grav/port_tarkon/starboardhall) +"YO" = ( +/obj/effect/mob_spawn/ghost_role/human/tarkon/med, +/turf/open/floor/iron, +/area/ruin/space/has_grav/port_tarkon/trauma) +"YP" = ( +/obj/effect/turf_decal/tile/purple/half{ + dir = 1 + }, +/obj/structure/closet/crate/secure/science, +/obj/item/raw_anomaly_core/random, +/obj/item/raw_anomaly_core/random, +/obj/item/raw_anomaly_core/random, +/obj/machinery/camera/tarkon/directional/north, +/turf/open/floor/iron/dark, +/area/ruin/space/has_grav/port_tarkon/developement) +"YT" = ( +/obj/machinery/door/airlock/research/glass, +/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/tarkon/general, +/obj/structure/disposalpipe/segment, +/turf/open/floor/iron/dark, +/area/ruin/space/has_grav/port_tarkon/developement) +"YW" = ( +/obj/machinery/atmospherics/components/unary/passive_vent/layer2{ + dir = 4 + }, +/turf/open/misc/asteroid/airless, +/area/ruin/space/has_grav/outdoors) +"YX" = ( +/obj/machinery/firealarm/directional/east, +/obj/effect/turf_decal/tile/brown/half{ + dir = 4 + }, +/turf/open/floor/iron, +/area/ruin/space/has_grav/port_tarkon/storage) +"YY" = ( +/obj/structure/window/reinforced/spawner/directional/north, +/obj/effect/turf_decal/tile/red/fourcorners{ + color = "#DE3A3A" + }, +/obj/machinery/computer/atmos_control/tarkon/nitrogen_tank{ + dir = 4 + }, +/obj/machinery/camera/tarkon/directional/west, +/turf/open/floor/iron, +/area/ruin/space/has_grav/port_tarkon/atmos) +"YZ" = ( +/obj/effect/spawner/structure/window/reinforced, +/turf/open/floor/iron, +/area/ruin/space/has_grav/port_tarkon/forehall) +"Za" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/turf_decal/tile/yellow, +/obj/structure/disposalpipe/segment{ + dir = 10 + }, +/turf/open/floor/iron, +/area/ruin/space/has_grav/port_tarkon/toolstorage) +"Zb" = ( +/obj/effect/turf_decal/tile/blue/anticorner{ + dir = 4 + }, +/obj/machinery/disposal/bin, +/obj/structure/disposalpipe/trunk, +/obj/machinery/camera/tarkon/directional/east, +/turf/open/floor/iron/dark, +/area/ruin/space/has_grav/port_tarkon/comms) +"Zh" = ( +/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/tile/yellow/half, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/camera/tarkon/directional/south, +/turf/open/floor/iron, +/area/ruin/space/has_grav/port_tarkon/porthall) +"Zs" = ( +/obj/effect/turf_decal/tile/blue/half, +/obj/structure/table/optable, +/turf/open/floor/iron, +/area/ruin/space/has_grav/port_tarkon/trauma) +"Zt" = ( +/obj/machinery/power/smes, +/obj/structure/cable, +/turf/open/floor/iron/dark, +/area/ruin/space/has_grav/port_tarkon/atmos) +"Zw" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron, +/area/ruin/space/has_grav/port_tarkon/mining) +"Zx" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/power/apc/auto_name/directional/north, +/obj/effect/mapping_helpers/apc/full_charge, +/obj/effect/mapping_helpers/apc/unlocked, +/obj/effect/turf_decal/tile/brown/half{ + dir = 1 + }, +/turf/open/floor/iron, +/area/ruin/space/has_grav/port_tarkon/storage) +"Zy" = ( +/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/neutral/anticorner, +/obj/structure/disposalpipe/junction/yjunction{ + dir = 8 + }, +/turf/open/floor/iron, +/area/ruin/space/has_grav/port_tarkon/centerhall) +"ZC" = ( +/obj/effect/turf_decal/stripes/asteroid/line{ + dir = 4 + }, +/turf/open/misc/asteroid/airless, +/area/solars/tarkon) +"ZF" = ( +/obj/structure/table, +/obj/item/encryptionkey/headset_cargo/tarkon, +/obj/item/encryptionkey/headset_cargo/tarkon, +/obj/item/encryptionkey/headset_cargo/tarkon, +/obj/item/encryptionkey/headset_cargo/tarkon, +/obj/item/encryptionkey/headset_cargo/tarkon, +/turf/open/floor/iron, +/area/ruin/space/has_grav/port_tarkon/cargo) +"ZH" = ( +/obj/structure/curtain/cloth, +/turf/open/floor/iron/dark, +/area/ruin/space/has_grav/port_tarkon/developement) +"ZL" = ( +/obj/effect/turf_decal/sand/plating, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 1 + }, +/turf/open/floor/iron, +/area/ruin/space/has_grav/port_tarkon/mining) +"ZR" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/layer_manifold/supply{ + dir = 4 + }, +/turf/open/floor/plating, +/area/ruin/space/has_grav/port_tarkon/centerhall) +"ZV" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 4 + }, +/turf/open/floor/iron, +/area/ruin/space/has_grav/port_tarkon) +"ZX" = ( +/obj/machinery/door/airlock/public/glass{ + name = "Cryogenics Room" + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/door/firedoor/solid, +/obj/structure/cable, +/turf/open/floor/iron, +/area/ruin/space/has_grav/port_tarkon) +"ZY" = ( +/turf/template_noop, +/area/template_noop) +"ZZ" = ( +/obj/structure/sign/warning/fire, +/turf/closed/wall/r_wall, +/area/ruin/space/has_grav/port_tarkon/atmos) + +(1,1,1) = {" +ZY +ZY +ZY +ZY ZY ZY -"} -(19,1,1) = {" ZY ZY ZY ZY ZY -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn ZY ZY ZY ZY ZY -"} -(20,1,1) = {" ZY ZY ZY ZY ZY -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn ZY ZY ZY ZY ZY -"} -(21,1,1) = {" ZY ZY ZY ZY ZY -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn ZY ZY ZY ZY ZY -"} -(22,1,1) = {" ZY ZY ZY ZY ZY -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn ZY ZY ZY ZY ZY -"} -(23,1,1) = {" ZY ZY ZY ZY ZY -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn ZY ZY ZY ZY ZY -"} -(24,1,1) = {" ZY ZY ZY ZY ZY -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn ZY ZY ZY ZY ZY -"} -(25,1,1) = {" ZY ZY ZY ZY ZY -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn +"} +(2,1,1) = {" +ZY +ZY +ZY +ZY +ZY +ZY ZY ZY ZY ZY ZY -"} -(26,1,1) = {" ZY ZY ZY ZY ZY -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn ZY ZY ZY ZY ZY -"} -(27,1,1) = {" ZY ZY ZY ZY ZY -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn ZY ZY ZY ZY ZY -"} -(28,1,1) = {" ZY ZY ZY ZY ZY -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn ZY ZY ZY ZY ZY -"} -(29,1,1) = {" ZY ZY ZY ZY ZY -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn ZY ZY ZY ZY ZY -"} -(30,1,1) = {" ZY ZY ZY ZY ZY -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn ZY ZY ZY ZY ZY -"} -(31,1,1) = {" ZY ZY ZY ZY ZY -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn ZY ZY ZY ZY ZY "} -(32,1,1) = {" +(3,1,1) = {" ZY ZY ZY ZY ZY -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -Nk -Vb -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn ZY ZY ZY ZY ZY -"} -(33,1,1) = {" ZY ZY ZY ZY ZY -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -Ge -Vb -tD -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn ZY ZY ZY ZY ZY -"} -(34,1,1) = {" ZY ZY ZY ZY ZY -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -Fi -Vb -Vb -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn ZY ZY ZY ZY ZY -"} -(35,1,1) = {" ZY ZY ZY ZY ZY -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -jD -ux -Vb -Vb -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn ZY ZY ZY ZY ZY -"} -(36,1,1) = {" ZY ZY ZY ZY +xw +ZY +ZY +ZY +ZY +xw +ZY +ZY +ZY +OS +ZY +ZY +ZY +ZY +ZY +ZY +ZY +xw ZY -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -QR -IX -IX -qo -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn ZY ZY ZY ZY ZY +xw +ZY +ZY "} -(37,1,1) = {" +(4,1,1) = {" +ZY +ZY +ZY +ZY +ZY +ZY +ZY +ZY +ZY +ZY +ZY ZY ZY ZY ZY ZY -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -jD -Up -IX -IC -ZX -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn ZY ZY ZY ZY ZY -"} -(38,1,1) = {" ZY ZY ZY ZY ZY -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -Vj -Vb -Vb -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn ZY ZY ZY ZY ZY -"} -(39,1,1) = {" ZY ZY ZY ZY ZY -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -cw -Vb -tD -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn ZY ZY ZY ZY ZY -"} -(40,1,1) = {" ZY ZY ZY ZY ZY -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -cZ -Vb -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn ZY ZY ZY ZY ZY -"} -(41,1,1) = {" ZY ZY ZY ZY ZY -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn ZY ZY ZY ZY ZY -"} -(42,1,1) = {" ZY ZY ZY ZY ZY -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn ZY ZY ZY ZY ZY "} -(43,1,1) = {" +(5,1,1) = {" +ZY +ZY +ZY +ZY +ZY +ZY +ZY +ZY +ZY +ZY +ZY +ZY +ZY +ZY +ZY +ZY +ZY +ZY +ZY +ZY +ZY +ZY +ZY +ZY +ZY +ZY +kV +kV +kV +kV +kV +kV +kV +kV +ZY +ZY +ZY +ZY +ZY +ZY +ZY ZY ZY ZY ZY ZY -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn ZY ZY ZY ZY ZY -"} -(44,1,1) = {" ZY ZY ZY ZY ZY -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn ZY ZY ZY ZY ZY -"} -(45,1,1) = {" ZY ZY ZY ZY ZY -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn ZY ZY ZY ZY ZY "} -(46,1,1) = {" +(6,1,1) = {" +ZY +ZY +ZY +ZY +ZY +ZY +ZY +ZY +ZY +ZY +ZY +ZY +ZY +ZY +ZY +ZY +ZY +kV +kV +kV +kV +kV +kV +kV +kV +kV +kV +kV +kV +kV +kV +kV +kV +kV +kV +kV +kV +kV +kV +iL +kV +kV +kV +zY +zY +bt +zY +zY +bt +zY +zY +zY +zY +zY +zY +zY +zY +zY +zY ZY ZY ZY ZY ZY -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn +ZY +xw ZY ZY ZY ZY ZY "} -(47,1,1) = {" +(7,1,1) = {" ZY ZY ZY ZY ZY -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn ZY ZY ZY ZY ZY -"} -(48,1,1) = {" +ZY +ZY +ZY +ZY +kV +kV +kV +kV +kV +kV +kV +kV +kV +kV +kV +kV +kV +kV +kV +kV +kV +kV +kV +kV +kV +kV +kV +kV +kV +YW +kV +zY +zY +zY +bt +zY +bt +zY +zY +zY +zY +zY +bt +zY +bt +zY +bt +bt +bt +bt +zY ZY ZY ZY ZY ZY -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn ZY ZY ZY ZY ZY "} -(49,1,1) = {" +(8,1,1) = {" ZY ZY ZY ZY ZY -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn +ZY +ZY +ZY +ZY +ZY +ZY +ZY +kV +kV +kV +kV +kV +kV +kV +kV +kV +kV +kV +kV +kV +kV +kV +kV +kV +kV +kV +kV +kV +kV +kV +kV +kV +kV +XX +QK +zY +zY +bt +zY +zY +zY +zY +bt +zY +zY +bt +zY +bt +bt +zY +zY +zY +bt +zY +zY +zY +zY +zY +ZY +ZY +ZY ZY ZY ZY ZY ZY "} -(50,1,1) = {" +(9,1,1) = {" +ZY ZY ZY ZY ZY ZY -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn +ZY +ZY +ZY +ZY +kV +kV +kV +kV +kV +cU +cU +cU +fu +fu +fu +fu +fu +fu +fu +fu +fu +fu +fu +fu +JV +JV +JV +JV +fu +fu +fu +Sn +Sn +jt +sf +Sn +Sn +Sn +Sn +Sn +Sn +Sn +Sn +Sn +Sn +bt +bt +zY +bt +zY +zY +zY +bt +bt +zY +zY +bt +zY +ZY +ZY ZY ZY ZY ZY ZY "} -(51,1,1) = {" +(10,1,1) = {" ZY ZY ZY ZY ZY -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn +ZY +ZY +ZY +ZY +kV +kV +kV +kV +cU +cU +cU +Yn +oL +mo +nj +nj +nj +nj +nj +aW +Dz +ax +Hi +Hi +jB +Hi +Hi +Hi +Hi +XH +cI +oN +lt +hP +aY +GL +lN +hX +Iz +lN +OG +En +lN +EU +ER +lN +bt +bt +bt +kV +kV +zY +bt +zY +zY +zY +zY +zY +zY +ZY +ZY ZY ZY ZY ZY ZY "} -(52,1,1) = {" +(11,1,1) = {" ZY ZY ZY ZY ZY -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn +ZY +ZY +ZY +kV +kV +kV +cU +cU +cU +Yn +Yn +QS +Pl +fu +TO +wk +FS +HC +Do +FS +iR +FY +FS +FS +FY +FS +FS +xu +FS +FS +wk +Tx +Ot +xn +GH +GJ +lN +VE +HN +lN +Je +MV +lN +sO +BB +lN +bt +NC +yU +kV +kV +kV +bt +bt +bt +bt +bt +bt +zY +zY +ZY +ZY +ZY +ZY +ZY +ZY +"} +(12,1,1) = {" +ZY +ZY +ZY +ZY +ZY +ZY +ZY +ZY +kV +kV +cU +cU +Yn +Yn +QS +QS +VA +eL +bL +ie +YL +BO +iD +rD +Pc +Dt +Dt +Dt +bb +Dt +XN +Dt +qz +Pc +RF +FS +LL +lt +dp +wF +lC +lN +Dq +qL +lN +XL +qL +lN +ii +qL +lN +Sn +Gr +Sn +kV +ZY +kV +Sn +bt +zY +bt +bt +zY +zY +zY +ZY ZY ZY ZY ZY ZY "} -(53,1,1) = {" +(13,1,1) = {" +ZY ZY ZY ZY ZY ZY -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn ZY +kV +kV +kV +cU +Yn +cm +QS +QS +QS +QS +DB +Yr +Yr +Yr +Yr +iZ +yb +Yr +Yr +Yr +Yr +Yr +Yr +Yr +Yr +Yr +Yr +zA +pk +AQ +Sn +NE +lM +rL +yO +rr +RL +YY +uB +OU +Ah +dW +VH +nq +tS +tR +Sn +Sn +hO +ZZ +Sn +zY +bt +zY +bt +bt +zY +zY +zY +xw ZY ZY ZY ZY "} -(54,1,1) = {" +(14,1,1) = {" ZY ZY ZY ZY ZY -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn +ZY +ZY +kV +kV +cU +cU +Yn +jx +QS +QS +Io +QS +MM +Yr +fM +Tk +dF +mi +OW +DI +Ho +PK +MZ +Ia +Tk +Su +pe +Nd +Yr +AG +FS +TD +Sn +nJ +wA +rL +vb +vb +vb +vb +vb +vb +vb +vb +vb +rP +vl +hm +lU +qd +MY +GQ +Sn +zY +zY +bt +zY +bt +zY +zY +kV ZY ZY ZY ZY ZY "} -(55,1,1) = {" +(15,1,1) = {" ZY ZY ZY ZY ZY -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn +ZY +kV +kV +kV +cU +Yn +QS +QS +QS +nQ +QS +QS +qE +Yr +AS +jX +os +jX +jX +jX +yG +PK +qZ +Yx +jX +jX +jX +yG +Yr +TE +dd +TD +Sn +oJ +wA +QV +wu +vb +vb +vb +vb +vb +vb +vb +vb +ET +Sn +DT +Sn +wH +VO +jL +Sn +kV +bt +zY +bt +bt +zY +kV +kV +ZY +ZY +ZY +ZY +ZY +"} +(16,1,1) = {" +ZY +ZY +ZY +ZY +ZY +ZY +kV +kV +cU +cU +Yn +LR +Ks +jx +Ks +LR +jx +vx +Yr +lm +jX +sc +jX +jX +jX +yG +PK +Ht +vS +jX +jX +Ws +yG +Yr +AG +mp +TD +Sn +TX +nW +rL +vb +vb +vb +vb +vb +vb +vb +vb +Vv +we +WA +Uo +Sn +Sn +oX +Sn +Sn +kV +kV +zY +bt +zY +zY +kV +kV +ZY +ZY +xw +ZY +ZY +"} +(17,1,1) = {" +ZY +ZY +ZY +ZY +ZY +ZY +kV +kV +cU +Yn +mQ +QS +QS +Io +QS +QS +eH +pt +Yr +NO +hp +sc +jX +jX +Ws +yG +PK +be +yP +jX +jX +Qa +yG +yo +AG +FS +DW +Sn +jO +nW +rL +vb +vb +vb +vb +vb +vb +vb +vb +vb +jb +MG +AH +Oz +Pf +dG +Pk +kV +zY +tL +bt +bt +zY +kV +kV +kV +ZY +ZY +ZY +ZY +ZY +"} +(18,1,1) = {" +ZY +ZY +ZY +ZY +ZY +kV +kV +kV +cU +Yn +Ln +QS +Pa +dV +pR +Om +lB +vx +Yr +YP +Fa +CC +tk +JB +JB +Nz +PK +Dj +yP +jX +jX +Qa +oU +Yr +AG +FS +TD +Sn +aM +nW +rL +vb +vb +vb +vb +vb +vb +vb +vb +vb +jb +Kr +Hc +RA +Sn +Eg +Sn +kV +tL +kV +pT +zY +zY +kV +kV +kV ZY ZY ZY ZY ZY "} -(56,1,1) = {" +(19,1,1) = {" ZY ZY ZY ZY ZY -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn +kV +kV +kV +bB +bB +bB +bB +bB +bB +bB +nh +bB +Du +Yr +sS +jX +jX +Ex +jX +uQ +mf +YT +lq +wK +wK +wK +SW +fD +Yr +Ad +FS +Zh +Sn +mm +nW +rL +vb +vb +vb +vb +vb +vb +vb +vb +vb +jb +vG +qG +fe +Sn +mC +ZZ +kV +tL +kV +kV +kV +kp +kV +kV +kV ZY ZY ZY ZY ZY "} -(57,1,1) = {" +(20,1,1) = {" ZY ZY ZY ZY ZY -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn +kV +kV +kV +zY +bt +bt +zY +zY +zY +eT +xr +xr +Sq +Yr +GA +EW +EW +gF +zL +zL +kD +gB +sX +Qa +jX +jX +eC +DQ +Yr +AG +FS +TD +Sn +Vs +nW +FR +rg +rg +rg +rg +rg +rg +rg +vb +vb +DH +pJ +NV +xO +Sn +ZY +kV +kV +bt +Js +pT +pT +zY +kV +kV +kV ZY ZY ZY ZY ZY "} -(58,1,1) = {" +(21,1,1) = {" ZY ZY ZY ZY ZY +kV +kV +zY +zY +bt +zY +bt +zY +bt +eT +xr +xr +Sq +Yr +Wx +yZ +GV +bF +ZH +nC +xE +gB +Hs +wo +jX +jX +gE +ct +nw +BI +KE +za +Sn +PL +rM +PW +qf +Vh +Hm +xb +rt +yH +rc +sA +Pw +Ob +Zt +Zt +Sn +Sn +kV +kV +bt +zY +zY +oG +lD +aJ +kV +kV +kV ZY -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn +ZY +ZY +ZY +ZY +"} +(22,1,1) = {" +ZY +ZY +ZY +xw +ZY +kV +kV +zY +zY +zY +zY +zY +bt +zY +eT +jh +qm +Sq +Yr +xd +jX +jX +cM +ZH +jX +gX +gB +ho +Mx +jX +jX +Hf +Tw +Yr +AG +FS +DW +Sn +bD +Id +bD +lN +qL +pY +lN +qL +Yc +lN +qL +bM +lN +Sn +Sn +Sn +bt +bt +bt +bt +zY +gb +KQ +KQ +kX +ZC +RW +gb +ZY +ZY +ZY +ZY +ZY +"} +(23,1,1) = {" +ZY +ZY +ZY +ZY +ZY +kV +zY +zY +zY +bt +bt +bt +bt +bt +eT +Uj +IB +Sq +Yr +hD +hp +cM +cM +ZH +jX +Qb +gB +Dj +Jd +jX +jX +jX +bj +Yr +AG +FS +TD +Sn +vb +Iv +vb +lN +vg +Kf +lN +GD +ve +lN +OC +WT +lN +bt +bt +bt +bt +zY +uS +gb +kX +ZC +RW +KQ +Bt +KQ +Iq +gb +ZY +ZY +ZY +ZY +ZY +"} +(24,1,1) = {" +ZY +ZY +ZY +ZY +ZY +zY +bt +zY +bt +zY +bt +bt +zY +zY +eT +dj +xr +wW +Yr +YD +jX +cM +jX +Lk +bf +JI +gB +Lu +Mq +nr +TF +EE +Hh +Yr +AG +dd +TD +Sn +vb +vb +vb +lN +tn +Tl +lN +Po +ak +lN +iW +cX +lN +bt +bt +bt +bt +gb +gb +gb +Bt +KQ +Iq +gb +Bt +KQ +Iq +gb ZY ZY ZY ZY ZY "} -(59,1,1) = {" +(25,1,1) = {" ZY ZY ZY ZY ZY +zY +bt +zY +zY +zY +bt +bt +zY +zY +eT +Qy +qm +Sq +aI +lS +gc +IL +gc +vm +jr +zM +vP +vP +vP +vP +vP +vP +vP +fu +TE +FS +TD +Sn +Sn +Sn +Sn +Sn +Sn +Sn +Sn +Sn +Sn +rk +Sn +Sn +Sn +xp +bt +bt +bt +gb +gb +gb +Bt +KQ +Iq +gb +Bt +KQ +Iq +gb ZY -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn +ZY +ZY +ZY +ZY +"} +(26,1,1) = {" +ZY +ZY +ZY +ZY +ZY +zY +zY +bt +bt +zY +bt +zY +zY +bt +eT +jh +sp +Sq +aI +Dj +Fa +mG +wm +yG +jr +Ly +su +dU +VC +lz +GK +eA +Xo +fu +AG +mp +We +fu +Xi +WG +WG +mt +zQ +Td +ms +cK +aq +SD +JQ +Ma +tg +ms +kV +kV +kV +gb +gb +gb +Bt +KQ +Iq +gb +Bt +KQ +Iq +gb ZY ZY ZY ZY ZY "} -(60,1,1) = {" +(27,1,1) = {" ZY ZY ZY ZY ZY +zY +bt +bt +zY +zY +bt +zY +zY +zY +eT +xr +xr +dc +aI +uj +jX +cM +jX +At +jr +mK +Ae +Ae +Ae +Za +vR +QE +vP +fu +yf +pk +Xu +fu +rh +sa +mt +mt +mt +mt +ms +lE +Jg +gR +eN +gW +Lt +WS +kV +kV +kV +gb +gb +gb +Bt +KQ +Iq +gb +Bt +KQ +Iq +gb +ZY +ZY +xw +ZY +ZY +"} +(28,1,1) = {" +ZY ZY -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn ZY ZY ZY +zY +bt +zY +bt +zY +bt +zY +zY +bt +eT +RZ +OI +av +aI +Dj +uQ +cM +DD +ku +jr +JD +Ae +uT +TP +uE +qg +Lw +qg +Mz +rN +eF +wb +oV +rh +MD +rh +mt +mt +mt +ms +VY +Qi +mh +eN +Yw +Lt +ah +ah +ah +ah +ZC +ZC +ZC +Hn +KQ +TG +ZC +Hn +KQ +TG +ZC +ZY +ZY ZY ZY ZY "} -(61,1,1) = {" +(29,1,1) = {" ZY ZY ZY ZY ZY +zY +bt +bt +zY +xC +xC +bt +bt +zY +eT +xr +xr +Sq +aI +Dj +jX +cM +jX +yG +jr +vo +rb +TP +sh +qg +qg +dC +KB +Py +uh +uh +PD +cD +rN +oV +rh +rh +br +yk +ms +hb +Cc +cy +nK +SN +Lt +Kt +Tn +Tn +GF +tc +jV +jV +jV +KQ +KQ +KQ +KQ +KQ +KQ +KQ ZY ZY -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn ZY ZY ZY +"} +(30,1,1) = {" +ZY +ZY +ZY +ZY +ZY +zY +zY +bt +xC +kV +kV +xC +bt +zY +eT +qm +qm +Sq +aI +sX +Fa +cM +jX +yG +jr +VR +TP +qh +qg +qg +Mz +kk +zf +zf +Kb +Jq +rl +Pb +Pb +NU +FW +rh +rh +ms +ms +ms +ms +ms +CN +Yw +HS +ah +ah +ah +ah +Bb +Bb +Bb +nT +KQ +IO +Bb +nT +KQ +IO +Bb +ZY +ZY +ZY +ZY +ZY +"} +(31,1,1) = {" +ZY +ZY +xw +ZY +ZY +zY +bt +xC +kJ +EN +kV +EN +xC +zY +eT +xr +xr +lv +aI +Dj +jX +cM +wm +yG +jr +lO +zn +qg +qg +iF +vO +NA +xx +xx +xx +xx +xx +xx +zE +oh +kC +FW +Eo +ya +al +NS +sq +ms +xa +Yw +xD +ah +kV +kV +kV +gb +gb +gb +Bt +KQ +Iq +gb +Bt +KQ +Iq +gb +ZY +ZY +ZY +ZY +ZY +"} +(32,1,1) = {" +ZY +ZY +ZY +ZY +ZY +zY +zY +xC +kV +Kn +EN +kV +xC +bt +eT +jh +Qy +Sq +aI +uj +jX +sc +jX +ku +jr +gD +OM +NY +Mz +Pq +RJ +xx +xx +pN +Tm +xx +qO +Vb +zE +zE +Uf +Nh +FW +gm +Tn +ne +IV +ms +Vo +Lz +VN +ah +kV +kV +kV +gb +gb +gb +Bt +KQ +Iq +gb +Bt +KQ +Iq +gb +ZY +ZY ZY ZY ZY "} -(62,1,1) = {" +(33,1,1) = {" ZY ZY ZY ZY -mn +ZY +zY +bt +xC +kV +EN +kV +kV +xC +zY +eT +xr +IB +Sq +aI +Og +nR +BE +me +xG +jr +Xo +vP +qg +cL +Nx +mj +xx +do +Up +Up +xx +TV +Up +QP +zE +Ej +Yk +xT +ya +ms +AW +Fc +ms +DM +WI +MH +ms +kV +kV +kV +gb +gb +gb +Bt +KQ +Iq +gb +Bt +KQ +Iq +gb +ZY +ZY +ZY +ZY +ZY +"} +(34,1,1) = {" +ZY ZY ZY -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn ZY ZY +zY +bt +xC +kV +kV +kV +kV +xC +zY +eT +cH +cH +LY +aI +aI +aI +aI +aI +aI +xs +eT +eT +iF +Pq +Vl +xx +xx +am +Up +Ns +xx +bp +Up +QP +xx +xx +IT +if +oV +ms +ms +mb +ms +ms +bO +ms +ms +so +Mw +Mw +gb +gb +gb +Bt +KQ +Iq +gb +Bt +KQ +Iq +gb ZY ZY ZY ZY ZY "} -(63,1,1) = {" +(35,1,1) = {" ZY ZY ZY -mn -mn ZY ZY +zY +zY +xC +kV +kV +kV +EN +xC +zY +eT +dj +Uj +xB +Ys +xr +xr +iU +Aa +HP +EX +xr +gz +cL +kA +RJ +Vw +Up +Up +ZV +Bu +xx +Vj +Up +Up +Up +Vc +Uf +Px +RJ +Np +wr +tf +OP +aR +Kh +RC +RC +Cq +Tz +Mw +Mw +gb +gb +uu +Bb +kh +gb +Bt +KQ +Iq +gb ZY -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn +ZY +ZY +ZY +ZY +"} +(36,1,1) = {" ZY ZY ZY ZY ZY +zY +zY +xC +EN +kV +kV +kV +xC +bt +eT +xr +Uj +xB +BL +xr +jg +xr +xr +xr +iz +xr +BL +wV +pK +oA +xx +ph +Up +nU +Db +HV +Db +Up +Up +qo +xx +lG +Px +bY +dS +RC +RC +LS +RC +If +RC +RC +RV +RC +Tz +Mw +Mw +gb +gb +gb +gb +gb +uu +Bb +kh +gb +ZY +ZY ZY ZY ZY "} -(64,1,1) = {" +(37,1,1) = {" ZY ZY ZY -mn -mn ZY +xw +zY +bt +bt +xC +kV +kV +xC +bt +zY +eT +xr +bk +xB +sx +Sq +Sq +eu +pq +wc +Op +Op +QF +kU +kA +RJ +Vw +Up +Up +FG +zp +xx +Db +Db +Db +Db +ZX +Tv +LQ +Kv +mJ +bH +bH +Sw +bH +pi +JZ +JZ +gN +dz +qx +tx +Mw +kV +kV +kV +kV +kV +kV +kV +kV +kV ZY ZY ZY -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn ZY ZY +"} +(38,1,1) = {" +ZY +ZY +ZY +ZY +ZY +zY +zY +zY +xC +kV +xC +zY +bt +zY +eT +jh +xr +tA +EH +EH +EH +EH +jY +EH +EH +EH +EH +Cu +VU +RJ +xx +xx +Ip +Up +hS +xx +bp +Up +QP +xx +xx +Uf +xT +Fd +hG +hG +hG +hG +hG +Bd +so +zg +zg +Qm +sj +zg +zg +cQ +cQ +cQ +kV +kV +kV +kV +kV +kV +ZY +ZY +xw ZY ZY +"} +(39,1,1) = {" ZY ZY ZY ZY ZY -"} -(65,1,1) = {" +zY +zY +bt +xC +EN +xC +bt +bt +bt +eT +Qy +xr +Sq +EH +hf +fS +iB +XO +zV +DL +KF +EH +rh +QL +cD +pF +xx +kR +Up +Up +xx +TV +Up +QP +zE +vX +Dv +xT +Yl +BN +DG +pC +wq +hG +Ab +uF +zg +JM +Eb +bT +xc +rC +kF +bS +cQ +cQ +cQ +kV +kV +kV +kV ZY ZY -mn -mn -mn -mn ZY ZY ZY +"} +(40,1,1) = {" ZY ZY -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn +ZY +ZY +ZY +zY +bt +bt +xC +kV +xC +bt +zY +zY +eT +xr +dn +Sq +EH +Ri +Bk +Jv +qS +Bk +Bk +KU +OQ +rh +Dc +VU +fA +xx +xx +cn +Ur +xx +qq +ha +zE +zE +Uf +iX +Zy +Sg +DA +DA +DA +Ye +hG +zh +WX +zg +wv +RY +Rv +TZ +TZ +TZ +Dr +wT +Uk +cQ +kV +kV +kV kV -mn -mn -mn -mn -mn -mn ZY ZY ZY ZY ZY +"} +(41,1,1) = {" ZY ZY ZY ZY ZY -"} -(66,1,1) = {" +zY +bt +zY +xC +kV +xC +zY +bt +zY +eT +xr +xr +dc +EH +af +YO +Bk +qS +BW +Bk +Bk +Wd +rh +Of +eG +AP +oV +xx +xx +xx +xx +xx +xx +zE +Mz +Dv +xT +dJ +ns +tE +tE +zR +ov +hG +qr +sI +zg +rG +RY +TZ +TZ +TZ +TZ +TZ +TZ +Rx +cQ +cQ +kV +kV +kV ZY ZY -mn -mn -mn -mn ZY ZY ZY +"} +(42,1,1) = {" ZY ZY ZY ZY -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn -mn +ZY +zY +zY +bt +xC kV -mn -mn -mn -mn +xC +bt +zY +zY +eT +xr +xr +Sq +EH +Oa +kl +Bk +qS +Bk +Bk +Bk +us +rh +rh +rh +Cu +AP +rN +rN +mS +IU +vj +IM +rN +Dv +ra +xT +dJ +Pt +tE +JA +zR +gd +hG +Uc +Wr +zg +Kx +RY +TZ +jA +tN +IJ +TZ +BS +Wi +Uk +cQ +kV +kV +kV +ZY +ZY ZY ZY ZY +"} +(43,1,1) = {" ZY ZY ZY ZY ZY +zY +zY +bt +xC +kV +xC +xC +bt +bt +eT +xr +IB +xB +EH +Cm +Gj +Bk +qS +Yj +Yj +qM +Ao +rh +fc +rh +rh +hQ +Pb +Ie +uh +uh +UH +Pb +Pb +Pb +Pb +VQ +ev +Hq +UN +tE +Sz +QZ +hG +wx +Ko +zg +rs +RY +Vi +Vi +HH +Gu +Vi +Vi +fr +HE +cQ +cQ +kV +kV +ZY ZY ZY ZY ZY "} -(67,1,1) = {" +(44,1,1) = {" +ZY +ZY +ZY ZY -mn -mn -mn -mn -mn ZY +zY +bt +bt +xC +kV +kV +kV +xC +zY +eT +RZ +Uj +xB +NT +fk +qS +qS +qS +CF +Bv +CF +Cn +rh +KR +KR +rh +SM +rh +oh +zf +ix +pA +Nv +Nv +Nv +aD +oQ +Nv +cl +hG +XW +Sz +Bp +hG +NB +Sy +zg +Mf +MQ +lh +TZ +TZ +FF +TZ +TZ +lh +qX +Uk +cQ +kV +kV ZY ZY ZY ZY ZY +"} +(45,1,1) = {" ZY ZY ZY ZY ZY +zY +bt +bt +xC +EN +mn +kV +xC +zY +eT +jh +bk +xB +yV +Qx +Cf +Bk +Bk +CF +Yj +qS +XJ +rh +ym +bA +LV +aT +rh +rh +wa +VB +Tg +Nv +VV +hH +jd +OZ +hH +Ll +hG +IQ +Sz +Bj +hG +cv +Yv +zg +Zb +jE +eQ +xm +eQ +om +eQ +eQ +Kc +Ai +ey +cQ +kV +kV ZY ZY ZY ZY ZY +"} +(46,1,1) = {" ZY ZY ZY ZY ZY +zY +bt +bt +xC +kJ +kV +EN +xC +zY +eT +cH +cH +Ch +EH +lk +Ci +Ci +Ci +CF +Bk +Ju +Zs +rh +at +KR +rA +ZR +cq +rh +PG +fP +xK +Nv +VV +pb +jd +JF +JF +hH +yY +tE +hM +Bj +hG +wx +Ko +EQ +EQ +EQ +EQ +SZ +SZ +SZ +SZ +SZ +SZ +SZ +SZ +SZ +kV +kV ZY ZY ZY ZY ZY +"} +(47,1,1) = {" ZY ZY ZY +xw ZY +zY +bt +bt +bt +xC +kV +kV +xC +zY +eT +xr +Qy +Sq +EH +Cg +lA +Dg +KJ +xo +HX +IW +AZ +rh +Na +IZ +KH +dO +OA +rh +fZ +LW +xK +Nv +VV +OZ +Yy +kn +JF +hH +Wt +tE +Ca +qF +hG +KP +Qc +oH +DN +Qq +CY +AR +DZ +cC +lu +mO +cC +cC +DS +SZ +kV +kV ZY ZY ZY ZY ZY +"} +(48,1,1) = {" ZY ZY ZY ZY ZY +zY +zY +zY +bt +bt +xC +kV +xC +bt +eT +YZ +Fb +tZ +EH +EH +EH +EH +EH +EH +EH +EH +EH +rh +RS +RS +RS +RS +RS +RS +YM +Ik +vr +Nv +VV +OZ +jQ +MT +JF +Km +hG +tC +hG +hG +hG +gG +FB +tj +CS +CS +SR +AR +CA +hc +hc +hc +Em +oE +NI +VJ +kV +kV ZY ZY +xw ZY ZY +"} +(49,1,1) = {" ZY ZY ZY ZY -Bx ZY +zY +zY +bt +bt +bt +xC +kV +xC +zY +eT +jT +OI +Sq +eT +zY +bt +bt +bt +bt +bt +zY +zY +zY +OV +va +Mg +tm +KZ +rS +uC +wP +xI +Nv +hH +OZ +OZ +OZ +pf +Xa +hG +VZ +VZ +Ut +hG +uW +zT +rp +rp +md +Hk +yq +Xr +dB +VK +VK +nb +AR +kS +SZ +kV +kV ZY ZY ZY ZY ZY +"} +(50,1,1) = {" ZY ZY ZY ZY ZY +zY +bt +zY +bt +zY +xC +kV +xC +zY +eT +kG +IB +Re +eT +zY +zY +bt +xC +xC +xC +xC +bt +bt +OV +Nc +Wk +id +qc +jq +fP +fP +xI +Nv +wj +tT +tT +tT +tT +iG +hG +VZ +VZ +Ut +hG +yc +qv +yc +yc +fJ +SR +zH +Xr +VK +VK +VK +sk +zB +Qo +Pz +kV +kV ZY ZY ZY ZY ZY "} -(68,1,1) = {" +(51,1,1) = {" +ZY ZY ZY ZY -mn -mn -mn -mn ZY +zY +bt +zY +bt +bt +xC +kV +xC +bt +eT +YZ +Hg +pP +eT +bt +bt +xC +xC +kV +EN +xC +xC +bt +OV +wf +mM +fI +pS +jq +dE +VB +oy +Nv +Nv +Nv +Nv +Nv +Nv +Nv +hG +hG +hG +hG +hG +SA +MJ +uJ +yc +ab +SR +AR +GN +VK +VK +VK +dv +hv +TT +NX +kV +kV ZY ZY ZY ZY ZY +"} +(52,1,1) = {" ZY ZY ZY ZY ZY +zY +bt +zY +bt +bt +xC +EN +xC +zY +xC +ug +ug +ug +xC +bt +xC +xC +kV +kV +kV +kJ +xC +zY +OV +JP +Wk +rj +fg +jq +fP +fP +kc +zk +zk +zk +zk +zk +zk +zk +zk +zk +zk +zk +ys +fW +Ph +Tt +yc +ab +bg +AR +Zx +VK +VK +VK +sk +hv +Ei +NX +kV +kV +ZY ZY ZY ZY ZY +"} +(53,1,1) = {" ZY ZY ZY ZY ZY +zY +zY +bt +zY +bt +xC +kV +kV +xC +EN +kV +kV +kV +xC +bt +xC +kV +EN +EN +EN +kV +xC +bt +OV +UD +ai +rj +DE +kN +fP +wP +Ph +fP +fP +fP +dN +fP +fP +fP +fP +qe +fP +fP +fP +dN +Ph +QH +Rs +Lj +Lv +AR +QO +VK +VK +VK +sk +hv +Ei +NX +kV +kV ZY ZY ZY ZY ZY +"} +(54,1,1) = {" ZY ZY ZY ZY ZY +kV +zY +zY +bt +bt +xC +mn +EN +kV +kV +kV +kV +xC +bt +bt +xC +kV +EN +Sl +EN +kV +xC +bt +OV +bU +Wk +rj +Cp +OV +UP +fP +gv +Xf +hB +zZ +zZ +zZ +gT +tG +Xf +sG +sG +sG +sG +XE +QG +ud +yc +ig +ZF +AR +Sx +VK +VK +VK +dv +hv +TT +NX +kV +kV ZY ZY ZY ZY ZY +"} +(55,1,1) = {" ZY ZY ZY ZY ZY +kV +zY +zY +bt +bt +bt +xC +kV +kV +kV +kV +xC +bt +bt +xC +kV +kV +EN +EN +EN +kV +xC +bt +OV +Tc +Wk +rj +pr +OV +HU +HU +HU +ar +ar +ar +qB +ar +ar +ar +mD +gq +Pe +HB +gq +FI +gq +mD +mD +mD +mD +AR +Sx +VK +VK +VK +sk +zC +wp +AA +kV +kV ZY ZY ZY +xw ZY +"} +(56,1,1) = {" ZY +xw ZY ZY -Bx ZY +kV +kV +zY +zY +zY +bt +xC +kV +EN +kV +xC +bt +bt +xC +kV +kV +EN +kV +kV +kV +kV +xC +bt +OV +WL +Wk +rj +dg +bl +rj +Eq +OV +Xs +Xs +Xs +Ic +Xs +Xs +Xs +mD +FO +ml +ml +ml +JY +cz +zm +WC +rO +uO +AR +Sx +dB +VK +VK +Pj +kY +kY +SZ +kV +kV ZY ZY ZY ZY ZY +"} +(57,1,1) = {" ZY ZY ZY ZY ZY +kV +kV +zY +bt +zY +bt +xC +kV +kV +kV +xC +bt +bt +xC +mn +kV +RE +RE +RE +kV +EN +xC +zY +OV +ou +Wk +rj +qc +RG +kE +Se +OV +Xs +Xs +Xs +Xs +Xs +Xs +Xs +mD +eM +Jf +Zw +Gz +eP +Gz +Gz +Gz +fy +BZ +AR +py +hc +hc +hc +Jb +cC +Mp +VJ +kV +kV ZY ZY ZY ZY ZY "} -(69,1,1) = {" +(58,1,1) = {" +ZY ZY ZY ZY ZY ZY +kV +zY +zY +zY +zY +xC +kV +kV +kV +xC +bt +bt +xC +EN +kV +kV +kV +RE +RE +xC +xC +bt +OV +fX +sv +rj +EG +rq +OV +OV +OV +Xs +Xs +Xs +Xs +Xs +Xs +Xs +mD +Ol +aG +UI +mB +HM +UI +ae +ae +mX +QM +AR +ds +TQ +Rp +YX +TQ +TQ +ex +SZ +kV +kV ZY ZY ZY ZY ZY +"} +(59,1,1) = {" ZY ZY ZY ZY ZY ZY +kV +kV +zY +zY +bt +xC +EN +kV +kV +EN +xC +xC +xC +RE +RE +RE +EN +kV +kV +xC +bt +bt +OV +UO +Wk +rj +qc +Di +gy +IF +OV +Xs +Xs +Xs +Xs +Xs +Xs +Xs +mD +yy +dm +PA +yT +qR +eS +cu +dm +Wa +Gk +AR +AR +AR +AR +AR +AR +AR +AR +SZ +kV +kV ZY ZY ZY ZY ZY +"} +(60,1,1) = {" ZY ZY ZY ZY ZY ZY +zz +kV +zY +zY +zY +xC +Kn +EN +kV +kV +kV +kV +RE +kV +kV +kV +kV +EN +kJ +xC +bt +bt +OV +Um +qP +yD +Nn +JL +Va +Eq +OV +Xs +Xs +Xs +fd +Xs +Xs +Xs +Wj +Wj +Wj +It +nZ +Wj +Wj +Wj +Wj +Wj +Wj +mD +zY +zY +bt +bt +zY +zY +zY +kV +kV ZY ZY ZY ZY ZY ZY +"} +(61,1,1) = {" ZY ZY ZY @@ -5109,65 +12046,370 @@ ZY ZY ZY ZY +kV +kV +zY +zY +bt +xC +kJ +EN +kV +kV +kV +RE +EN +RE +kV +EN +mn +xC +zY +zY +bt +OV +OV +OV +OV +OV +OV +OV +OV +OV +vw +vw +vw +vw +vw +vw +vw +Wj +Kg +rO +Nj +oZ +Wy +mq +Uu +hh +hh +MX +bt +bt +bt +zY +zY +zY +zY +kV +kV +kV ZY ZY ZY ZY ZY ZY +"} +(62,1,1) = {" ZY ZY ZY ZY +kV ZY ZY +kV +kV +kV +zY +bt +zY +xC +xC +xC +xC +kV +kV +kV +RE +kV +kV +xC +bt +zY +zY +zY +bt +zY +bt +bt +bt +bt +zY +bt +bt +zY +bt +bt +zY +zY +he +zY +MX +jH +Gz +qT +Tj +ae +gV +Ti +nE +ZL +Nf +kV +bt +zY +bt +zY +zY +kV +kV +kV ZY ZY -Bx +kV ZY ZY ZY ZY +"} +(63,1,1) = {" ZY ZY ZY +bt +zY ZY ZY ZY +kV +kV +kV +zY +zY +bt +zY +zY +bt +xC +xC +xC +xC +xC +xC +bt +zY +zY +zY +zY +bt +bt +bt +zY +zY +zY +bt +zY +zY +bt +bt +zY +zY +zY +he +zY +MX +qt +ma +Bl +mc +KG +qk +MX +jZ +tz +MX +kV +bt +zY +zY +zY +kV +kV +kV ZY ZY ZY +bt +kV ZY ZY ZY "} -(70,1,1) = {" -ZY +(64,1,1) = {" ZY ZY ZY +bt +bt ZY ZY +xw ZY +kV +kV +kV +kV +zY +bt +zY +zY +zY +bt +zY +bt +bt +zY +zY +zY +zY +bt +bt +zY +zY +bt +bt +bt +bt +bt +bt +bt +bt +zY +bt +bt +zY +zY +he +MX +wZ +MX +yj +yj +MX +wZ +MX +MX +MX +MX +kV +bt +bt +zY +kV +kV +kV ZY ZY ZY +kV +zY +bt +kV +xw ZY +"} +(65,1,1) = {" ZY ZY +zY +bt +bt +zY ZY ZY ZY ZY ZY +kV +kV +kV +kV +zY +bt +bt +zY +bt +zY +zY +zY +bt +bt +zY +bt +zY +zY +bt +zY +zY +zY +zY +bt +zY +zY +zY +zY +zY +zY +kV +kV +kV +kV +kV +kV +kV +xe +kV +kV +kV +kV +kV +FZ +kV +zY +kV +kV +kV +kV ZY ZY ZY ZY +kV +bt +bt +bt ZY ZY +"} +(66,1,1) = {" ZY ZY +bt +bt +zY +bt ZY ZY ZY @@ -5175,14 +12417,72 @@ ZY ZY ZY ZY +kV +kV +kV +kV +zY +bt +zY +bt +bt +bt +bt +bt +zY +zY +zY +zY +bt +zY +bt +zY +zY +bt +zY +zY +zY +bt +zY +kV +kV +kV +kV +kV +kV +kV +kV +kV +kV +kV +kV +kV +kV +FZ +kV +kV +kV +kV ZY ZY ZY ZY ZY +kV +zY +bt +zY +bt ZY ZY +"} +(67,1,1) = {" ZY +kV +zY +bt +bt +bt ZY ZY ZY @@ -5196,7 +12496,6 @@ ZY ZY ZY ZY -Bx ZY ZY ZY @@ -5213,8 +12512,6 @@ ZY ZY ZY ZY -"} -(71,1,1) = {" ZY ZY ZY @@ -5234,6 +12531,7 @@ ZY ZY ZY ZY +Sm ZY ZY ZY @@ -5241,12 +12539,24 @@ ZY ZY ZY ZY +xw ZY +kV +zY +zY +zY +bt ZY ZY +"} +(68,1,1) = {" ZY ZY ZY +zY +bt +zY +kV ZY ZY ZY @@ -5263,19 +12573,20 @@ ZY ZY ZY ZY +xw ZY ZY ZY ZY ZY ZY -Bx ZY ZY ZY ZY ZY ZY +xw ZY ZY ZY @@ -5286,8 +12597,6 @@ ZY ZY ZY ZY -"} -(72,1,1) = {" ZY ZY ZY @@ -5295,6 +12604,7 @@ ZY ZY ZY ZY +Sm ZY ZY ZY @@ -5303,9 +12613,18 @@ ZY ZY ZY ZY +kV +bt +bt +zY +bt +bt ZY ZY +"} +(69,1,1) = {" ZY +xw ZY ZY ZY @@ -5323,6 +12642,7 @@ ZY ZY ZY ZY +kV ZY ZY ZY @@ -5333,6 +12653,11 @@ ZY ZY ZY ZY +kV +zY +zY +bt +kV ZY ZY ZY @@ -5342,7 +12667,6 @@ ZY ZY ZY ZY -Bx ZY ZY ZY @@ -5353,21 +12677,30 @@ ZY ZY ZY ZY +Sm ZY ZY ZY ZY ZY ZY -"} -(73,1,1) = {" ZY +kV +bt +bt +bt +bt +zY +bt ZY ZY +"} +(70,1,1) = {" ZY ZY ZY ZY +OS ZY ZY ZY @@ -5379,14 +12712,27 @@ ZY ZY ZY ZY +xw ZY ZY +zY +zY ZY ZY ZY ZY ZY ZY +kV +kV +kV +zY +zY +zY +bt +zY +kV +kV ZY ZY ZY @@ -5404,22 +12750,33 @@ ZY ZY ZY ZY +Sm ZY ZY ZY ZY ZY ZY +kV +bt +zY +zY +bt +zY +zY +bt ZY ZY +"} +(71,1,1) = {" ZY ZY ZY -Bx ZY ZY ZY ZY +xw ZY ZY ZY @@ -5431,12 +12788,27 @@ ZY ZY ZY ZY +zY +zY +zY +kV ZY -"} -(74,1,1) = {" ZY ZY ZY +zY +zY +zY +zY +zY +zY +bt +zY +zY +zY +zY +kV +kV ZY ZY ZY @@ -5451,14 +12823,25 @@ ZY ZY ZY ZY +Sm ZY ZY ZY ZY ZY ZY +kV +bt +bt +zY +zY +zY +bt +bt ZY ZY +"} +(72,1,1) = {" ZY ZY ZY @@ -5472,11 +12855,32 @@ ZY ZY ZY ZY +kV +kV +kV ZY ZY +kV +zY +zY +zY +zY +kV ZY ZY ZY +zY +bt +zY +bt +bt +zY +zY +zY +zY +bt +bt +kV ZY ZY ZY @@ -5488,34 +12892,68 @@ ZY ZY ZY ZY -Bx ZY ZY ZY ZY +Sm ZY ZY ZY ZY ZY +kV +bt +zY +bt +bt +zY +zY +bt +bt ZY ZY +"} +(73,1,1) = {" ZY ZY ZY ZY ZY -"} -(75,1,1) = {" ZY ZY ZY ZY +kV +bt +zY +bt +bt +zY +kV ZY ZY +kV +zY +zY +zY +zY ZY ZY ZY +kV +zY +zY +bt +bt +zY +bt +bt +zY +bt +zY +zY +kV ZY ZY ZY @@ -5531,13 +12969,25 @@ ZY ZY ZY ZY +Sm ZY ZY ZY ZY ZY +bt +zY +bt +bt +zY +zY +bt +bt +bt ZY ZY +"} +(74,1,1) = {" ZY ZY ZY @@ -5547,21 +12997,40 @@ ZY ZY ZY ZY +zY +bt +bt +zY +zY +zY ZY ZY ZY ZY ZY ZY +zY +zY ZY ZY ZY +kV +zY +bt +bt +zY +zY +bt +bt +bt +zY +zY +kV ZY ZY ZY ZY ZY -Bx ZY ZY ZY @@ -5573,23 +13042,39 @@ ZY ZY ZY ZY +Sm ZY ZY ZY +kV +zY +zY +bt +bt +zY +bt +zY +bt +bt +kV ZY ZY "} -(76,1,1) = {" -ZY -ZY -ZY -ZY +(75,1,1) = {" ZY ZY ZY ZY ZY ZY +kV +kV +bt +zY +zY +bt +bt +bt ZY ZY ZY @@ -5598,9 +13083,21 @@ ZY ZY ZY ZY +kV ZY ZY ZY +kV +zY +zY +zY +zY +bt +bt +bt +zY +zY +kV ZY ZY ZY @@ -5618,23 +13115,45 @@ ZY ZY ZY ZY +Sm ZY ZY +kV +bt +zY +bt +bt +bt +bt +bt +zY +bt +kV ZY ZY ZY +"} +(76,1,1) = {" ZY ZY ZY ZY ZY ZY +kV +zY +bt +bt +bt +zY +zY +kV ZY ZY +OS ZY ZY ZY -Bx ZY ZY ZY @@ -5642,6 +13161,16 @@ ZY ZY ZY ZY +zY +zY +bt +bt +zY +zY +zY +zY +kV +kV ZY ZY ZY @@ -5651,8 +13180,6 @@ ZY ZY ZY ZY -"} -(77,1,1) = {" ZY ZY ZY @@ -5661,20 +13188,39 @@ ZY ZY ZY ZY +Sm ZY ZY ZY ZY ZY +kV +bt +bt +bt +bt +bt +kV ZY ZY +xw ZY +"} +(77,1,1) = {" ZY ZY ZY ZY ZY ZY +zY +zY +zY +bt +zY +zY +kV +kV ZY ZY ZY @@ -5685,8 +13231,16 @@ ZY ZY ZY ZY +xw ZY ZY +zY +zY +zY +kV +kV +kV +kV ZY ZY ZY @@ -5707,7 +13261,7 @@ ZY ZY ZY ZY -Bx +Sm ZY ZY ZY @@ -5731,6 +13285,13 @@ ZY ZY ZY ZY +kV +zY +bt +bt +bt +bt +kV ZY ZY ZY @@ -5746,6 +13307,8 @@ ZY ZY ZY ZY +kV +kV ZY ZY ZY @@ -5771,21 +13334,12 @@ ZY ZY ZY ZY +Sm ZY ZY ZY ZY -ZY -ZY -ZY -ZY -ZY -Bx -ZY -ZY -ZY -ZY -ZY +xw ZY ZY ZY @@ -5853,7 +13407,7 @@ ZY ZY ZY ZY -Bx +Sm ZY ZY ZY diff --git a/_maps/RandomRuins/SpaceRuins/nova/port_tarkon/cargo_secure.dmm b/_maps/RandomRuins/SpaceRuins/nova/port_tarkon/cargo_secure.dmm new file mode 100644 index 00000000000..bfcd8c05c93 --- /dev/null +++ b/_maps/RandomRuins/SpaceRuins/nova/port_tarkon/cargo_secure.dmm @@ -0,0 +1,296 @@ +//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE +"a" = ( +/obj/structure/rack/shelf, +/turf/template_noop, +/area/template_noop) +"e" = ( +/obj/structure/rack/shelf, +/obj/structure/window/reinforced/spawner/directional/east, +/obj/machinery/door/window/brigdoor/right/directional/north{ + req_access = list("tarkon") + }, +/obj/machinery/door/window/brigdoor/right/directional/south{ + req_access = list("tarkon") + }, +/obj/item/clothing/gloves/color/yellow, +/obj/item/storage/belt/utility, +/turf/template_noop, +/area/template_noop) +"g" = ( +/obj/structure/rack/shelf, +/obj/item/clothing/suit/hazardvest, +/obj/item/clothing/gloves/color/black, +/obj/item/clothing/head/utility/hardhat/orange, +/turf/template_noop, +/area/template_noop) +"h" = ( +/obj/structure/rack/shelf, +/obj/item/ammo_box/magazine/c35sol_pistol/stendo/starts_empty, +/obj/item/ammo_box/magazine/c35sol_pistol/stendo/starts_empty, +/obj/item/ammo_box/magazine/c35sol_pistol/stendo/starts_empty, +/turf/template_noop, +/area/template_noop) +"m" = ( +/obj/structure/rack/shelf, +/obj/item/stack/sheet/rglass{ + amount = 50 + }, +/obj/item/stack/sheet/plasteel/fifty, +/turf/template_noop, +/area/template_noop) +"n" = ( +/obj/structure/rack/shelf, +/obj/item/holosign_creator/janibarrier, +/obj/item/grenade/chem_grenade/cleaner, +/obj/item/grenade/chem_grenade/cleaner, +/obj/item/grenade/chem_grenade/cleaner, +/obj/item/grenade/chem_grenade/cleaner, +/obj/item/grenade/chem_grenade/cleaner, +/obj/item/grenade/chem_grenade/cleaner, +/obj/item/grenade/chem_grenade/cleaner, +/obj/item/grenade/chem_grenade/cleaner, +/obj/item/reagent_containers/spray/cleaner, +/obj/item/reagent_containers/spray/cleaner, +/obj/item/reagent_containers/spray/cleaner, +/turf/template_noop, +/area/template_noop) +"s" = ( +/obj/structure/rack/shelf, +/obj/structure/window/reinforced/spawner/directional/east, +/obj/machinery/door/window/brigdoor/right/directional/north{ + req_access = list("tarkon") + }, +/obj/machinery/door/window/brigdoor/right/directional/south{ + req_access = list("tarkon") + }, +/obj/item/mod/core/standard, +/obj/item/mod/core/standard, +/obj/item/mod/core/standard, +/obj/item/mod/core/standard, +/obj/item/mod/core/standard, +/turf/template_noop, +/area/template_noop) +"v" = ( +/obj/machinery/door/window/brigdoor/right/directional/north{ + req_access = list("tarkon") + }, +/turf/template_noop, +/area/template_noop) +"B" = ( +/obj/structure/rack/shelf, +/obj/structure/window/reinforced/spawner/directional/west, +/obj/machinery/door/window/brigdoor/left/directional/north{ + req_access = list("tarkon") + }, +/obj/machinery/door/window/brigdoor/left/directional/south{ + req_access = list("tarkon") + }, +/obj/item/construction/rcd/arcd/mattermanipulator, +/turf/template_noop, +/area/template_noop) +"C" = ( +/obj/modular_map_connector, +/obj/structure/rack/shelf, +/obj/effect/spawner/random/bedsheet/double, +/obj/effect/spawner/random/bedsheet/double, +/obj/effect/spawner/random/bedsheet/double, +/obj/effect/spawner/random/bedsheet/double, +/obj/effect/spawner/random/bedsheet/double, +/obj/effect/spawner/random/bedsheet/double, +/obj/effect/spawner/random/bedsheet/double, +/obj/effect/spawner/random/bedsheet/double, +/obj/effect/spawner/random/bedsheet/double, +/obj/effect/spawner/random/bedsheet/double, +/obj/effect/spawner/random/bedsheet/double, +/turf/template_noop, +/area/template_noop) +"D" = ( +/turf/template_noop, +/area/template_noop) +"E" = ( +/obj/structure/rack/shelf, +/obj/item/rcd_ammo/large, +/obj/item/rcd_ammo/large, +/obj/item/rcd_ammo/large, +/turf/template_noop, +/area/template_noop) +"F" = ( +/obj/structure/rack/shelf, +/obj/structure/window/reinforced/spawner/directional/west, +/obj/machinery/door/window/brigdoor/left/directional/north{ + req_access = list("tarkon") + }, +/obj/machinery/door/window/brigdoor/left/directional/south{ + req_access = list("tarkon") + }, +/obj/item/storage/medkit/advanced, +/obj/item/storage/medkit/brute, +/obj/item/storage/medkit/fire, +/obj/item/storage/medkit/regular, +/obj/item/storage/medkit/regular, +/turf/template_noop, +/area/template_noop) +"G" = ( +/obj/structure/rack/shelf, +/obj/effect/spawner/random/decoration/carpet, +/turf/template_noop, +/area/template_noop) +"H" = ( +/obj/machinery/door/window/brigdoor/left/directional/north{ + req_access = list("tarkon") + }, +/turf/template_noop, +/area/template_noop) +"L" = ( +/obj/item/pizzabox/margherita, +/obj/item/pizzabox/meat, +/obj/item/pizzabox/mushroom, +/obj/item/pizzabox/margherita, +/obj/item/pizzabox/meat, +/obj/item/pizzabox/mushroom, +/obj/structure/closet/crate/freezer, +/obj/machinery/door/window/brigdoor/right/directional/north{ + req_access = list("tarkon") + }, +/turf/template_noop, +/area/template_noop) +"O" = ( +/obj/structure/rack/shelf, +/obj/structure/window/reinforced/spawner/directional/west, +/obj/machinery/door/window/brigdoor/left/directional/north{ + req_access = list("tarkon") + }, +/obj/machinery/door/window/brigdoor/left/directional/south{ + req_access = list("tarkon") + }, +/obj/item/stack/sheet/mineral/plasma/thirty, +/turf/template_noop, +/area/template_noop) +"P" = ( +/obj/structure/rack/shelf, +/obj/item/storage/backpack/duffelbag/mining_conscript, +/turf/template_noop, +/area/template_noop) +"T" = ( +/obj/structure/rack/shelf, +/obj/structure/window/reinforced/spawner/directional/east, +/obj/machinery/door/window/brigdoor/right/directional/north{ + req_access = list("tarkon") + }, +/obj/machinery/door/window/brigdoor/right/directional/south{ + req_access = list("tarkon") + }, +/obj/item/stack/sheet/mineral/gold{ + amount = 25 + }, +/turf/template_noop, +/area/template_noop) + +(1,1,1) = {" +m +g +n +C +D +H +h +"} +(2,1,1) = {" +D +D +D +D +D +L +a +"} +(3,1,1) = {" +D +D +D +D +D +D +D +"} +(4,1,1) = {" +D +D +O +D +D +D +D +"} +(5,1,1) = {" +D +D +T +D +D +D +D +"} +(6,1,1) = {" +D +D +F +D +D +D +D +"} +(7,1,1) = {" +D +D +e +D +D +D +D +"} +(8,1,1) = {" +D +D +B +D +D +D +D +"} +(9,1,1) = {" +D +D +s +D +D +D +D +"} +(10,1,1) = {" +D +D +D +D +D +D +D +"} +(11,1,1) = {" +D +D +D +D +D +H +P +"} +(12,1,1) = {" +G +G +G +E +D +v +a +"} diff --git a/_maps/RandomRuins/SpaceRuins/nova/port_tarkon/cargo_stock.dmm b/_maps/RandomRuins/SpaceRuins/nova/port_tarkon/cargo_stock.dmm new file mode 100644 index 00000000000..e24f7119c3d --- /dev/null +++ b/_maps/RandomRuins/SpaceRuins/nova/port_tarkon/cargo_stock.dmm @@ -0,0 +1,218 @@ +//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE +"a" = ( +/obj/structure/rack/shelf, +/turf/template_noop, +/area/template_noop) +"b" = ( +/turf/template_noop, +/area/template_noop) +"e" = ( +/obj/modular_map_connector, +/turf/template_noop, +/area/template_noop) +"f" = ( +/obj/structure/closet/crate/engineering, +/obj/item/stack/sheet/plasteel/fifty, +/obj/item/stack/sheet/rglass{ + amount = 50 + }, +/obj/item/stack/sheet/mineral/plasma/thirty, +/turf/template_noop, +/area/template_noop) +"i" = ( +/obj/item/pizzabox/mushroom, +/obj/item/pizzabox/meat, +/obj/item/pizzabox/margherita, +/obj/item/pizzabox/mushroom, +/obj/item/pizzabox/meat, +/obj/item/pizzabox/margherita, +/obj/structure/closet/crate/freezer, +/turf/template_noop, +/area/template_noop) +"q" = ( +/obj/structure/rack/shelf, +/obj/item/crowbar, +/turf/template_noop, +/area/template_noop) +"s" = ( +/obj/structure/closet/crate, +/obj/item/storage/belt/utility, +/obj/item/clothing/gloves/color/black, +/obj/item/clothing/head/utility/hardhat/orange, +/obj/item/clothing/suit/hazardvest, +/obj/item/clothing/gloves/color/yellow, +/turf/template_noop, +/area/template_noop) +"B" = ( +/obj/structure/closet/crate, +/obj/effect/spawner/random/bedsheet, +/obj/effect/spawner/random/bedsheet, +/obj/effect/spawner/random/bedsheet, +/obj/effect/spawner/random/bedsheet, +/obj/effect/spawner/random/bedsheet, +/obj/effect/spawner/random/bedsheet, +/obj/effect/spawner/random/bedsheet, +/obj/effect/spawner/random/bedsheet/double, +/obj/effect/spawner/random/bedsheet/double, +/obj/effect/spawner/random/bedsheet/double, +/obj/effect/spawner/random/bedsheet/double, +/turf/template_noop, +/area/template_noop) +"D" = ( +/obj/structure/closet/crate/secure/science, +/obj/item/mod/construction/broken_core, +/obj/item/mod/construction/broken_core, +/obj/item/mod/construction/broken_core, +/obj/item/mod/construction/broken_core, +/obj/item/mod/construction/broken_core, +/turf/template_noop, +/area/template_noop) +"F" = ( +/obj/structure/rack/shelf, +/obj/effect/spawner/random/decoration/carpet, +/obj/effect/spawner/random/decoration/carpet, +/obj/effect/spawner/random/decoration/carpet, +/turf/template_noop, +/area/template_noop) +"H" = ( +/obj/structure/closet/crate, +/obj/item/reagent_containers/spray/cleaner, +/obj/item/reagent_containers/spray/cleaner, +/obj/item/reagent_containers/spray/cleaner, +/obj/item/grenade/chem_grenade/cleaner, +/obj/item/grenade/chem_grenade/cleaner, +/obj/item/grenade/chem_grenade/cleaner, +/obj/item/grenade/chem_grenade/cleaner, +/obj/item/grenade/chem_grenade/cleaner, +/obj/item/grenade/chem_grenade/cleaner, +/obj/item/grenade/chem_grenade/cleaner, +/obj/item/grenade/chem_grenade/cleaner, +/obj/item/holosign_creator/janibarrier, +/turf/template_noop, +/area/template_noop) +"J" = ( +/obj/item/construction/rcd/arcd/mattermanipulator, +/obj/item/rcd_ammo/large, +/obj/item/rcd_ammo/large, +/obj/item/rcd_ammo/large, +/obj/structure/closet/crate/secure/engineering, +/turf/template_noop, +/area/template_noop) +"S" = ( +/obj/structure/closet/crate/medical, +/obj/item/storage/medkit/advanced, +/obj/item/storage/medkit/brute, +/obj/item/storage/medkit/fire, +/obj/item/storage/medkit/regular, +/obj/item/storage/medkit/regular, +/turf/template_noop, +/area/template_noop) + +(1,1,1) = {" +f +b +b +e +b +b +F +"} +(2,1,1) = {" +b +b +b +b +b +b +a +"} +(3,1,1) = {" +b +b +b +b +b +b +b +"} +(4,1,1) = {" +b +b +b +b +i +b +b +"} +(5,1,1) = {" +b +b +D +b +b +b +b +"} +(6,1,1) = {" +b +b +b +b +b +b +b +"} +(7,1,1) = {" +s +b +b +b +b +b +b +"} +(8,1,1) = {" +b +b +b +b +b +b +b +"} +(9,1,1) = {" +b +b +J +b +b +b +b +"} +(10,1,1) = {" +b +b +b +b +b +b +b +"} +(11,1,1) = {" +b +b +b +b +b +b +q +"} +(12,1,1) = {" +B +H +b +b +S +b +a +"} diff --git a/_maps/RandomRuins/SpaceRuins/nova/port_tarkon/cargo_warehouse.dmm b/_maps/RandomRuins/SpaceRuins/nova/port_tarkon/cargo_warehouse.dmm new file mode 100644 index 00000000000..a7298e65f5e --- /dev/null +++ b/_maps/RandomRuins/SpaceRuins/nova/port_tarkon/cargo_warehouse.dmm @@ -0,0 +1,296 @@ +//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE +"a" = ( +/obj/structure/rack/shelf, +/obj/item/stack/sheet/mineral/titanium/fifty, +/turf/template_noop, +/area/template_noop) +"b" = ( +/obj/structure/rack/shelf, +/obj/item/stack/sheet/mineral/gold{ + amount = 25 + }, +/turf/template_noop, +/area/template_noop) +"g" = ( +/obj/item/reagent_containers/spray/cleaner, +/obj/item/reagent_containers/spray/cleaner, +/obj/item/reagent_containers/spray/cleaner, +/obj/structure/rack/shelf, +/turf/template_noop, +/area/template_noop) +"i" = ( +/obj/structure/spawner/tarkon_xenos/minor, +/turf/template_noop, +/area/template_noop) +"l" = ( +/obj/structure/rack/shelf, +/obj/item/mod/construction/broken_core, +/obj/item/mod/construction/broken_core, +/obj/item/mod/construction/broken_core, +/obj/item/mod/construction/broken_core, +/obj/item/mod/construction/broken_core, +/turf/template_noop, +/area/template_noop) +"m" = ( +/obj/structure/rack/shelf, +/obj/item/storage/belt/utility, +/turf/template_noop, +/area/template_noop) +"n" = ( +/obj/structure/rack/shelf, +/obj/item/grenade/chem_grenade/cleaner, +/obj/item/grenade/chem_grenade/cleaner, +/obj/item/grenade/chem_grenade/cleaner, +/obj/item/grenade/chem_grenade/cleaner, +/obj/item/grenade/chem_grenade/cleaner, +/obj/item/grenade/chem_grenade/cleaner, +/obj/item/grenade/chem_grenade/cleaner, +/obj/item/grenade/chem_grenade/cleaner, +/obj/item/grenade/chem_grenade/cleaner, +/turf/template_noop, +/area/template_noop) +"p" = ( +/obj/structure/rack/shelf, +/obj/item/pizzabox/mushroom, +/obj/item/pizzabox/meat, +/obj/item/pizzabox/margherita, +/obj/item/pizzabox/mushroom, +/obj/item/pizzabox/meat, +/obj/item/pizzabox/margherita, +/turf/template_noop, +/area/template_noop) +"q" = ( +/obj/item/stack/sheet/plasteel/fifty, +/obj/structure/rack/shelf, +/turf/template_noop, +/area/template_noop) +"r" = ( +/obj/structure/rack/shelf, +/obj/item/clothing/head/utility/hardhat/orange, +/turf/template_noop, +/area/template_noop) +"w" = ( +/obj/structure/alien/weeds/node, +/turf/template_noop, +/area/template_noop) +"x" = ( +/obj/structure/rack/shelf, +/obj/item/clothing/gloves/color/yellow, +/obj/item/clothing/gloves/color/black, +/turf/template_noop, +/area/template_noop) +"B" = ( +/obj/structure/rack/shelf, +/obj/item/construction/rcd/arcd/mattermanipulator, +/turf/template_noop, +/area/template_noop) +"D" = ( +/obj/structure/rack/shelf, +/obj/item/stack/sheet/iron/fifty, +/obj/structure/alien/weeds/node, +/turf/template_noop, +/area/template_noop) +"E" = ( +/turf/template_noop, +/area/template_noop) +"F" = ( +/obj/structure/rack/shelf, +/obj/item/clothing/suit/hazardvest, +/turf/template_noop, +/area/template_noop) +"J" = ( +/obj/structure/rack/shelf, +/obj/item/stack/sheet/rglass{ + amount = 50 + }, +/turf/template_noop, +/area/template_noop) +"K" = ( +/obj/structure/rack/shelf, +/obj/item/storage/toolbox/mechanical, +/obj/item/storage/toolbox/mechanical, +/turf/template_noop, +/area/template_noop) +"L" = ( +/obj/structure/rack/shelf, +/obj/item/storage/medkit/advanced, +/turf/template_noop, +/area/template_noop) +"N" = ( +/obj/structure/rack/shelf, +/obj/item/storage/toolbox/electrical, +/obj/item/storage/toolbox/electrical, +/turf/template_noop, +/area/template_noop) +"O" = ( +/obj/structure/rack/shelf, +/obj/item/stack/sheet/mineral/plasma/thirty, +/turf/template_noop, +/area/template_noop) +"P" = ( +/obj/structure/rack/shelf, +/obj/item/storage/medkit/fire, +/turf/template_noop, +/area/template_noop) +"Q" = ( +/obj/structure/rack/shelf, +/obj/item/storage/medkit/brute, +/turf/template_noop, +/area/template_noop) +"R" = ( +/obj/structure/rack/shelf, +/obj/item/rcd_ammo/large, +/obj/item/rcd_ammo/large, +/obj/item/rcd_ammo/large, +/turf/template_noop, +/area/template_noop) +"S" = ( +/obj/structure/rack/shelf, +/obj/effect/spawner/random/decoration/carpet, +/turf/template_noop, +/area/template_noop) +"T" = ( +/obj/effect/spawner/random/bedsheet, +/obj/effect/spawner/random/bedsheet, +/obj/effect/spawner/random/bedsheet, +/obj/effect/spawner/random/bedsheet, +/obj/effect/spawner/random/bedsheet, +/obj/effect/spawner/random/bedsheet, +/obj/effect/spawner/random/bedsheet, +/obj/effect/spawner/random/bedsheet/double, +/obj/effect/spawner/random/bedsheet/double, +/obj/effect/spawner/random/bedsheet/double, +/obj/effect/spawner/random/bedsheet/double, +/obj/structure/rack/shelf, +/turf/template_noop, +/area/template_noop) +"V" = ( +/obj/modular_map_connector, +/obj/structure/rack/shelf, +/turf/template_noop, +/area/template_noop) +"W" = ( +/obj/structure/rack/shelf, +/obj/item/storage/medkit/regular, +/obj/item/storage/medkit/regular, +/turf/template_noop, +/area/template_noop) +"X" = ( +/obj/structure/rack/shelf, +/obj/item/holosign_creator/janibarrier, +/turf/template_noop, +/area/template_noop) +"Y" = ( +/obj/structure/rack/shelf, +/obj/item/stack/sheet/glass/fifty, +/turf/template_noop, +/area/template_noop) + +(1,1,1) = {" +q +D +X +V +Y +O +a +"} +(2,1,1) = {" +E +E +E +E +E +E +w +"} +(3,1,1) = {" +E +L +E +J +E +E +E +"} +(4,1,1) = {" +E +Q +E +W +E +E +E +"} +(5,1,1) = {" +E +m +w +S +E +E +E +"} +(6,1,1) = {" +E +l +E +r +E +E +E +"} +(7,1,1) = {" +E +x +E +K +E +E +E +"} +(8,1,1) = {" +w +S +E +N +E +w +E +"} +(9,1,1) = {" +E +p +E +P +E +E +E +"} +(10,1,1) = {" +E +B +E +R +E +E +E +"} +(11,1,1) = {" +E +E +E +E +w +i +w +"} +(12,1,1) = {" +T +g +O +F +S +n +b +"} diff --git a/_maps/RandomRuins/SpaceRuins/nova/port_tarkon/defcon2.dmm b/_maps/RandomRuins/SpaceRuins/nova/port_tarkon/defcon2.dmm deleted file mode 100644 index 38bd228c60d..00000000000 --- a/_maps/RandomRuins/SpaceRuins/nova/port_tarkon/defcon2.dmm +++ /dev/null @@ -1,14361 +0,0 @@ -//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE -"ad" = ( -/obj/machinery/atmospherics/components/unary/portables_connector/visible{ - dir = 8 - }, -/obj/effect/turf_decal/tile/red/fourcorners{ - color = "#DE3A3A" - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/atmos) -"af" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/cable, -/obj/effect/decal/cleanable/blood/tracks{ - dir = 4 - }, -/obj/effect/decal/cleanable/dirt, -/turf/closed/wall/mineral/cult/artificer, -/area/ruin/space/has_grav/port_tarkon/forehall) -"ah" = ( -/obj/effect/turf_decal/tile/blue/half, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/trauma) -"ai" = ( -/obj/machinery/cryopod{ - dir = 4 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/centerhall) -"aj" = ( -/turf/closed/wall/mineral/cult/artificer, -/area/ruin/space/has_grav/port_tarkon/mining) -"ak" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/door/firedoor/solid, -/obj/machinery/door/airlock/engineering/glass{ - name = "P-T Tool Storage" - }, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/toolstorage) -"al" = ( -/obj/machinery/power/shuttle_engine/propulsion{ - dir = 4 - }, -/turf/open/space/basic, -/area/ruin/space/has_grav) -"am" = ( -/obj/structure/mop_bucket, -/obj/item/mop, -/obj/item/reagent_containers/cup/bucket, -/obj/item/soap/nanotrasen, -/turf/open/floor/plating, -/area/ruin/space/has_grav/port_tarkon/afthall) -"an" = ( -/obj/machinery/firealarm/directional/east, -/obj/effect/turf_decal/tile/blue/half{ - dir = 4 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/port_tarkon/comms) -"aq" = ( -/obj/structure/toilet{ - dir = 8 - }, -/obj/structure/window/reinforced/tinted/spawner/directional/north, -/obj/machinery/door/window/left/directional/west{ - opacity = 1 - }, -/turf/open/floor/iron/white, -/area/ruin/space/has_grav/port_tarkon/centerhall) -"as" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/cable, -/obj/machinery/light/dim/directional/south, -/obj/machinery/light_switch/directional/south, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/observ) -"at" = ( -/obj/structure/chair/sofa/corp/corner{ - dir = 8 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/observ) -"au" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/statue/bone/rib{ - dir = 1 - }, -/turf/open/floor/cult, -/area/ruin/space/has_grav/port_tarkon/centerhall) -"av" = ( -/obj/effect/turf_decal/stripes/asteroid/line{ - dir = 4 - }, -/turf/open/misc/asteroid/airless, -/area/solars/tarkon) -"aA" = ( -/mob/living/basic/construct/proteon/hostile, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/cult, -/area/ruin/space/has_grav/port_tarkon/observ) -"aF" = ( -/obj/effect/turf_decal/stripes/asteroid/corner{ - dir = 8 - }, -/turf/open/misc/asteroid/airless, -/area/solars/tarkon) -"aK" = ( -/obj/effect/decal/cleanable/dirt, -/obj/machinery/hydroponics/soil, -/obj/effect/decal/cleanable/blood, -/turf/open/floor/grass, -/area/ruin/space/has_grav/port_tarkon/garden) -"aM" = ( -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/cult, -/area/ruin/space/has_grav/port_tarkon/porthall) -"aO" = ( -/mob/living/basic/construct/wraith/hostile{ - health = 125; - maxHealth = 125 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/porthall) -"aP" = ( -/obj/effect/spawner/structure/window/reinforced, -/turf/open/floor/plating, -/area/ruin/space/has_grav/port_tarkon/storage) -"aS" = ( -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ - dir = 8 - }, -/obj/structure/table/rolling, -/obj/item/surgery_tray/full, -/obj/item/clothing/gloves/latex{ - pixel_y = 10 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/trauma) -"aT" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/mining) -"aU" = ( -/obj/structure/table/reinforced, -/obj/item/card/id/away/tarkon{ - pixel_y = -6 - }, -/obj/item/card/id/away/tarkon, -/obj/item/card/id/away/tarkon{ - pixel_y = 6 - }, -/obj/item/folder/red, -/obj/effect/turf_decal/tile/red/half, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/secoff) -"aV" = ( -/turf/closed/wall/mineral/cult/artificer, -/area/ruin/space/has_grav/port_tarkon/power1) -"aX" = ( -/obj/structure/cable, -/obj/machinery/airalarm/directional/north, -/obj/effect/mapping_helpers/airalarm/all_access, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/effect/turf_decal/tile/yellow/half{ - dir = 1 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/power1) -"aY" = ( -/obj/structure/table, -/obj/item/stack/sheet/mineral/silver{ - amount = 25 - }, -/obj/machinery/airalarm/directional/east, -/obj/effect/mapping_helpers/airalarm/all_access, -/obj/effect/turf_decal/tile/purple/anticorner, -/obj/item/circuitboard/machine/module_duplicator, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/port_tarkon/developement) -"aZ" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/blood, -/turf/open/floor/grass, -/area/ruin/space/has_grav/port_tarkon/garden) -"ba" = ( -/obj/structure/table/optable, -/obj/effect/turf_decal/tile/blue/anticorner, -/obj/effect/mob_spawn/corpse/human/doctor, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/trauma) -"bb" = ( -/turf/closed/wall/mineral/cult/artificer, -/area/ruin/space/has_grav/port_tarkon/starboardhall) -"bc" = ( -/obj/effect/turf_decal/tile/brown/half{ - dir = 8 - }, -/obj/item/pizzabox/mushroom, -/obj/item/pizzabox/meat, -/obj/item/pizzabox/margherita, -/obj/item/pizzabox/mushroom, -/obj/item/pizzabox/meat, -/obj/item/pizzabox/margherita, -/obj/structure/closet/crate/freezer, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/storage) -"bg" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/cable, -/obj/machinery/door/airlock/security/old, -/obj/effect/mapping_helpers/airlock/access/all/tarkon/general, -/obj/machinery/door/firedoor/solid, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/secoff) -"bi" = ( -/obj/effect/turf_decal/tile/neutral, -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/centerhall) -"bj" = ( -/obj/machinery/light/warm/directional/south, -/obj/effect/decal/cleanable/glass, -/obj/effect/decal/cleanable/blood, -/obj/structure/statue/bone/rib{ - dir = 1 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/cult, -/area/ruin/space/has_grav/port_tarkon/developement) -"bl" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/cable, -/obj/effect/decal/cleanable/blood/tracks, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/forehall) -"bm" = ( -/obj/machinery/light_switch/directional/south, -/obj/effect/turf_decal/tile/purple/half, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/port_tarkon/developement) -"bn" = ( -/obj/effect/turf_decal/stripes{ - dir = 1 - }, -/obj/machinery/button/door/incinerator_vent_atmos_aux{ - pixel_x = -8; - pixel_y = -24; - req_one_access = list("tarkon") - }, -/obj/machinery/button/door/incinerator_vent_atmos_main{ - pixel_x = -8; - pixel_y = -36; - req_one_access = list("tarkon") - }, -/obj/machinery/atmospherics/components/binary/pump/off/general{ - dir = 8 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/port_tarkon/atmos) -"bo" = ( -/obj/effect/turf_decal/tile/brown/half, -/obj/effect/decal/cleanable/blood/tracks{ - dir = 10 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/cargo) -"br" = ( -/obj/machinery/firealarm/directional/west, -/obj/effect/turf_decal/tile/neutral/half{ - dir = 8 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/centerhall) -"bs" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/decal/cleanable/glass, -/obj/effect/decal/cleanable/blood, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/cult, -/area/ruin/space/has_grav/port_tarkon/developement) -"bt" = ( -/obj/effect/mapping_helpers/burnt_floor, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/plating, -/area/ruin/space/has_grav/port_tarkon/forehall) -"by" = ( -/obj/item/solar_assembly, -/obj/item/solar_assembly, -/obj/item/solar_assembly, -/obj/item/solar_assembly, -/obj/item/solar_assembly, -/obj/item/solar_assembly, -/obj/structure/closet/crate/engineering/electrical, -/obj/item/solar_assembly, -/obj/item/solar_assembly, -/obj/item/solar_assembly, -/obj/item/solar_assembly, -/obj/item/solar_assembly, -/obj/item/solar_assembly, -/obj/item/solar_assembly, -/obj/item/solar_assembly, -/obj/item/solar_assembly, -/obj/item/solar_assembly, -/obj/item/solar_assembly, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/plating, -/area/ruin/space/has_grav/port_tarkon/forehall) -"bz" = ( -/obj/structure/sign/warning/radiation, -/turf/closed/wall, -/area/ruin/space/has_grav/port_tarkon/power1) -"bA" = ( -/obj/machinery/door/firedoor/solid, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/garden) -"bD" = ( -/obj/structure/table/reinforced, -/obj/item/stack/sheet/glass/fifty, -/obj/effect/turf_decal/tile/yellow/anticorner, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/toolstorage) -"bF" = ( -/obj/machinery/iv_drip, -/obj/effect/turf_decal/tile/blue/half{ - dir = 4 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/trauma) -"bH" = ( -/turf/closed/wall/r_wall/rust, -/area/ruin/space/has_grav/port_tarkon/mining) -"bJ" = ( -/obj/effect/decal/cleanable/blood/tracks, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/cult, -/area/ruin/space/has_grav/port_tarkon/atmos) -"bK" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/cable, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/porthall) -"bL" = ( -/turf/closed/wall/mineral/cult/artificer, -/area/ruin/space/has_grav/port_tarkon/trauma) -"bO" = ( -/obj/structure/sign/warning/electric_shock, -/turf/closed/wall/r_wall, -/area/ruin/space/has_grav/port_tarkon/atmos) -"bS" = ( -/obj/machinery/door/airlock/titanium/glass, -/turf/open/floor/mineral/titanium, -/area/ruin/space/has_grav) -"bX" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/observ) -"bY" = ( -/obj/structure/rack/gunrack, -/obj/machinery/light/directional/north, -/obj/effect/turf_decal/tile/red/half{ - dir = 1 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/secoff) -"ca" = ( -/obj/effect/decal/cleanable/blood/tracks, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/cult, -/area/ruin/space/has_grav/port_tarkon/developement) -"cc" = ( -/obj/effect/decal/cleanable/blood, -/obj/item/storage/box/stockparts/basic, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/port_tarkon/developement) -"cd" = ( -/obj/structure/sign/warning/fire, -/turf/closed/wall/r_wall, -/area/ruin/space/has_grav/port_tarkon/atmos) -"ci" = ( -/obj/structure/closet/emcloset, -/turf/open/floor/cult, -/area/ruin/space/has_grav/port_tarkon/centerhall) -"ck" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/cafeteria, -/area/ruin/space/has_grav/port_tarkon/kitchen) -"cn" = ( -/obj/machinery/firealarm/directional/east, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/cult, -/area/ruin/space/has_grav/port_tarkon/starboardhall) -"co" = ( -/obj/item/solar_assembly, -/obj/effect/turf_decal/stripes/asteroid/line{ - dir = 1 - }, -/turf/open/misc/asteroid/airless, -/area/solars/tarkon) -"cp" = ( -/obj/structure/statue/bone/rib, -/turf/open/floor/cult, -/area/ruin/space/has_grav/port_tarkon) -"cr" = ( -/obj/structure/table, -/obj/item/paper/crumpled, -/obj/effect/turf_decal/tile/blue/half, -/obj/item/folder, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/port_tarkon/comms) -"ct" = ( -/obj/machinery/airalarm/directional/west, -/obj/effect/mapping_helpers/airalarm/all_access, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/cult, -/area/ruin/space/has_grav/port_tarkon/afthall) -"cu" = ( -/obj/structure/sign/warning/docking, -/turf/closed/wall/r_wall, -/area/ruin/space/has_grav/port_tarkon/storage) -"cv" = ( -/obj/machinery/atmospherics/components/binary/pump/off/general{ - dir = 8 - }, -/obj/effect/turf_decal/tile/dark/fourcorners, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/atmos) -"cA" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/layer_manifold/supply{ - dir = 4 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/centerhall) -"cD" = ( -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ - dir = 1 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/cult, -/area/ruin/space/has_grav/port_tarkon/secoff) -"cE" = ( -/obj/machinery/door/poddoor/shutters/window{ - id = "tarkoninner"; - name = "Interior Bay Shutter" - }, -/obj/effect/turf_decal/trimline/yellow/filled/warning{ - dir = 1 - }, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/storage) -"cK" = ( -/obj/structure/cable, -/obj/effect/turf_decal/delivery/white, -/obj/effect/turf_decal/tile/yellow/half{ - dir = 8 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/power1) -"cN" = ( -/obj/structure/statue/bone/rib, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/cult, -/area/ruin/space/has_grav/port_tarkon/forehall) -"cQ" = ( -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ - dir = 1 - }, -/obj/effect/decal/cleanable/blood/tracks, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/cult, -/area/ruin/space/has_grav/port_tarkon/storage) -"cR" = ( -/obj/structure/cable, -/obj/effect/decal/cleanable/blood, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/atmos) -"cT" = ( -/obj/machinery/light/warm/directional/east, -/obj/effect/turf_decal/tile/neutral/anticorner{ - dir = 4 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/centerhall) -"cU" = ( -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/starboardhall) -"cV" = ( -/turf/closed/wall, -/area/ruin/space/has_grav/port_tarkon/trauma) -"cX" = ( -/obj/machinery/door/firedoor/solid, -/obj/machinery/door/airlock/cult/unruned/glass, -/turf/open/floor/cult, -/area/ruin/space/has_grav/port_tarkon/porthall) -"cY" = ( -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ - dir = 1 - }, -/obj/effect/decal/cleanable/blood, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/secoff) -"db" = ( -/turf/closed/wall/mineral/cult/artificer, -/area/ruin/space/has_grav/port_tarkon/developement) -"de" = ( -/obj/effect/decal/cleanable/blood, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/cult, -/area/ruin/space/has_grav/port_tarkon/developement) -"df" = ( -/obj/machinery/light_switch/directional/west, -/obj/machinery/shower/directional/east, -/obj/effect/turf_decal/stripes{ - dir = 6 - }, -/obj/effect/decal/cleanable/dirt, -/obj/machinery/button/door{ - id = "ptatmos"; - name = "shutter controls"; - pixel_x = -39; - pixel_y = -10 - }, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/port_tarkon/atmos) -"dh" = ( -/obj/machinery/door/airlock/public/glass{ - name = "Fore Primary Hallway" - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/cable, -/obj/effect/decal/cleanable/blood/tracks, -/obj/machinery/door/firedoor/solid/closed, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/forehall) -"di" = ( -/obj/machinery/airalarm/directional/east, -/obj/effect/mapping_helpers/airalarm/all_access, -/obj/effect/turf_decal/tile/neutral/half{ - dir = 4 - }, -/obj/effect/decal/cleanable/blood, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/centerhall) -"dk" = ( -/obj/structure/closet/crate, -/obj/item/reagent_containers/spray/cleaner, -/obj/item/reagent_containers/spray/cleaner, -/obj/item/reagent_containers/spray/cleaner, -/obj/item/grenade/chem_grenade/cleaner, -/obj/item/grenade/chem_grenade/cleaner, -/obj/item/grenade/chem_grenade/cleaner, -/obj/item/grenade/chem_grenade/cleaner, -/obj/item/grenade/chem_grenade/cleaner, -/obj/item/grenade/chem_grenade/cleaner, -/obj/item/grenade/chem_grenade/cleaner, -/obj/item/grenade/chem_grenade/cleaner, -/obj/item/holosign_creator/janibarrier, -/obj/effect/turf_decal/tile/brown/half{ - dir = 4 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/storage) -"dl" = ( -/obj/machinery/airalarm/directional/north, -/obj/effect/mapping_helpers/airalarm/all_access, -/obj/machinery/light/dim/directional/north, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/atmos) -"do" = ( -/obj/effect/decal/cleanable/blood, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/porthall) -"dq" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/cable, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/cult, -/area/ruin/space/has_grav/port_tarkon) -"dr" = ( -/obj/docking_port/stationary{ - dir = 4; - dwidth = 6; - height = 16; - name = "Port Tarkon"; - roundstart_template = /datum/map_template/shuttle/ruin/tarkon_driver/defcon2; - shuttle_id = "port_tarkon"; - width = 14 - }, -/turf/open/misc/asteroid/airless, -/area/ruin/space/has_grav) -"ds" = ( -/obj/structure/closet/crate/secure/gear, -/obj/item/microfusion_gun_attachment/rail, -/obj/item/flashlight/seclite, -/turf/open/floor/mineral/titanium, -/area/ruin/space/has_grav) -"dt" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/structure/chair/sofa/corp{ - dir = 8 - }, -/mob/living/basic/construct/proteon/hostile, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/observ) -"dv" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/airalarm/directional/east, -/obj/effect/mapping_helpers/airalarm/all_access, -/obj/effect/decal/cleanable/blood, -/turf/open/floor/carpet/cyan, -/area/ruin/space/has_grav/port_tarkon/dorms) -"dw" = ( -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ - dir = 1 - }, -/obj/effect/decal/cleanable/blood/tracks{ - dir = 5 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/cult, -/area/ruin/space/has_grav/port_tarkon/comms) -"dx" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/decal/cleanable/blood/tracks, -/obj/effect/decal/cleanable/blood/tracks{ - dir = 5 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/cult, -/area/ruin/space/has_grav/port_tarkon/developement) -"dy" = ( -/obj/structure/sign/warning/electric_shock, -/turf/closed/wall, -/area/ruin/space/has_grav/port_tarkon/power1) -"dA" = ( -/obj/structure/table/reinforced, -/obj/item/clothing/head/helmet, -/obj/item/bodypart/head, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/cult, -/area/ruin/space/has_grav/port_tarkon/secoff) -"dC" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/effect/decal/cleanable/blood/tracks, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/atmos) -"dE" = ( -/obj/machinery/light/dim/directional/south, -/obj/effect/turf_decal/tile/brown/half, -/obj/structure/rack/shelf, -/obj/item/storage/medkit/advanced, -/obj/item/storage/medkit/brute, -/obj/item/storage/medkit/fire, -/obj/item/storage/medkit/regular, -/obj/item/storage/medkit/regular, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/cargo) -"dG" = ( -/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/neutral/half, -/obj/effect/decal/cleanable/blood, -/obj/item/gun/ballistic/automatic/m6pdw, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/centerhall) -"dJ" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/cult, -/area/ruin/space/has_grav/port_tarkon/cargo) -"dN" = ( -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/cult, -/area/ruin/space/has_grav/port_tarkon/forehall) -"dP" = ( -/mob/living/simple_animal/hostile/cult/spear{ - health = 125; - maxHealth = 125 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/cult, -/area/ruin/space/has_grav/port_tarkon/storage) -"dR" = ( -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/cult, -/area/ruin/space/has_grav/port_tarkon/mining) -"dT" = ( -/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/neutral/half{ - dir = 8 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/centerhall) -"dW" = ( -/obj/structure/closet/secure_closet/freezer/fridge/open, -/obj/item/reagent_containers/condiment/flour, -/obj/item/reagent_containers/condiment/flour, -/obj/item/reagent_containers/condiment/flour, -/obj/item/reagent_containers/condiment/flour, -/obj/item/reagent_containers/condiment/sugar, -/obj/item/reagent_containers/condiment/sugar, -/turf/open/floor/iron/cafeteria, -/area/ruin/space/has_grav/port_tarkon/kitchen) -"dX" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/turf_decal/tile/neutral, -/obj/effect/decal/cleanable/blood, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/centerhall) -"dZ" = ( -/obj/machinery/autolathe, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/cult, -/area/ruin/space/has_grav/port_tarkon/toolstorage) -"ef" = ( -/obj/effect/turf_decal/tile/purple/half{ - dir = 1 - }, -/obj/structure/table/reinforced, -/obj/structure/frame/machine, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/port_tarkon/developement) -"eg" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/decal/cleanable/blood, -/obj/effect/mob_spawn/corpse/human/assistant, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/cult, -/area/ruin/space/has_grav/port_tarkon/centerhall) -"eo" = ( -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ - dir = 4 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/cult, -/area/ruin/space/has_grav/port_tarkon/developement) -"ev" = ( -/obj/effect/decal/cleanable/blood, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/cult, -/area/ruin/space/has_grav/port_tarkon/garden) -"ew" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/cult, -/area/ruin/space/has_grav/port_tarkon/developement) -"ez" = ( -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/cult, -/area/ruin/space/has_grav/port_tarkon/atmos) -"eA" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/decal/cleanable/blood/tracks{ - dir = 4 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/cult, -/area/ruin/space/has_grav/port_tarkon/cargo) -"eB" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/cable, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/cult, -/area/ruin/space/has_grav/port_tarkon/secoff) -"eD" = ( -/obj/machinery/power/terminal{ - dir = 8 - }, -/obj/structure/cable, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/plating, -/area/ruin/space/has_grav/port_tarkon/power1) -"eE" = ( -/obj/structure/table/reinforced, -/obj/item/assembly/signaler, -/obj/effect/turf_decal/tile/yellow/half{ - dir = 1 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/toolstorage) -"eG" = ( -/obj/machinery/light/dim/directional/west, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/cult, -/area/ruin/space/has_grav/port_tarkon/forehall) -"eI" = ( -/turf/closed/wall, -/area/ruin/space/has_grav/port_tarkon/starboardhall) -"eK" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/airalarm/directional/east, -/obj/effect/mapping_helpers/airalarm/all_access, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/starboardhall) -"eL" = ( -/obj/machinery/door/airlock/public, -/obj/machinery/door/firedoor/solid, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/observ) -"eM" = ( -/obj/structure/closet, -/obj/item/gun/energy/recharge/kinetic_accelerator, -/obj/item/storage/backpack/satchel/explorer, -/obj/item/clothing/shoes/workboots/mining, -/obj/item/t_scanner/adv_mining_scanner/lesser, -/obj/item/storage/bag/ore, -/obj/effect/turf_decal/tile/brown/half, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/mining) -"eQ" = ( -/obj/machinery/computer/atmos_control/tarkon/incinerator{ - dir = 1 - }, -/obj/machinery/airalarm/directional/south, -/obj/effect/mapping_helpers/airalarm/all_access, -/obj/effect/turf_decal/stripes{ - dir = 4 - }, -/obj/structure/cable, -/turf/open/floor/engine, -/area/ruin/space/has_grav/port_tarkon/atmos) -"eU" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/structure/cable, -/mob/living/simple_animal/hostile/cult/spear{ - health = 125; - maxHealth = 125 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/port_tarkon/developement) -"eW" = ( -/obj/structure/lattice, -/turf/open/misc/asteroid, -/area/ruin/space/has_grav) -"eZ" = ( -/obj/machinery/atmospherics/components/unary/vent_scrubber/layer2{ - dir = 8 - }, -/turf/open/floor/engine/vacuum, -/area/ruin/space/has_grav/port_tarkon/atmos) -"fa" = ( -/obj/effect/turf_decal/tile/purple/half{ - dir = 1 - }, -/obj/machinery/computer, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/port_tarkon/developement) -"ff" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/turf_decal/tile/neutral/half{ - dir = 8 - }, -/obj/effect/decal/cleanable/blood, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/centerhall) -"fh" = ( -/obj/effect/decal/cleanable/glass, -/obj/structure/statue/bone/rib, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/cult, -/area/ruin/space/has_grav/port_tarkon/developement) -"fi" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/decal/cleanable/blood, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/cult, -/area/ruin/space/has_grav/port_tarkon/mining) -"fl" = ( -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/toolstorage) -"fm" = ( -/obj/effect/decal/cleanable/blood, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/cult, -/area/ruin/space/has_grav/port_tarkon/centerhall) -"fp" = ( -/obj/machinery/airalarm/directional/north, -/obj/effect/mapping_helpers/airalarm/all_access, -/obj/structure/closet, -/obj/item/clothing/gloves/color/plasmaman/black, -/obj/item/clothing/gloves/color/plasmaman/black, -/obj/item/clothing/gloves/color/plasmaman/black, -/obj/item/clothing/gloves/color/plasmaman/black, -/obj/item/clothing/gloves/color/plasmaman/chief_engineer, -/obj/item/clothing/head/helmet/space/plasmaman, -/obj/item/clothing/head/helmet/space/plasmaman, -/obj/item/clothing/head/helmet/space/plasmaman, -/obj/item/clothing/head/helmet/space/plasmaman, -/obj/item/clothing/head/helmet/space/plasmaman, -/obj/item/clothing/under/plasmaman, -/obj/item/clothing/under/plasmaman, -/obj/item/clothing/under/plasmaman, -/obj/item/clothing/under/plasmaman, -/obj/item/clothing/under/plasmaman, -/obj/item/tank/internals/plasmaman/belt/full, -/obj/item/tank/internals/plasmaman/belt/full, -/obj/item/tank/internals/plasmaman/belt/full, -/obj/item/tank/internals/plasmaman/belt/full, -/obj/item/tank/internals/plasmaman/belt/full, -/obj/item/tank/internals/nitrogen/belt/full, -/obj/item/tank/internals/nitrogen/belt/full, -/obj/item/tank/internals/nitrogen/belt/full, -/obj/item/tank/internals/nitrogen/belt/full, -/obj/item/tank/internals/nitrogen/belt/full, -/obj/item/clothing/mask/breath/vox, -/obj/item/clothing/mask/breath/vox, -/obj/item/clothing/mask/breath/vox, -/obj/item/clothing/mask/breath/vox, -/obj/item/clothing/mask/breath/vox, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon) -"ft" = ( -/obj/structure/table/reinforced, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/kitchen) -"fv" = ( -/obj/machinery/power/apc/auto_name/directional/north, -/obj/effect/mapping_helpers/apc/no_charge, -/obj/effect/mapping_helpers/apc/unlocked, -/obj/structure/cable, -/obj/structure/closet/crate/radiation, -/obj/item/stack/sheet/mineral/uranium/five, -/obj/item/stack/sheet/mineral/uranium/five, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/atmos) -"fw" = ( -/obj/effect/turf_decal/stripes/asteroid/line{ - dir = 9 - }, -/turf/open/misc/asteroid/airless, -/area/solars/tarkon) -"fB" = ( -/obj/effect/spawner/structure/window/reinforced/no_firelock, -/obj/machinery/door/firedoor/solid/closed, -/turf/open/floor/plating, -/area/ruin/space/has_grav/port_tarkon/cargo) -"fG" = ( -/obj/structure/cable, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/cult, -/area/ruin/space/has_grav/port_tarkon/developement) -"fI" = ( -/obj/structure/closet/secure_closet/medical1, -/obj/effect/turf_decal/tile/blue/half{ - dir = 8 - }, -/obj/effect/decal/cleanable/dirt, -/obj/item/gun/medbeam/afad, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/trauma) -"fJ" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/turf_decal/loading_area, -/mob/living/simple_animal/hostile/cult/magic{ - health = 160; - maxHealth = 160 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/port_tarkon/developement) -"fL" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/structure/cable, -/obj/structure/statue/bone/rib{ - dir = 1 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/cult, -/area/ruin/space/has_grav/port_tarkon/comms) -"fP" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/structure/cable, -/obj/effect/decal/cleanable/blood/tracks, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/afthall) -"fR" = ( -/obj/machinery/atmospherics/components/unary/vent_pump/siphon/monitored/plasma_output/tarkon{ - dir = 8 - }, -/turf/open/floor/engine/plasma, -/area/ruin/space/has_grav/port_tarkon/atmos) -"fT" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/light/dim/directional/east, -/obj/effect/turf_decal/delivery/blue, -/mob/living/basic/construct/artificer/hostile{ - health = 150; - maxHealth = 150 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/starboardhall) -"fU" = ( -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/starboardhall) -"fV" = ( -/obj/structure/table/rolling, -/obj/item/scalpel, -/obj/item/hemostat, -/obj/item/cautery, -/obj/item/bonesetter, -/obj/item/stack/medical/suture/medicated, -/obj/item/retractor, -/obj/item/clothing/gloves/latex, -/obj/effect/turf_decal/tile/purple/half{ - dir = 8 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/port_tarkon/developement) -"ga" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/mob/living/simple_animal/hostile/cult/ghost, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/cult, -/area/ruin/space/has_grav/port_tarkon/trauma) -"gb" = ( -/obj/structure/reagent_dispensers/watertank/high, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/cult, -/area/ruin/space/has_grav/port_tarkon/garden) -"gd" = ( -/obj/effect/decal/cleanable/blood, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/cult, -/area/ruin/space/has_grav/port_tarkon/trauma) -"ge" = ( -/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/yellow/half{ - dir = 1 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/power1) -"gk" = ( -/obj/structure/chair/office, -/obj/effect/turf_decal/tile/blue/half{ - dir = 8 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/port_tarkon/comms) -"gn" = ( -/obj/machinery/door/airlock/external/ruin{ - name = "Engineering External Access" - }, -/obj/effect/mapping_helpers/airlock/cyclelink_helper{ - dir = 1 - }, -/obj/structure/cable, -/obj/effect/mapping_helpers/airlock/access/all/tarkon/general, -/turf/open/floor/plating, -/area/ruin/space/has_grav/port_tarkon/power1) -"go" = ( -/obj/machinery/vending/hydronutrients, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/garden) -"gp" = ( -/obj/effect/spawner/structure/window/reinforced, -/turf/open/floor/plating, -/area/ruin/space/has_grav/port_tarkon/atmos) -"gs" = ( -/obj/machinery/door/airlock/public/glass/incinerator/tarkon_interior, -/obj/machinery/airlock_controller/incinerator_tarkon{ - pixel_x = 40; - pixel_y = 5 - }, -/obj/effect/mapping_helpers/airlock/locked, -/obj/effect/mapping_helpers/airlock/cyclelink_helper, -/obj/effect/turf_decal/stripes{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/visible/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/dark/visible, -/turf/open/floor/engine/vacuum, -/area/ruin/space/has_grav/port_tarkon/atmos) -"gt" = ( -/obj/structure/table/reinforced, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/port_tarkon/developement) -"gu" = ( -/obj/structure/cable, -/obj/machinery/power/apc/auto_name/directional/west, -/obj/effect/mapping_helpers/apc/no_charge, -/obj/effect/mapping_helpers/apc/unlocked, -/obj/effect/decal/cleanable/blood, -/obj/item/circuitboard/machine/component_printer, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/cult, -/area/ruin/space/has_grav/port_tarkon/developement) -"gv" = ( -/obj/structure/table/reinforced, -/obj/machinery/cell_charger, -/obj/item/stock_parts/cell/high/empty, -/obj/effect/turf_decal/tile/yellow/half{ - dir = 8 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/toolstorage) -"gA" = ( -/obj/machinery/door/airlock/mining/glass, -/obj/machinery/door/firedoor/heavy/closed, -/obj/effect/turf_decal/sand/plating, -/obj/effect/mapping_helpers/airlock/access/all/tarkon/general, -/turf/open/misc/asteroid, -/area/ruin/space/has_grav/port_tarkon/mining) -"gD" = ( -/obj/effect/spawner/structure/window/reinforced/no_firelock, -/obj/machinery/door/firedoor/solid/closed, -/turf/open/floor/plating, -/area/ruin/space/has_grav/port_tarkon/secoff) -"gE" = ( -/obj/machinery/airalarm/directional/east, -/obj/effect/mapping_helpers/airalarm/all_access, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/observ) -"gG" = ( -/obj/effect/decal/cleanable/blood/tracks, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/cult, -/area/ruin/space/has_grav/port_tarkon/starboardhall) -"gJ" = ( -/obj/effect/spawner/structure/window/reinforced, -/turf/open/floor/plating, -/area/ruin/space/has_grav/port_tarkon/garden) -"gN" = ( -/obj/effect/turf_decal/tile/brown/half{ - dir = 4 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/storage) -"gP" = ( -/obj/structure/table/reinforced, -/obj/item/folder/blue, -/obj/item/folder, -/obj/effect/turf_decal/tile/brown/half{ - dir = 8 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/cargo) -"gW" = ( -/obj/machinery/computer{ - desc = "A computer long since rendered non-functional due to lack of maintenance. Spitting out error messages."; - name = "Broken Computer" - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/port_tarkon/comms) -"gX" = ( -/obj/structure/cable, -/obj/effect/turf_decal/stripes/asteroid/line, -/turf/open/misc/asteroid/airless, -/area/solars/tarkon) -"he" = ( -/mob/living/basic/construct/artificer/hostile, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/porthall) -"hf" = ( -/obj/machinery/power/smes, -/obj/structure/cable, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/port_tarkon/atmos) -"hi" = ( -/obj/machinery/firealarm/directional/north, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/cult, -/area/ruin/space/has_grav/port_tarkon/atmos) -"hj" = ( -/turf/closed/wall, -/area/ruin/space/has_grav/port_tarkon/kitchen) -"hk" = ( -/obj/effect/decal/cleanable/blood/tracks{ - dir = 8 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/cult, -/area/ruin/space/has_grav/port_tarkon/comms) -"hl" = ( -/obj/structure/cable, -/obj/machinery/light_switch/directional/west, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/cult, -/area/ruin/space/has_grav/port_tarkon/mining) -"hm" = ( -/obj/structure/closet, -/obj/effect/decal/cleanable/dirt, -/obj/item/clothing/shoes/workboots/mining, -/obj/item/clothing/shoes/winterboots, -/obj/item/clothing/shoes/jackboots, -/obj/item/clothing/under/rank/cargo/tech/nova/utility, -/obj/item/clothing/under/rank/cargo/tech/nova/gorka, -/obj/item/storage/backpack/duffelbag/explorer, -/obj/item/storage/backpack/explorer, -/obj/item/storage/backpack/satchel/explorer, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon) -"hr" = ( -/obj/machinery/door/airlock/public/glass{ - name = "Crew Storage"; - state_open = 1 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/cable, -/obj/machinery/door/firedoor/solid, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon) -"hu" = ( -/obj/effect/turf_decal/caution/stand_clear, -/turf/open/floor/iron/airless, -/area/ruin/space/has_grav/port_tarkon/storage) -"hw" = ( -/obj/machinery/light/dim/directional/west, -/obj/structure/table/reinforced, -/obj/item/clothing/gloves/color/yellow, -/obj/effect/turf_decal/tile/yellow/half{ - dir = 8 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/toolstorage) -"hz" = ( -/mob/living/simple_animal/hostile/cult/assassin, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/cult, -/area/ruin/space/has_grav/port_tarkon/atmos) -"hA" = ( -/obj/machinery/door/airlock/public/glass{ - name = "Port Primary Hallway" - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/cable, -/obj/machinery/door/firedoor/solid/closed, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/porthall) -"hB" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/decal/cleanable/blood/tracks{ - dir = 9 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/port_tarkon/developement) -"hD" = ( -/turf/closed/wall/mineral/cult/artificer, -/area/ruin/space/has_grav/port_tarkon/atmos) -"hE" = ( -/obj/structure/table, -/obj/item/storage/medkit/regular, -/obj/item/storage/medkit/regular, -/obj/machinery/light/dim/directional/east, -/obj/effect/turf_decal/tile/blue/half{ - dir = 4 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/trauma) -"hH" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/cable, -/obj/effect/decal/cleanable/dirt, -/obj/machinery/button/door{ - id = "ptobservatory"; - name = "shutter controls"; - pixel_y = -32 - }, -/turf/open/floor/cult, -/area/ruin/space/has_grav/port_tarkon/observ) -"hL" = ( -/obj/machinery/computer{ - desc = "A computer long since rendered non-functional due to lack of maintenance. Spitting out error messages."; - dir = 1; - name = "Broken Computer" - }, -/obj/effect/turf_decal/tile/blue/anticorner{ - dir = 8 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/port_tarkon/comms) -"hM" = ( -/obj/machinery/atmospherics/components/unary/portables_connector/visible{ - dir = 8 - }, -/obj/effect/turf_decal/tile/blue/fourcorners, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/atmos) -"hN" = ( -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ - dir = 8 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/porthall) -"hP" = ( -/obj/effect/turf_decal/stripes{ - dir = 1 - }, -/obj/effect/decal/cleanable/dirt, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden, -/turf/open/floor/engine, -/area/ruin/space/has_grav/port_tarkon/atmos) -"hQ" = ( -/obj/machinery/door/airlock/mining, -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/decal/cleanable/blood/tracks{ - dir = 4 - }, -/obj/machinery/door/firedoor/solid/closed, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/cargo) -"hR" = ( -/obj/machinery/atmospherics/miner/carbon_dioxide, -/turf/open/floor/engine/co2, -/area/ruin/space/has_grav/port_tarkon/atmos) -"hV" = ( -/obj/structure/closet/secure_closet/freezer/meat/open, -/turf/open/floor/iron/freezer, -/area/ruin/space/has_grav/port_tarkon/kitchen) -"hY" = ( -/obj/machinery/door/window/brigdoor/security/cell/right/directional/south{ - req_access = list("tarkon") - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/door/firedoor/solid/closed, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/secoff) -"hZ" = ( -/obj/machinery/power/smes/engineering{ - charge = 0; - name = "backup power storage unit" - }, -/obj/structure/cable, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/plating, -/area/ruin/space/has_grav/port_tarkon/power1) -"ia" = ( -/obj/effect/turf_decal/tile/red/half{ - dir = 1 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/secoff) -"id" = ( -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, -/mob/living/basic/construct/wraith/hostile{ - health = 125; - maxHealth = 125 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/cult, -/area/ruin/space/has_grav/port_tarkon/porthall) -"ii" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/decal/cleanable/blood/tracks, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/cult, -/area/ruin/space/has_grav/port_tarkon/starboardhall) -"ik" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/effect/turf_decal/tile/neutral/anticorner{ - dir = 4 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/centerhall) -"il" = ( -/obj/effect/decal/cleanable/blood, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/cult, -/area/ruin/space/has_grav/port_tarkon/atmos) -"in" = ( -/obj/item/circuitboard/machine/ore_silo, -/obj/structure/frame/machine, -/obj/effect/turf_decal/tile/brown/anticorner{ - dir = 1 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/mining) -"ip" = ( -/obj/machinery/door/airlock/mining/glass, -/obj/effect/turf_decal/sand/plating, -/obj/effect/turf_decal/sand/plating, -/obj/effect/mapping_helpers/airlock/cyclelink_helper{ - dir = 1 - }, -/obj/effect/mapping_helpers/airlock/access/all/tarkon/general, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/mining) -"iq" = ( -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/white, -/area/ruin/space/has_grav/port_tarkon/centerhall) -"ir" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/decal/cleanable/blood, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/cult, -/area/ruin/space/has_grav/port_tarkon/secoff) -"iu" = ( -/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, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/mining) -"iv" = ( -/obj/machinery/atmospherics/components/unary/passive_vent/layer2{ - dir = 4 - }, -/turf/open/misc/asteroid/airless, -/area/ruin/space/has_grav) -"iw" = ( -/obj/effect/turf_decal/stripes{ - dir = 1 - }, -/obj/machinery/light/dim/directional/west, -/obj/structure/window/reinforced/spawner/directional/north, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/visible/layer2{ - dir = 6 - }, -/obj/structure/closet/radiation, -/obj/item/clothing/head/utility/radiation, -/obj/item/clothing/suit/utility/radiation, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/port_tarkon/atmos) -"iy" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/cafeteria, -/area/ruin/space/has_grav/port_tarkon/kitchen) -"iA" = ( -/obj/machinery/door/airlock/multi_tile/public/glass, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/door/firedoor/solid, -/obj/structure/cable, -/turf/open/floor/cult, -/area/ruin/space/has_grav/port_tarkon/trauma) -"iB" = ( -/obj/effect/turf_decal/stripes/asteroid/line{ - dir = 1 - }, -/turf/open/misc/asteroid/airless, -/area/ruin/space/has_grav) -"iC" = ( -/obj/machinery/firealarm/directional/east, -/obj/effect/turf_decal/tile/brown/half{ - dir = 4 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/storage) -"iG" = ( -/obj/machinery/atmospherics/components/binary/pump/off/general{ - dir = 4 - }, -/obj/effect/turf_decal/tile/red/fourcorners{ - color = "#DE3A3A" - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/atmos) -"iI" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/turf/open/misc/asteroid/airless, -/area/ruin/space/has_grav) -"iJ" = ( -/obj/machinery/vending/hydroseeds, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/garden) -"iM" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/light/directional/north, -/obj/machinery/power/apc/auto_name/directional/north, -/obj/effect/mapping_helpers/apc/no_charge, -/obj/effect/mapping_helpers/apc/unlocked, -/obj/effect/turf_decal/tile/yellow/half{ - dir = 1 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/power1) -"iT" = ( -/obj/machinery/door/airlock/public/glass{ - name = "Starboard Primary Hallway" - }, -/obj/machinery/door/firedoor/solid, -/obj/effect/decal/cleanable/blood/tracks{ - dir = 4 - }, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/starboardhall) -"iU" = ( -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ - dir = 1 - }, -/obj/effect/decal/cleanable/glass, -/obj/effect/decal/cleanable/blood, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/cult, -/area/ruin/space/has_grav/port_tarkon/developement) -"iZ" = ( -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ - dir = 1 - }, -/obj/effect/decal/cleanable/blood, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/cult, -/area/ruin/space/has_grav/port_tarkon/storage) -"jg" = ( -/obj/machinery/door/airlock/public, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/cable, -/obj/machinery/door/firedoor/solid, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/porthall) -"jj" = ( -/obj/machinery/atmospherics/components/unary/outlet_injector/monitored/nitrogen_input/tarkon{ - dir = 4 - }, -/turf/open/floor/engine/n2, -/area/ruin/space/has_grav/port_tarkon/atmos) -"jn" = ( -/turf/closed/mineral/random/high_chance, -/area/awaymission) -"jo" = ( -/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, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/mining) -"jv" = ( -/obj/effect/decal/cleanable/dirt, -/obj/machinery/button/door{ - id = "ptafthall"; - name = "shutter controls"; - pixel_x = -26 - }, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/afthall) -"jx" = ( -/obj/effect/decal/cleanable/blood/tracks{ - dir = 10 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/cult, -/area/ruin/space/has_grav/port_tarkon/comms) -"jy" = ( -/obj/effect/decal/cleanable/blood/tracks{ - dir = 5 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/cult, -/area/ruin/space/has_grav/port_tarkon/trauma) -"jz" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/centerhall) -"jA" = ( -/obj/machinery/atmospherics/components/binary/pump, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/centerhall) -"jB" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/atmos) -"jD" = ( -/obj/effect/decal/cleanable/blood, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/cult, -/area/ruin/space/has_grav/port_tarkon/storage) -"jF" = ( -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/cult, -/area/ruin/space/has_grav/port_tarkon/observ) -"jG" = ( -/obj/effect/turf_decal/stripes{ - dir = 1 - }, -/obj/structure/cable, -/obj/machinery/power/terminal{ - dir = 4 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/port_tarkon/atmos) -"jJ" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/effect/decal/cleanable/blood, -/obj/effect/decal/cleanable/blood/tracks{ - dir = 8 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/plating, -/area/ruin/space/has_grav/port_tarkon/atmos) -"jM" = ( -/obj/machinery/airalarm/directional/east, -/obj/effect/mapping_helpers/airalarm/all_access, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/effect/decal/cleanable/glass, -/obj/effect/decal/cleanable/blood, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/cult, -/area/ruin/space/has_grav/port_tarkon/developement) -"jN" = ( -/obj/machinery/airalarm/directional/north, -/obj/effect/mapping_helpers/airalarm/all_access, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/forehall) -"jO" = ( -/obj/machinery/atmospherics/components/unary/passive_vent{ - dir = 4; - name = "killroom vent" - }, -/obj/effect/turf_decal/sand/plating, -/turf/open/floor/plating/airless, -/area/ruin/space/has_grav) -"jP" = ( -/obj/machinery/door/airlock/maintenance_hatch, -/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/ruin/space/has_grav/port_tarkon/centerhall) -"jU" = ( -/obj/effect/turf_decal/tile/brown/anticorner, -/obj/structure/rack/shelf, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/storage) -"jV" = ( -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ - dir = 4 - }, -/obj/effect/decal/cleanable/blood/tracks{ - dir = 9 - }, -/mob/living/basic/construct/juggernaut/hostile, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/cult, -/area/ruin/space/has_grav/port_tarkon/cargo) -"jW" = ( -/turf/open/floor/iron/airless, -/area/ruin/space/has_grav/port_tarkon/storage) -"jY" = ( -/turf/closed/wall/mineral/cult/artificer, -/area/ruin/space/has_grav/port_tarkon/observ) -"jZ" = ( -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/plating, -/area/ruin/space/has_grav/port_tarkon/forehall) -"ka" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/firealarm/directional/east, -/mob/living/basic/construct/wraith/hostile, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/starboardhall) -"kd" = ( -/obj/item/wrench, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/cult, -/area/ruin/space/has_grav/port_tarkon/atmos) -"ke" = ( -/obj/machinery/computer{ - desc = "A computer long since rendered non-functional due to lack of maintenance. Spitting out error messages."; - dir = 1; - name = "Broken Computer" - }, -/obj/effect/turf_decal/tile/blue/anticorner{ - dir = 8 - }, -/obj/item/paper/fluff/ruins/tarkon/vaulter, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/port_tarkon/comms) -"kf" = ( -/turf/closed/wall, -/area/ruin/space/has_grav/port_tarkon/forehall) -"kh" = ( -/obj/effect/turf_decal/sand, -/obj/machinery/light/dim/directional/east, -/obj/machinery/airalarm/directional/east, -/obj/effect/mapping_helpers/airalarm/all_access, -/obj/effect/turf_decal/tile/brown/half{ - dir = 4 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/mining) -"kk" = ( -/obj/structure/cable, -/obj/machinery/power/apc/auto_name/directional/north, -/obj/effect/mapping_helpers/apc/no_charge, -/obj/effect/mapping_helpers/apc/unlocked, -/turf/open/floor/plating, -/area/ruin/space/has_grav/port_tarkon/afthall) -"ko" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/turf_decal/tile/purple/half{ - dir = 1 - }, -/obj/effect/decal/cleanable/blood/tracks, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/port_tarkon/developement) -"kp" = ( -/obj/item/tape/ruins/tarkon/celebration, -/obj/structure/closet/crate/bin, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/observ) -"kq" = ( -/obj/machinery/vending/cigarette, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/cult, -/area/ruin/space/has_grav/port_tarkon/comms) -"kr" = ( -/obj/machinery/atmospherics/components/binary/pump/off/general{ - dir = 4 - }, -/obj/effect/turf_decal/tile/blue/fourcorners, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/atmos) -"ku" = ( -/obj/structure/bed, -/obj/effect/turf_decal/tile/blue/anticorner{ - dir = 4 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/trauma) -"kv" = ( -/obj/machinery/light/dim/directional/north, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/cult, -/area/ruin/space/has_grav/port_tarkon/forehall) -"kx" = ( -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, -/obj/effect/decal/cleanable/glass, -/obj/effect/decal/cleanable/blood, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/cult, -/area/ruin/space/has_grav/port_tarkon/developement) -"kA" = ( -/obj/structure/fence, -/turf/open/misc/asteroid/airless, -/area/ruin/space/has_grav) -"kC" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/cable, -/obj/structure/statue/bone/rib, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/cult, -/area/ruin/space/has_grav/port_tarkon/forehall) -"kD" = ( -/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{ - dir = 4 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/cargo) -"kF" = ( -/obj/structure/fence/corner, -/turf/open/misc/asteroid/airless, -/area/ruin/space/has_grav) -"kG" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/structure/cable, -/obj/effect/decal/cleanable/blood/tracks, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/forehall) -"kH" = ( -/obj/machinery/light/dim/directional/south, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/cable, -/obj/effect/decal/cleanable/blood/tracks{ - dir = 6 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/cult, -/area/ruin/space/has_grav/port_tarkon/porthall) -"kI" = ( -/obj/structure/table/reinforced, -/obj/item/reagent_containers/condiment/saltshaker{ - pixel_x = -2 - }, -/obj/item/reagent_containers/condiment/saltshaker{ - pixel_x = -2 - }, -/obj/item/reagent_containers/condiment/peppermill{ - pixel_x = 2; - pixel_y = 2 - }, -/obj/item/reagent_containers/condiment/peppermill{ - pixel_x = 2; - pixel_y = 1 - }, -/obj/structure/cable, -/obj/machinery/power/apc/auto_name/directional/west, -/obj/effect/mapping_helpers/apc/no_charge, -/obj/effect/mapping_helpers/apc/unlocked, -/turf/open/floor/iron/cafeteria, -/area/ruin/space/has_grav/port_tarkon/kitchen) -"kJ" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/turf_decal/tile/yellow, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/toolstorage) -"kO" = ( -/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/neutral/anticorner{ - dir = 1 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/centerhall) -"kR" = ( -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ - dir = 4 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/secoff) -"kS" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 8 - }, -/obj/effect/turf_decal/stripes/line{ - dir = 4 - }, -/obj/machinery/door/poddoor/incinerator_atmos_aux, -/turf/open/floor/engine/vacuum, -/area/ruin/space/has_grav/port_tarkon/atmos) -"kT" = ( -/obj/machinery/light_switch/directional/west, -/obj/effect/turf_decal/tile/purple/half{ - dir = 8 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/port_tarkon/developement) -"kU" = ( -/obj/structure/closet/crate, -/obj/effect/spawner/random/decoration/carpet, -/obj/effect/spawner/random/decoration/carpet, -/obj/effect/spawner/random/decoration/carpet, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/plating, -/area/ruin/space/has_grav/port_tarkon/forehall) -"kW" = ( -/obj/structure/table, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/item/megaphone, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/port_tarkon/comms) -"kX" = ( -/obj/structure/bed/maint, -/obj/structure/safe/floor, -/obj/item/mod/module/armor_booster/retractplates{ - desc = "A complex set of actuators, micro-seals and a simple guide on how to install it, This... \"Modification\" allows the plating around the joints to retract, giving minor protection and a bit better mobility. There also seems to be a small, wireless microphone... how odd." - }, -/obj/item/gun/ballistic/shotgun/doublebarrel, -/obj/effect/mob_spawn/corpse/human/assistant, -/obj/effect/decal/cleanable/blood, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/secoff) -"la" = ( -/obj/effect/decal/cleanable/blood/tracks, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/port_tarkon/developement) -"ld" = ( -/obj/machinery/atmospherics/components/unary/vent_pump/siphon/monitored/nitrous_output/tarkon{ - dir = 8 - }, -/turf/open/floor/engine/n2o, -/area/ruin/space/has_grav/port_tarkon/atmos) -"le" = ( -/obj/structure/cable, -/obj/effect/turf_decal/tile/brown/half{ - dir = 8 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/mining) -"li" = ( -/obj/structure/sign/warning/explosives, -/turf/closed/wall/mineral/cult/artificer, -/area/ruin/space/has_grav/port_tarkon/developement) -"lj" = ( -/obj/effect/decal/cleanable/glass, -/obj/effect/decal/cleanable/blood, -/mob/living/basic/construct/juggernaut/hostile{ - health = 275; - maxHealth = 275; - name = "Left hand of the veil" - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/cult, -/area/ruin/space/has_grav/port_tarkon/developement) -"lp" = ( -/obj/machinery/suit_storage_unit/engine, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/atmos) -"lr" = ( -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ - dir = 8 - }, -/obj/effect/decal/cleanable/blood, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/cult, -/area/ruin/space/has_grav/port_tarkon/observ) -"ls" = ( -/obj/machinery/door/window/brigdoor/security/cell{ - req_access = list("tarkon") - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/door/firedoor/solid/closed, -/turf/open/floor/cult, -/area/ruin/space/has_grav/port_tarkon/secoff) -"lt" = ( -/obj/machinery/light_switch/directional/east, -/obj/effect/turf_decal/tile/yellow/anticorner, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/toolstorage) -"lw" = ( -/obj/effect/turf_decal/tile/purple/anticorner, -/obj/structure/table/rolling, -/obj/item/clothing/gloves/latex, -/obj/item/circular_saw, -/obj/item/scalpel, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/port_tarkon/developement) -"lx" = ( -/obj/machinery/door/airlock/public/glass{ - name = "Aft Primary Hallway" - }, -/obj/machinery/door/firedoor/solid/closed, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/afthall) -"ly" = ( -/obj/effect/spawner/structure/window/reinforced, -/turf/open/floor/plating, -/area/ruin/space/has_grav/port_tarkon) -"lA" = ( -/obj/structure/closet/crate/radiation, -/obj/structure/cable, -/obj/item/stack/sheet/mineral/uranium/five, -/obj/item/stack/sheet/mineral/uranium/five, -/obj/item/stack/sheet/mineral/uranium/five, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/plating, -/area/ruin/space/has_grav/port_tarkon/power1) -"lD" = ( -/obj/machinery/door/airlock/wood{ - id_tag = "ptdorm4"; - name = "Couples Suite" - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/door/firedoor/solid, -/turf/open/floor/wood/large, -/area/ruin/space/has_grav/port_tarkon/dorms) -"lF" = ( -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ - dir = 4 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/cult, -/area/ruin/space/has_grav/port_tarkon/developement) -"lH" = ( -/obj/structure/grille, -/turf/closed/wall/r_wall, -/area/ruin/space/has_grav/port_tarkon/atmos) -"lI" = ( -/obj/effect/turf_decal/stripes{ - dir = 1 - }, -/obj/machinery/atmospherics/components/unary/portables_connector/visible{ - dir = 8 - }, -/obj/machinery/portable_atmospherics/canister/oxygen, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/port_tarkon/atmos) -"lK" = ( -/obj/structure/closet/firecloset/full, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/plating, -/area/ruin/space/has_grav/port_tarkon/power1) -"lO" = ( -/obj/structure/statue/bone/rib{ - dir = 1 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/cult, -/area/ruin/space/has_grav/port_tarkon/centerhall) -"lQ" = ( -/obj/structure/cable, -/obj/machinery/power/terminal{ - dir = 4 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/port_tarkon/atmos) -"lR" = ( -/obj/machinery/door/airlock/multi_tile/public/glass{ - dir = 8 - }, -/obj/machinery/door/firedoor/solid, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/garden) -"lS" = ( -/obj/structure/closet, -/obj/effect/decal/cleanable/dirt, -/obj/item/clothing/shoes/workboots/mining, -/obj/item/clothing/shoes/winterboots, -/obj/item/clothing/shoes/jackboots, -/obj/item/clothing/under/rank/medical/doctor/nova/utility, -/obj/item/clothing/under/rank/medical/doctor/nova/utility, -/obj/item/storage/backpack/duffelbag/med, -/obj/item/storage/backpack/medic, -/obj/item/storage/backpack/satchel/med, -/obj/item/storage/backpack/satchel/chem, -/obj/item/storage/backpack/satchel/vir, -/obj/item/storage/backpack/virology, -/obj/item/storage/backpack/duffelbag/virology, -/obj/item/storage/backpack/duffelbag/chemistry, -/obj/item/storage/backpack/chemistry, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon) -"lT" = ( -/obj/item/flashlight/lantern, -/obj/item/flashlight/lantern, -/obj/item/flashlight/lantern, -/obj/item/flashlight/lantern, -/obj/structure/table, -/obj/machinery/light/warm/directional/south, -/obj/structure/cable, -/obj/machinery/power/apc/auto_name/directional/south, -/obj/effect/mapping_helpers/apc/no_charge, -/obj/effect/mapping_helpers/apc/unlocked, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon) -"lU" = ( -/obj/machinery/firealarm/directional/west, -/obj/effect/turf_decal/tile/yellow/half{ - dir = 8 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/toolstorage) -"lV" = ( -/obj/effect/spawner/structure/window/reinforced/no_firelock, -/obj/machinery/atmospherics/pipe/layer_manifold/brown/hidden{ - dir = 4 - }, -/turf/open/floor/plating, -/area/ruin/space/has_grav/port_tarkon/atmos) -"lW" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/secoff) -"lZ" = ( -/obj/structure/closet/emcloset, -/obj/effect/turf_decal/tile/brown/anticorner{ - dir = 4 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/mining) -"ma" = ( -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/cult, -/area/ruin/space/has_grav/port_tarkon/forehall) -"mc" = ( -/obj/structure/window/reinforced/spawner/directional/north, -/obj/effect/turf_decal/tile/red/fourcorners{ - color = "#DE3A3A" - }, -/obj/machinery/computer/atmos_control/tarkon/nitrogen_tank{ - dir = 4 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/atmos) -"md" = ( -/obj/machinery/light/dim/directional/south, -/obj/effect/turf_decal/tile/brown/anticorner, -/obj/structure/rack/shelf, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/storage) -"mi" = ( -/obj/structure/sign/warning/biohazard, -/turf/closed/wall, -/area/ruin/space/has_grav/port_tarkon/toolstorage) -"mj" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/item/stack/sheet/iron/twenty, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/cult, -/area/ruin/space/has_grav/port_tarkon/secoff) -"ml" = ( -/obj/structure/cable, -/obj/machinery/firealarm/directional/east, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/observ) -"mo" = ( -/obj/structure/table/reinforced, -/obj/item/stack/sheet/iron/fifty, -/obj/item/stack/sheet/glass/fifty, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/atmos) -"mq" = ( -/obj/effect/turf_decal/tile/brown/half{ - dir = 1 - }, -/obj/effect/decal/cleanable/blood, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/cargo) -"mr" = ( -/obj/machinery/portable_atmospherics/scrubber, -/turf/open/floor/plating, -/area/ruin/space/has_grav/port_tarkon/afthall) -"mt" = ( -/obj/structure/closet/crate, -/obj/item/transfer_valve, -/obj/item/transfer_valve, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/plating, -/area/ruin/space/has_grav/port_tarkon/forehall) -"mu" = ( -/obj/machinery/light/dim/directional/west, -/obj/structure/statue/bone/rib{ - dir = 1 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/cult, -/area/ruin/space/has_grav/port_tarkon/afthall) -"my" = ( -/obj/structure/reagent_dispensers/fueltank/large, -/obj/effect/turf_decal/tile/yellow/half, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/power1) -"mC" = ( -/obj/machinery/door/airlock/public/glass{ - name = "Cryogenics Room" - }, -/obj/machinery/door/firedoor/solid, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon) -"mG" = ( -/obj/effect/turf_decal/tile/brown/anticorner{ - dir = 8 - }, -/obj/structure/rack/shelf, -/obj/item/clothing/gloves/color/yellow, -/obj/item/clothing/suit/hazardvest, -/obj/item/clothing/head/utility/hardhat/orange, -/obj/item/clothing/gloves/color/black, -/obj/item/storage/belt/utility, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/storage) -"mK" = ( -/obj/structure/statue/bone/rib, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/cult, -/area/ruin/space/has_grav/port_tarkon/comms) -"mL" = ( -/obj/effect/decal/cleanable/blood, -/obj/item/paper/fluff/ruins/tarkon/defcon2, -/turf/open/floor/cult, -/area/ruin/space/has_grav/port_tarkon) -"mM" = ( -/obj/structure/table/optable, -/obj/effect/turf_decal/tile/purple/anticorner{ - dir = 8 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/port_tarkon/developement) -"mO" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/cafeteria, -/area/ruin/space/has_grav/port_tarkon/kitchen) -"mT" = ( -/obj/structure/cable, -/obj/machinery/door/airlock/public/glass{ - name = "Starboard Primary Hallway" - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/door/firedoor/solid, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/starboardhall) -"mV" = ( -/obj/machinery/door/window/right/directional/east, -/obj/machinery/door/window/right/directional/west, -/obj/structure/table/reinforced, -/obj/machinery/door/firedoor/solid/closed, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/mining) -"mW" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/effect/decal/cleanable/blood/tracks{ - dir = 8 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/cult, -/area/ruin/space/has_grav/port_tarkon/atmos) -"mY" = ( -/obj/structure/statue/bone/rib{ - dir = 1 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/cult, -/area/ruin/space/has_grav/port_tarkon/porthall) -"na" = ( -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ - dir = 1 - }, -/obj/effect/decal/cleanable/glass, -/obj/effect/decal/cleanable/blood, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/cult, -/area/ruin/space/has_grav/port_tarkon/developement) -"nb" = ( -/obj/machinery/door/airlock/public/glass{ - name = "Starboard Primary Hallway" - }, -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/door/firedoor/solid, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/starboardhall) -"nc" = ( -/obj/structure/sink/directional/south, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/cafeteria, -/area/ruin/space/has_grav/port_tarkon/kitchen) -"ne" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/cult, -/area/ruin/space/has_grav/port_tarkon/mining) -"ng" = ( -/turf/closed/wall, -/area/ruin/space/has_grav/port_tarkon/storage) -"nk" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/cult, -/area/ruin/space/has_grav/port_tarkon/secoff) -"nm" = ( -/obj/machinery/atmospherics/miner/nitrogen, -/turf/open/floor/engine/n2, -/area/ruin/space/has_grav/port_tarkon/atmos) -"nn" = ( -/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{ - dir = 4 - }, -/obj/effect/decal/cleanable/blood, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/starboardhall) -"no" = ( -/obj/structure/table/optable, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/cult, -/area/ruin/space/has_grav/port_tarkon/developement) -"nu" = ( -/obj/machinery/light/dim/directional/south, -/obj/effect/turf_decal/tile/blue/half, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/trauma) -"nx" = ( -/obj/effect/turf_decal/sand/plating, -/turf/open/floor/plating/airless, -/area/ruin/space/has_grav) -"nB" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/mob/living/simple_animal/hostile/cult/magic{ - health = 160; - maxHealth = 160 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/observ) -"nF" = ( -/obj/structure/closet/crate/engineering, -/obj/item/stack/sheet/plasteel/fifty, -/obj/item/stack/sheet/rglass{ - amount = 50 - }, -/obj/item/stack/sheet/mineral/plasma/thirty, -/obj/machinery/light_switch/directional/north, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/cult, -/area/ruin/space/has_grav/port_tarkon/storage) -"nH" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/cable, -/obj/effect/decal/cleanable/blood/tracks{ - dir = 10 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/port_tarkon/developement) -"nJ" = ( -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/cult, -/area/ruin/space/has_grav/port_tarkon/toolstorage) -"nL" = ( -/obj/item/stack/tile/carpet/neon/simple/purple/nodots/sixty, -/turf/open/floor/plating, -/area/ruin/space/has_grav/port_tarkon/cargo) -"nP" = ( -/turf/closed/wall, -/area/ruin/space/has_grav/port_tarkon/developement) -"nQ" = ( -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/centerhall) -"nT" = ( -/obj/effect/turf_decal/tile/red/half, -/obj/item/gun/ballistic/automatic/m6pdw, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/secoff) -"nW" = ( -/obj/structure/table/reinforced, -/obj/item/restraints/handcuffs, -/obj/item/restraints/handcuffs, -/obj/effect/turf_decal/tile/red/anticorner{ - dir = 4 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/secoff) -"nZ" = ( -/obj/structure/closet/crate/engineering/electrical, -/obj/item/solar_assembly, -/obj/item/solar_assembly, -/obj/item/solar_assembly, -/obj/item/solar_assembly, -/obj/item/solar_assembly, -/obj/item/solar_assembly, -/obj/item/solar_assembly, -/obj/item/solar_assembly, -/obj/item/solar_assembly, -/obj/item/solar_assembly, -/obj/item/solar_assembly, -/obj/item/solar_assembly, -/obj/item/solar_assembly, -/obj/item/solar_assembly, -/obj/item/solar_assembly, -/obj/item/solar_assembly, -/obj/item/solar_assembly, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/plating, -/area/ruin/space/has_grav/port_tarkon/forehall) -"ob" = ( -/obj/machinery/airalarm/directional/north, -/obj/effect/mapping_helpers/airalarm/all_access, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/cult, -/area/ruin/space/has_grav/port_tarkon/porthall) -"oc" = ( -/obj/effect/turf_decal/tile/purple/half{ - dir = 1 - }, -/obj/structure/frame/computer, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/port_tarkon/developement) -"oe" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/cable, -/obj/machinery/light/dim/directional/west, -/obj/effect/decal/cleanable/blood, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/porthall) -"of" = ( -/obj/effect/spawner/structure/window/reinforced/no_firelock, -/obj/machinery/door/poddoor/shutters{ - id = "ptafthall" - }, -/turf/open/floor/plating, -/area/ruin/space/has_grav/port_tarkon/afthall) -"og" = ( -/obj/structure/table/reinforced, -/obj/item/pipe_dispenser, -/obj/item/storage/belt/utility/full, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/atmos) -"oh" = ( -/obj/structure/statue/bone/rib, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/cult, -/area/ruin/space/has_grav/port_tarkon/atmos) -"oi" = ( -/obj/effect/decal/cleanable/blood, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/forehall) -"om" = ( -/obj/effect/turf_decal/vg_decals/atmos/carbon_dioxide, -/obj/machinery/light/small/directional/east, -/obj/machinery/air_sensor/tarkon/carbon_tank{ - pixel_x = 26 - }, -/turf/open/floor/engine/co2, -/area/ruin/space/has_grav/port_tarkon/atmos) -"oq" = ( -/obj/machinery/processor, -/turf/open/floor/iron/cafeteria, -/area/ruin/space/has_grav/port_tarkon/kitchen) -"os" = ( -/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, -/area/ruin/space/has_grav/port_tarkon/mining) -"ot" = ( -/obj/effect/turf_decal/sand/plating, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/mining) -"ov" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/decal/cleanable/blood, -/turf/open/floor/carpet/black, -/area/ruin/space/has_grav/port_tarkon/dorms) -"oy" = ( -/obj/structure/safe/floor, -/obj/structure/table, -/obj/item/stack/spacecash/c10000, -/obj/item/stack/spacecash/c10000, -/obj/item/stack/spacecash/c10000, -/obj/item/stack/spacecash/c10000, -/obj/item/stack/spacecash/c10000, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/cargo) -"oC" = ( -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ - dir = 1 - }, -/obj/effect/turf_decal/tile/neutral, -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/centerhall) -"oE" = ( -/obj/machinery/button/door{ - id = "tarkonouter"; - name = "Exterior Shutter Control"; - pixel_x = -6 - }, -/obj/machinery/button/door{ - id = "tarkoninner"; - name = "Inner Shutter Control"; - pixel_x = 6 - }, -/turf/closed/wall, -/area/ruin/space/has_grav/port_tarkon/storage) -"oF" = ( -/obj/effect/mob_spawn/corpse/human/damaged, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/cult, -/area/ruin/space/has_grav/port_tarkon/atmos) -"oH" = ( -/obj/effect/decal/cleanable/blood, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/port_tarkon/developement) -"oI" = ( -/obj/machinery/atmospherics/components/unary/vent_pump/siphon/monitored/oxygen_output/tarkon{ - dir = 4 - }, -/turf/open/floor/engine/o2, -/area/ruin/space/has_grav/port_tarkon/atmos) -"oL" = ( -/turf/open/floor/plating, -/area/ruin/space/has_grav/port_tarkon/afthall) -"oN" = ( -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/centerhall) -"oQ" = ( -/obj/structure/window/reinforced/spawner/directional/north, -/obj/effect/turf_decal/tile/dark/fourcorners, -/obj/machinery/computer/atmos_control/tarkon/carbon_tank{ - dir = 8 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/atmos) -"oS" = ( -/obj/structure/chair/office, -/obj/effect/turf_decal/tile/blue{ - dir = 8 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/port_tarkon/comms) -"pa" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/decal/cleanable/glass, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/cult, -/area/ruin/space/has_grav/port_tarkon/developement) -"pb" = ( -/obj/effect/decal/cleanable/blood/tracks{ - dir = 9 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/cult, -/area/ruin/space/has_grav/port_tarkon/atmos) -"pc" = ( -/obj/effect/turf_decal/bot, -/turf/open/floor/plating, -/area/ruin/space/has_grav/port_tarkon/atmos) -"pd" = ( -/obj/machinery/griddle, -/turf/open/floor/iron/cafeteria, -/area/ruin/space/has_grav/port_tarkon/kitchen) -"pf" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/light_switch/directional/east, -/obj/effect/turf_decal/tile/yellow/anticorner{ - dir = 4 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/power1) -"ph" = ( -/obj/structure/filingcabinet, -/obj/effect/turf_decal/tile/red/half{ - dir = 1 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/secoff) -"pj" = ( -/obj/machinery/light/dim/directional/east, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/porthall) -"pl" = ( -/obj/structure/table, -/obj/item/stack/spacecash/c200, -/obj/item/stack/spacecash/c200, -/obj/item/stack/spacecash/c200, -/obj/item/stack/spacecash/c200, -/obj/item/stack/spacecash/c200, -/obj/item/stack/spacecash/c200, -/obj/item/stack/spacecash/c200, -/obj/item/stack/spacecash/c200, -/obj/item/stack/spacecash/c200, -/obj/item/stack/spacecash/c200, -/obj/effect/turf_decal/tile/brown/half, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/cargo) -"po" = ( -/obj/structure/sink/kitchen/directional/south, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/cafeteria, -/area/ruin/space/has_grav/port_tarkon/kitchen) -"ps" = ( -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/plating, -/area/ruin/space/has_grav/port_tarkon/power1) -"pt" = ( -/obj/structure/statue/bone/rib, -/obj/effect/decal/cleanable/blood, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/cult, -/area/ruin/space/has_grav/port_tarkon/toolstorage) -"pv" = ( -/obj/item/crowbar, -/obj/item/crowbar, -/obj/item/crowbar, -/obj/structure/table, -/obj/machinery/light/warm/directional/south, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon) -"pw" = ( -/obj/structure/table, -/obj/item/paper/crumpled, -/obj/effect/turf_decal/tile/blue/half{ - dir = 8 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/port_tarkon/comms) -"py" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/decal/cleanable/blood/tracks{ - dir = 8 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/starboardhall) -"pz" = ( -/obj/effect/decal/cleanable/glass, -/turf/open/floor/plating, -/area/ruin/space/has_grav/port_tarkon/garden) -"pA" = ( -/obj/effect/turf_decal/vg_decals/atmos/mix, -/obj/machinery/light/small/directional/west, -/turf/open/floor/engine/vacuum, -/area/ruin/space/has_grav/port_tarkon/atmos) -"pB" = ( -/turf/closed/wall/mineral/cult/artificer, -/area/ruin/space/has_grav/port_tarkon/kitchen) -"pC" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/cable, -/obj/effect/decal/cleanable/blood, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/cult, -/area/ruin/space/has_grav/port_tarkon/forehall) -"pE" = ( -/obj/machinery/airalarm/directional/north, -/obj/effect/mapping_helpers/airalarm/all_access, -/obj/effect/turf_decal/tile/purple/half{ - dir = 1 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/port_tarkon/developement) -"pG" = ( -/obj/effect/decal/cleanable/blood, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/garden) -"pH" = ( -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ - dir = 1 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/power1) -"pJ" = ( -/obj/structure/cable, -/obj/machinery/power/apc/auto_name/directional/west, -/obj/effect/mapping_helpers/apc/no_charge, -/obj/effect/mapping_helpers/apc/unlocked, -/obj/effect/turf_decal/tile/yellow/anticorner{ - dir = 8 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/toolstorage) -"pM" = ( -/obj/structure/cable, -/obj/machinery/firealarm/directional/east, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/effect/decal/cleanable/blood/tracks, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/afthall) -"pT" = ( -/obj/structure/chair/office, -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ - dir = 1 - }, -/obj/effect/turf_decal/tile/red/half, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/secoff) -"pU" = ( -/obj/machinery/atmospherics/components/unary/outlet_injector/monitored/carbon_input/tarkon{ - dir = 8 - }, -/turf/open/floor/engine/co2, -/area/ruin/space/has_grav/port_tarkon/atmos) -"pW" = ( -/obj/machinery/power/port_gen/pacman/super{ - name = "\improper emergency power generator"; - time_per_sheet = 40 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/plating, -/area/ruin/space/has_grav/port_tarkon/atmos) -"pX" = ( -/obj/machinery/vending/clothing, -/obj/machinery/light/dim/directional/east, -/turf/open/floor/wood/large, -/area/ruin/space/has_grav/port_tarkon/dorms) -"pY" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/decal/cleanable/blood/tracks, -/turf/closed/wall/mineral/cult/artificer, -/area/ruin/space/has_grav/port_tarkon/developement) -"qa" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/cable, -/mob/living/basic/construct/wraith/hostile{ - health = 125; - maxHealth = 125 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/forehall) -"qb" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/turf_decal/delivery/blue, -/obj/effect/turf_decal/tile/neutral/half{ - dir = 1 - }, -/obj/effect/decal/cleanable/blood, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/centerhall) -"qe" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/cable, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/observ) -"qf" = ( -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/cult, -/area/ruin/space/has_grav/port_tarkon/porthall) -"qh" = ( -/obj/machinery/door/poddoor/shutters{ - id = "tarkonouter"; - name = "External Bay Shutters" - }, -/obj/effect/turf_decal/trimline/yellow/filled/warning, -/obj/effect/turf_decal/trimline/yellow/filled/warning{ - dir = 8 - }, -/turf/open/floor/iron/airless, -/area/ruin/space/has_grav/port_tarkon/storage) -"qi" = ( -/obj/effect/turf_decal/stripes/asteroid/line{ - dir = 6 - }, -/turf/open/misc/asteroid/airless, -/area/solars/tarkon) -"qk" = ( -/obj/structure/window/reinforced/spawner/directional/north, -/obj/effect/turf_decal/tile/blue/fourcorners, -/obj/machinery/computer/atmos_control/tarkon/oxygen_tank{ - dir = 4 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/atmos) -"qo" = ( -/obj/effect/turf_decal/tile/neutral/anticorner{ - dir = 1 - }, -/obj/effect/decal/cleanable/blood, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/centerhall) -"qr" = ( -/obj/effect/turf_decal/sand/plating, -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/mining) -"qv" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/mob_spawn/corpse/human/assistant, -/obj/effect/decal/cleanable/blood, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/cult, -/area/ruin/space/has_grav/port_tarkon/centerhall) -"qy" = ( -/obj/structure/statue/bone/rib, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/cult, -/area/ruin/space/has_grav/port_tarkon/developement) -"qB" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/decal/cleanable/blood/tracks{ - dir = 6 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/cult, -/area/ruin/space/has_grav/port_tarkon/starboardhall) -"qD" = ( -/obj/structure/lattice, -/mob/living/basic/carp, -/turf/open/space/basic, -/area/template_noop) -"qF" = ( -/obj/effect/turf_decal/sand, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/decal/cleanable/blood, -/mob/living/simple_animal/hostile/cult/ghost, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/cult, -/area/ruin/space/has_grav/port_tarkon/mining) -"qH" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/decal/cleanable/blood/tracks, -/obj/effect/decal/cleanable/blood, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/cult, -/area/ruin/space/has_grav/port_tarkon/storage) -"qK" = ( -/obj/effect/decal/cleanable/glass, -/obj/effect/decal/cleanable/blood/tracks{ - dir = 4 - }, -/obj/effect/mob_spawn/corpse/human, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/cult, -/area/ruin/space/has_grav/port_tarkon/developement) -"qL" = ( -/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/neutral/half, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/centerhall) -"qO" = ( -/obj/effect/heretic_rune/big, -/mob/living/simple_animal/hostile/cult/warrior{ - health = 175; - maxHealth = 175 - }, -/obj/effect/decal/cleanable/blood, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/cult, -/area/ruin/space/has_grav/port_tarkon/storage) -"qQ" = ( -/obj/structure/cable, -/obj/machinery/power/apc/auto_name/directional/north, -/obj/effect/mapping_helpers/apc/no_charge, -/obj/effect/mapping_helpers/apc/unlocked, -/obj/effect/decal/cleanable/blood, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/cult, -/area/ruin/space/has_grav/port_tarkon/secoff) -"qS" = ( -/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/east, -/obj/effect/mapping_helpers/apc/no_charge, -/obj/effect/mapping_helpers/apc/unlocked, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/starboardhall) -"ra" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/decal/cleanable/blood/tracks{ - dir = 4 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/porthall) -"rg" = ( -/obj/effect/turf_decal/stripes/asteroid/corner, -/turf/open/misc/asteroid/airless, -/area/solars/tarkon) -"rh" = ( -/turf/closed/wall, -/area/ruin/space/has_grav/port_tarkon/toolstorage) -"ri" = ( -/obj/effect/heretic_rune/big, -/obj/effect/decal/cleanable/blood, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/cult, -/area/ruin/space/has_grav/port_tarkon/atmos) -"rk" = ( -/obj/structure/closet, -/obj/effect/decal/cleanable/dirt, -/obj/item/clothing/shoes/workboots/mining, -/obj/item/clothing/shoes/winterboots, -/obj/item/clothing/shoes/jackboots, -/obj/item/clothing/under/misc/nova/utility, -/obj/item/clothing/under/misc/nova/utility, -/obj/item/storage/backpack, -/obj/item/storage/backpack/duffelbag, -/obj/item/storage/backpack/satchel, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon) -"ro" = ( -/obj/effect/turf_decal/tile/neutral/half{ - dir = 8 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/centerhall) -"ru" = ( -/obj/structure/table/reinforced, -/obj/effect/turf_decal/tile/brown/anticorner{ - dir = 1 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/cargo) -"rv" = ( -/obj/structure/table, -/obj/item/storage/medkit/advanced, -/obj/item/storage/medkit/surgery, -/obj/machinery/airalarm/directional/east, -/obj/effect/mapping_helpers/airalarm/all_access, -/obj/effect/turf_decal/tile/blue/half{ - dir = 4 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/trauma) -"rw" = ( -/obj/machinery/light_switch/directional/south, -/obj/effect/turf_decal/tile/neutral/half, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/centerhall) -"ry" = ( -/obj/machinery/firealarm/directional/east, -/obj/machinery/light/dim/directional/east, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/cult, -/area/ruin/space/has_grav/port_tarkon/comms) -"rz" = ( -/obj/structure/rack, -/obj/item/assembly/igniter, -/obj/effect/turf_decal/tile/yellow/half{ - dir = 1 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/toolstorage) -"rB" = ( -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ - dir = 8 - }, -/obj/machinery/airalarm/directional/south, -/obj/effect/mapping_helpers/airalarm/all_access, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/cult, -/area/ruin/space/has_grav/port_tarkon/storage) -"rD" = ( -/obj/structure/closet, -/obj/item/storage/backpack/satchel/explorer, -/obj/item/clothing/mask/gas/explorer, -/obj/item/gps/mining, -/obj/item/storage/bag/ore, -/obj/effect/turf_decal/tile/brown/anticorner{ - dir = 8 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/mining) -"rF" = ( -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ - dir = 8 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/cult, -/area/ruin/space/has_grav/port_tarkon/developement) -"rG" = ( -/obj/structure/curtain, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/port_tarkon/developement) -"rH" = ( -/obj/structure/table, -/obj/machinery/cell_charger, -/obj/machinery/light/dim/directional/east, -/obj/effect/turf_decal/tile/purple/half{ - dir = 4 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/cult, -/area/ruin/space/has_grav/port_tarkon/developement) -"rK" = ( -/obj/machinery/door/poddoor/shutters/window{ - id = "tarkoninner"; - name = "Interior Bay Shutter" - }, -/obj/effect/turf_decal/trimline/yellow/filled/warning{ - dir = 1 - }, -/obj/effect/turf_decal/trimline/yellow/filled/warning{ - dir = 8 - }, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/storage) -"rL" = ( -/obj/effect/turf_decal/vg_decals/atmos/oxygen, -/obj/machinery/light/small/directional/west, -/obj/machinery/air_sensor/tarkon/oxygen_tank{ - pixel_x = -26 - }, -/turf/open/floor/engine/o2, -/area/ruin/space/has_grav/port_tarkon/atmos) -"rV" = ( -/obj/machinery/airalarm/directional/north, -/obj/effect/turf_decal/tile/yellow/half{ - dir = 1 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/toolstorage) -"rW" = ( -/obj/machinery/airalarm/directional/north, -/obj/effect/mapping_helpers/airalarm/all_access, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/porthall) -"rY" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/turf/closed/wall/mineral/cult/artificer, -/area/ruin/space/has_grav/port_tarkon/porthall) -"rZ" = ( -/obj/item/stack/tile/carpet/neon/simple/teal/nodots/sixty, -/turf/open/floor/plating, -/area/ruin/space/has_grav/port_tarkon/cargo) -"sa" = ( -/obj/machinery/power/turbine/inlet_compressor{ - dir = 4 - }, -/obj/effect/turf_decal/stripes/line{ - dir = 8 - }, -/obj/effect/turf_decal/stripes/red/line{ - dir = 8 - }, -/obj/structure/cable, -/turf/open/floor/engine/vacuum, -/area/ruin/space/has_grav/port_tarkon/atmos) -"sc" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/visible/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/dark/visible, -/obj/machinery/air_sensor/tarkon/incinerator_tank{ - pixel_x = -26 - }, -/turf/open/floor/engine/vacuum, -/area/ruin/space/has_grav/port_tarkon/atmos) -"se" = ( -/obj/machinery/door/airlock/research/glass, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/decal/cleanable/blood/tracks{ - dir = 4 - }, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/port_tarkon/developement) -"sj" = ( -/obj/machinery/atmospherics/components/unary/vent_pump/siphon/monitored/nitrogen_output/tarkon{ - dir = 4 - }, -/turf/open/floor/engine/n2, -/area/ruin/space/has_grav/port_tarkon/atmos) -"sl" = ( -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/cafeteria, -/area/ruin/space/has_grav/port_tarkon/kitchen) -"sm" = ( -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ - dir = 8 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/cult, -/area/ruin/space/has_grav/port_tarkon) -"sn" = ( -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ - dir = 1 - }, -/obj/effect/turf_decal/tile/neutral/half, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/centerhall) -"sq" = ( -/obj/structure/closet, -/obj/item/pickaxe/silver, -/obj/item/storage/backpack/duffelbag, -/obj/item/clothing/glasses/meson, -/obj/item/t_scanner/adv_mining_scanner/lesser, -/obj/effect/turf_decal/tile/brown/half, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/mining) -"sr" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/effect/turf_decal/tile/purple/half, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/port_tarkon/developement) -"sv" = ( -/turf/closed/mineral/random/high_chance, -/area/ruin/space/has_grav) -"sw" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/decal/cleanable/blood/tracks{ - dir = 6 - }, -/turf/open/floor/wood/large, -/area/ruin/space/has_grav/port_tarkon/dorms) -"sA" = ( -/obj/effect/decal/cleanable/blood, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/cult, -/area/ruin/space/has_grav/port_tarkon/comms) -"sD" = ( -/obj/structure/table/wood, -/obj/item/flashlight/lamp/green, -/obj/effect/spawner/random/clothing/costume, -/turf/open/floor/carpet/black, -/area/ruin/space/has_grav/port_tarkon/dorms) -"sE" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/structure/cable, -/obj/effect/decal/cleanable/blood/tracks, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/cult, -/area/ruin/space/has_grav/port_tarkon/afthall) -"sI" = ( -/obj/effect/turf_decal/delivery/red, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/forehall) -"sK" = ( -/obj/structure/chair/sofa/corp/left{ - dir = 1 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/observ) -"sL" = ( -/obj/effect/spawner/structure/window/reinforced/plasma, -/turf/open/floor/plating, -/area/ruin/space/has_grav/port_tarkon/atmos) -"sM" = ( -/obj/machinery/firealarm/directional/west, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/cult, -/area/ruin/space/has_grav/port_tarkon/forehall) -"sN" = ( -/obj/structure/frame/computer{ - dir = 8 - }, -/obj/item/circuitboard/computer/rdconsole, -/obj/effect/turf_decal/tile/purple/half{ - dir = 4 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/port_tarkon/developement) -"sP" = ( -/obj/machinery/firealarm/directional/west, -/obj/effect/turf_decal/tile/purple/half{ - dir = 8 - }, -/obj/effect/decal/cleanable/blood, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/port_tarkon/developement) -"sS" = ( -/obj/effect/decal/cleanable/blood, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon) -"sX" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/structure/cable, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/garden) -"tc" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/light_switch/directional/north, -/obj/machinery/firealarm/directional/south{ - pixel_y = -31 - }, -/obj/effect/decal/cleanable/blood/tracks{ - dir = 8 - }, -/turf/open/floor/wood/large, -/area/ruin/space/has_grav/port_tarkon/dorms) -"td" = ( -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ - dir = 8 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/cafeteria, -/area/ruin/space/has_grav/port_tarkon/kitchen) -"te" = ( -/obj/machinery/atmospherics/components/unary/vent_pump/high_volume/siphon/monitored/air_output/tarkon{ - dir = 4 - }, -/turf/open/floor/engine/vacuum, -/area/ruin/space/has_grav/port_tarkon/atmos) -"th" = ( -/obj/effect/turf_decal/tile/brown/anticorner{ - dir = 8 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/starboardhall) -"tj" = ( -/mob/living/simple_animal/hostile/cult/magic, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/cult, -/area/ruin/space/has_grav/port_tarkon/atmos) -"tk" = ( -/obj/structure/table/reinforced, -/obj/machinery/vending/boozeomat, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/centerhall) -"tn" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/port_tarkon/comms) -"to" = ( -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ - dir = 4 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/cult, -/area/ruin/space/has_grav/port_tarkon/centerhall) -"tp" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/cable, -/obj/machinery/light_switch/directional/south, -/obj/effect/decal/cleanable/blood/tracks{ - dir = 4 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/forehall) -"ts" = ( -/obj/effect/spawner/structure/window/reinforced/no_firelock, -/obj/machinery/atmospherics/pipe/layer_manifold/purple/hidden{ - dir = 4 - }, -/turf/open/floor/plating, -/area/ruin/space/has_grav/port_tarkon/atmos) -"tt" = ( -/obj/structure/fence{ - dir = 4 - }, -/turf/open/misc/asteroid/airless, -/area/ruin/space/has_grav) -"tv" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/glass, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/starboardhall) -"ty" = ( -/obj/machinery/airalarm/directional/north, -/obj/effect/mapping_helpers/airalarm/all_access, -/obj/effect/decal/cleanable/glass, -/obj/effect/decal/cleanable/blood, -/obj/effect/mob_spawn/corpse/human, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/cult, -/area/ruin/space/has_grav/port_tarkon/developement) -"tz" = ( -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ - dir = 1 - }, -/obj/effect/decal/cleanable/glass, -/obj/effect/decal/cleanable/blood, -/obj/effect/decal/cleanable/blood/tracks{ - dir = 4 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/cult, -/area/ruin/space/has_grav/port_tarkon/developement) -"tA" = ( -/obj/machinery/light/dim/directional/south, -/obj/effect/turf_decal/tile/purple/half, -/obj/item/mod/construction/broken_core, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/port_tarkon/developement) -"tC" = ( -/obj/structure/falsewall, -/turf/open/floor/plating, -/area/ruin/space/has_grav/port_tarkon/cargo) -"tE" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/airalarm/directional/north, -/obj/effect/mapping_helpers/airalarm/all_access, -/obj/effect/decal/cleanable/blood/tracks{ - dir = 4 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/porthall) -"tH" = ( -/obj/effect/spawner/structure/window/reinforced, -/turf/open/floor/plating, -/area/ruin/space/has_grav/port_tarkon/centerhall) -"tI" = ( -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ - dir = 4 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/cult, -/area/ruin/space/has_grav/port_tarkon/afthall) -"tJ" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/cable, -/obj/effect/decal/cleanable/blood/tracks, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/cult, -/area/ruin/space/has_grav/port_tarkon/trauma) -"tL" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/cable, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/cult, -/area/ruin/space/has_grav/port_tarkon/observ) -"tM" = ( -/obj/machinery/door/airlock/cult/unruned/glass, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/door/firedoor/solid, -/turf/open/floor/wood/large, -/area/ruin/space/has_grav/port_tarkon/dorms) -"tP" = ( -/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/neutral{ - dir = 4 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/cult, -/area/ruin/space/has_grav/port_tarkon/centerhall) -"tQ" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/porthall) -"tT" = ( -/obj/structure/closet, -/obj/machinery/firealarm/directional/east, -/obj/effect/decal/cleanable/dirt, -/obj/item/clothing/shoes/workboots/mining, -/obj/item/clothing/shoes/winterboots, -/obj/item/clothing/shoes/jackboots, -/obj/item/clothing/under/misc/nova/utility, -/obj/item/clothing/under/misc/nova/utility, -/obj/item/storage/backpack, -/obj/item/storage/backpack/duffelbag, -/obj/item/storage/backpack/satchel, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon) -"tV" = ( -/obj/effect/turf_decal/sand/plating, -/obj/effect/turf_decal/tile/brown{ - dir = 4 - }, -/obj/effect/decal/cleanable/blood, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/mining) -"tY" = ( -/obj/structure/bed/pod{ - dir = 1 - }, -/obj/item/bedsheet/random{ - dir = 1 - }, -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ - dir = 4 - }, -/obj/machinery/button/door/directional/south{ - id = "ptdorm1"; - name = "Door Lock Control"; - normaldoorcontrol = 1; - specialfunctions = 4 - }, -/obj/effect/decal/cleanable/blood, -/obj/effect/mob_spawn/corpse/human/cook, -/turf/open/floor/carpet/purple, -/area/ruin/space/has_grav/port_tarkon/dorms) -"tZ" = ( -/obj/structure/statue/bone/rib{ - dir = 1 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/cult, -/area/ruin/space/has_grav/port_tarkon/comms) -"ub" = ( -/obj/effect/spawner/structure/window/reinforced/no_firelock, -/obj/machinery/atmospherics/pipe/layer_manifold/yellow/hidden{ - dir = 4 - }, -/turf/open/floor/plating, -/area/ruin/space/has_grav/port_tarkon/atmos) -"ud" = ( -/obj/effect/turf_decal/sand, -/obj/machinery/firealarm/directional/east, -/obj/effect/turf_decal/tile/brown/half{ - dir = 4 - }, -/obj/effect/decal/cleanable/blood, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/mining) -"ug" = ( -/obj/structure/closet/firecloset, -/obj/effect/decal/remains/human, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/plating, -/area/ruin/space/has_grav/port_tarkon/forehall) -"uh" = ( -/obj/effect/decal/cleanable/blood, -/obj/effect/mob_spawn/corpse/human/doctor, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/cult, -/area/ruin/space/has_grav/port_tarkon/trauma) -"ui" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/power/apc/auto_name/directional/north, -/obj/effect/mapping_helpers/apc/no_charge, -/obj/effect/mapping_helpers/apc/unlocked, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/cult, -/area/ruin/space/has_grav/port_tarkon/storage) -"ul" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/cult, -/area/ruin/space/has_grav/port_tarkon/centerhall) -"un" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/cable, -/obj/effect/decal/cleanable/blood/tracks, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/port_tarkon/developement) -"uo" = ( -/mob/living/basic/carp/mega, -/obj/structure/lattice, -/turf/open/misc/asteroid/airless, -/area/ruin/space/has_grav) -"ut" = ( -/obj/effect/spawner/random/entertainment/cigarette_pack, -/obj/structure/closet/crate/bin, -/obj/effect/turf_decal/tile/blue/anticorner{ - dir = 4 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/port_tarkon/comms) -"uv" = ( -/turf/closed/wall, -/area/ruin/space/has_grav/port_tarkon) -"ux" = ( -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ - dir = 4 - }, -/obj/structure/statue/bone/rib{ - dir = 1 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/cult, -/area/ruin/space/has_grav/port_tarkon) -"uB" = ( -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, -/obj/effect/decal/cleanable/blood/tracks, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/cult, -/area/ruin/space/has_grav/port_tarkon/starboardhall) -"uC" = ( -/obj/structure/closet/crate/bin{ - pixel_y = 8 - }, -/obj/effect/spawner/random/entertainment/cigarette_pack, -/obj/item/reagent_containers/cup/rag, -/turf/open/floor/iron/white, -/area/ruin/space/has_grav/port_tarkon/centerhall) -"uD" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/decal/cleanable/blood, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/cult, -/area/ruin/space/has_grav/port_tarkon) -"uF" = ( -/obj/structure/lattice, -/turf/open/misc/asteroid/airless, -/area/ruin/space/has_grav) -"uH" = ( -/obj/effect/spawner/structure/window/reinforced/no_firelock, -/obj/machinery/door/firedoor/solid/closed, -/turf/open/floor/plating, -/area/ruin/space/has_grav/port_tarkon/forehall) -"uI" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/cable, -/obj/effect/decal/cleanable/blood/tracks{ - dir = 4 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/porthall) -"uK" = ( -/obj/machinery/atmospherics/components/unary/portables_connector/visible{ - dir = 4 - }, -/obj/effect/turf_decal/tile/purple/fourcorners, -/obj/structure/cable, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/atmos) -"uM" = ( -/obj/machinery/light/dim/directional/east, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/cult, -/area/ruin/space/has_grav/port_tarkon/storage) -"uN" = ( -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ - dir = 4 - }, -/mob/living/simple_animal/hostile/cult/magic, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/cult, -/area/ruin/space/has_grav/port_tarkon/comms) -"uR" = ( -/turf/open/floor/iron/freezer, -/area/ruin/space/has_grav/port_tarkon/kitchen) -"uS" = ( -/obj/effect/spawner/structure/window/reinforced, -/turf/open/floor/plating, -/area/ruin/space/has_grav/port_tarkon/secoff) -"uU" = ( -/obj/effect/turf_decal/stripes/asteroid/line{ - dir = 5 - }, -/turf/open/misc/asteroid/airless, -/area/solars/tarkon) -"uW" = ( -/obj/effect/decal/cleanable/blood/tracks, -/mob/living/simple_animal/hostile/cult, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/cargo) -"vc" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/decal/cleanable/blood/tracks{ - dir = 4 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/cult, -/area/ruin/space/has_grav/port_tarkon/developement) -"vd" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/general, -/obj/structure/cable, -/obj/machinery/power/apc/auto_name/directional/east, -/obj/effect/mapping_helpers/apc/no_charge, -/obj/effect/mapping_helpers/apc/unlocked, -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ - dir = 8 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/centerhall) -"ve" = ( -/obj/machinery/door/airlock/wood{ - id_tag = "ptdorm3"; - name = "Private Dorm 3" - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/door/firedoor/solid, -/obj/effect/decal/cleanable/blood/tracks, -/turf/open/floor/wood/large, -/area/ruin/space/has_grav/port_tarkon/dorms) -"vj" = ( -/obj/structure/closet/crate/internals, -/obj/item/tank/internals/oxygen, -/obj/item/clothing/mask/breath, -/obj/item/clothing/suit/space/eva, -/obj/item/clothing/head/helmet/space/eva, -/obj/effect/turf_decal/tile/yellow/anticorner{ - dir = 4 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/power1) -"vl" = ( -/obj/effect/turf_decal/tile/blue/half{ - dir = 4 - }, -/obj/structure/closet/crate/freezer/blood, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/trauma) -"vm" = ( -/obj/machinery/airalarm/directional/north, -/obj/machinery/light/directional/north, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/cult, -/area/ruin/space/has_grav/port_tarkon/cargo) -"vo" = ( -/obj/structure/table/wood/fancy/blue, -/obj/effect/turf_decal/tile/blue/half{ - dir = 1 - }, -/obj/machinery/cell_charger, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/port_tarkon/comms) -"vp" = ( -/obj/machinery/atmospherics/miner/n2o, -/turf/open/floor/engine/n2o, -/area/ruin/space/has_grav/port_tarkon/atmos) -"vs" = ( -/obj/machinery/light/dim/directional/west, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/cult, -/area/ruin/space/has_grav/port_tarkon/developement) -"vy" = ( -/obj/effect/turf_decal/tile/purple/half, -/obj/effect/decal/cleanable/blood/tracks, -/obj/effect/decal/cleanable/blood, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/port_tarkon/developement) -"vz" = ( -/obj/machinery/door/airlock/cult/unruned/glass, -/obj/machinery/door/firedoor/solid, -/turf/open/floor/cult, -/area/ruin/space/has_grav/port_tarkon/porthall) -"vA" = ( -/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{ - dir = 8 - }, -/obj/effect/decal/cleanable/blood, -/obj/effect/decal/cleanable/blood/tracks{ - dir = 4 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/starboardhall) -"vB" = ( -/obj/structure/curtain, -/obj/effect/turf_decal/tile/purple/half, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/port_tarkon/developement) -"vC" = ( -/turf/closed/wall/r_wall, -/area/ruin/space/has_grav/port_tarkon/secoff) -"vE" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/item/rcd_ammo, -/obj/item/rcd_ammo, -/obj/item/rcd_ammo, -/obj/structure/closet/crate/secure/engineering, -/obj/effect/decal/cleanable/dirt, -/obj/item/construction/rcd/arcd/mattermanipulator, -/turf/open/floor/cult, -/area/ruin/space/has_grav/port_tarkon/storage) -"vF" = ( -/obj/item/gps/computer/space{ - gpstag = "Port Tarkon - Defcon 2" - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/centerhall) -"vG" = ( -/obj/structure/cable, -/obj/effect/turf_decal/tile/blue/half{ - dir = 1 - }, -/obj/machinery/power/apc/auto_name/directional/north, -/obj/effect/mapping_helpers/apc/no_charge, -/obj/effect/mapping_helpers/apc/unlocked, -/obj/effect/mob_spawn/corpse/human/damaged, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/port_tarkon/comms) -"vN" = ( -/obj/machinery/iv_drip, -/obj/effect/turf_decal/tile/blue/half{ - dir = 8 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/trauma) -"vO" = ( -/turf/open/floor/plating, -/area/ruin/space/has_grav/port_tarkon/atmos) -"vQ" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/decal/cleanable/glass, -/obj/effect/decal/cleanable/blood, -/mob/living/basic/construct/artificer/hostile{ - health = 200; - maxHealth = 200; - name = "Third eye of the veil" - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/cult, -/area/ruin/space/has_grav/port_tarkon/developement) -"vR" = ( -/obj/machinery/light/small/directional/north, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/white, -/area/ruin/space/has_grav/port_tarkon/centerhall) -"vU" = ( -/obj/structure/cable, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/plating, -/area/ruin/space/has_grav/port_tarkon/power1) -"vZ" = ( -/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/cult, -/area/ruin/space/has_grav/port_tarkon/storage) -"wa" = ( -/obj/structure/cable, -/obj/machinery/power/terminal{ - dir = 4 - }, -/obj/effect/turf_decal/tile/yellow/half{ - dir = 8 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/power1) -"wc" = ( -/obj/structure/table, -/obj/item/clothing/suit/toggle/labcoat/medical, -/obj/machinery/power/apc/auto_name/directional/west, -/obj/effect/mapping_helpers/apc/no_charge, -/obj/effect/mapping_helpers/apc/unlocked, -/obj/structure/cable, -/obj/effect/turf_decal/tile/blue/half{ - dir = 8 - }, -/obj/item/clothing/suit/toggle/labcoat/medical, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/trauma) -"we" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/cable, -/obj/effect/decal/cleanable/blood/tracks{ - dir = 4 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/cult, -/area/ruin/space/has_grav/port_tarkon/porthall) -"wh" = ( -/obj/structure/chair/stool/directional/south, -/obj/effect/turf_decal/stripes{ - dir = 1 - }, -/obj/effect/decal/cleanable/dirt, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden, -/turf/open/floor/engine, -/area/ruin/space/has_grav/port_tarkon/atmos) -"wi" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/structure/statue/bone/rib{ - dir = 1 - }, -/obj/effect/decal/cleanable/dirt, -/obj/machinery/button/door{ - id = "ptporthall"; - name = "shutter controls"; - pixel_x = -31 - }, -/turf/open/floor/cult, -/area/ruin/space/has_grav/port_tarkon/porthall) -"wp" = ( -/obj/effect/mob_spawn/corpse/human/cargo_tech, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/cult, -/area/ruin/space/has_grav/port_tarkon/storage) -"wt" = ( -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ - dir = 8 - }, -/obj/effect/decal/cleanable/blood, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/porthall) -"ww" = ( -/obj/machinery/airalarm/directional/north, -/obj/effect/mapping_helpers/airalarm/all_access, -/obj/effect/turf_decal/tile/neutral/half{ - dir = 1 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/centerhall) -"wx" = ( -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, -/obj/effect/decal/cleanable/glass, -/obj/effect/decal/cleanable/blood, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/cult, -/area/ruin/space/has_grav/port_tarkon/developement) -"wC" = ( -/obj/effect/turf_decal/tile/yellow/full, -/obj/structure/rack/shelf, -/obj/effect/spawner/random/engineering/tool, -/obj/effect/spawner/random/engineering/tool, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/toolstorage) -"wQ" = ( -/obj/structure/window/reinforced/tinted/spawner/directional/south, -/obj/machinery/light/dim/directional/west, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/port_tarkon/developement) -"wR" = ( -/obj/effect/decal/cleanable/blood, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/observ) -"wV" = ( -/obj/machinery/power/solar, -/obj/effect/turf_decal/stripes/asteroid/line, -/turf/open/misc/asteroid/airless, -/area/solars/tarkon) -"wW" = ( -/obj/machinery/atmospherics/components/binary/dp_vent_pump/high_volume/incinerator_tarkon{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/visible/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/dark/visible, -/turf/open/floor/engine/vacuum, -/area/ruin/space/has_grav/port_tarkon/atmos) -"wY" = ( -/obj/effect/decal/cleanable/blood, -/obj/effect/decal/cleanable/blood/tracks{ - dir = 4 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/cult, -/area/ruin/space/has_grav/port_tarkon/comms) -"wZ" = ( -/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{ - dir = 8 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/mining) -"xc" = ( -/obj/machinery/light/warm/directional/west, -/obj/effect/turf_decal/tile/neutral/anticorner{ - dir = 1 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/centerhall) -"xi" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/cable, -/obj/effect/decal/cleanable/blood/tracks, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/trauma) -"xj" = ( -/obj/machinery/atmospherics/components/unary/vent_pump/siphon/monitored/carbon_output/tarkon{ - dir = 8 - }, -/turf/open/floor/engine/co2, -/area/ruin/space/has_grav/port_tarkon/atmos) -"xo" = ( -/mob/living/basic/construct/artificer/hostile{ - health = 150; - maxHealth = 150 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/porthall) -"xp" = ( -/obj/effect/spawner/structure/window/reinforced/no_firelock, -/obj/machinery/atmospherics/pipe/layer_manifold/green/hidden{ - dir = 4 - }, -/turf/open/floor/plating, -/area/ruin/space/has_grav/port_tarkon/atmos) -"xq" = ( -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, -/obj/machinery/airalarm/directional/west, -/obj/effect/mapping_helpers/airalarm/all_access, -/turf/open/floor/carpet/black, -/area/ruin/space/has_grav/port_tarkon/dorms) -"xr" = ( -/obj/effect/turf_decal/tile/neutral/anticorner{ - dir = 8 - }, -/obj/item/clothing/head/helmet, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/centerhall) -"xt" = ( -/turf/closed/wall/r_wall, -/area/ruin/space/has_grav/port_tarkon/atmos) -"xu" = ( -/obj/effect/turf_decal/tile/purple/anticorner{ - dir = 8 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/port_tarkon/developement) -"xz" = ( -/obj/machinery/door/firedoor/solid/closed, -/obj/effect/spawner/structure/window/reinforced/no_firelock, -/turf/open/floor/plating, -/area/ruin/space/has_grav/port_tarkon/mining) -"xB" = ( -/obj/machinery/igniter/incinerator_tarkon, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/visible/layer2{ - dir = 5 - }, -/turf/open/floor/engine/vacuum, -/area/ruin/space/has_grav/port_tarkon/atmos) -"xE" = ( -/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/neutral/half{ - dir = 8 - }, -/obj/effect/decal/cleanable/blood, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/centerhall) -"xF" = ( -/turf/open/floor/cult, -/area/ruin/space/has_grav/port_tarkon) -"xH" = ( -/obj/machinery/ammo_workbench/unlocked, -/obj/effect/turf_decal/tile/red/half{ - dir = 1 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/secoff) -"xI" = ( -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ - dir = 8 - }, -/obj/effect/decal/cleanable/blood, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/cult, -/area/ruin/space/has_grav/port_tarkon/porthall) -"xL" = ( -/obj/machinery/power/smes/engineering{ - charge = 0 - }, -/obj/structure/cable, -/obj/effect/turf_decal/tile/yellow/half{ - dir = 1 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/power1) -"xN" = ( -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, -/obj/effect/decal/cleanable/blood, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/cult, -/area/ruin/space/has_grav/port_tarkon/observ) -"xO" = ( -/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, -/obj/effect/decal/cleanable/blood/tracks{ - dir = 5 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/cargo) -"xP" = ( -/obj/structure/cable, -/turf/open/floor/plating, -/area/ruin/space/has_grav/port_tarkon/power1) -"xR" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/structure/cable, -/obj/effect/decal/cleanable/blood, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/garden) -"xS" = ( -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/cult, -/area/ruin/space/has_grav/port_tarkon/afthall) -"xT" = ( -/obj/effect/turf_decal/tile/purple/half{ - dir = 1 - }, -/obj/machinery/firealarm/directional/north, -/obj/structure/table/reinforced, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/port_tarkon/developement) -"xU" = ( -/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/neutral/half{ - dir = 4 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/centerhall) -"xY" = ( -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ - dir = 4 - }, -/obj/structure/curtain, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/port_tarkon/developement) -"xZ" = ( -/obj/machinery/firealarm/directional/north, -/turf/closed/wall/mineral/cult/artificer, -/area/ruin/space/has_grav/port_tarkon/porthall) -"yd" = ( -/turf/closed/wall/mineral/cult/artificer, -/area/ruin/space/has_grav/port_tarkon/forehall) -"ye" = ( -/obj/effect/turf_decal/stripes/asteroid/line{ - dir = 1 - }, -/turf/open/misc/asteroid/airless, -/area/solars/tarkon) -"yf" = ( -/obj/effect/mob_spawn/ghost_role/human/tarkon/sci{ - dir = 1 - }, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon) -"yj" = ( -/obj/machinery/firealarm/directional/east, -/obj/effect/turf_decal/tile/neutral/anticorner, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/centerhall) -"yl" = ( -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ - dir = 4 - }, -/obj/structure/table/wood, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/observ) -"ym" = ( -/obj/machinery/door/poddoor/shutters/window{ - id = "tarkoninner"; - name = "Interior Bay Shutter" - }, -/obj/effect/turf_decal/trimline/yellow/filled/warning{ - dir = 1 - }, -/obj/effect/turf_decal/trimline/yellow/filled/warning{ - dir = 4 - }, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/storage) -"yo" = ( -/obj/item/pen/edagger, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/cult, -/area/ruin/space/has_grav/port_tarkon/comms) -"yq" = ( -/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/neutral, -/obj/effect/decal/cleanable/blood/tracks{ - dir = 5 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/centerhall) -"ys" = ( -/obj/effect/mob_spawn/ghost_role/human/tarkon/engi, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon) -"yt" = ( -/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/blood, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/garden) -"yv" = ( -/obj/machinery/vending/coffee, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/afthall) -"yx" = ( -/obj/item/storage/toolbox/mechanical, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/cult, -/area/ruin/space/has_grav/port_tarkon/developement) -"yy" = ( -/obj/structure/table/wood/fancy/blue, -/obj/effect/turf_decal/tile/blue/anticorner{ - dir = 1 - }, -/obj/machinery/recharger, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/port_tarkon/comms) -"yz" = ( -/obj/machinery/firealarm/directional/west, -/obj/item/mod/construction/broken_core, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/cult, -/area/ruin/space/has_grav/port_tarkon/developement) -"yA" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/decal/cleanable/blood, -/turf/open/floor/carpet/red, -/area/ruin/space/has_grav/port_tarkon/dorms) -"yC" = ( -/obj/machinery/air_sensor/tarkon/mix_tank{ - pixel_x = -26 - }, -/turf/open/floor/engine/vacuum, -/area/ruin/space/has_grav/port_tarkon/atmos) -"yD" = ( -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ - dir = 4 - }, -/obj/effect/decal/cleanable/blood/tracks, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/starboardhall) -"yF" = ( -/obj/effect/decal/cleanable/blood, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/cult, -/area/ruin/space/has_grav/port_tarkon/toolstorage) -"yG" = ( -/obj/structure/chair/office{ - dir = 1 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/cult, -/area/ruin/space/has_grav/port_tarkon/developement) -"yJ" = ( -/obj/structure/cable, -/obj/machinery/power/terminal{ - dir = 4 - }, -/obj/effect/decal/cleanable/dirt, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/port_tarkon/atmos) -"yL" = ( -/obj/structure/statue/bone/rib, -/obj/effect/decal/cleanable/blood, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/cult, -/area/ruin/space/has_grav/port_tarkon/trauma) -"yN" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/decal/cleanable/blood/tracks{ - dir = 4 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/cult, -/area/ruin/space/has_grav/port_tarkon/starboardhall) -"yO" = ( -/obj/structure/window/reinforced/tinted/spawner/directional/south, -/obj/item/circuitboard/machine/mechfab, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/cult, -/area/ruin/space/has_grav/port_tarkon/developement) -"yS" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/curtain, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/trauma) -"yT" = ( -/mob/living/basic/construct/proteon/hostile, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/porthall) -"yU" = ( -/obj/effect/spawner/structure/window/reinforced/no_firelock, -/obj/machinery/door/firedoor/solid/closed, -/turf/open/floor/plating, -/area/ruin/space/has_grav/port_tarkon/mining) -"yY" = ( -/obj/effect/spawner/structure/window/reinforced, -/turf/open/floor/plating, -/area/ruin/space/has_grav/port_tarkon/toolstorage) -"zb" = ( -/obj/effect/turf_decal/sand/plating, -/obj/structure/fence/door/opened{ - dir = 4 - }, -/turf/open/floor/plating/airless, -/area/ruin/space/has_grav) -"zc" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/cult, -/area/ruin/space/has_grav/port_tarkon/atmos) -"zd" = ( -/obj/effect/turf_decal/sand/plating, -/obj/effect/turf_decal/tile/brown, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/mining) -"zf" = ( -/turf/closed/wall/r_wall, -/area/ruin/space/has_grav/port_tarkon/mining) -"zh" = ( -/obj/machinery/light/dim/directional/east, -/obj/effect/decal/cleanable/blood, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/cult, -/area/ruin/space/has_grav/port_tarkon/mining) -"zi" = ( -/turf/closed/wall/mineral/cult/artificer, -/area/ruin/space/has_grav/port_tarkon/secoff) -"zj" = ( -/mob/living/simple_animal/hostile/cult/magic, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/port_tarkon/developement) -"zm" = ( -/obj/structure/cable, -/obj/machinery/power/terminal{ - dir = 4 - }, -/obj/effect/turf_decal/tile/yellow/anticorner{ - dir = 1 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/power1) -"zo" = ( -/turf/open/misc/asteroid/airless, -/area/ruin/space/has_grav) -"zp" = ( -/obj/effect/turf_decal/delivery/blue, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/starboardhall) -"zt" = ( -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/secoff) -"zy" = ( -/obj/effect/turf_decal/tile/brown/half{ - dir = 8 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/mining) -"zz" = ( -/obj/effect/decal/cleanable/blood, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon) -"zC" = ( -/obj/machinery/power/turbine/turbine_outlet{ - dir = 4 - }, -/obj/structure/cable, -/turf/open/floor/engine/vacuum, -/area/ruin/space/has_grav/port_tarkon/atmos) -"zD" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/decal/cleanable/blood/tracks, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/cult, -/area/ruin/space/has_grav/port_tarkon/trauma) -"zE" = ( -/obj/effect/decal/cleanable/blood, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/atmos) -"zJ" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ - dir = 4 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/power1) -"zL" = ( -/obj/machinery/firealarm/directional/west, -/obj/effect/turf_decal/tile/blue/half{ - dir = 8 - }, -/obj/machinery/light/dim/directional/west, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/port_tarkon/comms) -"zM" = ( -/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{ - dir = 4 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/starboardhall) -"zT" = ( -/obj/structure/table/reinforced, -/obj/item/stack/sheet/glass/fifty, -/obj/item/stack/sheet/iron/fifty, -/obj/item/holosign_creator/atmos, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/port_tarkon/atmos) -"zU" = ( -/obj/structure/statue/bone/rib, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/cult, -/area/ruin/space/has_grav/port_tarkon/porthall) -"zW" = ( -/obj/structure/cable, -/obj/machinery/light/directional/north, -/obj/effect/turf_decal/tile/yellow/half{ - dir = 1 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/power1) -"zZ" = ( -/obj/structure/window/reinforced/tinted/spawner/directional/south, -/obj/structure/statue/bone/rib{ - dir = 1 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/cult, -/area/ruin/space/has_grav/port_tarkon/trauma) -"Ae" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/decal/cleanable/blood/tracks, -/mob/living/simple_animal/hostile/cult/ghost, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/cult, -/area/ruin/space/has_grav/port_tarkon/trauma) -"Ak" = ( -/obj/machinery/atmospherics/components/unary/outlet_injector/monitored/incinerator_input/tarkon{ - dir = 8 - }, -/turf/open/floor/engine/vacuum, -/area/ruin/space/has_grav/port_tarkon/atmos) -"Al" = ( -/obj/structure/cable, -/obj/machinery/power/solar, -/obj/effect/turf_decal/stripes/asteroid/line{ - dir = 9 - }, -/turf/open/misc/asteroid/airless, -/area/solars/tarkon) -"Am" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/decal/cleanable/blood, -/obj/effect/decal/cleanable/blood/tracks{ - dir = 4 - }, -/obj/item/circuitboard/machine/circuit_imprinter/offstation, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/port_tarkon/developement) -"An" = ( -/obj/structure/fireaxecabinet/directional/north, -/obj/machinery/pipedispenser, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/atmos) -"Ap" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/effect/decal/cleanable/blood, -/mob/living/basic/construct/proteon/hostile, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/porthall) -"Aq" = ( -/turf/closed/wall/mineral/titanium, -/area/ruin/space/has_grav) -"At" = ( -/obj/machinery/power/solar, -/obj/structure/cable, -/obj/effect/turf_decal/stripes/asteroid/line, -/turf/open/misc/asteroid/airless, -/area/solars/tarkon) -"Au" = ( -/obj/structure/cable, -/obj/machinery/door/airlock/engineering{ - name = "Engineering" - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/door/firedoor/solid, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/power1) -"AA" = ( -/obj/effect/turf_decal/stripes{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/visible/layer2{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/dark/visible, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/port_tarkon/atmos) -"AF" = ( -/obj/machinery/atmospherics/components/unary/outlet_injector/monitored/oxygen_input/tarkon{ - dir = 4 - }, -/turf/open/floor/engine/o2, -/area/ruin/space/has_grav/port_tarkon/atmos) -"AG" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/cable, -/obj/effect/decal/cleanable/blood/tracks{ - dir = 4 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/starboardhall) -"AI" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/mob/living/basic/construct/artificer/hostile{ - health = 150; - maxHealth = 150 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/port_tarkon/developement) -"AK" = ( -/obj/effect/mob_spawn/ghost_role/human/tarkon/sec{ - dir = 4 - }, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon) -"AM" = ( -/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/delivery/white, -/obj/effect/turf_decal/tile/yellow{ - dir = 4 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/power1) -"AN" = ( -/turf/closed/wall/mineral/cult/artificer, -/area/ruin/space/has_grav/port_tarkon/porthall) -"AO" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/cable, -/obj/effect/decal/cleanable/blood, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/port_tarkon/developement) -"AP" = ( -/turf/closed/wall/r_wall, -/area/ruin/space/has_grav/port_tarkon/centerhall) -"AT" = ( -/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/neutral{ - dir = 8 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/centerhall) -"Ba" = ( -/obj/effect/turf_decal/sand, -/obj/machinery/light/small/directional/east, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/mining) -"Bc" = ( -/obj/effect/decal/cleanable/blood/tracks{ - dir = 4 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/cult, -/area/ruin/space/has_grav/port_tarkon/starboardhall) -"Bh" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/effect/decal/cleanable/blood/tracks{ - dir = 4 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/cult, -/area/ruin/space/has_grav/port_tarkon/porthall) -"Bi" = ( -/obj/machinery/atmospherics/components/binary/pump/off/general{ - dir = 4 - }, -/obj/effect/turf_decal/tile/neutral/fourcorners, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/atmos) -"Bj" = ( -/obj/effect/spawner/structure/window/reinforced/no_firelock, -/obj/machinery/atmospherics/pipe/layer_manifold/cyan/hidden{ - dir = 4 - }, -/turf/open/floor/plating, -/area/ruin/space/has_grav/port_tarkon/atmos) -"Bk" = ( -/obj/structure/cable, -/obj/machinery/power/solar, -/obj/effect/turf_decal/stripes/asteroid/line, -/turf/open/misc/asteroid/airless, -/area/solars/tarkon) -"Bn" = ( -/obj/machinery/door/airlock/public{ - name = "Kitchen Freezer" - }, -/obj/machinery/door/firedoor/solid, -/turf/open/floor/iron/freezer, -/area/ruin/space/has_grav/port_tarkon/kitchen) -"Bo" = ( -/obj/machinery/firealarm/directional/east, -/obj/effect/turf_decal/tile/brown/half{ - dir = 4 - }, -/obj/effect/decal/cleanable/dirt, -/obj/machinery/computer/order_console/mining{ - forced_express = 1; - express_cost_multiplier = 1 - }, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/mining) -"Bp" = ( -/obj/structure/window/reinforced/tinted/spawner/directional/south, -/obj/effect/turf_decal/tile/blue/half{ - dir = 8 - }, -/obj/item/circuitboard/machine/sleeper, -/obj/structure/closet/secure_closet/medical1, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/trauma) -"Bq" = ( -/obj/structure/sign/warning/vacuum, -/turf/closed/wall/mineral/cult/artificer, -/area/ruin/space/has_grav/port_tarkon/mining) -"Bs" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/cable, -/obj/effect/decal/cleanable/blood, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/cult, -/area/ruin/space/has_grav/port_tarkon/porthall) -"Bt" = ( -/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/delivery/blue, -/obj/effect/decal/cleanable/blood/tracks{ - dir = 4 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/centerhall) -"Bw" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/cable, -/obj/effect/decal/cleanable/blood/tracks{ - dir = 4 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/cult, -/area/ruin/space/has_grav/port_tarkon/forehall) -"BB" = ( -/obj/structure/closet/crate/secure/weapon, -/obj/item/gun/microfusion/mcr01, -/turf/open/floor/mineral/titanium, -/area/ruin/space/has_grav) -"BD" = ( -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/cult, -/area/ruin/space/has_grav/port_tarkon/forehall) -"BF" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/effect/mob_spawn/corpse/human/miner/mod, -/obj/effect/decal/cleanable/blood, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/cult, -/area/ruin/space/has_grav/port_tarkon/storage) -"BI" = ( -/obj/machinery/door/airlock/public/glass{ - name = "Fore Primary Hallway" - }, -/obj/machinery/door/firedoor/solid/closed, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/forehall) -"BJ" = ( -/obj/effect/decal/cleanable/blood/tracks{ - dir = 5 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/starboardhall) -"BS" = ( -/obj/effect/turf_decal/delivery/white, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/power1) -"BU" = ( -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/cult, -/area/ruin/space/has_grav/port_tarkon/mining) -"BV" = ( -/obj/machinery/light/warm/directional/south, -/obj/effect/turf_decal/tile/neutral/anticorner{ - dir = 8 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/centerhall) -"BW" = ( -/obj/structure/cable, -/obj/effect/turf_decal/tile/yellow/half, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/power1) -"BX" = ( -/obj/structure/statue/bone/rib{ - dir = 1 - }, -/obj/effect/decal/cleanable/blood, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/cult, -/area/ruin/space/has_grav/port_tarkon/developement) -"Ce" = ( -/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{ - dir = 4 - }, -/obj/effect/decal/cleanable/blood, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/cargo) -"Cf" = ( -/obj/effect/decal/cleanable/glass, -/obj/effect/decal/cleanable/blood, -/mob/living/basic/construct/juggernaut/hostile{ - health = 275; - maxHealth = 275; - name = "Right hand of the veil" - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/cult, -/area/ruin/space/has_grav/port_tarkon/developement) -"Ch" = ( -/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/cult, -/area/ruin/space/has_grav/port_tarkon/comms) -"Ci" = ( -/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/tile/neutral{ - dir = 4 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/centerhall) -"Ck" = ( -/obj/structure/rack, -/obj/effect/turf_decal/tile/yellow/anticorner{ - dir = 8 - }, -/obj/item/stock_parts/cell/high, -/obj/item/stock_parts/cell/high, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/power1) -"Cm" = ( -/obj/structure/closet/crate, -/obj/item/stack/sheet/glass/fifty, -/obj/item/stack/sheet/glass{ - amount = 25 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/plating, -/area/ruin/space/has_grav/port_tarkon/forehall) -"Cp" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/cable, -/obj/machinery/door/firedoor/solid, -/obj/effect/decal/cleanable/blood, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/cult, -/area/ruin/space/has_grav/port_tarkon/forehall) -"Cq" = ( -/obj/machinery/door/firedoor/solid, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/forehall) -"Cr" = ( -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon) -"Cs" = ( -/obj/machinery/door/airlock/mining/glass, -/obj/effect/turf_decal/sand, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/door/firedoor/solid, -/obj/effect/mapping_helpers/airlock/cyclelink_helper, -/obj/effect/mapping_helpers/airlock/access/all/tarkon/general, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/mining) -"Cw" = ( -/obj/structure/table, -/obj/item/stack/sheet/mineral/gold{ - amount = 25 - }, -/obj/effect/turf_decal/tile/purple/half{ - dir = 4 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/port_tarkon/developement) -"Cx" = ( -/obj/structure/chair/sofa/corp/right{ - dir = 1 - }, -/obj/effect/decal/cleanable/blood, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/cult, -/area/ruin/space/has_grav/port_tarkon/observ) -"Cy" = ( -/obj/machinery/door/airlock/wood{ - id_tag = "ptdorm1"; - name = "Private Dorm 1" - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/door/firedoor/solid, -/turf/open/floor/wood/large, -/area/ruin/space/has_grav/port_tarkon/dorms) -"CA" = ( -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ - dir = 4 - }, -/obj/effect/turf_decal/tile/neutral/half{ - dir = 8 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/centerhall) -"CB" = ( -/obj/effect/spawner/structure/window/reinforced, -/obj/effect/turf_decal/tile/purple/half{ - dir = 1 - }, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/port_tarkon/developement) -"CE" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/light/dim/directional/east, -/obj/effect/turf_decal/tile/red/anticorner, -/obj/item/ammo_box/magazine/c35sol_pistol, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/secoff) -"CG" = ( -/obj/machinery/light/warm/directional/west, -/obj/effect/turf_decal/tile/neutral/half{ - dir = 8 - }, -/obj/effect/decal/cleanable/blood, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/centerhall) -"CI" = ( -/obj/structure/cable, -/obj/effect/turf_decal/tile/yellow/half{ - dir = 8 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/power1) -"CL" = ( -/obj/structure/cable, -/obj/machinery/door/airlock/mining/glass, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/door/firedoor/solid, -/obj/effect/decal/cleanable/blood, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/mining) -"CP" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/effect/decal/cleanable/blood/tracks{ - dir = 8 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/atmos) -"CS" = ( -/obj/structure/table/wood, -/obj/item/flashlight/lamp, -/obj/effect/spawner/random/clothing/costume, -/turf/open/floor/carpet/cyan, -/area/ruin/space/has_grav/port_tarkon/dorms) -"CV" = ( -/obj/structure/cable, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/power1) -"CW" = ( -/obj/machinery/airalarm/directional/north, -/obj/effect/mapping_helpers/airalarm/all_access, -/obj/structure/table/wood/fancy/blue, -/obj/effect/turf_decal/tile/blue/half{ - dir = 1 - }, -/obj/item/coin, -/obj/item/coin, -/obj/machinery/light/directional/north, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/port_tarkon/comms) -"CX" = ( -/obj/machinery/light/dim/directional/north, -/obj/structure/rack, -/obj/item/screwdriver, -/obj/item/wrench, -/obj/effect/turf_decal/tile/yellow/half{ - dir = 1 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/toolstorage) -"CY" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/light/dim/directional/east, -/obj/effect/decal/cleanable/blood, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/cult, -/area/ruin/space/has_grav/port_tarkon/starboardhall) -"Da" = ( -/obj/effect/turf_decal/tile/brown/half, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/starboardhall) -"Dj" = ( -/obj/machinery/light/small/directional/east, -/obj/effect/decal/cleanable/blood, -/obj/effect/decal/cleanable/dirt, -/obj/machinery/biogenerator, -/turf/open/floor/cult, -/area/ruin/space/has_grav/port_tarkon/garden) -"Dk" = ( -/obj/item/stack/spacecash/c100, -/obj/item/stack/spacecash/c100{ - pixel_x = 4; - pixel_y = 7 - }, -/obj/item/stack/spacecash/c100{ - pixel_x = 4; - pixel_y = -8 - }, -/obj/item/stack/spacecash/c20{ - pixel_x = -4; - pixel_y = 3 - }, -/obj/item/stack/spacecash/c20{ - pixel_y = 10 - }, -/obj/item/stack/spacecash/c20{ - pixel_x = 5 - }, -/obj/item/stack/spacecash/c10{ - pixel_x = -4; - pixel_y = -5 - }, -/obj/item/stack/spacecash/c10{ - pixel_x = -6; - pixel_y = 12 - }, -/obj/item/stack/spacecash/c10{ - pixel_x = 4; - pixel_y = 4 - }, -/obj/item/mod/module/visor/rave, -/turf/open/floor/plating, -/area/ruin/space/has_grav/port_tarkon/cargo) -"Dv" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/storage) -"DA" = ( -/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/tile/neutral/anticorner, -/obj/effect/decal/cleanable/blood/tracks, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/centerhall) -"DD" = ( -/obj/structure/table/reinforced, -/obj/machinery/cell_charger, -/obj/item/clothing/gloves/color/yellow, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/port_tarkon/atmos) -"DE" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/mob/living/basic/construct/juggernaut/hostile{ - health = 200; - maxHealth = 200 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/port_tarkon/developement) -"DH" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/decal/cleanable/blood, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/cult, -/area/ruin/space/has_grav/port_tarkon/trauma) -"DK" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/decal/cleanable/blood/tracks{ - dir = 4 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/port_tarkon/developement) -"DN" = ( -/obj/machinery/light_switch/directional/north, -/obj/effect/decal/cleanable/blood/tracks{ - dir = 4 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/starboardhall) -"DO" = ( -/obj/machinery/light/dim/directional/north, -/obj/effect/decal/cleanable/glass, -/obj/effect/decal/cleanable/blood, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/cult, -/area/ruin/space/has_grav/port_tarkon/developement) -"DP" = ( -/obj/machinery/computer{ - desc = "A computer long since rendered non-functional due to lack of maintenance. Spitting out error messages."; - dir = 8; - name = "Broken Computer" - }, -/obj/effect/turf_decal/tile/red/half, -/obj/item/paper/fluff/ruins/tarkon/detain, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/secoff) -"DS" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/turf_decal/tile/neutral/half{ - dir = 1 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/centerhall) -"DY" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/cult, -/area/ruin/space/has_grav/port_tarkon/storage) -"DZ" = ( -/obj/machinery/light_switch/directional/west, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/cult, -/area/ruin/space/has_grav/port_tarkon/comms) -"Eb" = ( -/mob/living/basic/carp, -/turf/open/misc/asteroid/airless, -/area/ruin/space/has_grav) -"Ed" = ( -/obj/machinery/light/small/directional/south, -/obj/effect/turf_decal/tile/purple/half, -/obj/item/mod/construction/broken_core, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/port_tarkon/developement) -"Eg" = ( -/obj/effect/decal/cleanable/blood, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/cult, -/area/ruin/space/has_grav/port_tarkon/porthall) -"Eh" = ( -/obj/machinery/airalarm/directional/south, -/obj/effect/mapping_helpers/airalarm/all_access, -/obj/effect/decal/cleanable/glass, -/obj/effect/decal/cleanable/blood, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/cult, -/area/ruin/space/has_grav/port_tarkon/developement) -"El" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/decal/cleanable/blood, -/obj/effect/decal/cleanable/blood/tracks{ - dir = 8 - }, -/turf/open/floor/wood/large, -/area/ruin/space/has_grav/port_tarkon/dorms) -"Eq" = ( -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ - dir = 4 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/afthall) -"Er" = ( -/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/dark, -/area/ruin/space/has_grav/port_tarkon/developement) -"Es" = ( -/obj/effect/decal/cleanable/blood, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/starboardhall) -"Et" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/door/firedoor/solid, -/obj/structure/cable, -/obj/machinery/door/airlock/cult/unruned/glass, -/obj/effect/decal/cleanable/blood/tracks{ - dir = 4 - }, -/turf/open/floor/cult, -/area/ruin/space/has_grav/port_tarkon/porthall) -"Eu" = ( -/obj/machinery/airalarm/directional/west, -/obj/effect/mapping_helpers/airalarm/all_access, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/cult, -/area/ruin/space/has_grav/port_tarkon/forehall) -"Ev" = ( -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ - dir = 4 - }, -/obj/effect/decal/cleanable/blood/tracks, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/starboardhall) -"Ex" = ( -/obj/effect/turf_decal/vg_decals/atmos/mix, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/visible/layer2, -/turf/open/floor/engine/vacuum, -/area/ruin/space/has_grav/port_tarkon/atmos) -"Ez" = ( -/obj/structure/chair/sofa/corp/left{ - dir = 1 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/cult, -/area/ruin/space/has_grav/port_tarkon/observ) -"EA" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/centerhall) -"EB" = ( -/obj/machinery/iv_drip, -/obj/structure/window/reinforced/tinted/spawner/directional/south, -/obj/machinery/light/small/directional/east, -/obj/effect/turf_decal/tile/blue/half{ - dir = 4 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/trauma) -"EC" = ( -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ - dir = 1 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/secoff) -"ED" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/item/ammo_box/magazine/c35sol_pistol, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/cult, -/area/ruin/space/has_grav/port_tarkon/secoff) -"EE" = ( -/obj/structure/table, -/obj/effect/turf_decal/tile/blue/half{ - dir = 4 - }, -/obj/machinery/button/door{ - id = "ptcomms"; - name = "shutter controls" - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/port_tarkon/comms) -"EN" = ( -/obj/structure/sign/warning/deathsposal, -/turf/closed/wall, -/area/ruin/space/has_grav/port_tarkon/power1) -"EQ" = ( -/obj/effect/spawner/structure/window/reinforced/no_firelock, -/obj/machinery/door/poddoor/shutters{ - id = "ptobservatory" - }, -/turf/open/floor/plating, -/area/ruin/space/has_grav/port_tarkon/observ) -"EU" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/effect/decal/cleanable/blood, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/cult, -/area/ruin/space/has_grav/port_tarkon/mining) -"EV" = ( -/obj/structure/curtain, -/obj/effect/turf_decal/tile/blue/half{ - dir = 1 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/trauma) -"EW" = ( -/mob/living/basic/carp/mega, -/turf/open/space/basic, -/area/template_noop) -"EY" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/structure/cable, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/cult, -/area/ruin/space/has_grav/port_tarkon/comms) -"EZ" = ( -/obj/structure/statue/bone/rib{ - dir = 1 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/cult, -/area/ruin/space/has_grav/port_tarkon/forehall) -"Fa" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/cable, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/cult, -/area/ruin/space/has_grav/port_tarkon/porthall) -"Fb" = ( -/obj/structure/closet/emcloset, -/obj/effect/turf_decal/tile/neutral/full, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/centerhall) -"Fd" = ( -/mob/living/simple_animal/hostile/cult/ghost, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/cult, -/area/ruin/space/has_grav/port_tarkon/mining) -"Fe" = ( -/obj/machinery/door/airlock/public/glass{ - name = "Crew Storage" - }, -/obj/machinery/door/firedoor/solid, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon) -"Fh" = ( -/obj/effect/turf_decal/stripes{ - dir = 1 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/port_tarkon/atmos) -"Fk" = ( -/obj/structure/table/reinforced, -/obj/item/storage/pouch/ammo, -/obj/item/storage/pouch/ammo, -/obj/machinery/firealarm/directional/north, -/obj/effect/turf_decal/tile/red/half{ - dir = 1 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/secoff) -"Fl" = ( -/obj/item/electronics/apc, -/obj/item/electronics/apc, -/obj/item/electronics/airlock, -/obj/item/electronics/airlock, -/obj/item/electronics/airalarm, -/obj/item/electronics/airalarm, -/obj/structure/closet/crate/engineering/electrical{ - name = "electronics crate" - }, -/obj/item/electronics/tracker, -/obj/item/stack/cable_coil, -/obj/item/clothing/gloves/color/yellow, -/obj/item/circuitboard/computer/atmos_control/tarkon/carbon_tank, -/obj/item/circuitboard/computer/atmos_control/tarkon/mix_tank, -/obj/item/circuitboard/computer/atmos_control/tarkon/nitrogen_tank, -/obj/item/circuitboard/computer/atmos_control/tarkon/incinerator, -/obj/item/circuitboard/computer/atmos_control/tarkon/oxygen_tank, -/obj/item/circuitboard/computer/atmos_control/tarkon/plasma_tank, -/obj/item/circuitboard/computer/tarkon_driver, -/turf/open/floor/plating, -/area/ruin/space/has_grav/port_tarkon/forehall) -"Fm" = ( -/obj/structure/table/reinforced, -/obj/item/clothing/gloves/color/yellow, -/obj/item/paper/fluff/ruins/oldstation/generator_manual, -/obj/item/wirecutters, -/obj/item/wrench, -/obj/structure/cable, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/plating, -/area/ruin/space/has_grav/port_tarkon/power1) -"Fq" = ( -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, -/obj/structure/statue/bone/rib, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/cult, -/area/ruin/space/has_grav/port_tarkon/mining) -"Fr" = ( -/obj/machinery/atmospherics/pipe/layer_manifold/scrubbers/visible, -/turf/closed/wall/r_wall, -/area/ruin/space/has_grav/port_tarkon/atmos) -"Fs" = ( -/obj/machinery/airlock_sensor/incinerator_tarkon{ - pixel_x = 6; - pixel_y = 23 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden, -/turf/open/floor/engine/vacuum, -/area/ruin/space/has_grav/port_tarkon/atmos) -"Ft" = ( -/obj/item/solar_assembly, -/obj/effect/turf_decal/stripes/asteroid/line, -/turf/open/misc/asteroid/airless, -/area/solars/tarkon) -"Fv" = ( -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/cult, -/area/ruin/space/has_grav/port_tarkon/secoff) -"FB" = ( -/obj/item/flashlight/lantern, -/obj/item/flashlight/lantern, -/obj/item/flashlight/lantern, -/obj/item/flashlight/lantern, -/obj/structure/table, -/obj/item/radio, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon) -"FC" = ( -/obj/machinery/firealarm/directional/east, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/porthall) -"FE" = ( -/obj/structure/lattice, -/turf/open/space/basic, -/area/template_noop) -"FG" = ( -/obj/item/shovel, -/turf/open/misc/asteroid/airless, -/area/ruin/space/has_grav) -"FH" = ( -/obj/effect/decal/cleanable/blood/tracks{ - dir = 4 - }, -/obj/effect/decal/cleanable/blood, -/turf/open/floor/cult, -/area/ruin/space/has_grav/port_tarkon/centerhall) -"FN" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/light_switch/directional/south, -/obj/effect/turf_decal/tile/yellow/anticorner, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/toolstorage) -"FR" = ( -/obj/structure/table, -/obj/effect/turf_decal/tile/blue/half, -/obj/item/encryptionkey/headset_cargo/tarkon, -/obj/item/encryptionkey/headset_cargo/tarkon, -/obj/item/encryptionkey/headset_cargo/tarkon, -/obj/item/encryptionkey/headset_cargo/tarkon, -/obj/item/encryptionkey/headset_cargo/tarkon, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/port_tarkon/comms) -"FS" = ( -/obj/structure/table/reinforced, -/obj/item/reagent_containers/condiment/enzyme, -/obj/item/reagent_containers/condiment/sugar, -/turf/open/floor/iron/cafeteria, -/area/ruin/space/has_grav/port_tarkon/kitchen) -"FT" = ( -/obj/machinery/power/turbine/core_rotor{ - dir = 4; - mapping_id = "tarkon_turbine" - }, -/obj/structure/cable, -/turf/open/floor/engine/vacuum, -/area/ruin/space/has_grav/port_tarkon/atmos) -"FU" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, -/obj/effect/turf_decal/tile/yellow/half{ - dir = 4 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/toolstorage) -"FV" = ( -/obj/effect/decal/cleanable/blood, -/obj/effect/decal/cleanable/blood/tracks, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/cult, -/area/ruin/space/has_grav/port_tarkon/trauma) -"FW" = ( -/obj/effect/decal/cleanable/glass, -/obj/effect/decal/cleanable/blood/tracks{ - dir = 4 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/cult, -/area/ruin/space/has_grav/port_tarkon/developement) -"FX" = ( -/obj/structure/table, -/obj/item/multitool, -/obj/item/storage/belt/utility/full, -/obj/item/paper/fluff/ruins/tarkon/designdoc, -/obj/effect/turf_decal/tile/yellow/half, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/power1) -"FY" = ( -/obj/effect/spawner/structure/window/reinforced/no_firelock, -/obj/machinery/door/poddoor/shutters{ - id = "ptporthall" - }, -/turf/open/floor/plating, -/area/ruin/space/has_grav/port_tarkon/porthall) -"FZ" = ( -/obj/machinery/light/small/directional/east, -/obj/machinery/light_switch/directional/east, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/cafeteria, -/area/ruin/space/has_grav/port_tarkon/kitchen) -"Gb" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/turf_decal/tile/brown/half{ - dir = 1 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/storage) -"Gd" = ( -/obj/structure/table/reinforced, -/obj/machinery/reagentgrinder{ - desc = "Used to grind things up into raw materials and liquids."; - pixel_y = 5 - }, -/obj/machinery/light/small/directional/west, -/turf/open/floor/iron/cafeteria, -/area/ruin/space/has_grav/port_tarkon/kitchen) -"Ge" = ( -/obj/effect/decal/cleanable/blood, -/obj/effect/decal/cleanable/blood/tracks{ - dir = 4 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/cult, -/area/ruin/space/has_grav/port_tarkon/centerhall) -"Gf" = ( -/obj/machinery/light/dim/directional/east, -/obj/effect/decal/cleanable/blood, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/cult, -/area/ruin/space/has_grav/port_tarkon/observ) -"Gh" = ( -/obj/effect/decal/cleanable/blood, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/cult, -/area/ruin/space/has_grav/port_tarkon/observ) -"Gk" = ( -/obj/machinery/door/airlock/multi_tile/public/glass{ - dir = 8 - }, -/obj/machinery/door/firedoor/solid, -/obj/effect/decal/cleanable/blood/tracks{ - dir = 4 - }, -/turf/open/floor/cult, -/area/ruin/space/has_grav/port_tarkon/comms) -"Gl" = ( -/obj/structure/statue/bone/rib, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/cult, -/area/ruin/space/has_grav/port_tarkon/observ) -"Gm" = ( -/obj/effect/decal/cleanable/blood/tracks{ - dir = 4 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/cult, -/area/ruin/space/has_grav/port_tarkon/storage) -"Gp" = ( -/obj/machinery/light/small/directional/north, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden, -/turf/open/floor/engine/vacuum, -/area/ruin/space/has_grav/port_tarkon/atmos) -"Gs" = ( -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/garden) -"Gt" = ( -/obj/machinery/hydroponics/soil, -/obj/machinery/firealarm/directional/south{ - pixel_y = -31 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/grass, -/area/ruin/space/has_grav/port_tarkon/garden) -"Gv" = ( -/obj/machinery/light/dim/directional/north, -/obj/effect/turf_decal/tile/purple/half{ - dir = 1 - }, -/obj/structure/table/reinforced, -/obj/item/circuitboard/machine/reagentgrinder, -/obj/structure/frame/machine, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/port_tarkon/developement) -"Gx" = ( -/obj/machinery/door/airlock/maintenance_hatch, -/turf/open/floor/plating, -/area/ruin/space/has_grav/port_tarkon/forehall) -"Gy" = ( -/obj/effect/turf_decal/stripes/asteroid/line{ - dir = 8 - }, -/turf/open/misc/asteroid/airless, -/area/solars/tarkon) -"GB" = ( -/obj/effect/turf_decal/vg_decals/atmos/nitrous_oxide, -/obj/machinery/light/small/directional/east, -/obj/machinery/air_sensor/tarkon/nitrous_tank{ - pixel_x = 26 - }, -/turf/open/floor/engine/n2o, -/area/ruin/space/has_grav/port_tarkon/atmos) -"GE" = ( -/obj/effect/spawner/structure/window/reinforced/plasma, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden{ - dir = 8 - }, -/turf/open/floor/plating, -/area/ruin/space/has_grav/port_tarkon/atmos) -"GF" = ( -/obj/structure/bed, -/obj/effect/turf_decal/tile/blue/anticorner{ - dir = 1 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/trauma) -"GJ" = ( -/turf/closed/wall/mineral/cult/artificer, -/area/ruin/space/has_grav/port_tarkon/comms) -"GL" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/cable, -/obj/effect/decal/cleanable/blood/tracks{ - dir = 5 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/cult, -/area/ruin/space/has_grav/port_tarkon/forehall) -"GM" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/centerhall) -"GR" = ( -/obj/machinery/door/airlock/engineering{ - name = "Backup Generator Room" - }, -/obj/structure/cable, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/power1) -"GS" = ( -/obj/machinery/hydroponics/soil, -/obj/machinery/light/small/directional/south, -/obj/machinery/light_switch/directional/south, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/grass, -/area/ruin/space/has_grav/port_tarkon/garden) -"GU" = ( -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ - dir = 1 - }, -/obj/effect/decal/cleanable/glass, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/cult, -/area/ruin/space/has_grav/port_tarkon/developement) -"GV" = ( -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/cult, -/area/ruin/space/has_grav/port_tarkon/centerhall) -"GW" = ( -/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/tile/neutral/anticorner{ - dir = 4 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/centerhall) -"GX" = ( -/obj/machinery/door/firedoor/solid, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/cult, -/area/ruin/space/has_grav/port_tarkon/forehall) -"GY" = ( -/turf/closed/wall, -/area/ruin/space/has_grav/port_tarkon/atmos) -"Ha" = ( -/obj/machinery/power/port_gen/pacman/super{ - name = "\improper emergency power generator"; - time_per_sheet = 40 - }, -/obj/effect/decal/cleanable/greenglow, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/plating, -/area/ruin/space/has_grav/port_tarkon/power1) -"Hb" = ( -/obj/effect/turf_decal/stripes/asteroid/line{ - dir = 10 - }, -/turf/open/misc/asteroid/airless, -/area/solars/tarkon) -"Hf" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/cable, -/obj/effect/decal/cleanable/blood, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/secoff) -"Hg" = ( -/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, -/area/ruin/space/has_grav/port_tarkon/starboardhall) -"Hi" = ( -/obj/structure/table/wood, -/obj/item/flashlight/lamp/green, -/obj/item/clothing/neck/mantle, -/obj/effect/decal/cleanable/blood, -/turf/open/floor/carpet/red, -/area/ruin/space/has_grav/port_tarkon/dorms) -"Hj" = ( -/obj/effect/decal/cleanable/dirt, -/obj/machinery/hydroponics/soil, -/obj/effect/decal/cleanable/glass, -/turf/open/floor/grass, -/area/ruin/space/has_grav/port_tarkon/garden) -"Hk" = ( -/obj/structure/cable, -/obj/item/ammo_box/magazine/c35sol_pistol, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/cult, -/area/ruin/space/has_grav/port_tarkon/secoff) -"Hm" = ( -/obj/machinery/firealarm/directional/north, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/cult, -/area/ruin/space/has_grav/port_tarkon/forehall) -"Hn" = ( -/obj/effect/turf_decal/tile/neutral/half{ - dir = 4 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/centerhall) -"Ho" = ( -/obj/effect/turf_decal/stripes/asteroid/corner{ - dir = 1 - }, -/turf/open/misc/asteroid/airless, -/area/solars/tarkon) -"Hq" = ( -/turf/open/floor/plating, -/area/ruin/space/has_grav) -"Hr" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/decal/cleanable/blood/tracks{ - dir = 4 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/port_tarkon/developement) -"Ht" = ( -/obj/structure/window/reinforced/tinted/spawner/directional/south, -/obj/structure/statue/bone/rib, -/obj/effect/decal/cleanable/blood, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/cult, -/area/ruin/space/has_grav/port_tarkon/trauma) -"Hy" = ( -/turf/closed/wall, -/area/ruin/space/has_grav/port_tarkon/mining) -"HB" = ( -/obj/structure/table/reinforced, -/obj/machinery/recharger, -/obj/effect/turf_decal/tile/red/anticorner{ - dir = 1 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/secoff) -"HF" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/toolstorage) -"HG" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/cable, -/obj/effect/decal/cleanable/blood/tracks{ - dir = 4 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/forehall) -"HH" = ( -/obj/effect/turf_decal/sand/plating, -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ - dir = 1 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/mining) -"HO" = ( -/obj/effect/decal/cleanable/blood/tracks{ - dir = 4 - }, -/obj/item/circuitboard/machine/destructive_analyzer, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/port_tarkon/developement) -"HQ" = ( -/obj/machinery/door/airlock/research, -/obj/machinery/door/firedoor/solid, -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/decal/cleanable/blood/tracks, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/developement) -"HS" = ( -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/power1) -"HU" = ( -/obj/machinery/atmospherics/components/unary/portables_connector/visible{ - dir = 8 - }, -/obj/effect/turf_decal/tile/neutral/fourcorners, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/atmos) -"HW" = ( -/obj/machinery/door/airlock/public, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/cable, -/obj/machinery/door/firedoor/solid, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/observ) -"HX" = ( -/obj/structure/cable, -/obj/structure/statue/bone/rib{ - dir = 1 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/cult, -/area/ruin/space/has_grav/port_tarkon/trauma) -"Ic" = ( -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ - dir = 4 - }, -/obj/structure/cable, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/port_tarkon/developement) -"Id" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/port_tarkon/developement) -"Ie" = ( -/obj/structure/chair/office{ - dir = 8 - }, -/obj/effect/turf_decal/tile/blue{ - dir = 8 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/port_tarkon/comms) -"If" = ( -/obj/item/solar_assembly, -/obj/structure/cable, -/obj/effect/turf_decal/stripes/asteroid/line{ - dir = 1 - }, -/turf/open/misc/asteroid/airless, -/area/solars/tarkon) -"Ig" = ( -/obj/effect/decal/cleanable/blood/tracks{ - dir = 5 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/cult, -/area/ruin/space/has_grav/port_tarkon/developement) -"Ih" = ( -/obj/machinery/door/airlock/multi_tile/public/glass, -/obj/machinery/door/firedoor/solid, -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/decal/cleanable/blood/tracks, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/storage) -"Ij" = ( -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ - dir = 1 - }, -/turf/open/floor/carpet/cyan, -/area/ruin/space/has_grav/port_tarkon/dorms) -"Ik" = ( -/obj/effect/turf_decal/tile/purple/anticorner{ - dir = 1 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/port_tarkon/developement) -"Im" = ( -/obj/structure/bed/pod{ - dir = 1 - }, -/obj/item/bedsheet/random{ - dir = 1 - }, -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ - dir = 4 - }, -/obj/machinery/button/door/directional/north{ - id = "ptdorm2"; - name = "Door Lock Control"; - normaldoorcontrol = 1; - specialfunctions = 4 - }, -/obj/effect/mob_spawn/corpse/human, -/turf/open/floor/carpet/cyan, -/area/ruin/space/has_grav/port_tarkon/dorms) -"Io" = ( -/obj/structure/statue/bone/rib{ - dir = 1 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/cult, -/area/ruin/space/has_grav/port_tarkon/storage) -"Ir" = ( -/mob/living/simple_animal/hostile/cult/ghost, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/cult, -/area/ruin/space/has_grav/port_tarkon/afthall) -"Iw" = ( -/turf/closed/wall, -/area/ruin/space/has_grav/port_tarkon/power1) -"Ix" = ( -/obj/machinery/door/poddoor/shutters{ - id = "tarkonouter"; - name = "External Bay Shutters" - }, -/obj/effect/turf_decal/trimline/yellow/filled/warning, -/obj/effect/turf_decal/trimline/yellow/filled/warning{ - dir = 4 - }, -/turf/open/floor/iron/airless, -/area/ruin/space/has_grav/port_tarkon/storage) -"ID" = ( -/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/neutral, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/centerhall) -"IE" = ( -/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/neutral/anticorner{ - dir = 8 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/centerhall) -"IF" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/mob/living/simple_animal/hostile/cult/mannequin, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/secoff) -"IG" = ( -/obj/structure/table/reinforced, -/obj/item/clothing/gloves/color/yellow, -/obj/item/paper/fluff/ruins/oldstation/generator_manual, -/obj/item/wirecutters, -/obj/item/wrench, -/obj/item/circuitboard/machine/rtg, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/plating, -/area/ruin/space/has_grav/port_tarkon/atmos) -"IH" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/structure/curtain, -/mob/living/simple_animal/hostile/cult/horror{ - health = 150; - maxHealth = 150 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/cult, -/area/ruin/space/has_grav/port_tarkon/trauma) -"IJ" = ( -/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/neutral{ - dir = 8 - }, -/obj/effect/decal/cleanable/blood/tracks{ - dir = 4 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/centerhall) -"IK" = ( -/obj/structure/closet, -/obj/item/pickaxe/mini, -/obj/item/storage/backpack/duffelbag, -/obj/item/clothing/mask/gas/explorer, -/obj/item/clothing/shoes/workboots/mining, -/obj/item/gps/mining, -/obj/item/storage/bag/ore, -/obj/item/storage/belt/mining, -/obj/effect/turf_decal/tile/brown/anticorner, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/mining) -"IL" = ( -/obj/structure/cable, -/obj/effect/turf_decal/stripes/asteroid/line{ - dir = 1 - }, -/turf/open/misc/asteroid/airless, -/area/solars/tarkon) -"IO" = ( -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ - dir = 1 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/power1) -"IQ" = ( -/obj/structure/statue/bone/rib, -/turf/open/floor/cult, -/area/ruin/space/has_grav/port_tarkon/centerhall) -"IU" = ( -/obj/structure/closet/crate/bin, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/cafeteria, -/area/ruin/space/has_grav/port_tarkon/kitchen) -"IW" = ( -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ - dir = 4 - }, -/obj/structure/curtain, -/obj/structure/window/reinforced/tinted/spawner/directional/south, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/trauma) -"IX" = ( -/obj/effect/turf_decal/tile/neutral/anticorner{ - dir = 4 - }, -/obj/effect/decal/cleanable/blood, -/obj/item/ammo_box/magazine/c35sol_pistol, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/centerhall) -"IY" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/cable, -/obj/machinery/power/apc/auto_name/directional/west, -/obj/effect/mapping_helpers/apc/no_charge, -/obj/effect/mapping_helpers/apc/unlocked, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/porthall) -"Jb" = ( -/mob/living/simple_animal/hostile/cult/spear{ - health = 125; - maxHealth = 125 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/cult, -/area/ruin/space/has_grav/port_tarkon/atmos) -"Ji" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/airalarm/directional/east, -/obj/effect/mapping_helpers/airalarm/all_access, -/turf/open/floor/carpet/purple, -/area/ruin/space/has_grav/port_tarkon/dorms) -"Jj" = ( -/obj/machinery/power/smes/engineering{ - charge = 0 - }, -/obj/structure/cable, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/power1) -"Jk" = ( -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, -/obj/effect/decal/cleanable/blood, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/centerhall) -"Jl" = ( -/obj/structure/closet, -/obj/effect/decal/cleanable/dirt, -/obj/item/clothing/under/rank/security/nova/utility/redsec, -/obj/item/clothing/under/rank/security/nova/utility, -/obj/item/clothing/shoes/workboots/mining, -/obj/item/clothing/shoes/winterboots, -/obj/item/clothing/shoes/jackboots, -/obj/item/storage/backpack/duffelbag/sec, -/obj/item/storage/backpack/duffelbag/sec/redsec, -/obj/item/storage/backpack/satchel/sec/redsec, -/obj/item/storage/backpack/security/redsec, -/turf/open/floor/cult, -/area/ruin/space/has_grav/port_tarkon) -"Jm" = ( -/obj/machinery/light/dim/directional/west, -/obj/effect/turf_decal/tile/brown/half{ - dir = 8 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/storage) -"Jn" = ( -/obj/structure/cable, -/obj/effect/mob_spawn/corpse/human/damaged, -/obj/effect/decal/cleanable/blood/tracks{ - dir = 5 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/atmos) -"Jp" = ( -/obj/item/crowbar, -/obj/item/crowbar, -/obj/item/crowbar, -/obj/item/crowbar, -/obj/structure/table, -/obj/item/radio, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon) -"Jq" = ( -/obj/machinery/cryopod{ - dir = 1 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/centerhall) -"Ju" = ( -/obj/structure/table/reinforced, -/obj/machinery/microwave{ - desc = "Cooks and boils stuff, somehow."; - pixel_x = -3; - pixel_y = 5 - }, -/turf/open/floor/iron/cafeteria, -/area/ruin/space/has_grav/port_tarkon/kitchen) -"Jv" = ( -/turf/closed/wall, -/area/ruin/space/has_grav/port_tarkon/dorms) -"Jw" = ( -/obj/structure/ore_box, -/obj/effect/turf_decal/tile/brown/anticorner{ - dir = 8 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/mining) -"Jx" = ( -/obj/machinery/vending/cola, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/afthall) -"Jz" = ( -/obj/effect/turf_decal/tile/purple/half{ - dir = 4 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/port_tarkon/developement) -"JB" = ( -/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/tile/neutral/half{ - dir = 1 - }, -/obj/effect/decal/cleanable/blood/tracks, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/centerhall) -"JE" = ( -/obj/machinery/airalarm/directional/north, -/obj/machinery/light/directional/north, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/cable, -/obj/effect/decal/cleanable/blood/tracks{ - dir = 4 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/starboardhall) -"JF" = ( -/obj/effect/turf_decal/tile/yellow/anticorner{ - dir = 4 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/toolstorage) -"JI" = ( -/obj/effect/decal/cleanable/blood/tracks, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/cargo) -"JJ" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/effect/decal/cleanable/blood/tracks{ - dir = 10 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/atmos) -"JL" = ( -/obj/structure/table/reinforced, -/obj/machinery/light/dim/directional/west, -/obj/item/paper_bin, -/obj/effect/turf_decal/tile/brown/half{ - dir = 8 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/cargo) -"JM" = ( -/obj/effect/mob_spawn/corpse/human, -/obj/structure/kitchenspike, -/turf/open/floor/iron/freezer, -/area/ruin/space/has_grav/port_tarkon/kitchen) -"JN" = ( -/obj/machinery/door/airlock/external/ruin{ - name = "Engineering External Access" - }, -/obj/effect/mapping_helpers/airlock/cyclelink_helper, -/obj/structure/cable, -/obj/effect/mapping_helpers/airlock/access/all/tarkon/general, -/turf/open/floor/plating, -/area/ruin/space/has_grav/port_tarkon/power1) -"JO" = ( -/obj/structure/bed/pod, -/obj/item/bedsheet/random, -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ - dir = 8 - }, -/obj/machinery/button/door/directional/south{ - id = "ptdorm3"; - name = "Door Lock Control"; - normaldoorcontrol = 1; - specialfunctions = 4 - }, -/turf/open/floor/carpet/black, -/area/ruin/space/has_grav/port_tarkon/dorms) -"JQ" = ( -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ - dir = 8 - }, -/obj/machinery/light/small/directional/east, -/mob/living/simple_animal/hostile/cult, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/secoff) -"JR" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/item/clothing/suit/armor/vest, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/starboardhall) -"JV" = ( -/obj/structure/statue/bone/rib{ - dir = 1 - }, -/obj/effect/decal/cleanable/blood, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/cult, -/area/ruin/space/has_grav/port_tarkon/mining) -"JW" = ( -/obj/machinery/door/airlock/public/glass{ - name = "Aft Primary Hallway" - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/cable, -/obj/machinery/door/firedoor/solid/closed, -/obj/effect/decal/cleanable/blood/tracks, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/afthall) -"JX" = ( -/obj/structure/table, -/obj/item/paper/crumpled, -/obj/effect/turf_decal/tile/blue/anticorner, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/port_tarkon/comms) -"JY" = ( -/obj/structure/window/reinforced/tinted/spawner/directional/south, -/obj/structure/closet/secure_closet/medical2{ - req_access = list("medical") - }, -/obj/effect/turf_decal/tile/blue/half{ - dir = 4 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/trauma) -"Kb" = ( -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, -/obj/effect/decal/cleanable/blood, -/mob/living/basic/construct/wraith/hostile{ - health = 125; - maxHealth = 125 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/forehall) -"Kc" = ( -/obj/machinery/computer{ - desc = "A computer long since rendered non-functional due to lack of maintenance. Spitting out error messages."; - dir = 1; - name = "Broken Computer" - }, -/obj/effect/turf_decal/tile/blue/anticorner{ - dir = 8 - }, -/obj/item/paper/fluff/ruins/tarkon/driverpitch, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/port_tarkon/comms) -"Ke" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 4 - }, -/obj/effect/turf_decal/stripes/line{ - dir = 8 - }, -/obj/machinery/door/poddoor/incinerator_atmos_main, -/turf/open/floor/engine/vacuum, -/area/ruin/space/has_grav/port_tarkon/atmos) -"Kf" = ( -/obj/machinery/light/dim/directional/west, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/porthall) -"Ki" = ( -/turf/closed/wall, -/area/ruin/space/has_grav/port_tarkon/centerhall) -"Kj" = ( -/obj/machinery/airalarm/directional/south, -/obj/effect/mapping_helpers/airalarm/all_access, -/obj/effect/decal/cleanable/glass, -/obj/effect/mob_spawn/corpse/human/assistant, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/cult, -/area/ruin/space/has_grav/port_tarkon/developement) -"Kk" = ( -/obj/machinery/door/airlock/wood/glass, -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/door/firedoor/solid, -/obj/effect/decal/cleanable/blood/tracks{ - dir = 8 - }, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/starboardhall) -"Kl" = ( -/obj/machinery/light/directional/north, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/centerhall) -"Km" = ( -/turf/closed/wall/mineral/cult/artificer, -/area/ruin/space/has_grav/port_tarkon/storage) -"Kn" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/structure/cable, -/obj/effect/decal/cleanable/blood, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/cult, -/area/ruin/space/has_grav/port_tarkon/comms) -"Kp" = ( -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, -/mob/living/simple_animal/hostile/cult/magic{ - health = 160; - maxHealth = 160 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/cult, -/area/ruin/space/has_grav/port_tarkon/forehall) -"Ks" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/door/firedoor/solid/closed, -/turf/open/floor/plating, -/area/ruin/space/has_grav/port_tarkon/forehall) -"Kt" = ( -/obj/effect/mob_spawn/ghost_role/human/tarkon{ - dir = 1 - }, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon) -"Kv" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/structure/cable, -/obj/effect/decal/cleanable/blood/tracks, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/cult, -/area/ruin/space/has_grav/port_tarkon/forehall) -"KA" = ( -/obj/structure/table/reinforced, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/centerhall) -"KB" = ( -/obj/machinery/door/firedoor/solid, -/obj/machinery/door/airlock/mining/glass, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/mining) -"KC" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/decal/cleanable/glass, -/obj/effect/heretic_rune/big, -/obj/effect/decal/cleanable/blood, -/obj/structure/statue/bone/skull, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/cult, -/area/ruin/space/has_grav/port_tarkon/developement) -"KE" = ( -/obj/structure/table/reinforced, -/obj/item/flashlight, -/obj/effect/turf_decal/tile/yellow/anticorner{ - dir = 1 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/toolstorage) -"KG" = ( -/obj/structure/sign/warning/docking, -/turf/closed/wall/r_wall/rust, -/area/ruin/space/has_grav/port_tarkon/mining) -"KI" = ( -/obj/structure/cable, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/cult, -/area/ruin/space/has_grav/port_tarkon/atmos) -"KJ" = ( -/obj/structure/table, -/obj/machinery/firealarm/directional/west, -/obj/machinery/light/dim/directional/west, -/obj/effect/turf_decal/tile/blue/half{ - dir = 8 - }, -/obj/item/defibrillator, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/trauma) -"KK" = ( -/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/tile/neutral{ - dir = 4 - }, -/obj/item/clothing/suit/armor/vest, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/centerhall) -"KL" = ( -/obj/effect/turf_decal/trimline/yellow/filled/warning{ - dir = 4 - }, -/turf/open/floor/iron/airless, -/area/ruin/space/has_grav/port_tarkon/storage) -"KM" = ( -/obj/machinery/button/ignition/incinerator/tarkon, -/turf/closed/wall/r_wall, -/area/ruin/space/has_grav/port_tarkon/atmos) -"KO" = ( -/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, -/area/ruin/space/has_grav/port_tarkon/garden) -"KP" = ( -/obj/item/mod/construction/broken_core, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/cult, -/area/ruin/space/has_grav/port_tarkon/developement) -"KQ" = ( -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/forehall) -"KS" = ( -/obj/structure/table/wood, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/observ) -"KT" = ( -/obj/machinery/hydroponics/soil, -/obj/effect/decal/cleanable/blood, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/grass, -/area/ruin/space/has_grav/port_tarkon/garden) -"KV" = ( -/obj/structure/window/reinforced/tinted/spawner/directional/north, -/obj/machinery/door/window/left/directional/east{ - opacity = 1 - }, -/obj/machinery/shower/directional/east, -/turf/open/floor/iron/white, -/area/ruin/space/has_grav/port_tarkon/centerhall) -"KW" = ( -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/forehall) -"KZ" = ( -/obj/structure/table/reinforced, -/obj/item/reagent_containers/cup/beaker/large, -/obj/item/reagent_containers/cup/beaker/large, -/turf/open/floor/iron/cafeteria, -/area/ruin/space/has_grav/port_tarkon/kitchen) -"La" = ( -/obj/structure/chair/sofa/corp{ - dir = 1 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/observ) -"Ld" = ( -/obj/machinery/door/airlock/public/glass/incinerator/tarkon_exterior, -/obj/effect/mapping_helpers/airlock/locked, -/obj/effect/mapping_helpers/airlock/cyclelink_helper{ - dir = 1 - }, -/obj/effect/turf_decal/stripes, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/visible/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/dark/visible, -/turf/open/floor/engine/vacuum, -/area/ruin/space/has_grav/port_tarkon/atmos) -"Le" = ( -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, -/obj/effect/decal/cleanable/blood, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/secoff) -"Lf" = ( -/obj/effect/turf_decal/tile/brown/half, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/cargo) -"Lh" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/effect/decal/cleanable/blood, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/cult, -/area/ruin/space/has_grav/port_tarkon/comms) -"Li" = ( -/obj/effect/turf_decal/tile/neutral/half{ - dir = 4 - }, -/obj/effect/decal/cleanable/blood, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/centerhall) -"Lj" = ( -/obj/effect/decal/cleanable/blood, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/cult, -/area/ruin/space/has_grav/port_tarkon/forehall) -"Lk" = ( -/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/cult, -/area/ruin/space/has_grav/port_tarkon/afthall) -"Lo" = ( -/obj/machinery/door/poddoor/shutters{ - id = "tarkonouter"; - name = "External Bay Shutters" - }, -/obj/effect/turf_decal/trimline/yellow/filled/warning, -/turf/open/floor/iron/airless, -/area/ruin/space/has_grav/port_tarkon/storage) -"Lp" = ( -/obj/structure/closet/emcloset, -/obj/effect/turf_decal/tile/brown/half{ - dir = 1 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/mining) -"Lr" = ( -/obj/machinery/door/firedoor/solid, -/obj/machinery/light_switch/directional/east, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/trauma) -"Ls" = ( -/obj/machinery/iv_drip, -/obj/structure/window/reinforced/tinted/spawner/directional/south, -/obj/machinery/light/small/directional/west, -/obj/effect/turf_decal/tile/blue/half{ - dir = 8 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/trauma) -"Lu" = ( -/obj/machinery/firealarm/directional/east, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/cult, -/area/ruin/space/has_grav/port_tarkon/porthall) -"LA" = ( -/obj/structure/closet, -/obj/effect/decal/cleanable/dirt, -/obj/item/clothing/under/rank/rnd/scientist/nova/utility, -/obj/item/clothing/under/rank/rnd/roboticist/nova/sleek, -/obj/item/clothing/shoes/jackboots, -/obj/item/clothing/shoes/workboots/mining, -/obj/item/clothing/shoes/winterboots, -/obj/item/storage/backpack/duffelbag/science, -/obj/item/storage/backpack/duffelbag/science/robo, -/obj/item/storage/backpack/satchel/science, -/obj/item/storage/backpack/satchel/science/robo, -/obj/item/storage/backpack/science, -/obj/item/storage/backpack/science/robo, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon) -"LD" = ( -/obj/effect/turf_decal/tile/brown/half{ - dir = 1 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/cargo) -"LG" = ( -/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/tile/neutral{ - dir = 4 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/centerhall) -"LH" = ( -/obj/machinery/firealarm/directional/north, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/forehall) -"LJ" = ( -/turf/open/misc/asteroid/airless, -/area/solars/tarkon) -"LL" = ( -/obj/effect/turf_decal/tile/neutral/half{ - dir = 8 - }, -/obj/item/spear/bonespear, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/centerhall) -"LN" = ( -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/afthall) -"LQ" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/mining) -"LS" = ( -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/starboardhall) -"LU" = ( -/obj/item/stack/sheet/iron/fifty, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/cult, -/area/ruin/space/has_grav/port_tarkon/toolstorage) -"LW" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/effect/decal/cleanable/blood, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/observ) -"LY" = ( -/obj/structure/table/reinforced, -/obj/item/book/manual/wiki/security_space_law, -/obj/item/pen/fountain, -/obj/machinery/firealarm/directional/north, -/obj/effect/turf_decal/tile/red/half{ - dir = 1 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/secoff) -"LZ" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/statue/bone/rib, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/cult, -/area/ruin/space/has_grav/port_tarkon/secoff) -"Mb" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/cable, -/turf/closed/wall/mineral/cult/artificer, -/area/ruin/space/has_grav/port_tarkon/forehall) -"Me" = ( -/obj/effect/turf_decal/stripes{ - dir = 1 - }, -/obj/machinery/light/dim/directional/east, -/obj/structure/window/reinforced/spawner/directional/north, -/obj/machinery/power/smes, -/obj/structure/cable, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/port_tarkon/atmos) -"Mg" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/mob/living/basic/construct/wraith/hostile{ - health = 125; - maxHealth = 125 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/cult, -/area/ruin/space/has_grav/port_tarkon/porthall) -"Mi" = ( -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/porthall) -"Ml" = ( -/obj/machinery/atmospherics/components/unary/portables_connector{ - dir = 1 - }, -/obj/machinery/portable_atmospherics/canister/air, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/port_tarkon/atmos) -"Mp" = ( -/obj/machinery/airalarm/directional/west, -/obj/effect/mapping_helpers/airalarm/all_access, -/obj/effect/turf_decal/tile/neutral/half{ - dir = 8 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/centerhall) -"Mr" = ( -/obj/structure/cable, -/obj/effect/turf_decal/sand/plating, -/turf/open/floor/plating/airless, -/area/solars/tarkon) -"Mt" = ( -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ - dir = 8 - }, -/obj/structure/curtain, -/obj/structure/window/reinforced/tinted/spawner/directional/south, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/trauma) -"Mv" = ( -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ - dir = 8 - }, -/turf/closed/wall/mineral/cult/artificer, -/area/ruin/space/has_grav/port_tarkon/porthall) -"Mz" = ( -/obj/machinery/atmospherics/components/tank/air, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/centerhall) -"MB" = ( -/obj/effect/turf_decal/tile/neutral/anticorner{ - dir = 8 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/centerhall) -"MC" = ( -/obj/machinery/door/airlock{ - name = "Bathroom" - }, -/obj/machinery/door/firedoor/solid, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/centerhall) -"MD" = ( -/obj/machinery/atmospherics/miner/plasma, -/turf/open/floor/engine/plasma, -/area/ruin/space/has_grav/port_tarkon/atmos) -"ME" = ( -/obj/effect/decal/cleanable/glass, -/obj/effect/mob_spawn/corpse/human, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/cult, -/area/ruin/space/has_grav/port_tarkon/developement) -"MF" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/starboardhall) -"MG" = ( -/obj/effect/turf_decal/stripes/asteroid/corner{ - dir = 4 - }, -/turf/open/misc/asteroid/airless, -/area/solars/tarkon) -"MJ" = ( -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/observ) -"MO" = ( -/obj/structure/safe/floor, -/obj/item/areaeditor/blueprints/tarkon, -/obj/item/tape/ruins/tarkon/safe, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/power1) -"MQ" = ( -/obj/structure/statue/bone/rib, -/obj/effect/decal/cleanable/blood, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/cult, -/area/ruin/space/has_grav/port_tarkon/garden) -"MS" = ( -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/porthall) -"MU" = ( -/turf/open/floor/engine/vacuum, -/area/ruin/space/has_grav/port_tarkon/atmos) -"MV" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/firealarm/directional/north, -/obj/effect/turf_decal/tile/brown/half{ - dir = 1 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/storage) -"MW" = ( -/obj/machinery/power/shuttle_engine/heater{ - dir = 4 - }, -/turf/open/floor/mineral/titanium, -/area/ruin/space/has_grav) -"MY" = ( -/obj/effect/turf_decal/tile/brown/anticorner, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/starboardhall) -"Nc" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/cable, -/obj/effect/decal/cleanable/blood, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/forehall) -"Ng" = ( -/obj/structure/tank_dispenser, -/obj/effect/turf_decal/tile/brown/anticorner{ - dir = 1 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/mining) -"Ni" = ( -/obj/structure/closet/crate/bin, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/cult, -/area/ruin/space/has_grav/port_tarkon/developement) -"Nj" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/cable, -/obj/machinery/door/firedoor/solid, -/obj/machinery/door/airlock/public/glass{ - name = "Fore Primary Hallway" - }, -/obj/effect/decal/cleanable/blood/tracks, -/obj/effect/decal/cleanable/blood/tracks, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/forehall) -"Nl" = ( -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ - dir = 4 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/cult, -/area/ruin/space/has_grav/port_tarkon/mining) -"No" = ( -/turf/open/floor/plating, -/area/ruin/space/has_grav/port_tarkon/forehall) -"Nq" = ( -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ - dir = 4 - }, -/obj/structure/table/rolling, -/obj/item/surgery_tray/full, -/obj/item/clothing/gloves/latex{ - pixel_y = 10 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/cult, -/area/ruin/space/has_grav/port_tarkon/trauma) -"Nr" = ( -/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/blood/tracks, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/forehall) -"Nt" = ( -/obj/machinery/seed_extractor, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/garden) -"Nv" = ( -/obj/effect/decal/cleanable/blood, -/obj/effect/decal/cleanable/blood/tracks{ - dir = 4 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/starboardhall) -"Nw" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/cable, -/obj/machinery/light_switch/directional/west, -/obj/effect/decal/cleanable/blood, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/cult, -/area/ruin/space/has_grav/port_tarkon/secoff) -"Nx" = ( -/obj/structure/table/reinforced, -/obj/item/assembly/flash, -/obj/item/assembly/flash, -/obj/effect/turf_decal/tile/red/half{ - dir = 4 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/secoff) -"Nz" = ( -/obj/structure/closet/crate, -/obj/item/stack/sheet/iron/twenty, -/obj/item/stack/sheet/iron/fifty, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/plating, -/area/ruin/space/has_grav/port_tarkon/forehall) -"ND" = ( -/obj/structure/statue/bone/rib{ - dir = 1 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/cult, -/area/ruin/space/has_grav/port_tarkon/starboardhall) -"NE" = ( -/obj/effect/decal/cleanable/blood/tracks{ - dir = 6 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/cult, -/area/ruin/space/has_grav/port_tarkon/atmos) -"NH" = ( -/obj/structure/chair/sofa/corp/right{ - dir = 8 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/observ) -"NK" = ( -/obj/effect/spawner/structure/window/reinforced/no_firelock, -/obj/machinery/atmospherics/pipe/layer_manifold/dark/hidden{ - dir = 4 - }, -/turf/open/floor/plating, -/area/ruin/space/has_grav/port_tarkon/atmos) -"NL" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/door/firedoor/solid, -/obj/structure/statue/bone/rib, -/obj/effect/decal/cleanable/blood, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/cult, -/area/ruin/space/has_grav/port_tarkon/forehall) -"NM" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/turf_decal/tile/neutral/anticorner{ - dir = 1 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/centerhall) -"NN" = ( -/obj/structure/bed/maint, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/secoff) -"NT" = ( -/obj/structure/statue/bone/rib{ - dir = 1 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/cult, -/area/ruin/space/has_grav/port_tarkon/observ) -"NU" = ( -/obj/effect/spawner/structure/window/reinforced/no_firelock, -/obj/machinery/door/firedoor/solid/closed, -/turf/open/floor/plating, -/area/ruin/space/has_grav/port_tarkon/porthall) -"NV" = ( -/obj/structure/statue/bone/rib, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/cult, -/area/ruin/space/has_grav/port_tarkon/storage) -"NX" = ( -/obj/structure/rack, -/obj/effect/turf_decal/tile/red/half{ - dir = 1 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/secoff) -"NZ" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/mob/living/basic/construct/proteon/hostile, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/observ) -"Oa" = ( -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/cult, -/area/ruin/space/has_grav/port_tarkon/secoff) -"Ob" = ( -/obj/machinery/computer/turbine_computer{ - dir = 1; - mapping_id = "tarkon_turbine" - }, -/obj/structure/cable, -/obj/machinery/light/dim/directional/south, -/turf/open/floor/engine, -/area/ruin/space/has_grav/port_tarkon/atmos) -"Od" = ( -/mob/living/basic/construct/wraith/hostile{ - health = 125; - maxHealth = 125 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/cult, -/area/ruin/space/has_grav/port_tarkon/porthall) -"Oi" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/observ) -"Oj" = ( -/obj/structure/table/wood, -/obj/item/flashlight/lamp/bananalamp, -/obj/effect/spawner/random/clothing/beret_or_rabbitears, -/turf/open/floor/carpet/purple, -/area/ruin/space/has_grav/port_tarkon/dorms) -"On" = ( -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/cult, -/area/ruin/space/has_grav/port_tarkon/developement) -"Os" = ( -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ - dir = 4 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/cult, -/area/ruin/space/has_grav/port_tarkon/storage) -"Ox" = ( -/obj/structure/table/wood/fancy/blue, -/obj/effect/turf_decal/tile/blue/half{ - dir = 1 - }, -/obj/item/dice, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/port_tarkon/comms) -"OB" = ( -/obj/machinery/vending/dinnerware, -/turf/open/floor/iron/cafeteria, -/area/ruin/space/has_grav/port_tarkon/kitchen) -"OC" = ( -/obj/effect/heretic_rune/big, -/mob/living/simple_animal/hostile/cult/spear, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/cult, -/area/ruin/space/has_grav/port_tarkon/comms) -"OD" = ( -/obj/machinery/light/dim/directional/north, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/atmos) -"OF" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/cable, -/turf/closed/wall/mineral/cult/artificer, -/area/ruin/space/has_grav/port_tarkon/porthall) -"OG" = ( -/obj/machinery/space_heater, -/turf/open/floor/plating, -/area/ruin/space/has_grav/port_tarkon/afthall) -"OI" = ( -/obj/machinery/light/dim/directional/south, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/cable, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/porthall) -"OK" = ( -/obj/structure/statue/bone/rib{ - dir = 1 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/cult, -/area/ruin/space/has_grav/port_tarkon/developement) -"OM" = ( -/turf/closed/wall/r_wall, -/area/ruin/space/has_grav/port_tarkon/comms) -"OP" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/decal/cleanable/blood, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/centerhall) -"OR" = ( -/obj/structure/cable, -/obj/effect/turf_decal/stripes/asteroid/line{ - dir = 6 - }, -/turf/open/misc/asteroid/airless, -/area/solars/tarkon) -"OS" = ( -/obj/structure/cable, -/obj/item/solar_assembly, -/obj/effect/turf_decal/sand/plating, -/turf/open/floor/plating/airless, -/area/solars/tarkon) -"OT" = ( -/obj/effect/turf_decal/tile/yellow, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/toolstorage) -"OZ" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/cult, -/area/ruin/space/has_grav/port_tarkon/developement) -"Pa" = ( -/obj/structure/bed/double/pod, -/obj/item/bedsheet/random/double, -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ - dir = 8 - }, -/obj/item/fancy_pillow, -/obj/item/fancy_pillow, -/obj/machinery/button/door/directional/north{ - id = "ptdorm4"; - name = "Door Lock Control"; - normaldoorcontrol = 1; - specialfunctions = 4 - }, -/obj/effect/decal/cleanable/blood, -/obj/effect/mob_spawn/corpse/human, -/obj/effect/mob_spawn/corpse/human, -/turf/open/floor/carpet/red, -/area/ruin/space/has_grav/port_tarkon/dorms) -"Pc" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/cable, -/obj/machinery/power/apc/auto_name/directional/south, -/obj/effect/mapping_helpers/apc/no_charge, -/obj/effect/mapping_helpers/apc/unlocked, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/cult, -/area/ruin/space/has_grav/port_tarkon/forehall) -"Pf" = ( -/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/purple/half, -/obj/effect/decal/cleanable/blood/tracks, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/port_tarkon/developement) -"Pk" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/effect/decal/cleanable/glass, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/cult, -/area/ruin/space/has_grav/port_tarkon/developement) -"Pl" = ( -/obj/structure/cable, -/obj/effect/turf_decal/stripes/asteroid/line{ - dir = 10 - }, -/turf/open/misc/asteroid/airless, -/area/solars/tarkon) -"Pp" = ( -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/mining) -"Pq" = ( -/obj/machinery/door/firedoor/solid, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/storage) -"Ps" = ( -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ - dir = 4 - }, -/obj/effect/decal/cleanable/blood/tracks, -/obj/effect/decal/cleanable/blood/tracks{ - dir = 10 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/starboardhall) -"Px" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/door/firedoor/solid, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/garden) -"Pz" = ( -/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/blood/tracks, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/afthall) -"PA" = ( -/obj/effect/decal/cleanable/blood/tracks, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/starboardhall) -"PB" = ( -/obj/machinery/atmospherics/components/unary/portables_connector/visible{ - dir = 4 - }, -/obj/effect/turf_decal/tile/dark/fourcorners, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/atmos) -"PE" = ( -/obj/structure/chair/office{ - dir = 1 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/port_tarkon/comms) -"PF" = ( -/obj/machinery/door/firedoor/solid/closed, -/turf/open/floor/plating, -/area/ruin/space/has_grav/port_tarkon/forehall) -"PK" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/cable, -/obj/machinery/door/firedoor/solid, -/obj/machinery/door/airlock/atmos/glass, -/obj/effect/decal/cleanable/blood/tracks, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/atmos) -"PM" = ( -/obj/effect/turf_decal/tile/purple/half{ - dir = 1 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/port_tarkon/developement) -"PO" = ( -/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/tile/neutral/half{ - dir = 1 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/centerhall) -"PR" = ( -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/cult, -/area/ruin/space/has_grav/port_tarkon/storage) -"PS" = ( -/obj/machinery/computer{ - desc = "A computer long since rendered non-functional due to lack of maintenance. Spitting out error messages."; - dir = 8; - name = "Financing Console" - }, -/obj/effect/turf_decal/tile/brown/anticorner{ - dir = 4 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/cargo) -"PT" = ( -/obj/structure/rack, -/obj/machinery/airalarm/directional/north, -/obj/effect/turf_decal/tile/red/half{ - dir = 1 - }, -/obj/effect/decal/cleanable/blood, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/secoff) -"PW" = ( -/obj/structure/cable, -/obj/effect/decal/cleanable/blood/tracks{ - dir = 8 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/atmos) -"PZ" = ( -/obj/effect/turf_decal/tile/neutral/half, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/centerhall) -"Qg" = ( -/obj/effect/spawner/structure/window/reinforced/no_firelock, -/obj/machinery/atmospherics/pipe/layer_manifold/pink/hidden{ - dir = 4 - }, -/turf/open/floor/plating, -/area/ruin/space/has_grav/port_tarkon/atmos) -"Qh" = ( -/obj/structure/chair/office{ - dir = 1 - }, -/obj/effect/turf_decal/tile/brown/half{ - dir = 1 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/cargo) -"Qk" = ( -/obj/machinery/atmospherics/components/unary/outlet_injector/monitored/plasma_input/tarkon{ - dir = 8 - }, -/turf/open/floor/engine/plasma, -/area/ruin/space/has_grav/port_tarkon/atmos) -"Qn" = ( -/obj/effect/turf_decal/stripes/asteroid/line, -/turf/open/misc/asteroid/airless, -/area/solars/tarkon) -"Qo" = ( -/obj/effect/turf_decal/delivery/blue, -/obj/effect/turf_decal/tile/neutral/half, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/centerhall) -"Qp" = ( -/obj/machinery/light/warm/directional/south, -/obj/effect/turf_decal/tile/neutral/anticorner, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/centerhall) -"Qs" = ( -/obj/machinery/door/airlock/public/glass{ - name = "Port Primary Hallway" - }, -/obj/effect/decal/cleanable/blood/tracks{ - dir = 4 - }, -/obj/machinery/door/firedoor/solid/closed, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/porthall) -"Qu" = ( -/obj/structure/window/reinforced/spawner/directional/north, -/obj/effect/turf_decal/tile/purple/fourcorners, -/obj/structure/cable, -/obj/machinery/computer/atmos_control/tarkon/plasma_tank{ - dir = 8 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/atmos) -"Qw" = ( -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ - dir = 8 - }, -/obj/effect/decal/cleanable/blood, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/cult, -/area/ruin/space/has_grav/port_tarkon/comms) -"Qx" = ( -/obj/effect/spawner/structure/window/reinforced/no_firelock, -/turf/open/floor/plating, -/area/ruin/space/has_grav/port_tarkon/power1) -"Qy" = ( -/obj/machinery/firealarm/directional/west, -/obj/machinery/suit_storage_unit/industrial/hauler, -/obj/effect/turf_decal/tile/brown/half{ - dir = 8 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/cargo) -"QA" = ( -/obj/machinery/door/window/left/directional/north, -/obj/machinery/door/window/left/directional/south, -/obj/structure/table/reinforced, -/obj/machinery/door/firedoor/solid/closed, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/cargo) -"QB" = ( -/obj/structure/filingcabinet, -/obj/effect/turf_decal/tile/brown/anticorner{ - dir = 8 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/cargo) -"QC" = ( -/turf/closed/wall/r_wall, -/area/ruin/space/has_grav/port_tarkon/cargo) -"QF" = ( -/obj/effect/mob_spawn/ghost_role/human/tarkon/med{ - dir = 8 - }, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon) -"QH" = ( -/obj/machinery/atmospherics/components/unary/outlet_injector/monitored/air_input/tarkon{ - dir = 4 - }, -/turf/open/floor/engine/vacuum, -/area/ruin/space/has_grav/port_tarkon/atmos) -"QL" = ( -/obj/structure/cable, -/obj/machinery/power/apc/auto_name/directional/east, -/obj/effect/mapping_helpers/apc/no_charge, -/obj/effect/mapping_helpers/apc/unlocked, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/observ) -"QO" = ( -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/cult, -/area/ruin/space/has_grav/port_tarkon/trauma) -"QP" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/general, -/obj/machinery/meter, -/obj/structure/cable, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/centerhall) -"QW" = ( -/obj/structure/cable, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/engine, -/area/ruin/space/has_grav/port_tarkon/atmos) -"QX" = ( -/obj/effect/turf_decal/tile/purple/half{ - dir = 1 - }, -/obj/structure/closet/crate/secure/science, -/obj/item/raw_anomaly_core/random, -/obj/item/raw_anomaly_core/random, -/obj/item/raw_anomaly_core/random, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/port_tarkon/developement) -"QY" = ( -/obj/item/circuitboard/machine/protolathe/offstation, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/cult, -/area/ruin/space/has_grav/port_tarkon/developement) -"Rc" = ( -/obj/machinery/firealarm/directional/north, -/obj/item/stack/cable_coil, -/obj/item/stock_parts/matter_bin, -/obj/item/stock_parts/micro_laser, -/obj/item/stock_parts/servo, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/cult, -/area/ruin/space/has_grav/port_tarkon/mining) -"Rd" = ( -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/cult, -/area/ruin/space/has_grav/port_tarkon) -"Rf" = ( -/obj/machinery/atmospherics/components/unary/outlet_injector/monitored/nitrous_input/tarkon{ - dir = 8 - }, -/turf/open/floor/engine/n2o, -/area/ruin/space/has_grav/port_tarkon/atmos) -"Rg" = ( -/obj/machinery/atmospherics/components/binary/pump/off/general{ - dir = 8 - }, -/obj/effect/turf_decal/tile/yellow/fourcorners, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/atmos) -"Rh" = ( -/obj/structure/cable, -/obj/machinery/power/apc/auto_name/directional/south, -/obj/effect/mapping_helpers/apc/no_charge, -/obj/effect/mapping_helpers/apc/unlocked, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/garden) -"Rm" = ( -/obj/effect/turf_decal/stripes/line, -/obj/effect/turf_decal/stripes/line{ - dir = 1 - }, -/obj/machinery/door/airlock/external/glass{ - name = "Turbine Maintenance Door" - }, -/obj/structure/cable, -/turf/open/floor/plating, -/area/ruin/space/has_grav/port_tarkon/atmos) -"Rp" = ( -/obj/machinery/vending/dorms, -/turf/open/floor/plating, -/area/ruin/space/has_grav/port_tarkon/cargo) -"Rq" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/mining) -"Rr" = ( -/obj/machinery/door/firedoor/solid, -/obj/machinery/door/airlock/engineering/glass{ - name = "P-T Tool Storage" - }, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/toolstorage) -"Rx" = ( -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ - dir = 8 - }, -/obj/effect/turf_decal/tile/brown/half{ - dir = 1 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/cargo) -"RB" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/porthall) -"RC" = ( -/obj/effect/decal/cleanable/blood/tracks{ - dir = 10 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/cult, -/area/ruin/space/has_grav/port_tarkon/afthall) -"RE" = ( -/obj/effect/turf_decal/trimline/yellow/filled/warning{ - dir = 8 - }, -/turf/open/floor/iron/airless, -/area/ruin/space/has_grav/port_tarkon/storage) -"RH" = ( -/obj/effect/turf_decal/tile/purple/half, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/port_tarkon/developement) -"RI" = ( -/obj/effect/turf_decal/tile/purple/anticorner{ - dir = 4 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/port_tarkon/developement) -"RJ" = ( -/obj/structure/cable, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/observ) -"RK" = ( -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/centerhall) -"RL" = ( -/obj/structure/fluff/empty_sleeper, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon) -"RM" = ( -/mob/living/basic/carp, -/turf/open/space/basic, -/area/template_noop) -"RN" = ( -/obj/effect/decal/cleanable/blood, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/cult, -/area/ruin/space/has_grav/port_tarkon/secoff) -"RO" = ( -/obj/item/areaeditor/blueprints/slime, -/obj/item/slime_extract/grey, -/obj/item/slime_extract/grey, -/obj/item/slime_extract/grey, -/obj/structure/closet/crate/secure/science, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/cult, -/area/ruin/space/has_grav/port_tarkon/developement) -"RS" = ( -/obj/structure/statue/bone/rib, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/cult, -/area/ruin/space/has_grav/port_tarkon/centerhall) -"RT" = ( -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, -/obj/effect/decal/cleanable/blood/tracks, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/port_tarkon/developement) -"RU" = ( -/obj/machinery/airalarm/directional/west, -/obj/effect/mapping_helpers/airalarm/all_access, -/obj/effect/turf_decal/tile/yellow/half{ - dir = 8 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/toolstorage) -"RW" = ( -/obj/effect/turf_decal/tile/neutral/half, -/obj/effect/decal/cleanable/blood, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/centerhall) -"RX" = ( -/obj/structure/table, -/obj/item/clothing/head/utility/welding, -/obj/item/clothing/gloves/color/yellow, -/obj/machinery/firealarm/directional/south, -/obj/effect/turf_decal/tile/yellow/anticorner, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/power1) -"RY" = ( -/obj/effect/turf_decal/vg_decals/atmos/plasma, -/obj/machinery/light/small/directional/east, -/obj/machinery/air_sensor/tarkon/plasma_tank{ - pixel_x = 26 - }, -/turf/open/floor/engine/plasma, -/area/ruin/space/has_grav/port_tarkon/atmos) -"RZ" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/cable, -/obj/effect/decal/cleanable/blood, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/porthall) -"Sa" = ( -/obj/structure/frame/machine, -/obj/item/circuitboard/machine/ore_redemption, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/cult, -/area/ruin/space/has_grav/port_tarkon/mining) -"Sb" = ( -/obj/effect/turf_decal/tile/brown/half{ - dir = 8 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/storage) -"Se" = ( -/obj/structure/trash_pile, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/plating, -/area/ruin/space/has_grav/port_tarkon/forehall) -"Sg" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/turf_decal/tile/purple/half, -/obj/effect/decal/cleanable/blood/tracks, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/port_tarkon/developement) -"Si" = ( -/obj/machinery/power/shuttle_engine/propulsion, -/turf/open/floor/plating, -/area/ruin/space/has_grav) -"Sj" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/cable, -/obj/machinery/light_switch/directional/south, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/porthall) -"Sk" = ( -/obj/structure/cable, -/obj/machinery/power/apc/auto_name/directional/west, -/obj/effect/mapping_helpers/apc/no_charge, -/obj/effect/mapping_helpers/apc/unlocked, -/obj/machinery/light/dim/directional/west, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/cult, -/area/ruin/space/has_grav/port_tarkon/mining) -"Sn" = ( -/obj/structure/table, -/obj/item/stack/sheet/mineral/titanium{ - amount = 30 - }, -/obj/effect/turf_decal/tile/purple/half, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/port_tarkon/developement) -"Sp" = ( -/obj/machinery/light/dim/directional/east, -/obj/effect/turf_decal/tile/purple/half{ - dir = 4 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/port_tarkon/developement) -"Sq" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/structure/cable, -/obj/machinery/door/firedoor/solid, -/turf/open/floor/cult, -/area/ruin/space/has_grav/port_tarkon/comms) -"Su" = ( -/obj/effect/turf_decal/tile/purple/half, -/obj/structure/table/reinforced, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/port_tarkon/developement) -"Sv" = ( -/obj/effect/turf_decal/tile/neutral/half{ - dir = 1 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/centerhall) -"Sw" = ( -/turf/closed/wall/r_wall, -/area/ruin/space/has_grav/port_tarkon/dorms) -"Sz" = ( -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ - dir = 8 - }, -/mob/living/basic/construct/wraith/hostile{ - health = 125; - maxHealth = 125 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/porthall) -"SD" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/cult, -/area/ruin/space/has_grav/port_tarkon/forehall) -"SG" = ( -/obj/structure/table/reinforced, -/obj/machinery/door/window/brigdoor/left/directional/south, -/obj/machinery/door/window/brigdoor/left/directional/north, -/obj/item/paper_bin{ - pixel_x = 7 - }, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/secoff) -"SI" = ( -/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/neutral/anticorner, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/centerhall) -"SL" = ( -/obj/machinery/shower/directional/east, -/obj/structure/window/reinforced/tinted/spawner/directional/east, -/obj/machinery/door/window/right/directional/north{ - opacity = 1 - }, -/turf/open/floor/iron/white, -/area/ruin/space/has_grav/port_tarkon/centerhall) -"SM" = ( -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/atmos) -"SO" = ( -/obj/machinery/door/airlock/research, -/obj/machinery/door/firedoor/solid, -/obj/effect/decal/cleanable/blood/tracks, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/developement) -"SQ" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/light/directional/north, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/cult, -/area/ruin/space/has_grav/port_tarkon/storage) -"ST" = ( -/obj/structure/window/reinforced/spawner/directional/west, -/turf/open/floor/plating, -/area/ruin/space/has_grav/port_tarkon/atmos) -"SU" = ( -/turf/closed/wall, -/area/ruin/space/has_grav/port_tarkon/observ) -"SV" = ( -/obj/structure/table, -/obj/item/paper_bin, -/obj/item/pen, -/obj/effect/turf_decal/tile/blue/half{ - dir = 4 - }, -/obj/item/folder/red, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/port_tarkon/comms) -"SW" = ( -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ - dir = 1 - }, -/obj/effect/turf_decal/delivery/blue, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/centerhall) -"SX" = ( -/obj/effect/decal/cleanable/ash, -/obj/effect/spawner/random/maintenance, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/plating, -/area/ruin/space/has_grav/port_tarkon/forehall) -"SZ" = ( -/obj/structure/table/reinforced, -/obj/item/kitchen/rollingpin, -/turf/open/floor/iron/cafeteria, -/area/ruin/space/has_grav/port_tarkon/kitchen) -"Tb" = ( -/obj/machinery/light/dim/directional/south, -/obj/effect/turf_decal/tile/brown/anticorner{ - dir = 8 - }, -/obj/structure/rack/shelf, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/storage) -"Tc" = ( -/obj/effect/decal/cleanable/blood/tracks, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/cult, -/area/ruin/space/has_grav/port_tarkon/porthall) -"Te" = ( -/obj/machinery/airalarm/directional/north, -/obj/effect/mapping_helpers/airalarm/all_access, -/obj/effect/decal/cleanable/glass, -/obj/effect/decal/cleanable/blood, -/obj/structure/statue/bone/rib{ - dir = 1 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/cult, -/area/ruin/space/has_grav/port_tarkon/developement) -"Ti" = ( -/obj/effect/turf_decal/stripes{ - dir = 5 - }, -/obj/structure/cable, -/obj/effect/decal/cleanable/dirt, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden, -/turf/open/floor/engine, -/area/ruin/space/has_grav/port_tarkon/atmos) -"Tk" = ( -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ - dir = 8 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/port_tarkon/comms) -"Tl" = ( -/obj/effect/spawner/structure/window/reinforced, -/turf/open/floor/plating, -/area/ruin/space/has_grav/port_tarkon/forehall) -"To" = ( -/obj/structure/closet, -/obj/effect/decal/cleanable/dirt, -/obj/item/clothing/shoes/workboots/mining, -/obj/item/clothing/shoes/winterboots, -/obj/item/clothing/shoes/jackboots, -/obj/item/clothing/under/rank/engineering/engineer/nova/utility, -/obj/item/clothing/under/rank/engineering/engineer/nova/utility, -/obj/item/storage/backpack/industrial, -/obj/item/storage/backpack/duffelbag/engineering, -/obj/item/storage/backpack/satchel/eng, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon) -"Ts" = ( -/obj/structure/closet/crate, -/obj/item/bedsheet/dorms, -/obj/item/bedsheet/dorms, -/obj/item/bedsheet/dorms, -/obj/item/bedsheet/dorms, -/obj/item/bedsheet/dorms, -/obj/item/bedsheet/dorms, -/obj/item/bedsheet/dorms, -/obj/item/bedsheet/dorms_double, -/obj/item/bedsheet/dorms_double, -/obj/item/bedsheet/dorms_double, -/obj/item/bedsheet/dorms_double, -/obj/effect/turf_decal/tile/brown/anticorner{ - dir = 4 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/storage) -"Tx" = ( -/obj/structure/statue/bone/rib{ - dir = 1 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/cult, -/area/ruin/space/has_grav/port_tarkon/atmos) -"Tz" = ( -/obj/machinery/door/airlock/public/glass{ - name = "Kitchen" - }, -/obj/machinery/door/firedoor/solid, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/kitchen) -"TF" = ( -/obj/structure/cable, -/obj/machinery/power/apc/auto_name/directional/west, -/obj/effect/mapping_helpers/apc/no_charge, -/obj/effect/mapping_helpers/apc/unlocked, -/obj/structure/table/reinforced, -/obj/item/folder/yellow, -/obj/item/folder/red, -/obj/effect/turf_decal/tile/brown/half{ - dir = 8 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/cargo) -"TH" = ( -/obj/machinery/airalarm/directional/north, -/obj/effect/mapping_helpers/airalarm/all_access, -/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/tile/neutral/anticorner{ - dir = 4 - }, -/obj/effect/decal/cleanable/blood, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/centerhall) -"TK" = ( -/turf/closed/wall/mineral/cult/artificer, -/area/ruin/space/has_grav/port_tarkon/dorms) -"TL" = ( -/obj/machinery/power/solar_control{ - dir = 1; - id = "aftport"; - name = "Station Solar Control" - }, -/obj/structure/cable, -/obj/item/paper/guides/jobs/engi/solars, -/obj/effect/turf_decal/tile/yellow/half, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/power1) -"TP" = ( -/obj/machinery/light/warm/directional/east, -/obj/effect/turf_decal/tile/neutral/half{ - dir = 4 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/centerhall) -"TQ" = ( -/obj/structure/cable, -/obj/machinery/airalarm/directional/east, -/obj/effect/mapping_helpers/airalarm/all_access, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/effect/turf_decal/tile/brown/half{ - dir = 4 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/mining) -"TS" = ( -/obj/effect/decal/cleanable/glass, -/obj/effect/mob_spawn/corpse/human/bartender, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/cult, -/area/ruin/space/has_grav/port_tarkon/developement) -"TT" = ( -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ - dir = 8 - }, -/obj/item/storage/box/stockparts/basic, -/obj/structure/table/reinforced, -/obj/item/stack/sheet/glass{ - amount = 25 - }, -/obj/item/stack/cable_coil, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/cult, -/area/ruin/space/has_grav/port_tarkon/developement) -"TV" = ( -/obj/machinery/firealarm/directional/north, -/obj/effect/turf_decal/tile/yellow/half{ - dir = 1 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/toolstorage) -"TW" = ( -/turf/closed/wall/r_wall, -/area/ruin/space/has_grav/port_tarkon/starboardhall) -"TX" = ( -/obj/machinery/airalarm/directional/east, -/obj/effect/mapping_helpers/airalarm/all_access, -/obj/effect/turf_decal/tile/blue/half{ - dir = 4 - }, -/obj/machinery/light/dim/directional/east, -/obj/item/folder/blue, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/port_tarkon/comms) -"Ua" = ( -/obj/structure/safe/floor, -/obj/item/stack/sheet/bluespace_crystal{ - amount = 5 - }, -/obj/item/stack/sheet/mineral/diamond{ - amount = 10 - }, -/obj/item/weldingtool/abductor, -/obj/item/circuitboard/machine/bluespace_miner, -/obj/item/paper/fluff/ruins/tarkon/coupplans, -/obj/effect/decal/cleanable/glass, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/cult, -/area/ruin/space/has_grav/port_tarkon/developement) -"Ub" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/statue/bone/rib, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/cult, -/area/ruin/space/has_grav/port_tarkon/starboardhall) -"Ud" = ( -/obj/structure/closet/crate/bin, -/obj/item/mod/module/springlock, -/obj/effect/turf_decal/tile/red/half, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/secoff) -"Ue" = ( -/obj/effect/decal/cleanable/blood, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/afthall) -"Uf" = ( -/obj/effect/turf_decal/tile/purple/half{ - dir = 1 - }, -/obj/structure/table/reinforced, -/obj/item/circuitboard/machine/anomaly_refinery, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/port_tarkon/developement) -"Uh" = ( -/obj/effect/decal/cleanable/blood, -/mob/living/basic/construct/wraith/hostile{ - health = 125; - maxHealth = 125 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/forehall) -"Un" = ( -/obj/structure/cable, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/atmos) -"Ur" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/cult, -/area/ruin/space/has_grav/port_tarkon/storage) -"Ut" = ( -/obj/machinery/door/airlock/maintenance_hatch, -/obj/structure/cable, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/afthall) -"Uu" = ( -/obj/structure/statue/bone/rib{ - dir = 1 - }, -/obj/effect/decal/cleanable/blood, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/cult, -/area/ruin/space/has_grav/port_tarkon/porthall) -"Uv" = ( -/turf/closed/wall/mineral/cult/artificer, -/area/ruin/space/has_grav/port_tarkon) -"Uw" = ( -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/observ) -"Ux" = ( -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/cult, -/area/ruin/space/has_grav/port_tarkon/starboardhall) -"Uy" = ( -/obj/effect/decal/cleanable/blood/tracks{ - dir = 10 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/cult, -/area/ruin/space/has_grav/port_tarkon/storage) -"Uz" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/decal/cleanable/glass, -/obj/effect/decal/cleanable/blood, -/mob/living/simple_animal/hostile/cult/magic/elite{ - health = 400; - maxHealth = 400; - name = "The Veilbreaker" - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/cult, -/area/ruin/space/has_grav/port_tarkon/developement) -"UI" = ( -/obj/effect/spawner/structure/window/reinforced/plasma, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden, -/turf/open/floor/plating, -/area/ruin/space/has_grav/port_tarkon/atmos) -"UJ" = ( -/obj/effect/turf_decal/sand/plating, -/turf/open/floor/plating/airless, -/area/solars/tarkon) -"UK" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/cult, -/area/ruin/space/has_grav/port_tarkon/mining) -"UM" = ( -/turf/open/floor/mineral/titanium, -/area/ruin/space/has_grav) -"US" = ( -/obj/effect/spawner/structure/window/reinforced, -/turf/open/floor/plating, -/area/ruin/space/has_grav/port_tarkon/starboardhall) -"UU" = ( -/obj/effect/decal/cleanable/blood/tracks{ - dir = 4 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/starboardhall) -"UV" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/port_tarkon/developement) -"UX" = ( -/obj/structure/cable, -/obj/machinery/airalarm/directional/west, -/obj/effect/mapping_helpers/airalarm/all_access, -/obj/effect/turf_decal/tile/yellow/half{ - dir = 8 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/power1) -"UZ" = ( -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/porthall) -"Va" = ( -/obj/effect/mob_spawn/corpse/human/damaged, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/atmos) -"Vc" = ( -/obj/machinery/door/airlock/research, -/obj/machinery/door/firedoor/solid, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/developement) -"Vd" = ( -/obj/structure/statue/bone/rib, -/obj/effect/decal/cleanable/blood, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/cult, -/area/ruin/space/has_grav/port_tarkon/forehall) -"Ve" = ( -/obj/effect/decal/cleanable/blood/tracks{ - dir = 4 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/porthall) -"Vg" = ( -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/cafeteria, -/area/ruin/space/has_grav/port_tarkon/kitchen) -"Vi" = ( -/obj/effect/turf_decal/sand/plating, -/obj/structure/grille, -/turf/open/floor/plating/airless, -/area/ruin/space/has_grav) -"Vj" = ( -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon) -"Vk" = ( -/obj/structure/closet, -/obj/effect/decal/cleanable/dirt, -/obj/item/clothing/shoes/workboots/mining, -/obj/item/clothing/shoes/winterboots, -/obj/item/clothing/shoes/jackboots, -/obj/item/clothing/under/rank/captain/nova/utility, -/obj/item/clothing/under/rank/captain/nova/utility, -/obj/item/storage/backpack/duffelbag/blueshield, -/obj/item/storage/backpack/blueshield, -/obj/item/storage/backpack/satchel/blueshield, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon) -"Vl" = ( -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, -/obj/effect/decal/cleanable/glass, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/cult, -/area/ruin/space/has_grav/port_tarkon/developement) -"Vm" = ( -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ - dir = 8 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/garden) -"Vn" = ( -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/cult, -/area/ruin/space/has_grav/port_tarkon/mining) -"Vt" = ( -/obj/machinery/light/dim/directional/east, -/turf/closed/wall/mineral/cult/artificer, -/area/ruin/space/has_grav/port_tarkon/porthall) -"Vu" = ( -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ - dir = 1 - }, -/obj/effect/turf_decal/tile/brown/half, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/starboardhall) -"Vw" = ( -/obj/structure/sign/warning/no_smoking, -/turf/closed/wall/r_wall, -/area/ruin/space/has_grav/port_tarkon/atmos) -"Vx" = ( -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, -/turf/open/floor/carpet/purple, -/area/ruin/space/has_grav/port_tarkon/dorms) -"Vy" = ( -/obj/machinery/light/dim/directional/east, -/obj/effect/turf_decal/tile/brown/half{ - dir = 4 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/mining) -"Vz" = ( -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ - dir = 1 - }, -/obj/effect/turf_decal/delivery/blue, -/obj/effect/turf_decal/tile/neutral/half, -/obj/item/ammo_box/magazine/c35sol_pistol, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/centerhall) -"VE" = ( -/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/yellow/half{ - dir = 4 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/power1) -"VH" = ( -/obj/effect/turf_decal/tile/neutral/anticorner{ - dir = 1 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/centerhall) -"VJ" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/forehall) -"VK" = ( -/obj/effect/turf_decal/tile/blue/half{ - dir = 4 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/port_tarkon/comms) -"VO" = ( -/obj/machinery/light/dim/directional/north, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/forehall) -"VS" = ( -/obj/machinery/atmospherics/miner/oxygen, -/turf/open/floor/engine/o2, -/area/ruin/space/has_grav/port_tarkon/atmos) -"VT" = ( -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ - dir = 8 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/toolstorage) -"VU" = ( -/obj/effect/spawner/structure/window/reinforced, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/port_tarkon/developement) -"VV" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/cable, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/forehall) -"Wa" = ( -/turf/closed/mineral/random, -/area/ruin/space/has_grav) -"Wc" = ( -/obj/effect/turf_decal/sand, -/obj/structure/closet/emcloset, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/mining) -"Wd" = ( -/obj/effect/turf_decal/vg_decals/atmos/nitrogen, -/obj/machinery/light/small/directional/west, -/obj/machinery/air_sensor/tarkon/nitrogen_tank{ - pixel_x = -26 - }, -/turf/open/floor/engine/n2, -/area/ruin/space/has_grav/port_tarkon/atmos) -"We" = ( -/obj/machinery/computer{ - desc = "A computer long since rendered non-functional due to lack of maintenance. Spitting out error messages."; - dir = 4; - name = "Broken Computer" - }, -/obj/effect/turf_decal/tile/blue/anticorner{ - dir = 8 - }, -/obj/item/paper/fluff/ruins/tarkon/goals, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/port_tarkon/comms) -"Wh" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/airalarm/directional/east, -/obj/effect/turf_decal/tile/red/half{ - dir = 4 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/secoff) -"Wi" = ( -/mob/living/basic/construct/wraith/hostile, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/starboardhall) -"Wn" = ( -/obj/machinery/computer/cryopod/tarkon/directional/west, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/centerhall) -"Wp" = ( -/obj/machinery/vending/snack/teal, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/afthall) -"Wq" = ( -/obj/structure/cable, -/obj/effect/decal/cleanable/blood, -/mob/living/basic/construct/artificer/hostile, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/cargo) -"Wt" = ( -/turf/closed/mineral/random, -/area/awaymission) -"Wu" = ( -/obj/machinery/light_switch/directional/north, -/obj/structure/statue/bone/rib{ - dir = 1 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/cult, -/area/ruin/space/has_grav/port_tarkon/cargo) -"Wv" = ( -/obj/structure/statue/bone/rib{ - dir = 1 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/cult, -/area/ruin/space/has_grav/port_tarkon/mining) -"WB" = ( -/obj/machinery/power/solar, -/obj/structure/cable, -/obj/effect/turf_decal/stripes/asteroid/line{ - dir = 1 - }, -/turf/open/misc/asteroid/airless, -/area/solars/tarkon) -"WC" = ( -/obj/machinery/light/dim/directional/west, -/obj/structure/window/reinforced/spawner/directional/north, -/obj/effect/turf_decal/tile/neutral/fourcorners, -/obj/machinery/computer/atmos_control/tarkon/mix_tank{ - dir = 4 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/atmos) -"WD" = ( -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/port_tarkon/comms) -"WE" = ( -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/forehall) -"WK" = ( -/mob/living/basic/construct/proteon/hostile, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/cult, -/area/ruin/space/has_grav/port_tarkon/afthall) -"WL" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/decal/cleanable/blood/tracks{ - dir = 4 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/centerhall) -"WM" = ( -/obj/machinery/light/small/directional/east, -/obj/machinery/oven/range, -/turf/open/floor/iron/cafeteria, -/area/ruin/space/has_grav/port_tarkon/kitchen) -"WO" = ( -/obj/structure/table/reinforced, -/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/ruin/space/has_grav/port_tarkon/centerhall) -"WP" = ( -/obj/effect/spawner/structure/window/reinforced/no_firelock, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/door/poddoor/shutters{ - id = "ptatmos" - }, -/turf/open/floor/plating, -/area/ruin/space/has_grav/port_tarkon/atmos) -"WQ" = ( -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, -/obj/effect/decal/cleanable/glass, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/cult, -/area/ruin/space/has_grav/port_tarkon/developement) -"WU" = ( -/turf/closed/wall, -/area/ruin/space/has_grav/port_tarkon/porthall) -"WW" = ( -/obj/effect/decal/cleanable/glass, -/turf/closed/wall/mineral/cult/artificer, -/area/ruin/space/has_grav/port_tarkon/developement) -"WY" = ( -/turf/open/space/basic, -/area/template_noop) -"Xb" = ( -/obj/structure/cable, -/obj/machinery/power/solar, -/obj/effect/turf_decal/stripes/asteroid/line{ - dir = 1 - }, -/turf/open/misc/asteroid/airless, -/area/solars/tarkon) -"Xh" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/structure/cable, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/port_tarkon/developement) -"Xj" = ( -/obj/machinery/door/airlock/multi_tile/public/glass, -/obj/machinery/door/firedoor/solid, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/garden) -"Xn" = ( -/obj/structure/ore_box, -/obj/effect/turf_decal/tile/brown/anticorner, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/mining) -"Xq" = ( -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/centerhall) -"Xr" = ( -/obj/structure/reagent_dispensers/watertank, -/turf/open/floor/plating, -/area/ruin/space/has_grav/port_tarkon/afthall) -"Xu" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/cable, -/mob/living/basic/construct/artificer/hostile{ - health = 150; - maxHealth = 150 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/porthall) -"Xw" = ( -/obj/structure/statue/bone/rib{ - dir = 1 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/cult, -/area/ruin/space/has_grav/port_tarkon/secoff) -"Xy" = ( -/turf/closed/wall/mineral/cult/artificer, -/area/ruin/space/has_grav/port_tarkon/toolstorage) -"Xz" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/cult, -/area/ruin/space/has_grav/port_tarkon/mining) -"XD" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/structure/cable, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/starboardhall) -"XE" = ( -/obj/machinery/door/window/left/directional/west{ - opacity = 1 - }, -/obj/structure/statue/bone/rib, -/obj/effect/mob_spawn/corpse/human/assistant, -/turf/open/floor/cult, -/area/ruin/space/has_grav/port_tarkon/centerhall) -"XG" = ( -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/garden) -"XH" = ( -/obj/machinery/atmospherics/components/binary/pump/off/general{ - dir = 8 - }, -/obj/effect/turf_decal/tile/purple/fourcorners, -/obj/structure/cable, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/atmos) -"XI" = ( -/obj/machinery/light_switch/directional/north, -/obj/effect/turf_decal/delivery/blue, -/obj/effect/turf_decal/tile/neutral/half{ - dir = 1 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/centerhall) -"XJ" = ( -/obj/machinery/door/firedoor/solid, -/obj/machinery/door/airlock/public/glass{ - name = "Fore Primary Hallway" - }, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/forehall) -"XT" = ( -/obj/machinery/hydroponics/soil, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/grass, -/area/ruin/space/has_grav/port_tarkon/garden) -"XY" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/cult, -/area/ruin/space/has_grav/port_tarkon/porthall) -"XZ" = ( -/turf/closed/wall/r_wall/rust, -/area/ruin/space/has_grav) -"Yb" = ( -/obj/machinery/firealarm/directional/east, -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, -/obj/effect/turf_decal/tile/yellow/half{ - dir = 4 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/power1) -"Yc" = ( -/obj/item/solar_assembly, -/obj/structure/cable, -/obj/effect/turf_decal/stripes/asteroid/line, -/turf/open/misc/asteroid/airless, -/area/solars/tarkon) -"Yh" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/cable, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/cult, -/area/ruin/space/has_grav/port_tarkon/forehall) -"Yk" = ( -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/cult, -/area/ruin/space/has_grav/port_tarkon/garden) -"Yp" = ( -/obj/machinery/airalarm/directional/north, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/cult, -/area/ruin/space/has_grav/port_tarkon/starboardhall) -"Yr" = ( -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ - dir = 8 - }, -/obj/effect/decal/cleanable/blood, -/turf/open/floor/cult, -/area/ruin/space/has_grav/port_tarkon/centerhall) -"Yt" = ( -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/cult, -/area/ruin/space/has_grav/port_tarkon/comms) -"Yu" = ( -/obj/effect/turf_decal/tile/red/half, -/obj/item/storage/toolbox/maint_kit, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/secoff) -"Yv" = ( -/obj/machinery/hydroponics/soil, -/obj/machinery/light/small/directional/east, -/obj/effect/decal/cleanable/blood, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/grass, -/area/ruin/space/has_grav/port_tarkon/garden) -"Yy" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/effect/mob_spawn/corpse/human/damaged, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/cult, -/area/ruin/space/has_grav/port_tarkon/comms) -"YB" = ( -/obj/effect/decal/cleanable/glass, -/obj/effect/decal/cleanable/blood, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/cult, -/area/ruin/space/has_grav/port_tarkon/developement) -"YC" = ( -/obj/machinery/power/apc/auto_name/directional/north, -/obj/effect/mapping_helpers/apc/no_charge, -/obj/effect/mapping_helpers/apc/unlocked, -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/airalarm/directional/south, -/obj/effect/mapping_helpers/airalarm/all_access, -/obj/effect/decal/cleanable/blood/tracks{ - dir = 8 - }, -/turf/open/floor/wood/large, -/area/ruin/space/has_grav/port_tarkon/dorms) -"YD" = ( -/obj/machinery/light/dim/directional/west, -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ - dir = 4 - }, -/obj/structure/statue/bone/rib{ - dir = 1 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/cult, -/area/ruin/space/has_grav/port_tarkon/mining) -"YF" = ( -/obj/effect/spawner/structure/window/reinforced, -/obj/effect/turf_decal/tile/purple/half, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/port_tarkon/developement) -"YH" = ( -/obj/effect/decal/cleanable/blood, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/cult, -/area/ruin/space/has_grav/port_tarkon/starboardhall) -"YI" = ( -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/port_tarkon/developement) -"YK" = ( -/obj/effect/spawner/structure/window/reinforced/no_firelock, -/obj/machinery/door/poddoor/shutters{ - id = "ptcomms" - }, -/turf/open/floor/plating, -/area/ruin/space/has_grav/port_tarkon/comms) -"YP" = ( -/obj/effect/turf_decal/tile/neutral/half{ - dir = 1 - }, -/obj/item/ammo_box/magazine/c35sol_pistol, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/centerhall) -"YR" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/decal/cleanable/blood/tracks{ - dir = 9 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/port_tarkon/developement) -"YT" = ( -/turf/closed/wall, -/area/ruin/space/has_grav/port_tarkon/cargo) -"YW" = ( -/obj/machinery/light/dim/directional/west, -/obj/effect/decal/cleanable/blood, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/cult, -/area/ruin/space/has_grav/port_tarkon/starboardhall) -"YZ" = ( -/obj/structure/mirror/directional/west, -/obj/structure/sink/directional/east, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/white, -/area/ruin/space/has_grav/port_tarkon/centerhall) -"Zc" = ( -/turf/closed/mineral/random/high_chance, -/area/solars/tarkon) -"Zf" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/effect/decal/cleanable/blood/tracks{ - dir = 9 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/cult, -/area/ruin/space/has_grav/port_tarkon/porthall) -"Zg" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/cable, -/obj/effect/decal/cleanable/blood, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/cult, -/area/ruin/space/has_grav/port_tarkon/secoff) -"Zi" = ( -/obj/effect/decal/cleanable/glass, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/cult, -/area/ruin/space/has_grav/port_tarkon/developement) -"Zl" = ( -/obj/effect/turf_decal/sand, -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/cult, -/area/ruin/space/has_grav/port_tarkon/mining) -"Zm" = ( -/obj/machinery/atmospherics/components/unary/portables_connector/visible{ - dir = 4 - }, -/obj/effect/turf_decal/tile/yellow/fourcorners, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/atmos) -"Zp" = ( -/obj/structure/table/reinforced, -/obj/item/storage/belt/utility, -/obj/effect/turf_decal/tile/yellow/half{ - dir = 8 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/toolstorage) -"Zq" = ( -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/port_tarkon/atmos) -"Zr" = ( -/obj/structure/table/optable, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/cult, -/area/ruin/space/has_grav/port_tarkon/trauma) -"Zt" = ( -/obj/machinery/light/dim/directional/north, -/mob/living/basic/construct/wraith/hostile{ - health = 125; - maxHealth = 125 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/forehall) -"Zu" = ( -/obj/structure/window/reinforced/tinted/spawner/directional/south, -/obj/effect/decal/cleanable/blood, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/port_tarkon/developement) -"Zv" = ( -/obj/machinery/door/window/left/directional/west, -/turf/open/floor/plating, -/area/ruin/space/has_grav/port_tarkon/atmos) -"Zw" = ( -/obj/machinery/light/dim/directional/east, -/obj/structure/window/reinforced/spawner/directional/north, -/obj/effect/turf_decal/tile/yellow/fourcorners, -/obj/machinery/computer/atmos_control/tarkon/nitrous_tank{ - dir = 8 - }, -/obj/effect/decal/cleanable/blood, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/atmos) -"Zz" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/decal/cleanable/blood, -/obj/effect/decal/cleanable/blood/tracks{ - dir = 10 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/cult, -/area/ruin/space/has_grav/port_tarkon/porthall) -"ZC" = ( -/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/neutral/anticorner, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/centerhall) -"ZG" = ( -/turf/closed/wall/r_wall, -/area/ruin/space/has_grav/port_tarkon/storage) -"ZH" = ( -/obj/structure/cable, -/obj/structure/rack, -/obj/item/stack/cable_coil, -/obj/item/stack/sheet/iron/fifty, -/obj/item/stack/sheet/glass/fifty, -/obj/effect/turf_decal/tile/yellow/half, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/power1) -"ZJ" = ( -/turf/open/misc/asteroid/airless, -/area/awaymission) -"ZK" = ( -/obj/structure/curtain, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/cult, -/area/ruin/space/has_grav/port_tarkon/developement) -"ZM" = ( -/obj/effect/spawner/structure/window/reinforced/no_firelock, -/obj/machinery/door/firedoor/solid/closed, -/turf/open/floor/plating, -/area/ruin/space/has_grav/port_tarkon/afthall) -"ZN" = ( -/turf/closed/wall, -/area/ruin/space/has_grav/port_tarkon/afthall) -"ZU" = ( -/obj/machinery/door/airlock/mining/glass, -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/door/firedoor/solid/closed, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/mining) -"ZV" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/airalarm/directional/north, -/obj/effect/mapping_helpers/airalarm/all_access, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/cult, -/area/ruin/space/has_grav/port_tarkon/storage) -"ZX" = ( -/obj/machinery/door/airlock/public/glass{ - name = "Cryogenics Room" - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/door/firedoor/solid, -/obj/structure/cable, -/obj/modular_map_connector, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon) -"ZY" = ( -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ - dir = 1 - }, -/obj/machinery/airalarm/directional/west, -/obj/effect/mapping_helpers/airalarm/all_access, -/obj/effect/decal/cleanable/blood, -/turf/open/floor/carpet/red, -/area/ruin/space/has_grav/port_tarkon/dorms) -"ZZ" = ( -/turf/closed/wall/mineral/cult/artificer, -/area/ruin/space/has_grav/port_tarkon/centerhall) - -(1,1,1) = {" -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -"} -(2,1,1) = {" -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -RM -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -RM -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -"} -(3,1,1) = {" -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -RM -WY -WY -WY -WY -RM -WY -WY -WY -EW -WY -WY -WY -WY -WY -WY -WY -RM -WY -WY -WY -WY -WY -WY -RM -WY -WY -"} -(4,1,1) = {" -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -RM -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -"} -(5,1,1) = {" -WY -WY -WY -WY -RM -WY -WY -WY -WY -WY -WY -WY -WY -EW -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -zo -zo -zo -zo -zo -zo -zo -zo -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -"} -(6,1,1) = {" -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -zo -zo -zo -zo -zo -zo -zo -zo -zo -zo -zo -zo -zo -zo -zo -zo -zo -zo -zo -zo -zo -zo -Eb -zo -zo -zo -Wa -Wa -sv -Wa -Wa -sv -Wa -Wa -Wa -Wa -Wa -Wa -Wa -Wa -Wa -Wa -WY -WY -WY -WY -WY -WY -RM -WY -WY -WY -WY -WY -"} -(7,1,1) = {" -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -zo -zo -zo -zo -zo -zo -zo -zo -zo -zo -zo -zo -zo -zo -zo -zo -zo -zo -zo -zo -zo -zo -zo -zo -zo -iv -zo -Wa -Wa -Wa -sv -Wa -sv -Wa -Wa -Wa -Wa -Wa -sv -Wa -sv -Wa -sv -sv -sv -sv -Wa -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -"} -(8,1,1) = {" -WY -WY -WY -WY -WY -WY -WY -EW -WY -WY -WY -WY -zo -zo -zo -zo -zo -zo -zo -zo -zo -zo -zo -zo -zo -zo -zo -zo -zo -zo -zo -zo -zo -zo -zo -zo -zo -zo -zo -iI -Wa -Wa -sv -Wa -Wa -Wa -Wa -sv -Wa -Wa -sv -Wa -sv -sv -Wa -Wa -Wa -sv -Wa -Wa -Wa -Wa -Wa -WY -WY -WY -WY -WY -WY -WY -WY -"} -(9,1,1) = {" -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -zo -zo -zo -zo -zo -EQ -EQ -EQ -WU -WU -WU -WU -WU -WU -WU -WU -WU -AN -AN -AN -FY -FY -FY -FY -WU -WU -WU -xt -xt -WP -Vw -xt -xt -xt -xt -xt -xt -xt -hD -hD -xt -sv -sv -Wa -sv -Wa -Wa -Wa -sv -sv -Wa -Wa -sv -Wa -WY -WY -WY -WY -WY -WY -WY -"} -(10,1,1) = {" -WY -WY -WY -WY -WY -WY -WY -WY -WY -zo -zo -zo -zo -EQ -EQ -EQ -Uw -qe -jg -Xu -bK -bK -OF -bK -bK -IY -oe -RB -rY -wi -Mg -XY -Ap -RB -Kf -XY -RB -gp -df -jB -og -lH -pA -yC -lH -Wd -nm -lH -rL -VS -lH -sv -sv -sv -zo -zo -Wa -sv -Wa -Wa -Wa -Wa -Wa -Wa -WY -WY -WY -WY -WY -WY -WY -"} -(11,1,1) = {" -WY -WY -WY -WY -WY -WY -WY -WY -zo -zo -zo -EQ -EQ -EQ -Gh -jF -jF -qe -AN -rW -Sz -AN -wt -xo -AN -hN -aO -UZ -AN -aM -Eg -UZ -Mv -UZ -Od -xI -Zf -PK -dC -JJ -lp -lH -te -QH -lH -sj -jj -lH -oI -AF -lH -sv -jO -iB -zo -zo -zo -sv -sv -sv -sv -sv -sv -Wa -Wa -WY -WY -WY -WY -WY -WY -"} -(12,1,1) = {" -WY -WY -WY -WY -WY -WY -WY -WY -zo -zo -EQ -EQ -KS -sK -jF -NT -xN -tL -vz -do -pj -yT -UZ -UZ -FC -AN -UZ -yT -UZ -aM -he -UZ -Vt -Lu -Eg -zU -Bh -gp -SM -CP -mo -lH -ts -NK -lH -xp -NK -lH -Bj -NK -lH -xt -GE -xt -zo -WY -zo -xt -sv -Wa -sv -sv -Wa -Wa -Wa -WY -WY -WY -WY -WY -WY -"} -(13,1,1) = {" -WY -WY -WY -WY -WY -WY -WY -zo -zo -zo -EQ -KS -yl -La -jF -Gh -aA -hH -nP -nP -nP -nP -Vc -li -db -nP -nP -db -db -db -db -nP -db -db -cX -AN -Et -hD -hi -mW -SM -WC -Bi -HU -mc -iG -ad -qk -kr -hM -iw -Fr -Gp -hD -xt -kS -cd -xt -Wa -sv -Wa -sv -sv -Wa -Wa -Wa -RM -WY -WY -WY -WY -"} -(14,1,1) = {" -WY -WY -RM -WY -WY -WY -WY -zo -zo -EQ -EQ -NH -dt -at -Uw -jF -Uw -as -nP -Ik -sP -kT -On -vs -On -xu -db -Ik -gu -yz -wQ -fV -mM -nP -UZ -UZ -uI -xt -dl -mW -ez -SM -SM -ez -zE -ez -ez -SM -SM -SM -AA -gs -wW -Ld -sc -Ex -xB -xt -Wa -Wa -sv -Wa -sv -Wa -Wa -zo -WY -WY -WY -WY -WY -"} -(15,1,1) = {" -WY -WY -WY -WY -WY -WY -zo -zo -zo -EQ -kp -Uw -LW -Uw -wR -Uw -Uw -qe -nP -Uf -zj -lF -On -BX -eo -On -db -PM -fG -OK -yO -On -Ed -nP -ob -qf -we -xt -An -jJ -zc -Tx -il -ez -ez -Tx -SM -zE -Va -ez -bn -xt -Fs -xt -Ak -MU -eZ -xt -zo -sv -Wa -sv -sv -Wa -zo -zo -WY -WY -WY -WY -WY -"} -(16,1,1) = {" -WY -WY -WY -WY -WY -WY -zo -zo -EQ -EQ -jF -bX -nB -NZ -Oi -Oi -NZ -qe -nP -ef -YI -UV -On -On -ew -RH -db -PM -Ic -yx -Zu -xY -vB -nP -mY -id -uI -xt -pW -PW -ez -il -pb -hz -ez -ez -il -SM -ez -kd -lI -KM -UI -xt -xt -sa -xt -xt -zo -zo -Wa -sv -Wa -Wa -zo -zo -WY -WY -WY -WY -WY -"} -(17,1,1) = {" -WY -WY -WY -WY -WY -WY -zo -zo -EQ -Ez -jF -lr -Uw -Uw -Uw -Uw -MJ -qe -db -fa -YI -AI -YI -de -Id -RH -db -PM -Xh -YI -KP -hB -vy -SO -Tc -Tc -kH -xt -IG -Jn -bJ -bJ -NE -ri -ez -ez -il -tj -ez -SM -Fh -Zq -hP -QW -Rm -FT -sL -zo -Wa -Vi -sv -sv -Wa -zo -zo -zo -WY -WY -WY -WY -WY -"} -(18,1,1) = {" -WY -WY -WY -WY -WY -zo -zo -zo -EQ -Cx -Gl -jF -Gf -gE -QL -RJ -ml -qe -db -QX -oH -Er -DE -Er -Er -sr -db -PM -eU -YI -YI -Am -RH -nP -UZ -UZ -bK -hD -fv -KI -il -il -ez -il -ez -il -ez -zE -SM -SM -Fh -DD -wh -Ob -xt -zC -xt -zo -Vi -zo -nx -Wa -Wa -zo -zo -zo -WY -WY -WY -WY -WY -"} -(19,1,1) = {" -WY -WY -WY -WY -WY -zo -zo -zo -SU -SU -SU -jY -jY -jY -SU -eL -SU -HW -nP -pE -YI -YI -YR -la -RT -Sg -pY -ko -un -nH -AO -DK -tA -db -xZ -AN -OF -hD -ez -KI -ez -oh -Jb -ez -oF -oh -ez -SM -SM -SM -Fh -zT -Ti -eQ -xt -Ke -cd -zo -Vi -zo -zo -zo -tt -zo -zo -zo -WY -WY -WY -WY -WY -"} -(20,1,1) = {" -WY -WY -WY -WY -WY -zo -zo -zo -Wa -sv -sv -Wa -Wa -Wa -kf -WE -WE -VV -nP -CB -VU -VU -se -VU -VU -YF -db -PM -Id -HO -On -DK -bm -db -aM -Uu -Bs -hD -OD -KI -KI -KI -Un -Un -Un -cR -KI -KI -SM -SM -jG -lQ -yJ -Ml -xt -WY -zo -zo -sv -FG -nx -nx -Wa -zo -zo -zo -WY -WY -WY -WY -WY -"} -(21,1,1) = {" -WY -WY -WY -WY -WY -zo -zo -Wa -Wa -sv -Wa -sv -Wa -sv -kf -WE -WE -VV -nP -Gv -gt -YI -vc -ZK -On -Su -db -PM -fJ -Ig -ca -dx -Pf -HQ -Zz -Eg -Fa -hD -SM -zE -ez -Zw -Zm -Rg -oQ -PB -cv -Qu -uK -XH -Me -hf -hf -xt -xt -zo -zo -sv -Wa -Wa -zb -kA -kF -zo -zo -zo -WY -WY -WY -WY -WY -"} -(22,1,1) = {" -WY -WY -WY -RM -WY -zo -zo -Wa -Wa -Wa -Wa -Wa -sv -Wa -kf -VO -WE -Nc -nP -xT -YI -On -Hr -ZK -OK -On -db -PM -TT -de -qy -rF -Ni -db -ra -aM -OI -xt -ST -Zv -ST -lH -NK -ub -lH -NK -lV -lH -NK -Qg -lH -xt -xt -xt -sv -sv -sv -sv -Wa -LJ -UJ -UJ -rg -av -MG -LJ -WY -WY -WY -WY -WY -"} -(23,1,1) = {" -WY -WY -WY -WY -WY -zo -Wa -Wa -Wa -sv -sv -sv -sv -sv -kf -sI -Kb -VV -nP -oc -yG -OZ -vc -rG -On -no -db -PM -cc -KP -On -QY -Sn -nP -ra -yT -RZ -xt -vO -pc -vO -lH -Rf -ld -lH -pU -xj -lH -Qk -fR -lH -sv -sv -sv -sv -Wa -Zc -LJ -rg -av -MG -UJ -At -Mr -ye -LJ -WY -WY -WY -WY -WY -"} -(24,1,1) = {" -WY -WY -WY -WY -WY -Wa -sv -Wa -sv -Wa -sv -sv -Wa -Wa -kf -jN -WE -VV -nP -RO -Zi -pa -qK -ZK -Sp -lw -db -RI -Jz -sN -rH -Cw -aY -nP -ra -Mi -bK -xt -vO -vO -vO -lH -GB -vp -lH -om -hR -lH -RY -MD -lH -sv -sv -sv -sv -LJ -LJ -LJ -Qn -UJ -Xb -LJ -Qn -Mr -If -LJ -WY -WY -WY -WY -WY -"} -(25,1,1) = {" -WY -WY -WY -WY -WY -Wa -sv -Wa -Wa -Wa -sv -sv -Wa -Wa -yd -ma -oi -VV -db -ME -Zi -pa -FW -WW -Xy -mi -rh -rh -rh -Xy -Xy -rh -rh -WU -tE -tQ -bK -hD -xt -xt -xt -xt -xt -hD -hD -xt -xt -bO -xt -xt -xt -GY -sv -sv -sv -LJ -LJ -LJ -Qn -UJ -IL -LJ -Ft -Mr -ye -LJ -WY -WY -WY -WY -WY -"} -(26,1,1) = {" -WY -WY -WY -WY -WY -Wa -Wa -sv -sv -Wa -sv -Wa -Wa -sv -yd -kv -ma -qa -db -YB -WQ -pa -tz -Zi -Xy -KE -Zp -gv -hw -lU -RU -pJ -wC -WU -Ve -MS -Sj -AN -uC -YZ -YZ -iq -SL -KV -aV -zm -UX -wa -cK -CI -Ck -Iw -zo -zo -zo -LJ -LJ -LJ -Qn -UJ -IL -LJ -gX -Mr -WB -LJ -WY -WY -WY -WY -WY -"} -(27,1,1) = {" -WY -WY -WY -WY -WY -Wa -sv -sv -Wa -Wa -sv -Wa -Wa -Wa -yd -cN -ma -Yh -db -Te -Zi -bs -Zi -bj -Xy -eE -HF -HF -HF -kJ -FU -FN -Xy -AN -Qs -NU -hA -WU -Ki -vR -GV -fm -iq -iq -Iw -xL -MO -Jj -BS -CV -ZH -EN -zo -zo -zo -LJ -LJ -LJ -Bk -UJ -ye -LJ -gX -UJ -ye -LJ -WY -WY -WY -WY -WY -"} -(28,1,1) = {" -WY -WY -WY -WY -WY -Wa -sv -Wa -sv -Wa -sv -Wa -Wa -sv -yd -Hm -dN -VV -db -Zi -kx -Uz -iU -Kj -Xy -rz -HF -fl -OT -bD -yY -ak -yY -lO -Ge -CA -xE -xr -Ki -MC -ZZ -GV -GV -GV -Iw -zW -CV -zJ -BS -HS -BW -Qx -Qx -Qx -Qx -av -av -av -OR -UJ -uU -av -qi -UJ -uU -av -WY -WY -WY -WY -WY -"} -(29,1,1) = {" -WY -WY -WY -WY -WY -Wa -sv -sv -Wa -sv -sv -sv -sv -Wa -yd -ma -yd -VV -db -Zi -Cf -KC -lj -Zi -Xy -CX -VT -LU -dZ -yY -yY -kO -dT -ul -GM -GM -GM -Jk -ro -MB -Ki -ZZ -XE -aq -Iw -vj -Yb -VE -AM -IO -BW -JN -xP -xP -gn -Mr -UJ -UJ -UJ -UJ -UJ -UJ -UJ -UJ -Mr -OS -WY -WY -WY -WY -WY -"} -(30,1,1) = {" -WY -WY -WY -WY -WY -Wa -Wa -sv -Wa -sv -Wa -sv -sv -Wa -yd -yd -WE -VV -db -DO -wx -vQ -YB -Zi -Xy -rV -nJ -pt -yY -yY -qo -bi -Li -Hn -di -TP -xU -xU -xU -AT -IE -ZZ -ZZ -Iw -Iw -Iw -Iw -Iw -ge -HS -TL -Qx -Qx -Qx -Qx -Gy -Gy -Gy -Hb -Mr -Al -Gy -Pl -UJ -fw -Gy -WY -WY -WY -WY -WY -"} -(31,1,1) = {" -WY -WY -RM -WY -WY -Wa -sv -Wa -Wa -sv -Wa -Wa -Wa -Wa -kf -WE -WE -Pc -db -fh -Ua -pa -na -fh -Xy -TV -yF -yY -yY -NM -oC -yj -uv -uv -uv -uv -uv -uv -ly -IX -tP -au -ci -dy -Fm -lA -hZ -Iw -aX -HS -my -Qx -zo -zo -zo -LJ -LJ -LJ -Ft -UJ -IL -LJ -gX -Mr -co -LJ -WY -WY -WY -WY -WY -"} -(32,1,1) = {" -WY -WY -WY -WY -WY -Wa -Wa -sv -Wa -sv -Wa -sv -Wa -sv -kf -Zt -ma -pC -db -ty -YB -Pk -Zi -Eh -Xy -JF -lt -Rr -VH -jz -PZ -uv -uv -hm -Vk -uv -Vj -AK -ly -ly -Sv -qv -IE -GR -vU -ps -eD -Iw -iM -pH -FX -Qx -zo -zo -zo -LJ -LJ -LJ -Qn -UJ -IL -LJ -Yc -Mr -ye -LJ -WY -WY -WY -WY -WY -"} -(33,1,1) = {" -WY -WY -WY -WY -WY -Wa -sv -Wa -Wa -sv -sv -Wa -Wa -Wa -kf -Lj -BD -kC -db -Zi -Vl -jM -GU -TS -Xy -wC -rh -yY -DS -dX -Qp -Uv -lS -sS -Cr -Uv -zz -Vj -Vj -ly -cT -Xq -dG -bz -aV -lK -Ha -aV -pf -VE -RX -Iw -zo -zo -zo -LJ -LJ -LJ -wV -UJ -ye -LJ -Qn -Mr -ye -LJ -WY -WY -WY -WY -WY -"} -(34,1,1) = {" -WY -WY -WY -WY -WY -Wa -sv -Wa -sv -sv -Wa -Wa -sv -Wa -kf -Cq -GX -Cp -db -db -db -db -db -db -yd -kf -kf -NM -jz -rw -Uv -Uv -LA -Rd -Jp -Uv -xF -zz -Kt -Uv -uv -ww -IJ -MB -aV -Iw -aV -aV -Iw -Au -Iw -Iw -ZN -of -of -LJ -LJ -LJ -Qn -UJ -co -LJ -Qn -Mr -If -LJ -WY -WY -WY -WY -WY -"} -(35,1,1) = {" -WY -WY -WY -WY -WY -Wa -Wa -sv -sv -sv -Wa -sv -sv -Wa -kf -jN -WE -Mb -XJ -WE -ma -sM -EZ -eG -Eu -WE -BI -DS -nQ -RW -Fe -sS -Rd -ux -pv -Uv -RL -xF -Vj -xF -mC -Sv -WL -PZ -lx -LN -LN -ct -mu -Lk -xS -LN -jv -Wp -of -of -LJ -LJ -aF -Gy -Ho -LJ -At -Mr -ye -LJ -WY -WY -WY -WY -WY -"} -(36,1,1) = {" -WY -WY -WY -WY -WY -Wa -Wa -Wa -Wa -sv -sv -Wa -Wa -sv -kf -sI -yd -Mb -Tl -WE -WE -ma -ma -ma -WE -WE -uH -qb -SW -Qo -uv -fp -Cr -uD -dq -hr -Vj -xF -cp -mL -Uv -XI -Bt -Vz -ZM -Ue -xS -tI -WK -Lk -LN -LN -Eq -Ir -yv -of -of -LJ -LJ -LJ -LJ -LJ -aF -Gy -Ho -LJ -WY -WY -WY -WY -WY -"} -(37,1,1) = {" -WY -WY -WY -WY -RM -Wa -sv -sv -sv -sv -sv -Wa -Wa -Wa -yd -WE -KW -Mb -Nj -bl -bl -kG -Kv -kG -Nr -Nr -dh -JB -nQ -PZ -Fe -Cr -sS -sm -lT -uv -ys -zz -xF -Vj -ZX -PO -yq -DA -JW -Pz -Pz -pM -Pz -Pz -fP -fP -sE -sE -RC -Jx -of -zo -zo -zo -zo -zo -zo -zo -zo -zo -WY -WY -WY -WY -WY -"} -(38,1,1) = {" -WY -WY -WY -WY -WY -Wa -Wa -Wa -Wa -sv -sv -Wa -sv -Wa -yd -VO -Uh -tp -yd -kf -kf -kf -Gx -kf -kf -kf -kf -GW -KK -PZ -uv -uv -Jl -Rd -FB -Uv -xF -xF -yf -Uv -Uv -YP -qL -KA -hj -pB -pB -hj -hj -Ut -ZN -OM -OM -Sq -Gk -OM -OM -YK -YK -YK -zo -zo -zo -zo -zo -zo -WY -WY -WY -WY -WY -"} -(39,1,1) = {" -WY -WY -WY -WY -WY -Wa -Wa -sv -Wa -sv -Wa -sv -sv -sv -yd -ma -WE -HG -kf -nZ -jZ -jZ -bt -jZ -SX -ug -kf -Ki -PO -Jk -BV -Uv -tT -Cr -sS -Uv -zz -Vj -Vj -ly -xc -oN -qL -KA -OB -Gd -kI -oq -hj -kk -oL -OM -yy -EY -wY -DZ -zL -pw -We -YK -YK -YK -zo -zo -zo -zo -WY -WY -WY -WY -WY -"} -(40,1,1) = {" -WY -WY -WY -WY -WY -Wa -sv -sv -Wa -Wa -sv -sv -Wa -Wa -yd -ma -Lj -af -kf -Se -Fl -mt -Cm -by -Nz -kU -Se -Ki -TH -LG -sn -uv -Uv -To -rk -uv -Vj -QF -ly -ly -Sv -ID -ZC -WO -ck -ck -ck -pd -pB -oL -oL -OM -Ox -fL -dw -jx -sA -tZ -Ie -gk -ke -YK -zo -zo -zo -zo -WY -WY -WY -WY -WY -"} -(41,1,1) = {" -WY -WY -WY -WY -WY -Wa -sv -Wa -Wa -sv -sv -Wa -sv -Wa -yd -Vd -ma -Bw -bL -cV -cV -cV -cV -cV -cV -cV -bL -ZZ -Fb -GW -Ci -MB -Uv -Uv -uv -uv -uv -uv -ly -GV -oN -qL -KA -KA -sl -sl -mO -pd -pB -mr -am -OM -CW -Kn -Yt -hk -sA -Yt -yo -WD -cr -YK -YK -zo -zo -zo -WY -WY -WY -WY -WY -"} -(42,1,1) = {" -WY -WY -WY -WY -WY -Wa -Wa -sv -sv -Wa -Wa -sv -Wa -Wa -yd -ma -ma -HG -bL -GF -Ls -wc -KJ -fI -Bp -vN -Zr -ZZ -Ki -tH -GW -Ci -ff -LL -Mp -CG -ro -br -GV -RS -to -qL -KA -sl -sl -Vg -mO -SZ -hj -OG -Xr -OM -vo -EY -sA -OC -Yt -Yt -sA -uN -oS -Kc -YK -zo -zo -zo -WY -WY -WY -WY -WY -"} -(43,1,1) = {" -WY -WY -WY -WY -WY -Wa -Wa -sv -Wa -Wa -sv -sv -Wa -sv -yd -ma -KQ -HG -cV -EV -IW -HX -uh -QO -zZ -Nq -ah -Ki -ai -tH -tH -ik -ul -eg -OP -GM -ID -xU -xU -ul -xU -ZC -tk -IU -WM -sl -iy -FS -hj -YT -YT -OM -vG -EY -Ch -Ch -Lh -Yy -kW -Ch -tn -FR -YK -YK -zo -zo -WY -WY -WY -WY -WY -"} -(44,1,1) = {" -WY -WY -WY -WY -WY -Wa -sv -sv -Wa -sv -Wa -Wa -Wa -Wa -kf -LH -WE -GL -iA -xi -tJ -tJ -Ae -zD -DH -yS -nu -Ki -nQ -Jq -Ki -jP -ZZ -IQ -FH -Yr -SI -gJ -gJ -gJ -Px -lR -gJ -gJ -hj -po -iy -KZ -hj -Rp -Dk -GJ -kq -mK -Qw -Yt -Yt -mK -gW -PE -Tk -oS -hL -YK -zo -zo -WY -WY -WY -WY -WY -"} -(45,1,1) = {" -WY -WY -WY -WY -WY -Wa -sv -sv -Wa -Wa -sv -Wa -sv -Wa -kf -VO -Kp -Yh -Lr -gd -ga -QO -gd -jy -FV -IH -ah -Ki -Kl -RK -Wn -GM -ZZ -ZZ -iT -US -nb -gJ -XT -KT -KO -XG -XT -GS -hj -nc -iy -Ju -pB -rZ -nL -GJ -ut -Yt -VK -ry -Yt -EE -SV -VK -TX -an -JX -YK -zo -zo -WY -WY -WY -WY -WY -"} -(46,1,1) = {" -WY -WY -WY -WY -WY -Wa -sv -sv -sv -sv -Wa -Wa -sv -Wa -kf -GX -GX -NL -cV -EV -Mt -yL -QO -QO -Ht -aS -QO -Ki -vF -nQ -EA -cA -Jq -Ki -DN -LS -Hg -gJ -XT -Gs -yt -sX -xR -XT -ft -sl -td -Ju -pB -YT -tC -QC -QC -QC -QC -Km -Km -Km -ZG -ZG -ZG -ZG -ZG -ZG -zo -zo -WY -WY -WY -WY -WY -"} -(47,1,1) = {" -WY -WY -WY -RM -WY -Wa -sv -sv -Wa -sv -Wa -Wa -sv -Wa -kf -WE -Lj -SD -cV -ku -EB -hE -rv -vl -JY -bF -ba -Ki -Mz -jA -vd -QP -Jq -Ki -Nv -fU -Hg -Xj -pG -Yk -go -Nt -sX -XG -Tz -sl -FZ -dW -pB -ru -gP -TF -JL -Qy -QB -ng -nF -Sb -Jm -Sb -bc -PR -mG -ZG -zo -zo -WY -WY -WY -WY -WY -"} -(48,1,1) = {" -WY -WY -WY -WY -WY -Wa -Wa -Wa -sv -sv -Wa -Wa -sv -sv -kf -WE -WE -SD -bL -bL -cV -cV -cV -cV -cV -cV -cV -Ki -ZZ -ZZ -AP -AP -AP -AP -JE -XD -Hg -bA -Yk -MQ -gb -iJ -sX -Rh -hj -Bn -hj -hj -hj -vm -jV -Wq -JI -uW -bo -ng -MV -Ur -Dv -Dv -Ur -gN -md -cu -zo -zo -WY -WY -WY -WY -WY -"} -(49,1,1) = {" -WY -WY -WY -WY -WY -Wa -Wa -sv -sv -sv -Wa -sv -sv -Wa -kf -WE -KW -VJ -yd -Wa -sv -Wa -Wa -Wa -Wa -Wa -Wa -Wa -zi -HB -dA -eB -Nw -bg -AG -cU -MF -gJ -aZ -Yk -ev -XG -Vm -Gt -hj -uR -uR -hV -hj -Wu -eA -dJ -kD -Ce -xO -Ih -qH -cQ -Uy -PR -rB -ng -oE -ZG -zo -zo -WY -WY -WY -WY -WY -"} -(50,1,1) = {" -WY -WY -WY -WY -WY -Wa -sv -Wa -sv -Wa -sv -sv -Wa -Wa -kf -PF -PF -Ks -kf -Wa -sv -sv -Wa -Wa -sv -Wa -sv -Wa -vC -LY -Xw -Zg -Yu -uS -UU -Es -JR -gJ -Dj -XT -aK -Hj -XT -Yv -hj -JM -uR -hV -hj -fB -hQ -fB -fB -Rx -Lf -Pq -DY -PR -Gm -jD -dP -rK -RE -qh -zo -zo -WY -WY -WY -WY -WY -"} -(51,1,1) = {" -WY -WY -WY -WY -WY -Wa -sv -Wa -sv -sv -sv -Wa -Wa -sv -kf -No -No -No -kf -Wa -Wa -Wa -sv -sv -Wa -Wa -Wa -sv -vC -qQ -Hk -Hf -Ud -uS -iT -US -mT -gJ -gJ -gJ -pz -pz -pz -gJ -hj -hj -hj -pB -pB -Yp -vA -th -fB -LD -Lf -ng -ZV -Io -jD -PR -Io -cE -hu -Lo -zo -zo -WY -WY -WY -WY -WY -"} -(52,1,1) = {" -WY -WY -WY -WY -WY -Wa -sv -Wa -sv -sv -sv -sv -Wa -Wa -sv -Wa -Wa -Wa -sv -Wa -sv -sv -sv -sv -Wa -Wa -Wa -Wa -vC -bY -Fv -nk -aU -uS -Bc -LS -MF -YH -LS -tv -Es -LS -tv -Wi -zp -Ux -ND -Ux -YW -Ux -yN -Vu -fB -mq -dE -ng -ui -jD -PR -jD -wp -cE -jW -Lo -zo -Eb -WY -WY -WY -WY -WY -"} -(53,1,1) = {" -WY -WY -WY -WY -WY -Wa -Wa -sv -Wa -sv -sv -sv -sv -sv -Wa -sv -sv -Wa -sv -sv -Wa -Wa -Wa -Wa -sv -Wa -sv -Wa -vC -xH -Le -nk -pT -SG -BJ -uB -ii -gG -PA -PA -Ps -PA -PA -Es -gG -yD -gG -gG -PA -Ev -qB -Da -QA -Qh -pl -ng -SQ -PR -qO -PR -PR -cE -jW -Lo -zo -zo -WY -WY -WY -WY -WY -"} -(54,1,1) = {" -WY -WY -WY -WY -WY -zo -Wa -Wa -sv -sv -sv -Wa -Wa -Wa -sv -Wa -sv -sv -Wa -Wa -sv -sv -Wa -Wa -sv -sv -sv -Wa -vC -ia -zt -mj -DP -vC -cn -Ux -Ub -CY -qS -MF -py -MF -ka -eK -fT -zM -zM -zM -zM -zM -nn -MY -fB -PS -oy -Km -BF -jD -jD -PR -jD -cE -hu -Lo -zo -zo -WY -WY -WY -WY -WY -"} -(55,1,1) = {" -WY -WY -WY -WY -WY -zo -Wa -Wa -sv -sv -sv -sv -Wa -Wa -Wa -sv -Wa -Wa -sv -sv -sv -sv -sv -Wa -sv -sv -Wa -sv -zi -PT -RN -nk -nT -vC -TW -bb -bb -eI -eI -eI -Kk -eI -eI -eI -Hy -yU -mV -yU -yU -ZU -xz -Hy -Hy -Hy -aj -Km -vZ -NV -PR -PR -NV -ym -KL -Ix -zo -zo -WY -WY -WY -RM -WY -"} -(56,1,1) = {" -WY -RM -WY -WY -WY -zo -zo -Wa -Wa -Wa -sv -sv -Wa -sv -Wa -Wa -sv -sv -sv -Wa -Wa -Wa -sv -sv -sv -Wa -sv -sv -zi -Fv -zt -ED -ir -ls -lW -EC -zi -Oj -tY -Jv -tc -TK -Im -CS -Hy -in -zy -Fd -zy -wZ -le -hl -Sk -BU -rD -Km -vE -iZ -PR -jD -Os -aP -aP -ZG -zo -zo -WY -WY -RM -WY -WY -"} -(57,1,1) = {" -WY -WY -WY -WY -WY -zo -zo -Wa -sv -Wa -sv -sv -sv -Wa -Wa -Wa -Wa -sv -sv -sv -sv -sv -sv -Wa -Wa -Wa -Wa -sv -zi -NX -RN -nk -Fv -gD -JQ -NN -vC -Vx -Ji -Cy -El -tM -dv -Ij -Hy -Rc -Vn -EU -aT -Rq -aT -ne -JV -Nl -sq -Km -Gb -Ur -Dv -Dv -Ur -PR -Tb -cu -zo -zo -WY -WY -WY -WY -WY -"} -(58,1,1) = {" -WY -WY -WY -WY -WY -WY -zo -Wa -Wa -Wa -Wa -sv -Wa -sv -Wa -Wa -Wa -sv -sv -Wa -sv -Wa -sv -Wa -sv -Wa -Wa -Wa -vC -Fk -Oa -LZ -cD -zi -zi -vC -vC -Jv -Jv -Jv -YC -TK -TK -Jv -aj -Sa -Fq -UK -fi -os -LQ -Xz -Xz -dR -eM -ng -Ts -dk -uM -iC -gN -PR -jU -ZG -zo -zo -WY -WY -WY -WY -WY -"} -(59,1,1) = {" -WY -WY -WY -WY -WY -WY -zo -zo -Wa -Wa -sv -sv -sv -Wa -sv -Wa -sv -sv -Wa -sv -Wa -Wa -sv -sv -sv -Wa -Wa -sv -vC -ph -Fv -nk -RN -gD -kR -kX -vC -xq -ov -ve -sw -lD -yA -ZY -aj -BU -zh -BU -jo -TQ -BU -Bo -Vy -BU -IK -ng -ng -ng -ng -ng -ng -ng -ng -ZG -zo -uF -WY -WY -WY -WY -WY -"} -(60,1,1) = {" -WY -WY -WY -WY -WY -WY -uo -zo -Wa -Wa -Wa -sv -sv -sv -Wa -Wa -sv -sv -Wa -Wa -sv -sv -Wa -Wa -Wa -Wa -Wa -sv -vC -nW -Nx -Wh -CE -hY -IF -cY -vC -sD -JO -Jv -pX -Jv -Pa -Hi -aj -zf -zf -KB -CL -zf -aj -aj -aj -zf -zf -Hy -Wa -Wa -sv -sv -Wa -Wa -Wa -zo -uF -FE -WY -WY -WY -WY -WY -"} -(61,1,1) = {" -WY -WY -WY -WY -WY -WY -FE -uF -zo -Wa -Wa -Wa -Wa -sv -sv -Wa -sv -sv -Wa -Wa -Wa -Wa -sv -Wa -sv -Wa -Wa -sv -vC -vC -vC -vC -zi -zi -zi -vC -vC -Sw -Sw -Sw -Sw -Sw -Sw -Sw -zf -Ng -Wv -BU -Xz -YD -Jw -Bq -Wc -Wc -bH -sv -sv -sv -Wa -Wa -Wa -Wa -zo -zo -uF -WY -WY -WY -WY -WY -WY -"} -(62,1,1) = {" -WY -WY -WY -WY -ZJ -WY -FE -zo -zo -zo -Wa -Aq -sv -sv -sv -Wa -sv -sv -sv -sv -Wa -Wa -Wa -sv -sv -Wa -Wa -Wa -sv -Wa -sv -sv -sv -sv -Wa -sv -sv -Wa -sv -sv -Wa -Wa -XZ -Wa -bH -Lp -Pp -Zl -qF -Xz -iu -Cs -qr -HH -ip -zo -sv -Wa -sv -Wa -Wa -zo -zo -uF -FE -WY -WY -WY -WY -WY -WY -"} -(63,1,1) = {" -WY -WY -WY -jn -Wt -WY -FE -WY -uF -zo -zo -Aq -eW -sv -sv -Aq -sv -Wa -sv -Wa -sv -sv -sv -sv -Wa -Wa -Wa -Wa -sv -sv -sv -Wa -Wa -Wa -sv -Wa -Wa -sv -sv -Wa -Wa -Wa -XZ -Wa -bH -lZ -kh -tV -zd -ud -Xn -bH -Ba -ot -bH -zo -sv -Wa -Wa -Wa -zo -zo -uF -FE -WY -WY -WY -WY -WY -WY -WY -"} -(64,1,1) = {" -WY -WY -WY -jn -jn -FE -FE -qD -FE -uF -zo -Aq -Hq -Hq -UM -bS -Wa -Wa -sv -Wa -sv -sv -Wa -Wa -Wa -Wa -sv -sv -Wa -Wa -sv -sv -sv -sv -sv -sv -sv -sv -Wa -sv -sv -Wa -Wa -XZ -bH -KG -bH -gA -gA -bH -KG -bH -bH -bH -bH -zo -sv -sv -Wa -zo -zo -uF -FE -WY -WY -WY -WY -WY -WY -WY -WY -"} -(65,1,1) = {" -WY -WY -Wt -jn -jn -Wt -FE -WY -WY -WY -WY -Aq -ds -MW -BB -Aq -sv -sv -Wa -sv -Wa -Wa -Wa -sv -sv -Wa -sv -Wa -Wa -sv -Wa -Wa -Wa -Wa -sv -Wa -Wa -Wa -Wa -Wa -Wa -zo -zo -zo -zo -zo -zo -zo -dr -zo -zo -zo -zo -zo -zo -zo -Wa -zo -zo -uF -uF -FE -WY -WY -WY -WY -WY -WY -WY -WY -WY -"} -(66,1,1) = {" -WY -WY -jn -jn -Wt -jn -FE -FE -FE -FE -FE -Aq -Aq -Si -Aq -Aq -zo -Wa -sv -Wa -sv -sv -sv -sv -sv -Wa -Wa -Wa -Wa -sv -Wa -sv -Wa -Wa -sv -Wa -Wa -Wa -sv -Wa -zo -zo -zo -zo -zo -zo -zo -zo -zo -zo -zo -zo -zo -zo -zo -zo -zo -zo -uF -FE -WY -WY -WY -WY -WY -WY -WY -RM -WY -WY -WY -"} -(67,1,1) = {" -WY -ZJ -Wt -jn -jn -jn -WY -WY -WY -WY -WY -WY -al -al -al -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -"} -(68,1,1) = {" -WY -WY -WY -Wt -jn -Wt -ZJ -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -RM -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -"} -(69,1,1) = {" -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -RM -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -"} -(70,1,1) = {" -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -RM -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -"} -(71,1,1) = {" -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -"} diff --git a/_maps/RandomRuins/SpaceRuins/nova/port_tarkon/defcon3.dmm b/_maps/RandomRuins/SpaceRuins/nova/port_tarkon/defcon3.dmm deleted file mode 100644 index 9b88f9eb941..00000000000 --- a/_maps/RandomRuins/SpaceRuins/nova/port_tarkon/defcon3.dmm +++ /dev/null @@ -1,13902 +0,0 @@ -//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE -"ad" = ( -/obj/machinery/atmospherics/components/unary/portables_connector/visible{ - dir = 8 - }, -/obj/effect/decal/cleanable/dirt, -/obj/effect/turf_decal/tile/red/fourcorners{ - color = "#DE3A3A" - }, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/atmos) -"ag" = ( -/obj/structure/mirror/directional/west, -/obj/structure/sink/directional/east, -/turf/open/floor/iron/white, -/area/ruin/space/has_grav/port_tarkon/centerhall) -"ah" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/turf_decal/tile/blue/half, -/obj/effect/decal/cleanable/blood/drip, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/trauma) -"ai" = ( -/obj/effect/decal/cleanable/dirt, -/obj/machinery/cryopod{ - dir = 4 - }, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/centerhall) -"ak" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/decal/cleanable/dirt, -/obj/machinery/door/firedoor/solid, -/obj/machinery/door/airlock/engineering/glass{ - name = "P-T Tool Storage" - }, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/toolstorage) -"am" = ( -/obj/effect/decal/cleanable/dirt, -/obj/structure/mop_bucket, -/obj/item/mop, -/obj/item/reagent_containers/cup/bucket, -/obj/item/soap/nanotrasen, -/turf/open/floor/plating, -/area/ruin/space/has_grav/port_tarkon/afthall) -"an" = ( -/obj/effect/decal/cleanable/dirt, -/obj/machinery/firealarm/directional/east, -/obj/effect/turf_decal/tile/blue/half{ - dir = 4 - }, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/port_tarkon/comms) -"aq" = ( -/obj/structure/toilet{ - dir = 8 - }, -/obj/structure/window/reinforced/tinted/spawner/directional/north, -/obj/machinery/door/window/left/directional/west{ - opacity = 1 - }, -/turf/open/floor/iron/white, -/area/ruin/space/has_grav/port_tarkon/centerhall) -"ar" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/turf_decal/tile/brown/half, -/turf/open/floor/iron/airless, -/area/ruin/space/has_grav/port_tarkon/storage) -"as" = ( -/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, -/obj/machinery/light/dim/directional/south, -/obj/machinery/light_switch/directional/south, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/observ) -"at" = ( -/obj/effect/decal/cleanable/dirt, -/obj/structure/chair/sofa/corp/corner{ - dir = 8 - }, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/observ) -"av" = ( -/obj/effect/turf_decal/stripes/asteroid/line{ - dir = 4 - }, -/turf/open/misc/asteroid/airless, -/area/solars/tarkon) -"aw" = ( -/obj/effect/mob_spawn/ghost_role/human/tarkon/med{ - dir = 8 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon) -"aF" = ( -/obj/effect/turf_decal/stripes/asteroid/corner{ - dir = 8 - }, -/turf/open/misc/asteroid/airless, -/area/solars/tarkon) -"aI" = ( -/obj/effect/decal/cleanable/dirt, -/obj/structure/alien/weeds/node, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/forehall) -"aP" = ( -/obj/effect/spawner/structure/window/reinforced, -/turf/open/floor/plating, -/area/ruin/space/has_grav/port_tarkon/storage) -"aS" = ( -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ - dir = 8 - }, -/obj/structure/table/rolling, -/obj/item/surgery_tray/full, -/obj/effect/decal/cleanable/dirt, -/obj/item/clothing/gloves/latex{ - pixel_y = 10 - }, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/trauma) -"aU" = ( -/obj/structure/table/reinforced, -/obj/effect/decal/cleanable/dirt, -/obj/item/card/id/away/tarkon{ - pixel_y = -6 - }, -/obj/item/card/id/away/tarkon, -/obj/item/card/id/away/tarkon{ - pixel_y = 6 - }, -/obj/item/folder/red, -/obj/effect/turf_decal/tile/red/half, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/secoff) -"aV" = ( -/turf/open/floor/iron/airless, -/area/ruin/space/has_grav/port_tarkon/porthall) -"aX" = ( -/obj/structure/cable, -/obj/effect/decal/cleanable/dirt, -/obj/machinery/airalarm/directional/north, -/obj/effect/mapping_helpers/airalarm/all_access, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/effect/turf_decal/tile/yellow/half{ - dir = 1 - }, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/power1) -"aY" = ( -/obj/effect/decal/cleanable/dirt, -/obj/structure/table, -/obj/item/stack/sheet/mineral/silver{ - amount = 25 - }, -/obj/machinery/airalarm/directional/east, -/obj/effect/mapping_helpers/airalarm/all_access, -/obj/effect/turf_decal/tile/purple/anticorner, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/port_tarkon/developement) -"aZ" = ( -/obj/machinery/biogenerator, -/obj/effect/decal/cleanable/dirt, -/obj/machinery/light/small/directional/east, -/turf/open/floor/grass, -/area/ruin/space/has_grav/port_tarkon/garden) -"ba" = ( -/obj/structure/table/optable, -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/blood, -/obj/effect/mob_spawn/corpse/human, -/obj/effect/turf_decal/tile/blue/anticorner, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/trauma) -"bg" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/cable, -/obj/effect/decal/cleanable/dirt, -/obj/machinery/door/airlock/security/old, -/obj/effect/mapping_helpers/airlock/access/all/tarkon/general, -/obj/machinery/door/firedoor/solid, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/secoff) -"bi" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/turf_decal/tile/neutral, -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/centerhall) -"bj" = ( -/obj/structure/alien/weeds/node, -/obj/machinery/light/broken/directional/south, -/obj/effect/turf_decal/tile/purple/half, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/port_tarkon/developement) -"bm" = ( -/obj/effect/decal/cleanable/dirt, -/obj/machinery/light_switch/directional/south, -/obj/effect/turf_decal/tile/purple/half, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/port_tarkon/developement) -"bn" = ( -/obj/effect/turf_decal/stripes{ - dir = 1 - }, -/obj/effect/decal/cleanable/dirt, -/obj/machinery/button/door/incinerator_vent_atmos_aux{ - pixel_x = -8; - pixel_y = -24; - req_one_access = list("tarkon") - }, -/obj/machinery/button/door/incinerator_vent_atmos_main{ - pixel_x = -8; - pixel_y = -36; - req_one_access = list("tarkon") - }, -/obj/machinery/atmospherics/components/binary/pump/off/general{ - dir = 8 - }, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/port_tarkon/atmos) -"bq" = ( -/obj/machinery/door/airlock/titanium/glass, -/turf/open/floor/mineral/titanium, -/area/ruin/space/has_grav) -"br" = ( -/obj/effect/decal/cleanable/dirt, -/obj/machinery/firealarm/directional/west, -/obj/effect/turf_decal/tile/neutral/half{ - dir = 8 - }, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/centerhall) -"bt" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/mapping_helpers/burnt_floor, -/turf/open/floor/plating, -/area/ruin/space/has_grav/port_tarkon/forehall) -"bx" = ( -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/airless, -/area/ruin/space/has_grav/port_tarkon/storage) -"by" = ( -/obj/effect/decal/cleanable/dirt, -/obj/item/solar_assembly, -/obj/item/solar_assembly, -/obj/item/solar_assembly, -/obj/item/solar_assembly, -/obj/item/solar_assembly, -/obj/item/solar_assembly, -/obj/structure/closet/crate/engineering/electrical, -/obj/item/solar_assembly, -/obj/item/solar_assembly, -/obj/item/solar_assembly, -/obj/item/solar_assembly, -/obj/item/solar_assembly, -/obj/item/solar_assembly, -/obj/effect/decal/cleanable/dirt, -/obj/item/solar_assembly, -/obj/item/solar_assembly, -/obj/item/solar_assembly, -/obj/item/solar_assembly, -/obj/item/solar_assembly, -/turf/open/floor/plating, -/area/ruin/space/has_grav/port_tarkon/forehall) -"bz" = ( -/obj/structure/sign/warning/radiation, -/turf/closed/wall, -/area/ruin/space/has_grav/port_tarkon/power1) -"bA" = ( -/obj/machinery/door/firedoor/solid, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/garden) -"bD" = ( -/obj/effect/decal/cleanable/dirt, -/obj/structure/table/reinforced, -/obj/item/stack/sheet/glass/fifty, -/obj/effect/turf_decal/tile/yellow/anticorner, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/toolstorage) -"bF" = ( -/obj/machinery/iv_drip, -/obj/effect/decal/cleanable/dirt, -/obj/effect/turf_decal/tile/blue/half{ - dir = 4 - }, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/trauma) -"bH" = ( -/turf/closed/wall/r_wall/rust, -/area/ruin/space/has_grav/port_tarkon/mining) -"bK" = ( -/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/ruin/space/has_grav/port_tarkon/porthall) -"bO" = ( -/obj/structure/sign/warning/electric_shock, -/turf/closed/wall/r_wall, -/area/ruin/space/has_grav/port_tarkon/atmos) -"bS" = ( -/obj/structure/cable, -/obj/effect/decal/cleanable/dirt, -/obj/machinery/power/terminal{ - dir = 4 - }, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/port_tarkon/atmos) -"bT" = ( -/obj/effect/decal/cleanable/glass, -/turf/open/misc/asteroid/airless, -/area/ruin/space/has_grav) -"bV" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/decal/cleanable/dirt, -/obj/effect/turf_decal/tile/neutral/half{ - dir = 1 - }, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/centerhall) -"bX" = ( -/obj/effect/decal/cleanable/dirt, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/observ) -"bY" = ( -/obj/effect/decal/cleanable/dirt, -/obj/structure/rack/gunrack, -/obj/machinery/light/directional/north, -/obj/effect/turf_decal/tile/red/half{ - dir = 1 - }, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/secoff) -"cc" = ( -/obj/effect/decal/cleanable/dirt, -/obj/structure/frame/machine, -/obj/item/circuitboard/machine/protolathe/offstation, -/obj/effect/turf_decal/tile/purple/half{ - dir = 1 - }, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/port_tarkon/developement) -"cd" = ( -/obj/structure/sign/warning/fire, -/turf/closed/wall/r_wall, -/area/ruin/space/has_grav/port_tarkon/atmos) -"ce" = ( -/obj/effect/decal/cleanable/dirt, -/turf/open/misc/asteroid/airless, -/area/ruin/space/has_grav) -"cn" = ( -/obj/effect/decal/cleanable/dirt, -/obj/machinery/firealarm/directional/east, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/starboardhall) -"co" = ( -/obj/item/solar_assembly, -/obj/effect/turf_decal/stripes/asteroid/line{ - dir = 1 - }, -/turf/open/misc/asteroid/airless, -/area/solars/tarkon) -"cq" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/turf_decal/tile/brown{ - dir = 4 - }, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/mining) -"cr" = ( -/obj/effect/decal/cleanable/dirt, -/obj/structure/table, -/obj/item/paper/crumpled, -/obj/effect/turf_decal/tile/blue/half, -/obj/item/folder, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/port_tarkon/comms) -"cs" = ( -/obj/structure/alien/weeds/node, -/obj/item/stack/ore/uranium, -/turf/open/misc/asteroid, -/area/ruin/space/has_grav) -"ct" = ( -/obj/effect/decal/cleanable/dirt, -/obj/machinery/airalarm/directional/west, -/obj/effect/mapping_helpers/airalarm/all_access, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/afthall) -"cu" = ( -/obj/structure/sign/warning/docking, -/turf/closed/wall/r_wall, -/area/ruin/space/has_grav/port_tarkon/storage) -"cv" = ( -/obj/machinery/atmospherics/components/binary/pump/off/general{ - dir = 8 - }, -/obj/effect/decal/cleanable/dirt, -/obj/effect/turf_decal/tile/dark/fourcorners, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/atmos) -"cz" = ( -/obj/effect/decal/cleanable/dirt, -/mob/living/simple_animal/hostile/alien/drone, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/forehall) -"cA" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/dirt, -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/layer_manifold/supply{ - dir = 4 - }, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/centerhall) -"cD" = ( -/obj/effect/decal/cleanable/dirt, -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ - dir = 1 - }, -/obj/effect/turf_decal/tile/red/half, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/secoff) -"cE" = ( -/obj/effect/decal/cleanable/dirt, -/obj/machinery/door/poddoor/shutters/window/preopen{ - id = "tarkoninner"; - name = "Interior Bay Shutter" - }, -/obj/effect/turf_decal/trimline/yellow/filled/warning{ - dir = 1 - }, -/turf/open/floor/iron/airless, -/area/ruin/space/has_grav/port_tarkon/storage) -"cH" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/blood/gibs/old, -/obj/structure/alien/resin/wall, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/forehall) -"cK" = ( -/obj/structure/cable, -/obj/effect/decal/cleanable/dirt, -/obj/effect/turf_decal/delivery/white, -/obj/effect/turf_decal/tile/yellow/half{ - dir = 8 - }, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/power1) -"cQ" = ( -/obj/effect/decal/cleanable/dirt, -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ - dir = 1 - }, -/turf/open/floor/iron/airless, -/area/ruin/space/has_grav/port_tarkon/storage) -"cT" = ( -/obj/machinery/light/warm/directional/east, -/obj/effect/decal/cleanable/dirt, -/obj/effect/turf_decal/tile/neutral/anticorner{ - dir = 4 - }, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/centerhall) -"cU" = ( -/obj/effect/decal/cleanable/dirt, -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/starboardhall) -"cV" = ( -/turf/closed/wall, -/area/ruin/space/has_grav/port_tarkon/trauma) -"cW" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/turf_decal/tile/purple/half, -/obj/structure/closet/crate/radiation, -/obj/item/stack/sheet/mineral/uranium/five, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/port_tarkon/developement) -"cX" = ( -/obj/effect/decal/cleanable/dirt, -/obj/machinery/door/firedoor/solid/closed, -/obj/machinery/door/airlock/public/glass{ - name = "Port Primary Hallway" - }, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/porthall) -"cY" = ( -/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, -/obj/structure/alien/weeds/node, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/forehall) -"db" = ( -/turf/closed/wall/r_wall, -/area/ruin/space/has_grav/port_tarkon/developement) -"df" = ( -/obj/machinery/light_switch/directional/west, -/obj/effect/decal/cleanable/dirt, -/obj/machinery/shower/directional/east, -/obj/effect/turf_decal/stripes{ - dir = 6 - }, -/obj/machinery/button/door{ - id = "ptatmos"; - name = "shutter controls"; - pixel_x = -39; - pixel_y = -10 - }, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/port_tarkon/atmos) -"dg" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/spawner/structure/window/reinforced/no_firelock, -/obj/machinery/door/firedoor/solid/closed, -/turf/open/floor/plating, -/area/ruin/space/has_grav/port_tarkon/porthall) -"dh" = ( -/obj/machinery/door/airlock/public/glass{ - name = "Fore Primary Hallway" - }, -/obj/effect/decal/cleanable/dirt, -/obj/structure/barricade/wooden/crude, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/door/firedoor/solid/closed, -/obj/structure/cable, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/forehall) -"di" = ( -/obj/machinery/airalarm/directional/east, -/obj/effect/mapping_helpers/airalarm/all_access, -/obj/effect/decal/cleanable/dirt, -/obj/effect/turf_decal/tile/neutral/half{ - dir = 4 - }, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/centerhall) -"dk" = ( -/obj/structure/closet/crate, -/obj/effect/decal/cleanable/dirt, -/obj/item/reagent_containers/spray/cleaner, -/obj/item/reagent_containers/spray/cleaner, -/obj/item/reagent_containers/spray/cleaner, -/obj/item/grenade/chem_grenade/cleaner, -/obj/item/grenade/chem_grenade/cleaner, -/obj/item/grenade/chem_grenade/cleaner, -/obj/item/grenade/chem_grenade/cleaner, -/obj/item/grenade/chem_grenade/cleaner, -/obj/item/grenade/chem_grenade/cleaner, -/obj/item/grenade/chem_grenade/cleaner, -/obj/item/grenade/chem_grenade/cleaner, -/obj/item/holosign_creator/janibarrier, -/obj/effect/turf_decal/tile/brown/half{ - dir = 4 - }, -/turf/open/floor/iron/airless, -/area/ruin/space/has_grav/port_tarkon/storage) -"dl" = ( -/obj/machinery/airalarm/directional/north, -/obj/effect/mapping_helpers/airalarm/all_access, -/obj/effect/decal/cleanable/dirt, -/obj/machinery/light/dim/directional/north, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/atmos) -"dq" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/blood/tracks, -/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/ruin/space/has_grav/port_tarkon) -"dr" = ( -/obj/docking_port/stationary{ - dir = 4; - dwidth = 6; - height = 16; - name = "Port Tarkon"; - roundstart_template = /datum/map_template/shuttle/ruin/tarkon_driver/defcon3; - shuttle_id = "port_tarkon"; - width = 14 - }, -/turf/open/misc/asteroid/airless, -/area/ruin/space/has_grav) -"dt" = ( -/obj/effect/decal/cleanable/dirt, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/structure/chair/sofa/corp{ - dir = 8 - }, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/observ) -"dv" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/decal/cleanable/dirt, -/obj/machinery/airalarm/directional/east, -/obj/effect/mapping_helpers/airalarm/all_access, -/turf/open/floor/carpet/cyan, -/area/ruin/space/has_grav/port_tarkon/dorms) -"dw" = ( -/obj/effect/decal/cleanable/dirt, -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ - dir = 1 - }, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/port_tarkon/comms) -"dy" = ( -/obj/structure/sign/warning/electric_shock, -/turf/closed/wall, -/area/ruin/space/has_grav/port_tarkon/power1) -"dA" = ( -/obj/effect/decal/cleanable/dirt, -/obj/structure/table/reinforced, -/obj/effect/turf_decal/tile/red/half{ - dir = 8 - }, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/secoff) -"dB" = ( -/obj/structure/girder/displaced, -/turf/open/floor/plating, -/area/ruin/space/has_grav/port_tarkon/forehall) -"dC" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/cable, -/obj/effect/decal/cleanable/dirt, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/atmos) -"dE" = ( -/obj/effect/decal/cleanable/dirt, -/obj/machinery/light/dim/directional/south, -/obj/effect/turf_decal/tile/brown/half, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/cargo) -"dG" = ( -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/centerhall) -"dP" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/generic, -/obj/effect/turf_decal/tile/brown/half, -/turf/open/floor/iron/airless, -/area/ruin/space/has_grav/port_tarkon/storage) -"dR" = ( -/obj/effect/decal/cleanable/dirt, -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/mining) -"dT" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/decal/cleanable/dirt, -/obj/effect/turf_decal/tile/neutral/half{ - dir = 8 - }, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/centerhall) -"dW" = ( -/obj/effect/decal/cleanable/dirt, -/obj/structure/closet/secure_closet/freezer/fridge/open, -/obj/item/reagent_containers/condiment/flour, -/obj/item/reagent_containers/condiment/flour, -/obj/item/reagent_containers/condiment/flour, -/obj/item/reagent_containers/condiment/flour, -/obj/item/reagent_containers/condiment/sugar, -/obj/item/reagent_containers/condiment/sugar, -/turf/open/floor/iron/cafeteria, -/area/ruin/space/has_grav/port_tarkon/kitchen) -"dX" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/decal/cleanable/dirt, -/obj/effect/turf_decal/tile/neutral, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/centerhall) -"dZ" = ( -/obj/effect/decal/cleanable/dirt, -/obj/machinery/autolathe, -/obj/effect/turf_decal/tile/yellow/anticorner, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/toolstorage) -"ed" = ( -/turf/open/misc/asteroid, -/area/ruin/space/has_grav) -"ef" = ( -/obj/machinery/door/airlock/public/glass{ - name = "Crew Storage" - }, -/obj/effect/decal/cleanable/blood/tracks, -/obj/machinery/door/firedoor/solid, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon) -"eg" = ( -/obj/effect/decal/cleanable/dirt, -/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/neutral{ - dir = 4 - }, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/centerhall) -"ek" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/dirt, -/obj/structure/cable, -/obj/effect/decal/cleanable/blood/old, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/forehall) -"eo" = ( -/obj/effect/decal/cleanable/dirt, -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ - dir = 4 - }, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/port_tarkon/developement) -"ep" = ( -/obj/structure/cable, -/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/flippedtable{ - dir = 8 - }, -/obj/effect/turf_decal/tile/neutral/half{ - dir = 8 - }, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/centerhall) -"es" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/turf_decal/tile/neutral/half, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/centerhall) -"eu" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/confetti, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/observ) -"eA" = ( -/obj/effect/decal/cleanable/dirt, -/obj/structure/flippedtable{ - dir = 8 - }, -/obj/effect/turf_decal/tile/neutral/half{ - dir = 8 - }, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/centerhall) -"eB" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/cable, -/obj/effect/decal/cleanable/dirt, -/obj/effect/turf_decal/tile/red/half{ - dir = 8 - }, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/secoff) -"eD" = ( -/obj/machinery/power/terminal{ - dir = 8 - }, -/obj/effect/decal/cleanable/dirt, -/obj/structure/cable, -/turf/open/floor/plating, -/area/ruin/space/has_grav/port_tarkon/power1) -"eE" = ( -/obj/effect/decal/cleanable/dirt, -/obj/structure/table/reinforced, -/obj/item/assembly/signaler, -/obj/effect/turf_decal/tile/yellow/half{ - dir = 1 - }, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/toolstorage) -"eF" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/turf_decal/delivery/white, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/port_tarkon/developement) -"eG" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/xenoblood/xgibs/up, -/obj/machinery/light/broken/directional/west, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/forehall) -"eI" = ( -/turf/closed/wall, -/area/ruin/space/has_grav/port_tarkon/starboardhall) -"eK" = ( -/obj/structure/cable, -/obj/effect/decal/cleanable/dirt, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/airalarm/directional/east, -/obj/effect/mapping_helpers/airalarm/all_access, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/starboardhall) -"eL" = ( -/obj/machinery/door/airlock/public, -/obj/effect/decal/cleanable/dirt, -/obj/machinery/door/firedoor/solid, -/obj/structure/alien/weeds/node, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/observ) -"eM" = ( -/obj/effect/decal/cleanable/dirt, -/obj/structure/closet, -/obj/item/gun/energy/recharge/kinetic_accelerator, -/obj/item/storage/backpack/satchel/explorer, -/obj/item/clothing/shoes/workboots/mining, -/obj/item/t_scanner/adv_mining_scanner/lesser, -/obj/item/storage/bag/ore, -/obj/effect/turf_decal/tile/brown/half, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/mining) -"eQ" = ( -/obj/machinery/computer/atmos_control/tarkon/incinerator{ - dir = 1 - }, -/obj/machinery/airalarm/directional/south, -/obj/effect/mapping_helpers/airalarm/all_access, -/obj/effect/turf_decal/stripes{ - dir = 4 - }, -/obj/structure/cable, -/turf/open/floor/engine, -/area/ruin/space/has_grav/port_tarkon/atmos) -"eY" = ( -/obj/effect/decal/cleanable/dirt, -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, -/obj/effect/decal/cleanable/glass, -/obj/structure/alien/resin/wall, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/forehall) -"eZ" = ( -/obj/machinery/atmospherics/components/unary/vent_scrubber/layer2{ - dir = 8 - }, -/turf/open/floor/engine/vacuum, -/area/ruin/space/has_grav/port_tarkon/atmos) -"fa" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/decal/cleanable/dirt, -/obj/item/stack/rods, -/obj/structure/cable, -/turf/open/floor/iron/airless, -/area/ruin/space/has_grav/port_tarkon/porthall) -"fd" = ( -/obj/machinery/door/airlock/public/glass{ - name = "Starboard Primary Hallway" - }, -/obj/effect/decal/cleanable/dirt, -/obj/machinery/door/firedoor/solid, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/starboardhall) -"ff" = ( -/obj/effect/decal/cleanable/dirt, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/turf_decal/tile/neutral/half{ - dir = 8 - }, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/centerhall) -"fh" = ( -/obj/structure/closet/crate/secure/gear, -/obj/item/microfusion_gun_attachment/rail, -/obj/item/flashlight/seclite, -/turf/open/floor/mineral/titanium, -/area/ruin/space/has_grav) -"fl" = ( -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/toolstorage) -"fp" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/blood/tracks{ - dir = 5 - }, -/obj/machinery/airalarm/directional/north, -/obj/effect/mapping_helpers/airalarm/all_access, -/obj/structure/closet, -/obj/item/clothing/gloves/color/plasmaman/black, -/obj/item/clothing/gloves/color/plasmaman/black, -/obj/item/clothing/gloves/color/plasmaman/black, -/obj/item/clothing/gloves/color/plasmaman/black, -/obj/item/clothing/gloves/color/plasmaman/chief_engineer, -/obj/item/clothing/head/helmet/space/plasmaman, -/obj/item/clothing/head/helmet/space/plasmaman, -/obj/item/clothing/head/helmet/space/plasmaman, -/obj/item/clothing/head/helmet/space/plasmaman, -/obj/item/clothing/head/helmet/space/plasmaman, -/obj/item/clothing/under/plasmaman, -/obj/item/clothing/under/plasmaman, -/obj/item/clothing/under/plasmaman, -/obj/item/clothing/under/plasmaman, -/obj/item/clothing/under/plasmaman, -/obj/item/tank/internals/plasmaman/belt/full, -/obj/item/tank/internals/plasmaman/belt/full, -/obj/item/tank/internals/plasmaman/belt/full, -/obj/item/tank/internals/plasmaman/belt/full, -/obj/item/tank/internals/plasmaman/belt/full, -/obj/item/tank/internals/nitrogen/belt/full, -/obj/item/tank/internals/nitrogen/belt/full, -/obj/item/tank/internals/nitrogen/belt/full, -/obj/item/tank/internals/nitrogen/belt/full, -/obj/item/tank/internals/nitrogen/belt/full, -/obj/item/clothing/mask/breath/vox, -/obj/item/clothing/mask/breath/vox, -/obj/item/clothing/mask/breath/vox, -/obj/item/clothing/mask/breath/vox, -/obj/item/clothing/mask/breath/vox, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon) -"ft" = ( -/obj/structure/table/reinforced, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/kitchen) -"fv" = ( -/obj/machinery/power/apc/auto_name/directional/north, -/obj/effect/mapping_helpers/apc/no_charge, -/obj/effect/mapping_helpers/apc/unlocked, -/obj/structure/cable, -/obj/effect/decal/cleanable/dirt, -/obj/structure/closet/crate/radiation, -/obj/item/stack/sheet/mineral/uranium/five, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/atmos) -"fw" = ( -/obj/effect/turf_decal/stripes/asteroid/line{ - dir = 9 - }, -/turf/open/misc/asteroid/airless, -/area/solars/tarkon) -"fB" = ( -/obj/effect/spawner/structure/window/reinforced, -/turf/open/floor/plating, -/area/ruin/space/has_grav/port_tarkon/cargo) -"fC" = ( -/obj/effect/decal/cleanable/blood/gibs/old, -/obj/effect/decal/cleanable/blood/tracks, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/port_tarkon/developement) -"fG" = ( -/obj/effect/decal/cleanable/dirt, -/obj/structure/cable, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/port_tarkon/developement) -"fI" = ( -/obj/structure/closet/secure_closet/medical1, -/obj/effect/decal/cleanable/dirt, -/obj/effect/turf_decal/tile/blue/half{ - dir = 8 - }, -/obj/item/gun/medbeam/afad, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/trauma) -"fJ" = ( -/obj/effect/decal/cleanable/dirt, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/turf_decal/loading_area, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/port_tarkon/developement) -"fK" = ( -/mob/living/simple_animal/hostile/alien/drone, -/obj/item/stack/ore/uranium, -/turf/open/misc/asteroid, -/area/ruin/space/has_grav) -"fL" = ( -/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/cable, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/port_tarkon/comms) -"fO" = ( -/obj/structure/table/reinforced, -/obj/effect/decal/cleanable/dirt, -/obj/effect/spawner/random/trash/food_packaging, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/centerhall) -"fR" = ( -/obj/machinery/atmospherics/components/unary/vent_pump/siphon/monitored/plasma_output/tarkon{ - dir = 8 - }, -/turf/open/floor/engine/plasma, -/area/ruin/space/has_grav/port_tarkon/atmos) -"fT" = ( -/obj/structure/cable, -/obj/effect/decal/cleanable/dirt, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/light/dim/directional/east, -/obj/effect/turf_decal/delivery/blue, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/starboardhall) -"fU" = ( -/obj/effect/decal/cleanable/dirt, -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/starboardhall) -"fV" = ( -/obj/effect/decal/cleanable/dirt, -/obj/structure/table/rolling, -/obj/item/scalpel, -/obj/item/hemostat, -/obj/item/cautery, -/obj/item/bonesetter, -/obj/item/stack/medical/suture/medicated, -/obj/item/retractor, -/obj/item/clothing/gloves/latex, -/obj/effect/turf_decal/tile/purple/half{ - dir = 8 - }, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/port_tarkon/developement) -"ga" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/trauma) -"gb" = ( -/obj/structure/reagent_dispensers/watertank/high, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/garden) -"gc" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/xenoblood/xsplatter, -/obj/effect/decal/cleanable/ash, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/forehall) -"gd" = ( -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/trauma) -"ge" = ( -/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, -/obj/effect/turf_decal/tile/yellow/half{ - dir = 1 - }, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/power1) -"gk" = ( -/obj/effect/decal/cleanable/dirt, -/obj/structure/chair/office, -/obj/effect/turf_decal/tile/blue/half{ - dir = 8 - }, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/port_tarkon/comms) -"gl" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/decal/cleanable/dirt, -/obj/effect/turf_decal/tile/neutral/half, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/centerhall) -"gn" = ( -/obj/machinery/door/airlock/external/ruin{ - name = "Engineering External Access" - }, -/obj/effect/mapping_helpers/airlock/cyclelink_helper{ - dir = 1 - }, -/obj/structure/cable, -/obj/effect/decal/cleanable/dirt, -/obj/effect/mapping_helpers/airlock/access/all/tarkon/general, -/turf/open/floor/plating, -/area/ruin/space/has_grav/port_tarkon/power1) -"go" = ( -/obj/effect/decal/cleanable/dirt, -/obj/machinery/vending/hydronutrients, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/garden) -"gp" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/spawner/structure/window/reinforced/no_firelock, -/obj/machinery/door/firedoor/solid/closed, -/turf/open/floor/plating, -/area/ruin/space/has_grav/port_tarkon/atmos) -"gs" = ( -/obj/machinery/door/airlock/public/glass/incinerator/tarkon_interior, -/obj/machinery/airlock_controller/incinerator_tarkon{ - pixel_x = 40; - pixel_y = 5 - }, -/obj/effect/mapping_helpers/airlock/locked, -/obj/effect/mapping_helpers/airlock/cyclelink_helper, -/obj/effect/turf_decal/stripes{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/visible/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/dark/visible, -/turf/open/floor/engine/vacuum, -/area/ruin/space/has_grav/port_tarkon/atmos) -"gt" = ( -/obj/item/stack/ore/uranium, -/turf/open/misc/asteroid, -/area/ruin/space/has_grav) -"gu" = ( -/obj/effect/decal/cleanable/dirt, -/obj/structure/cable, -/obj/machinery/power/apc/auto_name/directional/west, -/obj/effect/mapping_helpers/apc/no_charge, -/obj/effect/mapping_helpers/apc/unlocked, -/obj/effect/turf_decal/tile/purple/half{ - dir = 8 - }, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/port_tarkon/developement) -"gv" = ( -/obj/effect/decal/cleanable/dirt, -/obj/structure/table/reinforced, -/obj/machinery/cell_charger, -/obj/item/stock_parts/cell/high/empty, -/obj/effect/turf_decal/tile/yellow/half{ - dir = 8 - }, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/toolstorage) -"gy" = ( -/obj/effect/decal/cleanable/dirt, -/obj/structure/alien/weeds/node, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/mining) -"gA" = ( -/obj/machinery/door/airlock/mining/glass, -/obj/machinery/door/firedoor/heavy/closed, -/obj/effect/turf_decal/sand/plating, -/obj/effect/mapping_helpers/airlock/access/all/tarkon/general, -/turf/open/misc/asteroid, -/area/ruin/space/has_grav/port_tarkon/mining) -"gD" = ( -/obj/effect/spawner/structure/window/reinforced, -/turf/open/floor/plating, -/area/ruin/space/has_grav/port_tarkon/secoff) -"gE" = ( -/obj/effect/decal/cleanable/dirt, -/obj/structure/chair/wood{ - dir = 1 - }, -/obj/machinery/airalarm/directional/east, -/obj/effect/mapping_helpers/airalarm/all_access, -/obj/effect/decal/cleanable/confetti, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/observ) -"gJ" = ( -/obj/effect/spawner/structure/window/reinforced, -/turf/open/floor/plating, -/area/ruin/space/has_grav/port_tarkon/garden) -"gN" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/turf_decal/tile/brown/half{ - dir = 4 - }, -/turf/open/floor/iron/airless, -/area/ruin/space/has_grav/port_tarkon/storage) -"gP" = ( -/obj/effect/decal/cleanable/dirt, -/obj/structure/table/reinforced, -/obj/item/folder/blue, -/obj/item/folder, -/obj/effect/turf_decal/tile/brown/half{ - dir = 8 - }, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/cargo) -"gR" = ( -/obj/effect/decal/cleanable/blood/gibs/up, -/obj/effect/decal/cleanable/blood/tracks{ - dir = 4 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/port_tarkon/developement) -"gS" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/turf_decal/tile/brown/half{ - dir = 4 - }, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/mining) -"gT" = ( -/obj/effect/decal/cleanable/dirt, -/obj/structure/closet/crate/freezer, -/obj/item/pizzabox/mushroom, -/obj/item/pizzabox/meat, -/obj/item/pizzabox/margherita, -/obj/item/pizzabox/mushroom, -/obj/item/pizzabox/meat, -/obj/item/pizzabox/margherita, -/turf/open/floor/iron/airless, -/area/ruin/space/has_grav/port_tarkon/storage) -"gW" = ( -/obj/effect/decal/cleanable/dirt, -/obj/machinery/computer{ - desc = "A computer long since rendered non-functional due to lack of maintenance. Spitting out error messages."; - name = "Broken Computer" - }, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/port_tarkon/comms) -"gX" = ( -/obj/structure/cable, -/obj/effect/turf_decal/stripes/asteroid/line, -/turf/open/misc/asteroid/airless, -/area/solars/tarkon) -"ha" = ( -/obj/structure/bed/nest, -/obj/effect/mob_spawn/corpse/human/damaged, -/obj/effect/mob_spawn/corpse/facehugger, -/turf/open/misc/asteroid, -/area/ruin/space/has_grav) -"hb" = ( -/obj/item/wallframe/firealarm, -/obj/effect/turf_decal/tile/purple/half, -/obj/structure/alien/weeds/node, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/port_tarkon/developement) -"hf" = ( -/obj/effect/decal/cleanable/dirt, -/obj/machinery/power/smes, -/obj/structure/cable, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/port_tarkon/atmos) -"hh" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/glass, -/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/ruin/space/has_grav/port_tarkon/forehall) -"hi" = ( -/obj/machinery/firealarm/directional/north, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/atmos) -"hj" = ( -/turf/closed/wall, -/area/ruin/space/has_grav/port_tarkon/kitchen) -"hl" = ( -/obj/structure/cable, -/obj/effect/decal/cleanable/dirt, -/obj/machinery/light_switch/directional/west, -/obj/effect/turf_decal/tile/brown/half{ - dir = 8 - }, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/mining) -"hm" = ( -/obj/structure/closet, -/obj/effect/decal/cleanable/dirt, -/obj/item/clothing/shoes/workboots/mining, -/obj/item/clothing/shoes/winterboots, -/obj/item/clothing/shoes/jackboots, -/obj/item/clothing/under/rank/cargo/tech/nova/utility, -/obj/item/clothing/under/rank/cargo/tech/nova/gorka, -/obj/item/storage/backpack/duffelbag/explorer, -/obj/item/storage/backpack/explorer, -/obj/item/storage/backpack/satchel/explorer, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon) -"ho" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/turf_decal/tile/purple/anticorner{ - dir = 1 - }, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/port_tarkon/developement) -"hr" = ( -/obj/machinery/door/airlock/public/glass{ - name = "Crew Storage"; - state_open = 1 - }, -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/blood/tracks, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/cable, -/obj/machinery/door/firedoor/solid, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon) -"hu" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/turf_decal/caution/stand_clear, -/turf/open/floor/iron/airless, -/area/ruin/space/has_grav/port_tarkon/storage) -"hw" = ( -/obj/machinery/light/dim/directional/west, -/obj/effect/decal/cleanable/dirt, -/obj/structure/table/reinforced, -/obj/item/clothing/gloves/color/yellow, -/obj/effect/turf_decal/tile/yellow/half{ - dir = 8 - }, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/toolstorage) -"hy" = ( -/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/airless, -/area/ruin/space/has_grav/port_tarkon/porthall) -"hz" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/decal/cleanable/dirt, -/obj/item/stack/rods, -/obj/effect/decal/cleanable/glass, -/turf/open/floor/plating/airless, -/area/ruin/space/has_grav/port_tarkon/porthall) -"hA" = ( -/obj/machinery/door/airlock/public/glass{ - name = "Port Primary Hallway" - }, -/obj/structure/barricade/wooden/crude, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/door/firedoor/solid/closed, -/obj/structure/cable, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/porthall) -"hB" = ( -/obj/effect/decal/cleanable/dirt, -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, -/obj/structure/alien/weeds/node, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/forehall) -"hD" = ( -/obj/effect/decal/cleanable/blood/tracks{ - dir = 6 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/port_tarkon/developement) -"hE" = ( -/obj/structure/table, -/obj/item/storage/medkit/regular, -/obj/item/storage/medkit/regular, -/obj/effect/decal/cleanable/dirt, -/obj/machinery/light/dim/directional/east, -/obj/effect/turf_decal/tile/blue/half{ - dir = 4 - }, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/trauma) -"hL" = ( -/obj/effect/decal/cleanable/dirt, -/obj/machinery/computer{ - desc = "A computer long since rendered non-functional due to lack of maintenance. Spitting out error messages."; - dir = 1; - name = "Broken Computer" - }, -/obj/effect/turf_decal/tile/blue/anticorner{ - dir = 8 - }, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/port_tarkon/comms) -"hM" = ( -/obj/machinery/atmospherics/components/unary/portables_connector/visible{ - dir = 8 - }, -/obj/effect/decal/cleanable/dirt, -/obj/effect/turf_decal/tile/blue/fourcorners, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/atmos) -"hN" = ( -/obj/effect/decal/cleanable/dirt, -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ - dir = 8 - }, -/turf/open/floor/iron/airless, -/area/ruin/space/has_grav/port_tarkon/porthall) -"hP" = ( -/obj/effect/turf_decal/stripes{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden, -/turf/open/floor/engine, -/area/ruin/space/has_grav/port_tarkon/atmos) -"hQ" = ( -/obj/machinery/door/airlock/mining, -/obj/machinery/door/firedoor/solid, -/obj/structure/cable, -/obj/effect/decal/cleanable/dirt, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/cargo) -"hR" = ( -/obj/machinery/atmospherics/miner/carbon_dioxide, -/turf/open/floor/engine/co2, -/area/ruin/space/has_grav/port_tarkon/atmos) -"hS" = ( -/obj/effect/decal/cleanable/dirt, -/obj/item/circuitboard/machine/ore_redemption, -/obj/effect/decal/cleanable/glass, -/obj/effect/turf_decal/tile/brown/anticorner{ - dir = 4 - }, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/mining) -"hV" = ( -/obj/structure/closet/secure_closet/freezer/meat/open, -/turf/open/floor/iron/freezer, -/area/ruin/space/has_grav/port_tarkon/kitchen) -"hY" = ( -/obj/machinery/door/window/brigdoor/security/cell/right/directional/south{ - req_access = list("tarkon") - }, -/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, -/area/ruin/space/has_grav/port_tarkon/secoff) -"hZ" = ( -/obj/effect/decal/cleanable/dirt, -/obj/machinery/power/smes/engineering{ - charge = 0; - name = "backup power storage unit" - }, -/obj/structure/cable, -/turf/open/floor/plating, -/area/ruin/space/has_grav/port_tarkon/power1) -"ia" = ( -/obj/structure/table/reinforced, -/obj/item/storage/toolbox/maint_kit, -/obj/effect/decal/cleanable/dirt, -/obj/item/stack/sheet/iron/twenty, -/obj/effect/turf_decal/tile/red/half{ - dir = 1 - }, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/secoff) -"ic" = ( -/obj/effect/decal/cleanable/dirt, -/obj/item/stack/rods, -/turf/open/floor/iron/airless, -/area/ruin/space/has_grav/port_tarkon/porthall) -"ik" = ( -/obj/effect/decal/cleanable/dirt, -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/effect/turf_decal/tile/neutral/anticorner{ - dir = 4 - }, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/centerhall) -"in" = ( -/obj/effect/decal/cleanable/dirt, -/obj/item/circuitboard/machine/ore_silo, -/obj/structure/frame/machine, -/obj/effect/turf_decal/tile/brown/anticorner{ - dir = 1 - }, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/mining) -"ip" = ( -/obj/machinery/door/airlock/mining/glass, -/obj/effect/decal/cleanable/dirt, -/obj/effect/turf_decal/sand/plating, -/obj/effect/decal/cleanable/dirt, -/obj/effect/turf_decal/sand/plating, -/obj/effect/mapping_helpers/airlock/cyclelink_helper{ - dir = 1 - }, -/obj/machinery/door/firedoor/solid/closed, -/obj/effect/mapping_helpers/airlock/access/all/tarkon/general, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/mining) -"iq" = ( -/turf/open/floor/iron/white, -/area/ruin/space/has_grav/port_tarkon/centerhall) -"iu" = ( -/obj/effect/decal/cleanable/dirt, -/mob/living/simple_animal/hostile/alien, -/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, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/mining) -"iv" = ( -/obj/machinery/atmospherics/components/unary/passive_vent/layer2{ - dir = 4 - }, -/turf/open/misc/asteroid/airless, -/area/ruin/space/has_grav) -"iw" = ( -/obj/effect/turf_decal/stripes{ - dir = 1 - }, -/obj/effect/decal/cleanable/dirt, -/obj/machinery/light/dim/directional/west, -/obj/structure/window/reinforced/spawner/directional/north, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/visible/layer2{ - dir = 6 - }, -/obj/structure/closet/radiation, -/obj/item/clothing/head/utility/radiation, -/obj/item/clothing/suit/utility/radiation, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/port_tarkon/atmos) -"iy" = ( -/obj/effect/decal/cleanable/dirt, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/turf/open/floor/iron/cafeteria, -/area/ruin/space/has_grav/port_tarkon/kitchen) -"iA" = ( -/obj/machinery/door/airlock/multi_tile/public/glass, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/decal/cleanable/dirt, -/obj/machinery/door/firedoor/solid, -/obj/structure/cable, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/trauma) -"iB" = ( -/obj/effect/turf_decal/stripes/asteroid/line{ - dir = 1 - }, -/turf/open/misc/asteroid/airless, -/area/ruin/space/has_grav) -"iC" = ( -/obj/effect/decal/cleanable/dirt, -/obj/machinery/firealarm/directional/east, -/obj/effect/turf_decal/tile/brown/half{ - dir = 4 - }, -/turf/open/floor/iron/airless, -/area/ruin/space/has_grav/port_tarkon/storage) -"iG" = ( -/obj/machinery/atmospherics/components/binary/pump/off/general{ - dir = 4 - }, -/obj/effect/decal/cleanable/dirt, -/obj/effect/turf_decal/tile/red/fourcorners{ - color = "#DE3A3A" - }, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/atmos) -"iI" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/turf/open/misc/asteroid/airless, -/area/ruin/space/has_grav) -"iJ" = ( -/obj/effect/decal/cleanable/dirt, -/obj/machinery/vending/hydroseeds, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/garden) -"iM" = ( -/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, -/obj/machinery/light/directional/north, -/obj/machinery/power/apc/auto_name/directional/north, -/obj/effect/mapping_helpers/apc/no_charge, -/obj/effect/mapping_helpers/apc/unlocked, -/obj/effect/turf_decal/tile/yellow/half{ - dir = 1 - }, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/power1) -"iT" = ( -/obj/effect/decal/cleanable/dirt, -/obj/machinery/door/airlock/public/glass{ - name = "Starboard Primary Hallway" - }, -/obj/machinery/door/firedoor/solid, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/starboardhall) -"iU" = ( -/mob/living/simple_animal/hostile/alien/drone, -/turf/open/misc/asteroid, -/area/ruin/space/has_grav) -"iV" = ( -/obj/effect/decal/cleanable/dirt, -/mob/living/simple_animal/hostile/alien, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/forehall) -"iW" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/forehall) -"iZ" = ( -/obj/effect/decal/cleanable/blood/tracks, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/port_tarkon/developement) -"ja" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/blood, -/obj/structure/alien/resin/wall, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/forehall) -"jc" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/plating/airless, -/area/ruin/space/has_grav/port_tarkon/porthall) -"jg" = ( -/obj/machinery/door/airlock/public, -/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, -/obj/machinery/door/firedoor/closed{ - opacity = 1 - }, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/porthall) -"jj" = ( -/obj/machinery/atmospherics/components/unary/outlet_injector/monitored/nitrogen_input/tarkon{ - dir = 4 - }, -/turf/open/floor/engine/n2, -/area/ruin/space/has_grav/port_tarkon/atmos) -"jm" = ( -/obj/effect/decal/cleanable/blood/gibs/old, -/obj/structure/alien/resin/wall, -/obj/effect/turf_decal/tile/purple/half, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/port_tarkon/developement) -"jn" = ( -/turf/closed/mineral/random/high_chance, -/area/awaymission) -"jo" = ( -/obj/structure/cable, -/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/turf_decal/tile/brown, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/mining) -"jv" = ( -/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, -/obj/machinery/button/door{ - id = "ptobservatory"; - name = "shutter controls"; - pixel_y = -32 - }, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/observ) -"jz" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/decal/cleanable/dirt, -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/centerhall) -"jA" = ( -/obj/effect/decal/cleanable/dirt, -/obj/machinery/atmospherics/components/binary/pump, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/centerhall) -"jB" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/atmos) -"jE" = ( -/obj/structure/cable, -/obj/effect/decal/cleanable/dirt, -/obj/effect/turf_decal/sand/plating, -/turf/open/floor/plating/airless, -/area/solars/tarkon) -"jF" = ( -/obj/effect/decal/cleanable/dirt, -/obj/structure/chair/wood, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/observ) -"jG" = ( -/obj/effect/turf_decal/stripes{ - dir = 1 - }, -/obj/effect/decal/cleanable/dirt, -/obj/structure/cable, -/obj/machinery/power/terminal{ - dir = 4 - }, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/port_tarkon/atmos) -"jJ" = ( -/obj/structure/cable, -/obj/effect/decal/cleanable/dirt, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/turf/open/floor/plating, -/area/ruin/space/has_grav/port_tarkon/atmos) -"jM" = ( -/obj/effect/decal/cleanable/blood/gibs/old, -/obj/effect/turf_decal/tile/purple/half{ - dir = 4 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/port_tarkon/developement) -"jN" = ( -/obj/effect/decal/cleanable/dirt, -/obj/machinery/airalarm/directional/north, -/obj/effect/mapping_helpers/airalarm/all_access, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/forehall) -"jO" = ( -/obj/machinery/atmospherics/components/unary/passive_vent{ - dir = 4; - name = "killroom vent" - }, -/obj/effect/turf_decal/sand/plating, -/turf/open/floor/plating/airless, -/area/ruin/space/has_grav) -"jP" = ( -/obj/machinery/door/airlock/maintenance_hatch, -/obj/effect/decal/cleanable/dirt, -/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/ruin/space/has_grav/port_tarkon/centerhall) -"jU" = ( -/obj/effect/decal/cleanable/dirt, -/obj/structure/closet/crate/secure/science, -/obj/item/areaeditor/blueprints/slime, -/obj/effect/turf_decal/tile/brown/anticorner, -/obj/item/slime_extract/grey, -/obj/item/slime_extract/grey, -/obj/item/slime_extract/grey, -/turf/open/floor/iron/airless, -/area/ruin/space/has_grav/port_tarkon/storage) -"jV" = ( -/obj/effect/decal/cleanable/dirt, -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ - dir = 4 - }, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/cargo) -"jY" = ( -/obj/structure/rack, -/obj/effect/decal/cleanable/dirt, -/obj/item/clothing/head/helmet, -/obj/item/clothing/head/helmet, -/obj/effect/turf_decal/tile/red/half{ - dir = 1 - }, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/secoff) -"jZ" = ( -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/plating, -/area/ruin/space/has_grav/port_tarkon/forehall) -"ka" = ( -/obj/structure/cable, -/obj/effect/decal/cleanable/dirt, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/firealarm/directional/east, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/starboardhall) -"kb" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/centerhall) -"kc" = ( -/obj/effect/decal/cleanable/dirt, -/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/tile/neutral{ - dir = 4 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/centerhall) -"kd" = ( -/obj/effect/decal/cleanable/dirt, -/obj/item/wrench, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/atmos) -"ke" = ( -/obj/effect/decal/cleanable/dirt, -/obj/machinery/computer{ - desc = "A computer long since rendered non-functional due to lack of maintenance. Spitting out error messages."; - dir = 1; - name = "Broken Computer" - }, -/obj/effect/turf_decal/tile/blue/anticorner{ - dir = 8 - }, -/obj/item/paper/fluff/ruins/tarkon/vaulter, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/port_tarkon/comms) -"kf" = ( -/turf/closed/wall, -/area/ruin/space/has_grav/port_tarkon/forehall) -"kh" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/turf_decal/sand, -/obj/machinery/light/dim/directional/east, -/obj/machinery/airalarm/directional/east, -/obj/effect/mapping_helpers/airalarm/all_access, -/obj/effect/turf_decal/tile/brown/half{ - dir = 4 - }, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/mining) -"ki" = ( -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/atmos) -"kk" = ( -/obj/effect/decal/cleanable/dirt, -/obj/structure/cable, -/obj/machinery/power/apc/auto_name/directional/north, -/obj/effect/mapping_helpers/apc/no_charge, -/obj/effect/mapping_helpers/apc/unlocked, -/turf/open/floor/plating, -/area/ruin/space/has_grav/port_tarkon/afthall) -"ko" = ( -/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/turf_decal/tile/purple/half{ - dir = 1 - }, -/obj/structure/alien/weeds/node, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/port_tarkon/developement) -"kp" = ( -/obj/effect/decal/cleanable/dirt, -/obj/item/tape/ruins/tarkon/celebration, -/obj/structure/closet/crate/bin, -/obj/effect/spawner/random/trash/food_packaging, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/observ) -"kq" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/turf_decal/tile/blue/half{ - dir = 1 - }, -/obj/machinery/vending/cigarette, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/port_tarkon/comms) -"kr" = ( -/obj/machinery/atmospherics/components/binary/pump/off/general{ - dir = 4 - }, -/obj/effect/decal/cleanable/dirt, -/obj/effect/turf_decal/tile/blue/fourcorners, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/atmos) -"kt" = ( -/obj/structure/cable, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/atmos) -"ku" = ( -/obj/structure/bed, -/obj/effect/decal/cleanable/dirt, -/obj/effect/turf_decal/tile/blue/anticorner{ - dir = 4 - }, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/trauma) -"kx" = ( -/obj/effect/decal/cleanable/blood/tracks{ - dir = 8 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/port_tarkon/developement) -"kA" = ( -/obj/structure/fence, -/turf/open/misc/asteroid/airless, -/area/ruin/space/has_grav) -"kD" = ( -/obj/structure/cable, -/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/turf_decal/tile/brown/half{ - dir = 4 - }, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/cargo) -"kF" = ( -/obj/structure/fence/corner, -/turf/open/misc/asteroid/airless, -/area/ruin/space/has_grav) -"kG" = ( -/obj/structure/closet/crate/secure/weapon, -/obj/item/gun/microfusion/mcr01, -/turf/open/floor/mineral/titanium, -/area/ruin/space/has_grav) -"kI" = ( -/obj/structure/table/reinforced, -/obj/item/reagent_containers/condiment/saltshaker{ - pixel_x = -2 - }, -/obj/item/reagent_containers/condiment/saltshaker{ - pixel_x = -2 - }, -/obj/item/reagent_containers/condiment/peppermill{ - pixel_x = 2; - pixel_y = 2 - }, -/obj/item/reagent_containers/condiment/peppermill{ - pixel_x = 2; - pixel_y = 1 - }, -/obj/effect/decal/cleanable/dirt, -/obj/structure/cable, -/obj/machinery/power/apc/auto_name/directional/west, -/obj/effect/mapping_helpers/apc/no_charge, -/obj/effect/mapping_helpers/apc/unlocked, -/turf/open/floor/iron/cafeteria, -/area/ruin/space/has_grav/port_tarkon/kitchen) -"kJ" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/decal/cleanable/dirt, -/obj/effect/turf_decal/tile/yellow, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/toolstorage) -"kN" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/cafeteria, -/area/ruin/space/has_grav/port_tarkon/kitchen) -"kO" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/decal/cleanable/dirt, -/obj/effect/turf_decal/tile/neutral/anticorner{ - dir = 1 - }, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/centerhall) -"kR" = ( -/obj/effect/decal/cleanable/dirt, -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ - dir = 4 - }, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/secoff) -"kS" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 8 - }, -/obj/effect/turf_decal/stripes/line{ - dir = 4 - }, -/obj/machinery/door/poddoor/incinerator_atmos_aux, -/turf/open/floor/engine/vacuum, -/area/ruin/space/has_grav/port_tarkon/atmos) -"kT" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/xenoblood/xgibs, -/obj/machinery/light_switch/directional/west, -/obj/effect/turf_decal/tile/purple/half{ - dir = 8 - }, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/port_tarkon/developement) -"kU" = ( -/obj/effect/decal/cleanable/dirt, -/obj/structure/closet/crate, -/obj/effect/spawner/random/decoration/carpet, -/obj/effect/spawner/random/decoration/carpet, -/obj/effect/spawner/random/decoration/carpet, -/turf/open/floor/plating, -/area/ruin/space/has_grav/port_tarkon/forehall) -"kW" = ( -/obj/effect/decal/cleanable/dirt, -/obj/structure/table, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/item/megaphone, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/port_tarkon/comms) -"kX" = ( -/obj/effect/decal/cleanable/dirt, -/obj/structure/bed/maint, -/obj/structure/safe/floor, -/obj/item/mod/module/armor_booster/retractplates{ - desc = "A complex set of actuators, micro-seals and a simple guide on how to install it, This... \"Modification\" allows the plating around the joints to retract, giving minor protection and a bit better mobility. There also seems to be a small, wireless microphone... how odd." - }, -/obj/item/gun/ballistic/shotgun/doublebarrel, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/secoff) -"lb" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/turf_decal/tile/neutral/half{ - dir = 4 - }, -/obj/effect/decal/cleanable/generic, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/centerhall) -"ld" = ( -/obj/machinery/atmospherics/components/unary/vent_pump/siphon/monitored/nitrous_output/tarkon{ - dir = 8 - }, -/turf/open/floor/engine/n2o, -/area/ruin/space/has_grav/port_tarkon/atmos) -"le" = ( -/obj/structure/cable, -/obj/effect/decal/cleanable/dirt, -/obj/effect/turf_decal/tile/brown/half{ - dir = 8 - }, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/mining) -"li" = ( -/obj/structure/sign/warning/explosives, -/turf/closed/wall, -/area/ruin/space/has_grav/port_tarkon/developement) -"lj" = ( -/obj/effect/decal/cleanable/xenoblood/xgibs/larva, -/obj/effect/decal/cleanable/blood/tracks{ - dir = 4 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/port_tarkon/developement) -"lp" = ( -/obj/machinery/suit_storage_unit/engine, -/obj/item/paper/fluff/ruins/tarkon/atmosincident, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/atmos) -"lr" = ( -/obj/effect/decal/cleanable/dirt, -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ - dir = 8 - }, -/obj/structure/chair/wood, -/obj/effect/decal/cleanable/confetti, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/observ) -"ls" = ( -/obj/machinery/door/window/brigdoor/security/cell{ - req_access = list("tarkon") - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/secoff) -"lt" = ( -/obj/effect/decal/cleanable/dirt, -/obj/machinery/light_switch/directional/east, -/obj/effect/turf_decal/tile/yellow/anticorner, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/toolstorage) -"lw" = ( -/obj/effect/turf_decal/tile/purple/anticorner, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/port_tarkon/developement) -"lx" = ( -/obj/machinery/door/airlock/public/glass{ - name = "Aft Primary Hallway" - }, -/obj/effect/decal/cleanable/dirt, -/obj/machinery/door/firedoor/solid, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/afthall) -"ly" = ( -/obj/effect/spawner/structure/window/reinforced, -/turf/open/floor/plating, -/area/ruin/space/has_grav/port_tarkon) -"lA" = ( -/obj/structure/closet/crate/radiation, -/obj/effect/decal/cleanable/dirt, -/obj/structure/cable, -/obj/effect/decal/cleanable/dirt, -/obj/item/stack/sheet/mineral/uranium/five, -/turf/open/floor/plating, -/area/ruin/space/has_grav/port_tarkon/power1) -"lC" = ( -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon) -"lD" = ( -/obj/machinery/door/airlock/wood{ - id_tag = "ptdorm4"; - name = "Couples Suite" - }, -/obj/effect/decal/cleanable/dirt, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/door/firedoor/solid, -/turf/open/floor/wood/large, -/area/ruin/space/has_grav/port_tarkon/dorms) -"lE" = ( -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/porthall) -"lF" = ( -/obj/effect/decal/cleanable/dirt, -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ - dir = 4 - }, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/port_tarkon/developement) -"lH" = ( -/obj/structure/grille, -/turf/closed/wall/r_wall, -/area/ruin/space/has_grav/port_tarkon/atmos) -"lI" = ( -/obj/effect/turf_decal/stripes{ - dir = 1 - }, -/obj/effect/decal/cleanable/dirt, -/obj/machinery/atmospherics/components/unary/portables_connector/visible{ - dir = 8 - }, -/obj/machinery/portable_atmospherics/canister/oxygen, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/port_tarkon/atmos) -"lK" = ( -/obj/structure/closet/firecloset/full, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/plating, -/area/ruin/space/has_grav/port_tarkon/power1) -"lQ" = ( -/obj/effect/decal/cleanable/dirt, -/obj/structure/cable, -/obj/machinery/power/terminal{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/port_tarkon/atmos) -"lR" = ( -/obj/machinery/door/airlock/multi_tile/public/glass{ - dir = 8 - }, -/obj/machinery/door/firedoor/solid, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/garden) -"lS" = ( -/obj/structure/closet, -/obj/effect/decal/cleanable/dirt, -/obj/item/clothing/shoes/workboots/mining, -/obj/item/clothing/shoes/winterboots, -/obj/item/clothing/shoes/jackboots, -/obj/item/clothing/under/rank/medical/doctor/nova/utility, -/obj/item/clothing/under/rank/medical/doctor/nova/utility, -/obj/item/storage/backpack/duffelbag/med, -/obj/item/storage/backpack/medic, -/obj/item/storage/backpack/satchel/med, -/obj/item/storage/backpack/satchel/chem, -/obj/item/storage/backpack/satchel/vir, -/obj/item/storage/backpack/virology, -/obj/item/storage/backpack/duffelbag/virology, -/obj/item/storage/backpack/duffelbag/chemistry, -/obj/item/storage/backpack/chemistry, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon) -"lT" = ( -/obj/item/flashlight/lantern, -/obj/item/flashlight/lantern, -/obj/item/flashlight/lantern, -/obj/item/flashlight/lantern, -/obj/structure/table, -/obj/machinery/light/warm/directional/south, -/obj/effect/decal/cleanable/dirt, -/obj/structure/cable, -/obj/machinery/power/apc/auto_name/directional/south, -/obj/effect/mapping_helpers/apc/no_charge, -/obj/effect/mapping_helpers/apc/unlocked, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon) -"lU" = ( -/obj/machinery/firealarm/directional/west, -/obj/effect/decal/cleanable/dirt, -/obj/effect/turf_decal/tile/yellow/half{ - dir = 8 - }, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/toolstorage) -"lV" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/spawner/structure/window/reinforced/no_firelock, -/obj/machinery/atmospherics/pipe/layer_manifold/brown/hidden{ - dir = 4 - }, -/turf/open/floor/plating, -/area/ruin/space/has_grav/port_tarkon/atmos) -"lW" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/secoff) -"lX" = ( -/obj/machinery/door/poddoor/shutters/preopen{ - id = "tarkonouter"; - name = "External Bay Shutters" - }, -/obj/effect/decal/cleanable/dirt, -/obj/effect/turf_decal/trimline/yellow/filled/warning, -/turf/open/floor/iron/airless, -/area/ruin/space/has_grav/port_tarkon/storage) -"lZ" = ( -/obj/effect/decal/cleanable/dirt, -/obj/structure/closet/emcloset, -/obj/effect/turf_decal/tile/brown/anticorner{ - dir = 4 - }, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/mining) -"mc" = ( -/obj/effect/decal/cleanable/dirt, -/obj/structure/window/reinforced/spawner/directional/north, -/obj/effect/turf_decal/tile/red/fourcorners{ - color = "#DE3A3A" - }, -/obj/machinery/computer/atmos_control/tarkon/nitrogen_tank{ - dir = 4 - }, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/atmos) -"md" = ( -/obj/effect/decal/cleanable/dirt, -/obj/machinery/light/dim/directional/south, -/obj/effect/turf_decal/tile/brown/anticorner, -/turf/open/floor/iron/airless, -/area/ruin/space/has_grav/port_tarkon/storage) -"mh" = ( -/obj/structure/firelock_frame, -/obj/effect/decal/cleanable/dirt, -/obj/structure/alien/resin/wall, -/turf/open/floor/plating, -/area/ruin/space/has_grav/port_tarkon/forehall) -"mi" = ( -/obj/structure/sign/warning/biohazard, -/turf/closed/wall, -/area/ruin/space/has_grav/port_tarkon/toolstorage) -"ml" = ( -/obj/effect/decal/cleanable/dirt, -/obj/structure/cable, -/obj/machinery/firealarm/directional/east, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/observ) -"mo" = ( -/obj/structure/table/reinforced, -/obj/item/stack/sheet/iron/fifty, -/obj/effect/decal/cleanable/dirt, -/obj/item/stack/sheet/glass/fifty, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/atmos) -"mq" = ( -/obj/effect/decal/cleanable/dirt, -/obj/machinery/firealarm/directional/east, -/turf/open/floor/iron/airless, -/area/ruin/space/has_grav/port_tarkon/porthall) -"mr" = ( -/obj/effect/decal/cleanable/dirt, -/obj/machinery/portable_atmospherics/scrubber, -/turf/open/floor/plating, -/area/ruin/space/has_grav/port_tarkon/afthall) -"mt" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/dirt, -/obj/structure/closet/crate, -/obj/item/transfer_valve, -/obj/item/transfer_valve, -/turf/open/floor/plating, -/area/ruin/space/has_grav/port_tarkon/forehall) -"mu" = ( -/obj/effect/decal/cleanable/dirt, -/obj/machinery/light/dim/directional/west, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/afthall) -"mv" = ( -/obj/effect/decal/cleanable/dirt, -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/forehall) -"mx" = ( -/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, -/obj/effect/decal/cleanable/blood/old, -/obj/structure/alien/weeds/node, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/forehall) -"my" = ( -/obj/structure/reagent_dispensers/fueltank/large, -/obj/effect/decal/cleanable/dirt, -/obj/effect/turf_decal/tile/yellow/half, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/power1) -"mB" = ( -/obj/effect/decal/cleanable/dirt, -/obj/item/paper/fluff/ruins/tarkon/defcon3, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon) -"mC" = ( -/obj/machinery/door/airlock/public/glass{ - name = "Cryogenics Room" - }, -/obj/effect/decal/cleanable/dirt, -/obj/machinery/door/firedoor/solid, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon) -"mD" = ( -/obj/item/stack/ore/bluespace_crystal, -/turf/open/misc/asteroid, -/area/ruin/space/has_grav) -"mE" = ( -/obj/effect/decal/cleanable/blood/tracks, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/forehall) -"mG" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/turf_decal/tile/brown/anticorner{ - dir = 8 - }, -/turf/open/floor/iron/airless, -/area/ruin/space/has_grav/port_tarkon/storage) -"mH" = ( -/obj/effect/decal/cleanable/dirt, -/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/tile/neutral/half{ - dir = 1 - }, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/centerhall) -"mI" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/blood/old, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/forehall) -"mK" = ( -/obj/effect/decal/cleanable/dirt, -/obj/machinery/computer{ - desc = "A computer long since rendered non-functional due to lack of maintenance. Spitting out error messages."; - dir = 1; - name = "Broken Computer" - }, -/obj/item/paper/fluff/ruins/tarkon/transmission, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/port_tarkon/comms) -"mM" = ( -/obj/effect/decal/cleanable/dirt, -/obj/structure/table/optable, -/obj/effect/turf_decal/tile/purple/anticorner{ - dir = 8 - }, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/port_tarkon/developement) -"mO" = ( -/obj/effect/decal/cleanable/dirt, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/turf/open/floor/iron/cafeteria, -/area/ruin/space/has_grav/port_tarkon/kitchen) -"mT" = ( -/obj/effect/decal/cleanable/dirt, -/obj/structure/cable, -/obj/machinery/door/airlock/public/glass{ - name = "Starboard Primary Hallway" - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/door/firedoor/solid, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/starboardhall) -"mV" = ( -/obj/machinery/door/window/right/directional/east, -/obj/machinery/door/window/right/directional/west, -/obj/structure/table/reinforced, -/obj/machinery/door/firedoor/solid, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/mining) -"mZ" = ( -/obj/effect/decal/cleanable/xenoblood/xgibs/body, -/obj/effect/decal/cleanable/dirt, -/obj/effect/mapping_helpers/burnt_floor, -/turf/open/floor/plating, -/area/ruin/space/has_grav/port_tarkon/forehall) -"nb" = ( -/obj/machinery/door/airlock/public/glass{ - name = "Starboard Primary Hallway" - }, -/obj/effect/decal/cleanable/dirt, -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/door/firedoor/solid, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/starboardhall) -"nc" = ( -/obj/structure/sink/directional/south, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/cafeteria, -/area/ruin/space/has_grav/port_tarkon/kitchen) -"ng" = ( -/turf/closed/wall, -/area/ruin/space/has_grav/port_tarkon/storage) -"nh" = ( -/obj/effect/decal/cleanable/dirt, -/obj/structure/window/reinforced/tinted/spawner/directional/south, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/port_tarkon/developement) -"nk" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/decal/cleanable/dirt, -/obj/effect/turf_decal/tile/red/half, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/secoff) -"nm" = ( -/obj/machinery/atmospherics/miner/nitrogen, -/turf/open/floor/engine/n2, -/area/ruin/space/has_grav/port_tarkon/atmos) -"no" = ( -/obj/effect/mob_spawn/corpse/human/miner/mod, -/turf/open/space/basic, -/area/template_noop) -"nt" = ( -/obj/effect/decal/cleanable/dirt, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/mining) -"nu" = ( -/obj/effect/decal/cleanable/dirt, -/obj/machinery/light/dim/directional/south, -/obj/effect/turf_decal/tile/blue/half, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/trauma) -"nx" = ( -/obj/effect/turf_decal/sand/plating, -/turf/open/floor/plating/airless, -/area/ruin/space/has_grav) -"nF" = ( -/obj/effect/decal/cleanable/dirt, -/obj/structure/closet/crate/engineering, -/obj/item/stack/sheet/plasteel/fifty, -/obj/item/stack/sheet/rglass{ - amount = 50 - }, -/obj/item/stack/sheet/mineral/plasma/thirty, -/obj/machinery/light_switch/directional/north, -/obj/effect/turf_decal/tile/brown/anticorner{ - dir = 1 - }, -/turf/open/floor/iron/airless, -/area/ruin/space/has_grav/port_tarkon/storage) -"nL" = ( -/obj/item/stack/tile/carpet/neon/simple/purple/nodots/sixty, -/turf/open/floor/plating, -/area/ruin/space/has_grav/port_tarkon/cargo) -"nP" = ( -/turf/closed/wall, -/area/ruin/space/has_grav/port_tarkon/developement) -"nQ" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/centerhall) -"nS" = ( -/obj/effect/decal/cleanable/glass, -/obj/effect/turf_decal/tile/purple/half{ - dir = 1 - }, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/port_tarkon/developement) -"nW" = ( -/obj/effect/decal/cleanable/dirt, -/obj/structure/table/reinforced, -/obj/item/restraints/handcuffs, -/obj/item/restraints/handcuffs, -/obj/effect/turf_decal/tile/red/anticorner{ - dir = 4 - }, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/secoff) -"nZ" = ( -/obj/effect/decal/cleanable/dirt, -/obj/structure/closet/crate/engineering/electrical, -/obj/item/solar_assembly, -/obj/item/solar_assembly, -/obj/item/solar_assembly, -/obj/item/solar_assembly, -/obj/item/solar_assembly, -/obj/item/solar_assembly, -/obj/item/solar_assembly, -/obj/item/solar_assembly, -/obj/item/solar_assembly, -/obj/item/solar_assembly, -/obj/item/solar_assembly, -/obj/item/solar_assembly, -/obj/item/solar_assembly, -/obj/item/solar_assembly, -/obj/item/solar_assembly, -/obj/item/solar_assembly, -/obj/item/solar_assembly, -/turf/open/floor/plating, -/area/ruin/space/has_grav/port_tarkon/forehall) -"oc" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/turf_decal/tile/purple/half{ - dir = 1 - }, -/obj/effect/decal/cleanable/blood/tracks{ - dir = 4 - }, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/port_tarkon/developement) -"oe" = ( -/mob/living/simple_animal/hostile/alien/sentinel, -/turf/open/misc/asteroid, -/area/ruin/space/has_grav) -"of" = ( -/obj/effect/spawner/structure/window/reinforced/no_firelock, -/obj/machinery/door/poddoor/shutters{ - id = "ptafthall" - }, -/turf/open/floor/plating, -/area/ruin/space/has_grav/port_tarkon/afthall) -"og" = ( -/obj/structure/table/reinforced, -/obj/item/pipe_dispenser, -/obj/item/storage/belt/utility/full, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/atmos) -"om" = ( -/obj/effect/turf_decal/vg_decals/atmos/carbon_dioxide, -/obj/machinery/light/small/directional/east, -/obj/machinery/air_sensor/tarkon/carbon_tank{ - pixel_x = 26 - }, -/turf/open/floor/engine/co2, -/area/ruin/space/has_grav/port_tarkon/atmos) -"on" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/decal/cleanable/dirt, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/centerhall) -"op" = ( -/obj/effect/decal/cleanable/dirt, -/obj/item/stock_parts/micro_laser, -/obj/effect/turf_decal/tile/brown/half{ - dir = 8 - }, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/mining) -"oq" = ( -/obj/machinery/processor, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/cafeteria, -/area/ruin/space/has_grav/port_tarkon/kitchen) -"os" = ( -/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/iron, -/area/ruin/space/has_grav/port_tarkon/mining) -"ot" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/turf_decal/sand/plating, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/mining) -"ov" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/carpet/black, -/area/ruin/space/has_grav/port_tarkon/dorms) -"ow" = ( -/obj/structure/alien/weeds/node, -/obj/effect/decal/cleanable/blood/gibs/old, -/turf/open/misc/asteroid, -/area/ruin/space/has_grav) -"oy" = ( -/obj/effect/decal/cleanable/dirt, -/obj/structure/safe/floor, -/obj/structure/table, -/obj/item/stack/spacecash/c10000, -/obj/item/stack/spacecash/c10000, -/obj/item/stack/spacecash/c10000, -/obj/item/stack/spacecash/c10000, -/obj/item/stack/spacecash/c10000, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/cargo) -"oC" = ( -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ - dir = 1 - }, -/obj/effect/decal/cleanable/dirt, -/obj/effect/turf_decal/tile/neutral, -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/centerhall) -"oE" = ( -/obj/machinery/button/door{ - id = "tarkonouter"; - name = "Exterior Shutter Control"; - pixel_x = -6 - }, -/obj/machinery/button/door{ - id = "tarkoninner"; - name = "Inner Shutter Control"; - pixel_x = 6 - }, -/turf/closed/wall, -/area/ruin/space/has_grav/port_tarkon/storage) -"oG" = ( -/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, -/obj/effect/decal/cleanable/confetti, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/observ) -"oI" = ( -/obj/machinery/atmospherics/components/unary/vent_pump/siphon/monitored/oxygen_output/tarkon{ - dir = 4 - }, -/turf/open/floor/engine/o2, -/area/ruin/space/has_grav/port_tarkon/atmos) -"oK" = ( -/mob/living/simple_animal/hostile/alien, -/turf/open/misc/asteroid, -/area/ruin/space/has_grav) -"oL" = ( -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/plating, -/area/ruin/space/has_grav/port_tarkon/afthall) -"oN" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/centerhall) -"oQ" = ( -/obj/effect/decal/cleanable/dirt, -/obj/structure/window/reinforced/spawner/directional/north, -/obj/effect/turf_decal/tile/dark/fourcorners, -/obj/machinery/computer/atmos_control/tarkon/carbon_tank{ - dir = 8 - }, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/atmos) -"oS" = ( -/obj/effect/decal/cleanable/dirt, -/obj/structure/chair/office, -/obj/effect/turf_decal/tile/blue{ - dir = 8 - }, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/port_tarkon/comms) -"oV" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/blood/tracks{ - dir = 10 - }, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon) -"pa" = ( -/obj/structure/alien/resin/wall, -/obj/effect/decal/cleanable/glass, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/port_tarkon/developement) -"pc" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/turf_decal/bot, -/turf/open/floor/plating, -/area/ruin/space/has_grav/port_tarkon/atmos) -"pd" = ( -/obj/machinery/griddle, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/cafeteria, -/area/ruin/space/has_grav/port_tarkon/kitchen) -"pf" = ( -/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, -/obj/machinery/light_switch/directional/east, -/obj/effect/turf_decal/tile/yellow/anticorner{ - dir = 4 - }, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/power1) -"ph" = ( -/obj/effect/decal/cleanable/dirt, -/obj/structure/filingcabinet, -/obj/effect/turf_decal/tile/red/half{ - dir = 1 - }, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/secoff) -"pj" = ( -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/plating/airless, -/area/ruin/space/has_grav/port_tarkon/porthall) -"pk" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/blood/old, -/obj/structure/alien/weeds/node, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/forehall) -"pl" = ( -/obj/effect/decal/cleanable/dirt, -/obj/structure/table, -/obj/item/stack/spacecash/c200, -/obj/item/stack/spacecash/c200, -/obj/item/stack/spacecash/c200, -/obj/item/stack/spacecash/c200, -/obj/item/stack/spacecash/c200, -/obj/item/stack/spacecash/c200, -/obj/item/stack/spacecash/c200, -/obj/item/stack/spacecash/c200, -/obj/item/stack/spacecash/c200, -/obj/item/stack/spacecash/c200, -/obj/effect/turf_decal/tile/brown/half, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/cargo) -"po" = ( -/obj/structure/sink/kitchen/directional/south, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/cafeteria, -/area/ruin/space/has_grav/port_tarkon/kitchen) -"pr" = ( -/obj/item/wallframe/airalarm, -/obj/effect/decal/cleanable/blood/tracks{ - dir = 9 - }, -/obj/structure/alien/weeds/node, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/port_tarkon/developement) -"ps" = ( -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/plating, -/area/ruin/space/has_grav/port_tarkon/power1) -"pt" = ( -/obj/effect/decal/cleanable/dirt, -/obj/structure/table/reinforced, -/obj/item/stack/sheet/iron/fifty, -/obj/effect/turf_decal/tile/yellow/anticorner, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/toolstorage) -"pv" = ( -/obj/item/crowbar, -/obj/item/crowbar, -/obj/item/crowbar, -/obj/structure/table, -/obj/machinery/light/warm/directional/south, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon) -"pw" = ( -/obj/effect/decal/cleanable/dirt, -/obj/structure/table, -/obj/item/paper/crumpled, -/obj/effect/turf_decal/tile/blue/half{ - dir = 8 - }, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/port_tarkon/comms) -"px" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/decal/cleanable/dirt, -/obj/effect/turf_decal/tile/neutral/half{ - dir = 4 - }, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/centerhall) -"pA" = ( -/obj/effect/turf_decal/vg_decals/atmos/mix, -/obj/machinery/light/small/directional/west, -/turf/open/floor/engine/vacuum, -/area/ruin/space/has_grav/port_tarkon/atmos) -"pD" = ( -/mob/living/simple_animal/hostile/alien, -/obj/item/stack/ore/uranium, -/turf/open/misc/asteroid, -/area/ruin/space/has_grav) -"pE" = ( -/obj/machinery/airalarm/directional/north, -/obj/effect/mapping_helpers/airalarm/all_access, -/obj/effect/turf_decal/tile/purple/half{ - dir = 1 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/port_tarkon/developement) -"pF" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/glass, -/turf/open/floor/iron/airless, -/area/ruin/space/has_grav/port_tarkon/porthall) -"pH" = ( -/obj/effect/decal/cleanable/dirt, -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ - dir = 1 - }, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/power1) -"pJ" = ( -/obj/structure/cable, -/obj/effect/decal/cleanable/dirt, -/obj/machinery/power/apc/auto_name/directional/west, -/obj/effect/mapping_helpers/apc/no_charge, -/obj/effect/mapping_helpers/apc/unlocked, -/obj/effect/turf_decal/tile/yellow/anticorner{ - dir = 8 - }, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/toolstorage) -"pM" = ( -/obj/effect/decal/cleanable/dirt, -/obj/structure/cable, -/obj/machinery/firealarm/directional/east, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/afthall) -"pS" = ( -/obj/structure/fluff/empty_sleeper/bloodied, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon) -"pT" = ( -/obj/structure/chair/office, -/obj/effect/decal/cleanable/dirt, -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ - dir = 1 - }, -/obj/effect/turf_decal/tile/red/half, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/secoff) -"pU" = ( -/obj/machinery/atmospherics/components/unary/outlet_injector/monitored/carbon_input/tarkon{ - dir = 8 - }, -/turf/open/floor/engine/co2, -/area/ruin/space/has_grav/port_tarkon/atmos) -"pW" = ( -/obj/effect/decal/cleanable/dirt, -/obj/machinery/power/port_gen/pacman/super{ - name = "\improper emergency power generator"; - time_per_sheet = 40 - }, -/turf/open/floor/plating, -/area/ruin/space/has_grav/port_tarkon/atmos) -"pX" = ( -/obj/effect/decal/cleanable/dirt, -/obj/machinery/vending/clothing, -/obj/machinery/light/dim/directional/east, -/turf/open/floor/wood/large, -/area/ruin/space/has_grav/port_tarkon/dorms) -"pY" = ( -/obj/effect/decal/cleanable/dirt, -/obj/machinery/door/airlock/research/glass, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/port_tarkon/developement) -"qb" = ( -/obj/effect/decal/cleanable/dirt, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/flippedtable{ - dir = 1 - }, -/obj/effect/turf_decal/delivery/blue, -/obj/effect/turf_decal/tile/neutral/half{ - dir = 1 - }, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/centerhall) -"qd" = ( -/obj/machinery/atmospherics/components/unary/portables_connector{ - dir = 1 - }, -/obj/machinery/portable_atmospherics/canister/air, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/port_tarkon/atmos) -"qe" = ( -/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, -/area/ruin/space/has_grav/port_tarkon/observ) -"qf" = ( -/obj/effect/decal/cleanable/dirt, -/obj/machinery/button/door{ - id = "ptafthall"; - name = "shutter controls"; - pixel_x = -26 - }, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/afthall) -"qh" = ( -/obj/machinery/door/poddoor/shutters/preopen{ - id = "tarkonouter"; - name = "External Bay Shutters" - }, -/obj/effect/decal/cleanable/dirt, -/obj/effect/turf_decal/trimline/yellow/filled/warning, -/obj/effect/turf_decal/trimline/yellow/filled/warning{ - dir = 8 - }, -/turf/open/floor/iron/airless, -/area/ruin/space/has_grav/port_tarkon/storage) -"qi" = ( -/obj/effect/turf_decal/stripes/asteroid/line{ - dir = 6 - }, -/turf/open/misc/asteroid/airless, -/area/solars/tarkon) -"qk" = ( -/obj/effect/decal/cleanable/dirt, -/obj/structure/window/reinforced/spawner/directional/north, -/obj/effect/turf_decal/tile/blue/fourcorners, -/obj/machinery/computer/atmos_control/tarkon/oxygen_tank{ - dir = 4 - }, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/atmos) -"qr" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/turf_decal/sand/plating, -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/mining) -"qv" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/decal/cleanable/dirt, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/centerhall) -"qD" = ( -/obj/structure/lattice, -/mob/living/basic/carp, -/turf/open/space/basic, -/area/template_noop) -"qF" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/turf_decal/sand, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/mining) -"qH" = ( -/obj/structure/cable, -/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/decal/cleanable/generic, -/obj/effect/turf_decal/tile/brown/half{ - dir = 1 - }, -/turf/open/floor/iron/airless, -/area/ruin/space/has_grav/port_tarkon/storage) -"qL" = ( -/obj/effect/decal/cleanable/dirt, -/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/neutral/half, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/centerhall) -"qQ" = ( -/obj/structure/cable, -/obj/machinery/power/apc/auto_name/directional/north, -/obj/effect/mapping_helpers/apc/no_charge, -/obj/effect/mapping_helpers/apc/unlocked, -/obj/effect/decal/cleanable/dirt, -/obj/effect/turf_decal/tile/red/half{ - dir = 1 - }, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/secoff) -"qS" = ( -/obj/structure/cable, -/obj/effect/decal/cleanable/dirt, -/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/effect/mapping_helpers/apc/no_charge, -/obj/effect/mapping_helpers/apc/unlocked, -/obj/effect/decal/cleanable/generic, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/starboardhall) -"rd" = ( -/obj/machinery/hydroponics/soil, -/obj/effect/decal/cleanable/dirt, -/obj/machinery/light/small/directional/east, -/turf/open/floor/grass, -/area/ruin/space/has_grav/port_tarkon/garden) -"re" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/dirt, -/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/ruin/space/has_grav/port_tarkon/centerhall) -"rg" = ( -/obj/effect/turf_decal/stripes/asteroid/corner, -/turf/open/misc/asteroid/airless, -/area/solars/tarkon) -"rh" = ( -/turf/closed/wall, -/area/ruin/space/has_grav/port_tarkon/toolstorage) -"rk" = ( -/obj/structure/closet, -/obj/effect/decal/cleanable/dirt, -/obj/item/clothing/shoes/workboots/mining, -/obj/item/clothing/shoes/winterboots, -/obj/item/clothing/shoes/jackboots, -/obj/item/clothing/under/misc/nova/utility, -/obj/item/clothing/under/misc/nova/utility, -/obj/item/storage/backpack, -/obj/item/storage/backpack/duffelbag, -/obj/item/storage/backpack/satchel, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon) -"ro" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/turf_decal/tile/neutral/half{ - dir = 8 - }, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/centerhall) -"rt" = ( -/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/iron/dark, -/area/ruin/space/has_grav/port_tarkon/developement) -"ru" = ( -/obj/effect/decal/cleanable/dirt, -/obj/structure/table/reinforced, -/obj/effect/turf_decal/tile/brown/anticorner{ - dir = 1 - }, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/cargo) -"rv" = ( -/obj/structure/table, -/obj/item/storage/medkit/advanced, -/obj/item/storage/medkit/surgery, -/obj/effect/decal/cleanable/dirt, -/obj/machinery/airalarm/directional/east, -/obj/effect/mapping_helpers/airalarm/all_access, -/obj/effect/turf_decal/tile/blue/half{ - dir = 4 - }, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/trauma) -"rw" = ( -/obj/effect/decal/cleanable/dirt, -/obj/machinery/light_switch/directional/south, -/obj/effect/turf_decal/tile/neutral/half, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/centerhall) -"ry" = ( -/obj/effect/decal/cleanable/dirt, -/obj/machinery/firealarm/directional/east, -/obj/effect/turf_decal/tile/blue/half{ - dir = 4 - }, -/obj/machinery/light/dim/directional/east, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/port_tarkon/comms) -"rz" = ( -/obj/effect/decal/cleanable/dirt, -/obj/structure/rack, -/obj/item/assembly/igniter, -/obj/effect/turf_decal/tile/yellow/half{ - dir = 1 - }, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/toolstorage) -"rB" = ( -/obj/effect/decal/cleanable/dirt, -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ - dir = 8 - }, -/obj/machinery/airalarm/directional/south, -/obj/effect/mapping_helpers/airalarm/all_access, -/obj/effect/turf_decal/tile/brown/half, -/turf/open/floor/iron/airless, -/area/ruin/space/has_grav/port_tarkon/storage) -"rC" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/mob_spawn/ghost_role/human/tarkon/sci{ - dir = 1 - }, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon) -"rD" = ( -/obj/effect/decal/cleanable/dirt, -/obj/structure/closet, -/obj/item/storage/backpack/satchel/explorer, -/obj/item/clothing/mask/gas/explorer, -/obj/item/gps/mining, -/obj/item/storage/bag/ore, -/obj/effect/turf_decal/tile/brown/anticorner{ - dir = 8 - }, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/mining) -"rE" = ( -/obj/structure/alien/egg/burst, -/turf/open/misc/asteroid, -/area/ruin/space/has_grav) -"rF" = ( -/obj/effect/decal/cleanable/dirt, -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ - dir = 8 - }, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/port_tarkon/developement) -"rG" = ( -/obj/effect/decal/cleanable/dirt, -/mob/living/simple_animal/hostile/alien, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/port_tarkon/developement) -"rH" = ( -/obj/effect/decal/cleanable/dirt, -/obj/structure/table, -/obj/machinery/cell_charger, -/obj/machinery/light/dim/directional/east, -/obj/effect/turf_decal/tile/purple/half{ - dir = 4 - }, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/port_tarkon/developement) -"rK" = ( -/obj/effect/decal/cleanable/dirt, -/obj/machinery/door/poddoor/shutters/window/preopen{ - id = "tarkoninner"; - name = "Interior Bay Shutter" - }, -/obj/effect/turf_decal/trimline/yellow/filled/warning{ - dir = 1 - }, -/obj/effect/turf_decal/trimline/yellow/filled/warning{ - dir = 8 - }, -/turf/open/floor/iron/airless, -/area/ruin/space/has_grav/port_tarkon/storage) -"rL" = ( -/obj/effect/turf_decal/vg_decals/atmos/oxygen, -/obj/machinery/light/small/directional/west, -/obj/machinery/air_sensor/tarkon/oxygen_tank{ - pixel_x = -26 - }, -/turf/open/floor/engine/o2, -/area/ruin/space/has_grav/port_tarkon/atmos) -"rP" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/spawner/structure/window/reinforced/no_firelock, -/obj/machinery/door/firedoor/solid/closed, -/turf/open/floor/plating, -/area/ruin/space/has_grav/port_tarkon/forehall) -"rV" = ( -/obj/machinery/airalarm/directional/north, -/obj/effect/decal/cleanable/dirt, -/obj/effect/turf_decal/tile/yellow/half{ - dir = 1 - }, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/toolstorage) -"rW" = ( -/obj/effect/decal/cleanable/dirt, -/obj/machinery/airalarm/directional/north, -/obj/effect/mapping_helpers/airalarm/all_access, -/turf/open/floor/iron/airless, -/area/ruin/space/has_grav/port_tarkon/porthall) -"rZ" = ( -/obj/item/stack/tile/carpet/neon/simple/teal/nodots/sixty, -/turf/open/floor/plating, -/area/ruin/space/has_grav/port_tarkon/cargo) -"sa" = ( -/obj/machinery/power/turbine/inlet_compressor{ - dir = 4 - }, -/obj/effect/turf_decal/stripes/line{ - dir = 8 - }, -/obj/effect/turf_decal/stripes/red/line{ - dir = 8 - }, -/obj/structure/cable, -/turf/open/floor/engine/vacuum, -/area/ruin/space/has_grav/port_tarkon/atmos) -"sc" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/visible/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/dark/visible, -/obj/machinery/air_sensor/tarkon/incinerator_tank{ - pixel_x = -26 - }, -/turf/open/floor/engine/vacuum, -/area/ruin/space/has_grav/port_tarkon/atmos) -"sd" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/turf_decal/tile/brown{ - dir = 1 - }, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/starboardhall) -"sj" = ( -/obj/machinery/atmospherics/components/unary/vent_pump/siphon/monitored/nitrogen_output/tarkon{ - dir = 4 - }, -/turf/open/floor/engine/n2, -/area/ruin/space/has_grav/port_tarkon/atmos) -"sl" = ( -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/cafeteria, -/area/ruin/space/has_grav/port_tarkon/kitchen) -"sm" = ( -/obj/effect/decal/cleanable/dirt, -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ - dir = 8 - }, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon) -"sn" = ( -/obj/effect/decal/cleanable/dirt, -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ - dir = 1 - }, -/obj/effect/turf_decal/tile/neutral/half, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/centerhall) -"sq" = ( -/obj/effect/decal/cleanable/dirt, -/obj/structure/closet, -/obj/item/pickaxe/silver, -/obj/item/storage/backpack/duffelbag, -/obj/item/clothing/glasses/meson, -/obj/item/t_scanner/adv_mining_scanner/lesser, -/obj/effect/turf_decal/tile/brown/half, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/mining) -"sr" = ( -/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/turf_decal/tile/purple/half, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/port_tarkon/developement) -"sv" = ( -/turf/closed/mineral/random/high_chance, -/area/ruin/space/has_grav) -"sw" = ( -/obj/effect/decal/cleanable/dirt, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/turf/open/floor/wood/large, -/area/ruin/space/has_grav/port_tarkon/dorms) -"sB" = ( -/turf/open/floor/plating, -/area/ruin/space/has_grav/port_tarkon/atmos) -"sD" = ( -/obj/structure/table/wood, -/obj/item/flashlight/lamp/green, -/obj/effect/decal/cleanable/dirt, -/obj/effect/spawner/random/clothing/costume, -/turf/open/floor/carpet/black, -/area/ruin/space/has_grav/port_tarkon/dorms) -"sF" = ( -/obj/structure/alien/egg/burst, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/port_tarkon/developement) -"sI" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/turf_decal/delivery/red, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/forehall) -"sK" = ( -/obj/effect/decal/cleanable/dirt, -/obj/structure/chair/sofa/corp/left{ - dir = 1 - }, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/observ) -"sL" = ( -/obj/effect/spawner/structure/window/reinforced/plasma, -/turf/open/floor/plating, -/area/ruin/space/has_grav/port_tarkon/atmos) -"sM" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/xenoblood/xgibs, -/obj/effect/decal/cleanable/dirt, -/obj/machinery/firealarm/directional/west, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/forehall) -"sN" = ( -/obj/effect/decal/cleanable/dirt, -/obj/structure/frame/computer{ - dir = 8 - }, -/obj/item/circuitboard/computer/rdconsole, -/obj/effect/turf_decal/tile/purple/half{ - dir = 4 - }, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/port_tarkon/developement) -"sT" = ( -/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, -/obj/effect/decal/cleanable/blood/old, -/obj/structure/alien/weeds/node, -/obj/structure/alien/resin/wall, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/forehall) -"ta" = ( -/obj/structure/alien/resin/wall, -/turf/open/misc/asteroid, -/area/ruin/space/has_grav) -"tc" = ( -/obj/effect/decal/cleanable/dirt, -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/light_switch/directional/north, -/obj/machinery/firealarm/directional/south{ - pixel_y = -31 - }, -/turf/open/floor/wood/large, -/area/ruin/space/has_grav/port_tarkon/dorms) -"td" = ( -/obj/effect/decal/cleanable/dirt, -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ - dir = 8 - }, -/turf/open/floor/iron/cafeteria, -/area/ruin/space/has_grav/port_tarkon/kitchen) -"te" = ( -/obj/machinery/atmospherics/components/unary/vent_pump/high_volume/siphon/monitored/air_output/tarkon{ - dir = 4 - }, -/turf/open/floor/engine/vacuum, -/area/ruin/space/has_grav/port_tarkon/atmos) -"tf" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/dirt, -/obj/structure/trash_pile, -/turf/open/floor/plating, -/area/ruin/space/has_grav/port_tarkon/forehall) -"th" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/turf_decal/tile/brown/anticorner{ - dir = 8 - }, -/obj/effect/decal/cleanable/generic, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/starboardhall) -"tk" = ( -/obj/structure/table/reinforced, -/obj/effect/decal/cleanable/dirt, -/obj/machinery/vending/boozeomat, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/centerhall) -"tn" = ( -/obj/effect/decal/cleanable/dirt, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/port_tarkon/comms) -"to" = ( -/obj/effect/decal/cleanable/dirt, -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ - dir = 4 - }, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/centerhall) -"tp" = ( -/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, -/obj/machinery/light_switch/directional/south, -/obj/structure/alien/resin/wall, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/forehall) -"ts" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/spawner/structure/window/reinforced/no_firelock, -/obj/machinery/atmospherics/pipe/layer_manifold/purple/hidden{ - dir = 4 - }, -/turf/open/floor/plating, -/area/ruin/space/has_grav/port_tarkon/atmos) -"tt" = ( -/obj/structure/fence/cut/medium{ - dir = 4 - }, -/turf/open/misc/asteroid/airless, -/area/ruin/space/has_grav) -"tz" = ( -/obj/effect/decal/cleanable/blood/gibs/old, -/obj/effect/decal/cleanable/blood/tracks{ - dir = 4 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/port_tarkon/developement) -"tA" = ( -/obj/effect/decal/cleanable/dirt, -/obj/machinery/light/dim/directional/south, -/obj/effect/turf_decal/tile/purple/half, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/port_tarkon/developement) -"tC" = ( -/obj/structure/falsewall, -/turf/open/floor/plating, -/area/ruin/space/has_grav/port_tarkon/cargo) -"tE" = ( -/obj/effect/decal/cleanable/dirt, -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/airalarm/directional/north, -/obj/effect/mapping_helpers/airalarm/all_access, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/porthall) -"tH" = ( -/obj/effect/spawner/structure/window/reinforced, -/turf/open/floor/plating, -/area/ruin/space/has_grav/port_tarkon/centerhall) -"tI" = ( -/obj/effect/decal/cleanable/dirt, -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ - dir = 4 - }, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/afthall) -"tM" = ( -/obj/machinery/door/airlock/wood{ - id_tag = "ptdorm2"; - name = "Private Dorm 2" - }, -/obj/effect/decal/cleanable/dirt, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/door/firedoor/solid, -/turf/open/floor/wood/large, -/area/ruin/space/has_grav/port_tarkon/dorms) -"tN" = ( -/obj/effect/decal/cleanable/blood/tracks{ - dir = 6 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon) -"tQ" = ( -/obj/effect/decal/cleanable/dirt, -/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/ruin/space/has_grav/port_tarkon/porthall) -"tT" = ( -/obj/structure/closet, -/obj/machinery/firealarm/directional/east, -/obj/effect/decal/cleanable/dirt, -/obj/item/clothing/shoes/workboots/mining, -/obj/item/clothing/shoes/winterboots, -/obj/item/clothing/shoes/jackboots, -/obj/item/clothing/under/misc/nova/utility, -/obj/item/clothing/under/misc/nova/utility, -/obj/item/storage/backpack, -/obj/item/storage/backpack/duffelbag, -/obj/item/storage/backpack/satchel, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon) -"tV" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/turf_decal/sand/plating, -/obj/effect/turf_decal/tile/brown{ - dir = 4 - }, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/mining) -"tW" = ( -/obj/structure/closet/emcloset, -/obj/effect/decal/cleanable/dirt, -/obj/effect/turf_decal/tile/neutral/full, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/centerhall) -"tY" = ( -/obj/structure/bed/pod{ - dir = 1 - }, -/obj/item/bedsheet/random{ - dir = 1 - }, -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ - dir = 4 - }, -/obj/effect/decal/cleanable/dirt, -/obj/machinery/button/door/directional/south{ - id = "ptdorm1"; - name = "Door Lock Control"; - normaldoorcontrol = 1; - specialfunctions = 4 - }, -/turf/open/floor/carpet/purple, -/area/ruin/space/has_grav/port_tarkon/dorms) -"tZ" = ( -/obj/effect/decal/cleanable/dirt, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/structure/alien/weeds/node, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/port_tarkon/developement) -"ub" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/spawner/structure/window/reinforced/no_firelock, -/obj/machinery/atmospherics/pipe/layer_manifold/yellow/hidden{ - dir = 4 - }, -/turf/open/floor/plating, -/area/ruin/space/has_grav/port_tarkon/atmos) -"ud" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/turf_decal/sand, -/obj/machinery/firealarm/directional/east, -/obj/effect/turf_decal/tile/brown/half{ - dir = 4 - }, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/mining) -"ue" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/mob_spawn/ghost_role/human/tarkon{ - dir = 1 - }, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon) -"ug" = ( -/obj/effect/decal/cleanable/dirt, -/obj/structure/closet/firecloset, -/obj/effect/decal/remains/human, -/turf/open/floor/plating, -/area/ruin/space/has_grav/port_tarkon/forehall) -"ui" = ( -/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, -/obj/machinery/power/apc/auto_name/directional/north, -/obj/effect/mapping_helpers/apc/no_charge, -/obj/effect/mapping_helpers/apc/unlocked, -/obj/effect/turf_decal/tile/brown/half{ - dir = 1 - }, -/turf/open/floor/iron/airless, -/area/ruin/space/has_grav/port_tarkon/storage) -"ul" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/decal/cleanable/dirt, -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/centerhall) -"un" = ( -/obj/effect/decal/cleanable/blood, -/obj/item/stack/ore/gold, -/obj/item/stack/ore/gold, -/turf/open/misc/asteroid, -/area/ruin/space/has_grav) -"uo" = ( -/mob/living/basic/carp/mega, -/obj/structure/lattice, -/turf/open/misc/asteroid/airless, -/area/ruin/space/has_grav) -"up" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/blood, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/forehall) -"ut" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/spawner/random/entertainment/cigarette_pack, -/obj/structure/closet/crate/bin, -/obj/effect/turf_decal/tile/blue/anticorner{ - dir = 4 - }, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/port_tarkon/comms) -"uv" = ( -/turf/closed/wall, -/area/ruin/space/has_grav/port_tarkon) -"uw" = ( -/mob/living/simple_animal/hostile/alien, -/obj/item/stack/ore/gold, -/turf/open/misc/asteroid, -/area/ruin/space/has_grav) -"ux" = ( -/obj/effect/decal/cleanable/dirt, -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ - dir = 4 - }, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon) -"uy" = ( -/turf/closed/mineral/random/high_chance, -/area/ruin/space/has_grav/port_tarkon/porthall) -"uC" = ( -/obj/structure/closet/crate/bin{ - pixel_y = 8 - }, -/obj/effect/spawner/random/entertainment/cigarette_pack, -/obj/item/reagent_containers/cup/rag, -/turf/open/floor/iron/white, -/area/ruin/space/has_grav/port_tarkon/centerhall) -"uD" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/blood/tracks, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon) -"uJ" = ( -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/airless, -/area/ruin/space/has_grav/port_tarkon/porthall) -"uK" = ( -/obj/machinery/atmospherics/components/unary/portables_connector/visible{ - dir = 4 - }, -/obj/effect/decal/cleanable/dirt, -/obj/effect/turf_decal/tile/purple/fourcorners, -/obj/structure/cable, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/atmos) -"uM" = ( -/obj/effect/decal/cleanable/dirt, -/obj/machinery/light/dim/directional/east, -/obj/effect/turf_decal/tile/brown/half{ - dir = 4 - }, -/turf/open/floor/iron/airless, -/area/ruin/space/has_grav/port_tarkon/storage) -"uN" = ( -/obj/effect/decal/cleanable/dirt, -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ - dir = 4 - }, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/port_tarkon/comms) -"uP" = ( -/obj/effect/decal/cleanable/dirt, -/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/ruin/space/has_grav/port_tarkon/porthall) -"uR" = ( -/turf/open/floor/iron/freezer, -/area/ruin/space/has_grav/port_tarkon/kitchen) -"uU" = ( -/obj/effect/turf_decal/stripes/asteroid/line{ - dir = 5 - }, -/turf/open/misc/asteroid/airless, -/area/solars/tarkon) -"uV" = ( -/obj/structure/lattice, -/obj/effect/decal/cleanable/glass, -/obj/effect/decal/cleanable/dirt, -/turf/open/misc/asteroid, -/area/ruin/space/has_grav) -"vc" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/forehall) -"vd" = ( -/obj/effect/decal/cleanable/dirt, -/obj/machinery/atmospherics/pipe/smart/manifold4w/general, -/obj/structure/cable, -/obj/machinery/power/apc/auto_name/directional/east, -/obj/effect/mapping_helpers/apc/no_charge, -/obj/effect/mapping_helpers/apc/unlocked, -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ - dir = 8 - }, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/centerhall) -"ve" = ( -/obj/machinery/door/airlock/wood{ - id_tag = "ptdorm3"; - name = "Private Dorm 3" - }, -/obj/effect/decal/cleanable/dirt, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/door/firedoor/solid, -/turf/open/floor/wood/large, -/area/ruin/space/has_grav/port_tarkon/dorms) -"vj" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/dirt, -/obj/structure/closet/crate/internals, -/obj/item/tank/internals/oxygen, -/obj/item/clothing/mask/breath, -/obj/item/clothing/suit/space/eva, -/obj/item/clothing/head/helmet/space/eva, -/obj/effect/turf_decal/tile/yellow/anticorner{ - dir = 4 - }, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/power1) -"vl" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/turf_decal/tile/blue/half{ - dir = 4 - }, -/obj/structure/closet/crate/freezer/blood, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/trauma) -"vm" = ( -/obj/effect/decal/cleanable/dirt, -/obj/machinery/airalarm/directional/north, -/obj/machinery/light/directional/north, -/obj/effect/turf_decal/tile/brown/half{ - dir = 1 - }, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/cargo) -"vn" = ( -/obj/effect/decal/cleanable/dirt, -/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/ruin/space/has_grav/port_tarkon/starboardhall) -"vo" = ( -/obj/effect/decal/cleanable/dirt, -/obj/structure/table/wood/fancy/blue, -/obj/effect/turf_decal/tile/blue/half{ - dir = 1 - }, -/obj/machinery/cell_charger, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/port_tarkon/comms) -"vp" = ( -/obj/machinery/atmospherics/miner/n2o, -/turf/open/floor/engine/n2o, -/area/ruin/space/has_grav/port_tarkon/atmos) -"vq" = ( -/obj/effect/decal/cleanable/dirt, -/obj/machinery/light/broken/directional/north, -/obj/effect/decal/cleanable/glass, -/obj/structure/alien/resin/wall, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/forehall) -"vs" = ( -/obj/effect/decal/cleanable/dirt, -/obj/machinery/light/broken/directional/west, -/obj/effect/turf_decal/tile/purple/half{ - dir = 8 - }, -/obj/machinery/computer{ - desc = "A computer long since rendered non-functional due to lack of maintenance. Spitting out error messages."; - dir = 4; - name = "Broken Computer" - }, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/port_tarkon/developement) -"vv" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/blood/gibs/old, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/forehall) -"vy" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/turf_decal/tile/purple/half{ - dir = 8 - }, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/port_tarkon/developement) -"vz" = ( -/obj/machinery/door/airlock/public, -/obj/effect/decal/cleanable/dirt, -/obj/machinery/door/firedoor/closed{ - opacity = 1 - }, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/porthall) -"vA" = ( -/obj/structure/cable, -/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/turf_decal/tile/brown/half{ - dir = 8 - }, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/starboardhall) -"vB" = ( -/obj/effect/decal/cleanable/dirt, -/obj/structure/curtain, -/obj/effect/turf_decal/tile/purple/half, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/port_tarkon/developement) -"vC" = ( -/turf/closed/wall/r_wall, -/area/ruin/space/has_grav/port_tarkon/secoff) -"vE" = ( -/obj/structure/lattice, -/turf/open/misc/asteroid/airless, -/area/ruin/space/has_grav) -"vF" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/dirt, -/obj/item/gps/computer/space{ - gpstag = "Port Tarkon - Defcon 3" - }, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/centerhall) -"vG" = ( -/obj/effect/decal/cleanable/dirt, -/obj/structure/cable, -/obj/effect/turf_decal/tile/blue/half{ - dir = 1 - }, -/obj/machinery/power/apc/auto_name/directional/north, -/obj/effect/mapping_helpers/apc/no_charge, -/obj/effect/mapping_helpers/apc/unlocked, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/port_tarkon/comms) -"vN" = ( -/obj/machinery/iv_drip, -/obj/effect/decal/cleanable/dirt, -/obj/effect/turf_decal/tile/blue/half{ - dir = 8 - }, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/trauma) -"vO" = ( -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/plating, -/area/ruin/space/has_grav/port_tarkon/atmos) -"vQ" = ( -/mob/living/simple_animal/hostile/alien/drone, -/obj/effect/decal/cleanable/blood/tracks{ - dir = 5 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/port_tarkon/developement) -"vR" = ( -/obj/machinery/light/small/directional/north, -/turf/open/floor/iron/white, -/area/ruin/space/has_grav/port_tarkon/centerhall) -"vT" = ( -/obj/effect/decal/cleanable/dirt, -/obj/structure/cable, -/turf/open/floor/plating, -/area/ruin/space/has_grav/port_tarkon/atmos) -"vU" = ( -/obj/effect/decal/cleanable/dirt, -/obj/machinery/firealarm/directional/north, -/mob/living/simple_animal/hostile/alien/drone, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/forehall) -"vW" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/turf_decal/tile/brown/half, -/obj/effect/decal/cleanable/generic, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/cargo) -"wa" = ( -/obj/structure/cable, -/obj/machinery/power/terminal{ - dir = 4 - }, -/obj/effect/decal/cleanable/dirt, -/obj/effect/turf_decal/tile/yellow/half{ - dir = 8 - }, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/power1) -"wc" = ( -/obj/structure/table, -/obj/item/clothing/suit/toggle/labcoat/medical, -/obj/effect/decal/cleanable/dirt, -/obj/machinery/power/apc/auto_name/directional/west, -/obj/effect/mapping_helpers/apc/no_charge, -/obj/effect/mapping_helpers/apc/unlocked, -/obj/structure/cable, -/obj/effect/turf_decal/tile/blue/half{ - dir = 8 - }, -/obj/item/clothing/suit/toggle/labcoat/medical, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/trauma) -"wh" = ( -/obj/structure/chair/stool/directional/south, -/obj/effect/turf_decal/stripes{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden, -/turf/open/floor/engine, -/area/ruin/space/has_grav/port_tarkon/atmos) -"wl" = ( -/obj/effect/decal/cleanable/glass, -/mob/living/simple_animal/hostile/alien/sentinel, -/obj/effect/turf_decal/tile/purple/half{ - dir = 1 - }, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/port_tarkon/developement) -"wm" = ( -/obj/effect/decal/cleanable/dirt, -/obj/item/stock_parts/matter_bin, -/obj/machinery/light/dim/directional/east, -/obj/effect/turf_decal/tile/brown/half{ - dir = 4 - }, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/mining) -"wo" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/blood, -/obj/structure/cable, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/forehall) -"wt" = ( -/obj/effect/decal/cleanable/dirt, -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ - dir = 8 - }, -/turf/open/floor/iron/airless, -/area/ruin/space/has_grav/port_tarkon/porthall) -"ww" = ( -/obj/machinery/airalarm/directional/north, -/obj/effect/mapping_helpers/airalarm/all_access, -/obj/effect/decal/cleanable/dirt, -/obj/effect/turf_decal/tile/neutral/half{ - dir = 1 - }, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/centerhall) -"wx" = ( -/obj/effect/decal/cleanable/blood/gibs/old, -/obj/structure/alien/weeds/node, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/port_tarkon/developement) -"wC" = ( -/obj/effect/turf_decal/tile/yellow/full, -/obj/effect/decal/cleanable/dirt, -/obj/structure/rack/shelf, -/obj/effect/spawner/random/engineering/tool, -/obj/effect/spawner/random/engineering/tool, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/toolstorage) -"wQ" = ( -/obj/effect/decal/cleanable/dirt, -/obj/structure/window/reinforced/tinted/spawner/directional/south, -/obj/machinery/light/dim/directional/west, -/obj/effect/turf_decal/tile/purple/half{ - dir = 8 - }, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/port_tarkon/developement) -"wV" = ( -/obj/machinery/power/solar, -/obj/effect/turf_decal/stripes/asteroid/line, -/turf/open/misc/asteroid/airless, -/area/solars/tarkon) -"wW" = ( -/obj/machinery/atmospherics/components/binary/dp_vent_pump/high_volume/incinerator_tarkon{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/visible/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/dark/visible, -/turf/open/floor/engine/vacuum, -/area/ruin/space/has_grav/port_tarkon/atmos) -"wY" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/turf_decal/tile/blue{ - dir = 8 - }, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/port_tarkon/comms) -"wZ" = ( -/obj/structure/cable, -/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/turf_decal/tile/brown/half{ - dir = 8 - }, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/mining) -"xc" = ( -/obj/machinery/light/warm/directional/west, -/obj/effect/decal/cleanable/dirt, -/obj/effect/turf_decal/tile/neutral/anticorner{ - dir = 1 - }, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/centerhall) -"xi" = ( -/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, -/area/ruin/space/has_grav/port_tarkon/trauma) -"xj" = ( -/obj/machinery/atmospherics/components/unary/vent_pump/siphon/monitored/carbon_output/tarkon{ - dir = 8 - }, -/turf/open/floor/engine/co2, -/area/ruin/space/has_grav/port_tarkon/atmos) -"xl" = ( -/obj/effect/mob_spawn/ghost_role/human/tarkon/sec{ - dir = 4 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon) -"xp" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/spawner/structure/window/reinforced/no_firelock, -/obj/machinery/atmospherics/pipe/layer_manifold/green/hidden{ - dir = 4 - }, -/turf/open/floor/plating, -/area/ruin/space/has_grav/port_tarkon/atmos) -"xq" = ( -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, -/obj/effect/decal/cleanable/generic, -/obj/effect/decal/cleanable/dirt, -/obj/machinery/airalarm/directional/west, -/obj/effect/mapping_helpers/airalarm/all_access, -/turf/open/floor/carpet/black, -/area/ruin/space/has_grav/port_tarkon/dorms) -"xs" = ( -/obj/effect/decal/cleanable/dirt, -/mob/living/basic/carp, -/turf/open/floor/iron/airless, -/area/ruin/space/has_grav/port_tarkon/porthall) -"xt" = ( -/turf/closed/wall/r_wall, -/area/ruin/space/has_grav/port_tarkon/atmos) -"xu" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/turf_decal/tile/purple/anticorner{ - dir = 8 - }, -/obj/structure/table/reinforced, -/obj/item/circuitboard/machine/anomaly_refinery, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/port_tarkon/developement) -"xB" = ( -/obj/machinery/igniter/incinerator_tarkon, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/visible/layer2{ - dir = 5 - }, -/turf/open/floor/engine/vacuum, -/area/ruin/space/has_grav/port_tarkon/atmos) -"xC" = ( -/obj/effect/decal/cleanable/dirt, -/obj/item/mod/construction/broken_core, -/obj/item/mod/construction/broken_core, -/obj/item/mod/construction/broken_core, -/obj/item/mod/construction/broken_core, -/obj/item/mod/construction/broken_core, -/obj/structure/closet/crate/secure/science, -/obj/effect/turf_decal/caution/stand_clear, -/obj/effect/turf_decal/tile/brown/half, -/turf/open/floor/iron/airless, -/area/ruin/space/has_grav/port_tarkon/storage) -"xH" = ( -/obj/machinery/ammo_workbench/unlocked, -/obj/effect/decal/cleanable/dirt, -/obj/effect/turf_decal/tile/red/half{ - dir = 1 - }, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/secoff) -"xL" = ( -/obj/machinery/power/smes/engineering{ - charge = 0 - }, -/obj/effect/decal/cleanable/dirt, -/obj/structure/cable, -/obj/effect/turf_decal/tile/yellow/half{ - dir = 1 - }, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/power1) -"xN" = ( -/obj/effect/decal/cleanable/dirt, -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/observ) -"xO" = ( -/obj/structure/cable, -/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/turf_decal/tile/brown/half, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/cargo) -"xP" = ( -/obj/structure/cable, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/plating, -/area/ruin/space/has_grav/port_tarkon/power1) -"xS" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/generic, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/cargo) -"xT" = ( -/obj/structure/alien/weeds/node, -/obj/effect/decal/cleanable/dirt, -/obj/effect/turf_decal/tile/purple/half{ - dir = 1 - }, -/obj/effect/decal/cleanable/blood/tracks{ - dir = 4 - }, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/port_tarkon/developement) -"xU" = ( -/obj/effect/decal/cleanable/dirt, -/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/neutral/half{ - dir = 4 - }, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/centerhall) -"xY" = ( -/obj/effect/decal/cleanable/dirt, -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ - dir = 4 - }, -/obj/structure/curtain, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/port_tarkon/developement) -"xZ" = ( -/obj/machinery/firealarm/directional/north, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/porthall) -"yd" = ( -/turf/closed/wall/r_wall, -/area/ruin/space/has_grav/port_tarkon/forehall) -"ye" = ( -/obj/effect/turf_decal/stripes/asteroid/line{ - dir = 1 - }, -/turf/open/misc/asteroid/airless, -/area/solars/tarkon) -"yi" = ( -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/forehall) -"yj" = ( -/obj/machinery/firealarm/directional/east, -/obj/effect/decal/cleanable/dirt, -/obj/effect/turf_decal/tile/neutral/anticorner, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/centerhall) -"yl" = ( -/obj/effect/decal/cleanable/dirt, -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ - dir = 4 - }, -/obj/structure/table/wood, -/obj/effect/spawner/random/trash/cigbutt, -/obj/effect/spawner/random/trash/food_packaging, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/observ) -"ym" = ( -/obj/effect/decal/cleanable/dirt, -/obj/machinery/door/poddoor/shutters/window/preopen{ - id = "tarkoninner"; - name = "Interior Bay Shutter" - }, -/obj/effect/turf_decal/trimline/yellow/filled/warning{ - dir = 1 - }, -/obj/effect/turf_decal/trimline/yellow/filled/warning{ - dir = 4 - }, -/turf/open/floor/iron/airless, -/area/ruin/space/has_grav/port_tarkon/storage) -"yn" = ( -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/garden) -"yt" = ( -/obj/effect/decal/cleanable/dirt, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/flippedtable{ - dir = 1 - }, -/obj/structure/cable, -/obj/effect/turf_decal/tile/neutral/anticorner{ - dir = 4 - }, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/centerhall) -"yv" = ( -/obj/effect/decal/cleanable/dirt, -/obj/machinery/vending/coffee, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/afthall) -"yx" = ( -/obj/effect/decal/cleanable/dirt, -/obj/structure/frame/machine, -/obj/item/circuitboard/machine/mechfab, -/obj/effect/turf_decal/tile/purple/half{ - dir = 1 - }, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/port_tarkon/developement) -"yy" = ( -/obj/effect/decal/cleanable/dirt, -/obj/structure/table/wood/fancy/blue, -/obj/effect/turf_decal/tile/blue/anticorner{ - dir = 1 - }, -/obj/machinery/recharger, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/port_tarkon/comms) -"yz" = ( -/obj/effect/decal/cleanable/dirt, -/obj/machinery/firealarm/directional/west, -/obj/structure/table/optable, -/obj/effect/decal/cleanable/xenoblood/xgibs/up, -/obj/effect/turf_decal/tile/purple/half{ - dir = 8 - }, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/port_tarkon/developement) -"yA" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/carpet/red, -/area/ruin/space/has_grav/port_tarkon/dorms) -"yB" = ( -/obj/effect/decal/cleanable/blood/tracks, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/centerhall) -"yC" = ( -/obj/machinery/air_sensor/tarkon/mix_tank{ - pixel_x = -26 - }, -/turf/open/floor/engine/vacuum, -/area/ruin/space/has_grav/port_tarkon/atmos) -"yD" = ( -/obj/effect/decal/cleanable/dirt, -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ - dir = 4 - }, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/starboardhall) -"yF" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/turf_decal/tile/yellow/half, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/toolstorage) -"yG" = ( -/obj/structure/alien/resin/wall, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/port_tarkon/developement) -"yO" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/blood/tracks, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon) -"yS" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/curtain, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/trauma) -"yU" = ( -/obj/effect/spawner/structure/window/reinforced, -/turf/open/floor/plating, -/area/ruin/space/has_grav/port_tarkon/mining) -"yY" = ( -/obj/effect/spawner/structure/window/reinforced, -/turf/open/floor/plating, -/area/ruin/space/has_grav/port_tarkon/toolstorage) -"zb" = ( -/obj/effect/turf_decal/sand/plating, -/obj/structure/fence/door/opened{ - dir = 4 - }, -/turf/open/floor/plating/airless, -/area/ruin/space/has_grav) -"zc" = ( -/obj/effect/decal/cleanable/dirt, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/turf/open/floor/plating, -/area/ruin/space/has_grav/port_tarkon/atmos) -"zd" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/turf_decal/sand/plating, -/obj/effect/turf_decal/tile/brown, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/mining) -"zf" = ( -/turf/closed/wall/r_wall, -/area/ruin/space/has_grav/port_tarkon/mining) -"zm" = ( -/obj/structure/cable, -/obj/machinery/power/terminal{ - dir = 4 - }, -/obj/effect/decal/cleanable/dirt, -/obj/effect/turf_decal/tile/yellow/anticorner{ - dir = 1 - }, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/power1) -"zo" = ( -/turf/open/misc/asteroid/airless, -/area/ruin/space/has_grav) -"zp" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/turf_decal/delivery/blue, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/starboardhall) -"zt" = ( -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/secoff) -"zB" = ( -/obj/effect/decal/cleanable/dirt, -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, -/mob/living/simple_animal/hostile/alien/drone, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/forehall) -"zC" = ( -/obj/machinery/power/turbine/turbine_outlet{ - dir = 4 - }, -/obj/structure/cable, -/turf/open/floor/engine/vacuum, -/area/ruin/space/has_grav/port_tarkon/atmos) -"zJ" = ( -/obj/structure/cable, -/obj/effect/decal/cleanable/dirt, -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ - dir = 4 - }, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/power1) -"zK" = ( -/obj/effect/decal/cleanable/dirt, -/obj/structure/alien/resin/wall, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/forehall) -"zL" = ( -/obj/effect/decal/cleanable/dirt, -/obj/machinery/firealarm/directional/west, -/obj/effect/turf_decal/tile/blue/half{ - dir = 8 - }, -/obj/machinery/light/dim/directional/west, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/port_tarkon/comms) -"zM" = ( -/obj/structure/cable, -/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/turf_decal/tile/brown/half{ - dir = 4 - }, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/starboardhall) -"zO" = ( -/obj/effect/decal/cleanable/dirt, -/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/ruin/space/has_grav/port_tarkon/centerhall) -"zT" = ( -/obj/effect/decal/cleanable/dirt, -/obj/structure/table/reinforced, -/obj/item/stack/sheet/glass/fifty, -/obj/item/stack/sheet/iron/fifty, -/obj/item/holosign_creator/atmos, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/port_tarkon/atmos) -"zW" = ( -/obj/effect/decal/cleanable/dirt, -/obj/structure/cable, -/obj/effect/decal/cleanable/dirt, -/obj/machinery/light/directional/north, -/obj/effect/turf_decal/tile/yellow/half{ - dir = 1 - }, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/power1) -"zZ" = ( -/obj/structure/window/reinforced/tinted/spawner/directional/south, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/trauma) -"Ae" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/trauma) -"Af" = ( -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/port_tarkon/comms) -"Ak" = ( -/obj/machinery/atmospherics/components/unary/outlet_injector/monitored/incinerator_input/tarkon{ - dir = 8 - }, -/turf/open/floor/engine/vacuum, -/area/ruin/space/has_grav/port_tarkon/atmos) -"Al" = ( -/obj/structure/cable, -/obj/machinery/power/solar, -/obj/effect/turf_decal/stripes/asteroid/line{ - dir = 9 - }, -/turf/open/misc/asteroid/airless, -/area/solars/tarkon) -"An" = ( -/obj/effect/decal/cleanable/dirt, -/obj/structure/fireaxecabinet/directional/north, -/obj/machinery/pipedispenser, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/atmos) -"As" = ( -/obj/machinery/power/shuttle_engine/propulsion{ - dir = 8 - }, -/turf/open/floor/plating, -/area/ruin/space/has_grav) -"At" = ( -/obj/machinery/power/solar, -/obj/structure/cable, -/obj/effect/turf_decal/stripes/asteroid/line, -/turf/open/misc/asteroid/airless, -/area/solars/tarkon) -"Au" = ( -/obj/structure/cable, -/obj/machinery/door/airlock/engineering{ - name = "Engineering" - }, -/obj/effect/decal/cleanable/dirt, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/door/firedoor/solid, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/power1) -"Az" = ( -/obj/effect/decal/cleanable/dirt, -/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/dark, -/area/ruin/space/has_grav/port_tarkon/developement) -"AA" = ( -/obj/effect/turf_decal/stripes{ - dir = 1 - }, -/obj/effect/decal/cleanable/dirt, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/visible/layer2{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/dark/visible, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/port_tarkon/atmos) -"AD" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/turf_decal/tile/brown/half{ - dir = 8 - }, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/starboardhall) -"AF" = ( -/obj/machinery/atmospherics/components/unary/outlet_injector/monitored/oxygen_input/tarkon{ - dir = 4 - }, -/turf/open/floor/engine/o2, -/area/ruin/space/has_grav/port_tarkon/atmos) -"AG" = ( -/obj/effect/decal/cleanable/dirt, -/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/ruin/space/has_grav/port_tarkon/starboardhall) -"AM" = ( -/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, -/obj/effect/turf_decal/delivery/white, -/obj/effect/turf_decal/tile/yellow{ - dir = 4 - }, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/power1) -"AN" = ( -/obj/effect/spawner/structure/window/reinforced/no_firelock, -/obj/machinery/door/firedoor/solid/closed, -/turf/open/floor/plating, -/area/ruin/space/has_grav/port_tarkon/porthall) -"AP" = ( -/turf/closed/wall/r_wall, -/area/ruin/space/has_grav/port_tarkon/centerhall) -"Ba" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/turf_decal/sand, -/obj/machinery/light/small/directional/east, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/mining) -"Bg" = ( -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/starboardhall) -"Bi" = ( -/obj/machinery/atmospherics/components/binary/pump/off/general{ - dir = 4 - }, -/obj/effect/decal/cleanable/dirt, -/obj/effect/turf_decal/tile/neutral/fourcorners, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/atmos) -"Bj" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/spawner/structure/window/reinforced/no_firelock, -/obj/machinery/atmospherics/pipe/layer_manifold/cyan/hidden{ - dir = 4 - }, -/turf/open/floor/plating, -/area/ruin/space/has_grav/port_tarkon/atmos) -"Bk" = ( -/obj/structure/cable, -/obj/machinery/power/solar, -/obj/effect/turf_decal/stripes/asteroid/line, -/turf/open/misc/asteroid/airless, -/area/solars/tarkon) -"Bn" = ( -/obj/machinery/door/airlock/public{ - name = "Kitchen Freezer" - }, -/obj/machinery/door/firedoor/solid, -/turf/open/floor/iron/freezer, -/area/ruin/space/has_grav/port_tarkon/kitchen) -"Bo" = ( -/obj/effect/decal/cleanable/dirt, -/obj/machinery/firealarm/directional/east, -/obj/effect/turf_decal/tile/brown/half{ - dir = 4 - }, -/obj/machinery/computer/order_console/mining{ - forced_express = 1; - express_cost_multiplier = 1 - }, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/mining) -"Bp" = ( -/obj/structure/window/reinforced/tinted/spawner/directional/south, -/obj/effect/decal/cleanable/dirt, -/obj/effect/turf_decal/tile/blue/half{ - dir = 8 - }, -/obj/item/circuitboard/machine/sleeper, -/obj/structure/closet/secure_closet/medical1, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/trauma) -"Bq" = ( -/obj/structure/sign/warning/vacuum, -/turf/closed/wall/r_wall, -/area/ruin/space/has_grav/port_tarkon/mining) -"Bz" = ( -/obj/effect/decal/cleanable/dirt, -/obj/structure/alien/weeds/node, -/turf/open/floor/plating, -/area/ruin/space/has_grav/port_tarkon/forehall) -"BF" = ( -/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/turf_decal/tile/brown/half{ - dir = 1 - }, -/turf/open/floor/iron/airless, -/area/ruin/space/has_grav/port_tarkon/storage) -"BG" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/ash, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/forehall) -"BI" = ( -/obj/machinery/door/airlock/public/glass{ - name = "Fore Primary Hallway" - }, -/obj/effect/decal/cleanable/blood/tracks, -/obj/effect/decal/cleanable/dirt, -/obj/structure/barricade/wooden/crude, -/obj/machinery/door/firedoor/solid/closed, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/forehall) -"BJ" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/glass, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/forehall) -"BK" = ( -/obj/structure/lattice, -/turf/open/misc/asteroid, -/area/ruin/space/has_grav/port_tarkon/atmos) -"BM" = ( -/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, -/obj/effect/decal/cleanable/blood/old, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/forehall) -"BS" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/turf_decal/delivery/white, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/power1) -"BU" = ( -/obj/effect/turf_decal/tile/brown{ - dir = 1 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/mining) -"BV" = ( -/obj/machinery/light/warm/directional/south, -/obj/effect/decal/cleanable/dirt, -/obj/effect/turf_decal/tile/neutral/anticorner{ - dir = 8 - }, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/centerhall) -"BW" = ( -/obj/structure/cable, -/obj/effect/decal/cleanable/dirt, -/obj/effect/turf_decal/tile/yellow/half, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/power1) -"BX" = ( -/obj/effect/decal/cleanable/dirt, -/obj/machinery/light/dim/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, -/area/ruin/space/has_grav/port_tarkon/porthall) -"Cc" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/turf_decal/tile/brown/half{ - dir = 8 - }, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/mining) -"Ce" = ( -/obj/structure/cable, -/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/turf_decal/tile/brown{ - dir = 4 - }, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/cargo) -"Cf" = ( -/obj/effect/decal/cleanable/blood/tracks{ - dir = 6 - }, -/obj/effect/decal/cleanable/blood/tracks{ - dir = 5 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/port_tarkon/developement) -"Ch" = ( -/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/iron/dark, -/area/ruin/space/has_grav/port_tarkon/comms) -"Ci" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/dirt, -/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/tile/neutral{ - dir = 4 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/centerhall) -"Ck" = ( -/obj/structure/rack, -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/dirt, -/obj/effect/turf_decal/tile/yellow/anticorner{ - dir = 8 - }, -/obj/item/stock_parts/cell/high, -/obj/item/stock_parts/cell/high, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/power1) -"Cm" = ( -/obj/effect/decal/cleanable/dirt, -/obj/structure/closet/crate, -/obj/item/stack/sheet/glass/fifty, -/obj/item/stack/sheet/glass{ - amount = 25 - }, -/turf/open/floor/plating, -/area/ruin/space/has_grav/port_tarkon/forehall) -"Cp" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/blood/gibs/old, -/obj/structure/cable, -/obj/effect/turf_decal/delivery/blue, -/obj/structure/alien/resin/wall, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/forehall) -"Cq" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/turf_decal/delivery/blue, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/forehall) -"Cs" = ( -/obj/machinery/door/airlock/mining/glass, -/obj/effect/decal/cleanable/dirt, -/obj/effect/turf_decal/sand, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/door/firedoor/solid/closed, -/obj/effect/mapping_helpers/airlock/cyclelink_helper, -/obj/effect/mapping_helpers/airlock/access/all/tarkon/general, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/mining) -"Cv" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/generic, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/starboardhall) -"Cw" = ( -/obj/effect/decal/cleanable/dirt, -/obj/structure/table, -/obj/item/stack/sheet/mineral/gold{ - amount = 25 - }, -/obj/effect/turf_decal/tile/purple/half{ - dir = 4 - }, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/port_tarkon/developement) -"Cx" = ( -/obj/effect/decal/cleanable/dirt, -/obj/structure/chair/sofa/corp/right{ - dir = 1 - }, -/obj/effect/spawner/random/trash/cigbutt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/observ) -"Cy" = ( -/obj/machinery/door/airlock/wood{ - id_tag = "ptdorm1"; - name = "Private Dorm 1" - }, -/obj/effect/decal/cleanable/dirt, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/door/firedoor/solid, -/turf/open/floor/wood/large, -/area/ruin/space/has_grav/port_tarkon/dorms) -"CA" = ( -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ - dir = 4 - }, -/obj/effect/decal/cleanable/dirt, -/obj/structure/flippedtable{ - dir = 8 - }, -/obj/effect/turf_decal/tile/neutral/half{ - dir = 8 - }, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/centerhall) -"CB" = ( -/obj/effect/turf_decal/delivery/white, -/obj/effect/turf_decal/tile/purple/half{ - dir = 1 - }, -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/port_tarkon/developement) -"CE" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/effect/decal/cleanable/dirt, -/obj/machinery/light/dim/directional/east, -/obj/effect/turf_decal/tile/red/anticorner, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/secoff) -"CG" = ( -/obj/machinery/light/warm/directional/west, -/obj/effect/decal/cleanable/dirt, -/obj/effect/turf_decal/tile/neutral/half{ - dir = 8 - }, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/centerhall) -"CI" = ( -/obj/structure/cable, -/obj/effect/decal/cleanable/dirt, -/obj/effect/turf_decal/tile/yellow/half{ - dir = 8 - }, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/power1) -"CL" = ( -/obj/structure/cable, -/obj/effect/decal/cleanable/dirt, -/obj/machinery/door/airlock/mining/glass, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/door/firedoor/solid/closed, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/mining) -"CM" = ( -/obj/effect/decal/cleanable/dirt, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/turf_decal/tile/brown{ - dir = 8 - }, -/turf/open/floor/iron/airless, -/area/ruin/space/has_grav/port_tarkon/storage) -"CP" = ( -/obj/structure/cable, -/obj/effect/decal/cleanable/dirt, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/atmos) -"CS" = ( -/obj/structure/table/wood, -/obj/item/flashlight/lamp, -/obj/effect/decal/cleanable/dirt, -/obj/effect/spawner/random/clothing/costume, -/turf/open/floor/carpet/cyan, -/area/ruin/space/has_grav/port_tarkon/dorms) -"CV" = ( -/obj/structure/cable, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/power1) -"CW" = ( -/obj/effect/decal/cleanable/dirt, -/obj/machinery/airalarm/directional/north, -/obj/effect/mapping_helpers/airalarm/all_access, -/obj/structure/table/wood/fancy/blue, -/obj/effect/turf_decal/tile/blue/half{ - dir = 1 - }, -/obj/item/coin, -/obj/item/coin, -/obj/machinery/light/directional/north, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/port_tarkon/comms) -"CX" = ( -/obj/machinery/light/dim/directional/north, -/obj/effect/decal/cleanable/dirt, -/obj/structure/rack, -/obj/item/screwdriver, -/obj/item/wrench, -/obj/effect/turf_decal/tile/yellow/half{ - dir = 1 - }, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/toolstorage) -"CY" = ( -/obj/structure/cable, -/obj/effect/decal/cleanable/dirt, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/light/dim/directional/east, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/starboardhall) -"CZ" = ( -/obj/effect/decal/cleanable/dirt, -/obj/item/stock_parts/servo, -/obj/effect/turf_decal/tile/brown/half{ - dir = 4 - }, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/mining) -"Da" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/turf_decal/tile/brown/half, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/starboardhall) -"Dc" = ( -/obj/structure/bed/nest, -/obj/effect/mob_spawn/corpse/human/damaged, -/obj/item/raw_anomaly_core/random, -/turf/open/misc/asteroid, -/area/ruin/space/has_grav) -"De" = ( -/obj/effect/decal/cleanable/dirt, -/obj/structure/table/wood, -/obj/effect/spawner/random/trash/food_packaging, -/obj/item/broken_bottle, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/observ) -"Dk" = ( -/obj/item/stack/spacecash/c100, -/obj/item/stack/spacecash/c100{ - pixel_x = 4; - pixel_y = 7 - }, -/obj/item/stack/spacecash/c100{ - pixel_x = 4; - pixel_y = -8 - }, -/obj/item/stack/spacecash/c20{ - pixel_x = -4; - pixel_y = 3 - }, -/obj/item/stack/spacecash/c20{ - pixel_y = 10 - }, -/obj/item/stack/spacecash/c20{ - pixel_x = 5 - }, -/obj/item/stack/spacecash/c10{ - pixel_x = -4; - pixel_y = -5 - }, -/obj/item/stack/spacecash/c10{ - pixel_x = -6; - pixel_y = 12 - }, -/obj/item/stack/spacecash/c10{ - pixel_x = 4; - pixel_y = 4 - }, -/obj/item/mod/module/visor/rave, -/turf/open/floor/plating, -/area/ruin/space/has_grav/port_tarkon/cargo) -"Dv" = ( -/obj/effect/decal/cleanable/dirt, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/turf/open/floor/iron/airless, -/area/ruin/space/has_grav/port_tarkon/storage) -"DA" = ( -/obj/effect/decal/cleanable/dirt, -/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/tile/neutral/anticorner, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/centerhall) -"DD" = ( -/obj/effect/decal/cleanable/dirt, -/obj/structure/table/reinforced, -/obj/machinery/cell_charger, -/obj/item/clothing/gloves/color/yellow, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/port_tarkon/atmos) -"DG" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/glass, -/obj/structure/alien/resin/wall, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/forehall) -"DK" = ( -/obj/structure/alien/weeds/node, -/turf/open/misc/asteroid, -/area/ruin/space/has_grav) -"DN" = ( -/obj/effect/decal/cleanable/dirt, -/obj/machinery/light_switch/directional/north, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/starboardhall) -"DO" = ( -/obj/machinery/light/broken/directional/north, -/obj/effect/turf_decal/tile/purple/half{ - dir = 1 - }, -/obj/effect/decal/cleanable/glass, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/port_tarkon/developement) -"DP" = ( -/obj/machinery/computer{ - desc = "A computer long since rendered non-functional due to lack of maintenance. Spitting out error messages."; - dir = 8; - name = "Broken Computer" - }, -/obj/effect/decal/cleanable/dirt, -/obj/effect/turf_decal/tile/red/half, -/obj/item/paper/fluff/ruins/tarkon/detain, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/secoff) -"DQ" = ( -/obj/item/stack/ore/iron, -/obj/item/stack/ore/iron, -/obj/item/stack/ore/iron, -/obj/item/stack/ore/iron, -/obj/item/stack/ore/iron, -/turf/open/misc/asteroid, -/area/ruin/space/has_grav) -"DS" = ( -/obj/effect/decal/cleanable/blood/tracks, -/obj/effect/decal/cleanable/dirt, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/flippedtable{ - dir = 1 - }, -/obj/effect/turf_decal/tile/neutral/half{ - dir = 1 - }, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/centerhall) -"DZ" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/turf_decal/tile/blue/half{ - dir = 8 - }, -/obj/machinery/light_switch/directional/west, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/port_tarkon/comms) -"Eb" = ( -/mob/living/basic/carp, -/turf/open/misc/asteroid/airless, -/area/ruin/space/has_grav) -"Ed" = ( -/obj/effect/decal/cleanable/dirt, -/obj/machinery/light/small/directional/south, -/obj/effect/turf_decal/tile/purple/half, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/port_tarkon/developement) -"Ef" = ( -/obj/effect/decal/cleanable/dirt, -/obj/machinery/cryopod{ - dir = 1 - }, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/centerhall) -"Ek" = ( -/obj/effect/decal/cleanable/dirt, -/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/cafeteria, -/area/ruin/space/has_grav/port_tarkon/kitchen) -"El" = ( -/obj/effect/decal/cleanable/dirt, -/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/large, -/area/ruin/space/has_grav/port_tarkon/dorms) -"Eq" = ( -/obj/effect/decal/cleanable/dirt, -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ - dir = 4 - }, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/afthall) -"Er" = ( -/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/alien/weeds/node, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/port_tarkon/developement) -"Es" = ( -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/mining) -"Et" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/decal/cleanable/dirt, -/obj/machinery/door/firedoor/solid/closed, -/obj/machinery/door/airlock/public/glass{ - name = "Port Primary Hallway" - }, -/obj/structure/cable, -/turf/open/floor/plating, -/area/ruin/space/has_grav/port_tarkon/porthall) -"Eu" = ( -/obj/effect/decal/cleanable/blood, -/obj/effect/decal/cleanable/blood/tracks, -/obj/effect/decal/cleanable/blood/gibs/limb{ - pixel_x = -20; - pixel_y = -5 - }, -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/dirt, -/obj/machinery/airalarm/directional/west, -/obj/effect/mapping_helpers/airalarm/all_access, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/forehall) -"Ex" = ( -/obj/effect/turf_decal/vg_decals/atmos/mix, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/visible/layer2, -/turf/open/floor/engine/vacuum, -/area/ruin/space/has_grav/port_tarkon/atmos) -"Ez" = ( -/obj/effect/decal/cleanable/dirt, -/obj/structure/chair/wood{ - dir = 1 - }, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/observ) -"EA" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/dirt, -/obj/effect/spawner/random/maintenance, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/centerhall) -"EB" = ( -/obj/machinery/iv_drip, -/obj/structure/window/reinforced/tinted/spawner/directional/south, -/obj/effect/decal/cleanable/dirt, -/obj/machinery/light/small/directional/east, -/obj/effect/turf_decal/tile/blue/half{ - dir = 4 - }, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/trauma) -"EC" = ( -/obj/effect/decal/cleanable/dirt, -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ - dir = 1 - }, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/secoff) -"EE" = ( -/obj/effect/decal/cleanable/dirt, -/obj/structure/table, -/obj/item/lighter, -/obj/effect/turf_decal/tile/blue/half{ - dir = 4 - }, -/obj/item/tape/ruins/tarkon, -/obj/machinery/button/door{ - id = "ptcomms"; - name = "shutter controls" - }, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/port_tarkon/comms) -"EH" = ( -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/port_tarkon/developement) -"EJ" = ( -/obj/effect/decal/cleanable/dirt, -/turf/open/misc/asteroid/airless, -/area/solars/tarkon) -"EN" = ( -/obj/structure/sign/warning/deathsposal, -/turf/closed/wall, -/area/ruin/space/has_grav/port_tarkon/power1) -"EO" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/generic, -/turf/open/floor/iron/airless, -/area/ruin/space/has_grav/port_tarkon/storage) -"EQ" = ( -/obj/effect/spawner/structure/window/reinforced/no_firelock, -/obj/machinery/door/poddoor/shutters{ - id = "ptobservatory" - }, -/turf/open/floor/plating, -/area/ruin/space/has_grav/port_tarkon/observ) -"EV" = ( -/obj/structure/curtain, -/obj/effect/decal/cleanable/dirt, -/obj/effect/turf_decal/tile/blue/half{ - dir = 1 - }, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/trauma) -"EW" = ( -/mob/living/basic/carp/mega, -/turf/open/space/basic, -/area/template_noop) -"EY" = ( -/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/cable, -/obj/effect/turf_decal/tile/blue{ - dir = 1 - }, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/port_tarkon/comms) -"Fb" = ( -/obj/effect/decal/cleanable/dirt, -/obj/structure/closet/emcloset, -/obj/effect/turf_decal/tile/neutral/full, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/centerhall) -"Fe" = ( -/obj/machinery/door/airlock/public/glass{ - name = "Crew Storage" - }, -/obj/machinery/door/firedoor/solid, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon) -"Fh" = ( -/obj/effect/turf_decal/stripes{ - dir = 1 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/port_tarkon/atmos) -"Fk" = ( -/obj/structure/table/reinforced, -/obj/effect/decal/cleanable/dirt, -/obj/item/storage/pouch/ammo, -/obj/item/storage/pouch/ammo, -/obj/effect/decal/cleanable/dirt, -/obj/machinery/firealarm/directional/north, -/obj/effect/turf_decal/tile/red/half{ - dir = 1 - }, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/secoff) -"Fl" = ( -/obj/item/electronics/apc, -/obj/item/electronics/apc, -/obj/item/electronics/airlock, -/obj/item/electronics/airlock, -/obj/item/electronics/airalarm, -/obj/item/electronics/airalarm, -/obj/structure/closet/crate/engineering/electrical{ - name = "electronics crate" - }, -/obj/item/electronics/tracker, -/obj/item/stack/cable_coil, -/obj/item/clothing/gloves/color/yellow, -/obj/item/circuitboard/computer/atmos_control/tarkon/carbon_tank, -/obj/item/circuitboard/computer/atmos_control/tarkon/mix_tank, -/obj/item/circuitboard/computer/atmos_control/tarkon/nitrogen_tank, -/obj/item/circuitboard/computer/atmos_control/tarkon/incinerator, -/obj/item/circuitboard/computer/atmos_control/tarkon/oxygen_tank, -/obj/item/circuitboard/computer/atmos_control/tarkon/plasma_tank, -/obj/item/circuitboard/computer/tarkon_driver, -/turf/open/floor/plating, -/area/ruin/space/has_grav/port_tarkon/forehall) -"Fm" = ( -/obj/structure/table/reinforced, -/obj/item/clothing/gloves/color/yellow, -/obj/item/paper/fluff/ruins/oldstation/generator_manual, -/obj/item/wirecutters, -/obj/item/wrench, -/obj/effect/decal/cleanable/dirt, -/obj/structure/cable, -/turf/open/floor/plating, -/area/ruin/space/has_grav/port_tarkon/power1) -"Fq" = ( -/obj/effect/decal/cleanable/dirt, -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, -/obj/effect/decal/cleanable/glass, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/mining) -"Fr" = ( -/obj/machinery/atmospherics/pipe/layer_manifold/scrubbers/visible, -/turf/closed/wall/r_wall, -/area/ruin/space/has_grav/port_tarkon/atmos) -"Fs" = ( -/obj/machinery/airlock_sensor/incinerator_tarkon{ - pixel_x = 6; - pixel_y = 23 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden, -/turf/open/floor/engine/vacuum, -/area/ruin/space/has_grav/port_tarkon/atmos) -"Ft" = ( -/obj/item/solar_assembly, -/obj/effect/turf_decal/stripes/asteroid/line, -/turf/open/misc/asteroid/airless, -/area/solars/tarkon) -"FB" = ( -/obj/item/flashlight/lantern, -/obj/item/flashlight/lantern, -/obj/item/flashlight/lantern, -/obj/item/flashlight/lantern, -/obj/structure/table, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon) -"FC" = ( -/turf/open/floor/mineral/titanium, -/area/ruin/space/has_grav) -"FE" = ( -/obj/structure/lattice, -/turf/open/space/basic, -/area/template_noop) -"FF" = ( -/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, -/area/ruin/space/has_grav/port_tarkon/forehall) -"FG" = ( -/obj/item/shovel, -/turf/open/misc/asteroid/airless, -/area/ruin/space/has_grav) -"FM" = ( -/obj/structure/alien/resin/wall, -/obj/effect/turf_decal/tile/purple/half{ - dir = 1 - }, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/port_tarkon/developement) -"FN" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/decal/cleanable/dirt, -/obj/machinery/light_switch/directional/south, -/obj/effect/turf_decal/tile/yellow/anticorner, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/toolstorage) -"FR" = ( -/obj/effect/decal/cleanable/dirt, -/obj/structure/table, -/obj/effect/turf_decal/tile/blue/half, -/obj/item/encryptionkey/headset_cargo/tarkon, -/obj/item/encryptionkey/headset_cargo/tarkon, -/obj/item/encryptionkey/headset_cargo/tarkon, -/obj/item/encryptionkey/headset_cargo/tarkon, -/obj/item/encryptionkey/headset_cargo/tarkon, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/port_tarkon/comms) -"FS" = ( -/obj/structure/table/reinforced, -/obj/item/reagent_containers/condiment/enzyme, -/obj/effect/decal/cleanable/dirt, -/obj/item/reagent_containers/condiment/sugar, -/turf/open/floor/iron/cafeteria, -/area/ruin/space/has_grav/port_tarkon/kitchen) -"FT" = ( -/obj/machinery/power/turbine/core_rotor{ - dir = 4; - mapping_id = "tarkon_turbine" - }, -/obj/structure/cable, -/turf/open/floor/engine/vacuum, -/area/ruin/space/has_grav/port_tarkon/atmos) -"FU" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, -/obj/effect/decal/cleanable/dirt, -/obj/effect/turf_decal/tile/yellow/half{ - dir = 4 - }, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/toolstorage) -"FX" = ( -/obj/structure/table, -/obj/item/multitool, -/obj/effect/decal/cleanable/dirt, -/obj/item/storage/belt/utility/full, -/obj/item/paper/fluff/ruins/tarkon/designdoc, -/obj/effect/turf_decal/tile/yellow/half, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/power1) -"FY" = ( -/obj/structure/lattice, -/obj/effect/decal/cleanable/glass, -/turf/open/misc/asteroid/airless, -/area/ruin/space/has_grav/port_tarkon/porthall) -"FZ" = ( -/obj/effect/decal/cleanable/dirt, -/obj/machinery/light/small/directional/east, -/obj/machinery/light_switch/directional/east, -/turf/open/floor/iron/cafeteria, -/area/ruin/space/has_grav/port_tarkon/kitchen) -"Gb" = ( -/obj/effect/decal/cleanable/dirt, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/turf_decal/tile/brown/half{ - dir = 1 - }, -/turf/open/floor/iron/airless, -/area/ruin/space/has_grav/port_tarkon/storage) -"Gd" = ( -/obj/structure/table/reinforced, -/obj/machinery/reagentgrinder{ - desc = "Used to grind things up into raw materials and liquids."; - pixel_y = 5 - }, -/obj/effect/decal/cleanable/dirt, -/obj/machinery/light/small/directional/west, -/turf/open/floor/iron/cafeteria, -/area/ruin/space/has_grav/port_tarkon/kitchen) -"Gf" = ( -/obj/effect/decal/cleanable/dirt, -/obj/structure/table/wood, -/obj/machinery/light/dim/directional/east, -/obj/effect/spawner/random/trash/food_packaging, -/obj/item/broken_bottle, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/observ) -"Gk" = ( -/obj/machinery/door/airlock/multi_tile/public/glass{ - dir = 8 - }, -/obj/effect/turf_decal/tile/blue/half, -/obj/machinery/door/firedoor/solid, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/comms) -"Gl" = ( -/obj/effect/decal/cleanable/dirt, -/obj/structure/table/wood, -/obj/effect/spawner/random/trash/food_packaging, -/obj/effect/spawner/random/trash/food_packaging, -/obj/item/paper/crumpled/fluff/tarkon, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/observ) -"Gn" = ( -/obj/effect/decal/cleanable/blood/old, -/obj/effect/decal/cleanable/blood/tracks, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/port_tarkon/developement) -"Gp" = ( -/obj/machinery/light/small/directional/north, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden, -/turf/open/floor/engine/vacuum, -/area/ruin/space/has_grav/port_tarkon/atmos) -"Gs" = ( -/obj/effect/decal/cleanable/dirt, -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/garden) -"Gt" = ( -/obj/machinery/hydroponics/soil, -/obj/effect/decal/cleanable/dirt, -/obj/machinery/firealarm/directional/south{ - pixel_y = -31 - }, -/turf/open/floor/grass, -/area/ruin/space/has_grav/port_tarkon/garden) -"Gu" = ( -/obj/structure/cable, -/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/turf_decal/tile/brown/half{ - dir = 1 - }, -/turf/open/floor/iron/airless, -/area/ruin/space/has_grav/port_tarkon/storage) -"Gv" = ( -/obj/effect/decal/cleanable/blood/gibs/torso, -/obj/machinery/light/broken/directional/north, -/obj/effect/turf_decal/tile/purple/half{ - dir = 1 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/port_tarkon/developement) -"Gx" = ( -/obj/structure/lattice, -/obj/effect/decal/cleanable/dirt, -/turf/open/misc/asteroid, -/area/ruin/space/has_grav/port_tarkon/forehall) -"Gy" = ( -/obj/effect/turf_decal/stripes/asteroid/line{ - dir = 8 - }, -/turf/open/misc/asteroid/airless, -/area/solars/tarkon) -"GB" = ( -/obj/effect/turf_decal/vg_decals/atmos/nitrous_oxide, -/obj/machinery/light/small/directional/east, -/obj/machinery/air_sensor/tarkon/nitrous_tank{ - pixel_x = 26 - }, -/turf/open/floor/engine/n2o, -/area/ruin/space/has_grav/port_tarkon/atmos) -"GD" = ( -/obj/effect/decal/cleanable/glass, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/forehall) -"GE" = ( -/obj/effect/spawner/structure/window/reinforced/plasma, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden{ - dir = 8 - }, -/turf/open/floor/plating, -/area/ruin/space/has_grav/port_tarkon/atmos) -"GF" = ( -/obj/structure/bed, -/obj/effect/decal/cleanable/dirt, -/obj/effect/turf_decal/tile/blue/anticorner{ - dir = 1 - }, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/trauma) -"GM" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/centerhall) -"GR" = ( -/obj/machinery/door/airlock/engineering{ - name = "Backup Generator Room" - }, -/obj/structure/cable, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/power1) -"GS" = ( -/obj/machinery/hydroponics/soil, -/obj/effect/decal/cleanable/dirt, -/obj/machinery/light/small/directional/south, -/obj/machinery/light_switch/directional/south, -/turf/open/floor/grass, -/area/ruin/space/has_grav/port_tarkon/garden) -"GT" = ( -/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/cable, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/afthall) -"GU" = ( -/obj/effect/decal/cleanable/glass, -/obj/effect/turf_decal/tile/purple/half{ - dir = 4 - }, -/obj/structure/bed/nest, -/obj/effect/mob_spawn/corpse/human, -/obj/effect/mob_spawn/corpse/facehugger, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/port_tarkon/developement) -"GW" = ( -/obj/effect/decal/cleanable/dirt, -/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/tile/neutral/anticorner{ - dir = 4 - }, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/centerhall) -"GY" = ( -/turf/closed/wall, -/area/ruin/space/has_grav/port_tarkon/atmos) -"Ha" = ( -/obj/machinery/power/port_gen/pacman/super{ - name = "\improper emergency power generator"; - time_per_sheet = 40 - }, -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/greenglow, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/plating, -/area/ruin/space/has_grav/port_tarkon/power1) -"Hb" = ( -/obj/effect/turf_decal/stripes/asteroid/line{ - dir = 10 - }, -/turf/open/misc/asteroid/airless, -/area/solars/tarkon) -"Hf" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/cable, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/secoff) -"Hg" = ( -/obj/effect/decal/cleanable/dirt, -/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/ruin/space/has_grav/port_tarkon/starboardhall) -"Hi" = ( -/obj/structure/table/wood, -/obj/item/flashlight/lamp/green, -/obj/effect/decal/cleanable/generic, -/obj/effect/decal/cleanable/dirt, -/obj/item/clothing/neck/mantle, -/turf/open/floor/carpet/red, -/area/ruin/space/has_grav/port_tarkon/dorms) -"Hk" = ( -/obj/structure/cable, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/secoff) -"Hn" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/turf_decal/tile/neutral/half{ - dir = 4 - }, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/centerhall) -"Ho" = ( -/obj/effect/turf_decal/stripes/asteroid/corner{ - dir = 1 - }, -/turf/open/misc/asteroid/airless, -/area/solars/tarkon) -"Hq" = ( -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/plating, -/area/ruin/space/has_grav) -"Ht" = ( -/obj/effect/decal/cleanable/dirt, -/obj/machinery/airalarm/directional/north, -/obj/effect/mapping_helpers/airalarm/all_access, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/porthall) -"Hy" = ( -/turf/closed/wall, -/area/ruin/space/has_grav/port_tarkon/mining) -"HB" = ( -/obj/effect/decal/cleanable/dirt, -/obj/structure/table/reinforced, -/obj/machinery/recharger, -/obj/effect/turf_decal/tile/red/anticorner{ - dir = 1 - }, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/secoff) -"HF" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/toolstorage) -"HH" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/turf_decal/sand/plating, -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ - dir = 1 - }, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/mining) -"HQ" = ( -/obj/machinery/door/airlock/research, -/obj/machinery/door/firedoor/solid, -/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/ruin/space/has_grav/port_tarkon/developement) -"HS" = ( -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/power1) -"HU" = ( -/obj/machinery/atmospherics/components/unary/portables_connector/visible{ - dir = 8 - }, -/obj/effect/decal/cleanable/dirt, -/obj/effect/turf_decal/tile/neutral/fourcorners, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/atmos) -"HW" = ( -/obj/machinery/door/airlock/public, -/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, -/obj/machinery/door/firedoor/solid, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/observ) -"HX" = ( -/obj/effect/decal/cleanable/dirt, -/obj/structure/cable, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/trauma) -"HY" = ( -/obj/effect/turf_decal/tile/purple/anticorner{ - dir = 4 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/port_tarkon/developement) -"Ib" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/mapping_helpers/broken_floor, -/turf/open/floor/plating/airless, -/area/ruin/space/has_grav/port_tarkon/porthall) -"Ic" = ( -/obj/effect/decal/cleanable/dirt, -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ - dir = 4 - }, -/obj/structure/cable, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/port_tarkon/developement) -"Id" = ( -/obj/effect/decal/cleanable/dirt, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/port_tarkon/developement) -"Ie" = ( -/obj/effect/decal/cleanable/dirt, -/obj/structure/chair/office{ - dir = 8 - }, -/obj/effect/turf_decal/tile/blue{ - dir = 8 - }, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/port_tarkon/comms) -"If" = ( -/obj/item/solar_assembly, -/obj/structure/cable, -/obj/effect/turf_decal/stripes/asteroid/line{ - dir = 1 - }, -/turf/open/misc/asteroid/airless, -/area/solars/tarkon) -"Ih" = ( -/obj/machinery/door/airlock/multi_tile/public/glass, -/obj/machinery/door/firedoor/solid/closed, -/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/ruin/space/has_grav/port_tarkon/storage) -"Ij" = ( -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ - dir = 1 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/carpet/cyan, -/area/ruin/space/has_grav/port_tarkon/dorms) -"Ik" = ( -/obj/effect/decal/cleanable/dirt, -/obj/structure/table/rolling, -/obj/item/scalpel, -/obj/item/clothing/gloves/latex, -/obj/item/circular_saw, -/obj/effect/turf_decal/tile/purple/anticorner{ - dir = 1 - }, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/port_tarkon/developement) -"Im" = ( -/obj/structure/bed/pod{ - dir = 1 - }, -/obj/item/bedsheet/random{ - dir = 1 - }, -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ - dir = 4 - }, -/obj/effect/decal/cleanable/generic, -/obj/effect/decal/cleanable/dirt, -/obj/machinery/button/door/directional/north{ - id = "ptdorm2"; - name = "Door Lock Control"; - normaldoorcontrol = 1; - specialfunctions = 4 - }, -/turf/open/floor/carpet/cyan, -/area/ruin/space/has_grav/port_tarkon/dorms) -"Io" = ( -/obj/effect/decal/cleanable/dirt, -/mob/living/basic/carp, -/obj/effect/turf_decal/caution/stand_clear, -/obj/effect/turf_decal/tile/brown/half, -/turf/open/floor/iron/airless, -/area/ruin/space/has_grav/port_tarkon/storage) -"Iw" = ( -/turf/closed/wall, -/area/ruin/space/has_grav/port_tarkon/power1) -"Ix" = ( -/obj/machinery/door/poddoor/shutters/preopen{ - id = "tarkonouter"; - name = "External Bay Shutters" - }, -/obj/effect/decal/cleanable/dirt, -/obj/effect/turf_decal/trimline/yellow/filled/warning, -/obj/effect/turf_decal/trimline/yellow/filled/warning{ - dir = 4 - }, -/turf/open/floor/iron/airless, -/area/ruin/space/has_grav/port_tarkon/storage) -"IB" = ( -/obj/machinery/door/airlock/research, -/obj/machinery/door/firedoor/solid, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/developement) -"ID" = ( -/obj/effect/decal/cleanable/dirt, -/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/neutral, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/centerhall) -"IE" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/decal/cleanable/dirt, -/obj/effect/turf_decal/tile/neutral/anticorner{ - dir = 8 - }, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/centerhall) -"IF" = ( -/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, -/area/ruin/space/has_grav/port_tarkon/secoff) -"IG" = ( -/obj/structure/table/reinforced, -/obj/item/clothing/gloves/color/yellow, -/obj/item/paper/fluff/ruins/oldstation/generator_manual, -/obj/item/wirecutters, -/obj/item/wrench, -/obj/effect/decal/cleanable/dirt, -/obj/item/circuitboard/machine/rtg, -/turf/open/floor/plating, -/area/ruin/space/has_grav/port_tarkon/atmos) -"IH" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/structure/curtain, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/trauma) -"IK" = ( -/obj/effect/decal/cleanable/dirt, -/obj/structure/closet, -/obj/item/pickaxe/mini, -/obj/item/storage/backpack/duffelbag, -/obj/item/clothing/mask/gas/explorer, -/obj/item/clothing/shoes/workboots/mining, -/obj/item/gps/mining, -/obj/item/storage/bag/ore, -/obj/item/storage/belt/mining, -/obj/effect/turf_decal/tile/brown/anticorner, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/mining) -"IL" = ( -/obj/structure/cable, -/obj/effect/turf_decal/stripes/asteroid/line{ - dir = 1 - }, -/turf/open/misc/asteroid/airless, -/area/solars/tarkon) -"IO" = ( -/obj/effect/decal/cleanable/dirt, -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ - dir = 1 - }, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/power1) -"IU" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/dirt, -/obj/structure/closet/crate/bin, -/obj/effect/spawner/random/trash/food_packaging, -/obj/effect/spawner/random/trash/food_packaging, -/turf/open/floor/iron/cafeteria, -/area/ruin/space/has_grav/port_tarkon/kitchen) -"IW" = ( -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ - dir = 4 - }, -/obj/structure/curtain, -/obj/structure/window/reinforced/tinted/spawner/directional/south, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/trauma) -"IY" = ( -/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, -/obj/machinery/power/apc/auto_name/directional/west, -/obj/effect/mapping_helpers/apc/no_charge, -/obj/effect/mapping_helpers/apc/unlocked, -/turf/open/floor/iron/airless, -/area/ruin/space/has_grav/port_tarkon/porthall) -"Ji" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/decal/cleanable/generic, -/obj/effect/decal/cleanable/dirt, -/obj/machinery/airalarm/directional/east, -/obj/effect/mapping_helpers/airalarm/all_access, -/turf/open/floor/carpet/purple, -/area/ruin/space/has_grav/port_tarkon/dorms) -"Jj" = ( -/obj/machinery/power/smes/engineering{ - charge = 0 - }, -/obj/effect/decal/cleanable/dirt, -/obj/structure/cable, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/power1) -"Jl" = ( -/obj/structure/closet, -/obj/effect/decal/cleanable/dirt, -/obj/item/clothing/under/rank/security/nova/utility/redsec, -/obj/item/clothing/under/rank/security/nova/utility, -/obj/item/clothing/shoes/workboots/mining, -/obj/item/clothing/shoes/winterboots, -/obj/item/clothing/shoes/jackboots, -/obj/item/storage/backpack/duffelbag/sec, -/obj/item/storage/backpack/duffelbag/sec/redsec, -/obj/item/storage/backpack/satchel/sec/redsec, -/obj/item/storage/backpack/security/redsec, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon) -"Jm" = ( -/obj/effect/decal/cleanable/dirt, -/obj/machinery/light/dim/directional/west, -/obj/effect/turf_decal/tile/brown/half{ - dir = 8 - }, -/turf/open/floor/iron/airless, -/area/ruin/space/has_grav/port_tarkon/storage) -"Jp" = ( -/obj/item/crowbar, -/obj/item/crowbar, -/obj/item/crowbar, -/obj/item/crowbar, -/obj/structure/table, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon) -"Jq" = ( -/obj/machinery/cryopod{ - dir = 1 - }, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/centerhall) -"Ju" = ( -/obj/structure/table/reinforced, -/obj/machinery/microwave{ - desc = "Cooks and boils stuff, somehow."; - pixel_x = -3; - pixel_y = 5 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/cafeteria, -/area/ruin/space/has_grav/port_tarkon/kitchen) -"Jv" = ( -/turf/closed/wall, -/area/ruin/space/has_grav/port_tarkon/dorms) -"Jw" = ( -/obj/effect/decal/cleanable/dirt, -/obj/structure/ore_box, -/obj/effect/turf_decal/tile/brown/anticorner{ - dir = 8 - }, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/mining) -"Jx" = ( -/obj/effect/decal/cleanable/dirt, -/obj/machinery/vending/cola, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/afthall) -"Jz" = ( -/obj/effect/decal/cleanable/dirt, -/obj/structure/frame/machine, -/obj/item/circuitboard/machine/destructive_analyzer, -/obj/effect/turf_decal/tile/purple/half{ - dir = 4 - }, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/port_tarkon/developement) -"JB" = ( -/obj/effect/decal/cleanable/dirt, -/obj/structure/closet/crate/radiation, -/obj/item/stack/sheet/mineral/uranium/five, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/forehall) -"JE" = ( -/obj/effect/decal/cleanable/dirt, -/obj/machinery/airalarm/directional/north, -/obj/machinery/light/directional/north, -/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/ruin/space/has_grav/port_tarkon/starboardhall) -"JF" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/turf_decal/tile/yellow/anticorner{ - dir = 4 - }, -/obj/effect/decal/cleanable/generic, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/toolstorage) -"JI" = ( -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/cargo) -"JL" = ( -/obj/effect/decal/cleanable/dirt, -/obj/structure/table/reinforced, -/obj/machinery/light/dim/directional/west, -/obj/item/paper_bin, -/obj/effect/turf_decal/tile/brown/half{ - dir = 8 - }, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/cargo) -"JM" = ( -/obj/effect/decal/cleanable/dirt, -/obj/structure/closet/crate/secure/engineering, -/obj/item/rcd_ammo, -/obj/item/rcd_ammo, -/obj/item/rcd_ammo, -/obj/item/construction/rcd/arcd/mattermanipulator, -/turf/open/floor/iron/airless, -/area/ruin/space/has_grav/port_tarkon/storage) -"JN" = ( -/obj/machinery/door/airlock/external/ruin{ - name = "Engineering External Access" - }, -/obj/effect/mapping_helpers/airlock/cyclelink_helper, -/obj/structure/cable, -/obj/effect/decal/cleanable/dirt, -/obj/effect/mapping_helpers/airlock/access/all/tarkon/general, -/turf/open/floor/plating, -/area/ruin/space/has_grav/port_tarkon/power1) -"JO" = ( -/obj/structure/bed/pod, -/obj/item/bedsheet/random, -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ - dir = 8 - }, -/obj/effect/decal/cleanable/dirt, -/obj/machinery/button/door/directional/south{ - id = "ptdorm3"; - name = "Door Lock Control"; - normaldoorcontrol = 1; - specialfunctions = 4 - }, -/turf/open/floor/carpet/black, -/area/ruin/space/has_grav/port_tarkon/dorms) -"JQ" = ( -/obj/effect/decal/cleanable/dirt, -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ - dir = 8 - }, -/obj/machinery/light/small/directional/east, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/secoff) -"JT" = ( -/obj/effect/decal/cleanable/blood/gibs/old, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/plating, -/area/ruin/space/has_grav) -"JW" = ( -/obj/machinery/door/airlock/public/glass{ - name = "Aft Primary Hallway" - }, -/obj/effect/decal/cleanable/dirt, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/cable, -/obj/machinery/door/firedoor/solid, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/afthall) -"JX" = ( -/obj/effect/decal/cleanable/dirt, -/obj/structure/table, -/obj/item/paper/crumpled, -/obj/effect/turf_decal/tile/blue/anticorner, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/port_tarkon/comms) -"JY" = ( -/obj/structure/window/reinforced/tinted/spawner/directional/south, -/obj/structure/closet/secure_closet/medical2{ - req_access = list("medical") - }, -/obj/effect/decal/cleanable/dirt, -/obj/effect/turf_decal/tile/blue/half{ - dir = 4 - }, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/trauma) -"Kc" = ( -/obj/effect/decal/cleanable/dirt, -/obj/machinery/computer{ - desc = "A computer long since rendered non-functional due to lack of maintenance. Spitting out error messages."; - dir = 1; - name = "Broken Computer" - }, -/obj/effect/turf_decal/tile/blue/anticorner{ - dir = 8 - }, -/obj/item/paper/fluff/ruins/tarkon/driverpitch, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/port_tarkon/comms) -"Ke" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 4 - }, -/obj/effect/turf_decal/stripes/line{ - dir = 8 - }, -/obj/machinery/door/poddoor/incinerator_atmos_main, -/turf/open/floor/engine/vacuum, -/area/ruin/space/has_grav/port_tarkon/atmos) -"Kf" = ( -/obj/effect/decal/cleanable/blood, -/turf/open/misc/asteroid, -/area/ruin/space/has_grav) -"Kg" = ( -/obj/effect/decal/cleanable/dirt, -/obj/structure/flippedtable{ - dir = 8 - }, -/obj/effect/turf_decal/tile/neutral/anticorner{ - dir = 8 - }, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/centerhall) -"Ki" = ( -/turf/closed/wall, -/area/ruin/space/has_grav/port_tarkon/centerhall) -"Kj" = ( -/obj/structure/alien/resin/wall, -/obj/effect/turf_decal/tile/purple/half, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/port_tarkon/developement) -"Kk" = ( -/obj/machinery/door/airlock/wood/glass, -/obj/effect/decal/cleanable/dirt, -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/door/firedoor/solid, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/starboardhall) -"Kl" = ( -/obj/effect/decal/cleanable/dirt, -/obj/machinery/light/directional/north, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/centerhall) -"Kp" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/turf_decal/tile/neutral/anticorner{ - dir = 4 - }, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/centerhall) -"Kr" = ( -/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/turf_decal/tile/brown{ - dir = 8 - }, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/mining) -"Ks" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/plating, -/area/ruin/space/has_grav/port_tarkon/forehall) -"Kw" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/turf_decal/tile/purple/half, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/port_tarkon/developement) -"KA" = ( -/obj/structure/table/reinforced, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/centerhall) -"KB" = ( -/obj/effect/decal/cleanable/dirt, -/obj/machinery/door/firedoor/solid/closed, -/obj/machinery/door/airlock/mining/glass, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/mining) -"KE" = ( -/obj/effect/decal/cleanable/dirt, -/obj/structure/table/reinforced, -/obj/item/flashlight, -/obj/effect/turf_decal/tile/yellow/anticorner{ - dir = 1 - }, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/toolstorage) -"KG" = ( -/obj/structure/sign/warning/docking, -/turf/closed/wall/r_wall/rust, -/area/ruin/space/has_grav/port_tarkon/mining) -"KJ" = ( -/obj/structure/table, -/obj/effect/decal/cleanable/dirt, -/obj/machinery/firealarm/directional/west, -/obj/machinery/light/dim/directional/west, -/obj/effect/turf_decal/tile/blue/half{ - dir = 8 - }, -/obj/item/defibrillator, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/trauma) -"KL" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/turf_decal/trimline/yellow/filled/warning{ - dir = 4 - }, -/turf/open/floor/iron/airless, -/area/ruin/space/has_grav/port_tarkon/storage) -"KM" = ( -/obj/machinery/button/ignition/incinerator/tarkon, -/turf/closed/wall/r_wall, -/area/ruin/space/has_grav/port_tarkon/atmos) -"KO" = ( -/obj/effect/decal/cleanable/dirt, -/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/ruin/space/has_grav/port_tarkon/garden) -"KP" = ( -/obj/effect/decal/cleanable/dirt, -/obj/structure/table/reinforced, -/obj/item/storage/box/stockparts/basic, -/obj/item/storage/toolbox/mechanical, -/obj/effect/turf_decal/tile/purple/half{ - dir = 1 - }, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/port_tarkon/developement) -"KQ" = ( -/obj/effect/decal/cleanable/dirt, -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, -/obj/effect/decal/cleanable/blood/old, -/obj/structure/alien/resin/wall, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/forehall) -"KS" = ( -/obj/effect/decal/cleanable/dirt, -/obj/structure/table/wood, -/obj/effect/spawner/random/trash/food_packaging, -/obj/effect/spawner/random/trash/food_packaging, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/observ) -"KV" = ( -/obj/structure/window/reinforced/tinted/spawner/directional/north, -/obj/machinery/door/window/left/directional/east{ - opacity = 1 - }, -/obj/machinery/shower/directional/east, -/turf/open/floor/iron/white, -/area/ruin/space/has_grav/port_tarkon/centerhall) -"KW" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/blood/gibs/body, -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/forehall) -"KZ" = ( -/obj/structure/table/reinforced, -/obj/item/reagent_containers/cup/beaker/large, -/obj/item/reagent_containers/cup/beaker/large, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/cafeteria, -/area/ruin/space/has_grav/port_tarkon/kitchen) -"La" = ( -/obj/effect/decal/cleanable/dirt, -/obj/structure/chair/sofa/corp{ - dir = 1 - }, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/observ) -"Ld" = ( -/obj/machinery/door/airlock/public/glass/incinerator/tarkon_exterior, -/obj/effect/mapping_helpers/airlock/locked, -/obj/effect/mapping_helpers/airlock/cyclelink_helper{ - dir = 1 - }, -/obj/effect/turf_decal/stripes, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/visible/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/dark/visible, -/turf/open/floor/engine/vacuum, -/area/ruin/space/has_grav/port_tarkon/atmos) -"Le" = ( -/obj/effect/decal/cleanable/dirt, -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/secoff) -"Lf" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/turf_decal/tile/brown/half, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/cargo) -"Lg" = ( -/obj/structure/bed/nest, -/obj/effect/decal/cleanable/blood/gibs/old, -/obj/effect/mob_spawn/corpse/human/damaged, -/turf/open/misc/asteroid, -/area/ruin/space/has_grav) -"Lh" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/turf_decal/tile/neutral/anticorner{ - dir = 1 - }, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/centerhall) -"Lm" = ( -/obj/effect/decal/cleanable/dirt, -/turf/open/misc/asteroid, -/area/ruin/space/has_grav/port_tarkon/forehall) -"Lo" = ( -/obj/machinery/door/poddoor/shutters/preopen{ - id = "tarkonouter"; - name = "External Bay Shutters" - }, -/obj/effect/decal/cleanable/dirt, -/mob/living/basic/carp/mega, -/obj/effect/turf_decal/trimline/yellow/filled/warning, -/turf/open/floor/iron/airless, -/area/ruin/space/has_grav/port_tarkon/storage) -"Lp" = ( -/obj/effect/decal/cleanable/dirt, -/obj/structure/closet/emcloset, -/obj/effect/turf_decal/tile/brown/half{ - dir = 1 - }, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/mining) -"Lr" = ( -/obj/effect/decal/cleanable/dirt, -/obj/machinery/door/firedoor/solid, -/obj/machinery/light_switch/directional/east, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/trauma) -"Ls" = ( -/obj/machinery/iv_drip, -/obj/structure/window/reinforced/tinted/spawner/directional/south, -/obj/effect/decal/cleanable/dirt, -/obj/machinery/light/small/directional/west, -/obj/effect/turf_decal/tile/blue/half{ - dir = 8 - }, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/trauma) -"Ly" = ( -/obj/effect/decal/cleanable/dirt, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/structure/cable, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/garden) -"LA" = ( -/obj/structure/closet, -/obj/effect/decal/cleanable/dirt, -/obj/item/clothing/under/rank/rnd/scientist/nova/utility, -/obj/item/clothing/under/rank/rnd/roboticist/nova/sleek, -/obj/item/clothing/shoes/jackboots, -/obj/item/clothing/shoes/workboots/mining, -/obj/item/clothing/shoes/winterboots, -/obj/item/storage/backpack/duffelbag/science, -/obj/item/storage/backpack/duffelbag/science/robo, -/obj/item/storage/backpack/satchel/science, -/obj/item/storage/backpack/satchel/science/robo, -/obj/item/storage/backpack/science, -/obj/item/storage/backpack/science/robo, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon) -"LD" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/turf_decal/tile/brown/half{ - dir = 1 - }, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/cargo) -"LG" = ( -/obj/effect/decal/cleanable/dirt, -/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/tile/neutral{ - dir = 4 - }, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/centerhall) -"LH" = ( -/obj/effect/decal/cleanable/dirt, -/obj/machinery/firealarm/directional/north, -/obj/structure/alien/resin/wall, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/forehall) -"LI" = ( -/obj/structure/lattice, -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/ash, -/turf/open/misc/asteroid, -/area/ruin/space/has_grav/port_tarkon/forehall) -"LJ" = ( -/turf/open/misc/asteroid/airless, -/area/solars/tarkon) -"LN" = ( -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/afthall) -"LQ" = ( -/obj/effect/decal/cleanable/dirt, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/mining) -"LS" = ( -/obj/item/stack/ore/titanium, -/turf/open/misc/asteroid, -/area/ruin/space/has_grav) -"LW" = ( -/obj/effect/decal/cleanable/dirt, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/observ) -"LY" = ( -/obj/effect/decal/cleanable/dirt, -/obj/structure/table/reinforced, -/obj/item/book/manual/wiki/security_space_law, -/obj/item/pen/fountain, -/obj/machinery/firealarm/directional/north, -/obj/effect/turf_decal/tile/red/half{ - dir = 1 - }, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/secoff) -"Md" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/glass, -/obj/effect/decal/cleanable/blood/gibs/old, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/forehall) -"Me" = ( -/obj/effect/turf_decal/stripes{ - dir = 1 - }, -/obj/effect/decal/cleanable/dirt, -/obj/machinery/light/dim/directional/east, -/obj/structure/window/reinforced/spawner/directional/north, -/obj/machinery/power/smes, -/obj/structure/cable, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/port_tarkon/atmos) -"Mi" = ( -/obj/effect/decal/cleanable/dirt, -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/porthall) -"Mp" = ( -/obj/effect/decal/cleanable/dirt, -/obj/machinery/airalarm/directional/west, -/obj/effect/mapping_helpers/airalarm/all_access, -/obj/effect/turf_decal/tile/neutral/half{ - dir = 8 - }, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/centerhall) -"Mr" = ( -/obj/structure/cable, -/obj/effect/turf_decal/sand/plating, -/turf/open/floor/plating/airless, -/area/solars/tarkon) -"Mt" = ( -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ - dir = 8 - }, -/obj/structure/curtain, -/obj/structure/window/reinforced/tinted/spawner/directional/south, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/trauma) -"Mu" = ( -/obj/structure/cable, -/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/turf_decal/tile/brown/half{ - dir = 4 - }, -/obj/effect/decal/cleanable/generic, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/starboardhall) -"Mz" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/dirt, -/obj/machinery/atmospherics/components/tank/air, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/centerhall) -"MB" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/turf_decal/tile/neutral/anticorner{ - dir = 8 - }, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/centerhall) -"MC" = ( -/obj/machinery/door/airlock{ - name = "Bathroom" - }, -/obj/machinery/door/firedoor/solid, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/centerhall) -"MD" = ( -/obj/machinery/atmospherics/miner/plasma, -/turf/open/floor/engine/plasma, -/area/ruin/space/has_grav/port_tarkon/atmos) -"ME" = ( -/mob/living/simple_animal/hostile/alien/queen, -/obj/effect/turf_decal/tile/purple/anticorner, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/port_tarkon/developement) -"MF" = ( -/obj/structure/cable, -/obj/effect/decal/cleanable/dirt, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/starboardhall) -"MG" = ( -/obj/effect/turf_decal/stripes/asteroid/corner{ - dir = 4 - }, -/turf/open/misc/asteroid/airless, -/area/solars/tarkon) -"MJ" = ( -/obj/effect/decal/cleanable/dirt, -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/observ) -"MO" = ( -/obj/effect/decal/cleanable/dirt, -/obj/structure/safe/floor, -/obj/item/areaeditor/blueprints/tarkon, -/obj/item/tape/ruins/tarkon/safe, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/power1) -"MS" = ( -/obj/effect/decal/cleanable/dirt, -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/porthall) -"MU" = ( -/turf/open/floor/engine/vacuum, -/area/ruin/space/has_grav/port_tarkon/atmos) -"MV" = ( -/obj/effect/decal/cleanable/dirt, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/firealarm/directional/north, -/obj/effect/turf_decal/tile/brown/half{ - dir = 1 - }, -/turf/open/floor/iron/airless, -/area/ruin/space/has_grav/port_tarkon/storage) -"MX" = ( -/obj/effect/decal/cleanable/dirt, -/obj/item/stack/rods, -/obj/effect/decal/cleanable/glass, -/turf/open/floor/iron/airless, -/area/ruin/space/has_grav/port_tarkon/porthall) -"MY" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/turf_decal/tile/brown/anticorner, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/starboardhall) -"Ng" = ( -/obj/effect/decal/cleanable/dirt, -/obj/structure/tank_dispenser, -/obj/effect/turf_decal/tile/brown/anticorner{ - dir = 1 - }, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/mining) -"Nh" = ( -/obj/structure/alien/weeds/node, -/obj/effect/decal/cleanable/glass, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/port_tarkon/developement) -"Ni" = ( -/obj/effect/decal/cleanable/dirt, -/obj/structure/closet/crate/bin, -/obj/effect/turf_decal/tile/purple/half, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/port_tarkon/developement) -"Nj" = ( -/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, -/obj/machinery/door/firedoor/solid/closed, -/obj/machinery/door/airlock/public/glass{ - name = "Fore Primary Hallway" - }, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/forehall) -"Nl" = ( -/obj/effect/decal/cleanable/dirt, -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ - dir = 4 - }, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/mining) -"Nq" = ( -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ - dir = 4 - }, -/obj/structure/table/rolling, -/obj/item/surgery_tray/full, -/obj/effect/decal/cleanable/dirt, -/obj/item/clothing/gloves/latex{ - pixel_y = 10 - }, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/trauma) -"Nr" = ( -/obj/effect/decal/cleanable/dirt, -/obj/structure/cable, -/obj/effect/mapping_helpers/broken_floor, -/turf/open/floor/plating, -/area/ruin/space/has_grav/port_tarkon/forehall) -"Ns" = ( -/obj/structure/alien/weeds/node, -/obj/effect/decal/cleanable/dirt, -/obj/effect/turf_decal/delivery/white, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/port_tarkon/developement) -"Nt" = ( -/obj/machinery/seed_extractor, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/garden) -"Nw" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/cable, -/obj/effect/decal/cleanable/dirt, -/obj/machinery/light_switch/directional/west, -/obj/effect/turf_decal/tile/red/anticorner{ - dir = 8 - }, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/secoff) -"Nx" = ( -/obj/effect/decal/cleanable/dirt, -/obj/structure/table/reinforced, -/obj/item/assembly/flash, -/obj/item/assembly/flash, -/obj/effect/turf_decal/tile/red/half{ - dir = 4 - }, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/secoff) -"Nz" = ( -/obj/effect/decal/cleanable/dirt, -/obj/structure/closet/crate, -/obj/item/stack/sheet/iron/twenty, -/obj/item/stack/sheet/iron/fifty, -/turf/open/floor/plating, -/area/ruin/space/has_grav/port_tarkon/forehall) -"NH" = ( -/obj/effect/decal/cleanable/dirt, -/obj/structure/chair/sofa/corp/right{ - dir = 8 - }, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/observ) -"NK" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/spawner/structure/window/reinforced/no_firelock, -/obj/machinery/atmospherics/pipe/layer_manifold/dark/hidden{ - dir = 4 - }, -/turf/open/floor/plating, -/area/ruin/space/has_grav/port_tarkon/atmos) -"NL" = ( -/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/alien/resin/wall, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/forehall) -"NM" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/decal/cleanable/dirt, -/obj/structure/flippedtable{ - dir = 1 - }, -/obj/effect/turf_decal/tile/neutral/anticorner{ - dir = 1 - }, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/centerhall) -"NN" = ( -/obj/effect/decal/cleanable/dirt, -/obj/structure/bed/maint, -/obj/item/paper/crumpled/fluff/tarkon/prisoner, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/secoff) -"NX" = ( -/obj/structure/rack, -/obj/effect/decal/cleanable/dirt, -/obj/item/ammo_box/magazine/c35sol_pistol, -/obj/item/ammo_box/magazine/c35sol_pistol, -/obj/item/ammo_box/magazine/c35sol_pistol, -/obj/item/ammo_box/magazine/c35sol_pistol, -/obj/item/ammo_box/magazine/c35sol_pistol, -/obj/item/ammo_box/magazine/c35sol_pistol, -/obj/item/gun/ballistic/automatic/m6pdw, -/obj/item/gun/ballistic/automatic/m6pdw, -/obj/effect/turf_decal/tile/red/half{ - dir = 1 - }, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/secoff) -"Oa" = ( -/obj/effect/decal/cleanable/dirt, -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/secoff) -"Ob" = ( -/obj/machinery/computer/turbine_computer{ - dir = 1; - mapping_id = "tarkon_turbine" - }, -/obj/structure/cable, -/obj/machinery/light/dim/directional/south, -/turf/open/floor/engine, -/area/ruin/space/has_grav/port_tarkon/atmos) -"Oi" = ( -/obj/effect/decal/cleanable/dirt, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/observ) -"Oj" = ( -/obj/structure/table/wood, -/obj/item/flashlight/lamp/bananalamp, -/obj/effect/decal/cleanable/dirt, -/obj/effect/spawner/random/clothing/beret_or_rabbitears, -/turf/open/floor/carpet/purple, -/area/ruin/space/has_grav/port_tarkon/dorms) -"Om" = ( -/obj/structure/lattice, -/obj/effect/decal/cleanable/glass, -/mob/living/basic/carp, -/turf/open/misc/asteroid/airless, -/area/ruin/space/has_grav/port_tarkon/porthall) -"On" = ( -/obj/effect/decal/cleanable/dirt, -/obj/structure/table/reinforced, -/obj/effect/turf_decal/tile/purple/half{ - dir = 8 - }, -/obj/structure/frame/machine, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/port_tarkon/developement) -"Oo" = ( -/obj/effect/decal/cleanable/dirt, -/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/delivery/blue, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/centerhall) -"Oq" = ( -/obj/structure/lattice, -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/blood/old, -/turf/open/misc/asteroid, -/area/ruin/space/has_grav/port_tarkon/forehall) -"Os" = ( -/obj/effect/decal/cleanable/dirt, -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ - dir = 4 - }, -/obj/effect/turf_decal/tile/brown/half, -/turf/open/floor/iron/airless, -/area/ruin/space/has_grav/port_tarkon/storage) -"Ow" = ( -/obj/effect/decal/cleanable/glass, -/obj/effect/decal/cleanable/blood/gibs/down, -/obj/effect/decal/cleanable/dirt, -/turf/open/misc/asteroid, -/area/ruin/space/has_grav) -"Ox" = ( -/obj/effect/decal/cleanable/dirt, -/obj/structure/table/wood/fancy/blue, -/obj/effect/turf_decal/tile/blue/half{ - dir = 1 - }, -/obj/item/dice, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/port_tarkon/comms) -"OB" = ( -/obj/machinery/vending/dinnerware, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/cafeteria, -/area/ruin/space/has_grav/port_tarkon/kitchen) -"OD" = ( -/obj/effect/decal/cleanable/dirt, -/obj/machinery/light/dim/directional/north, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/atmos) -"OF" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/turf_decal/tile/blue/half{ - dir = 4 - }, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/port_tarkon/comms) -"OG" = ( -/obj/effect/decal/cleanable/dirt, -/obj/machinery/space_heater, -/turf/open/floor/plating, -/area/ruin/space/has_grav/port_tarkon/afthall) -"OI" = ( -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/mineral/titanium, -/area/ruin/space/has_grav) -"OJ" = ( -/obj/effect/decal/cleanable/xenoblood/xgibs/core, -/obj/effect/decal/cleanable/dirt, -/obj/effect/mapping_helpers/broken_floor, -/turf/open/floor/plating, -/area/ruin/space/has_grav/port_tarkon/forehall) -"OM" = ( -/turf/closed/wall/r_wall, -/area/ruin/space/has_grav/port_tarkon/comms) -"OR" = ( -/obj/structure/cable, -/obj/effect/turf_decal/stripes/asteroid/line{ - dir = 6 - }, -/turf/open/misc/asteroid/airless, -/area/solars/tarkon) -"OS" = ( -/obj/structure/cable, -/obj/item/solar_assembly, -/obj/effect/turf_decal/sand/plating, -/turf/open/floor/plating/airless, -/area/solars/tarkon) -"OT" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/turf_decal/tile/yellow, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/toolstorage) -"OZ" = ( -/obj/effect/decal/cleanable/blood/tracks{ - dir = 10 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/port_tarkon/developement) -"Pa" = ( -/obj/structure/bed/double/pod, -/obj/item/bedsheet/random/double, -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ - dir = 8 - }, -/obj/effect/decal/cleanable/dirt, -/obj/item/fancy_pillow, -/obj/item/fancy_pillow, -/obj/machinery/button/door/directional/north{ - id = "ptdorm4"; - name = "Door Lock Control"; - normaldoorcontrol = 1; - specialfunctions = 4 - }, -/turf/open/floor/carpet/red, -/area/ruin/space/has_grav/port_tarkon/dorms) -"Pc" = ( -/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, -/obj/machinery/power/apc/auto_name/directional/south, -/obj/effect/mapping_helpers/apc/no_charge, -/obj/effect/mapping_helpers/apc/unlocked, -/mob/living/simple_animal/hostile/alien/sentinel, -/obj/structure/alien/weeds/node, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/forehall) -"Pf" = ( -/obj/effect/decal/cleanable/dirt, -/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/purple/half, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/port_tarkon/developement) -"Pl" = ( -/obj/structure/cable, -/obj/effect/turf_decal/stripes/asteroid/line{ - dir = 10 - }, -/turf/open/misc/asteroid/airless, -/area/solars/tarkon) -"Pq" = ( -/obj/machinery/door/firedoor/solid/closed, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/storage) -"Ps" = ( -/obj/effect/decal/cleanable/dirt, -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ - dir = 4 - }, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/starboardhall) -"Pt" = ( -/obj/structure/closet/crate, -/obj/effect/decal/cleanable/dirt, -/obj/item/clothing/gloves/color/yellow, -/obj/item/clothing/suit/hazardvest, -/obj/item/clothing/head/utility/hardhat/orange, -/obj/item/clothing/gloves/color/black, -/obj/item/storage/belt/utility, -/turf/open/floor/iron/airless, -/area/ruin/space/has_grav/port_tarkon/storage) -"Px" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/door/firedoor/solid, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/garden) -"Pz" = ( -/obj/effect/decal/cleanable/dirt, -/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/ruin/space/has_grav/port_tarkon/afthall) -"PB" = ( -/obj/machinery/atmospherics/components/unary/portables_connector/visible{ - dir = 4 - }, -/obj/effect/decal/cleanable/dirt, -/obj/effect/turf_decal/tile/dark/fourcorners, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/atmos) -"PE" = ( -/obj/effect/decal/cleanable/dirt, -/obj/structure/chair/office{ - dir = 1 - }, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/port_tarkon/comms) -"PF" = ( -/obj/effect/decal/cleanable/dirt, -/obj/structure/alien/resin/wall, -/turf/open/floor/plating, -/area/ruin/space/has_grav/port_tarkon/forehall) -"PK" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/cable, -/obj/machinery/door/firedoor/solid/closed, -/obj/machinery/door/airlock/atmos/glass, -/turf/open/floor/plating/airless, -/area/ruin/space/has_grav/port_tarkon/atmos) -"PM" = ( -/obj/structure/bed/nest, -/obj/effect/mob_spawn/corpse/human, -/obj/effect/turf_decal/tile/purple/half{ - dir = 1 - }, -/obj/item/raw_anomaly_core/random, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/port_tarkon/developement) -"PQ" = ( -/obj/machinery/power/shuttle_engine/propulsion, -/turf/open/floor/plating, -/area/ruin/space/has_grav) -"PR" = ( -/obj/effect/decal/cleanable/dirt, -/obj/structure/closet/crate/medical, -/obj/item/storage/medkit/advanced, -/obj/item/storage/medkit/brute, -/obj/item/storage/medkit/fire, -/obj/item/storage/medkit/regular, -/obj/item/storage/medkit/regular, -/turf/open/floor/iron/airless, -/area/ruin/space/has_grav/port_tarkon/storage) -"PS" = ( -/obj/effect/decal/cleanable/dirt, -/obj/machinery/computer{ - desc = "A computer long since rendered non-functional due to lack of maintenance. Spitting out error messages."; - dir = 8; - name = "Financing Console" - }, -/obj/effect/turf_decal/tile/brown/anticorner{ - dir = 4 - }, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/cargo) -"PT" = ( -/obj/structure/rack, -/obj/effect/decal/cleanable/dirt, -/obj/item/clothing/suit/armor/vest, -/obj/item/clothing/suit/armor/vest, -/obj/machinery/airalarm/directional/north, -/obj/effect/turf_decal/tile/red/half{ - dir = 1 - }, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/secoff) -"PZ" = ( -/obj/effect/decal/cleanable/blood/tracks, -/obj/effect/decal/cleanable/dirt, -/obj/effect/turf_decal/tile/neutral/half, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/centerhall) -"Qf" = ( -/obj/effect/decal/cleanable/dirt, -/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/dark, -/area/ruin/space/has_grav/port_tarkon/developement) -"Qg" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/spawner/structure/window/reinforced/no_firelock, -/obj/machinery/atmospherics/pipe/layer_manifold/pink/hidden{ - dir = 4 - }, -/turf/open/floor/plating, -/area/ruin/space/has_grav/port_tarkon/atmos) -"Qh" = ( -/obj/effect/decal/cleanable/dirt, -/obj/structure/chair/office{ - dir = 1 - }, -/obj/effect/turf_decal/tile/brown/half{ - dir = 1 - }, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/cargo) -"Qk" = ( -/obj/machinery/atmospherics/components/unary/outlet_injector/monitored/plasma_input/tarkon{ - dir = 8 - }, -/turf/open/floor/engine/plasma, -/area/ruin/space/has_grav/port_tarkon/atmos) -"Qn" = ( -/obj/effect/turf_decal/stripes/asteroid/line, -/turf/open/misc/asteroid/airless, -/area/solars/tarkon) -"Qo" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/turf_decal/delivery/blue, -/obj/effect/turf_decal/tile/neutral/half, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/centerhall) -"Qp" = ( -/obj/machinery/light/warm/directional/south, -/obj/effect/decal/cleanable/dirt, -/obj/effect/turf_decal/tile/neutral/anticorner, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/centerhall) -"Qs" = ( -/obj/machinery/door/airlock/public/glass{ - name = "Port Primary Hallway" - }, -/obj/structure/barricade/wooden/crude, -/obj/machinery/door/firedoor/solid/closed, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/porthall) -"Qu" = ( -/obj/effect/decal/cleanable/dirt, -/obj/structure/window/reinforced/spawner/directional/north, -/obj/effect/turf_decal/tile/purple/fourcorners, -/obj/structure/cable, -/obj/machinery/computer/atmos_control/tarkon/plasma_tank{ - dir = 8 - }, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/atmos) -"Qx" = ( -/obj/effect/spawner/structure/window/reinforced/no_firelock, -/turf/open/floor/plating, -/area/ruin/space/has_grav/port_tarkon/power1) -"Qy" = ( -/obj/effect/decal/cleanable/dirt, -/obj/machinery/firealarm/directional/west, -/obj/machinery/suit_storage_unit/industrial/hauler, -/obj/effect/turf_decal/tile/brown/half{ - dir = 8 - }, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/cargo) -"QA" = ( -/obj/machinery/door/window/left/directional/north, -/obj/machinery/door/window/left/directional/south, -/obj/structure/table/reinforced, -/obj/machinery/door/firedoor/solid, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/cargo) -"QB" = ( -/obj/effect/decal/cleanable/dirt, -/obj/structure/filingcabinet, -/obj/effect/turf_decal/tile/brown/anticorner{ - dir = 8 - }, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/cargo) -"QC" = ( -/turf/closed/wall/r_wall, -/area/ruin/space/has_grav/port_tarkon/cargo) -"QD" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/glass, -/obj/effect/mapping_helpers/broken_floor, -/turf/open/floor/plating/airless, -/area/ruin/space/has_grav/port_tarkon/porthall) -"QH" = ( -/obj/machinery/atmospherics/components/unary/outlet_injector/monitored/air_input/tarkon{ - dir = 4 - }, -/turf/open/floor/engine/vacuum, -/area/ruin/space/has_grav/port_tarkon/atmos) -"QL" = ( -/obj/effect/decal/cleanable/dirt, -/obj/structure/cable, -/obj/machinery/power/apc/auto_name/directional/east, -/obj/effect/mapping_helpers/apc/no_charge, -/obj/effect/mapping_helpers/apc/unlocked, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/observ) -"QP" = ( -/obj/effect/decal/cleanable/dirt, -/obj/machinery/atmospherics/pipe/smart/manifold4w/general, -/obj/machinery/meter, -/obj/structure/cable, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/centerhall) -"QT" = ( -/obj/effect/decal/cleanable/dirt, -/obj/machinery/hydroponics/soil, -/turf/open/floor/grass, -/area/ruin/space/has_grav/port_tarkon/garden) -"QW" = ( -/obj/structure/cable, -/turf/open/floor/engine, -/area/ruin/space/has_grav/port_tarkon/atmos) -"QX" = ( -/obj/effect/turf_decal/tile/purple/half{ - dir = 1 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/port_tarkon/developement) -"QY" = ( -/obj/effect/decal/cleanable/dirt, -/obj/structure/frame/machine, -/obj/item/circuitboard/machine/component_printer, -/obj/effect/turf_decal/tile/purple/half{ - dir = 1 - }, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/port_tarkon/developement) -"Rc" = ( -/obj/effect/decal/cleanable/dirt, -/obj/machinery/firealarm/directional/north, -/obj/effect/decal/cleanable/glass, -/obj/effect/turf_decal/tile/brown/half{ - dir = 1 - }, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/mining) -"Rf" = ( -/obj/machinery/atmospherics/components/unary/outlet_injector/monitored/nitrous_input/tarkon{ - dir = 8 - }, -/turf/open/floor/engine/n2o, -/area/ruin/space/has_grav/port_tarkon/atmos) -"Rg" = ( -/obj/machinery/atmospherics/components/binary/pump/off/general{ - dir = 8 - }, -/obj/effect/decal/cleanable/dirt, -/obj/effect/turf_decal/tile/yellow/fourcorners, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/atmos) -"Rh" = ( -/obj/effect/decal/cleanable/dirt, -/obj/structure/cable, -/obj/machinery/power/apc/auto_name/directional/south, -/obj/effect/mapping_helpers/apc/no_charge, -/obj/effect/mapping_helpers/apc/unlocked, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/garden) -"Rm" = ( -/obj/effect/turf_decal/stripes/line, -/obj/effect/turf_decal/stripes/line{ - dir = 1 - }, -/obj/machinery/door/airlock/external/glass{ - name = "Turbine Maintenance Door" - }, -/obj/structure/cable, -/turf/open/floor/plating, -/area/ruin/space/has_grav/port_tarkon/atmos) -"Rp" = ( -/obj/machinery/vending/dorms, -/turf/open/floor/plating, -/area/ruin/space/has_grav/port_tarkon/cargo) -"Rq" = ( -/obj/structure/cable, -/obj/effect/decal/cleanable/dirt, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/mining) -"Rr" = ( -/obj/effect/decal/cleanable/dirt, -/obj/machinery/door/firedoor/solid, -/obj/machinery/door/airlock/engineering/glass{ - name = "P-T Tool Storage" - }, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/toolstorage) -"Rx" = ( -/obj/effect/decal/cleanable/dirt, -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ - dir = 8 - }, -/obj/effect/turf_decal/tile/brown/half{ - dir = 1 - }, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/cargo) -"RB" = ( -/obj/structure/lattice, -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/glass, -/turf/open/misc/asteroid/airless, -/area/ruin/space/has_grav/port_tarkon/porthall) -"RC" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/turf_decal/tile/blue/half, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/trauma) -"RE" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/turf_decal/trimline/yellow/filled/warning{ - dir = 8 - }, -/turf/open/floor/iron/airless, -/area/ruin/space/has_grav/port_tarkon/storage) -"RF" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/glass, -/turf/open/floor/plating/airless, -/area/ruin/space/has_grav/port_tarkon/porthall) -"RH" = ( -/obj/effect/turf_decal/tile/purple/half, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/port_tarkon/developement) -"RI" = ( -/obj/effect/decal/cleanable/dirt, -/obj/structure/frame/machine, -/obj/item/circuitboard/machine/circuit_imprinter/offstation, -/obj/effect/turf_decal/tile/purple/anticorner{ - dir = 4 - }, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/port_tarkon/developement) -"RJ" = ( -/obj/effect/decal/cleanable/dirt, -/obj/structure/cable, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/observ) -"RK" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/dirt, -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/centerhall) -"RL" = ( -/turf/closed/wall/mineral/titanium, -/area/ruin/space/has_grav) -"RM" = ( -/mob/living/basic/carp, -/turf/open/space/basic, -/area/template_noop) -"RO" = ( -/obj/effect/decal/cleanable/dirt, -/mob/living/simple_animal/hostile/alien, -/obj/effect/turf_decal/tile/purple/half{ - dir = 1 - }, -/obj/effect/decal/cleanable/blood/tracks{ - dir = 5 - }, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/port_tarkon/developement) -"RP" = ( -/obj/effect/decal/cleanable/dirt, -/obj/machinery/light/broken/directional/north, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/forehall) -"RT" = ( -/obj/effect/decal/cleanable/dirt, -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/port_tarkon/developement) -"RU" = ( -/obj/machinery/airalarm/directional/west, -/obj/effect/mapping_helpers/airalarm/all_access, -/obj/effect/decal/cleanable/dirt, -/obj/effect/turf_decal/tile/yellow/half{ - dir = 8 - }, -/obj/effect/decal/cleanable/generic, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/toolstorage) -"RX" = ( -/obj/structure/table, -/obj/effect/decal/cleanable/dirt, -/obj/item/clothing/head/utility/welding, -/obj/item/clothing/gloves/color/yellow, -/obj/machinery/firealarm/directional/south, -/obj/effect/turf_decal/tile/yellow/anticorner, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/power1) -"RY" = ( -/obj/effect/turf_decal/vg_decals/atmos/plasma, -/obj/machinery/light/small/directional/east, -/obj/machinery/air_sensor/tarkon/plasma_tank{ - pixel_x = 26 - }, -/turf/open/floor/engine/plasma, -/area/ruin/space/has_grav/port_tarkon/atmos) -"Sa" = ( -/obj/effect/decal/cleanable/dirt, -/obj/structure/frame/machine, -/obj/effect/decal/cleanable/glass, -/obj/effect/turf_decal/tile/brown/half{ - dir = 1 - }, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/mining) -"Sb" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/turf_decal/tile/brown/half{ - dir = 8 - }, -/turf/open/floor/iron/airless, -/area/ruin/space/has_grav/port_tarkon/storage) -"Se" = ( -/obj/effect/decal/cleanable/dirt, -/obj/structure/trash_pile, -/turf/open/floor/plating, -/area/ruin/space/has_grav/port_tarkon/forehall) -"Sf" = ( -/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, -/area/ruin/space/has_grav/port_tarkon/porthall) -"Sg" = ( -/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/turf_decal/tile/purple/half, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/port_tarkon/developement) -"Sj" = ( -/obj/effect/decal/cleanable/dirt, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/cable, -/obj/machinery/light_switch/directional/south, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/porthall) -"Sk" = ( -/obj/structure/cable, -/obj/effect/decal/cleanable/dirt, -/obj/machinery/power/apc/auto_name/directional/west, -/obj/effect/mapping_helpers/apc/no_charge, -/obj/effect/mapping_helpers/apc/unlocked, -/obj/machinery/light/dim/directional/west, -/obj/effect/turf_decal/tile/brown/half{ - dir = 8 - }, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/mining) -"Sn" = ( -/obj/effect/decal/cleanable/dirt, -/obj/structure/table, -/obj/item/stack/sheet/mineral/titanium{ - amount = 30 - }, -/obj/effect/turf_decal/tile/purple/half, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/port_tarkon/developement) -"Sp" = ( -/obj/structure/alien/resin/wall, -/obj/effect/decal/cleanable/dirt, -/obj/machinery/light/built/directional/east, -/obj/effect/turf_decal/tile/purple/half{ - dir = 4 - }, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/port_tarkon/developement) -"Sq" = ( -/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/blue/half{ - dir = 1 - }, -/obj/machinery/door/firedoor/solid, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/comms) -"Su" = ( -/obj/effect/turf_decal/tile/purple/half, -/obj/structure/alien/weeds/node, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/port_tarkon/developement) -"Sv" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/turf_decal/tile/neutral/half{ - dir = 1 - }, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/centerhall) -"Sw" = ( -/turf/closed/wall/r_wall, -/area/ruin/space/has_grav/port_tarkon/dorms) -"SA" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/xenoblood/xgibs/larva, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/port_tarkon/developement) -"SE" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/blood, -/obj/machinery/light/broken/directional/north, -/obj/effect/decal/cleanable/glass, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/forehall) -"SG" = ( -/obj/structure/table/reinforced, -/obj/machinery/door/window/brigdoor/left/directional/south, -/obj/machinery/door/window/brigdoor/left/directional/north, -/obj/item/paper_bin{ - pixel_x = 7 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/secoff) -"SI" = ( -/obj/effect/decal/cleanable/dirt, -/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/neutral/anticorner, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/centerhall) -"SK" = ( -/obj/structure/girder, -/turf/open/floor/plating, -/area/ruin/space/has_grav/port_tarkon/forehall) -"SL" = ( -/obj/machinery/shower/directional/east, -/obj/structure/window/reinforced/tinted/spawner/directional/east, -/obj/machinery/door/window/right/directional/north{ - opacity = 1 - }, -/turf/open/floor/iron/white, -/area/ruin/space/has_grav/port_tarkon/centerhall) -"SM" = ( -/turf/open/misc/asteroid, -/area/ruin/space/has_grav/port_tarkon/atmos) -"SP" = ( -/obj/effect/decal/cleanable/dirt, -/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/generic, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/starboardhall) -"SQ" = ( -/obj/effect/decal/cleanable/dirt, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/light/directional/north, -/obj/effect/turf_decal/tile/brown/half{ - dir = 1 - }, -/turf/open/floor/iron/airless, -/area/ruin/space/has_grav/port_tarkon/storage) -"ST" = ( -/obj/effect/decal/cleanable/dirt, -/obj/structure/window/reinforced/spawner/directional/west, -/turf/open/floor/plating, -/area/ruin/space/has_grav/port_tarkon/atmos) -"SU" = ( -/turf/closed/wall, -/area/ruin/space/has_grav/port_tarkon/observ) -"SV" = ( -/obj/effect/decal/cleanable/dirt, -/obj/structure/table, -/obj/item/paper_bin, -/obj/item/pen, -/obj/effect/turf_decal/tile/blue/half{ - dir = 4 - }, -/obj/item/folder/red, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/port_tarkon/comms) -"SW" = ( -/obj/effect/decal/cleanable/dirt, -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ - dir = 1 - }, -/obj/effect/turf_decal/delivery/blue, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/centerhall) -"SX" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/ash, -/obj/effect/spawner/random/maintenance, -/turf/open/floor/plating, -/area/ruin/space/has_grav/port_tarkon/forehall) -"SZ" = ( -/obj/structure/table/reinforced, -/obj/item/kitchen/rollingpin, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/cafeteria, -/area/ruin/space/has_grav/port_tarkon/kitchen) -"Tb" = ( -/obj/effect/decal/cleanable/dirt, -/obj/machinery/light/dim/directional/south, -/obj/effect/turf_decal/tile/brown/anticorner{ - dir = 8 - }, -/turf/open/floor/iron/airless, -/area/ruin/space/has_grav/port_tarkon/storage) -"Tc" = ( -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/observ) -"Te" = ( -/obj/effect/decal/cleanable/blood/gibs/old, -/obj/effect/turf_decal/tile/purple/half{ - dir = 1 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/port_tarkon/developement) -"Ti" = ( -/obj/effect/turf_decal/stripes{ - dir = 5 - }, -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden, -/turf/open/floor/engine, -/area/ruin/space/has_grav/port_tarkon/atmos) -"Tk" = ( -/obj/effect/decal/cleanable/dirt, -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ - dir = 8 - }, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/port_tarkon/comms) -"Tl" = ( -/obj/effect/spawner/structure/window/reinforced/no_firelock, -/obj/machinery/door/firedoor/solid/closed, -/turf/open/floor/plating, -/area/ruin/space/has_grav/port_tarkon/forehall) -"To" = ( -/obj/structure/closet, -/obj/effect/decal/cleanable/dirt, -/obj/item/clothing/shoes/workboots/mining, -/obj/item/clothing/shoes/winterboots, -/obj/item/clothing/shoes/jackboots, -/obj/item/clothing/under/rank/engineering/engineer/nova/utility, -/obj/item/clothing/under/rank/engineering/engineer/nova/utility, -/obj/item/storage/backpack/industrial, -/obj/item/storage/backpack/duffelbag/engineering, -/obj/item/storage/backpack/satchel/eng, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon) -"Ts" = ( -/obj/effect/decal/cleanable/dirt, -/obj/structure/closet/crate, -/obj/item/bedsheet/dorms, -/obj/item/bedsheet/dorms, -/obj/item/bedsheet/dorms, -/obj/item/bedsheet/dorms, -/obj/item/bedsheet/dorms, -/obj/item/bedsheet/dorms, -/obj/item/bedsheet/dorms, -/obj/item/bedsheet/dorms_double, -/obj/item/bedsheet/dorms_double, -/obj/item/bedsheet/dorms_double, -/obj/item/bedsheet/dorms_double, -/obj/effect/turf_decal/tile/brown/anticorner{ - dir = 4 - }, -/turf/open/floor/iron/airless, -/area/ruin/space/has_grav/port_tarkon/storage) -"Tx" = ( -/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, -/obj/structure/alien/resin/wall, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/forehall) -"Tz" = ( -/obj/machinery/door/airlock/public/glass{ - name = "Kitchen" - }, -/obj/machinery/door/firedoor/solid, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/kitchen) -"TF" = ( -/obj/effect/decal/cleanable/dirt, -/obj/structure/cable, -/obj/machinery/power/apc/auto_name/directional/west, -/obj/effect/mapping_helpers/apc/no_charge, -/obj/effect/mapping_helpers/apc/unlocked, -/obj/structure/table/reinforced, -/obj/item/folder/yellow, -/obj/item/folder/red, -/obj/effect/turf_decal/tile/brown/half{ - dir = 8 - }, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/cargo) -"TH" = ( -/obj/effect/decal/cleanable/dirt, -/obj/machinery/airalarm/directional/north, -/obj/effect/mapping_helpers/airalarm/all_access, -/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/tile/neutral/anticorner{ - dir = 4 - }, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/centerhall) -"TJ" = ( -/obj/effect/decal/cleanable/dirt, -/obj/machinery/light/dim/directional/north, -/obj/effect/turf_decal/tile/purple/half{ - dir = 1 - }, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/port_tarkon/developement) -"TL" = ( -/obj/effect/decal/cleanable/dirt, -/obj/machinery/power/solar_control{ - dir = 1; - id = "aftport"; - name = "Station Solar Control" - }, -/obj/structure/cable, -/obj/item/paper/guides/jobs/engi/solars, -/obj/effect/turf_decal/tile/yellow/half, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/power1) -"TM" = ( -/obj/effect/decal/cleanable/blood/gibs/old, -/obj/item/stack/ore/diamond, -/turf/open/misc/asteroid, -/area/ruin/space/has_grav) -"TP" = ( -/obj/machinery/light/warm/directional/east, -/obj/effect/decal/cleanable/dirt, -/obj/effect/turf_decal/tile/neutral/half{ - dir = 4 - }, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/centerhall) -"TQ" = ( -/obj/structure/cable, -/obj/effect/decal/cleanable/dirt, -/obj/machinery/airalarm/directional/east, -/obj/effect/mapping_helpers/airalarm/all_access, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/effect/turf_decal/tile/brown/half{ - dir = 4 - }, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/mining) -"TT" = ( -/obj/effect/decal/cleanable/dirt, -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ - dir = 8 - }, -/obj/item/storage/box/stockparts/basic, -/obj/structure/table/reinforced, -/obj/item/stack/sheet/glass{ - amount = 25 - }, -/obj/item/stack/cable_coil, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/port_tarkon/developement) -"TV" = ( -/obj/machinery/firealarm/directional/north, -/obj/effect/decal/cleanable/dirt, -/obj/effect/turf_decal/tile/yellow/half{ - dir = 1 - }, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/toolstorage) -"TW" = ( -/turf/closed/wall/r_wall, -/area/ruin/space/has_grav/port_tarkon/starboardhall) -"TX" = ( -/obj/effect/decal/cleanable/dirt, -/obj/machinery/airalarm/directional/east, -/obj/effect/mapping_helpers/airalarm/all_access, -/obj/effect/turf_decal/tile/blue/half{ - dir = 4 - }, -/obj/machinery/light/dim/directional/east, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/port_tarkon/comms) -"Ua" = ( -/obj/structure/safe/floor, -/obj/item/stack/sheet/bluespace_crystal{ - amount = 5 - }, -/obj/item/stack/sheet/mineral/diamond{ - amount = 10 - }, -/obj/item/weldingtool/abductor, -/obj/item/paper/fluff/ruins/tarkon/coupplans, -/obj/item/circuitboard/machine/bluespace_miner, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/port_tarkon/developement) -"Uc" = ( -/obj/structure/alien/weeds/node, -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/blood/tracks{ - dir = 10 - }, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/port_tarkon/developement) -"Ud" = ( -/obj/structure/closet/crate/bin, -/obj/effect/spawner/random/trash/food_packaging, -/obj/effect/spawner/random/trash/food_packaging, -/obj/effect/spawner/random/trash/food_packaging, -/obj/effect/decal/cleanable/dirt, -/obj/item/mod/module/springlock, -/obj/effect/turf_decal/tile/red/half, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/secoff) -"Uf" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/turf_decal/tile/purple/half{ - dir = 1 - }, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/port_tarkon/developement) -"Uh" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/mapping_helpers/broken_floor, -/turf/open/floor/plating, -/area/ruin/space/has_grav/port_tarkon/forehall) -"Un" = ( -/obj/effect/decal/cleanable/dirt, -/obj/structure/cable, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/atmos) -"Ur" = ( -/obj/effect/decal/cleanable/dirt, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/turf_decal/tile/brown, -/turf/open/floor/iron/airless, -/area/ruin/space/has_grav/port_tarkon/storage) -"Ut" = ( -/obj/effect/decal/cleanable/dirt, -/obj/machinery/door/airlock/maintenance_hatch, -/obj/structure/cable, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/afthall) -"Uv" = ( -/obj/machinery/hydroponics/soil, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/grass, -/area/ruin/space/has_grav/port_tarkon/garden) -"Uw" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/vomit/old, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/observ) -"Uz" = ( -/mob/living/simple_animal/hostile/alien/queen/large, -/turf/open/misc/asteroid, -/area/ruin/space/has_grav) -"UG" = ( -/obj/effect/decal/cleanable/glass, -/obj/effect/decal/cleanable/blood/gibs/old, -/obj/effect/decal/cleanable/dirt, -/turf/open/misc/asteroid, -/area/ruin/space/has_grav) -"UI" = ( -/obj/effect/spawner/structure/window/reinforced/plasma, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden, -/turf/open/floor/plating, -/area/ruin/space/has_grav/port_tarkon/atmos) -"UJ" = ( -/obj/effect/turf_decal/sand/plating, -/turf/open/floor/plating/airless, -/area/solars/tarkon) -"UO" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/glass, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/forehall) -"US" = ( -/obj/effect/spawner/structure/window/reinforced, -/turf/open/floor/plating, -/area/ruin/space/has_grav/port_tarkon/starboardhall) -"UV" = ( -/obj/effect/decal/cleanable/dirt, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/port_tarkon/developement) -"UX" = ( -/obj/structure/cable, -/obj/effect/decal/cleanable/dirt, -/obj/machinery/airalarm/directional/west, -/obj/effect/mapping_helpers/airalarm/all_access, -/obj/effect/turf_decal/tile/yellow/half{ - dir = 8 - }, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/power1) -"UZ" = ( -/obj/effect/decal/cleanable/dirt, -/obj/item/stack/rods, -/obj/effect/decal/cleanable/glass, -/turf/open/floor/plating/airless, -/area/ruin/space/has_grav/port_tarkon/porthall) -"Vc" = ( -/obj/machinery/door/airlock/research, -/obj/machinery/door/firedoor/closed{ - opacity = 1 - }, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/developement) -"Vg" = ( -/obj/effect/decal/cleanable/dirt, -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, -/turf/open/floor/iron/cafeteria, -/area/ruin/space/has_grav/port_tarkon/kitchen) -"Vi" = ( -/obj/effect/turf_decal/sand/plating, -/obj/structure/grille, -/turf/open/floor/plating/airless, -/area/ruin/space/has_grav) -"Vj" = ( -/obj/effect/mob_spawn/ghost_role/human/tarkon/engi, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon) -"Vk" = ( -/obj/structure/closet, -/obj/effect/decal/cleanable/dirt, -/obj/item/clothing/shoes/workboots/mining, -/obj/item/clothing/shoes/winterboots, -/obj/item/clothing/shoes/jackboots, -/obj/item/clothing/under/rank/captain/nova/utility, -/obj/item/clothing/under/rank/captain/nova/utility, -/obj/item/storage/backpack/duffelbag/blueshield, -/obj/item/storage/backpack/blueshield, -/obj/item/storage/backpack/satchel/blueshield, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon) -"Vl" = ( -/mob/living/simple_animal/hostile/alien/sentinel, -/obj/effect/turf_decal/tile/purple/half{ - dir = 4 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/port_tarkon/developement) -"Vm" = ( -/obj/effect/decal/cleanable/dirt, -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ - dir = 8 - }, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/garden) -"Vn" = ( -/obj/effect/decal/cleanable/dirt, -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, -/obj/item/stack/cable_coil, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/mining) -"Vu" = ( -/obj/effect/decal/cleanable/dirt, -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ - dir = 1 - }, -/obj/effect/turf_decal/tile/brown/half, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/starboardhall) -"Vw" = ( -/obj/structure/sign/warning/no_smoking, -/turf/closed/wall/r_wall, -/area/ruin/space/has_grav/port_tarkon/atmos) -"Vx" = ( -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/carpet/purple, -/area/ruin/space/has_grav/port_tarkon/dorms) -"Vy" = ( -/obj/effect/decal/cleanable/dirt, -/obj/machinery/light/dim/directional/east, -/obj/effect/turf_decal/tile/brown/half{ - dir = 4 - }, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/mining) -"Vz" = ( -/obj/effect/decal/cleanable/dirt, -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ - dir = 1 - }, -/obj/effect/turf_decal/delivery/blue, -/obj/effect/turf_decal/tile/neutral/half, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/centerhall) -"VE" = ( -/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, -/obj/effect/turf_decal/tile/yellow/half{ - dir = 4 - }, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/power1) -"VH" = ( -/obj/effect/decal/cleanable/dirt, -/obj/structure/flippedtable{ - dir = 8 - }, -/obj/effect/turf_decal/tile/neutral/anticorner{ - dir = 1 - }, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/centerhall) -"VJ" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/dirt, -/obj/machinery/door/firedoor/solid/closed, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/forehall) -"VN" = ( -/obj/effect/decal/cleanable/dirt, -/obj/item/stack/rods, -/obj/effect/decal/cleanable/glass, -/obj/effect/mapping_helpers/broken_floor, -/turf/open/floor/plating/airless, -/area/ruin/space/has_grav/port_tarkon/porthall) -"VO" = ( -/obj/effect/decal/cleanable/dirt, -/obj/machinery/light/broken/directional/north, -/obj/effect/decal/cleanable/glass, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/forehall) -"VP" = ( -/obj/effect/decal/cleanable/dirt, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/flippedtable{ - dir = 1 - }, -/obj/structure/cable, -/obj/effect/turf_decal/tile/neutral/half{ - dir = 1 - }, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/centerhall) -"VS" = ( -/obj/machinery/atmospherics/miner/oxygen, -/turf/open/floor/engine/o2, -/area/ruin/space/has_grav/port_tarkon/atmos) -"VT" = ( -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ - dir = 8 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/toolstorage) -"VU" = ( -/obj/effect/decal/cleanable/glass, -/obj/effect/decal/cleanable/blood/tracks{ - dir = 4 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/port_tarkon/developement) -"VV" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/dirt, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/effect/mapping_helpers/broken_floor, -/turf/open/floor/plating, -/area/ruin/space/has_grav/port_tarkon/forehall) -"Wa" = ( -/turf/closed/mineral/random, -/area/ruin/space/has_grav) -"Wc" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/turf_decal/sand, -/obj/structure/closet/emcloset, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/mining) -"Wd" = ( -/obj/effect/turf_decal/vg_decals/atmos/nitrogen, -/obj/machinery/light/small/directional/west, -/obj/machinery/air_sensor/tarkon/nitrogen_tank{ - pixel_x = -26 - }, -/turf/open/floor/engine/n2, -/area/ruin/space/has_grav/port_tarkon/atmos) -"We" = ( -/obj/effect/decal/cleanable/dirt, -/obj/machinery/computer{ - desc = "A computer long since rendered non-functional due to lack of maintenance. Spitting out error messages."; - dir = 4; - name = "Broken Computer" - }, -/obj/effect/turf_decal/tile/blue/anticorner{ - dir = 8 - }, -/obj/item/paper/fluff/ruins/tarkon/goals, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/port_tarkon/comms) -"Wh" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/decal/cleanable/dirt, -/obj/machinery/airalarm/directional/east, -/obj/effect/turf_decal/tile/red/half{ - dir = 4 - }, -/obj/structure/closet/crate/radiation, -/obj/item/stack/sheet/mineral/uranium/five, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/secoff) -"Wn" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/dirt, -/obj/machinery/computer/cryopod/tarkon/directional/west, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/centerhall) -"Wp" = ( -/obj/effect/decal/cleanable/dirt, -/obj/machinery/vending/snack/teal, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/afthall) -"Wq" = ( -/obj/effect/decal/cleanable/dirt, -/obj/structure/cable, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/cargo) -"Ws" = ( -/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/decal/cleanable/vomit/old, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/observ) -"Wt" = ( -/turf/closed/mineral/random, -/area/awaymission) -"Wu" = ( -/obj/effect/decal/cleanable/dirt, -/obj/machinery/light_switch/directional/north, -/obj/effect/turf_decal/tile/brown/anticorner{ - dir = 4 - }, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/cargo) -"Ww" = ( -/obj/effect/decal/cleanable/dirt, -/obj/structure/frame/machine, -/obj/item/circuitboard/machine/module_duplicator, -/obj/effect/turf_decal/tile/purple/half{ - dir = 1 - }, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/port_tarkon/developement) -"WB" = ( -/obj/machinery/power/solar, -/obj/structure/cable, -/obj/effect/turf_decal/stripes/asteroid/line{ - dir = 1 - }, -/turf/open/misc/asteroid/airless, -/area/solars/tarkon) -"WC" = ( -/obj/effect/decal/cleanable/dirt, -/obj/machinery/light/dim/directional/west, -/obj/structure/window/reinforced/spawner/directional/north, -/obj/effect/turf_decal/tile/neutral/fourcorners, -/obj/machinery/computer/atmos_control/tarkon/mix_tank{ - dir = 4 - }, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/atmos) -"WE" = ( -/obj/effect/decal/cleanable/dirt, -/obj/machinery/door/firedoor/solid/closed, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/forehall) -"WJ" = ( -/obj/item/stack/ore/diamond, -/turf/open/misc/asteroid, -/area/ruin/space/has_grav) -"WM" = ( -/obj/effect/decal/cleanable/dirt, -/obj/machinery/light/small/directional/east, -/obj/machinery/oven/range, -/turf/open/floor/iron/cafeteria, -/area/ruin/space/has_grav/port_tarkon/kitchen) -"WO" = ( -/obj/structure/table/reinforced, -/obj/effect/decal/cleanable/dirt, -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/spawner/random/trash/food_packaging, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/centerhall) -"WP" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/spawner/structure/window/reinforced/no_firelock, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/door/firedoor/solid/closed, -/obj/machinery/door/poddoor/shutters{ - id = "ptatmos" - }, -/turf/open/floor/plating, -/area/ruin/space/has_grav/port_tarkon/atmos) -"WQ" = ( -/obj/structure/alien/resin/wall, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/port_tarkon/developement) -"WU" = ( -/turf/closed/wall, -/area/ruin/space/has_grav/port_tarkon/porthall) -"WW" = ( -/obj/effect/decal/cleanable/blood/gibs/old, -/mob/living/simple_animal/hostile/alien/drone, -/obj/effect/decal/cleanable/glass, -/obj/effect/turf_decal/tile/purple/half, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/port_tarkon/developement) -"WY" = ( -/turf/open/space/basic, -/area/template_noop) -"Xb" = ( -/obj/structure/cable, -/obj/machinery/power/solar, -/obj/effect/turf_decal/stripes/asteroid/line{ - dir = 1 - }, -/turf/open/misc/asteroid/airless, -/area/solars/tarkon) -"Xc" = ( -/obj/machinery/power/shuttle_engine/heater{ - dir = 8 - }, -/turf/open/floor/mineral/titanium, -/area/ruin/space/has_grav) -"Xh" = ( -/obj/effect/decal/cleanable/dirt, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/structure/cable, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/port_tarkon/developement) -"Xj" = ( -/obj/machinery/door/airlock/multi_tile/public/glass, -/obj/machinery/door/firedoor/solid, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/garden) -"Xn" = ( -/obj/effect/decal/cleanable/dirt, -/obj/structure/ore_box, -/obj/effect/turf_decal/tile/brown/anticorner, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/mining) -"Xq" = ( -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, -/obj/effect/decal/cleanable/dirt, -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/centerhall) -"Xr" = ( -/obj/effect/decal/cleanable/dirt, -/obj/structure/reagent_dispensers/watertank, -/turf/open/floor/plating, -/area/ruin/space/has_grav/port_tarkon/afthall) -"Xw" = ( -/obj/effect/decal/cleanable/dirt, -/obj/structure/chair/sofa/corp/left{ - dir = 1 - }, -/obj/item/broken_bottle, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/observ) -"Xy" = ( -/turf/closed/wall/r_wall, -/area/ruin/space/has_grav/port_tarkon/toolstorage) -"Xz" = ( -/obj/effect/decal/cleanable/dirt, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/mining) -"XD" = ( -/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/cable, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/starboardhall) -"XE" = ( -/obj/structure/toilet{ - dir = 8 - }, -/obj/machinery/light/small/directional/north, -/obj/machinery/door/window/left/directional/west{ - opacity = 1 - }, -/turf/open/floor/iron/white, -/area/ruin/space/has_grav/port_tarkon/centerhall) -"XH" = ( -/obj/machinery/atmospherics/components/binary/pump/off/general{ - dir = 8 - }, -/obj/effect/decal/cleanable/dirt, -/obj/effect/turf_decal/tile/purple/fourcorners, -/obj/structure/cable, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/atmos) -"XI" = ( -/obj/effect/decal/cleanable/dirt, -/obj/machinery/light_switch/directional/north, -/obj/effect/turf_decal/delivery/blue, -/obj/effect/turf_decal/tile/neutral/half{ - dir = 1 - }, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/centerhall) -"XJ" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/blood, -/obj/machinery/door/firedoor/solid/closed, -/obj/machinery/door/airlock/public/glass{ - name = "Fore Primary Hallway" - }, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/forehall) -"XN" = ( -/obj/effect/decal/cleanable/dirt, -/obj/machinery/airalarm/directional/north, -/obj/effect/mapping_helpers/airalarm/all_access, -/obj/effect/decal/cleanable/blood/gibs/up, -/obj/item/clothing/suit/toggle/labcoat/medical, -/obj/item/clothing/neck/stethoscope, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/forehall) -"XS" = ( -/obj/structure/lattice, -/obj/effect/decal/cleanable/glass, -/obj/effect/decal/cleanable/blood/gibs/old, -/obj/effect/decal/cleanable/dirt, -/turf/open/misc/asteroid, -/area/ruin/space/has_grav) -"XV" = ( -/obj/effect/decal/cleanable/dirt, -/turf/closed/wall/r_wall, -/area/ruin/space/has_grav/port_tarkon/mining) -"XZ" = ( -/turf/closed/wall/r_wall/rust, -/area/ruin/space/has_grav) -"Yb" = ( -/obj/effect/decal/cleanable/dirt, -/obj/machinery/firealarm/directional/east, -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, -/obj/effect/turf_decal/tile/yellow/half{ - dir = 4 - }, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/power1) -"Yc" = ( -/obj/item/solar_assembly, -/obj/structure/cable, -/obj/effect/turf_decal/stripes/asteroid/line, -/turf/open/misc/asteroid/airless, -/area/solars/tarkon) -"Yf" = ( -/obj/effect/turf_decal/tile/purple/half, -/obj/structure/bed/nest, -/obj/effect/mob_spawn/corpse/human, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/port_tarkon/developement) -"Yl" = ( -/obj/effect/decal/cleanable/blood/gibs/old, -/turf/open/misc/asteroid, -/area/ruin/space/has_grav) -"Yp" = ( -/obj/effect/decal/cleanable/dirt, -/obj/machinery/airalarm/directional/north, -/obj/effect/turf_decal/tile/brown/anticorner{ - dir = 1 - }, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/starboardhall) -"Yr" = ( -/obj/effect/decal/cleanable/dirt, -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ - dir = 8 - }, -/obj/effect/turf_decal/tile/neutral/half{ - dir = 4 - }, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/centerhall) -"Yt" = ( -/obj/effect/decal/cleanable/dirt, -/obj/structure/chair/office, -/obj/item/cigbutt/cigarbutt, -/obj/effect/decal/remains/human, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/port_tarkon/comms) -"Yu" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/turf_decal/tile/red/half, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/secoff) -"Yy" = ( -/obj/effect/decal/cleanable/dirt, -/obj/structure/table, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/item/pen/edagger, -/obj/item/folder/blue, -/obj/item/taperecorder/empty, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/port_tarkon/comms) -"YB" = ( -/obj/effect/decal/cleanable/blood/tracks, -/obj/effect/decal/cleanable/blood/tracks{ - dir = 10 - }, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/port_tarkon/developement) -"YC" = ( -/obj/effect/decal/cleanable/dirt, -/obj/machinery/power/apc/auto_name/directional/north, -/obj/effect/mapping_helpers/apc/no_charge, -/obj/effect/mapping_helpers/apc/unlocked, -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/airalarm/directional/south, -/obj/effect/mapping_helpers/airalarm/all_access, -/turf/open/floor/wood/large, -/area/ruin/space/has_grav/port_tarkon/dorms) -"YD" = ( -/obj/effect/decal/cleanable/dirt, -/obj/machinery/light/dim/directional/west, -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ - dir = 4 - }, -/obj/effect/turf_decal/tile/brown/half{ - dir = 8 - }, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/mining) -"YF" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/turf_decal/delivery/white, -/obj/effect/turf_decal/tile/purple/half, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/port_tarkon/developement) -"YI" = ( -/obj/structure/alien/weeds/node, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/port_tarkon/developement) -"YK" = ( -/obj/effect/spawner/structure/window/reinforced/no_firelock, -/obj/machinery/door/poddoor/shutters{ - id = "ptcomms" - }, -/turf/open/floor/plating, -/area/ruin/space/has_grav/port_tarkon/comms) -"YT" = ( -/turf/closed/wall, -/area/ruin/space/has_grav/port_tarkon/cargo) -"YW" = ( -/obj/effect/decal/cleanable/dirt, -/obj/machinery/light/dim/directional/west, -/obj/effect/turf_decal/tile/brown/half{ - dir = 8 - }, -/obj/effect/decal/cleanable/generic, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/starboardhall) -"Za" = ( -/obj/effect/decal/cleanable/dirt, -/obj/machinery/firealarm/directional/west, -/obj/effect/turf_decal/tile/purple/half{ - dir = 8 - }, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/port_tarkon/developement) -"Zc" = ( -/turf/closed/mineral/random/high_chance, -/area/solars/tarkon) -"Zi" = ( -/obj/structure/alien/weeds/node, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/port_tarkon/developement) -"Zl" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/turf_decal/sand, -/mob/living/simple_animal/hostile/alien/drone, -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/mining) -"Zm" = ( -/obj/machinery/atmospherics/components/unary/portables_connector/visible{ - dir = 4 - }, -/obj/effect/decal/cleanable/dirt, -/obj/effect/turf_decal/tile/yellow/fourcorners, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/atmos) -"Zn" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/decal/cleanable/dirt, -/obj/effect/turf_decal/tile/neutral/anticorner{ - dir = 1 - }, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/centerhall) -"Zp" = ( -/obj/effect/decal/cleanable/dirt, -/obj/structure/table/reinforced, -/obj/item/storage/belt/utility, -/obj/effect/turf_decal/tile/yellow/half{ - dir = 8 - }, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/toolstorage) -"Zq" = ( -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/port_tarkon/atmos) -"Zr" = ( -/obj/structure/table/optable, -/obj/effect/decal/cleanable/dirt, -/obj/effect/turf_decal/tile/blue/anticorner{ - dir = 8 - }, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/trauma) -"Zv" = ( -/obj/effect/decal/cleanable/dirt, -/obj/machinery/door/window/left/directional/west, -/turf/open/floor/plating, -/area/ruin/space/has_grav/port_tarkon/atmos) -"Zw" = ( -/obj/effect/decal/cleanable/dirt, -/obj/machinery/light/dim/directional/east, -/obj/structure/window/reinforced/spawner/directional/north, -/obj/effect/turf_decal/tile/yellow/fourcorners, -/obj/machinery/computer/atmos_control/tarkon/nitrous_tank{ - dir = 8 - }, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/atmos) -"Zy" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/blood/drip, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/trauma) -"ZC" = ( -/obj/effect/decal/cleanable/dirt, -/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/neutral/anticorner, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/centerhall) -"ZG" = ( -/turf/closed/wall/r_wall, -/area/ruin/space/has_grav/port_tarkon/storage) -"ZH" = ( -/obj/structure/cable, -/obj/effect/decal/cleanable/dirt, -/obj/structure/rack, -/obj/item/stack/cable_coil, -/obj/item/stack/sheet/iron/fifty, -/obj/item/stack/sheet/glass/fifty, -/obj/effect/turf_decal/tile/yellow/half, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/power1) -"ZJ" = ( -/turf/open/misc/asteroid/airless, -/area/awaymission) -"ZK" = ( -/obj/structure/alien/resin/wall, -/obj/effect/decal/cleanable/dirt, -/obj/effect/turf_decal/tile/purple, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/port_tarkon/developement) -"ZM" = ( -/turf/open/floor/plating, -/area/ruin/space/has_grav/port_tarkon/afthall) -"ZN" = ( -/turf/closed/wall, -/area/ruin/space/has_grav/port_tarkon/afthall) -"ZO" = ( -/obj/effect/spawner/structure/window/reinforced, -/turf/open/floor/plating, -/area/ruin/space/has_grav/port_tarkon/developement) -"ZP" = ( -/turf/closed/mineral/random, -/area/ruin/space/has_grav/port_tarkon/porthall) -"ZU" = ( -/obj/machinery/door/airlock/mining/glass, -/obj/structure/cable, -/obj/machinery/door/firedoor/solid, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/mining) -"ZV" = ( -/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, -/obj/machinery/airalarm/directional/north, -/obj/effect/mapping_helpers/airalarm/all_access, -/obj/effect/turf_decal/tile/brown/half{ - dir = 1 - }, -/turf/open/floor/iron/airless, -/area/ruin/space/has_grav/port_tarkon/storage) -"ZX" = ( -/obj/machinery/door/airlock/public/glass{ - name = "Cryogenics Room" - }, -/obj/effect/decal/cleanable/dirt, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/door/firedoor/solid, -/obj/structure/cable, -/obj/modular_map_connector, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon) -"ZY" = ( -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ - dir = 1 - }, -/obj/effect/decal/cleanable/dirt, -/obj/machinery/airalarm/directional/west, -/obj/effect/mapping_helpers/airalarm/all_access, -/turf/open/floor/carpet/red, -/area/ruin/space/has_grav/port_tarkon/dorms) - -(1,1,1) = {" -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -"} -(2,1,1) = {" -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -RM -WY -WY -Wa -WY -WY -WY -WY -WY -WY -WY -RM -WY -WY -WY -WY -sv -sv -Wa -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -"} -(3,1,1) = {" -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -Wa -sv -WY -WY -WY -WY -sv -Wa -WY -WY -Wa -Wa -WY -WY -WY -WY -WY -Wa -Wa -sv -WY -WY -WY -WY -WY -RM -WY -WY -WY -WY -RM -WY -WY -WY -EW -WY -WY -WY -As -As -As -WY -RM -WY -WY -WY -WY -WY -WY -RM -WY -WY -"} -(4,1,1) = {" -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -Wa -sv -WY -WY -WY -RM -WY -Wa -Wa -sv -Wa -Wa -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -RL -RL -PQ -RL -RL -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -"} -(5,1,1) = {" -WY -WY -WY -WY -RM -WY -WY -WY -WY -WY -WY -WY -WY -EW -WY -WY -WY -WY -WY -WY -WY -Wa -Wa -Wa -WY -WY -Wa -Wa -sv -sv -sv -sv -Wa -Wa -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -RL -fh -Xc -kG -RL -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -"} -(6,1,1) = {" -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -zo -zo -zo -zo -Wa -Wa -Wa -Wa -Wa -Wa -sv -sv -Wa -sv -sv -sv -sv -Wa -Wa -zo -zo -zo -Eb -zo -zo -zo -Wa -Wa -sv -Wa -Wa -sv -Wa -Wa -Wa -Wa -Wa -Wa -Wa -bq -Hq -FC -OI -RL -WY -WY -WY -WY -RM -WY -WY -WY -WY -WY -"} -(7,1,1) = {" -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -zo -zo -zo -zo -zo -zo -zo -zo -Wa -sv -sv -sv -sv -sv -sv -sv -sv -sv -sv -sv -sv -zo -zo -zo -zo -iv -zo -Wa -Wa -Wa -sv -Wa -sv -Wa -Wa -Wa -Wa -Wa -sv -Wa -sv -Wa -RL -uV -Hq -JT -RL -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -"} -(8,1,1) = {" -WY -WY -WY -WY -WY -WY -WY -EW -WY -WY -WY -WY -zo -zo -zo -zo -zo -zo -zo -zo -zo -zo -Wa -sv -sv -sv -sv -sv -sv -sv -sv -sv -sv -sv -zo -bT -zo -zo -zo -iI -Wa -Wa -sv -Wa -Wa -Wa -Wa -sv -Wa -Wa -sv -Wa -sv -sv -Wa -Wa -RL -UG -Ow -XS -Wa -Wa -Wa -WY -WY -WY -WY -WY -WY -WY -WY -"} -(9,1,1) = {" -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -zo -zo -zo -zo -zo -EQ -EQ -EQ -WU -WU -WU -WU -WU -WU -WU -WU -WU -ZP -ZP -ZP -uy -uy -uy -FY -FY -FY -Om -xt -xt -WP -Vw -xt -xt -xt -xt -xt -xt -xt -xt -xt -xt -sv -sv -zo -zo -Wa -Wa -Wa -sv -sv -Wa -Wa -sv -Wa -WY -WY -WY -WY -WY -WY -WY -"} -(10,1,1) = {" -WY -WY -WY -WY -WY -WY -WY -WY -WY -zo -zo -zo -zo -EQ -EQ -EQ -Tc -oG -jg -hy -hy -hy -hy -hy -fa -IY -hy -hz -RB -ZP -ZP -uy -uy -RB -RB -RB -VN -gp -df -jB -og -lH -pA -yC -lH -Wd -nm -lH -rL -VS -lH -sv -sv -sv -zo -zo -Wa -sv -Wa -Wa -Wa -Wa -Wa -Wa -WY -WY -WY -WY -WY -WY -WY -"} -(11,1,1) = {" -WY -WY -WY -WY -WY -WY -WY -WY -zo -zo -zo -EQ -EQ -EQ -Tc -eu -Tc -qe -WU -rW -hN -uJ -wt -uJ -uJ -hN -xs -pF -QD -RB -ZP -ZP -ZP -ZP -RF -QD -RF -PK -dC -dC -lp -lH -te -QH -lH -sj -jj -lH -oI -AF -lH -sv -jO -iB -zo -zo -zo -sv -sv -sv -sv -sv -sv -Wa -Wa -WY -WY -WY -WY -WY -WY -"} -(12,1,1) = {" -WY -WY -WY -WY -WY -WY -WY -WY -zo -zo -EQ -EQ -De -sK -Tc -Tc -xN -qe -vz -uJ -uJ -uJ -uJ -ic -mq -aV -ic -uJ -MX -RF -Ib -Ib -pj -Ib -RF -UZ -jc -gp -ki -CP -mo -lH -ts -NK -lH -xp -NK -lH -Bj -NK -lH -xt -GE -xt -zo -WY -zo -xt -sv -Wa -sv -sv -Wa -Wa -Wa -WY -WY -WY -WY -WY -WY -"} -(13,1,1) = {" -WY -WY -WY -WY -WY -WY -WY -zo -zo -zo -EQ -KS -yl -La -eu -Tc -Uw -jv -nP -nP -nP -nP -Vc -li -nP -nP -nP -nP -nP -nP -nP -nP -nP -nP -cX -dg -Et -xt -hi -CP -ki -WC -Bi -HU -mc -iG -ad -qk -kr -hM -iw -Fr -Gp -xt -xt -kS -cd -xt -Wa -sv -Wa -sv -sv -Wa -Wa -Wa -RM -WY -WY -WY -WY -"} -(14,1,1) = {" -WY -WY -RM -WY -WY -WY -WY -zo -zo -EQ -EQ -NH -dt -at -Tc -Tc -Tc -as -nP -Ik -yz -kT -vy -vs -On -xu -ZO -ho -gu -Za -wQ -fV -mM -nP -lE -lE -Sf -xt -dl -CP -ki -ki -ki -ki -ki -ki -ki -ki -ki -ki -AA -gs -wW -Ld -sc -Ex -xB -xt -Wa -Wa -sv -Wa -sv -Wa -Wa -zo -WY -WY -WY -WY -WY -"} -(15,1,1) = {" -WY -WY -WY -WY -WY -WY -zo -zo -zo -EQ -kp -Tc -LW -Tc -Tc -Tc -eu -qe -nP -Uf -SA -lF -EH -EH -eo -cW -ZO -QY -fG -EH -nh -EH -Ed -nP -Ht -Mi -uP -xt -An -jJ -zc -ki -ki -vO -vO -vO -vO -BK -vO -ki -bn -xt -Fs -xt -Ak -MU -eZ -xt -zo -sv -Wa -sv -sv -Wa -zo -zo -WY -WY -WY -WY -WY -"} -(16,1,1) = {" -WY -WY -WY -WY -WY -WY -zo -zo -EQ -EQ -eu -bX -Ws -Oi -Oi -Oi -Oi -qe -nP -Uf -EH -UV -EH -EH -Id -Kw -ZO -KP -Ic -EH -nh -xY -vB -nP -lE -MS -uP -xt -pW -kt -ki -ki -vO -vO -SM -BK -SM -sB -ki -kd -lI -KM -UI -xt -xt -sa -xt -xt -zo -zo -Wa -sv -Wa -Wa -zo -zo -WY -WY -WY -WY -WY -"} -(17,1,1) = {" -WY -WY -WY -WY -WY -WY -zo -zo -EQ -Xw -Tc -lr -Gl -Ez -Tc -Tc -MJ -qe -nP -Uf -EH -tZ -EH -EH -Id -Kw -ZO -Ww -Xh -EH -EH -Id -Kw -IB -lE -lE -BX -xt -IG -kt -ki -vO -ki -vO -BK -SM -SM -vO -ki -ki -Fh -Zq -hP -QW -Rm -FT -sL -zo -Wa -Vi -sv -sv -Wa -zo -zo -zo -WY -WY -WY -WY -WY -"} -(18,1,1) = {" -WY -WY -WY -WY -WY -zo -zo -zo -EQ -Cx -Tc -jF -Gf -gE -QL -RJ -ml -qe -nP -QX -EH -rt -rt -rt -Er -sr -ZO -Uf -Xh -EH -EH -Id -Kw -nP -lE -lE -uP -xt -fv -kt -ki -ki -ki -vO -SM -SM -BK -vO -ki -ki -Fh -DD -wh -Ob -xt -zC -xt -zo -Vi -zo -nx -Wa -Wa -zo -zo -zo -WY -WY -WY -WY -WY -"} -(19,1,1) = {" -WY -WY -WY -WY -WY -zo -zo -zo -SU -SU -SU -SU -SU -SU -SU -eL -SU -HW -nP -pE -EH -EH -EH -EH -RT -Sg -pY -ko -Qf -Qf -Qf -Az -tA -nP -xZ -lE -bK -xt -ki -Un -ki -ki -ki -vO -vO -vO -vO -vO -ki -ki -Fh -zT -Ti -eQ -xt -Ke -cd -zo -Vi -zo -zo -zo -tt -zo -zo -zo -WY -WY -WY -WY -WY -"} -(20,1,1) = {" -WY -WY -WY -WY -WY -zo -zo -zo -Wa -sv -sv -Wa -Wa -Wa -kf -yi -yi -FF -nP -CB -eF -Ns -eF -eF -eF -YF -ZO -TJ -Id -EH -EH -Az -bm -nP -lE -lE -uP -xt -OD -Un -Un -Un -Un -Un -vT -Un -Un -Un -ki -ki -jG -bS -lQ -qd -xt -WY -zo -zo -sv -FG -nx -nx -Wa -zo -zo -zo -WY -WY -WY -WY -WY -"} -(21,1,1) = {" -WY -WY -WY -WY -WY -zo -zo -Wa -Wa -sv -Wa -sv -Wa -sv -kf -vv -yi -FF -nP -Gv -EH -EH -EH -EH -EH -Su -ZO -yx -fJ -EH -EH -Az -Pf -HQ -tQ -lE -uP -xt -ki -ki -ki -Zw -Zm -Rg -oQ -PB -cv -Qu -uK -XH -Me -hf -hf -xt -xt -zo -zo -sv -Wa -Wa -zb -kA -kF -zo -zo -zo -WY -WY -WY -WY -WY -"} -(22,1,1) = {" -WY -WY -WY -RM -WY -zo -zo -Wa -Wa -Wa -Wa -Wa -sv -Wa -kf -VO -UO -mx -nP -xT -EH -EH -Zi -rG -EH -RH -ZO -cc -TT -EH -EH -rF -Ni -nP -tQ -lE -BX -xt -ST -Zv -ST -lH -NK -ub -lH -NK -lV -lH -NK -Qg -lH -xt -xt -xt -sv -sv -sv -sv -Wa -LJ -UJ -UJ -rg -av -MG -LJ -WY -WY -WY -WY -WY -"} -(23,1,1) = {" -WY -WY -WY -WY -WY -zo -Wa -Wa -Wa -sv -sv -sv -sv -sv -kf -sI -zB -FF -nP -oc -yG -yG -yG -EH -YI -RH -ZO -Uf -EH -EH -EH -EH -Sn -nP -tQ -lE -uP -xt -vO -pc -vO -lH -Rf -ld -lH -pU -xj -lH -Qk -fR -lH -sv -sv -sv -sv -Wa -Zc -LJ -rg -av -MG -UJ -At -Mr -ye -LJ -WY -WY -WY -WY -WY -"} -(24,1,1) = {" -WY -WY -WY -WY -WY -Wa -sv -Wa -sv -Wa -sv -sv -Wa -Wa -kf -jN -yi -wo -nP -RO -fC -iZ -Uc -ZK -Sp -lw -ZO -RI -Jz -sN -rH -Cw -aY -nP -tQ -Mi -uP -xt -vO -vO -vO -lH -GB -vp -lH -om -hR -lH -RY -MD -lH -sv -sv -sv -sv -LJ -LJ -LJ -Qn -UJ -Xb -LJ -Qn -Mr -If -LJ -WY -WY -WY -WY -WY -"} -(25,1,1) = {" -WY -WY -WY -WY -WY -Wa -sv -Wa -Wa -Wa -sv -sv -Wa -Wa -kf -cz -yi -FF -db -nS -Nh -pa -VU -WW -Xy -mi -rh -rh -rh -rh -rh -rh -rh -WU -tE -tQ -uP -xt -xt -xt -xt -xt -xt -xt -xt -xt -xt -bO -xt -xt -xt -GY -sv -sv -sv -LJ -LJ -LJ -Qn -UJ -IL -LJ -Ft -Mr -ye -LJ -WY -WY -WY -WY -WY -"} -(26,1,1) = {" -WY -WY -WY -WY -WY -Wa -Wa -sv -sv -Wa -sv -Wa -Wa -sv -kf -VO -pk -FF -db -FM -WQ -WQ -gR -RH -Xy -KE -Zp -gv -hw -lU -RU -pJ -wC -WU -lE -MS -Sj -WU -uC -ag -ag -iq -SL -KV -Iw -zm -UX -wa -cK -CI -Ck -Iw -zo -zo -zo -LJ -LJ -LJ -Qn -UJ -IL -LJ -gX -Mr -WB -LJ -WY -WY -WY -WY -WY -"} -(27,1,1) = {" -WY -WY -WY -WY -WY -Wa -sv -sv -Wa -Wa -sv -Wa -Wa -Wa -kf -zK -DG -FF -db -wl -pr -Gn -hD -bj -Xy -eE -HF -HF -HF -kJ -FU -FN -rh -WU -Qs -AN -hA -WU -Ki -vR -iq -iq -iq -iq -Iw -xL -MO -Jj -BS -CV -ZH -EN -zo -zo -zo -LJ -LJ -LJ -Bk -UJ -ye -LJ -gX -UJ -ye -LJ -WY -WY -WY -WY -WY -"} -(28,1,1) = {" -WY -WY -WY -WY -WY -Wa -sv -Wa -sv -Wa -sv -Wa -Wa -sv -kf -LH -KW -FF -db -QX -kx -WQ -WQ -Kj -Xy -rz -HF -fl -OT -bD -yY -ak -yY -VH -eA -CA -ep -Kg -Ki -MC -Ki -iq -iq -iq -Iw -zW -CV -zJ -BS -HS -BW -Qx -Qx -Qx -Qx -av -av -av -OR -UJ -uU -av -qi -UJ -uU -av -WY -WY -WY -WY -WY -"} -(29,1,1) = {" -WY -WY -WY -WY -WY -Wa -sv -sv -Wa -sv -sv -sv -sv -Wa -kf -aI -yi -Tx -db -PM -Cf -OZ -Zi -jm -Xy -CX -VT -OT -dZ -yY -yY -kO -dT -ul -GM -GM -GM -kb -ro -MB -Ki -Ki -XE -aq -Iw -vj -Yb -VE -AM -IO -BW -JN -xP -xP -gn -jE -UJ -UJ -UJ -UJ -UJ -UJ -UJ -UJ -Mr -OS -WY -WY -WY -WY -WY -"} -(30,1,1) = {" -WY -WY -WY -WY -WY -Wa -Wa -sv -Wa -sv -Wa -sv -sv -Wa -kf -mI -zK -FF -db -DO -wx -vQ -YB -Yf -Xy -rV -OT -pt -yY -yY -Lh -bi -Hn -Hn -di -TP -px -px -px -on -IE -Ki -Ki -Iw -Iw -Iw -Iw -Iw -ge -HS -TL -Qx -Qx -Qx -Qx -Gy -Gy -Gy -Hb -Mr -Al -Gy -Pl -UJ -fw -Gy -WY -WY -WY -WY -WY -"} -(31,1,1) = {" -WY -WY -RM -WY -WY -Wa -sv -Wa -Wa -sv -Wa -Wa -Wa -Wa -kf -yi -yi -Pc -db -QX -Ua -sF -tz -RH -Xy -TV -yF -yY -yY -Zn -oC -yj -uv -uv -uv -uv -uv -uv -ly -Kp -on -IE -Fb -dy -Fm -lA -hZ -Iw -aX -HS -my -Qx -zo -zo -zo -LJ -LJ -LJ -Ft -UJ -IL -LJ -gX -Mr -co -LJ -WY -WY -WY -WY -WY -"} -(32,1,1) = {" -WY -WY -WY -WY -WY -Wa -Wa -sv -Wa -sv -Wa -sv -Wa -sv -kf -vq -ja -FF -db -Te -Zi -EH -lj -hb -Xy -JF -lt -Rr -Lh -jz -es -uv -uv -hm -Vk -uv -lC -xl -ly -ly -Sv -qv -IE -GR -xP -ps -eD -Iw -iM -pH -FX -Qx -zo -zo -zo -LJ -LJ -LJ -Qn -UJ -IL -LJ -Yc -Mr -ye -LJ -WY -WY -WY -WY -WY -"} -(33,1,1) = {" -WY -WY -WY -WY -WY -Wa -sv -Wa -Wa -sv -sv -Wa -Wa -Wa -kf -zK -hB -FF -db -HY -Vl -jM -GU -ME -Xy -wC -rh -yY -bV -dX -Qp -uv -lS -lC -lC -uv -lC -lC -lC -ly -cT -Xq -gl -bz -Iw -lK -Ha -Iw -pf -VE -RX -Iw -zo -zo -zo -LJ -LJ -LJ -wV -UJ -ye -LJ -Qn -Mr -ye -LJ -WY -WY -WY -WY -WY -"} -(34,1,1) = {" -WY -WY -WY -WY -WY -Wa -sv -Wa -sv -sv -Wa -Wa -sv -Wa -kf -Cq -Cq -Cp -db -db -db -db -db -db -yd -kf -kf -NM -jz -rw -uv -uv -LA -lC -Jp -uv -lC -lC -ue -uv -uv -ww -qv -MB -Iw -Iw -Iw -Iw -Iw -Au -Iw -Iw -ZN -of -of -LJ -EJ -EJ -Qn -UJ -co -LJ -Qn -Mr -If -LJ -WY -WY -WY -WY -WY -"} -(35,1,1) = {" -WY -WY -WY -WY -WY -Wa -Wa -sv -sv -sv -Wa -sv -sv -Wa -kf -XN -iV -Tx -XJ -UO -gc -sM -OJ -eG -Eu -mE -BI -DS -yB -PZ -ef -oV -lC -ux -pv -uv -pS -lC -lC -lC -mC -Sv -zO -es -lx -LN -LN -ct -mu -Pz -LN -LN -qf -Wp -of -of -LJ -LJ -aF -Gy -Ho -LJ -At -Mr -ye -LJ -WY -WY -WY -WY -WY -"} -(36,1,1) = {" -WY -WY -WY -WY -WY -Wa -Wa -Wa -Wa -sv -sv -Wa -Wa -sv -kf -sI -zK -Tx -rP -Md -BJ -mZ -LI -Uh -BG -iW -Tl -qb -SW -Qo -uv -fp -yO -uD -dq -hr -tN -lC -lC -mB -uv -XI -Oo -Vz -ZM -LN -LN -tI -LN -Pz -LN -LN -Eq -LN -yv -of -of -LJ -LJ -LJ -LJ -LJ -aF -Gy -Ho -LJ -WY -WY -WY -WY -WY -"} -(37,1,1) = {" -WY -WY -WY -WY -RM -Wa -sv -sv -sv -sv -sv -Wa -Wa -Wa -kf -aI -eY -sT -Nj -hh -VV -Oq -Lm -Gx -Nr -ek -dh -VP -dG -es -Fe -lC -lC -sm -lT -uv -Vj -lC -lC -lC -ZX -mH -ID -DA -JW -Pz -Pz -pM -Pz -Pz -GT -GT -GT -GT -LN -Jx -of -zo -zo -zo -zo -zo -zo -zo -zo -zo -WY -WY -WY -WY -WY -"} -(38,1,1) = {" -WY -WY -WY -WY -WY -Wa -Wa -Wa -Wa -sv -sv -Wa -sv -Wa -kf -RP -up -tp -kf -kf -kf -SK -Gx -dB -kf -kf -kf -yt -LG -es -uv -uv -Jl -lC -FB -uv -lC -lC -rC -uv -uv -Sv -qL -fO -hj -hj -hj -hj -hj -Ut -ZN -OM -OM -Sq -Gk -OM -OM -YK -YK -YK -zo -zo -zo -zo -zo -zo -WY -WY -WY -WY -WY -"} -(39,1,1) = {" -WY -WY -WY -WY -WY -Wa -Wa -sv -Wa -sv -Wa -sv -sv -sv -kf -yi -UO -FF -kf -nZ -jZ -jZ -bt -jZ -SX -ug -kf -Ki -mH -kb -BV -uv -tT -lC -lC -uv -lC -lC -lC -ly -xc -oN -qL -fO -OB -Gd -kI -oq -hj -kk -oL -OM -yy -EY -wY -DZ -zL -pw -We -YK -YK -YK -zo -zo -zo -zo -WY -WY -WY -WY -WY -"} -(40,1,1) = {" -WY -WY -WY -WY -WY -Wa -sv -sv -Wa -Wa -sv -sv -Wa -Wa -kf -aI -cz -FF -kf -tf -Fl -mt -Cm -by -Nz -kU -Se -Ki -TH -LG -sn -uv -uv -To -rk -uv -lC -aw -ly -ly -Sv -ID -ZC -WO -Ek -Ek -Ek -pd -hj -oL -oL -OM -Ox -fL -dw -Af -Af -Af -Ie -gk -ke -YK -zo -zo -zo -zo -WY -WY -WY -WY -WY -"} -(41,1,1) = {" -WY -WY -WY -WY -WY -Wa -sv -Wa -Wa -sv -sv -Wa -sv -Wa -kf -cH -up -FF -cV -cV -cV -cV -cV -cV -cV -cV -cV -Ki -tW -GW -kc -MB -uv -uv -uv -uv -uv -uv -ly -Lh -oN -qL -KA -KA -sl -sl -mO -pd -hj -mr -am -OM -CW -fL -Af -Af -Af -Af -Af -Af -cr -YK -YK -zo -zo -zo -WY -WY -WY -WY -WY -"} -(42,1,1) = {" -WY -WY -WY -WY -WY -Wa -Wa -sv -sv -Wa -Wa -sv -Wa -Wa -kf -zK -zK -cY -cV -GF -Ls -wc -KJ -fI -Bp -vN -Zr -Ki -Ki -tH -GW -Ci -ff -ro -Mp -CG -ro -br -ro -oN -to -qL -fO -kN -sl -Vg -mO -SZ -hj -OG -Xr -OM -vo -fL -Af -Af -Af -Af -Af -uN -oS -Kc -YK -zo -zo -zo -WY -WY -WY -WY -WY -"} -(43,1,1) = {" -WY -WY -WY -WY -WY -Wa -Wa -sv -Wa -Wa -sv -sv -Wa -sv -kf -JB -KQ -FF -cV -EV -IW -HX -gd -gd -zZ -Nq -RC -Ki -ai -tH -tH -ik -xU -eg -zO -zO -ID -xU -xU -xU -xU -ZC -tk -IU -WM -sl -iy -FS -hj -YT -YT -OM -vG -fL -Ch -Ch -Ch -Yy -kW -Ch -tn -FR -YK -YK -zo -zo -WY -WY -WY -WY -WY -"} -(44,1,1) = {" -WY -WY -WY -WY -WY -Wa -sv -sv -Wa -sv -Wa -Wa -Wa -Wa -kf -vU -yi -FF -iA -xi -xi -xi -Ae -Ae -Ae -yS -nu -Ki -dG -Ef -Ki -jP -Ki -Kp -lb -Yr -SI -gJ -gJ -gJ -Px -lR -gJ -gJ -hj -po -iy -KZ -hj -Rp -Dk -OM -kq -Af -Tk -Af -Yt -mK -gW -PE -Tk -oS -hL -YK -zo -zo -WY -WY -WY -WY -WY -"} -(45,1,1) = {" -WY -WY -WY -WY -WY -Wa -sv -sv -Wa -Wa -sv -Wa -sv -Wa -kf -SE -mv -BM -Lr -Zy -ga -Zy -gd -gd -Zy -IH -RC -Ki -Kl -RK -Wn -re -Ki -Ki -fd -US -nb -gJ -Uv -Uv -KO -yn -Uv -GS -hj -nc -iy -Ju -hj -rZ -nL -OM -ut -OF -OF -ry -OF -EE -SV -OF -TX -an -JX -YK -zo -zo -WY -WY -WY -WY -WY -"} -(46,1,1) = {" -WY -WY -WY -WY -WY -Wa -sv -sv -sv -sv -Wa -Wa -sv -Wa -kf -yi -aI -NL -cV -EV -Mt -gd -gd -gd -zZ -aS -ah -Ki -vF -nQ -EA -cA -Jq -Ki -DN -Bg -Hg -gJ -Uv -Gs -KO -Ly -Ly -Uv -ft -sl -td -Ju -hj -YT -tC -QC -QC -QC -QC -ZG -ZG -ZG -ZG -ZG -ZG -ZG -ZG -ZG -zo -zo -WY -WY -WY -WY -WY -"} -(47,1,1) = {" -WY -WY -WY -RM -WY -Wa -sv -sv -Wa -sv -Wa -Wa -sv -Wa -kf -yi -cH -NL -cV -ku -EB -hE -rv -vl -JY -bF -ba -Ki -Mz -jA -vd -QP -Jq -Ki -Bg -fU -SP -Xj -yn -yn -go -Nt -Ly -yn -Tz -sl -FZ -dW -hj -ru -gP -TF -JL -Qy -QB -ng -nF -Sb -Jm -Sb -Sb -Sb -mG -ZG -zo -zo -WY -WY -WY -WY -WY -"} -(48,1,1) = {" -WY -WY -WY -WY -WY -Wa -Wa -Wa -sv -sv -Wa -Wa -sv -sv -kf -WE -WE -VJ -cV -cV -cV -cV -cV -cV -cV -cV -cV -Ki -AP -AP -AP -AP -AP -AP -JE -XD -Hg -bA -yn -yn -gb -iJ -Ly -Rh -hj -Bn -hj -hj -hj -vm -jV -Wq -xS -JI -Lf -ng -MV -Dv -Dv -Dv -Ur -gN -md -cu -zo -zo -WY -WY -WY -WY -WY -"} -(49,1,1) = {" -WY -WY -WY -WY -WY -Wa -Wa -sv -sv -sv -Wa -sv -sv -Wa -kf -yi -GD -vc -kf -Wa -Wa -Wa -Wa -Wa -Wa -Wa -Wa -Wa -vC -HB -dA -eB -Nw -bg -AG -cU -vn -gJ -Uv -yn -yn -yn -Vm -Gt -hj -uR -uR -hV -hj -Wu -kD -kD -kD -Ce -xO -Ih -qH -cQ -bx -bx -rB -ng -oE -ZG -zo -zo -WY -WY -WY -WY -WY -"} -(50,1,1) = {" -WY -WY -WY -WY -WY -Wa -sv -Wa -sv -Wa -sv -sv -Wa -Wa -kf -mh -PF -Ks -kf -Wa -ta -ta -ta -ta -ta -Wa -sv -Wa -vC -LY -zt -Hf -Yu -gD -Bg -Cv -vn -gJ -aZ -Uv -QT -QT -Uv -rd -hj -uR -uR -hV -hj -fB -hQ -fB -fB -Rx -vW -Pq -Gu -EO -bx -bx -dP -rK -RE -qh -zo -zo -WY -WY -WY -WY -WY -"} -(51,1,1) = {" -WY -WY -WY -WY -WY -Wa -sv -Wa -sv -sv -sv -Wa -Wa -sv -kf -Bz -jZ -jZ -kf -ta -ta -iU -rE -Dc -ta -ta -Wa -sv -vC -qQ -Hk -Hf -Ud -gD -iT -US -mT -gJ -gJ -gJ -gJ -gJ -gJ -gJ -hj -hj -hj -hj -hj -Yp -vA -th -fB -LD -Lf -ng -ZV -bx -PR -bx -Io -cE -hu -lX -zo -zo -WY -WY -WY -WY -WY -"} -(52,1,1) = {" -WY -WY -WY -WY -WY -Wa -sv -Wa -sv -sv -sv -sv -Wa -ta -ta -DQ -ta -ta -ta -ta -ha -DK -Uz -iU -DK -ta -Wa -Wa -vC -bY -zt -lW -aU -gD -Bg -Bg -MF -Cv -Bg -Bg -Cv -Bg -Bg -Bg -zp -AD -AD -AD -YW -sd -MF -Vu -fB -LD -dE -ng -ui -bx -bx -bx -ar -cE -EO -lX -zo -Eb -WY -WY -WY -WY -WY -"} -(53,1,1) = {" -WY -WY -WY -WY -WY -Wa -Wa -sv -Wa -sv -sv -sv -Wa -ta -ed -ed -DK -un -uw -ta -ta -rE -ed -DK -iU -ta -Wa -Wa -vC -xH -Le -lW -pT -SG -Cv -cU -MF -Bg -Bg -Bg -Ps -Bg -Bg -Cv -zp -yD -Bg -Bg -Bg -Ps -MF -Da -QA -Qh -pl -ng -SQ -Pt -bx -gT -ar -cE -bx -lX -zo -zo -WY -WY -WY -WY -WY -"} -(54,1,1) = {" -WY -WY -WY -WY -WY -zo -Wa -Wa -sv -sv -sv -Wa -Wa -ta -ta -gt -pD -ta -ta -ta -ta -Dc -ed -oe -ed -ta -sv -Wa -vC -ia -zt -lW -DP -vC -cn -Bg -MF -CY -qS -MF -MF -MF -ka -eK -fT -zM -Mu -zM -zM -zM -zM -MY -fB -PS -oy -ng -BF -bx -EO -bx -xC -cE -hu -Lo -zo -zo -WY -WY -WY -WY -WY -"} -(55,1,1) = {" -WY -WY -WY -WY -WY -zo -Wa -Wa -sv -sv -sv -sv -Wa -Wa -ta -ta -ed -ed -DK -LS -ta -ta -ta -rE -ed -ta -Wa -sv -vC -PT -zt -lW -Yu -vC -TW -TW -TW -eI -eI -eI -Kk -eI -eI -eI -Hy -yU -mV -yU -yU -ZU -yU -Hy -Hy -Hy -Hy -ng -BF -bx -bx -bx -ar -ym -KL -Ix -zo -zo -WY -WY -no -RM -WY -"} -(56,1,1) = {" -WY -RM -WY -WY -WY -zo -zo -Wa -Wa -Wa -sv -sv -Wa -sv -Wa -ta -ed -LS -oe -ed -Kf -oe -ta -ta -ed -ta -sv -sv -vC -jY -zt -lW -nk -ls -lW -EC -vC -Oj -tY -Jv -tc -Jv -Im -CS -Hy -in -Cc -Cc -op -wZ -le -hl -Sk -Cc -rD -ng -BF -cQ -bx -JM -Os -aP -aP -ZG -zo -zo -WY -WY -RM -WY -WY -"} -(57,1,1) = {" -WY -WY -WY -WY -WY -zo -zo -Wa -sv -Wa -sv -sv -sv -Wa -Wa -ta -ta -ta -ta -ta -ed -cs -mD -ta -DK -ta -Wa -sv -vC -NX -zt -lW -Yu -gD -JQ -NN -vC -Vx -Ji -Cy -El -tM -dv -Ij -Hy -Rc -Vn -nt -nt -Rq -nt -nt -Es -Nl -sq -ng -Gb -Dv -Dv -Dv -CM -Sb -Tb -cu -zo -zo -WY -WY -WY -WY -WY -"} -(58,1,1) = {" -WY -WY -WY -WY -WY -WY -zo -Wa -Wa -Wa -Wa -sv -Wa -sv -Wa -sv -ta -DK -ed -LS -oK -gt -ta -ta -ed -ta -Wa -Wa -vC -Fk -Oa -lW -cD -vC -vC -vC -vC -Jv -Jv -Jv -YC -Jv -Jv -Jv -Hy -Sa -Fq -LQ -LQ -os -LQ -Xz -Xz -dR -eM -ng -Ts -dk -uM -iC -gN -gN -jU -ZG -zo -zo -WY -WY -WY -WY -WY -"} -(59,1,1) = {" -WY -WY -WY -WY -WY -WY -zo -zo -Wa -Wa -sv -sv -sv -Wa -sv -Wa -ta -LS -iU -ta -ta -ta -ta -fK -TM -ta -Wa -sv -vC -ph -zt -lW -Yu -gD -kR -kX -vC -xq -ov -ve -sw -lD -yA -ZY -Hy -hS -wm -cq -jo -TQ -CZ -Bo -Vy -gS -IK -ng -ng -ng -ng -ng -ng -ng -ng -ZG -zo -vE -WY -WY -WY -WY -WY -"} -(60,1,1) = {" -WY -WY -WY -WY -WY -WY -uo -zo -Wa -Wa -Wa -sv -sv -sv -Wa -Wa -ta -ta -ed -ed -ed -ta -rE -ow -Lg -ta -Wa -sv -vC -nW -Nx -Wh -CE -hY -IF -EC -vC -sD -JO -Jv -pX -Jv -Pa -Hi -zf -zf -XV -KB -CL -XV -zf -zf -zf -zf -zf -Hy -Wa -Wa -sv -sv -Wa -Wa -Wa -zo -vE -FE -WY -WY -WY -WY -WY -"} -(61,1,1) = {" -WY -WY -WY -WY -WY -WY -FE -vE -zo -Wa -Wa -Wa -Wa -sv -sv -Wa -Wa -ta -ta -Kf -DK -ta -ed -WJ -Yl -ta -Wa -sv -vC -vC -vC -vC -vC -vC -vC -vC -vC -Sw -Sw -Sw -Sw -Sw -Sw -Sw -zf -Ng -Cc -BU -Kr -YD -Jw -Bq -Wc -Wc -bH -sv -sv -sv -Wa -Wa -Wa -Wa -zo -zo -vE -WY -WY -WY -WY -WY -WY -"} -(62,1,1) = {" -WY -WY -WY -WY -ZJ -WY -FE -zo -zo -zo -Wa -sv -Wa -sv -sv -sv -Wa -Wa -ta -ed -mD -oe -ed -ed -ta -ta -Wa -Wa -sv -Wa -sv -sv -sv -sv -Wa -sv -sv -Wa -sv -sv -Wa -Wa -XZ -Wa -bH -Lp -Es -Zl -qF -gy -iu -Cs -qr -HH -ip -ce -sv -Wa -sv -Wa -Wa -zo -zo -vE -FE -WY -WY -WY -WY -WY -WY -"} -(63,1,1) = {" -WY -WY -WY -jn -Wt -WY -FE -WY -vE -zo -zo -Wa -Wa -sv -Wa -sv -Wa -Wa -ta -ta -ha -gt -WJ -ta -ta -Wa -Wa -Wa -sv -sv -sv -Wa -Wa -Wa -sv -Wa -Wa -sv -sv -Wa -Wa -Wa -XZ -Wa -bH -lZ -kh -tV -zd -ud -Xn -bH -Ba -ot -bH -zo -sv -Wa -Wa -Wa -zo -zo -vE -FE -WY -WY -WY -WY -WY -WY -WY -"} -(64,1,1) = {" -WY -WY -WY -jn -jn -FE -FE -qD -FE -vE -zo -zo -zo -Wa -sv -Wa -Wa -sv -sv -ta -ta -ta -ta -ta -Wa -Wa -sv -sv -Wa -Wa -sv -sv -sv -sv -sv -sv -sv -sv -Wa -sv -sv -Wa -Wa -XZ -bH -KG -bH -gA -gA -bH -KG -bH -bH -bH -bH -zo -sv -sv -Wa -zo -zo -vE -FE -WY -WY -WY -WY -WY -WY -WY -WY -"} -(65,1,1) = {" -WY -WY -Wt -jn -jn -Wt -FE -WY -WY -WY -WY -zo -vE -zo -zo -Wa -sv -sv -Wa -sv -Wa -Wa -Wa -sv -sv -Wa -sv -Wa -Wa -sv -Wa -Wa -Wa -Wa -sv -Wa -Wa -Wa -Wa -Wa -Wa -zo -zo -zo -zo -zo -zo -zo -dr -zo -zo -zo -zo -zo -zo -zo -Wa -zo -zo -vE -vE -FE -WY -WY -WY -WY -WY -WY -WY -WY -WY -"} -(66,1,1) = {" -WY -WY -jn -jn -Wt -jn -FE -FE -FE -FE -FE -FE -FE -vE -zo -zo -zo -Wa -sv -Wa -sv -sv -sv -sv -sv -Wa -Wa -Wa -Wa -sv -Wa -sv -Wa -Wa -sv -Wa -Wa -Wa -sv -Wa -zo -zo -zo -zo -zo -zo -zo -zo -zo -zo -zo -zo -zo -zo -zo -zo -zo -zo -vE -FE -WY -WY -WY -WY -WY -WY -WY -RM -WY -WY -WY -"} -(67,1,1) = {" -WY -ZJ -Wt -jn -jn -jn -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -"} -(68,1,1) = {" -WY -WY -WY -Wt -jn -Wt -ZJ -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -RM -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -"} -(69,1,1) = {" -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -EW -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -RM -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -"} -(70,1,1) = {" -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -RM -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -"} -(71,1,1) = {" -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -"} diff --git a/_maps/RandomRuins/SpaceRuins/nova/port_tarkon/defcon4.dmm b/_maps/RandomRuins/SpaceRuins/nova/port_tarkon/defcon4.dmm deleted file mode 100644 index d2cb66b12ef..00000000000 --- a/_maps/RandomRuins/SpaceRuins/nova/port_tarkon/defcon4.dmm +++ /dev/null @@ -1,12943 +0,0 @@ -//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE -"ad" = ( -/obj/machinery/atmospherics/components/unary/portables_connector/visible{ - dir = 8 - }, -/obj/effect/turf_decal/tile/red/fourcorners{ - color = "#DE3A3A" - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/airless, -/area/ruin/space/has_grav/port_tarkon/atmos) -"ah" = ( -/obj/effect/turf_decal/tile/blue/half, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/trauma) -"ai" = ( -/obj/machinery/cryopod{ - dir = 4 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/centerhall) -"ak" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/door/firedoor/solid, -/obj/machinery/door/airlock/engineering/glass{ - name = "P-T Tool Storage" - }, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/toolstorage) -"am" = ( -/obj/structure/mop_bucket, -/obj/item/mop, -/obj/item/reagent_containers/cup/bucket, -/obj/item/soap/nanotrasen, -/turf/open/floor/plating, -/area/ruin/space/has_grav/port_tarkon/afthall) -"an" = ( -/obj/machinery/firealarm/directional/east, -/obj/effect/turf_decal/tile/blue/half{ - dir = 4 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/port_tarkon/comms) -"ap" = ( -/mob/living/basic/carp, -/obj/effect/decal/cleanable/dirt, -/turf/open/misc/asteroid/airless, -/area/ruin/space/has_grav/port_tarkon/atmos) -"aq" = ( -/obj/structure/toilet{ - dir = 8 - }, -/obj/structure/window/reinforced/tinted/spawner/directional/north, -/obj/machinery/door/window/left/directional/west{ - opacity = 1 - }, -/turf/open/floor/iron/white, -/area/ruin/space/has_grav/port_tarkon/centerhall) -"as" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/cable, -/obj/machinery/light/dim/directional/south, -/obj/machinery/light_switch/directional/south, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/airless, -/area/ruin/space/has_grav/port_tarkon/observ) -"at" = ( -/obj/structure/chair/sofa/corp/corner{ - dir = 8 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/airless, -/area/ruin/space/has_grav/port_tarkon/observ) -"av" = ( -/obj/effect/turf_decal/stripes/asteroid/line{ - dir = 4 - }, -/turf/open/misc/asteroid/airless, -/area/solars/tarkon) -"aF" = ( -/obj/effect/turf_decal/stripes/asteroid/corner{ - dir = 8 - }, -/turf/open/misc/asteroid/airless, -/area/solars/tarkon) -"aP" = ( -/obj/effect/spawner/structure/window/reinforced, -/turf/open/floor/plating, -/area/ruin/space/has_grav/port_tarkon/storage) -"aS" = ( -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ - dir = 8 - }, -/obj/structure/table/rolling, -/obj/item/surgery_tray/full, -/obj/item/clothing/gloves/latex{ - pixel_y = 10 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/trauma) -"aT" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/mining) -"aU" = ( -/obj/structure/table/reinforced, -/obj/item/card/id/away/tarkon{ - pixel_y = -6 - }, -/obj/item/card/id/away/tarkon, -/obj/item/card/id/away/tarkon{ - pixel_y = 6 - }, -/obj/item/folder/red, -/obj/effect/turf_decal/tile/red/half, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/secoff) -"aX" = ( -/obj/structure/cable, -/obj/machinery/airalarm/directional/north, -/obj/effect/mapping_helpers/airalarm/all_access, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/effect/turf_decal/tile/yellow/half{ - dir = 1 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/power1) -"aY" = ( -/obj/structure/table, -/obj/item/stack/sheet/mineral/silver{ - amount = 25 - }, -/obj/machinery/airalarm/directional/east, -/obj/effect/mapping_helpers/airalarm/all_access, -/obj/effect/turf_decal/tile/purple/anticorner, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/dark/airless, -/area/ruin/space/has_grav/port_tarkon/developement) -"aZ" = ( -/obj/machinery/biogenerator, -/obj/machinery/light/small/directional/east, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/grass, -/area/ruin/space/has_grav/port_tarkon/garden) -"ba" = ( -/obj/structure/table/optable, -/obj/effect/turf_decal/tile/blue/anticorner, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/trauma) -"bg" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/cable, -/obj/machinery/door/airlock/security/old, -/obj/effect/mapping_helpers/airlock/access/all/tarkon/general, -/obj/machinery/door/firedoor/solid, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/secoff) -"bi" = ( -/obj/effect/turf_decal/tile/neutral, -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/centerhall) -"bj" = ( -/obj/machinery/light/warm/directional/south, -/obj/effect/turf_decal/tile/purple/half, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/port_tarkon/developement) -"bm" = ( -/obj/machinery/light_switch/directional/south, -/obj/effect/turf_decal/tile/purple/half, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/dark/airless, -/area/ruin/space/has_grav/port_tarkon/developement) -"bn" = ( -/obj/effect/turf_decal/stripes{ - dir = 1 - }, -/obj/machinery/button/door/incinerator_vent_atmos_aux{ - pixel_x = -8; - pixel_y = -24; - req_one_access = list("tarkon") - }, -/obj/machinery/button/door/incinerator_vent_atmos_main{ - pixel_x = -8; - pixel_y = -36; - req_one_access = list("tarkon") - }, -/obj/machinery/atmospherics/components/binary/pump/off/general{ - dir = 8 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/dark/airless, -/area/ruin/space/has_grav/port_tarkon/atmos) -"br" = ( -/obj/machinery/firealarm/directional/west, -/obj/effect/turf_decal/tile/neutral/half{ - dir = 8 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/centerhall) -"bt" = ( -/obj/effect/mapping_helpers/burnt_floor, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/plating, -/area/ruin/space/has_grav/port_tarkon/forehall) -"by" = ( -/obj/item/solar_assembly, -/obj/item/solar_assembly, -/obj/item/solar_assembly, -/obj/item/solar_assembly, -/obj/item/solar_assembly, -/obj/item/solar_assembly, -/obj/structure/closet/crate/engineering/electrical, -/obj/item/solar_assembly, -/obj/item/solar_assembly, -/obj/item/solar_assembly, -/obj/item/solar_assembly, -/obj/item/solar_assembly, -/obj/item/solar_assembly, -/obj/item/solar_assembly, -/obj/item/solar_assembly, -/obj/item/solar_assembly, -/obj/item/solar_assembly, -/obj/item/solar_assembly, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/plating, -/area/ruin/space/has_grav/port_tarkon/forehall) -"bz" = ( -/obj/structure/sign/warning/radiation, -/turf/closed/wall, -/area/ruin/space/has_grav/port_tarkon/power1) -"bA" = ( -/obj/machinery/door/firedoor/solid, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/garden) -"bD" = ( -/obj/structure/table/reinforced, -/obj/item/stack/sheet/glass/fifty, -/obj/effect/turf_decal/tile/yellow/anticorner, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/toolstorage) -"bF" = ( -/obj/machinery/iv_drip, -/obj/effect/turf_decal/tile/blue/half{ - dir = 4 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/trauma) -"bH" = ( -/turf/closed/wall/r_wall/rust, -/area/ruin/space/has_grav/port_tarkon/mining) -"bK" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/cable, -/mob/living/basic/carp, -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/glass, -/turf/open/floor/iron/airless, -/area/ruin/space/has_grav/port_tarkon/porthall) -"bO" = ( -/obj/structure/sign/warning/electric_shock, -/turf/closed/wall/r_wall, -/area/ruin/space/has_grav/port_tarkon/atmos) -"bX" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/mob/living/basic/carp, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/airless, -/area/ruin/space/has_grav/port_tarkon/observ) -"bY" = ( -/obj/structure/rack/gunrack, -/obj/machinery/light/directional/north, -/obj/effect/turf_decal/tile/red/half{ - dir = 1 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/secoff) -"bZ" = ( -/obj/item/bonesetter, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/dark/airless, -/area/ruin/space/has_grav/port_tarkon/developement) -"cc" = ( -/obj/structure/frame/machine, -/obj/item/circuitboard/machine/protolathe/offstation, -/obj/effect/turf_decal/tile/purple/half{ - dir = 1 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/dark/airless, -/area/ruin/space/has_grav/port_tarkon/developement) -"cd" = ( -/obj/structure/sign/warning/fire, -/turf/closed/wall/r_wall, -/area/ruin/space/has_grav/port_tarkon/atmos) -"ce" = ( -/mob/living/basic/carp, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/dark/airless, -/area/ruin/space/has_grav/port_tarkon/developement) -"ck" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/cafeteria, -/area/ruin/space/has_grav/port_tarkon/kitchen) -"cn" = ( -/obj/machinery/firealarm/directional/east, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/starboardhall) -"co" = ( -/obj/item/solar_assembly, -/obj/effect/turf_decal/stripes/asteroid/line{ - dir = 1 - }, -/turf/open/misc/asteroid/airless, -/area/solars/tarkon) -"cq" = ( -/obj/effect/turf_decal/tile/brown{ - dir = 4 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/mining) -"cr" = ( -/obj/structure/table, -/obj/item/paper/crumpled, -/obj/effect/turf_decal/tile/blue/half, -/obj/item/folder, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/port_tarkon/comms) -"ct" = ( -/obj/machinery/airalarm/directional/west, -/obj/effect/mapping_helpers/airalarm/all_access, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/afthall) -"cu" = ( -/obj/structure/sign/warning/docking, -/turf/closed/wall/r_wall, -/area/ruin/space/has_grav/port_tarkon/storage) -"cv" = ( -/obj/machinery/atmospherics/components/binary/pump/off/general{ - dir = 8 - }, -/obj/effect/turf_decal/tile/dark/fourcorners, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/airless, -/area/ruin/space/has_grav/port_tarkon/atmos) -"cA" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/layer_manifold/supply{ - dir = 4 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/centerhall) -"cD" = ( -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ - dir = 1 - }, -/obj/effect/turf_decal/tile/red/half, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/secoff) -"cE" = ( -/obj/machinery/door/poddoor/shutters/window/preopen{ - id = "tarkoninner"; - name = "Interior Bay Shutter" - }, -/obj/effect/turf_decal/trimline/yellow/filled/warning{ - dir = 1 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/airless, -/area/ruin/space/has_grav/port_tarkon/storage) -"cJ" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/dark/airless, -/area/ruin/space/has_grav/port_tarkon/developement) -"cK" = ( -/obj/structure/cable, -/obj/effect/turf_decal/delivery/white, -/obj/effect/turf_decal/tile/yellow/half{ - dir = 8 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/power1) -"cQ" = ( -/obj/effect/decal/cleanable/dirt, -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ - dir = 1 - }, -/turf/open/floor/iron/airless, -/area/ruin/space/has_grav/port_tarkon/storage) -"cT" = ( -/obj/machinery/light/warm/directional/east, -/obj/effect/turf_decal/tile/neutral/anticorner{ - dir = 4 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/centerhall) -"cU" = ( -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/starboardhall) -"cV" = ( -/turf/closed/wall, -/area/ruin/space/has_grav/port_tarkon/trauma) -"db" = ( -/turf/closed/wall/r_wall, -/area/ruin/space/has_grav/port_tarkon/developement) -"df" = ( -/obj/machinery/light_switch/directional/west, -/obj/machinery/shower/directional/east, -/obj/effect/turf_decal/stripes{ - dir = 6 - }, -/obj/effect/decal/cleanable/dirt, -/obj/machinery/button/door{ - id = "ptatmos"; - name = "shutter controls"; - pixel_x = -39; - pixel_y = -10 - }, -/turf/open/floor/iron/dark/airless, -/area/ruin/space/has_grav/port_tarkon/atmos) -"dh" = ( -/obj/machinery/door/airlock/public/glass{ - name = "Fore Primary Hallway" - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/door/firedoor/solid, -/obj/structure/cable, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/forehall) -"di" = ( -/obj/machinery/airalarm/directional/east, -/obj/effect/mapping_helpers/airalarm/all_access, -/obj/effect/turf_decal/tile/neutral/half{ - dir = 4 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/centerhall) -"dk" = ( -/obj/structure/closet/crate, -/obj/effect/decal/cleanable/dirt, -/obj/item/reagent_containers/spray/cleaner, -/obj/item/reagent_containers/spray/cleaner, -/obj/item/reagent_containers/spray/cleaner, -/obj/item/grenade/chem_grenade/cleaner, -/obj/item/grenade/chem_grenade/cleaner, -/obj/item/grenade/chem_grenade/cleaner, -/obj/item/grenade/chem_grenade/cleaner, -/obj/item/grenade/chem_grenade/cleaner, -/obj/item/grenade/chem_grenade/cleaner, -/obj/item/grenade/chem_grenade/cleaner, -/obj/item/grenade/chem_grenade/cleaner, -/obj/item/holosign_creator/janibarrier, -/obj/effect/turf_decal/tile/brown/half{ - dir = 4 - }, -/turf/open/floor/iron/airless, -/area/ruin/space/has_grav/port_tarkon/storage) -"dl" = ( -/obj/machinery/airalarm/directional/north, -/obj/effect/mapping_helpers/airalarm/all_access, -/obj/machinery/light/dim/directional/north, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/airless, -/area/ruin/space/has_grav/port_tarkon/atmos) -"dn" = ( -/obj/effect/decal/cleanable/dirt, -/obj/structure/fluff/empty_sleeper{ - dir = 4 - }, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon) -"dq" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/cable, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon) -"dr" = ( -/obj/docking_port/stationary{ - dir = 4; - dwidth = 6; - height = 16; - name = "Port Tarkon"; - roundstart_template = /datum/map_template/shuttle/ruin/tarkon_driver; - shuttle_id = "port_tarkon"; - width = 14 - }, -/turf/open/misc/asteroid/airless, -/area/ruin/space/has_grav) -"dt" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/structure/chair/sofa/corp{ - dir = 8 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/airless, -/area/ruin/space/has_grav/port_tarkon/observ) -"dv" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/airalarm/directional/east, -/obj/effect/mapping_helpers/airalarm/all_access, -/turf/open/floor/carpet/cyan, -/area/ruin/space/has_grav/port_tarkon/dorms) -"dw" = ( -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ - dir = 1 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/port_tarkon/comms) -"dy" = ( -/obj/structure/sign/warning/electric_shock, -/turf/closed/wall, -/area/ruin/space/has_grav/port_tarkon/power1) -"dA" = ( -/obj/structure/table/reinforced, -/obj/effect/turf_decal/tile/red/half{ - dir = 8 - }, -/obj/effect/decal/cleanable/dirt, -/obj/item/crowbar, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/secoff) -"dC" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/effect/decal/cleanable/glass, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/airless, -/area/ruin/space/has_grav/port_tarkon/atmos) -"dE" = ( -/obj/machinery/light/dim/directional/south, -/obj/effect/turf_decal/tile/brown/half, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/cargo) -"dN" = ( -/mob/living/basic/carp, -/obj/effect/decal/cleanable/dirt, -/obj/structure/lattice, -/turf/open/misc/asteroid/airless, -/area/ruin/space/has_grav/port_tarkon/atmos) -"dP" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/generic, -/obj/effect/turf_decal/tile/brown/half, -/turf/open/floor/iron/airless, -/area/ruin/space/has_grav/port_tarkon/storage) -"dR" = ( -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/mining) -"dT" = ( -/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/neutral/half{ - dir = 8 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/centerhall) -"dW" = ( -/obj/structure/closet/secure_closet/freezer/fridge/open, -/obj/item/reagent_containers/condiment/flour, -/obj/item/reagent_containers/condiment/flour, -/obj/item/reagent_containers/condiment/flour, -/obj/item/reagent_containers/condiment/flour, -/obj/item/reagent_containers/condiment/sugar, -/obj/item/reagent_containers/condiment/sugar, -/turf/open/floor/iron/cafeteria, -/area/ruin/space/has_grav/port_tarkon/kitchen) -"dX" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/turf_decal/tile/neutral, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/centerhall) -"dZ" = ( -/obj/machinery/autolathe, -/obj/effect/turf_decal/tile/yellow/anticorner, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/toolstorage) -"ef" = ( -/obj/effect/turf_decal/tile/purple/half{ - dir = 1 - }, -/obj/structure/table/reinforced, -/obj/structure/frame/machine, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/dark/airless, -/area/ruin/space/has_grav/port_tarkon/developement) -"eg" = ( -/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/neutral{ - dir = 4 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/centerhall) -"eo" = ( -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ - dir = 4 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/dark/airless, -/area/ruin/space/has_grav/port_tarkon/developement) -"eu" = ( -/obj/effect/decal/cleanable/dirt, -/obj/structure/closet/crate/medical, -/obj/item/storage/medkit/advanced, -/obj/item/storage/medkit/brute, -/obj/item/storage/medkit/fire, -/obj/item/storage/medkit/regular, -/obj/item/storage/medkit/regular, -/turf/open/floor/iron/airless, -/area/ruin/space/has_grav/port_tarkon/storage) -"eB" = ( -/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/tile/red/half{ - dir = 8 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/secoff) -"eD" = ( -/obj/machinery/power/terminal{ - dir = 8 - }, -/obj/structure/cable, -/turf/open/floor/plating, -/area/ruin/space/has_grav/port_tarkon/power1) -"eE" = ( -/obj/structure/table/reinforced, -/obj/item/assembly/signaler, -/obj/effect/turf_decal/tile/yellow/half{ - dir = 1 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/toolstorage) -"eG" = ( -/obj/machinery/light/dim/directional/west, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/forehall) -"eI" = ( -/turf/closed/wall, -/area/ruin/space/has_grav/port_tarkon/starboardhall) -"eK" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/airalarm/directional/east, -/obj/effect/mapping_helpers/airalarm/all_access, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/starboardhall) -"eL" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/glass, -/turf/open/floor/iron/airless, -/area/ruin/space/has_grav/port_tarkon/observ) -"eM" = ( -/obj/structure/closet, -/obj/item/gun/energy/recharge/kinetic_accelerator, -/obj/item/storage/backpack/satchel/explorer, -/obj/item/clothing/shoes/workboots/mining, -/obj/item/t_scanner/adv_mining_scanner/lesser, -/obj/item/storage/bag/ore, -/obj/effect/turf_decal/tile/brown/half, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/mining) -"eQ" = ( -/obj/machinery/computer/atmos_control/tarkon/incinerator{ - dir = 1 - }, -/obj/machinery/airalarm/directional/south, -/obj/effect/mapping_helpers/airalarm/all_access, -/obj/effect/turf_decal/stripes{ - dir = 4 - }, -/obj/structure/cable, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/engine/vacuum, -/area/ruin/space/has_grav/port_tarkon/atmos) -"eT" = ( -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, -/mob/living/basic/carp, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/airless, -/area/ruin/space/has_grav/port_tarkon/forehall) -"eV" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/cable, -/obj/effect/decal/cleanable/dirt, -/obj/item/stack/rods, -/turf/open/floor/iron/airless, -/area/ruin/space/has_grav/port_tarkon/porthall) -"eZ" = ( -/obj/machinery/atmospherics/components/unary/vent_scrubber/layer2{ - dir = 8 - }, -/turf/open/floor/engine/vacuum, -/area/ruin/space/has_grav/port_tarkon/atmos) -"fa" = ( -/obj/effect/turf_decal/tile/purple/half{ - dir = 1 - }, -/obj/machinery/computer, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/dark/airless, -/area/ruin/space/has_grav/port_tarkon/developement) -"ff" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/turf_decal/tile/neutral/half{ - dir = 8 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/centerhall) -"fh" = ( -/obj/effect/turf_decal/tile/purple/half{ - dir = 1 - }, -/obj/structure/alien/egg/burst, -/obj/effect/mob_spawn/corpse/facehugger, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/port_tarkon/developement) -"fk" = ( -/obj/machinery/atmospherics/components/unary/portables_connector{ - dir = 1 - }, -/obj/machinery/portable_atmospherics/canister/air, -/turf/open/floor/iron/dark/airless, -/area/ruin/space/has_grav/port_tarkon/atmos) -"fl" = ( -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/toolstorage) -"fp" = ( -/obj/machinery/airalarm/directional/north, -/obj/effect/mapping_helpers/airalarm/all_access, -/obj/structure/closet, -/obj/item/clothing/gloves/color/plasmaman/black, -/obj/item/clothing/gloves/color/plasmaman/black, -/obj/item/clothing/gloves/color/plasmaman/black, -/obj/item/clothing/gloves/color/plasmaman/black, -/obj/item/clothing/gloves/color/plasmaman/chief_engineer, -/obj/item/clothing/head/helmet/space/plasmaman, -/obj/item/clothing/head/helmet/space/plasmaman, -/obj/item/clothing/head/helmet/space/plasmaman, -/obj/item/clothing/head/helmet/space/plasmaman, -/obj/item/clothing/head/helmet/space/plasmaman, -/obj/item/clothing/under/plasmaman, -/obj/item/clothing/under/plasmaman, -/obj/item/clothing/under/plasmaman, -/obj/item/clothing/under/plasmaman, -/obj/item/clothing/under/plasmaman, -/obj/item/tank/internals/plasmaman/belt/full, -/obj/item/tank/internals/plasmaman/belt/full, -/obj/item/tank/internals/plasmaman/belt/full, -/obj/item/tank/internals/plasmaman/belt/full, -/obj/item/tank/internals/plasmaman/belt/full, -/obj/item/tank/internals/nitrogen/belt/full, -/obj/item/tank/internals/nitrogen/belt/full, -/obj/item/tank/internals/nitrogen/belt/full, -/obj/item/tank/internals/nitrogen/belt/full, -/obj/item/tank/internals/nitrogen/belt/full, -/obj/item/clothing/mask/breath/vox, -/obj/item/clothing/mask/breath/vox, -/obj/item/clothing/mask/breath/vox, -/obj/item/clothing/mask/breath/vox, -/obj/item/clothing/mask/breath/vox, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon) -"ft" = ( -/obj/structure/table/reinforced, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/kitchen) -"fv" = ( -/obj/machinery/power/apc/auto_name/directional/north, -/obj/effect/mapping_helpers/apc/no_charge, -/obj/effect/mapping_helpers/apc/unlocked, -/obj/structure/cable, -/obj/structure/closet/crate/radiation, -/obj/item/stack/sheet/mineral/uranium/five, -/obj/item/stack/sheet/mineral/uranium/five, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/airless, -/area/ruin/space/has_grav/port_tarkon/atmos) -"fw" = ( -/obj/effect/turf_decal/stripes/asteroid/line{ - dir = 9 - }, -/turf/open/misc/asteroid/airless, -/area/solars/tarkon) -"fB" = ( -/obj/effect/spawner/structure/window/reinforced/no_firelock, -/obj/machinery/door/firedoor/solid, -/turf/open/floor/plating, -/area/ruin/space/has_grav/port_tarkon/cargo) -"fG" = ( -/obj/structure/cable, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/dark/airless, -/area/ruin/space/has_grav/port_tarkon/developement) -"fI" = ( -/obj/structure/closet/secure_closet/medical1, -/obj/effect/turf_decal/tile/blue/half{ - dir = 8 - }, -/obj/effect/decal/cleanable/dirt, -/obj/item/gun/medbeam/afad, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/trauma) -"fJ" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/turf_decal/loading_area, -/obj/effect/decal/cleanable/dirt, -/mob/living/basic/carp, -/turf/open/floor/iron/dark/airless, -/area/ruin/space/has_grav/port_tarkon/developement) -"fL" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/structure/cable, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/port_tarkon/comms) -"fP" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/structure/cable, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/afthall) -"fR" = ( -/obj/machinery/atmospherics/components/unary/vent_pump/siphon/monitored/plasma_output/tarkon{ - dir = 8 - }, -/turf/open/floor/engine/plasma, -/area/ruin/space/has_grav/port_tarkon/atmos) -"fT" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/light/dim/directional/east, -/obj/effect/turf_decal/delivery/blue, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/starboardhall) -"fU" = ( -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/starboardhall) -"fV" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/glass, -/turf/open/floor/plating/airless, -/area/ruin/space/has_grav/port_tarkon/developement) -"ga" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/trauma) -"gb" = ( -/obj/structure/reagent_dispensers/watertank/high, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/garden) -"gd" = ( -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/trauma) -"ge" = ( -/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/yellow/half{ - dir = 1 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/power1) -"gk" = ( -/obj/structure/chair/office, -/obj/effect/turf_decal/tile/blue/half{ - dir = 8 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/port_tarkon/comms) -"gn" = ( -/obj/machinery/door/airlock/external/ruin{ - name = "Engineering External Access" - }, -/obj/effect/mapping_helpers/airlock/cyclelink_helper{ - dir = 1 - }, -/obj/structure/cable, -/obj/effect/mapping_helpers/airlock/access/all/tarkon/general, -/turf/open/floor/plating, -/area/ruin/space/has_grav/port_tarkon/power1) -"go" = ( -/obj/machinery/vending/hydronutrients, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/garden) -"gp" = ( -/obj/effect/spawner/structure/window/reinforced/no_firelock, -/obj/machinery/door/firedoor/solid, -/turf/open/floor/plating, -/area/ruin/space/has_grav/port_tarkon/atmos) -"gs" = ( -/obj/machinery/door/airlock/public/glass/incinerator/tarkon_interior, -/obj/machinery/airlock_controller/incinerator_tarkon{ - pixel_x = 40; - pixel_y = 5 - }, -/obj/effect/mapping_helpers/airlock/locked, -/obj/effect/mapping_helpers/airlock/cyclelink_helper, -/obj/effect/turf_decal/stripes{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/visible/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/dark/visible, -/turf/open/floor/engine/vacuum, -/area/ruin/space/has_grav/port_tarkon/atmos) -"gt" = ( -/obj/structure/table/reinforced, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/dark/airless, -/area/ruin/space/has_grav/port_tarkon/developement) -"gu" = ( -/obj/structure/cable, -/obj/effect/turf_decal/tile/purple/half{ - dir = 8 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/dark/airless, -/area/ruin/space/has_grav/port_tarkon/developement) -"gv" = ( -/obj/structure/table/reinforced, -/obj/machinery/cell_charger, -/obj/item/stock_parts/cell/high/empty, -/obj/effect/turf_decal/tile/yellow/half{ - dir = 8 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/toolstorage) -"gA" = ( -/obj/machinery/door/airlock/mining/glass, -/obj/machinery/door/firedoor/heavy/closed, -/obj/effect/turf_decal/sand/plating, -/obj/effect/mapping_helpers/airlock/access/all/tarkon/general, -/turf/open/misc/asteroid, -/area/ruin/space/has_grav/port_tarkon/mining) -"gD" = ( -/obj/effect/spawner/structure/window/reinforced, -/turf/open/floor/plating, -/area/ruin/space/has_grav/port_tarkon/secoff) -"gE" = ( -/obj/structure/chair/wood{ - dir = 1 - }, -/obj/machinery/airalarm/directional/east, -/obj/effect/mapping_helpers/airalarm/all_access, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/airless, -/area/ruin/space/has_grav/port_tarkon/observ) -"gH" = ( -/obj/structure/cable, -/obj/machinery/power/terminal{ - dir = 4 - }, -/obj/effect/decal/cleanable/dirt, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden, -/turf/open/floor/iron/dark/airless, -/area/ruin/space/has_grav/port_tarkon/atmos) -"gJ" = ( -/obj/effect/spawner/structure/window/reinforced/no_firelock, -/obj/machinery/door/firedoor/solid, -/turf/open/floor/plating, -/area/ruin/space/has_grav/port_tarkon/garden) -"gN" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/turf_decal/tile/brown/half{ - dir = 4 - }, -/turf/open/floor/iron/airless, -/area/ruin/space/has_grav/port_tarkon/storage) -"gP" = ( -/obj/structure/table/reinforced, -/obj/item/folder/blue, -/obj/item/folder, -/obj/effect/turf_decal/tile/brown/half{ - dir = 8 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/cargo) -"gS" = ( -/obj/effect/turf_decal/tile/brown/half{ - dir = 4 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/mining) -"gW" = ( -/obj/machinery/computer{ - desc = "A computer long since rendered non-functional due to lack of maintenance. Spitting out error messages."; - name = "Broken Computer" - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/port_tarkon/comms) -"gX" = ( -/obj/structure/cable, -/obj/effect/turf_decal/stripes/asteroid/line, -/turf/open/misc/asteroid/airless, -/area/solars/tarkon) -"hf" = ( -/obj/machinery/power/smes, -/obj/structure/cable, -/turf/open/floor/iron/dark/airless, -/area/ruin/space/has_grav/port_tarkon/atmos) -"hi" = ( -/obj/machinery/firealarm/directional/north, -/obj/effect/decal/cleanable/glass, -/mob/living/basic/carp, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/airless, -/area/ruin/space/has_grav/port_tarkon/atmos) -"hj" = ( -/turf/closed/wall, -/area/ruin/space/has_grav/port_tarkon/kitchen) -"hl" = ( -/obj/structure/cable, -/obj/machinery/light_switch/directional/west, -/obj/effect/turf_decal/tile/brown/half{ - dir = 8 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/mining) -"hm" = ( -/obj/structure/closet, -/obj/effect/decal/cleanable/dirt, -/obj/item/clothing/shoes/workboots/mining, -/obj/item/clothing/shoes/winterboots, -/obj/item/clothing/shoes/jackboots, -/obj/item/clothing/under/rank/cargo/tech/nova/utility, -/obj/item/clothing/under/rank/cargo/tech/nova/gorka, -/obj/item/storage/backpack/duffelbag/explorer, -/obj/item/storage/backpack/explorer, -/obj/item/storage/backpack/satchel/explorer, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon) -"hr" = ( -/obj/machinery/door/airlock/public/glass{ - name = "Crew Storage"; - state_open = 1 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/cable, -/obj/machinery/door/firedoor/solid, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon) -"hu" = ( -/obj/effect/turf_decal/caution/stand_clear, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/airless, -/area/ruin/space/has_grav/port_tarkon/storage) -"hw" = ( -/obj/machinery/light/dim/directional/west, -/obj/structure/table/reinforced, -/obj/item/clothing/gloves/color/yellow, -/obj/effect/turf_decal/tile/yellow/half{ - dir = 8 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/toolstorage) -"hA" = ( -/obj/machinery/door/airlock/public/glass{ - name = "Port Primary Hallway" - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/door/firedoor/solid/closed, -/obj/structure/cable, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/porthall) -"hE" = ( -/obj/structure/table, -/obj/item/storage/medkit/regular, -/obj/item/storage/medkit/regular, -/obj/machinery/light/dim/directional/east, -/obj/effect/turf_decal/tile/blue/half{ - dir = 4 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/trauma) -"hH" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/cable, -/obj/effect/decal/cleanable/dirt, -/obj/machinery/button/door{ - id = "ptobservatory"; - name = "shutter controls"; - pixel_y = -32 - }, -/turf/open/floor/iron/airless, -/area/ruin/space/has_grav/port_tarkon/observ) -"hL" = ( -/obj/machinery/computer{ - desc = "A computer long since rendered non-functional due to lack of maintenance. Spitting out error messages."; - dir = 1; - name = "Broken Computer" - }, -/obj/effect/turf_decal/tile/blue/anticorner{ - dir = 8 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/port_tarkon/comms) -"hM" = ( -/obj/machinery/atmospherics/components/unary/portables_connector/visible{ - dir = 8 - }, -/obj/effect/turf_decal/tile/blue/fourcorners, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/airless, -/area/ruin/space/has_grav/port_tarkon/atmos) -"hN" = ( -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ - dir = 8 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/airless, -/area/ruin/space/has_grav/port_tarkon/porthall) -"hP" = ( -/obj/effect/turf_decal/stripes{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/engine/vacuum, -/area/ruin/space/has_grav/port_tarkon/atmos) -"hQ" = ( -/obj/machinery/door/airlock/mining, -/obj/machinery/door/firedoor/solid, -/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/ruin/space/has_grav/port_tarkon/cargo) -"hR" = ( -/obj/machinery/atmospherics/miner/carbon_dioxide, -/turf/open/floor/engine/co2, -/area/ruin/space/has_grav/port_tarkon/atmos) -"hS" = ( -/obj/effect/turf_decal/tile/brown/anticorner{ - dir = 4 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/mining) -"hV" = ( -/obj/structure/closet/secure_closet/freezer/meat/open, -/turf/open/floor/iron/freezer, -/area/ruin/space/has_grav/port_tarkon/kitchen) -"hY" = ( -/obj/machinery/door/window/brigdoor/security/cell/right/directional/south{ - req_access = list("tarkon") - }, -/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, -/area/ruin/space/has_grav/port_tarkon/secoff) -"hZ" = ( -/obj/machinery/power/smes/engineering{ - charge = 0; - name = "backup power storage unit" - }, -/obj/structure/cable, -/turf/open/floor/plating, -/area/ruin/space/has_grav/port_tarkon/power1) -"ia" = ( -/obj/structure/table/reinforced, -/obj/item/storage/toolbox/maint_kit, -/obj/item/stack/sheet/iron/twenty, -/obj/effect/turf_decal/tile/red/half{ - dir = 1 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/secoff) -"id" = ( -/obj/effect/decal/cleanable/dirt, -/obj/structure/lattice, -/turf/open/misc/asteroid/airless, -/area/ruin/space/has_grav/port_tarkon/atmos) -"if" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/turf_decal/tile/brown/half, -/turf/open/floor/iron/airless, -/area/ruin/space/has_grav/port_tarkon/storage) -"ih" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/glass, -/mob/living/basic/carp, -/turf/open/floor/iron/dark/airless, -/area/ruin/space/has_grav/port_tarkon/developement) -"ik" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/effect/turf_decal/tile/neutral/anticorner{ - dir = 4 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/centerhall) -"in" = ( -/obj/item/circuitboard/machine/ore_silo, -/obj/structure/frame/machine, -/obj/effect/turf_decal/tile/brown/anticorner{ - dir = 1 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/mining) -"ip" = ( -/obj/machinery/door/airlock/mining/glass, -/obj/effect/turf_decal/sand/plating, -/obj/effect/turf_decal/sand/plating, -/obj/effect/mapping_helpers/airlock/cyclelink_helper{ - dir = 1 - }, -/obj/effect/mapping_helpers/airlock/access/all/tarkon/general, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/mining) -"iq" = ( -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/white, -/area/ruin/space/has_grav/port_tarkon/centerhall) -"iu" = ( -/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, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/mining) -"iv" = ( -/obj/machinery/atmospherics/components/unary/passive_vent/layer2{ - dir = 4 - }, -/turf/open/misc/asteroid/airless, -/area/ruin/space/has_grav) -"iw" = ( -/obj/effect/turf_decal/stripes{ - dir = 1 - }, -/obj/machinery/light/dim/directional/west, -/obj/structure/window/reinforced/spawner/directional/north, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/visible/layer2{ - dir = 6 - }, -/obj/structure/closet/radiation, -/obj/item/clothing/head/utility/radiation, -/obj/item/clothing/suit/utility/radiation, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/dark/airless, -/area/ruin/space/has_grav/port_tarkon/atmos) -"iy" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/cafeteria, -/area/ruin/space/has_grav/port_tarkon/kitchen) -"iA" = ( -/obj/machinery/door/airlock/multi_tile/public/glass, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/door/firedoor/solid, -/obj/structure/cable, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/trauma) -"iB" = ( -/obj/effect/turf_decal/stripes/asteroid/line{ - dir = 1 - }, -/turf/open/misc/asteroid/airless, -/area/ruin/space/has_grav) -"iC" = ( -/obj/effect/decal/cleanable/dirt, -/obj/machinery/firealarm/directional/east, -/obj/effect/turf_decal/tile/brown/half{ - dir = 4 - }, -/turf/open/floor/iron/airless, -/area/ruin/space/has_grav/port_tarkon/storage) -"iG" = ( -/obj/machinery/atmospherics/components/binary/pump/off/general{ - dir = 4 - }, -/obj/effect/turf_decal/tile/red/fourcorners{ - color = "#DE3A3A" - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/airless, -/area/ruin/space/has_grav/port_tarkon/atmos) -"iI" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/turf/open/misc/asteroid/airless, -/area/ruin/space/has_grav) -"iJ" = ( -/obj/machinery/vending/hydroseeds, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/garden) -"iM" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/light/directional/north, -/obj/machinery/power/apc/auto_name/directional/north, -/obj/effect/mapping_helpers/apc/no_charge, -/obj/effect/mapping_helpers/apc/unlocked, -/obj/effect/turf_decal/tile/yellow/half{ - dir = 1 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/power1) -"iT" = ( -/obj/machinery/door/airlock/public/glass{ - name = "Starboard Primary Hallway" - }, -/obj/machinery/door/firedoor/solid, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/starboardhall) -"iU" = ( -/obj/structure/window/reinforced/spawner/directional/north, -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ - dir = 1 - }, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/port_tarkon/developement) -"iW" = ( -/mob/living/basic/carp/mega, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/airless, -/area/ruin/space/has_grav/port_tarkon/atmos) -"jg" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/cable, -/obj/effect/decal/cleanable/glass, -/obj/item/stack/rods, -/turf/open/floor/iron/airless, -/area/ruin/space/has_grav/port_tarkon/porthall) -"jj" = ( -/obj/machinery/atmospherics/components/unary/outlet_injector/monitored/nitrogen_input/tarkon{ - dir = 4 - }, -/turf/open/floor/engine/n2, -/area/ruin/space/has_grav/port_tarkon/atmos) -"jn" = ( -/turf/closed/mineral/random/high_chance, -/area/awaymission) -"jo" = ( -/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, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/mining) -"jv" = ( -/obj/effect/decal/cleanable/dirt, -/obj/machinery/button/door{ - id = "ptafthall"; - name = "shutter controls"; - pixel_x = -26 - }, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/afthall) -"jz" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/centerhall) -"jA" = ( -/obj/machinery/atmospherics/components/binary/pump, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/centerhall) -"jB" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/airless, -/area/ruin/space/has_grav/port_tarkon/atmos) -"jE" = ( -/obj/structure/window/reinforced/spawner/directional/north, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/port_tarkon/developement) -"jF" = ( -/obj/structure/chair/wood, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/airless, -/area/ruin/space/has_grav/port_tarkon/observ) -"jG" = ( -/obj/effect/turf_decal/stripes{ - dir = 1 - }, -/obj/structure/cable, -/obj/machinery/power/terminal{ - dir = 4 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/dark/airless, -/area/ruin/space/has_grav/port_tarkon/atmos) -"jJ" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/plating/airless, -/area/ruin/space/has_grav/port_tarkon/atmos) -"jM" = ( -/obj/effect/turf_decal/tile/purple/half{ - dir = 4 - }, -/obj/machinery/airalarm/directional/east, -/obj/effect/mapping_helpers/airalarm/all_access, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/port_tarkon/developement) -"jN" = ( -/obj/machinery/airalarm/directional/north, -/obj/effect/mapping_helpers/airalarm/all_access, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/airless, -/area/ruin/space/has_grav/port_tarkon/forehall) -"jO" = ( -/obj/machinery/atmospherics/components/unary/passive_vent{ - dir = 4; - name = "killroom vent" - }, -/obj/effect/turf_decal/sand/plating, -/turf/open/floor/plating/airless, -/area/ruin/space/has_grav) -"jP" = ( -/obj/machinery/door/airlock/maintenance_hatch, -/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/ruin/space/has_grav/port_tarkon/centerhall) -"jT" = ( -/obj/effect/decal/cleanable/dirt, -/obj/structure/fluff/empty_sleeper, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon) -"jU" = ( -/obj/effect/turf_decal/tile/brown/anticorner, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/airless, -/area/ruin/space/has_grav/port_tarkon/storage) -"jV" = ( -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ - dir = 4 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/cargo) -"jW" = ( -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/airless, -/area/ruin/space/has_grav/port_tarkon/storage) -"jY" = ( -/obj/structure/rack, -/obj/item/clothing/head/helmet, -/obj/item/clothing/head/helmet, -/obj/effect/turf_decal/tile/red/half{ - dir = 1 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/secoff) -"jZ" = ( -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/plating, -/area/ruin/space/has_grav/port_tarkon/forehall) -"ka" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/firealarm/directional/east, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/starboardhall) -"kd" = ( -/obj/item/wrench, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/airless, -/area/ruin/space/has_grav/port_tarkon/atmos) -"ke" = ( -/obj/machinery/computer{ - desc = "A computer long since rendered non-functional due to lack of maintenance. Spitting out error messages."; - dir = 1; - name = "Broken Computer" - }, -/obj/effect/turf_decal/tile/blue/anticorner{ - dir = 8 - }, -/obj/item/paper/fluff/ruins/tarkon/vaulter, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/port_tarkon/comms) -"kf" = ( -/turf/closed/wall, -/area/ruin/space/has_grav/port_tarkon/forehall) -"kh" = ( -/obj/effect/turf_decal/sand, -/obj/machinery/light/dim/directional/east, -/obj/machinery/airalarm/directional/east, -/obj/effect/mapping_helpers/airalarm/all_access, -/obj/effect/turf_decal/tile/brown/half{ - dir = 4 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/mining) -"kk" = ( -/obj/structure/cable, -/obj/machinery/power/apc/auto_name/directional/north, -/obj/effect/mapping_helpers/apc/no_charge, -/obj/effect/mapping_helpers/apc/unlocked, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/plating, -/area/ruin/space/has_grav/port_tarkon/afthall) -"ko" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/turf_decal/tile/purple/half{ - dir = 1 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/dark/airless, -/area/ruin/space/has_grav/port_tarkon/developement) -"kp" = ( -/obj/item/tape/ruins/tarkon/celebration, -/obj/structure/closet/crate/bin, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/airless, -/area/ruin/space/has_grav/port_tarkon/observ) -"kq" = ( -/obj/effect/turf_decal/tile/blue/half{ - dir = 1 - }, -/obj/machinery/vending/cigarette, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/port_tarkon/comms) -"kr" = ( -/obj/machinery/atmospherics/components/binary/pump/off/general{ - dir = 4 - }, -/obj/effect/turf_decal/tile/blue/fourcorners, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/airless, -/area/ruin/space/has_grav/port_tarkon/atmos) -"ku" = ( -/obj/structure/bed, -/obj/effect/turf_decal/tile/blue/anticorner{ - dir = 4 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/trauma) -"kx" = ( -/obj/structure/window/reinforced/spawner/directional/south, -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/port_tarkon/developement) -"kA" = ( -/obj/structure/fence, -/turf/open/misc/asteroid/airless, -/area/ruin/space/has_grav) -"kD" = ( -/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{ - dir = 4 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/cargo) -"kF" = ( -/obj/structure/fence/corner, -/turf/open/misc/asteroid/airless, -/area/ruin/space/has_grav) -"kG" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/structure/cable, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/forehall) -"kI" = ( -/obj/structure/table/reinforced, -/obj/item/reagent_containers/condiment/saltshaker{ - pixel_x = -2 - }, -/obj/item/reagent_containers/condiment/saltshaker{ - pixel_x = -2 - }, -/obj/item/reagent_containers/condiment/peppermill{ - pixel_x = 2; - pixel_y = 2 - }, -/obj/item/reagent_containers/condiment/peppermill{ - pixel_x = 2; - pixel_y = 1 - }, -/obj/structure/cable, -/obj/machinery/power/apc/auto_name/directional/west, -/obj/effect/mapping_helpers/apc/no_charge, -/obj/effect/mapping_helpers/apc/unlocked, -/turf/open/floor/iron/cafeteria, -/area/ruin/space/has_grav/port_tarkon/kitchen) -"kJ" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/turf_decal/tile/yellow, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/toolstorage) -"kO" = ( -/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/neutral/anticorner{ - dir = 1 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/centerhall) -"kR" = ( -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ - dir = 4 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/secoff) -"kS" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 8 - }, -/obj/effect/turf_decal/stripes/line{ - dir = 4 - }, -/obj/machinery/door/poddoor/incinerator_atmos_aux, -/turf/open/floor/engine/vacuum, -/area/ruin/space/has_grav/port_tarkon/atmos) -"kT" = ( -/obj/machinery/light_switch/directional/west, -/obj/effect/turf_decal/tile/purple/half{ - dir = 8 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/dark/airless, -/area/ruin/space/has_grav/port_tarkon/developement) -"kU" = ( -/obj/structure/closet/crate, -/obj/effect/spawner/random/decoration/carpet, -/obj/effect/spawner/random/decoration/carpet, -/obj/effect/spawner/random/decoration/carpet, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/plating, -/area/ruin/space/has_grav/port_tarkon/forehall) -"kW" = ( -/obj/structure/table, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/item/megaphone, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/port_tarkon/comms) -"kX" = ( -/obj/structure/bed/maint, -/obj/structure/safe/floor, -/obj/item/mod/module/armor_booster/retractplates{ - desc = "A complex set of actuators, micro-seals and a simple guide on how to install it, This... \"Modification\" allows the plating around the joints to retract, giving minor protection and a bit better mobility. There also seems to be a small, wireless microphone... how odd." - }, -/obj/item/gun/ballistic/shotgun/doublebarrel, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/secoff) -"ld" = ( -/obj/machinery/atmospherics/components/unary/vent_pump/siphon/monitored/nitrous_output/tarkon{ - dir = 8 - }, -/turf/open/floor/engine/n2o, -/area/ruin/space/has_grav/port_tarkon/atmos) -"le" = ( -/obj/structure/cable, -/obj/effect/turf_decal/tile/brown/half{ - dir = 8 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/mining) -"lg" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/effect/decal/cleanable/dirt, -/obj/item/stack/rods, -/turf/open/floor/plating/airless, -/area/ruin/space/has_grav/port_tarkon/porthall) -"li" = ( -/obj/structure/sign/warning/explosives, -/turf/closed/wall, -/area/ruin/space/has_grav/port_tarkon/developement) -"lj" = ( -/obj/machinery/door/window/brigdoor/left/directional/north, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/port_tarkon/developement) -"lp" = ( -/obj/machinery/suit_storage_unit/engine, -/obj/effect/decal/cleanable/dirt, -/obj/item/paper/fluff/ruins/tarkon/atmosincident, -/turf/open/floor/iron/airless, -/area/ruin/space/has_grav/port_tarkon/atmos) -"lr" = ( -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ - dir = 8 - }, -/obj/structure/chair/wood, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/airless, -/area/ruin/space/has_grav/port_tarkon/observ) -"ls" = ( -/obj/machinery/door/window/brigdoor/security/cell{ - req_access = list("tarkon") - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/secoff) -"lt" = ( -/obj/machinery/light_switch/directional/east, -/obj/effect/turf_decal/tile/yellow/anticorner, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/toolstorage) -"lw" = ( -/obj/effect/turf_decal/tile/purple/anticorner, -/obj/structure/table/rolling, -/obj/item/clothing/gloves/latex, -/obj/item/circular_saw, -/obj/item/scalpel, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/dark/airless, -/area/ruin/space/has_grav/port_tarkon/developement) -"lx" = ( -/obj/machinery/door/airlock/public/glass{ - name = "Aft Primary Hallway" - }, -/obj/machinery/door/firedoor/solid, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/afthall) -"ly" = ( -/obj/effect/spawner/structure/window/reinforced/no_firelock, -/obj/machinery/door/firedoor/solid, -/turf/open/floor/plating, -/area/ruin/space/has_grav/port_tarkon) -"lA" = ( -/obj/structure/closet/crate/radiation, -/obj/structure/cable, -/obj/item/stack/sheet/mineral/uranium/five, -/obj/item/stack/sheet/mineral/uranium/five, -/obj/item/stack/sheet/mineral/uranium/five, -/turf/open/floor/plating, -/area/ruin/space/has_grav/port_tarkon/power1) -"lD" = ( -/obj/machinery/door/airlock/wood{ - id_tag = "ptdorm4"; - name = "Couples Suite" - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/door/firedoor/solid, -/turf/open/floor/wood/large, -/area/ruin/space/has_grav/port_tarkon/dorms) -"lF" = ( -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ - dir = 4 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/dark/airless, -/area/ruin/space/has_grav/port_tarkon/developement) -"lH" = ( -/obj/structure/grille, -/turf/closed/wall/r_wall, -/area/ruin/space/has_grav/port_tarkon/atmos) -"lI" = ( -/obj/effect/turf_decal/stripes{ - dir = 1 - }, -/obj/machinery/atmospherics/components/unary/portables_connector/visible{ - dir = 8 - }, -/obj/machinery/portable_atmospherics/canister/oxygen, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/dark/airless, -/area/ruin/space/has_grav/port_tarkon/atmos) -"lK" = ( -/obj/structure/closet/firecloset/full, -/turf/open/floor/plating, -/area/ruin/space/has_grav/port_tarkon/power1) -"lQ" = ( -/obj/structure/cable, -/obj/machinery/power/terminal{ - dir = 4 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/dark/airless, -/area/ruin/space/has_grav/port_tarkon/atmos) -"lR" = ( -/obj/machinery/door/airlock/multi_tile/public/glass{ - dir = 8 - }, -/obj/machinery/door/firedoor/solid, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/garden) -"lS" = ( -/obj/structure/closet, -/obj/effect/decal/cleanable/dirt, -/obj/item/clothing/shoes/workboots/mining, -/obj/item/clothing/shoes/winterboots, -/obj/item/clothing/shoes/jackboots, -/obj/item/clothing/under/rank/medical/doctor/nova/utility, -/obj/item/clothing/under/rank/medical/doctor/nova/utility, -/obj/item/storage/backpack/duffelbag/med, -/obj/item/storage/backpack/medic, -/obj/item/storage/backpack/satchel/med, -/obj/item/storage/backpack/satchel/chem, -/obj/item/storage/backpack/satchel/vir, -/obj/item/storage/backpack/virology, -/obj/item/storage/backpack/duffelbag/virology, -/obj/item/storage/backpack/duffelbag/chemistry, -/obj/item/storage/backpack/chemistry, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon) -"lT" = ( -/obj/item/flashlight/lantern, -/obj/item/flashlight/lantern, -/obj/item/flashlight/lantern, -/obj/item/flashlight/lantern, -/obj/structure/table, -/obj/machinery/light/warm/directional/south, -/obj/structure/cable, -/obj/machinery/power/apc/auto_name/directional/south, -/obj/effect/mapping_helpers/apc/no_charge, -/obj/effect/mapping_helpers/apc/unlocked, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon) -"lU" = ( -/obj/machinery/firealarm/directional/west, -/obj/effect/turf_decal/tile/yellow/half{ - dir = 8 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/toolstorage) -"lV" = ( -/obj/effect/spawner/structure/window/reinforced/no_firelock, -/obj/machinery/atmospherics/pipe/layer_manifold/brown/hidden{ - dir = 4 - }, -/turf/open/floor/plating, -/area/ruin/space/has_grav/port_tarkon/atmos) -"lW" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/secoff) -"lZ" = ( -/obj/structure/closet/emcloset, -/obj/effect/turf_decal/tile/brown/anticorner{ - dir = 4 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/mining) -"mc" = ( -/obj/structure/window/reinforced/spawner/directional/north, -/obj/effect/turf_decal/tile/red/fourcorners{ - color = "#DE3A3A" - }, -/obj/machinery/computer/atmos_control/tarkon/nitrogen_tank{ - dir = 4 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/airless, -/area/ruin/space/has_grav/port_tarkon/atmos) -"md" = ( -/obj/machinery/light/dim/directional/south, -/obj/effect/turf_decal/tile/brown/anticorner, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/airless, -/area/ruin/space/has_grav/port_tarkon/storage) -"mi" = ( -/obj/structure/sign/warning/biohazard, -/turf/closed/wall, -/area/ruin/space/has_grav/port_tarkon/toolstorage) -"ml" = ( -/obj/structure/cable, -/obj/machinery/firealarm/directional/east, -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/glass, -/turf/open/floor/iron/airless, -/area/ruin/space/has_grav/port_tarkon/observ) -"mo" = ( -/obj/structure/table/reinforced, -/obj/item/stack/sheet/iron/fifty, -/obj/item/stack/sheet/glass/fifty, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/airless, -/area/ruin/space/has_grav/port_tarkon/atmos) -"mr" = ( -/obj/machinery/portable_atmospherics/scrubber, -/turf/open/floor/plating, -/area/ruin/space/has_grav/port_tarkon/afthall) -"mt" = ( -/obj/structure/closet/crate, -/obj/item/transfer_valve, -/obj/item/transfer_valve, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/plating, -/area/ruin/space/has_grav/port_tarkon/forehall) -"mu" = ( -/obj/machinery/light/dim/directional/west, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/afthall) -"my" = ( -/obj/structure/reagent_dispensers/fueltank/large, -/obj/effect/turf_decal/tile/yellow/half, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/power1) -"mC" = ( -/obj/machinery/door/airlock/public/glass{ - name = "Cryogenics Room" - }, -/obj/machinery/door/firedoor/solid, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon) -"mG" = ( -/obj/effect/turf_decal/tile/brown/anticorner{ - dir = 8 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/airless, -/area/ruin/space/has_grav/port_tarkon/storage) -"mK" = ( -/obj/machinery/computer{ - desc = "A computer long since rendered non-functional due to lack of maintenance. Spitting out error messages."; - dir = 1; - name = "Broken Computer" - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/port_tarkon/comms) -"mO" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/cafeteria, -/area/ruin/space/has_grav/port_tarkon/kitchen) -"mT" = ( -/obj/structure/cable, -/obj/machinery/door/airlock/public/glass{ - name = "Starboard Primary Hallway" - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/door/firedoor/solid, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/starboardhall) -"mV" = ( -/obj/machinery/door/window/right/directional/east, -/obj/machinery/door/window/right/directional/west, -/obj/structure/table/reinforced, -/obj/machinery/door/firedoor/solid, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/mining) -"nb" = ( -/obj/machinery/door/airlock/public/glass{ - name = "Starboard Primary Hallway" - }, -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/door/firedoor/solid, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/starboardhall) -"nc" = ( -/obj/structure/sink/directional/south, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/cafeteria, -/area/ruin/space/has_grav/port_tarkon/kitchen) -"ng" = ( -/turf/closed/wall, -/area/ruin/space/has_grav/port_tarkon/storage) -"nk" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/turf_decal/tile/red/half, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/secoff) -"nm" = ( -/obj/machinery/atmospherics/miner/nitrogen, -/turf/open/floor/engine/n2, -/area/ruin/space/has_grav/port_tarkon/atmos) -"no" = ( -/obj/effect/turf_decal/tile/purple/half, -/obj/structure/table/optable, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/dark/airless, -/area/ruin/space/has_grav/port_tarkon/developement) -"nu" = ( -/obj/machinery/light/dim/directional/south, -/obj/effect/turf_decal/tile/blue/half, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/trauma) -"nx" = ( -/obj/effect/turf_decal/sand/plating, -/turf/open/floor/plating/airless, -/area/ruin/space/has_grav) -"nF" = ( -/obj/effect/decal/cleanable/dirt, -/obj/structure/closet/crate/engineering, -/obj/item/stack/sheet/plasteel/fifty, -/obj/item/stack/sheet/rglass{ - amount = 50 - }, -/obj/item/stack/sheet/mineral/plasma/thirty, -/obj/machinery/light_switch/directional/north, -/obj/effect/turf_decal/tile/brown/anticorner{ - dir = 1 - }, -/turf/open/floor/iron/airless, -/area/ruin/space/has_grav/port_tarkon/storage) -"nG" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/cable, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/airless, -/area/ruin/space/has_grav/port_tarkon/porthall) -"nL" = ( -/obj/item/stack/tile/carpet/neon/simple/purple/nodots/sixty, -/turf/open/floor/plating, -/area/ruin/space/has_grav/port_tarkon/cargo) -"nN" = ( -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/forehall) -"nP" = ( -/turf/closed/wall, -/area/ruin/space/has_grav/port_tarkon/developement) -"nQ" = ( -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/centerhall) -"nS" = ( -/obj/effect/turf_decal/tile/purple/half{ - dir = 1 - }, -/obj/effect/spawner/structure/window/reinforced, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/port_tarkon/developement) -"nW" = ( -/obj/structure/table/reinforced, -/obj/item/restraints/handcuffs, -/obj/item/restraints/handcuffs, -/obj/effect/turf_decal/tile/red/anticorner{ - dir = 4 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/secoff) -"nY" = ( -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/plating/airless, -/area/ruin/space/has_grav/port_tarkon/porthall) -"nZ" = ( -/obj/structure/closet/crate/engineering/electrical, -/obj/item/solar_assembly, -/obj/item/solar_assembly, -/obj/item/solar_assembly, -/obj/item/solar_assembly, -/obj/item/solar_assembly, -/obj/item/solar_assembly, -/obj/item/solar_assembly, -/obj/item/solar_assembly, -/obj/item/solar_assembly, -/obj/item/solar_assembly, -/obj/item/solar_assembly, -/obj/item/solar_assembly, -/obj/item/solar_assembly, -/obj/item/solar_assembly, -/obj/item/solar_assembly, -/obj/item/solar_assembly, -/obj/item/solar_assembly, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/plating, -/area/ruin/space/has_grav/port_tarkon/forehall) -"oc" = ( -/obj/effect/turf_decal/tile/purple/half{ - dir = 1 - }, -/obj/structure/frame/computer, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/dark/airless, -/area/ruin/space/has_grav/port_tarkon/developement) -"oe" = ( -/obj/effect/decal/cleanable/glass, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/plating/airless, -/area/ruin/space/has_grav/port_tarkon/porthall) -"of" = ( -/obj/effect/spawner/structure/window/reinforced/no_firelock, -/obj/machinery/door/poddoor/shutters{ - id = "ptafthall" - }, -/turf/open/floor/plating, -/area/ruin/space/has_grav/port_tarkon/afthall) -"og" = ( -/obj/structure/table/reinforced, -/obj/item/pipe_dispenser, -/obj/item/storage/belt/utility/full, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/airless, -/area/ruin/space/has_grav/port_tarkon/atmos) -"om" = ( -/obj/effect/turf_decal/vg_decals/atmos/carbon_dioxide, -/obj/machinery/light/small/directional/east, -/obj/machinery/air_sensor/tarkon/carbon_tank{ - pixel_x = 26 - }, -/turf/open/floor/engine/co2, -/area/ruin/space/has_grav/port_tarkon/atmos) -"on" = ( -/obj/item/cautery, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/dark/airless, -/area/ruin/space/has_grav/port_tarkon/developement) -"oq" = ( -/obj/machinery/processor, -/turf/open/floor/iron/cafeteria, -/area/ruin/space/has_grav/port_tarkon/kitchen) -"os" = ( -/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, -/area/ruin/space/has_grav/port_tarkon/mining) -"ot" = ( -/obj/effect/turf_decal/sand/plating, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/mining) -"ov" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/turf/open/floor/carpet/black, -/area/ruin/space/has_grav/port_tarkon/dorms) -"oy" = ( -/obj/structure/safe/floor, -/obj/structure/table, -/obj/item/stack/spacecash/c10000, -/obj/item/stack/spacecash/c10000, -/obj/item/stack/spacecash/c10000, -/obj/item/stack/spacecash/c10000, -/obj/item/stack/spacecash/c10000, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/cargo) -"oC" = ( -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ - dir = 1 - }, -/obj/effect/turf_decal/tile/neutral, -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/centerhall) -"oE" = ( -/obj/machinery/button/door{ - id = "tarkonouter"; - name = "Exterior Shutter Control"; - pixel_x = -6 - }, -/obj/machinery/button/door{ - id = "tarkoninner"; - name = "Inner Shutter Control"; - pixel_x = 6 - }, -/turf/closed/wall, -/area/ruin/space/has_grav/port_tarkon/storage) -"oI" = ( -/obj/machinery/atmospherics/components/unary/vent_pump/siphon/monitored/oxygen_output/tarkon{ - dir = 4 - }, -/turf/open/floor/engine/o2, -/area/ruin/space/has_grav/port_tarkon/atmos) -"oL" = ( -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/plating, -/area/ruin/space/has_grav/port_tarkon/afthall) -"oN" = ( -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/centerhall) -"oQ" = ( -/obj/structure/window/reinforced/spawner/directional/north, -/obj/effect/turf_decal/tile/dark/fourcorners, -/obj/machinery/computer/atmos_control/tarkon/carbon_tank{ - dir = 8 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/airless, -/area/ruin/space/has_grav/port_tarkon/atmos) -"oS" = ( -/obj/structure/chair/office, -/obj/effect/turf_decal/tile/blue{ - dir = 8 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/port_tarkon/comms) -"oW" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/mob_spawn/ghost_role/human/tarkon/med{ - dir = 8 - }, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon) -"pa" = ( -/obj/machinery/door/airlock/research/glass, -/obj/effect/mapping_helpers/airlock/access/all/tarkon/general, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/port_tarkon/developement) -"pc" = ( -/obj/effect/turf_decal/bot, -/turf/open/floor/plating, -/area/ruin/space/has_grav/port_tarkon/atmos) -"pd" = ( -/obj/machinery/griddle, -/turf/open/floor/iron/cafeteria, -/area/ruin/space/has_grav/port_tarkon/kitchen) -"pf" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/light_switch/directional/east, -/obj/effect/turf_decal/tile/yellow/anticorner{ - dir = 4 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/power1) -"ph" = ( -/obj/structure/filingcabinet, -/obj/effect/turf_decal/tile/red/half{ - dir = 1 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/secoff) -"pj" = ( -/obj/machinery/light/dim/directional/east, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/airless, -/area/ruin/space/has_grav/port_tarkon/porthall) -"pl" = ( -/obj/structure/table, -/obj/item/stack/spacecash/c200, -/obj/item/stack/spacecash/c200, -/obj/item/stack/spacecash/c200, -/obj/item/stack/spacecash/c200, -/obj/item/stack/spacecash/c200, -/obj/item/stack/spacecash/c200, -/obj/item/stack/spacecash/c200, -/obj/item/stack/spacecash/c200, -/obj/item/stack/spacecash/c200, -/obj/item/stack/spacecash/c200, -/obj/effect/turf_decal/tile/brown/half, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/cargo) -"po" = ( -/obj/structure/sink/kitchen/directional/south, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/cafeteria, -/area/ruin/space/has_grav/port_tarkon/kitchen) -"ps" = ( -/turf/open/floor/plating, -/area/ruin/space/has_grav/port_tarkon/power1) -"pt" = ( -/obj/structure/table/reinforced, -/obj/item/stack/sheet/iron/fifty, -/obj/effect/turf_decal/tile/yellow/anticorner, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/toolstorage) -"pu" = ( -/obj/structure/cable, -/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/turf_decal/tile/brown/half{ - dir = 1 - }, -/turf/open/floor/iron/airless, -/area/ruin/space/has_grav/port_tarkon/storage) -"pv" = ( -/obj/item/crowbar, -/obj/item/crowbar, -/obj/item/crowbar, -/obj/structure/table, -/obj/machinery/light/warm/directional/south, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon) -"pw" = ( -/obj/structure/table, -/obj/item/paper/crumpled, -/obj/effect/turf_decal/tile/blue/half{ - dir = 8 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/port_tarkon/comms) -"pz" = ( -/obj/machinery/door/firedoor/solid, -/obj/effect/spawner/structure/window/reinforced/no_firelock, -/turf/open/floor/plating, -/area/ruin/space/has_grav/port_tarkon/garden) -"pA" = ( -/obj/effect/turf_decal/vg_decals/atmos/mix, -/obj/machinery/light/small/directional/west, -/turf/open/floor/engine/vacuum, -/area/ruin/space/has_grav/port_tarkon/atmos) -"pE" = ( -/obj/machinery/airalarm/directional/north, -/obj/effect/mapping_helpers/airalarm/all_access, -/obj/effect/turf_decal/tile/purple/half{ - dir = 1 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/dark/airless, -/area/ruin/space/has_grav/port_tarkon/developement) -"pH" = ( -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ - dir = 1 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/power1) -"pJ" = ( -/obj/structure/cable, -/obj/machinery/power/apc/auto_name/directional/west, -/obj/effect/mapping_helpers/apc/no_charge, -/obj/effect/mapping_helpers/apc/unlocked, -/obj/effect/turf_decal/tile/yellow/anticorner{ - dir = 8 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/toolstorage) -"pM" = ( -/obj/structure/cable, -/obj/machinery/firealarm/directional/east, -/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, -/area/ruin/space/has_grav/port_tarkon/afthall) -"pR" = ( -/obj/effect/spawner/structure/window/reinforced/no_firelock, -/obj/machinery/door/firedoor/solid/closed, -/turf/open/floor/plating, -/area/ruin/space/has_grav/port_tarkon/porthall) -"pT" = ( -/obj/structure/chair/office, -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ - dir = 1 - }, -/obj/effect/turf_decal/tile/red/half, -/obj/effect/decal/cleanable/dirt, -/obj/effect/mob_spawn/ghost_role/human/tarkon/sec, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/secoff) -"pU" = ( -/obj/machinery/atmospherics/components/unary/outlet_injector/monitored/carbon_input/tarkon{ - dir = 8 - }, -/turf/open/floor/engine/co2, -/area/ruin/space/has_grav/port_tarkon/atmos) -"pW" = ( -/obj/machinery/power/port_gen/pacman/super{ - name = "\improper emergency power generator"; - time_per_sheet = 40 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/plating/airless, -/area/ruin/space/has_grav/port_tarkon/atmos) -"pX" = ( -/obj/machinery/vending/clothing, -/obj/machinery/light/dim/directional/east, -/turf/open/floor/wood/large, -/area/ruin/space/has_grav/port_tarkon/dorms) -"pY" = ( -/obj/machinery/door/airlock/research/glass, -/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/tarkon/general, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/port_tarkon/developement) -"qb" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/turf_decal/delivery/blue, -/obj/effect/turf_decal/tile/neutral/half{ - dir = 1 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/centerhall) -"qe" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/cable, -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/glass, -/turf/open/floor/iron/airless, -/area/ruin/space/has_grav/port_tarkon/observ) -"qh" = ( -/obj/machinery/door/poddoor/shutters/preopen{ - id = "tarkonouter"; - name = "External Bay Shutters" - }, -/obj/effect/turf_decal/trimline/yellow/filled/warning, -/obj/effect/turf_decal/trimline/yellow/filled/warning{ - dir = 8 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/airless, -/area/ruin/space/has_grav/port_tarkon/storage) -"qi" = ( -/obj/effect/turf_decal/stripes/asteroid/line{ - dir = 6 - }, -/turf/open/misc/asteroid/airless, -/area/solars/tarkon) -"qk" = ( -/obj/structure/window/reinforced/spawner/directional/north, -/obj/effect/turf_decal/tile/blue/fourcorners, -/obj/machinery/computer/atmos_control/tarkon/oxygen_tank{ - dir = 4 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/airless, -/area/ruin/space/has_grav/port_tarkon/atmos) -"qq" = ( -/obj/effect/decal/cleanable/dirt, -/obj/item/mod/construction/broken_core, -/obj/item/mod/construction/broken_core, -/obj/item/mod/construction/broken_core, -/obj/item/mod/construction/broken_core, -/obj/item/mod/construction/broken_core, -/obj/structure/closet/crate/secure/science, -/obj/effect/turf_decal/caution/stand_clear, -/obj/effect/turf_decal/tile/brown/half, -/turf/open/floor/iron/airless, -/area/ruin/space/has_grav/port_tarkon/storage) -"qr" = ( -/obj/effect/turf_decal/sand/plating, -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/mining) -"qv" = ( -/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/neutral{ - dir = 8 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/centerhall) -"qw" = ( -/mob/living/basic/carp, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/airless, -/area/ruin/space/has_grav/port_tarkon/atmos) -"qD" = ( -/obj/structure/lattice, -/mob/living/basic/carp, -/turf/open/space/basic, -/area/template_noop) -"qF" = ( -/obj/effect/turf_decal/sand, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/mining) -"qH" = ( -/obj/structure/cable, -/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/decal/cleanable/generic, -/obj/effect/turf_decal/tile/brown/half{ - dir = 1 - }, -/turf/open/floor/iron/airless, -/area/ruin/space/has_grav/port_tarkon/storage) -"qL" = ( -/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/neutral/half, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/centerhall) -"qQ" = ( -/obj/structure/cable, -/obj/machinery/power/apc/auto_name/directional/north, -/obj/effect/mapping_helpers/apc/no_charge, -/obj/effect/mapping_helpers/apc/unlocked, -/obj/effect/turf_decal/tile/red/half{ - dir = 1 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/secoff) -"qS" = ( -/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/east, -/obj/effect/mapping_helpers/apc/no_charge, -/obj/effect/mapping_helpers/apc/unlocked, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/starboardhall) -"qT" = ( -/mob/living/basic/carp, -/obj/item/stack/rods, -/turf/open/misc/asteroid/airless, -/area/ruin/space/has_grav) -"rc" = ( -/obj/item/scalpel, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/dark/airless, -/area/ruin/space/has_grav/port_tarkon/developement) -"rg" = ( -/obj/effect/turf_decal/stripes/asteroid/corner, -/turf/open/misc/asteroid/airless, -/area/solars/tarkon) -"rh" = ( -/turf/closed/wall, -/area/ruin/space/has_grav/port_tarkon/toolstorage) -"rk" = ( -/obj/structure/closet, -/obj/effect/decal/cleanable/dirt, -/obj/item/clothing/shoes/workboots/mining, -/obj/item/clothing/shoes/winterboots, -/obj/item/clothing/shoes/jackboots, -/obj/item/clothing/under/misc/nova/utility, -/obj/item/clothing/under/misc/nova/utility, -/obj/item/storage/backpack, -/obj/item/storage/backpack/duffelbag, -/obj/item/storage/backpack/satchel, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon) -"ro" = ( -/obj/effect/turf_decal/tile/neutral/half{ - dir = 8 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/centerhall) -"rq" = ( -/obj/item/stack/rods, -/turf/open/misc/asteroid/airless, -/area/ruin/space/has_grav) -"ru" = ( -/obj/structure/table/reinforced, -/obj/effect/turf_decal/tile/brown/anticorner{ - dir = 1 - }, -/obj/effect/decal/cleanable/dirt, -/obj/item/crowbar, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/cargo) -"rv" = ( -/obj/structure/table, -/obj/item/storage/medkit/advanced, -/obj/item/storage/medkit/surgery, -/obj/machinery/airalarm/directional/east, -/obj/effect/mapping_helpers/airalarm/all_access, -/obj/effect/turf_decal/tile/blue/half{ - dir = 4 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/trauma) -"rw" = ( -/obj/machinery/light_switch/directional/south, -/obj/effect/turf_decal/tile/neutral/half, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/centerhall) -"ry" = ( -/obj/machinery/firealarm/directional/east, -/obj/effect/turf_decal/tile/blue/half{ - dir = 4 - }, -/obj/machinery/light/dim/directional/east, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/port_tarkon/comms) -"rz" = ( -/obj/structure/rack, -/obj/item/assembly/igniter, -/obj/effect/turf_decal/tile/yellow/half{ - dir = 1 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/toolstorage) -"rB" = ( -/obj/effect/decal/cleanable/dirt, -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ - dir = 8 - }, -/obj/machinery/airalarm/directional/south, -/obj/effect/mapping_helpers/airalarm/all_access, -/obj/effect/turf_decal/tile/brown/half, -/turf/open/floor/iron/airless, -/area/ruin/space/has_grav/port_tarkon/storage) -"rD" = ( -/obj/structure/closet, -/obj/item/storage/backpack/satchel/explorer, -/obj/item/clothing/mask/gas/explorer, -/obj/item/gps/mining, -/obj/item/storage/bag/ore, -/obj/effect/turf_decal/tile/brown/anticorner{ - dir = 8 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/mining) -"rF" = ( -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ - dir = 8 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/dark/airless, -/area/ruin/space/has_grav/port_tarkon/developement) -"rG" = ( -/obj/structure/curtain, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/dark/airless, -/area/ruin/space/has_grav/port_tarkon/developement) -"rH" = ( -/obj/structure/table, -/obj/machinery/cell_charger, -/obj/machinery/light/dim/directional/east, -/obj/effect/turf_decal/tile/purple/half{ - dir = 4 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/dark/airless, -/area/ruin/space/has_grav/port_tarkon/developement) -"rK" = ( -/obj/machinery/door/poddoor/shutters/window/preopen{ - id = "tarkoninner"; - name = "Interior Bay Shutter" - }, -/obj/effect/turf_decal/trimline/yellow/filled/warning{ - dir = 1 - }, -/obj/effect/turf_decal/trimline/yellow/filled/warning{ - dir = 8 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/airless, -/area/ruin/space/has_grav/port_tarkon/storage) -"rL" = ( -/obj/effect/turf_decal/vg_decals/atmos/oxygen, -/obj/machinery/light/small/directional/west, -/obj/machinery/air_sensor/tarkon/oxygen_tank{ - pixel_x = -26 - }, -/turf/open/floor/engine/o2, -/area/ruin/space/has_grav/port_tarkon/atmos) -"rV" = ( -/obj/machinery/airalarm/directional/north, -/obj/effect/turf_decal/tile/yellow/half{ - dir = 1 - }, -/obj/effect/decal/cleanable/dirt, -/obj/effect/mob_spawn/ghost_role/human/tarkon/engi, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/toolstorage) -"rW" = ( -/obj/machinery/airalarm/directional/north, -/obj/effect/mapping_helpers/airalarm/all_access, -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/glass, -/turf/open/floor/iron/airless, -/area/ruin/space/has_grav/port_tarkon/porthall) -"rZ" = ( -/obj/item/stack/tile/carpet/neon/simple/teal/nodots/sixty, -/turf/open/floor/plating, -/area/ruin/space/has_grav/port_tarkon/cargo) -"sa" = ( -/obj/machinery/power/turbine/inlet_compressor{ - dir = 4 - }, -/obj/effect/turf_decal/stripes/line{ - dir = 8 - }, -/obj/effect/turf_decal/stripes/red/line{ - dir = 8 - }, -/obj/structure/cable, -/turf/open/floor/engine/vacuum, -/area/ruin/space/has_grav/port_tarkon/atmos) -"sc" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/visible/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/dark/visible, -/obj/machinery/air_sensor/tarkon/incinerator_tank{ - pixel_x = -26 - }, -/turf/open/floor/engine/vacuum, -/area/ruin/space/has_grav/port_tarkon/atmos) -"sd" = ( -/obj/effect/turf_decal/tile/brown{ - dir = 1 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/starboardhall) -"sf" = ( -/obj/structure/cable, -/mob/living/basic/carp, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/airless, -/area/ruin/space/has_grav/port_tarkon/atmos) -"sj" = ( -/obj/machinery/atmospherics/components/unary/vent_pump/siphon/monitored/nitrogen_output/tarkon{ - dir = 4 - }, -/turf/open/floor/engine/n2, -/area/ruin/space/has_grav/port_tarkon/atmos) -"sl" = ( -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/cafeteria, -/area/ruin/space/has_grav/port_tarkon/kitchen) -"sm" = ( -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ - dir = 8 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon) -"sn" = ( -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ - dir = 1 - }, -/obj/effect/turf_decal/tile/neutral/half, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/centerhall) -"sq" = ( -/obj/structure/closet, -/obj/item/pickaxe/silver, -/obj/item/storage/backpack/duffelbag, -/obj/item/clothing/glasses/meson, -/obj/item/t_scanner/adv_mining_scanner/lesser, -/obj/effect/turf_decal/tile/brown/half, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/mining) -"sr" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/effect/turf_decal/tile/purple/half, -/obj/effect/decal/cleanable/glass, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/dark/airless, -/area/ruin/space/has_grav/port_tarkon/developement) -"sv" = ( -/turf/closed/mineral/random/high_chance, -/area/ruin/space/has_grav) -"sw" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/turf/open/floor/wood/large, -/area/ruin/space/has_grav/port_tarkon/dorms) -"sC" = ( -/obj/effect/decal/cleanable/dirt, -/obj/item/stack/rods, -/turf/open/floor/iron/airless, -/area/ruin/space/has_grav/port_tarkon/observ) -"sD" = ( -/obj/structure/table/wood, -/obj/item/flashlight/lamp/green, -/obj/effect/spawner/random/clothing/costume, -/turf/open/floor/carpet/black, -/area/ruin/space/has_grav/port_tarkon/dorms) -"sI" = ( -/obj/effect/turf_decal/delivery/red, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/airless, -/area/ruin/space/has_grav/port_tarkon/forehall) -"sK" = ( -/obj/structure/chair/sofa/corp/left{ - dir = 1 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/airless, -/area/ruin/space/has_grav/port_tarkon/observ) -"sL" = ( -/obj/effect/spawner/structure/window/reinforced/plasma, -/turf/open/floor/plating, -/area/ruin/space/has_grav/port_tarkon/atmos) -"sM" = ( -/obj/machinery/firealarm/directional/west, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/forehall) -"sN" = ( -/obj/structure/frame/computer{ - dir = 8 - }, -/obj/item/circuitboard/computer/rdconsole, -/obj/effect/turf_decal/tile/purple/half{ - dir = 4 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/dark/airless, -/area/ruin/space/has_grav/port_tarkon/developement) -"sX" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/structure/cable, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/garden) -"tc" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/light_switch/directional/north, -/obj/machinery/firealarm/directional/south{ - pixel_y = -31 - }, -/turf/open/floor/wood/large, -/area/ruin/space/has_grav/port_tarkon/dorms) -"td" = ( -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ - dir = 8 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/cafeteria, -/area/ruin/space/has_grav/port_tarkon/kitchen) -"te" = ( -/obj/machinery/atmospherics/components/unary/vent_pump/high_volume/siphon/monitored/air_output/tarkon{ - dir = 4 - }, -/turf/open/floor/engine/vacuum, -/area/ruin/space/has_grav/port_tarkon/atmos) -"th" = ( -/obj/effect/turf_decal/tile/brown/anticorner{ - dir = 8 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/starboardhall) -"tk" = ( -/obj/structure/table/reinforced, -/obj/machinery/vending/boozeomat, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/centerhall) -"tn" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/port_tarkon/comms) -"to" = ( -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ - dir = 4 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/centerhall) -"tp" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/cable, -/obj/machinery/light_switch/directional/south, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/airless, -/area/ruin/space/has_grav/port_tarkon/forehall) -"tq" = ( -/obj/effect/turf_decal/tile/purple/anticorner{ - dir = 1 - }, -/obj/effect/decal/cleanable/dirt, -/obj/machinery/power/apc/auto_name/directional/west, -/obj/effect/mapping_helpers/apc/no_charge, -/obj/effect/mapping_helpers/apc/unlocked, -/obj/structure/cable, -/turf/open/floor/iron/dark/airless, -/area/ruin/space/has_grav/port_tarkon/developement) -"ts" = ( -/obj/effect/spawner/structure/window/reinforced/no_firelock, -/obj/machinery/atmospherics/pipe/layer_manifold/purple/hidden{ - dir = 4 - }, -/turf/open/floor/plating, -/area/ruin/space/has_grav/port_tarkon/atmos) -"tt" = ( -/obj/structure/fence{ - dir = 4 - }, -/turf/open/misc/asteroid/airless, -/area/ruin/space/has_grav) -"tz" = ( -/obj/structure/window/reinforced/spawner/directional/north, -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ - dir = 1 - }, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/port_tarkon/developement) -"tA" = ( -/obj/machinery/light/dim/directional/south, -/obj/effect/turf_decal/tile/purple/half, -/obj/item/clothing/gloves/latex, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/dark/airless, -/area/ruin/space/has_grav/port_tarkon/developement) -"tC" = ( -/obj/structure/falsewall, -/turf/open/floor/plating, -/area/ruin/space/has_grav/port_tarkon/cargo) -"tE" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/airalarm/directional/north, -/obj/effect/mapping_helpers/airalarm/all_access, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/airless, -/area/ruin/space/has_grav/port_tarkon/porthall) -"tH" = ( -/obj/effect/spawner/structure/window/reinforced/no_firelock, -/obj/machinery/door/firedoor/solid, -/turf/open/floor/plating, -/area/ruin/space/has_grav/port_tarkon/centerhall) -"tI" = ( -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ - dir = 4 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/afthall) -"tM" = ( -/obj/machinery/door/airlock/wood{ - id_tag = "ptdorm2"; - name = "Private Dorm 2" - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/door/firedoor/solid, -/turf/open/floor/wood/large, -/area/ruin/space/has_grav/port_tarkon/dorms) -"tQ" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/airless, -/area/ruin/space/has_grav/port_tarkon/porthall) -"tT" = ( -/obj/structure/closet, -/obj/machinery/firealarm/directional/east, -/obj/effect/decal/cleanable/dirt, -/obj/item/clothing/shoes/workboots/mining, -/obj/item/clothing/shoes/winterboots, -/obj/item/clothing/shoes/jackboots, -/obj/item/clothing/under/misc/nova/utility, -/obj/item/clothing/under/misc/nova/utility, -/obj/item/storage/backpack, -/obj/item/storage/backpack/duffelbag, -/obj/item/storage/backpack/satchel, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon) -"tV" = ( -/obj/effect/turf_decal/sand/plating, -/obj/effect/turf_decal/tile/brown{ - dir = 4 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/mining) -"tY" = ( -/obj/structure/bed/pod{ - dir = 1 - }, -/obj/item/bedsheet/random{ - dir = 1 - }, -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ - dir = 4 - }, -/obj/machinery/button/door/directional/south{ - id = "ptdorm1"; - name = "Door Lock Control"; - normaldoorcontrol = 1; - specialfunctions = 4 - }, -/turf/open/floor/carpet/purple, -/area/ruin/space/has_grav/port_tarkon/dorms) -"ub" = ( -/obj/effect/spawner/structure/window/reinforced/no_firelock, -/obj/machinery/atmospherics/pipe/layer_manifold/yellow/hidden{ - dir = 4 - }, -/turf/open/floor/plating, -/area/ruin/space/has_grav/port_tarkon/atmos) -"ud" = ( -/obj/effect/turf_decal/sand, -/obj/machinery/firealarm/directional/east, -/obj/effect/turf_decal/tile/brown/half{ - dir = 4 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/mining) -"uf" = ( -/obj/effect/decal/cleanable/glass, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/plating/airless, -/area/ruin/space/has_grav/port_tarkon/developement) -"ug" = ( -/obj/structure/closet/firecloset, -/obj/effect/decal/remains/human, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/plating, -/area/ruin/space/has_grav/port_tarkon/forehall) -"ui" = ( -/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, -/obj/machinery/power/apc/auto_name/directional/north, -/obj/effect/mapping_helpers/apc/no_charge, -/obj/effect/mapping_helpers/apc/unlocked, -/obj/effect/turf_decal/tile/brown/half{ - dir = 1 - }, -/turf/open/floor/iron/airless, -/area/ruin/space/has_grav/port_tarkon/storage) -"uk" = ( -/mob/living/basic/carp, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/plating/airless, -/area/ruin/space/has_grav/port_tarkon/atmos) -"ul" = ( -/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/neutral{ - dir = 1 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/centerhall) -"un" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/cable, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/dark/airless, -/area/ruin/space/has_grav/port_tarkon/developement) -"uo" = ( -/mob/living/basic/carp/mega, -/obj/structure/lattice, -/turf/open/misc/asteroid/airless, -/area/ruin/space/has_grav) -"ut" = ( -/obj/effect/spawner/random/entertainment/cigarette_pack, -/obj/structure/closet/crate/bin, -/obj/effect/turf_decal/tile/blue/anticorner{ - dir = 4 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/port_tarkon/comms) -"uv" = ( -/turf/closed/wall, -/area/ruin/space/has_grav/port_tarkon) -"ux" = ( -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ - dir = 4 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon) -"uC" = ( -/obj/structure/closet/crate/bin{ - pixel_y = 8 - }, -/obj/effect/spawner/random/entertainment/cigarette_pack, -/obj/item/reagent_containers/cup/rag, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/white, -/area/ruin/space/has_grav/port_tarkon/centerhall) -"uD" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon) -"uJ" = ( -/obj/effect/decal/cleanable/dirt, -/obj/structure/closet/crate/freezer, -/obj/item/pizzabox/mushroom, -/obj/item/pizzabox/meat, -/obj/item/pizzabox/margherita, -/obj/item/pizzabox/mushroom, -/obj/item/pizzabox/meat, -/obj/item/pizzabox/margherita, -/turf/open/floor/iron/airless, -/area/ruin/space/has_grav/port_tarkon/storage) -"uK" = ( -/obj/machinery/atmospherics/components/unary/portables_connector/visible{ - dir = 4 - }, -/obj/effect/turf_decal/tile/purple/fourcorners, -/obj/structure/cable, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/airless, -/area/ruin/space/has_grav/port_tarkon/atmos) -"uM" = ( -/obj/effect/decal/cleanable/dirt, -/obj/machinery/light/dim/directional/east, -/obj/effect/turf_decal/tile/brown/half{ - dir = 4 - }, -/turf/open/floor/iron/airless, -/area/ruin/space/has_grav/port_tarkon/storage) -"uN" = ( -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ - dir = 4 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/port_tarkon/comms) -"uR" = ( -/turf/open/floor/iron/freezer, -/area/ruin/space/has_grav/port_tarkon/kitchen) -"uS" = ( -/obj/effect/spawner/structure/window/reinforced/no_firelock, -/obj/machinery/door/firedoor/solid, -/turf/open/floor/plating, -/area/ruin/space/has_grav/port_tarkon/secoff) -"uU" = ( -/obj/effect/turf_decal/stripes/asteroid/line{ - dir = 5 - }, -/turf/open/misc/asteroid/airless, -/area/solars/tarkon) -"vd" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/general, -/obj/structure/cable, -/obj/machinery/power/apc/auto_name/directional/east, -/obj/effect/mapping_helpers/apc/no_charge, -/obj/effect/mapping_helpers/apc/unlocked, -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ - dir = 8 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/centerhall) -"ve" = ( -/obj/machinery/door/airlock/wood{ - id_tag = "ptdorm3"; - name = "Private Dorm 3" - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/door/firedoor/solid, -/turf/open/floor/wood/large, -/area/ruin/space/has_grav/port_tarkon/dorms) -"vj" = ( -/obj/structure/closet/crate/internals, -/obj/item/tank/internals/oxygen, -/obj/item/clothing/mask/breath, -/obj/item/clothing/suit/space/eva, -/obj/item/clothing/head/helmet/space/eva, -/obj/effect/turf_decal/tile/yellow/anticorner{ - dir = 4 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/power1) -"vl" = ( -/obj/effect/turf_decal/tile/blue/half{ - dir = 4 - }, -/obj/structure/closet/crate/freezer/blood, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/trauma) -"vm" = ( -/obj/machinery/airalarm/directional/north, -/obj/machinery/light/directional/north, -/obj/effect/turf_decal/tile/brown/half{ - dir = 1 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/cargo) -"vo" = ( -/obj/structure/table/wood/fancy/blue, -/obj/effect/turf_decal/tile/blue/half{ - dir = 1 - }, -/obj/machinery/cell_charger, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/port_tarkon/comms) -"vp" = ( -/obj/machinery/atmospherics/miner/n2o, -/turf/open/floor/engine/n2o, -/area/ruin/space/has_grav/port_tarkon/atmos) -"vs" = ( -/obj/machinery/light/dim/directional/west, -/obj/effect/turf_decal/tile/purple/half{ - dir = 8 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/dark/airless, -/area/ruin/space/has_grav/port_tarkon/developement) -"vz" = ( -/obj/effect/decal/cleanable/glass, -/turf/open/floor/iron/airless, -/area/ruin/space/has_grav/port_tarkon/porthall) -"vA" = ( -/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{ - dir = 8 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/starboardhall) -"vB" = ( -/obj/structure/curtain, -/obj/effect/turf_decal/tile/purple/half, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/dark/airless, -/area/ruin/space/has_grav/port_tarkon/developement) -"vC" = ( -/turf/closed/wall/r_wall, -/area/ruin/space/has_grav/port_tarkon/secoff) -"vF" = ( -/obj/item/gps/computer/space{ - gpstag = "Port Tarkon - Defcon 4" - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/centerhall) -"vG" = ( -/obj/structure/cable, -/obj/effect/turf_decal/tile/blue/half{ - dir = 1 - }, -/obj/machinery/power/apc/auto_name/directional/north, -/obj/effect/mapping_helpers/apc/no_charge, -/obj/effect/mapping_helpers/apc/unlocked, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/port_tarkon/comms) -"vL" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/dark/airless, -/area/ruin/space/has_grav/port_tarkon/developement) -"vN" = ( -/obj/machinery/iv_drip, -/obj/effect/turf_decal/tile/blue/half{ - dir = 8 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/trauma) -"vO" = ( -/turf/open/floor/plating, -/area/ruin/space/has_grav/port_tarkon/atmos) -"vQ" = ( -/obj/structure/lattice, -/turf/open/misc/asteroid/airless, -/area/ruin/space/has_grav) -"vR" = ( -/obj/machinery/light/small/directional/north, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/white, -/area/ruin/space/has_grav/port_tarkon/centerhall) -"wa" = ( -/obj/structure/cable, -/obj/machinery/power/terminal{ - dir = 4 - }, -/obj/effect/turf_decal/tile/yellow/half{ - dir = 8 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/power1) -"wc" = ( -/obj/structure/table, -/obj/item/clothing/suit/toggle/labcoat/medical, -/obj/machinery/power/apc/auto_name/directional/west, -/obj/effect/mapping_helpers/apc/no_charge, -/obj/effect/mapping_helpers/apc/unlocked, -/obj/structure/cable, -/obj/effect/turf_decal/tile/blue/half{ - dir = 8 - }, -/obj/item/clothing/suit/toggle/labcoat/medical, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/trauma) -"wh" = ( -/obj/structure/chair/stool/directional/south, -/obj/effect/turf_decal/stripes{ - dir = 1 - }, -/obj/effect/decal/cleanable/dirt, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden, -/turf/open/floor/engine/vacuum, -/area/ruin/space/has_grav/port_tarkon/atmos) -"wl" = ( -/obj/effect/turf_decal/tile/purple/half, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/dark/airless, -/area/ruin/space/has_grav/port_tarkon/developement) -"wt" = ( -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ - dir = 8 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/airless, -/area/ruin/space/has_grav/port_tarkon/porthall) -"ww" = ( -/obj/machinery/airalarm/directional/north, -/obj/effect/mapping_helpers/airalarm/all_access, -/obj/effect/turf_decal/tile/neutral/half{ - dir = 1 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/centerhall) -"wx" = ( -/obj/structure/window/reinforced/spawner/directional/west, -/obj/structure/window/reinforced/spawner/directional/south, -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/port_tarkon/developement) -"wC" = ( -/obj/effect/turf_decal/tile/yellow/full, -/obj/structure/rack/shelf, -/obj/effect/spawner/random/engineering/tool, -/obj/effect/spawner/random/engineering/tool, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/toolstorage) -"wK" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/cable, -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/glass, -/obj/item/stack/rods, -/turf/open/floor/plating/airless, -/area/ruin/space/has_grav/port_tarkon/porthall) -"wQ" = ( -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/plating/airless, -/area/ruin/space/has_grav/port_tarkon/developement) -"wV" = ( -/obj/machinery/power/solar, -/obj/effect/turf_decal/stripes/asteroid/line, -/turf/open/misc/asteroid/airless, -/area/solars/tarkon) -"wW" = ( -/obj/machinery/atmospherics/components/binary/dp_vent_pump/high_volume/incinerator_tarkon{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/visible/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/dark/visible, -/turf/open/floor/engine/vacuum, -/area/ruin/space/has_grav/port_tarkon/atmos) -"wY" = ( -/obj/effect/turf_decal/tile/blue{ - dir = 8 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/port_tarkon/comms) -"wZ" = ( -/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{ - dir = 8 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/mining) -"xc" = ( -/obj/machinery/light/warm/directional/west, -/obj/effect/turf_decal/tile/neutral/anticorner{ - dir = 1 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/centerhall) -"xd" = ( -/obj/effect/turf_decal/tile/purple/half{ - dir = 1 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/dark/airless, -/area/ruin/space/has_grav/port_tarkon/developement) -"xi" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/cable, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/trauma) -"xj" = ( -/obj/machinery/atmospherics/components/unary/vent_pump/siphon/monitored/carbon_output/tarkon{ - dir = 8 - }, -/turf/open/floor/engine/co2, -/area/ruin/space/has_grav/port_tarkon/atmos) -"xp" = ( -/obj/effect/spawner/structure/window/reinforced/no_firelock, -/obj/machinery/atmospherics/pipe/layer_manifold/green/hidden{ - dir = 4 - }, -/turf/open/floor/plating, -/area/ruin/space/has_grav/port_tarkon/atmos) -"xq" = ( -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, -/obj/machinery/airalarm/directional/west, -/obj/effect/mapping_helpers/airalarm/all_access, -/turf/open/floor/carpet/black, -/area/ruin/space/has_grav/port_tarkon/dorms) -"xt" = ( -/turf/closed/wall/r_wall, -/area/ruin/space/has_grav/port_tarkon/atmos) -"xu" = ( -/obj/effect/turf_decal/tile/purple/anticorner{ - dir = 8 - }, -/obj/effect/decal/cleanable/glass, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/dark/airless, -/area/ruin/space/has_grav/port_tarkon/developement) -"xB" = ( -/obj/machinery/igniter/incinerator_tarkon, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/visible/layer2{ - dir = 5 - }, -/turf/open/floor/engine/vacuum, -/area/ruin/space/has_grav/port_tarkon/atmos) -"xH" = ( -/obj/machinery/ammo_workbench/unlocked, -/obj/effect/turf_decal/tile/red/half{ - dir = 1 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/secoff) -"xL" = ( -/obj/machinery/power/smes/engineering{ - charge = 0 - }, -/obj/structure/cable, -/obj/effect/turf_decal/tile/yellow/half{ - dir = 1 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/power1) -"xN" = ( -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/airless, -/area/ruin/space/has_grav/port_tarkon/observ) -"xO" = ( -/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, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/cargo) -"xP" = ( -/obj/structure/cable, -/turf/open/floor/plating, -/area/ruin/space/has_grav/port_tarkon/power1) -"xR" = ( -/obj/effect/turf_decal/tile/brown/half{ - dir = 8 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/airless, -/area/ruin/space/has_grav/port_tarkon/storage) -"xT" = ( -/obj/effect/turf_decal/tile/purple/half{ - dir = 1 - }, -/obj/machinery/firealarm/directional/north, -/obj/structure/table/reinforced, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/dark/airless, -/area/ruin/space/has_grav/port_tarkon/developement) -"xU" = ( -/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/neutral/half{ - dir = 4 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/centerhall) -"xW" = ( -/obj/effect/decal/cleanable/dirt, -/obj/item/stack/rods, -/turf/open/misc/asteroid/airless, -/area/ruin/space/has_grav/port_tarkon/atmos) -"xY" = ( -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ - dir = 4 - }, -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/glass, -/turf/open/floor/iron/dark/airless, -/area/ruin/space/has_grav/port_tarkon/developement) -"xZ" = ( -/obj/machinery/firealarm/directional/north, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/airless, -/area/ruin/space/has_grav/port_tarkon/porthall) -"yd" = ( -/turf/closed/wall/r_wall, -/area/ruin/space/has_grav/port_tarkon/forehall) -"ye" = ( -/obj/effect/turf_decal/stripes/asteroid/line{ - dir = 1 - }, -/turf/open/misc/asteroid/airless, -/area/solars/tarkon) -"yh" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/cable, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/forehall) -"yi" = ( -/obj/machinery/firealarm/directional/north, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/airless, -/area/ruin/space/has_grav/port_tarkon/forehall) -"yj" = ( -/obj/machinery/firealarm/directional/east, -/obj/effect/turf_decal/tile/neutral/anticorner, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/centerhall) -"yl" = ( -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ - dir = 4 - }, -/obj/structure/table/wood, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/airless, -/area/ruin/space/has_grav/port_tarkon/observ) -"ym" = ( -/obj/machinery/door/poddoor/shutters/window/preopen{ - id = "tarkoninner"; - name = "Interior Bay Shutter" - }, -/obj/effect/turf_decal/trimline/yellow/filled/warning{ - dir = 1 - }, -/obj/effect/turf_decal/trimline/yellow/filled/warning{ - dir = 4 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/airless, -/area/ruin/space/has_grav/port_tarkon/storage) -"yp" = ( -/obj/structure/trash_pile, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/plating, -/area/ruin/space/has_grav/port_tarkon/forehall) -"yt" = ( -/obj/effect/spawner/structure/window/reinforced/no_firelock, -/obj/machinery/door/firedoor/solid/closed, -/turf/open/floor/plating, -/area/ruin/space/has_grav/port_tarkon/forehall) -"yv" = ( -/obj/machinery/vending/coffee, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/afthall) -"yx" = ( -/obj/structure/frame/machine, -/obj/item/circuitboard/machine/mechfab, -/obj/effect/turf_decal/tile/purple/half{ - dir = 1 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/dark/airless, -/area/ruin/space/has_grav/port_tarkon/developement) -"yy" = ( -/obj/structure/table/wood/fancy/blue, -/obj/effect/turf_decal/tile/blue/anticorner{ - dir = 1 - }, -/obj/machinery/recharger, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/port_tarkon/comms) -"yz" = ( -/obj/machinery/firealarm/directional/west, -/obj/effect/turf_decal/tile/purple/half{ - dir = 8 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/dark/airless, -/area/ruin/space/has_grav/port_tarkon/developement) -"yA" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/turf/open/floor/carpet/red, -/area/ruin/space/has_grav/port_tarkon/dorms) -"yC" = ( -/obj/machinery/air_sensor/tarkon/mix_tank{ - pixel_x = -26 - }, -/turf/open/floor/engine/vacuum, -/area/ruin/space/has_grav/port_tarkon/atmos) -"yD" = ( -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ - dir = 4 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/starboardhall) -"yE" = ( -/obj/effect/decal/cleanable/dirt, -/obj/structure/lattice, -/turf/open/misc/asteroid/airless, -/area/ruin/space/has_grav/port_tarkon/porthall) -"yF" = ( -/obj/effect/turf_decal/tile/yellow/half, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/toolstorage) -"yG" = ( -/obj/structure/chair/office{ - dir = 1 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/dark/airless, -/area/ruin/space/has_grav/port_tarkon/developement) -"yI" = ( -/obj/item/hemostat, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/dark/airless, -/area/ruin/space/has_grav/port_tarkon/developement) -"yO" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/glass, -/turf/open/floor/iron/dark/airless, -/area/ruin/space/has_grav/port_tarkon/developement) -"yS" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/curtain, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/trauma) -"yU" = ( -/obj/effect/spawner/structure/window/reinforced/no_firelock, -/obj/machinery/door/firedoor/solid, -/turf/open/floor/plating, -/area/ruin/space/has_grav/port_tarkon/mining) -"yY" = ( -/obj/effect/spawner/structure/window/reinforced/no_firelock, -/obj/machinery/door/firedoor/solid, -/turf/open/floor/plating, -/area/ruin/space/has_grav/port_tarkon/toolstorage) -"zb" = ( -/obj/effect/turf_decal/sand/plating, -/obj/structure/fence/door/opened{ - dir = 4 - }, -/turf/open/floor/plating/airless, -/area/ruin/space/has_grav) -"zc" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/plating/airless, -/area/ruin/space/has_grav/port_tarkon/atmos) -"zd" = ( -/obj/effect/turf_decal/sand/plating, -/obj/effect/turf_decal/tile/brown, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/mining) -"zf" = ( -/turf/closed/wall/r_wall, -/area/ruin/space/has_grav/port_tarkon/mining) -"zm" = ( -/obj/structure/cable, -/obj/machinery/power/terminal{ - dir = 4 - }, -/obj/effect/turf_decal/tile/yellow/anticorner{ - dir = 1 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/power1) -"zo" = ( -/turf/open/misc/asteroid/airless, -/area/ruin/space/has_grav) -"zp" = ( -/obj/effect/turf_decal/delivery/blue, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/starboardhall) -"zt" = ( -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/secoff) -"zy" = ( -/obj/effect/turf_decal/tile/brown/half{ - dir = 8 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/mining) -"zC" = ( -/obj/machinery/power/turbine/turbine_outlet{ - dir = 4 - }, -/obj/structure/cable, -/turf/open/floor/engine/vacuum, -/area/ruin/space/has_grav/port_tarkon/atmos) -"zJ" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ - dir = 4 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/power1) -"zL" = ( -/obj/machinery/firealarm/directional/west, -/obj/effect/turf_decal/tile/blue/half{ - dir = 8 - }, -/obj/machinery/light/dim/directional/west, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/port_tarkon/comms) -"zM" = ( -/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{ - dir = 4 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/starboardhall) -"zT" = ( -/obj/structure/table/reinforced, -/obj/item/stack/sheet/glass/fifty, -/obj/item/stack/sheet/iron/fifty, -/obj/item/holosign_creator/atmos, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/dark/airless, -/area/ruin/space/has_grav/port_tarkon/atmos) -"zV" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/cable, -/mob/living/basic/carp, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/airless, -/area/ruin/space/has_grav/port_tarkon/forehall) -"zW" = ( -/obj/structure/cable, -/obj/machinery/light/directional/north, -/obj/effect/turf_decal/tile/yellow/half{ - dir = 1 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/power1) -"zZ" = ( -/obj/structure/window/reinforced/tinted/spawner/directional/south, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/trauma) -"Ae" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/trauma) -"Ak" = ( -/obj/machinery/atmospherics/components/unary/outlet_injector/monitored/incinerator_input/tarkon{ - dir = 8 - }, -/turf/open/floor/engine/vacuum, -/area/ruin/space/has_grav/port_tarkon/atmos) -"Al" = ( -/obj/structure/cable, -/obj/machinery/power/solar, -/obj/effect/turf_decal/stripes/asteroid/line{ - dir = 9 - }, -/turf/open/misc/asteroid/airless, -/area/solars/tarkon) -"An" = ( -/obj/structure/fireaxecabinet/directional/north, -/obj/machinery/pipedispenser, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/airless, -/area/ruin/space/has_grav/port_tarkon/atmos) -"Ao" = ( -/obj/effect/decal/cleanable/dirt, -/obj/item/paper/fluff/ruins/tarkon/defcon4, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon) -"At" = ( -/obj/machinery/power/solar, -/obj/structure/cable, -/obj/effect/turf_decal/stripes/asteroid/line, -/turf/open/misc/asteroid/airless, -/area/solars/tarkon) -"Au" = ( -/obj/structure/cable, -/obj/machinery/door/airlock/engineering{ - name = "Engineering" - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/door/firedoor/solid, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/power1) -"Ax" = ( -/obj/effect/decal/cleanable/dirt, -/mob/living/basic/carp/mega, -/turf/open/floor/iron/dark/airless, -/area/ruin/space/has_grav/port_tarkon/developement) -"AA" = ( -/obj/effect/turf_decal/stripes{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/visible/layer2{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/dark/visible, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/dark/airless, -/area/ruin/space/has_grav/port_tarkon/atmos) -"AF" = ( -/obj/machinery/atmospherics/components/unary/outlet_injector/monitored/oxygen_input/tarkon{ - dir = 4 - }, -/turf/open/floor/engine/o2, -/area/ruin/space/has_grav/port_tarkon/atmos) -"AG" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/cable, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/starboardhall) -"AL" = ( -/turf/closed/mineral/random/high_chance, -/area/ruin/space/has_grav/port_tarkon/porthall) -"AM" = ( -/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/delivery/white, -/obj/effect/turf_decal/tile/yellow{ - dir = 4 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/power1) -"AP" = ( -/turf/closed/wall/r_wall, -/area/ruin/space/has_grav/port_tarkon/centerhall) -"AT" = ( -/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/neutral{ - dir = 8 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/centerhall) -"AZ" = ( -/obj/effect/turf_decal/tile/brown/half{ - dir = 4 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/airless, -/area/ruin/space/has_grav/port_tarkon/storage) -"Ba" = ( -/obj/effect/turf_decal/sand, -/obj/machinery/light/small/directional/east, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/mining) -"Bi" = ( -/obj/machinery/atmospherics/components/binary/pump/off/general{ - dir = 4 - }, -/obj/effect/turf_decal/tile/neutral/fourcorners, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/airless, -/area/ruin/space/has_grav/port_tarkon/atmos) -"Bj" = ( -/obj/effect/spawner/structure/window/reinforced/no_firelock, -/obj/machinery/atmospherics/pipe/layer_manifold/cyan/hidden{ - dir = 4 - }, -/turf/open/floor/plating, -/area/ruin/space/has_grav/port_tarkon/atmos) -"Bk" = ( -/obj/structure/cable, -/obj/machinery/power/solar, -/obj/effect/turf_decal/stripes/asteroid/line, -/turf/open/misc/asteroid/airless, -/area/solars/tarkon) -"Bn" = ( -/obj/machinery/door/airlock/public{ - name = "Kitchen Freezer" - }, -/obj/machinery/door/firedoor/solid, -/turf/open/floor/iron/freezer, -/area/ruin/space/has_grav/port_tarkon/kitchen) -"Bo" = ( -/obj/machinery/firealarm/directional/east, -/obj/effect/turf_decal/tile/brown/half{ - dir = 4 - }, -/obj/effect/decal/cleanable/dirt, -/obj/machinery/computer/order_console/mining{ - forced_express = 1; - express_cost_multiplier = 1 - }, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/mining) -"Bp" = ( -/obj/structure/window/reinforced/tinted/spawner/directional/south, -/obj/effect/turf_decal/tile/blue/half{ - dir = 8 - }, -/obj/item/circuitboard/machine/sleeper, -/obj/structure/closet/secure_closet/medical1, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/trauma) -"Bq" = ( -/obj/structure/sign/warning/vacuum, -/turf/closed/wall/r_wall, -/area/ruin/space/has_grav/port_tarkon/mining) -"BF" = ( -/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/turf_decal/tile/brown/half{ - dir = 1 - }, -/turf/open/floor/iron/airless, -/area/ruin/space/has_grav/port_tarkon/storage) -"BI" = ( -/obj/machinery/door/airlock/public/glass{ - name = "Fore Primary Hallway" - }, -/obj/machinery/door/firedoor/solid, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/forehall) -"BP" = ( -/obj/effect/decal/cleanable/dirt, -/obj/structure/lattice, -/obj/item/stack/rods, -/turf/open/misc/asteroid/airless, -/area/ruin/space/has_grav/port_tarkon/atmos) -"BS" = ( -/obj/effect/turf_decal/delivery/white, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/power1) -"BU" = ( -/obj/effect/turf_decal/tile/brown{ - dir = 1 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/mining) -"BV" = ( -/obj/machinery/light/warm/directional/south, -/obj/effect/turf_decal/tile/neutral/anticorner{ - dir = 8 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/centerhall) -"BW" = ( -/obj/structure/cable, -/obj/effect/turf_decal/tile/yellow/half, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/power1) -"BX" = ( -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/airless, -/area/ruin/space/has_grav/port_tarkon/atmos) -"Ce" = ( -/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{ - dir = 4 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/cargo) -"Cf" = ( -/obj/structure/window/reinforced/spawner/directional/south, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/port_tarkon/developement) -"Ch" = ( -/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/dark, -/area/ruin/space/has_grav/port_tarkon/comms) -"Ci" = ( -/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/tile/neutral{ - dir = 4 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/centerhall) -"Ck" = ( -/obj/structure/rack, -/obj/effect/turf_decal/tile/yellow/anticorner{ - dir = 8 - }, -/obj/item/stock_parts/cell/high, -/obj/item/stock_parts/cell/high, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/power1) -"Cm" = ( -/obj/structure/closet/crate, -/obj/item/stack/sheet/glass/fifty, -/obj/item/stack/sheet/glass{ - amount = 25 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/plating, -/area/ruin/space/has_grav/port_tarkon/forehall) -"Cp" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/cable, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/airless, -/area/ruin/space/has_grav/port_tarkon/forehall) -"Cq" = ( -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/airless, -/area/ruin/space/has_grav/port_tarkon/forehall) -"Cs" = ( -/obj/machinery/door/airlock/mining/glass, -/obj/effect/turf_decal/sand, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/door/firedoor/solid, -/obj/effect/mapping_helpers/airlock/cyclelink_helper, -/obj/effect/mapping_helpers/airlock/access/all/tarkon/general, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/mining) -"Ct" = ( -/turf/closed/mineral/random, -/area/ruin/space/has_grav/port_tarkon/developement) -"Cw" = ( -/obj/structure/table, -/obj/item/stack/sheet/mineral/gold{ - amount = 25 - }, -/obj/effect/turf_decal/tile/purple/half{ - dir = 4 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/dark/airless, -/area/ruin/space/has_grav/port_tarkon/developement) -"Cx" = ( -/obj/effect/decal/cleanable/dirt, -/obj/structure/chair/sofa/corp/right{ - dir = 1 - }, -/turf/open/floor/iron/airless, -/area/ruin/space/has_grav/port_tarkon/observ) -"Cy" = ( -/obj/machinery/door/airlock/wood{ - id_tag = "ptdorm1"; - name = "Private Dorm 1" - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/door/firedoor/solid, -/turf/open/floor/wood/large, -/area/ruin/space/has_grav/port_tarkon/dorms) -"CA" = ( -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ - dir = 4 - }, -/obj/effect/turf_decal/tile/neutral/half{ - dir = 8 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/centerhall) -"CB" = ( -/obj/effect/spawner/structure/window/reinforced, -/obj/effect/turf_decal/tile/purple/half{ - dir = 1 - }, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/port_tarkon/developement) -"CC" = ( -/obj/effect/decal/cleanable/dirt, -/obj/structure/fluff/empty_sleeper{ - dir = 1 - }, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon) -"CE" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/light/dim/directional/east, -/obj/effect/turf_decal/tile/red/anticorner, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/secoff) -"CG" = ( -/obj/machinery/light/warm/directional/west, -/obj/effect/turf_decal/tile/neutral/half{ - dir = 8 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/centerhall) -"CI" = ( -/obj/structure/cable, -/obj/effect/turf_decal/tile/yellow/half{ - dir = 8 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/power1) -"CL" = ( -/obj/structure/cable, -/obj/machinery/door/airlock/mining/glass, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/door/firedoor/solid, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/mining) -"CM" = ( -/obj/effect/decal/cleanable/dirt, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/turf_decal/tile/brown{ - dir = 8 - }, -/turf/open/floor/iron/airless, -/area/ruin/space/has_grav/port_tarkon/storage) -"CP" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/airless, -/area/ruin/space/has_grav/port_tarkon/atmos) -"CS" = ( -/obj/structure/table/wood, -/obj/item/flashlight/lamp, -/obj/effect/spawner/random/clothing/costume, -/turf/open/floor/carpet/cyan, -/area/ruin/space/has_grav/port_tarkon/dorms) -"CV" = ( -/obj/structure/cable, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/power1) -"CW" = ( -/obj/machinery/airalarm/directional/north, -/obj/effect/mapping_helpers/airalarm/all_access, -/obj/structure/table/wood/fancy/blue, -/obj/effect/turf_decal/tile/blue/half{ - dir = 1 - }, -/obj/item/coin, -/obj/item/coin, -/obj/machinery/light/directional/north, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/port_tarkon/comms) -"CX" = ( -/obj/machinery/light/dim/directional/north, -/obj/structure/rack, -/obj/item/screwdriver, -/obj/item/wrench, -/obj/effect/turf_decal/tile/yellow/half{ - dir = 1 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/toolstorage) -"CY" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/light/dim/directional/east, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/starboardhall) -"Da" = ( -/obj/effect/turf_decal/tile/brown/half, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/starboardhall) -"Dk" = ( -/obj/item/stack/spacecash/c100, -/obj/item/stack/spacecash/c100{ - pixel_x = 4; - pixel_y = 7 - }, -/obj/item/stack/spacecash/c100{ - pixel_x = 4; - pixel_y = -8 - }, -/obj/item/stack/spacecash/c20{ - pixel_x = -4; - pixel_y = 3 - }, -/obj/item/stack/spacecash/c20{ - pixel_y = 10 - }, -/obj/item/stack/spacecash/c20{ - pixel_x = 5 - }, -/obj/item/stack/spacecash/c10{ - pixel_x = -4; - pixel_y = -5 - }, -/obj/item/stack/spacecash/c10{ - pixel_x = -6; - pixel_y = 12 - }, -/obj/item/stack/spacecash/c10{ - pixel_x = 4; - pixel_y = 4 - }, -/obj/item/mod/module/visor/rave, -/turf/open/floor/plating, -/area/ruin/space/has_grav/port_tarkon/cargo) -"Dn" = ( -/obj/effect/spawner/structure/window/reinforced/no_firelock, -/obj/machinery/door/firedoor/solid, -/turf/open/floor/plating, -/area/ruin/space/has_grav/port_tarkon/starboardhall) -"Dv" = ( -/obj/effect/decal/cleanable/dirt, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/turf/open/floor/iron/airless, -/area/ruin/space/has_grav/port_tarkon/storage) -"DA" = ( -/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/tile/neutral/anticorner, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/centerhall) -"DD" = ( -/obj/structure/table/reinforced, -/obj/machinery/cell_charger, -/obj/item/clothing/gloves/color/yellow, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/dark/airless, -/area/ruin/space/has_grav/port_tarkon/atmos) -"DI" = ( -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/airless, -/area/ruin/space/has_grav/port_tarkon/porthall) -"DK" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/dark/airless, -/area/ruin/space/has_grav/port_tarkon/developement) -"DM" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/cable, -/obj/effect/decal/cleanable/dirt, -/mob/living/basic/carp, -/turf/open/floor/iron/airless, -/area/ruin/space/has_grav/port_tarkon/porthall) -"DN" = ( -/obj/machinery/light_switch/directional/north, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/starboardhall) -"DO" = ( -/obj/machinery/light/dim/directional/north, -/obj/effect/turf_decal/tile/purple/half{ - dir = 1 - }, -/obj/structure/window/reinforced/spawner/directional/west, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/port_tarkon/developement) -"DP" = ( -/obj/machinery/computer{ - desc = "A computer long since rendered non-functional due to lack of maintenance. Spitting out error messages."; - dir = 8; - name = "Broken Computer" - }, -/obj/effect/turf_decal/tile/red/half, -/obj/item/paper/fluff/ruins/tarkon/detain, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/secoff) -"DS" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/turf_decal/tile/neutral/half{ - dir = 1 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/centerhall) -"DY" = ( -/obj/machinery/firealarm/directional/east, -/turf/closed/mineral/random/high_chance, -/area/ruin/space/has_grav/port_tarkon/porthall) -"DZ" = ( -/obj/effect/turf_decal/tile/blue/half{ - dir = 8 - }, -/obj/machinery/light_switch/directional/west, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/port_tarkon/comms) -"Eb" = ( -/mob/living/basic/carp, -/turf/open/misc/asteroid/airless, -/area/ruin/space/has_grav) -"Ed" = ( -/obj/machinery/light/small/directional/south, -/obj/effect/turf_decal/tile/purple/half, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/dark/airless, -/area/ruin/space/has_grav/port_tarkon/developement) -"El" = ( -/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/large, -/area/ruin/space/has_grav/port_tarkon/dorms) -"Eq" = ( -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ - dir = 4 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/afthall) -"Er" = ( -/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/dark/airless, -/area/ruin/space/has_grav/port_tarkon/developement) -"Et" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/cable, -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/glass, -/turf/open/floor/plating/airless, -/area/ruin/space/has_grav/port_tarkon/porthall) -"Eu" = ( -/obj/machinery/airalarm/directional/west, -/obj/effect/mapping_helpers/airalarm/all_access, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/forehall) -"Ex" = ( -/obj/effect/turf_decal/vg_decals/atmos/mix, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/visible/layer2, -/turf/open/floor/engine/vacuum, -/area/ruin/space/has_grav/port_tarkon/atmos) -"Ez" = ( -/obj/structure/chair/wood{ - dir = 1 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/airless, -/area/ruin/space/has_grav/port_tarkon/observ) -"EA" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/centerhall) -"EB" = ( -/obj/machinery/iv_drip, -/obj/structure/window/reinforced/tinted/spawner/directional/south, -/obj/machinery/light/small/directional/east, -/obj/effect/turf_decal/tile/blue/half{ - dir = 4 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/trauma) -"EC" = ( -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ - dir = 1 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/secoff) -"EE" = ( -/obj/structure/table, -/obj/effect/turf_decal/tile/blue/half{ - dir = 4 - }, -/obj/machinery/button/door{ - id = "ptcomms"; - name = "shutter controls" - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/port_tarkon/comms) -"EN" = ( -/obj/structure/sign/warning/deathsposal, -/turf/closed/wall, -/area/ruin/space/has_grav/port_tarkon/power1) -"EQ" = ( -/obj/effect/spawner/structure/window/reinforced/no_firelock, -/obj/machinery/door/poddoor/shutters{ - id = "ptobservatory" - }, -/turf/open/floor/plating, -/area/ruin/space/has_grav/port_tarkon/observ) -"EV" = ( -/obj/structure/curtain, -/obj/effect/turf_decal/tile/blue/half{ - dir = 1 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/trauma) -"EW" = ( -/mob/living/basic/carp/mega, -/turf/open/space/basic, -/area/template_noop) -"EY" = ( -/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/blue{ - dir = 1 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/port_tarkon/comms) -"Fb" = ( -/obj/structure/closet/emcloset, -/obj/effect/turf_decal/tile/neutral/full, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/centerhall) -"Fe" = ( -/obj/machinery/door/airlock/public/glass{ - name = "Crew Storage" - }, -/obj/machinery/door/firedoor/solid, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon) -"Fh" = ( -/obj/effect/turf_decal/stripes{ - dir = 1 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/dark/airless, -/area/ruin/space/has_grav/port_tarkon/atmos) -"Fk" = ( -/obj/structure/table/reinforced, -/obj/item/storage/pouch/ammo, -/obj/item/storage/pouch/ammo, -/obj/machinery/firealarm/directional/north, -/obj/effect/turf_decal/tile/red/half{ - dir = 1 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/secoff) -"Fl" = ( -/obj/item/electronics/apc, -/obj/item/electronics/apc, -/obj/item/electronics/airlock, -/obj/item/electronics/airlock, -/obj/item/electronics/airalarm, -/obj/item/electronics/airalarm, -/obj/structure/closet/crate/engineering/electrical{ - name = "electronics crate" - }, -/obj/item/electronics/tracker, -/obj/item/stack/cable_coil, -/obj/item/clothing/gloves/color/yellow, -/obj/item/circuitboard/computer/atmos_control/tarkon/carbon_tank, -/obj/item/circuitboard/computer/atmos_control/tarkon/mix_tank, -/obj/item/circuitboard/computer/atmos_control/tarkon/nitrogen_tank, -/obj/item/circuitboard/computer/atmos_control/tarkon/incinerator, -/obj/item/circuitboard/computer/atmos_control/tarkon/oxygen_tank, -/obj/item/circuitboard/computer/atmos_control/tarkon/plasma_tank, -/obj/item/circuitboard/computer/tarkon_driver, -/turf/open/floor/plating, -/area/ruin/space/has_grav/port_tarkon/forehall) -"Fm" = ( -/obj/structure/table/reinforced, -/obj/item/clothing/gloves/color/yellow, -/obj/item/paper/fluff/ruins/oldstation/generator_manual, -/obj/item/wirecutters, -/obj/item/wrench, -/obj/structure/cable, -/turf/open/floor/plating, -/area/ruin/space/has_grav/port_tarkon/power1) -"Fq" = ( -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/mining) -"Fr" = ( -/obj/machinery/atmospherics/pipe/layer_manifold/scrubbers/visible, -/turf/closed/wall/r_wall, -/area/ruin/space/has_grav/port_tarkon/atmos) -"Fs" = ( -/obj/machinery/airlock_sensor/incinerator_tarkon{ - pixel_x = 6; - pixel_y = 23 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden, -/turf/open/floor/engine/vacuum, -/area/ruin/space/has_grav/port_tarkon/atmos) -"Ft" = ( -/obj/item/solar_assembly, -/obj/effect/turf_decal/stripes/asteroid/line, -/turf/open/misc/asteroid/airless, -/area/solars/tarkon) -"FB" = ( -/obj/item/flashlight/lantern, -/obj/item/flashlight/lantern, -/obj/item/flashlight/lantern, -/obj/item/flashlight/lantern, -/obj/structure/table, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon) -"FC" = ( -/obj/machinery/firealarm/directional/east, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/airless, -/area/ruin/space/has_grav/port_tarkon/porthall) -"FE" = ( -/obj/structure/lattice, -/turf/open/space/basic, -/area/template_noop) -"FG" = ( -/obj/item/shovel, -/turf/open/misc/asteroid/airless, -/area/ruin/space/has_grav) -"FK" = ( -/obj/structure/closet/crate, -/obj/effect/decal/cleanable/dirt, -/obj/item/clothing/gloves/color/yellow, -/obj/item/clothing/suit/hazardvest, -/obj/item/clothing/head/utility/hardhat/orange, -/obj/item/clothing/gloves/color/black, -/obj/item/storage/belt/utility, -/turf/open/floor/iron/airless, -/area/ruin/space/has_grav/port_tarkon/storage) -"FN" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/light_switch/directional/south, -/obj/effect/turf_decal/tile/yellow/anticorner, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/toolstorage) -"FO" = ( -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/plating/airless, -/area/ruin/space/has_grav/port_tarkon/atmos) -"FR" = ( -/obj/structure/table, -/obj/effect/turf_decal/tile/blue/half, -/obj/item/encryptionkey/headset_cargo/tarkon, -/obj/item/encryptionkey/headset_cargo/tarkon, -/obj/item/encryptionkey/headset_cargo/tarkon, -/obj/item/encryptionkey/headset_cargo/tarkon, -/obj/item/encryptionkey/headset_cargo/tarkon, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/port_tarkon/comms) -"FS" = ( -/obj/structure/table/reinforced, -/obj/item/reagent_containers/condiment/enzyme, -/obj/item/reagent_containers/condiment/sugar, -/turf/open/floor/iron/cafeteria, -/area/ruin/space/has_grav/port_tarkon/kitchen) -"FT" = ( -/obj/machinery/power/turbine/core_rotor{ - dir = 4; - mapping_id = "tarkon_turbine" - }, -/obj/structure/cable, -/turf/open/floor/engine/vacuum, -/area/ruin/space/has_grav/port_tarkon/atmos) -"FU" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, -/obj/effect/turf_decal/tile/yellow/half{ - dir = 4 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/toolstorage) -"FX" = ( -/obj/structure/table, -/obj/item/multitool, -/obj/item/storage/belt/utility/full, -/obj/item/paper/fluff/ruins/tarkon/designdoc, -/obj/effect/turf_decal/tile/yellow/half, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/power1) -"FZ" = ( -/obj/machinery/light/small/directional/east, -/obj/machinery/light_switch/directional/east, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/cafeteria, -/area/ruin/space/has_grav/port_tarkon/kitchen) -"Gb" = ( -/obj/effect/decal/cleanable/dirt, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/turf_decal/tile/brown/half{ - dir = 1 - }, -/turf/open/floor/iron/airless, -/area/ruin/space/has_grav/port_tarkon/storage) -"Gd" = ( -/obj/structure/table/reinforced, -/obj/machinery/reagentgrinder{ - desc = "Used to grind things up into raw materials and liquids."; - pixel_y = 5 - }, -/obj/machinery/light/small/directional/west, -/turf/open/floor/iron/cafeteria, -/area/ruin/space/has_grav/port_tarkon/kitchen) -"Gf" = ( -/obj/structure/table/wood, -/obj/machinery/light/dim/directional/east, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/airless, -/area/ruin/space/has_grav/port_tarkon/observ) -"Gk" = ( -/obj/machinery/door/airlock/multi_tile/public/glass{ - dir = 8 - }, -/obj/effect/turf_decal/tile/blue/half, -/obj/machinery/door/firedoor/solid, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/comms) -"Gl" = ( -/obj/structure/table/wood, -/obj/item/paper/crumpled/fluff/tarkon, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/airless, -/area/ruin/space/has_grav/port_tarkon/observ) -"Gp" = ( -/obj/machinery/light/small/directional/north, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden, -/turf/open/floor/engine/vacuum, -/area/ruin/space/has_grav/port_tarkon/atmos) -"Gs" = ( -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/garden) -"Gt" = ( -/obj/machinery/hydroponics/soil, -/obj/machinery/firealarm/directional/south{ - pixel_y = -31 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/grass, -/area/ruin/space/has_grav/port_tarkon/garden) -"Gv" = ( -/obj/machinery/light/dim/directional/north, -/obj/effect/turf_decal/tile/purple/half{ - dir = 1 - }, -/obj/structure/table/reinforced, -/obj/item/circuitboard/machine/reagentgrinder, -/obj/structure/frame/machine, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/dark/airless, -/area/ruin/space/has_grav/port_tarkon/developement) -"Gx" = ( -/obj/machinery/door/airlock/maintenance_hatch, -/turf/open/floor/plating, -/area/ruin/space/has_grav/port_tarkon/forehall) -"Gy" = ( -/obj/effect/turf_decal/stripes/asteroid/line{ - dir = 8 - }, -/turf/open/misc/asteroid/airless, -/area/solars/tarkon) -"GB" = ( -/obj/effect/turf_decal/vg_decals/atmos/nitrous_oxide, -/obj/machinery/light/small/directional/east, -/obj/machinery/air_sensor/tarkon/nitrous_tank{ - pixel_x = 26 - }, -/turf/open/floor/engine/n2o, -/area/ruin/space/has_grav/port_tarkon/atmos) -"GD" = ( -/mob/living/basic/carp/mega, -/obj/effect/decal/cleanable/dirt, -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, -/turf/open/floor/iron/dark/airless, -/area/ruin/space/has_grav/port_tarkon/developement) -"GE" = ( -/obj/effect/spawner/structure/window/reinforced/plasma, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden{ - dir = 8 - }, -/turf/open/floor/plating, -/area/ruin/space/has_grav/port_tarkon/atmos) -"GF" = ( -/obj/structure/bed, -/obj/effect/turf_decal/tile/blue/anticorner{ - dir = 1 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/trauma) -"GL" = ( -/obj/machinery/airalarm/directional/north, -/obj/effect/mapping_helpers/airalarm/all_access, -/turf/closed/mineral/random, -/area/ruin/space/has_grav/port_tarkon/porthall) -"GM" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/centerhall) -"GR" = ( -/obj/machinery/door/airlock/engineering{ - name = "Backup Generator Room" - }, -/obj/structure/cable, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/power1) -"GS" = ( -/obj/machinery/hydroponics/soil, -/obj/machinery/light/small/directional/south, -/obj/machinery/light_switch/directional/south, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/grass, -/area/ruin/space/has_grav/port_tarkon/garden) -"GU" = ( -/obj/effect/turf_decal/tile/purple/half{ - dir = 4 - }, -/obj/structure/window/reinforced/spawner/directional/north, -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ - dir = 1 - }, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/port_tarkon/developement) -"GW" = ( -/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/tile/neutral/anticorner{ - dir = 4 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/centerhall) -"GX" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/airless, -/area/ruin/space/has_grav/port_tarkon/atmos) -"GY" = ( -/turf/closed/wall, -/area/ruin/space/has_grav/port_tarkon/atmos) -"Ha" = ( -/obj/machinery/power/port_gen/pacman/super{ - name = "\improper emergency power generator"; - time_per_sheet = 40 - }, -/obj/effect/decal/cleanable/greenglow, -/turf/open/floor/plating, -/area/ruin/space/has_grav/port_tarkon/power1) -"Hb" = ( -/obj/effect/turf_decal/stripes/asteroid/line{ - dir = 10 - }, -/turf/open/misc/asteroid/airless, -/area/solars/tarkon) -"Hf" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/cable, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/secoff) -"Hg" = ( -/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, -/area/ruin/space/has_grav/port_tarkon/starboardhall) -"Hi" = ( -/obj/structure/table/wood, -/obj/item/flashlight/lamp/green, -/obj/item/clothing/neck/mantle, -/turf/open/floor/carpet/red, -/area/ruin/space/has_grav/port_tarkon/dorms) -"Hj" = ( -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/airless, -/area/ruin/space/has_grav/port_tarkon/porthall) -"Hk" = ( -/obj/structure/cable, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/secoff) -"Hn" = ( -/obj/effect/turf_decal/tile/neutral/half{ - dir = 4 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/centerhall) -"Ho" = ( -/obj/effect/turf_decal/stripes/asteroid/corner{ - dir = 1 - }, -/turf/open/misc/asteroid/airless, -/area/solars/tarkon) -"Hq" = ( -/turf/open/floor/plating/airless, -/area/ruin/space/has_grav/port_tarkon/forehall) -"Hy" = ( -/turf/closed/wall, -/area/ruin/space/has_grav/port_tarkon/mining) -"HB" = ( -/obj/structure/table/reinforced, -/obj/machinery/recharger, -/obj/effect/turf_decal/tile/red/anticorner{ - dir = 1 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/secoff) -"HF" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/toolstorage) -"HH" = ( -/obj/effect/turf_decal/sand/plating, -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ - dir = 1 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/mining) -"HP" = ( -/mob/living/basic/carp, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/airless, -/area/ruin/space/has_grav/port_tarkon/observ) -"HQ" = ( -/obj/machinery/door/airlock/research, -/obj/machinery/door/firedoor/solid, -/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/tarkon/general, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/developement) -"HS" = ( -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/power1) -"HU" = ( -/obj/machinery/atmospherics/components/unary/portables_connector/visible{ - dir = 8 - }, -/obj/effect/turf_decal/tile/neutral/fourcorners, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/airless, -/area/ruin/space/has_grav/port_tarkon/atmos) -"HW" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/cable, -/obj/effect/decal/cleanable/glass, -/turf/open/floor/iron/airless, -/area/ruin/space/has_grav/port_tarkon/observ) -"HX" = ( -/obj/structure/cable, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/trauma) -"HY" = ( -/obj/effect/turf_decal/tile/purple/anticorner{ - dir = 4 - }, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/port_tarkon/developement) -"Ic" = ( -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ - dir = 4 - }, -/obj/structure/cable, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/dark/airless, -/area/ruin/space/has_grav/port_tarkon/developement) -"Id" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/dark/airless, -/area/ruin/space/has_grav/port_tarkon/developement) -"Ie" = ( -/obj/structure/chair/office{ - dir = 8 - }, -/obj/effect/turf_decal/tile/blue{ - dir = 8 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/port_tarkon/comms) -"If" = ( -/obj/item/solar_assembly, -/obj/structure/cable, -/obj/effect/turf_decal/stripes/asteroid/line{ - dir = 1 - }, -/turf/open/misc/asteroid/airless, -/area/solars/tarkon) -"Ih" = ( -/obj/machinery/door/airlock/multi_tile/public/glass, -/obj/machinery/door/firedoor/solid/closed, -/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/ruin/space/has_grav/port_tarkon/storage) -"Ij" = ( -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ - dir = 1 - }, -/turf/open/floor/carpet/cyan, -/area/ruin/space/has_grav/port_tarkon/dorms) -"Ik" = ( -/obj/effect/turf_decal/tile/purple/anticorner{ - dir = 1 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/dark/airless, -/area/ruin/space/has_grav/port_tarkon/developement) -"Im" = ( -/obj/structure/bed/pod{ - dir = 1 - }, -/obj/item/bedsheet/random{ - dir = 1 - }, -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ - dir = 4 - }, -/obj/machinery/button/door/directional/north{ - id = "ptdorm2"; - name = "Door Lock Control"; - normaldoorcontrol = 1; - specialfunctions = 4 - }, -/turf/open/floor/carpet/cyan, -/area/ruin/space/has_grav/port_tarkon/dorms) -"Io" = ( -/obj/effect/decal/cleanable/dirt, -/mob/living/basic/carp, -/obj/effect/turf_decal/caution/stand_clear, -/obj/effect/turf_decal/tile/brown/half, -/turf/open/floor/iron/airless, -/area/ruin/space/has_grav/port_tarkon/storage) -"Iw" = ( -/turf/closed/wall, -/area/ruin/space/has_grav/port_tarkon/power1) -"Ix" = ( -/obj/effect/turf_decal/trimline/yellow/filled/warning, -/obj/effect/turf_decal/trimline/yellow/filled/warning{ - dir = 4 - }, -/obj/effect/decal/cleanable/dirt, -/obj/machinery/door/poddoor/shutters/preopen{ - id = "tarkonouter"; - name = "External Bay Shutters" - }, -/turf/open/floor/iron/airless, -/area/ruin/space/has_grav/port_tarkon/storage) -"ID" = ( -/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/neutral, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/centerhall) -"IE" = ( -/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/neutral/anticorner{ - dir = 8 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/centerhall) -"IF" = ( -/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, -/area/ruin/space/has_grav/port_tarkon/secoff) -"IG" = ( -/obj/structure/table/reinforced, -/obj/item/clothing/gloves/color/yellow, -/obj/item/paper/fluff/ruins/oldstation/generator_manual, -/obj/item/wirecutters, -/obj/item/wrench, -/obj/item/circuitboard/machine/rtg, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/airless, -/area/ruin/space/has_grav/port_tarkon/atmos) -"IH" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/structure/curtain, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/trauma) -"IK" = ( -/obj/structure/closet, -/obj/item/pickaxe/mini, -/obj/item/storage/backpack/duffelbag, -/obj/item/clothing/mask/gas/explorer, -/obj/item/clothing/shoes/workboots/mining, -/obj/item/gps/mining, -/obj/item/storage/bag/ore, -/obj/item/storage/belt/mining, -/obj/effect/turf_decal/tile/brown/anticorner, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/mining) -"IL" = ( -/obj/structure/cable, -/obj/effect/turf_decal/stripes/asteroid/line{ - dir = 1 - }, -/turf/open/misc/asteroid/airless, -/area/solars/tarkon) -"IO" = ( -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ - dir = 1 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/power1) -"IQ" = ( -/obj/effect/turf_decal/tile/neutral/anticorner{ - dir = 4 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/centerhall) -"IU" = ( -/obj/structure/closet/crate/bin, -/turf/open/floor/iron/cafeteria, -/area/ruin/space/has_grav/port_tarkon/kitchen) -"IW" = ( -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ - dir = 4 - }, -/obj/structure/curtain, -/obj/structure/window/reinforced/tinted/spawner/directional/south, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/trauma) -"IY" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/cable, -/obj/machinery/power/apc/auto_name/directional/west, -/obj/effect/mapping_helpers/apc/no_charge, -/obj/effect/mapping_helpers/apc/unlocked, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/airless, -/area/ruin/space/has_grav/port_tarkon/porthall) -"Ji" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/airalarm/directional/east, -/obj/effect/mapping_helpers/airalarm/all_access, -/turf/open/floor/carpet/purple, -/area/ruin/space/has_grav/port_tarkon/dorms) -"Jj" = ( -/obj/machinery/power/smes/engineering{ - charge = 0 - }, -/obj/structure/cable, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/power1) -"Jl" = ( -/obj/structure/closet, -/obj/effect/decal/cleanable/dirt, -/obj/item/clothing/under/rank/security/nova/utility/redsec, -/obj/item/clothing/under/rank/security/nova/utility, -/obj/item/clothing/shoes/workboots/mining, -/obj/item/clothing/shoes/winterboots, -/obj/item/clothing/shoes/jackboots, -/obj/item/storage/backpack/duffelbag/sec, -/obj/item/storage/backpack/duffelbag/sec/redsec, -/obj/item/storage/backpack/satchel/sec/redsec, -/obj/item/storage/backpack/security/redsec, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon) -"Jm" = ( -/obj/effect/decal/cleanable/dirt, -/obj/machinery/light/dim/directional/west, -/obj/effect/turf_decal/tile/brown/half{ - dir = 8 - }, -/turf/open/floor/iron/airless, -/area/ruin/space/has_grav/port_tarkon/storage) -"Jp" = ( -/obj/item/crowbar, -/obj/item/crowbar, -/obj/item/crowbar, -/obj/item/crowbar, -/obj/structure/table, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon) -"Jq" = ( -/obj/machinery/cryopod{ - dir = 1 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/centerhall) -"Ju" = ( -/obj/structure/table/reinforced, -/obj/machinery/microwave{ - desc = "Cooks and boils stuff, somehow."; - pixel_x = -3; - pixel_y = 5 - }, -/turf/open/floor/iron/cafeteria, -/area/ruin/space/has_grav/port_tarkon/kitchen) -"Jv" = ( -/turf/closed/wall, -/area/ruin/space/has_grav/port_tarkon/dorms) -"Jw" = ( -/obj/structure/ore_box, -/obj/effect/turf_decal/tile/brown/anticorner{ - dir = 8 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/mining) -"Jx" = ( -/obj/machinery/vending/cola, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/afthall) -"Jz" = ( -/obj/structure/frame/machine, -/obj/item/circuitboard/machine/destructive_analyzer, -/obj/effect/turf_decal/tile/purple/half{ - dir = 4 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/dark/airless, -/area/ruin/space/has_grav/port_tarkon/developement) -"JE" = ( -/obj/machinery/airalarm/directional/north, -/obj/machinery/light/directional/north, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/cable, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/starboardhall) -"JF" = ( -/obj/effect/turf_decal/tile/yellow/anticorner{ - dir = 4 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/toolstorage) -"JI" = ( -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/cargo) -"JL" = ( -/obj/structure/table/reinforced, -/obj/machinery/light/dim/directional/west, -/obj/item/paper_bin, -/obj/effect/turf_decal/tile/brown/half{ - dir = 8 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/cargo) -"JN" = ( -/obj/machinery/door/airlock/external/ruin{ - name = "Engineering External Access" - }, -/obj/effect/mapping_helpers/airlock/cyclelink_helper, -/obj/structure/cable, -/obj/effect/mapping_helpers/airlock/access/all/tarkon/general, -/turf/open/floor/plating, -/area/ruin/space/has_grav/port_tarkon/power1) -"JO" = ( -/obj/structure/bed/pod, -/obj/item/bedsheet/random, -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ - dir = 8 - }, -/obj/machinery/button/door/directional/south{ - id = "ptdorm3"; - name = "Door Lock Control"; - normaldoorcontrol = 1; - specialfunctions = 4 - }, -/turf/open/floor/carpet/black, -/area/ruin/space/has_grav/port_tarkon/dorms) -"JQ" = ( -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ - dir = 8 - }, -/obj/machinery/light/small/directional/east, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/secoff) -"JW" = ( -/obj/machinery/door/airlock/public/glass{ - name = "Aft Primary Hallway" - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/cable, -/obj/machinery/door/firedoor/solid, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/afthall) -"JX" = ( -/obj/structure/table, -/obj/item/paper/crumpled, -/obj/effect/turf_decal/tile/blue/anticorner, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/port_tarkon/comms) -"JY" = ( -/obj/structure/window/reinforced/tinted/spawner/directional/south, -/obj/structure/closet/secure_closet/medical2{ - req_access = list("medical") - }, -/obj/effect/turf_decal/tile/blue/half{ - dir = 4 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/trauma) -"Kc" = ( -/obj/machinery/computer{ - desc = "A computer long since rendered non-functional due to lack of maintenance. Spitting out error messages."; - dir = 1; - name = "Broken Computer" - }, -/obj/effect/turf_decal/tile/blue/anticorner{ - dir = 8 - }, -/obj/item/paper/fluff/ruins/tarkon/driverpitch, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/port_tarkon/comms) -"Ke" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 4 - }, -/obj/effect/turf_decal/stripes/line{ - dir = 8 - }, -/obj/machinery/door/poddoor/incinerator_atmos_main, -/turf/open/floor/engine/vacuum, -/area/ruin/space/has_grav/port_tarkon/atmos) -"Ki" = ( -/turf/closed/wall, -/area/ruin/space/has_grav/port_tarkon/centerhall) -"Kj" = ( -/obj/effect/turf_decal/tile/purple/half, -/obj/machinery/airalarm/directional/south, -/obj/effect/mapping_helpers/airalarm/all_access, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/port_tarkon/developement) -"Kk" = ( -/obj/machinery/door/airlock/wood/glass, -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/door/firedoor/solid, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/starboardhall) -"Kl" = ( -/obj/machinery/light/directional/north, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/centerhall) -"Kr" = ( -/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 = 8 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/mining) -"Ks" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/door/firedoor/solid, -/turf/open/floor/plating/airless, -/area/ruin/space/has_grav/port_tarkon/forehall) -"KA" = ( -/obj/structure/table/reinforced, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/centerhall) -"KB" = ( -/obj/machinery/door/firedoor/solid, -/obj/machinery/door/airlock/mining/glass, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/mining) -"KE" = ( -/obj/structure/table/reinforced, -/obj/item/flashlight, -/obj/effect/turf_decal/tile/yellow/anticorner{ - dir = 1 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/toolstorage) -"KG" = ( -/obj/structure/sign/warning/docking, -/turf/closed/wall/r_wall/rust, -/area/ruin/space/has_grav/port_tarkon/mining) -"KJ" = ( -/obj/structure/table, -/obj/machinery/firealarm/directional/west, -/obj/machinery/light/dim/directional/west, -/obj/effect/turf_decal/tile/blue/half{ - dir = 8 - }, -/obj/item/defibrillator, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/trauma) -"KL" = ( -/obj/effect/turf_decal/trimline/yellow/filled/warning{ - dir = 4 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/airless, -/area/ruin/space/has_grav/port_tarkon/storage) -"KM" = ( -/obj/machinery/button/ignition/incinerator/tarkon, -/turf/closed/wall/r_wall, -/area/ruin/space/has_grav/port_tarkon/atmos) -"KO" = ( -/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, -/area/ruin/space/has_grav/port_tarkon/garden) -"KP" = ( -/obj/structure/table/reinforced, -/obj/item/storage/box/stockparts/basic, -/obj/item/storage/toolbox/mechanical, -/obj/effect/turf_decal/tile/purple/half{ - dir = 1 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/dark/airless, -/area/ruin/space/has_grav/port_tarkon/developement) -"KQ" = ( -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/airless, -/area/ruin/space/has_grav/port_tarkon/forehall) -"KS" = ( -/obj/structure/table/wood, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/airless, -/area/ruin/space/has_grav/port_tarkon/observ) -"KV" = ( -/obj/structure/window/reinforced/tinted/spawner/directional/north, -/obj/machinery/door/window/left/directional/east{ - opacity = 1 - }, -/obj/machinery/shower/directional/east, -/turf/open/floor/iron/white, -/area/ruin/space/has_grav/port_tarkon/centerhall) -"KW" = ( -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/airless, -/area/ruin/space/has_grav/port_tarkon/forehall) -"KX" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/structure/cable, -/obj/effect/decal/cleanable/dirt, -/mob/living/basic/carp, -/turf/open/floor/iron/dark/airless, -/area/ruin/space/has_grav/port_tarkon/developement) -"KZ" = ( -/obj/structure/table/reinforced, -/obj/item/reagent_containers/cup/beaker/large, -/obj/item/reagent_containers/cup/beaker/large, -/turf/open/floor/iron/cafeteria, -/area/ruin/space/has_grav/port_tarkon/kitchen) -"La" = ( -/obj/structure/chair/sofa/corp{ - dir = 1 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/airless, -/area/ruin/space/has_grav/port_tarkon/observ) -"Ld" = ( -/obj/machinery/door/airlock/public/glass/incinerator/tarkon_exterior, -/obj/effect/mapping_helpers/airlock/locked, -/obj/effect/mapping_helpers/airlock/cyclelink_helper{ - dir = 1 - }, -/obj/effect/turf_decal/stripes, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/visible/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/dark/visible, -/turf/open/floor/engine/vacuum, -/area/ruin/space/has_grav/port_tarkon/atmos) -"Le" = ( -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/secoff) -"Lf" = ( -/obj/effect/turf_decal/tile/brown/half, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/cargo) -"Lo" = ( -/obj/effect/turf_decal/trimline/yellow/filled/warning, -/obj/effect/decal/cleanable/dirt, -/obj/machinery/door/poddoor/shutters/preopen{ - id = "tarkonouter"; - name = "External Bay Shutters" - }, -/turf/open/floor/iron/airless, -/area/ruin/space/has_grav/port_tarkon/storage) -"Lp" = ( -/obj/structure/closet/emcloset, -/obj/effect/turf_decal/tile/brown/half{ - dir = 1 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/mining) -"Lr" = ( -/obj/machinery/door/firedoor/solid, -/obj/machinery/light_switch/directional/east, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/trauma) -"Ls" = ( -/obj/machinery/iv_drip, -/obj/structure/window/reinforced/tinted/spawner/directional/south, -/obj/machinery/light/small/directional/west, -/obj/effect/turf_decal/tile/blue/half{ - dir = 8 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/trauma) -"LA" = ( -/obj/structure/closet, -/obj/effect/decal/cleanable/dirt, -/obj/item/clothing/under/rank/rnd/scientist/nova/utility, -/obj/item/clothing/under/rank/rnd/roboticist/nova/sleek, -/obj/item/clothing/shoes/jackboots, -/obj/item/clothing/shoes/workboots/mining, -/obj/item/clothing/shoes/winterboots, -/obj/item/storage/backpack/duffelbag/science, -/obj/item/storage/backpack/duffelbag/science/robo, -/obj/item/storage/backpack/satchel/science, -/obj/item/storage/backpack/satchel/science/robo, -/obj/item/storage/backpack/science, -/obj/item/storage/backpack/science/robo, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon) -"LC" = ( -/obj/effect/decal/cleanable/dirt, -/obj/structure/closet/crate/secure/engineering, -/obj/item/rcd_ammo, -/obj/item/rcd_ammo, -/obj/item/rcd_ammo, -/obj/item/construction/rcd/arcd/mattermanipulator, -/turf/open/floor/iron/airless, -/area/ruin/space/has_grav/port_tarkon/storage) -"LD" = ( -/obj/effect/turf_decal/tile/brown/half{ - dir = 1 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/cargo) -"LG" = ( -/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/tile/neutral{ - dir = 4 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/centerhall) -"LH" = ( -/obj/machinery/firealarm/directional/north, -/mob/living/basic/carp, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/airless, -/area/ruin/space/has_grav/port_tarkon/forehall) -"LJ" = ( -/turf/open/misc/asteroid/airless, -/area/solars/tarkon) -"LN" = ( -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/afthall) -"LQ" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/mining) -"LS" = ( -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/starboardhall) -"LW" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/airless, -/area/ruin/space/has_grav/port_tarkon/observ) -"LY" = ( -/obj/structure/table/reinforced, -/obj/item/book/manual/wiki/security_space_law, -/obj/item/pen/fountain, -/obj/machinery/firealarm/directional/north, -/obj/effect/turf_decal/tile/red/half{ - dir = 1 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/secoff) -"Me" = ( -/obj/effect/turf_decal/stripes{ - dir = 1 - }, -/obj/machinery/light/dim/directional/east, -/obj/structure/window/reinforced/spawner/directional/north, -/obj/machinery/power/smes, -/obj/structure/cable, -/turf/open/floor/iron/dark/airless, -/area/ruin/space/has_grav/port_tarkon/atmos) -"Mp" = ( -/obj/machinery/airalarm/directional/west, -/obj/effect/mapping_helpers/airalarm/all_access, -/obj/effect/turf_decal/tile/neutral/half{ - dir = 8 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/centerhall) -"Mr" = ( -/obj/structure/cable, -/obj/effect/turf_decal/sand/plating, -/turf/open/floor/plating/airless, -/area/solars/tarkon) -"Mt" = ( -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ - dir = 8 - }, -/obj/structure/curtain, -/obj/structure/window/reinforced/tinted/spawner/directional/south, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/trauma) -"Mz" = ( -/obj/machinery/atmospherics/components/tank/air, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/centerhall) -"MB" = ( -/obj/effect/turf_decal/tile/neutral/anticorner{ - dir = 8 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/centerhall) -"MC" = ( -/obj/machinery/door/airlock{ - name = "Bathroom" - }, -/obj/machinery/door/firedoor/solid, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/centerhall) -"MD" = ( -/obj/machinery/atmospherics/miner/plasma, -/turf/open/floor/engine/plasma, -/area/ruin/space/has_grav/port_tarkon/atmos) -"ME" = ( -/obj/effect/turf_decal/tile/purple/anticorner, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/port_tarkon/developement) -"MF" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/starboardhall) -"MG" = ( -/obj/effect/turf_decal/stripes/asteroid/corner{ - dir = 4 - }, -/turf/open/misc/asteroid/airless, -/area/solars/tarkon) -"MJ" = ( -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/airless, -/area/ruin/space/has_grav/port_tarkon/observ) -"MO" = ( -/obj/structure/safe/floor, -/obj/item/areaeditor/blueprints/tarkon, -/obj/item/tape/ruins/tarkon/safe, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/power1) -"MP" = ( -/obj/effect/decal/cleanable/dirt, -/obj/machinery/hydroponics/soil, -/turf/open/floor/grass, -/area/ruin/space/has_grav/port_tarkon/garden) -"MS" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/glass, -/turf/open/floor/plating/airless, -/area/ruin/space/has_grav/port_tarkon/porthall) -"MU" = ( -/turf/open/floor/engine/vacuum, -/area/ruin/space/has_grav/port_tarkon/atmos) -"MV" = ( -/obj/effect/decal/cleanable/dirt, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/firealarm/directional/north, -/obj/effect/turf_decal/tile/brown/half{ - dir = 1 - }, -/turf/open/floor/iron/airless, -/area/ruin/space/has_grav/port_tarkon/storage) -"MY" = ( -/obj/effect/turf_decal/tile/brown/anticorner, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/starboardhall) -"Nc" = ( -/turf/closed/mineral/random/high_chance, -/area/ruin/space/has_grav/port_tarkon/developement) -"Ng" = ( -/obj/structure/tank_dispenser, -/obj/effect/turf_decal/tile/brown/anticorner{ - dir = 1 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/mining) -"Ni" = ( -/obj/structure/closet/crate/bin, -/obj/effect/turf_decal/tile/purple/half, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/dark/airless, -/area/ruin/space/has_grav/port_tarkon/developement) -"Nj" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/cable, -/obj/machinery/door/firedoor/solid/closed, -/obj/machinery/door/airlock/public/glass{ - name = "Fore Primary Hallway" - }, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/forehall) -"Nl" = ( -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ - dir = 4 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/mining) -"Nq" = ( -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ - dir = 4 - }, -/obj/structure/table/rolling, -/obj/item/surgery_tray/full, -/obj/item/clothing/gloves/latex{ - pixel_y = 10 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/trauma) -"Nr" = ( -/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, -/area/ruin/space/has_grav/port_tarkon/forehall) -"Nt" = ( -/obj/machinery/seed_extractor, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/garden) -"Nw" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/cable, -/obj/machinery/light_switch/directional/west, -/obj/effect/turf_decal/tile/red/anticorner{ - dir = 8 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/secoff) -"Nx" = ( -/obj/structure/table/reinforced, -/obj/item/assembly/flash, -/obj/item/assembly/flash, -/obj/effect/turf_decal/tile/red/half{ - dir = 4 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/secoff) -"Nz" = ( -/obj/structure/closet/crate, -/obj/item/stack/sheet/iron/twenty, -/obj/item/stack/sheet/iron/fifty, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/plating, -/area/ruin/space/has_grav/port_tarkon/forehall) -"NC" = ( -/obj/effect/decal/cleanable/glass, -/turf/open/floor/plating/airless, -/area/ruin/space/has_grav/port_tarkon/atmos) -"NH" = ( -/obj/structure/chair/sofa/corp/right{ - dir = 8 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/airless, -/area/ruin/space/has_grav/port_tarkon/observ) -"NK" = ( -/obj/effect/spawner/structure/window/reinforced/no_firelock, -/obj/machinery/atmospherics/pipe/layer_manifold/dark/hidden{ - dir = 4 - }, -/turf/open/floor/plating, -/area/ruin/space/has_grav/port_tarkon/atmos) -"NM" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/turf_decal/tile/neutral/anticorner{ - dir = 1 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/centerhall) -"NN" = ( -/obj/structure/bed/maint, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/secoff) -"NX" = ( -/obj/structure/rack, -/obj/item/ammo_box/magazine/c35sol_pistol, -/obj/item/ammo_box/magazine/c35sol_pistol, -/obj/item/ammo_box/magazine/c35sol_pistol, -/obj/item/ammo_box/magazine/c35sol_pistol, -/obj/item/ammo_box/magazine/c35sol_pistol, -/obj/item/ammo_box/magazine/c35sol_pistol, -/obj/item/gun/ballistic/automatic/m6pdw, -/obj/item/gun/ballistic/automatic/m6pdw, -/obj/effect/turf_decal/tile/red/half{ - dir = 1 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/secoff) -"Oa" = ( -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/secoff) -"Ob" = ( -/obj/machinery/computer/turbine_computer{ - dir = 1; - mapping_id = "tarkon_turbine" - }, -/obj/structure/cable, -/obj/machinery/light/dim/directional/south, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/engine/vacuum, -/area/ruin/space/has_grav/port_tarkon/atmos) -"Oi" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/airless, -/area/ruin/space/has_grav/port_tarkon/observ) -"Oj" = ( -/obj/structure/table/wood, -/obj/item/flashlight/lamp/bananalamp, -/obj/effect/spawner/random/clothing/beret_or_rabbitears, -/turf/open/floor/carpet/purple, -/area/ruin/space/has_grav/port_tarkon/dorms) -"On" = ( -/obj/effect/turf_decal/tile/purple/half{ - dir = 8 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/dark/airless, -/area/ruin/space/has_grav/port_tarkon/developement) -"Oo" = ( -/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/delivery/blue, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/centerhall) -"Os" = ( -/obj/effect/decal/cleanable/dirt, -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ - dir = 4 - }, -/obj/effect/turf_decal/tile/brown/half, -/turf/open/floor/iron/airless, -/area/ruin/space/has_grav/port_tarkon/storage) -"Ox" = ( -/obj/structure/table/wood/fancy/blue, -/obj/effect/turf_decal/tile/blue/half{ - dir = 1 - }, -/obj/item/dice, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/port_tarkon/comms) -"OB" = ( -/obj/machinery/vending/dinnerware, -/turf/open/floor/iron/cafeteria, -/area/ruin/space/has_grav/port_tarkon/kitchen) -"OD" = ( -/obj/machinery/light/dim/directional/north, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/airless, -/area/ruin/space/has_grav/port_tarkon/atmos) -"OG" = ( -/obj/machinery/space_heater, -/turf/open/floor/plating, -/area/ruin/space/has_grav/port_tarkon/afthall) -"OI" = ( -/obj/machinery/light/dim/directional/south, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/cable, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/airless, -/area/ruin/space/has_grav/port_tarkon/porthall) -"OM" = ( -/turf/closed/wall/r_wall, -/area/ruin/space/has_grav/port_tarkon/comms) -"OR" = ( -/obj/structure/cable, -/obj/effect/turf_decal/stripes/asteroid/line{ - dir = 6 - }, -/turf/open/misc/asteroid/airless, -/area/solars/tarkon) -"OS" = ( -/obj/structure/cable, -/obj/item/solar_assembly, -/obj/effect/turf_decal/sand/plating, -/turf/open/floor/plating/airless, -/area/solars/tarkon) -"OT" = ( -/obj/effect/turf_decal/tile/yellow, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/toolstorage) -"OZ" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/port_tarkon/developement) -"Pa" = ( -/obj/structure/bed/double/pod, -/obj/item/bedsheet/random/double, -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ - dir = 8 - }, -/obj/item/fancy_pillow, -/obj/item/fancy_pillow, -/obj/machinery/button/door/directional/north{ - id = "ptdorm4"; - name = "Door Lock Control"; - normaldoorcontrol = 1; - specialfunctions = 4 - }, -/turf/open/floor/carpet/red, -/area/ruin/space/has_grav/port_tarkon/dorms) -"Pc" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/cable, -/obj/machinery/power/apc/auto_name/directional/south, -/obj/effect/mapping_helpers/apc/no_charge, -/obj/effect/mapping_helpers/apc/unlocked, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/airless, -/area/ruin/space/has_grav/port_tarkon/forehall) -"Pd" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/plating/airless, -/area/ruin/space/has_grav/port_tarkon/porthall) -"Pf" = ( -/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/purple/half, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/dark/airless, -/area/ruin/space/has_grav/port_tarkon/developement) -"Ph" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/cable, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/airless, -/area/ruin/space/has_grav/port_tarkon/observ) -"Pl" = ( -/obj/structure/cable, -/obj/effect/turf_decal/stripes/asteroid/line{ - dir = 10 - }, -/turf/open/misc/asteroid/airless, -/area/solars/tarkon) -"Pp" = ( -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/mining) -"Pq" = ( -/obj/machinery/door/firedoor/solid/closed, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/storage) -"Ps" = ( -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ - dir = 4 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/starboardhall) -"Px" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/door/firedoor/solid, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/garden) -"Pz" = ( -/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, -/area/ruin/space/has_grav/port_tarkon/afthall) -"PA" = ( -/obj/effect/decal/cleanable/dirt, -/obj/item/stack/rods, -/turf/open/floor/plating/airless, -/area/ruin/space/has_grav/port_tarkon/atmos) -"PB" = ( -/obj/machinery/atmospherics/components/unary/portables_connector/visible{ - dir = 4 - }, -/obj/effect/turf_decal/tile/dark/fourcorners, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/airless, -/area/ruin/space/has_grav/port_tarkon/atmos) -"PE" = ( -/obj/structure/chair/office{ - dir = 1 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/port_tarkon/comms) -"PF" = ( -/obj/machinery/door/firedoor/solid, -/turf/open/floor/plating/airless, -/area/ruin/space/has_grav/port_tarkon/forehall) -"PK" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/cable, -/obj/machinery/door/firedoor/solid, -/obj/machinery/door/airlock/atmos/glass, -/obj/effect/mapping_helpers/airlock/access/all/tarkon/general, -/turf/open/floor/plating/airless, -/area/ruin/space/has_grav/port_tarkon/atmos) -"PM" = ( -/obj/effect/turf_decal/tile/purple/half{ - dir = 1 - }, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/port_tarkon/developement) -"PO" = ( -/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/tile/neutral/half{ - dir = 1 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/centerhall) -"PR" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/generic, -/turf/open/floor/iron/airless, -/area/ruin/space/has_grav/port_tarkon/storage) -"PS" = ( -/obj/machinery/computer{ - desc = "A computer long since rendered non-functional due to lack of maintenance. Spitting out error messages."; - dir = 8; - name = "Financing Console" - }, -/obj/effect/turf_decal/tile/brown/anticorner{ - dir = 4 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/cargo) -"PT" = ( -/obj/structure/rack, -/obj/item/clothing/suit/armor/vest, -/obj/item/clothing/suit/armor/vest, -/obj/machinery/airalarm/directional/north, -/obj/effect/turf_decal/tile/red/half{ - dir = 1 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/secoff) -"PZ" = ( -/obj/effect/turf_decal/tile/neutral/half, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/centerhall) -"Qg" = ( -/obj/effect/spawner/structure/window/reinforced/no_firelock, -/obj/machinery/atmospherics/pipe/layer_manifold/pink/hidden{ - dir = 4 - }, -/turf/open/floor/plating, -/area/ruin/space/has_grav/port_tarkon/atmos) -"Qh" = ( -/obj/structure/chair/office{ - dir = 1 - }, -/obj/effect/turf_decal/tile/brown/half{ - dir = 1 - }, -/obj/effect/decal/cleanable/dirt, -/obj/effect/mob_spawn/ghost_role/human/tarkon{ - dir = 1 - }, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/cargo) -"Qk" = ( -/obj/machinery/atmospherics/components/unary/outlet_injector/monitored/plasma_input/tarkon{ - dir = 8 - }, -/turf/open/floor/engine/plasma, -/area/ruin/space/has_grav/port_tarkon/atmos) -"Qn" = ( -/obj/effect/turf_decal/stripes/asteroid/line, -/turf/open/misc/asteroid/airless, -/area/solars/tarkon) -"Qo" = ( -/obj/effect/turf_decal/delivery/blue, -/obj/effect/turf_decal/tile/neutral/half, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/centerhall) -"Qp" = ( -/obj/machinery/light/warm/directional/south, -/obj/effect/turf_decal/tile/neutral/anticorner, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/centerhall) -"Qs" = ( -/obj/machinery/door/airlock/public/glass{ - name = "Port Primary Hallway" - }, -/obj/machinery/door/firedoor/solid/closed, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/porthall) -"Qu" = ( -/obj/structure/window/reinforced/spawner/directional/north, -/obj/effect/turf_decal/tile/purple/fourcorners, -/obj/structure/cable, -/obj/machinery/computer/atmos_control/tarkon/plasma_tank{ - dir = 8 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/airless, -/area/ruin/space/has_grav/port_tarkon/atmos) -"Qx" = ( -/obj/effect/spawner/structure/window/reinforced/no_firelock, -/turf/open/floor/plating, -/area/ruin/space/has_grav/port_tarkon/power1) -"Qy" = ( -/obj/machinery/firealarm/directional/west, -/obj/machinery/suit_storage_unit/industrial/hauler, -/obj/effect/turf_decal/tile/brown/half{ - dir = 8 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/cargo) -"QA" = ( -/obj/machinery/door/window/left/directional/north, -/obj/machinery/door/window/left/directional/south, -/obj/structure/table/reinforced, -/obj/machinery/door/firedoor/solid, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/cargo) -"QB" = ( -/obj/structure/filingcabinet, -/obj/effect/turf_decal/tile/brown/anticorner{ - dir = 8 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/cargo) -"QC" = ( -/turf/closed/wall/r_wall, -/area/ruin/space/has_grav/port_tarkon/cargo) -"QH" = ( -/obj/machinery/atmospherics/components/unary/outlet_injector/monitored/air_input/tarkon{ - dir = 4 - }, -/turf/open/floor/engine/vacuum, -/area/ruin/space/has_grav/port_tarkon/atmos) -"QK" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/mob_spawn/ghost_role/human/tarkon/sci{ - dir = 1 - }, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon) -"QL" = ( -/obj/structure/cable, -/obj/machinery/power/apc/auto_name/directional/east, -/obj/effect/mapping_helpers/apc/no_charge, -/obj/effect/mapping_helpers/apc/unlocked, -/mob/living/basic/carp, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/airless, -/area/ruin/space/has_grav/port_tarkon/observ) -"QP" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/general, -/obj/machinery/meter, -/obj/structure/cable, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/centerhall) -"QW" = ( -/obj/structure/cable, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/engine/vacuum, -/area/ruin/space/has_grav/port_tarkon/atmos) -"QX" = ( -/obj/effect/turf_decal/tile/purple/half{ - dir = 1 - }, -/obj/structure/closet/crate/secure/science, -/obj/item/raw_anomaly_core/random, -/obj/item/raw_anomaly_core/random, -/obj/item/raw_anomaly_core/random, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/dark/airless, -/area/ruin/space/has_grav/port_tarkon/developement) -"QY" = ( -/obj/structure/frame/machine, -/obj/item/circuitboard/machine/component_printer, -/obj/effect/turf_decal/tile/purple/half{ - dir = 1 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/dark/airless, -/area/ruin/space/has_grav/port_tarkon/developement) -"Rc" = ( -/obj/machinery/firealarm/directional/north, -/obj/effect/turf_decal/tile/brown/half{ - dir = 1 - }, -/obj/item/stack/cable_coil, -/obj/item/stock_parts/matter_bin, -/obj/item/stock_parts/micro_laser, -/obj/item/stock_parts/servo, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/mining) -"Rf" = ( -/obj/machinery/atmospherics/components/unary/outlet_injector/monitored/nitrous_input/tarkon{ - dir = 8 - }, -/turf/open/floor/engine/n2o, -/area/ruin/space/has_grav/port_tarkon/atmos) -"Rg" = ( -/obj/machinery/atmospherics/components/binary/pump/off/general{ - dir = 8 - }, -/obj/effect/turf_decal/tile/yellow/fourcorners, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/airless, -/area/ruin/space/has_grav/port_tarkon/atmos) -"Rh" = ( -/obj/structure/cable, -/obj/machinery/power/apc/auto_name/directional/south, -/obj/effect/mapping_helpers/apc/no_charge, -/obj/effect/mapping_helpers/apc/unlocked, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/garden) -"Rk" = ( -/mob/living/basic/carp/mega, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/plating/airless, -/area/ruin/space/has_grav/port_tarkon/atmos) -"Rm" = ( -/obj/effect/turf_decal/stripes/line, -/obj/effect/turf_decal/stripes/line{ - dir = 1 - }, -/obj/machinery/door/airlock/external/glass{ - name = "Turbine Maintenance Door" - }, -/obj/structure/cable, -/turf/open/floor/plating, -/area/ruin/space/has_grav/port_tarkon/atmos) -"Rp" = ( -/obj/machinery/vending/dorms, -/turf/open/floor/plating, -/area/ruin/space/has_grav/port_tarkon/cargo) -"Rq" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/mining) -"Rr" = ( -/obj/machinery/door/firedoor/solid, -/obj/machinery/door/airlock/engineering/glass{ - name = "P-T Tool Storage" - }, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/toolstorage) -"Rx" = ( -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ - dir = 8 - }, -/obj/effect/turf_decal/tile/brown/half{ - dir = 1 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/cargo) -"RE" = ( -/obj/effect/turf_decal/trimline/yellow/filled/warning{ - dir = 8 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/airless, -/area/ruin/space/has_grav/port_tarkon/storage) -"RH" = ( -/obj/effect/turf_decal/tile/purple/half, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/port_tarkon/developement) -"RI" = ( -/obj/structure/frame/machine, -/obj/item/circuitboard/machine/circuit_imprinter/offstation, -/obj/effect/turf_decal/tile/purple/anticorner{ - dir = 4 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/dark/airless, -/area/ruin/space/has_grav/port_tarkon/developement) -"RJ" = ( -/obj/structure/cable, -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/glass, -/turf/open/floor/iron/airless, -/area/ruin/space/has_grav/port_tarkon/observ) -"RK" = ( -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/centerhall) -"RL" = ( -/obj/structure/fluff/empty_sleeper, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon) -"RM" = ( -/mob/living/basic/carp, -/turf/open/space/basic, -/area/template_noop) -"RN" = ( -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/airless, -/area/ruin/space/has_grav/port_tarkon/porthall) -"RO" = ( -/obj/effect/turf_decal/tile/purple/half{ - dir = 1 - }, -/obj/item/areaeditor/blueprints/slime, -/obj/item/slime_extract/grey, -/obj/item/slime_extract/grey, -/obj/item/slime_extract/grey, -/obj/structure/closet/crate/secure/science, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/dark/airless, -/area/ruin/space/has_grav/port_tarkon/developement) -"RQ" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/cable, -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/glass, -/obj/item/stack/rods, -/turf/open/floor/iron/airless, -/area/ruin/space/has_grav/port_tarkon/observ) -"RT" = ( -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, -/mob/living/basic/carp, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/dark/airless, -/area/ruin/space/has_grav/port_tarkon/developement) -"RU" = ( -/obj/machinery/airalarm/directional/west, -/obj/effect/mapping_helpers/airalarm/all_access, -/obj/effect/turf_decal/tile/yellow/half{ - dir = 8 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/toolstorage) -"RX" = ( -/obj/structure/table, -/obj/item/clothing/head/utility/welding, -/obj/item/clothing/gloves/color/yellow, -/obj/machinery/firealarm/directional/south, -/obj/effect/turf_decal/tile/yellow/anticorner, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/power1) -"RY" = ( -/obj/effect/turf_decal/vg_decals/atmos/plasma, -/obj/machinery/light/small/directional/east, -/obj/machinery/air_sensor/tarkon/plasma_tank{ - pixel_x = 26 - }, -/turf/open/floor/engine/plasma, -/area/ruin/space/has_grav/port_tarkon/atmos) -"Sa" = ( -/obj/structure/frame/machine, -/obj/effect/turf_decal/tile/brown/half{ - dir = 1 - }, -/obj/item/circuitboard/machine/ore_redemption, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/mining) -"Sb" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/turf_decal/tile/brown/half{ - dir = 8 - }, -/turf/open/floor/iron/airless, -/area/ruin/space/has_grav/port_tarkon/storage) -"Se" = ( -/obj/structure/trash_pile, -/turf/open/floor/plating, -/area/ruin/space/has_grav/port_tarkon/forehall) -"Sg" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/turf_decal/tile/purple/half, -/obj/effect/decal/cleanable/glass, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/dark/airless, -/area/ruin/space/has_grav/port_tarkon/developement) -"Sj" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/cable, -/obj/machinery/light_switch/directional/south, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/airless, -/area/ruin/space/has_grav/port_tarkon/porthall) -"Sk" = ( -/obj/structure/cable, -/obj/machinery/power/apc/auto_name/directional/west, -/obj/effect/mapping_helpers/apc/no_charge, -/obj/effect/mapping_helpers/apc/unlocked, -/obj/machinery/light/dim/directional/west, -/obj/effect/turf_decal/tile/brown/half{ - dir = 8 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/mining) -"Sn" = ( -/obj/structure/table, -/obj/item/stack/sheet/mineral/titanium{ - amount = 30 - }, -/obj/effect/turf_decal/tile/purple/half, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/dark/airless, -/area/ruin/space/has_grav/port_tarkon/developement) -"Sp" = ( -/obj/machinery/light/dim/directional/east, -/obj/effect/turf_decal/tile/purple/half{ - dir = 4 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/dark/airless, -/area/ruin/space/has_grav/port_tarkon/developement) -"Sq" = ( -/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/blue/half{ - dir = 1 - }, -/obj/machinery/door/firedoor/solid, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/comms) -"Su" = ( -/obj/effect/turf_decal/tile/purple/half, -/obj/structure/table/reinforced, -/obj/effect/decal/cleanable/glass, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/dark/airless, -/area/ruin/space/has_grav/port_tarkon/developement) -"Sv" = ( -/obj/effect/turf_decal/tile/neutral/half{ - dir = 1 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/centerhall) -"Sw" = ( -/turf/closed/wall/r_wall, -/area/ruin/space/has_grav/port_tarkon/dorms) -"SG" = ( -/obj/structure/table/reinforced, -/obj/machinery/door/window/brigdoor/left/directional/south, -/obj/machinery/door/window/brigdoor/left/directional/north, -/obj/item/paper_bin{ - pixel_x = 7 - }, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/secoff) -"SI" = ( -/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/neutral/anticorner, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/centerhall) -"SL" = ( -/obj/machinery/shower/directional/east, -/obj/structure/window/reinforced/tinted/spawner/directional/east, -/obj/machinery/door/window/right/directional/north{ - opacity = 1 - }, -/turf/open/floor/iron/white, -/area/ruin/space/has_grav/port_tarkon/centerhall) -"SM" = ( -/obj/effect/decal/cleanable/glass, -/obj/effect/decal/cleanable/dirt, -/obj/item/stack/rods, -/turf/open/floor/iron/airless, -/area/ruin/space/has_grav/port_tarkon/atmos) -"SP" = ( -/obj/effect/decal/cleanable/dirt, -/turf/open/misc/asteroid/airless, -/area/ruin/space/has_grav/port_tarkon/atmos) -"SQ" = ( -/obj/effect/decal/cleanable/dirt, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/light/directional/north, -/obj/effect/turf_decal/tile/brown/half{ - dir = 1 - }, -/turf/open/floor/iron/airless, -/area/ruin/space/has_grav/port_tarkon/storage) -"ST" = ( -/obj/structure/window/reinforced/spawner/directional/west, -/turf/open/floor/plating, -/area/ruin/space/has_grav/port_tarkon/atmos) -"SU" = ( -/turf/closed/wall, -/area/ruin/space/has_grav/port_tarkon/observ) -"SV" = ( -/obj/structure/table, -/obj/item/paper_bin, -/obj/item/pen, -/obj/effect/turf_decal/tile/blue/half{ - dir = 4 - }, -/obj/item/folder/red, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/port_tarkon/comms) -"SW" = ( -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ - dir = 1 - }, -/obj/effect/turf_decal/delivery/blue, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/centerhall) -"SX" = ( -/obj/effect/decal/cleanable/ash, -/obj/effect/spawner/random/maintenance, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/plating, -/area/ruin/space/has_grav/port_tarkon/forehall) -"SZ" = ( -/obj/structure/table/reinforced, -/obj/item/kitchen/rollingpin, -/turf/open/floor/iron/cafeteria, -/area/ruin/space/has_grav/port_tarkon/kitchen) -"Tb" = ( -/obj/machinery/light/dim/directional/south, -/obj/effect/turf_decal/tile/brown/anticorner{ - dir = 8 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/airless, -/area/ruin/space/has_grav/port_tarkon/storage) -"Te" = ( -/obj/effect/turf_decal/tile/purple/half{ - dir = 1 - }, -/obj/machinery/airalarm/directional/north, -/obj/effect/mapping_helpers/airalarm/all_access, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/port_tarkon/developement) -"Ti" = ( -/obj/effect/turf_decal/stripes{ - dir = 5 - }, -/obj/structure/cable, -/obj/effect/decal/cleanable/dirt, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden, -/turf/open/floor/engine/vacuum, -/area/ruin/space/has_grav/port_tarkon/atmos) -"Tk" = ( -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ - dir = 8 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/port_tarkon/comms) -"Tl" = ( -/obj/effect/spawner/structure/window/reinforced/no_firelock, -/obj/machinery/door/firedoor/solid, -/turf/open/floor/plating, -/area/ruin/space/has_grav/port_tarkon/forehall) -"To" = ( -/obj/structure/closet, -/obj/effect/decal/cleanable/dirt, -/obj/item/clothing/shoes/workboots/mining, -/obj/item/clothing/shoes/winterboots, -/obj/item/clothing/shoes/jackboots, -/obj/item/clothing/under/rank/engineering/engineer/nova/utility, -/obj/item/clothing/under/rank/engineering/engineer/nova/utility, -/obj/item/storage/backpack/industrial, -/obj/item/storage/backpack/duffelbag/engineering, -/obj/item/storage/backpack/satchel/eng, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon) -"Tq" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/glass, -/obj/item/stack/rods, -/turf/open/floor/plating/airless, -/area/ruin/space/has_grav/port_tarkon/porthall) -"Ts" = ( -/obj/effect/decal/cleanable/dirt, -/obj/structure/closet/crate, -/obj/item/bedsheet/dorms, -/obj/item/bedsheet/dorms, -/obj/item/bedsheet/dorms, -/obj/item/bedsheet/dorms, -/obj/item/bedsheet/dorms, -/obj/item/bedsheet/dorms, -/obj/item/bedsheet/dorms, -/obj/item/bedsheet/dorms_double, -/obj/item/bedsheet/dorms_double, -/obj/item/bedsheet/dorms_double, -/obj/item/bedsheet/dorms_double, -/obj/effect/turf_decal/tile/brown/anticorner{ - dir = 4 - }, -/turf/open/floor/iron/airless, -/area/ruin/space/has_grav/port_tarkon/storage) -"Tz" = ( -/obj/machinery/door/airlock/public/glass{ - name = "Kitchen" - }, -/obj/machinery/door/firedoor/solid, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/kitchen) -"TD" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/decal/cleanable/dirt, -/mob/living/basic/carp, -/turf/open/floor/iron/airless, -/area/ruin/space/has_grav/port_tarkon/porthall) -"TF" = ( -/obj/structure/cable, -/obj/machinery/power/apc/auto_name/directional/west, -/obj/effect/mapping_helpers/apc/no_charge, -/obj/effect/mapping_helpers/apc/unlocked, -/obj/structure/table/reinforced, -/obj/item/folder/yellow, -/obj/item/folder/red, -/obj/effect/turf_decal/tile/brown/half{ - dir = 8 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/cargo) -"TH" = ( -/obj/machinery/airalarm/directional/north, -/obj/effect/mapping_helpers/airalarm/all_access, -/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/tile/neutral/anticorner{ - dir = 4 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/centerhall) -"TJ" = ( -/obj/machinery/light/dim/directional/north, -/obj/effect/turf_decal/tile/purple/half{ - dir = 1 - }, -/obj/item/stack/medical/suture/medicated, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/dark/airless, -/area/ruin/space/has_grav/port_tarkon/developement) -"TL" = ( -/obj/machinery/power/solar_control{ - dir = 1; - id = "aftport"; - name = "Station Solar Control" - }, -/obj/structure/cable, -/obj/item/paper/guides/jobs/engi/solars, -/obj/effect/turf_decal/tile/yellow/half, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/power1) -"TP" = ( -/obj/machinery/light/warm/directional/east, -/obj/effect/turf_decal/tile/neutral/half{ - dir = 4 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/centerhall) -"TQ" = ( -/obj/structure/cable, -/obj/machinery/airalarm/directional/east, -/obj/effect/mapping_helpers/airalarm/all_access, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/effect/turf_decal/tile/brown/half{ - dir = 4 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/mining) -"TT" = ( -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ - dir = 8 - }, -/obj/item/storage/box/stockparts/basic, -/obj/structure/table/reinforced, -/obj/item/stack/sheet/glass{ - amount = 25 - }, -/obj/item/stack/cable_coil, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/dark/airless, -/area/ruin/space/has_grav/port_tarkon/developement) -"TV" = ( -/obj/machinery/firealarm/directional/north, -/obj/effect/turf_decal/tile/yellow/half{ - dir = 1 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/toolstorage) -"TW" = ( -/turf/closed/wall/r_wall, -/area/ruin/space/has_grav/port_tarkon/starboardhall) -"TX" = ( -/obj/machinery/airalarm/directional/east, -/obj/effect/mapping_helpers/airalarm/all_access, -/obj/effect/turf_decal/tile/blue/half{ - dir = 4 - }, -/obj/machinery/light/dim/directional/east, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/port_tarkon/comms) -"Ua" = ( -/obj/structure/safe/floor, -/obj/item/stack/sheet/bluespace_crystal{ - amount = 5 - }, -/obj/item/stack/sheet/mineral/diamond{ - amount = 10 - }, -/obj/item/weldingtool/abductor, -/obj/item/circuitboard/machine/bluespace_miner, -/obj/structure/window/reinforced/spawner/directional/south, -/obj/item/paper/fluff/ruins/tarkon/coupplans, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/port_tarkon/developement) -"Ud" = ( -/obj/structure/closet/crate/bin, -/obj/item/mod/module/springlock, -/obj/effect/turf_decal/tile/red/half, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/secoff) -"Uf" = ( -/obj/effect/turf_decal/tile/purple/half{ - dir = 1 - }, -/obj/structure/table/reinforced, -/obj/item/circuitboard/machine/anomaly_refinery, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/dark/airless, -/area/ruin/space/has_grav/port_tarkon/developement) -"Un" = ( -/obj/structure/cable, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/airless, -/area/ruin/space/has_grav/port_tarkon/atmos) -"Ur" = ( -/obj/effect/decal/cleanable/dirt, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/turf_decal/tile/brown, -/turf/open/floor/iron/airless, -/area/ruin/space/has_grav/port_tarkon/storage) -"Ut" = ( -/obj/machinery/door/airlock/maintenance_hatch, -/obj/structure/cable, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/afthall) -"Uv" = ( -/obj/item/retractor, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/dark/airless, -/area/ruin/space/has_grav/port_tarkon/developement) -"Uw" = ( -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/airless, -/area/ruin/space/has_grav/port_tarkon/observ) -"Ux" = ( -/obj/effect/turf_decal/tile/brown/half{ - dir = 8 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/starboardhall) -"Uz" = ( -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/centerhall) -"UI" = ( -/obj/effect/spawner/structure/window/reinforced/plasma, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden, -/turf/open/floor/plating, -/area/ruin/space/has_grav/port_tarkon/atmos) -"UJ" = ( -/obj/effect/turf_decal/sand/plating, -/turf/open/floor/plating/airless, -/area/solars/tarkon) -"US" = ( -/obj/machinery/door/firedoor/solid, -/obj/effect/spawner/structure/window/reinforced/no_firelock, -/turf/open/floor/plating, -/area/ruin/space/has_grav/port_tarkon/starboardhall) -"UV" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/port_tarkon/developement) -"UX" = ( -/obj/structure/cable, -/obj/machinery/airalarm/directional/west, -/obj/effect/mapping_helpers/airalarm/all_access, -/obj/effect/turf_decal/tile/yellow/half{ - dir = 8 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/power1) -"UZ" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/glass, -/obj/item/stack/rods, -/turf/open/floor/iron/airless, -/area/ruin/space/has_grav/port_tarkon/porthall) -"Vc" = ( -/obj/machinery/door/airlock/research, -/obj/machinery/door/firedoor/solid, -/obj/effect/mapping_helpers/airlock/access/all/tarkon/general, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/developement) -"Vg" = ( -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/cafeteria, -/area/ruin/space/has_grav/port_tarkon/kitchen) -"Vi" = ( -/obj/effect/turf_decal/sand/plating, -/obj/structure/grille, -/turf/open/floor/plating/airless, -/area/ruin/space/has_grav) -"Vj" = ( -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon) -"Vk" = ( -/obj/structure/closet, -/obj/effect/decal/cleanable/dirt, -/obj/item/clothing/shoes/workboots/mining, -/obj/item/clothing/shoes/winterboots, -/obj/item/clothing/shoes/jackboots, -/obj/item/clothing/under/rank/captain/nova/utility, -/obj/item/clothing/under/rank/captain/nova/utility, -/obj/item/storage/backpack/duffelbag/blueshield, -/obj/item/storage/backpack/blueshield, -/obj/item/storage/backpack/satchel/blueshield, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon) -"Vl" = ( -/obj/effect/turf_decal/tile/purple/half{ - dir = 4 - }, -/obj/structure/window/reinforced/spawner/directional/south, -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/port_tarkon/developement) -"Vm" = ( -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ - dir = 8 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/garden) -"Vn" = ( -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/mining) -"Vu" = ( -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ - dir = 1 - }, -/obj/effect/turf_decal/tile/brown/half, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/starboardhall) -"Vw" = ( -/obj/structure/sign/warning/no_smoking, -/turf/closed/wall/r_wall, -/area/ruin/space/has_grav/port_tarkon/atmos) -"Vx" = ( -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, -/turf/open/floor/carpet/purple, -/area/ruin/space/has_grav/port_tarkon/dorms) -"Vy" = ( -/obj/machinery/light/dim/directional/east, -/obj/effect/turf_decal/tile/brown/half{ - dir = 4 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/mining) -"Vz" = ( -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ - dir = 1 - }, -/obj/effect/turf_decal/delivery/blue, -/obj/effect/turf_decal/tile/neutral/half, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/centerhall) -"VE" = ( -/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/yellow/half{ - dir = 4 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/power1) -"VH" = ( -/obj/effect/turf_decal/tile/neutral/anticorner{ - dir = 1 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/centerhall) -"VJ" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/airless, -/area/ruin/space/has_grav/port_tarkon/forehall) -"VK" = ( -/obj/effect/turf_decal/tile/blue/half{ - dir = 4 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/port_tarkon/comms) -"VO" = ( -/obj/machinery/light/dim/directional/north, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/airless, -/area/ruin/space/has_grav/port_tarkon/forehall) -"VQ" = ( -/mob/living/basic/carp, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/airless, -/area/ruin/space/has_grav/port_tarkon/forehall) -"VS" = ( -/obj/machinery/atmospherics/miner/oxygen, -/turf/open/floor/engine/o2, -/area/ruin/space/has_grav/port_tarkon/atmos) -"VT" = ( -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ - dir = 8 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/toolstorage) -"VU" = ( -/obj/effect/spawner/structure/window/reinforced, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/port_tarkon/developement) -"VV" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/cable, -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/glass, -/turf/open/floor/iron/airless, -/area/ruin/space/has_grav/port_tarkon/forehall) -"VZ" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/cable, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/plating/airless, -/area/ruin/space/has_grav/port_tarkon/porthall) -"Wa" = ( -/turf/closed/mineral/random, -/area/ruin/space/has_grav) -"Wc" = ( -/obj/effect/turf_decal/sand, -/obj/structure/closet/emcloset, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/mining) -"Wd" = ( -/obj/effect/turf_decal/vg_decals/atmos/nitrogen, -/obj/machinery/light/small/directional/west, -/obj/machinery/air_sensor/tarkon/nitrogen_tank{ - pixel_x = -26 - }, -/turf/open/floor/engine/n2, -/area/ruin/space/has_grav/port_tarkon/atmos) -"We" = ( -/obj/machinery/computer{ - desc = "A computer long since rendered non-functional due to lack of maintenance. Spitting out error messages."; - dir = 4; - name = "Broken Computer" - }, -/obj/effect/turf_decal/tile/blue/anticorner{ - dir = 8 - }, -/obj/item/paper/fluff/ruins/tarkon/goals, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/port_tarkon/comms) -"Wh" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/airalarm/directional/east, -/obj/effect/turf_decal/tile/red/half{ - dir = 4 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/secoff) -"Wn" = ( -/obj/machinery/computer/cryopod/tarkon/directional/west, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/centerhall) -"Wp" = ( -/obj/machinery/vending/snack/teal, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/afthall) -"Wq" = ( -/obj/structure/cable, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/cargo) -"Wt" = ( -/turf/closed/mineral/random, -/area/awaymission) -"Wu" = ( -/obj/machinery/light_switch/directional/north, -/obj/effect/turf_decal/tile/brown/anticorner{ - dir = 4 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/cargo) -"Ww" = ( -/obj/structure/frame/machine, -/obj/item/circuitboard/machine/module_duplicator, -/obj/effect/turf_decal/tile/purple/half{ - dir = 1 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/dark/airless, -/area/ruin/space/has_grav/port_tarkon/developement) -"WA" = ( -/obj/structure/lattice, -/obj/item/stack/rods, -/turf/open/misc/asteroid/airless, -/area/ruin/space/has_grav/port_tarkon/porthall) -"WB" = ( -/obj/machinery/power/solar, -/obj/structure/cable, -/obj/effect/turf_decal/stripes/asteroid/line{ - dir = 1 - }, -/turf/open/misc/asteroid/airless, -/area/solars/tarkon) -"WC" = ( -/obj/machinery/light/dim/directional/west, -/obj/structure/window/reinforced/spawner/directional/north, -/obj/effect/turf_decal/tile/neutral/fourcorners, -/obj/machinery/computer/atmos_control/tarkon/mix_tank{ - dir = 4 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/airless, -/area/ruin/space/has_grav/port_tarkon/atmos) -"WD" = ( -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/port_tarkon/comms) -"WE" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/glass, -/turf/open/floor/iron/airless, -/area/ruin/space/has_grav/port_tarkon/forehall) -"WL" = ( -/mob/living/basic/carp/mega, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/airless, -/area/ruin/space/has_grav/port_tarkon/forehall) -"WM" = ( -/obj/machinery/light/small/directional/east, -/obj/machinery/oven/range, -/turf/open/floor/iron/cafeteria, -/area/ruin/space/has_grav/port_tarkon/kitchen) -"WO" = ( -/obj/structure/table/reinforced, -/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/ruin/space/has_grav/port_tarkon/centerhall) -"WP" = ( -/obj/effect/spawner/structure/window/reinforced/no_firelock, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/door/firedoor/solid, -/obj/machinery/door/poddoor/shutters{ - id = "ptatmos" - }, -/turf/open/floor/plating, -/area/ruin/space/has_grav/port_tarkon/atmos) -"WQ" = ( -/obj/structure/window/reinforced/spawner/directional/south, -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/port_tarkon/developement) -"WU" = ( -/turf/closed/wall, -/area/ruin/space/has_grav/port_tarkon/porthall) -"WW" = ( -/obj/effect/turf_decal/tile/purple/half, -/obj/effect/spawner/structure/window/reinforced, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/port_tarkon/developement) -"WY" = ( -/turf/open/space/basic, -/area/template_noop) -"Xb" = ( -/obj/structure/cable, -/obj/machinery/power/solar, -/obj/effect/turf_decal/stripes/asteroid/line{ - dir = 1 - }, -/turf/open/misc/asteroid/airless, -/area/solars/tarkon) -"Xh" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/structure/cable, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/dark/airless, -/area/ruin/space/has_grav/port_tarkon/developement) -"Xj" = ( -/obj/machinery/door/airlock/multi_tile/public/glass, -/obj/machinery/door/firedoor/solid, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/garden) -"Xk" = ( -/mob/living/basic/carp, -/obj/effect/decal/cleanable/dirt, -/obj/item/stack/rods, -/turf/open/floor/iron/airless, -/area/ruin/space/has_grav/port_tarkon/porthall) -"Xn" = ( -/obj/structure/ore_box, -/obj/effect/turf_decal/tile/brown/anticorner, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/mining) -"Xq" = ( -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/centerhall) -"Xr" = ( -/obj/structure/reagent_dispensers/watertank, -/turf/open/floor/plating, -/area/ruin/space/has_grav/port_tarkon/afthall) -"Xy" = ( -/turf/closed/wall/r_wall, -/area/ruin/space/has_grav/port_tarkon/toolstorage) -"Xz" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/mining) -"XD" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/structure/cable, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/starboardhall) -"XE" = ( -/obj/structure/toilet{ - dir = 8 - }, -/obj/machinery/light/small/directional/north, -/obj/machinery/door/window/left/directional/west{ - opacity = 1 - }, -/turf/open/floor/iron/white, -/area/ruin/space/has_grav/port_tarkon/centerhall) -"XG" = ( -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/garden) -"XH" = ( -/obj/machinery/atmospherics/components/binary/pump/off/general{ - dir = 8 - }, -/obj/effect/turf_decal/tile/purple/fourcorners, -/obj/structure/cable, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/airless, -/area/ruin/space/has_grav/port_tarkon/atmos) -"XI" = ( -/obj/machinery/light_switch/directional/north, -/obj/effect/turf_decal/delivery/blue, -/obj/effect/turf_decal/tile/neutral/half{ - dir = 1 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/centerhall) -"XJ" = ( -/obj/machinery/door/firedoor/solid/closed, -/obj/machinery/door/airlock/public/glass{ - name = "Fore Primary Hallway" - }, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/forehall) -"XT" = ( -/obj/machinery/hydroponics/soil, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/grass, -/area/ruin/space/has_grav/port_tarkon/garden) -"XX" = ( -/obj/effect/decal/cleanable/glass, -/obj/effect/decal/cleanable/dirt, -/obj/item/stack/rods, -/turf/open/floor/plating/airless, -/area/ruin/space/has_grav/port_tarkon/porthall) -"XZ" = ( -/turf/closed/wall/r_wall/rust, -/area/ruin/space/has_grav) -"Yb" = ( -/obj/machinery/firealarm/directional/east, -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, -/obj/effect/turf_decal/tile/yellow/half{ - dir = 4 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/power1) -"Yc" = ( -/obj/item/solar_assembly, -/obj/structure/cable, -/obj/effect/turf_decal/stripes/asteroid/line, -/turf/open/misc/asteroid/airless, -/area/solars/tarkon) -"Yf" = ( -/obj/effect/turf_decal/tile/purple/half, -/obj/structure/window/reinforced/spawner/directional/west, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/port_tarkon/developement) -"Yh" = ( -/obj/structure/cable, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/plating/airless, -/area/ruin/space/has_grav/port_tarkon/atmos) -"Yp" = ( -/obj/machinery/airalarm/directional/north, -/obj/effect/turf_decal/tile/brown/anticorner{ - dir = 1 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/starboardhall) -"Yr" = ( -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ - dir = 8 - }, -/obj/effect/turf_decal/tile/neutral/half{ - dir = 4 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/centerhall) -"Yt" = ( -/obj/structure/chair/office, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/port_tarkon/comms) -"Yu" = ( -/obj/effect/turf_decal/tile/red/half, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/secoff) -"Yv" = ( -/obj/machinery/hydroponics/soil, -/obj/machinery/light/small/directional/east, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/grass, -/area/ruin/space/has_grav/port_tarkon/garden) -"Yy" = ( -/obj/structure/table, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/item/folder/blue, -/obj/item/pen/blue, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/port_tarkon/comms) -"YB" = ( -/obj/structure/window/reinforced/spawner/directional/north, -/obj/structure/window/reinforced/spawner/directional/west, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/port_tarkon/developement) -"YC" = ( -/obj/machinery/power/apc/auto_name/directional/north, -/obj/effect/mapping_helpers/apc/no_charge, -/obj/effect/mapping_helpers/apc/unlocked, -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/airalarm/directional/south, -/obj/effect/mapping_helpers/airalarm/all_access, -/turf/open/floor/wood/large, -/area/ruin/space/has_grav/port_tarkon/dorms) -"YD" = ( -/obj/machinery/light/dim/directional/west, -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ - dir = 4 - }, -/obj/effect/turf_decal/tile/brown/half{ - dir = 8 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/mining) -"YF" = ( -/obj/effect/turf_decal/tile/purple/half, -/obj/effect/decal/cleanable/glass, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/dark/airless, -/area/ruin/space/has_grav/port_tarkon/developement) -"YI" = ( -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/dark/airless, -/area/ruin/space/has_grav/port_tarkon/developement) -"YK" = ( -/obj/effect/spawner/structure/window/reinforced/no_firelock, -/obj/machinery/door/poddoor/shutters{ - id = "ptcomms" - }, -/turf/open/floor/plating, -/area/ruin/space/has_grav/port_tarkon/comms) -"YQ" = ( -/obj/effect/turf_decal/stripes{ - dir = 1 - }, -/mob/living/basic/carp, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/dark/airless, -/area/ruin/space/has_grav/port_tarkon/atmos) -"YT" = ( -/turf/closed/wall, -/area/ruin/space/has_grav/port_tarkon/cargo) -"YW" = ( -/obj/machinery/light/dim/directional/west, -/obj/effect/turf_decal/tile/brown/half{ - dir = 8 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/starboardhall) -"YZ" = ( -/obj/structure/mirror/directional/west, -/obj/structure/sink/directional/east, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/white, -/area/ruin/space/has_grav/port_tarkon/centerhall) -"Zc" = ( -/turf/closed/mineral/random/high_chance, -/area/solars/tarkon) -"Zi" = ( -/obj/machinery/door/window/brigdoor/left/directional/south, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/port_tarkon/developement) -"Zl" = ( -/obj/effect/turf_decal/sand, -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/mining) -"Zm" = ( -/obj/machinery/atmospherics/components/unary/portables_connector/visible{ - dir = 4 - }, -/obj/effect/turf_decal/tile/yellow/fourcorners, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/airless, -/area/ruin/space/has_grav/port_tarkon/atmos) -"Zp" = ( -/obj/structure/table/reinforced, -/obj/item/storage/belt/utility, -/obj/effect/turf_decal/tile/yellow/half{ - dir = 8 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/toolstorage) -"Zq" = ( -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/dark/airless, -/area/ruin/space/has_grav/port_tarkon/atmos) -"Zr" = ( -/obj/structure/table/optable, -/obj/effect/turf_decal/tile/blue/anticorner{ - dir = 8 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/trauma) -"Zv" = ( -/obj/machinery/door/window/left/directional/west, -/turf/open/floor/plating, -/area/ruin/space/has_grav/port_tarkon/atmos) -"Zw" = ( -/obj/machinery/light/dim/directional/east, -/obj/structure/window/reinforced/spawner/directional/north, -/obj/effect/turf_decal/tile/yellow/fourcorners, -/obj/machinery/computer/atmos_control/tarkon/nitrous_tank{ - dir = 8 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/airless, -/area/ruin/space/has_grav/port_tarkon/atmos) -"ZC" = ( -/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/neutral/anticorner, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/centerhall) -"ZF" = ( -/mob/living/basic/carp/mega, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/airless, -/area/ruin/space/has_grav/port_tarkon/observ) -"ZG" = ( -/turf/closed/wall/r_wall, -/area/ruin/space/has_grav/port_tarkon/storage) -"ZH" = ( -/obj/structure/cable, -/obj/structure/rack, -/obj/item/stack/cable_coil, -/obj/item/stack/sheet/iron/fifty, -/obj/item/stack/sheet/glass/fifty, -/obj/effect/turf_decal/tile/yellow/half, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/power1) -"ZJ" = ( -/turf/open/misc/asteroid/airless, -/area/awaymission) -"ZK" = ( -/obj/effect/turf_decal/tile/purple, -/obj/structure/curtain, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/dark/airless, -/area/ruin/space/has_grav/port_tarkon/developement) -"ZM" = ( -/obj/effect/spawner/structure/window/reinforced/no_firelock, -/obj/machinery/door/firedoor/solid, -/turf/open/floor/plating, -/area/ruin/space/has_grav/port_tarkon/afthall) -"ZN" = ( -/turf/closed/wall, -/area/ruin/space/has_grav/port_tarkon/afthall) -"ZO" = ( -/obj/effect/spawner/structure/window/reinforced, -/turf/open/floor/plating, -/area/ruin/space/has_grav/port_tarkon/developement) -"ZP" = ( -/turf/closed/mineral/random, -/area/ruin/space/has_grav/port_tarkon/porthall) -"ZU" = ( -/obj/machinery/door/airlock/mining/glass, -/obj/structure/cable, -/obj/machinery/door/firedoor/solid, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/mining) -"ZV" = ( -/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, -/obj/machinery/airalarm/directional/north, -/obj/effect/mapping_helpers/airalarm/all_access, -/obj/effect/turf_decal/tile/brown/half{ - dir = 1 - }, -/turf/open/floor/iron/airless, -/area/ruin/space/has_grav/port_tarkon/storage) -"ZX" = ( -/obj/machinery/door/airlock/public/glass{ - name = "Cryogenics Room" - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/door/firedoor/solid, -/obj/structure/cable, -/obj/modular_map_connector, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon) -"ZY" = ( -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ - dir = 1 - }, -/obj/machinery/airalarm/directional/west, -/obj/effect/mapping_helpers/airalarm/all_access, -/turf/open/floor/carpet/red, -/area/ruin/space/has_grav/port_tarkon/dorms) - -(1,1,1) = {" -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -"} -(2,1,1) = {" -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -RM -WY -Wa -Wa -Wa -Wa -Wa -WY -WY -WY -WY -RM -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -"} -(3,1,1) = {" -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -Wa -Wa -Wa -Wa -Wa -Wa -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -RM -WY -WY -WY -WY -RM -WY -WY -WY -EW -WY -WY -WY -WY -WY -WY -WY -RM -WY -WY -WY -WY -WY -WY -RM -WY -WY -"} -(4,1,1) = {" -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -Wa -Wa -Wa -Wa -Wa -Wa -Wa -Wa -sv -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -"} -(5,1,1) = {" -WY -WY -WY -WY -RM -WY -WY -WY -WY -WY -WY -WY -WY -EW -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -Wa -Wa -Wa -sv -sv -Wa -Wa -Wa -zo -zo -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -"} -(6,1,1) = {" -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -zo -zo -zo -zo -zo -zo -zo -zo -Wa -Wa -Wa -Wa -Wa -Wa -sv -sv -zo -zo -zo -zo -zo -zo -Eb -zo -zo -zo -Wa -Wa -sv -Wa -Wa -sv -Wa -Wa -Wa -Wa -Wa -Wa -Wa -Wa -Wa -Wa -WY -WY -WY -WY -WY -WY -RM -WY -WY -WY -WY -WY -"} -(7,1,1) = {" -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -zo -zo -zo -zo -zo -zo -zo -zo -zo -zo -zo -zo -Wa -Wa -Wa -Wa -Wa -Wa -Wa -zo -zo -zo -zo -zo -zo -iv -zo -Wa -Wa -Wa -sv -Wa -sv -Wa -Wa -Wa -Wa -Wa -sv -Wa -sv -Wa -sv -sv -sv -sv -Wa -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -"} -(8,1,1) = {" -WY -WY -WY -WY -WY -WY -WY -EW -WY -WY -WY -WY -zo -zo -zo -zo -zo -zo -zo -zo -zo -zo -zo -zo -zo -zo -zo -sv -sv -sv -sv -sv -sv -sv -qT -zo -rq -zo -zo -iI -Wa -Wa -sv -Wa -Wa -Wa -Wa -sv -Wa -Wa -sv -Wa -sv -sv -Wa -Wa -Wa -sv -Wa -Wa -Wa -Wa -Wa -WY -WY -WY -WY -WY -WY -WY -WY -"} -(9,1,1) = {" -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -zo -zo -zo -zo -zo -EQ -EQ -EQ -WU -WU -WU -WU -WU -WU -WU -WU -WA -ZP -ZP -ZP -ZP -ZP -ZP -ZP -yE -yE -WU -xt -xt -WP -Vw -xt -xt -xt -xt -xt -xt -xt -xt -xt -xt -sv -sv -Wa -sv -Wa -Wa -Wa -sv -sv -Wa -Wa -sv -Wa -WY -WY -WY -WY -WY -WY -WY -"} -(10,1,1) = {" -WY -WY -WY -WY -WY -WY -WY -WY -WY -zo -zo -zo -zo -EQ -EQ -EQ -Uw -qe -jg -bK -eV -nG -nG -nG -eV -IY -oe -ZP -AL -AL -ZP -ZP -AL -AL -MS -Tq -Pd -gp -df -jB -og -lH -pA -yC -lH -Wd -nm -lH -rL -VS -lH -sv -sv -sv -zo -zo -Wa -sv -Wa -Wa -Wa -Wa -Wa -Wa -WY -WY -WY -WY -WY -WY -WY -"} -(11,1,1) = {" -WY -WY -WY -WY -WY -WY -WY -WY -zo -zo -zo -EQ -EQ -EQ -Uw -sC -Uw -qe -WU -rW -hN -RN -wt -RN -RN -hN -XX -oe -ZP -ZP -ZP -ZP -ZP -ZP -ZP -MS -Pd -PK -dC -GX -lp -lH -te -QH -lH -sj -jj -lH -oI -AF -lH -sv -jO -iB -zo -zo -zo -sv -sv -sv -sv -sv -sv -Wa -Wa -WY -WY -WY -WY -WY -WY -"} -(12,1,1) = {" -WY -WY -WY -WY -WY -WY -WY -WY -zo -zo -EQ -EQ -KS -sK -HP -Uw -xN -RQ -vz -UZ -pj -RN -RN -Xk -FC -RN -RN -RN -nY -AL -AL -ZP -ZP -DY -ZP -MS -lg -NC -SM -CP -mo -lH -ts -NK -lH -xp -NK -lH -Bj -NK -lH -xt -GE -xt -zo -WY -zo -xt -sv -Wa -sv -sv -Wa -Wa -Wa -WY -WY -WY -WY -WY -WY -"} -(13,1,1) = {" -WY -WY -WY -WY -WY -WY -WY -zo -zo -zo -EQ -KS -yl -La -Uw -Uw -sC -hH -nP -nP -nP -nP -Vc -li -nP -nP -nP -nP -wQ -Ct -Ct -Ct -Ct -Nc -ZP -ZP -Et -xt -hi -CP -BX -WC -Bi -HU -mc -iG -ad -qk -kr -hM -iw -Fr -Gp -xt -xt -kS -cd -xt -Wa -sv -Wa -sv -sv -Wa -Wa -Wa -RM -WY -WY -WY -WY -"} -(14,1,1) = {" -WY -WY -RM -WY -WY -WY -WY -zo -zo -EQ -EQ -NH -dt -at -Uw -Uw -HP -as -nP -Ik -yz -kT -On -vs -On -xu -uf -tq -gu -On -wQ -fV -wQ -Ct -ZP -ZP -wK -xt -dl -CP -BX -BX -BX -BX -FO -FO -FO -FO -qw -BX -AA -gs -wW -Ld -sc -Ex -xB -xt -Wa -Wa -sv -Wa -sv -Wa -Wa -zo -WY -WY -WY -WY -WY -"} -(15,1,1) = {" -WY -WY -WY -WY -WY -WY -zo -zo -zo -EQ -kp -Uw -LW -Uw -ZF -Uw -Uw -Ph -nP -Uf -YI -lF -ce -YI -eo -YF -uf -QY -fG -YI -yO -ih -Ed -nP -GL -ZP -wK -xt -An -jJ -zc -BX -Rk -PA -FO -dN -BP -FO -BX -BX -bn -xt -Fs -xt -Ak -MU -eZ -xt -zo -sv -Wa -sv -sv -Wa -zo -zo -WY -WY -WY -WY -WY -"} -(16,1,1) = {" -WY -WY -WY -WY -WY -WY -zo -zo -EQ -EQ -Uw -bX -Oi -Oi -Oi -Oi -Oi -Ph -nP -ef -YI -vL -YI -YI -Id -YF -uf -KP -Ic -YI -yO -xY -vB -nP -MS -MS -VZ -xt -pW -Un -qw -BX -FO -SP -id -SP -FO -BX -BX -kd -lI -KM -UI -xt -xt -sa -xt -xt -zo -zo -Wa -sv -Wa -Wa -zo -zo -WY -WY -WY -WY -WY -"} -(17,1,1) = {" -WY -WY -WY -WY -WY -WY -zo -zo -EQ -sK -Uw -lr -Gl -Ez -Uw -Uw -MJ -Ph -nP -fa -YI -vL -YI -YI -Id -YF -uf -Ww -Xh -YI -yI -Id -wl -Vc -RN -nY -OI -xt -IG -Un -BX -BX -PA -ap -id -xW -FO -BX -BX -iW -Fh -Zq -hP -QW -Rm -FT -sL -zo -Wa -Vi -sv -sv -Wa -zo -zo -zo -WY -WY -WY -WY -WY -"} -(18,1,1) = {" -WY -WY -WY -WY -WY -zo -zo -zo -EQ -Cx -Uw -jF -Gf -gE -QL -RJ -ml -qe -nP -QX -GD -Er -Er -Er -Er -sr -uf -xd -KX -YI -Ax -Id -wl -nP -RN -RN -nG -xt -fv -Un -BX -FO -FO -id -SP -id -FO -BX -BX -BX -Fh -DD -wh -Ob -xt -zC -xt -zo -Vi -zo -nx -Wa -Wa -zo -zo -zo -WY -WY -WY -WY -WY -"} -(19,1,1) = {" -WY -WY -WY -WY -WY -zo -zo -zo -SU -SU -SU -SU -SU -SU -SU -eL -SU -HW -nP -pE -YI -YI -cJ -YI -RT -Sg -pY -ko -un -un -un -DK -tA -nP -xZ -RN -DM -xt -BX -Un -FO -FO -FO -PA -FO -FO -FO -uk -BX -BX -YQ -zT -Ti -eQ -xt -Ke -cd -zo -Vi -zo -zo -zo -tt -zo -zo -zo -WY -WY -WY -WY -WY -"} -(20,1,1) = {" -WY -WY -WY -WY -WY -zo -zo -zo -Wa -sv -sv -Wa -Wa -Wa -kf -WE -WE -VV -nP -CB -VU -VU -pa -VU -VU -YF -uf -TJ -Id -YI -YI -DK -bm -nP -RN -RN -nG -xt -OD -Un -sf -Un -Un -Un -Un -Un -Un -Yh -FO -BX -jG -lQ -gH -fk -xt -WY -zo -zo -sv -FG -nx -nx -Wa -zo -zo -zo -WY -WY -WY -WY -WY -"} -(21,1,1) = {" -WY -WY -WY -WY -WY -zo -zo -Wa -Wa -sv -Wa -sv -Wa -sv -kf -Cq -Cq -Cp -nP -Gv -gt -YI -cJ -rG -YI -Su -uf -yx -fJ -Uv -YI -DK -Pf -HQ -tQ -RN -nG -xt -BX -BX -BX -Zw -Zm -Rg -oQ -PB -cv -Qu -uK -XH -Me -hf -hf -xt -xt -zo -zo -sv -Wa -Wa -zb -kA -kF -zo -zo -zo -WY -WY -WY -WY -WY -"} -(22,1,1) = {" -WY -WY -WY -RM -WY -zo -zo -Wa -Wa -Wa -Wa -Wa -sv -Wa -kf -VO -Cq -Cp -nP -xT -YI -YI -cJ -rG -YI -wl -ZO -cc -TT -YI -YI -rF -Ni -nP -TD -RN -OI -xt -ST -Zv -ST -lH -NK -ub -lH -NK -lV -lH -NK -Qg -lH -xt -xt -xt -sv -sv -sv -sv -Wa -LJ -UJ -UJ -rg -av -MG -LJ -WY -WY -WY -WY -WY -"} -(23,1,1) = {" -WY -WY -WY -WY -WY -zo -Wa -Wa -Wa -sv -sv -sv -sv -sv -kf -sI -KQ -zV -nP -oc -yG -cJ -cJ -rG -ce -no -ZO -xd -on -YI -rc -bZ -Sn -nP -tQ -RN -nG -xt -vO -pc -vO -lH -Rf -ld -lH -pU -xj -lH -Qk -fR -lH -sv -sv -sv -sv -Wa -Zc -LJ -rg -av -MG -UJ -At -Mr -ye -LJ -WY -WY -WY -WY -WY -"} -(24,1,1) = {" -WY -WY -WY -WY -WY -Wa -sv -Wa -sv -Wa -sv -sv -Wa -Wa -kf -jN -Cq -Cp -nP -RO -YI -cJ -YI -ZK -Sp -lw -ZO -RI -Jz -sN -rH -Cw -aY -nP -tQ -DI -nG -xt -vO -vO -vO -lH -GB -vp -lH -om -hR -lH -RY -MD -lH -sv -sv -sv -sv -LJ -LJ -LJ -Qn -UJ -Xb -LJ -Qn -Mr -If -LJ -WY -WY -WY -WY -WY -"} -(25,1,1) = {" -WY -WY -WY -WY -WY -Wa -sv -Wa -Wa -Wa -sv -sv -Wa -Wa -kf -Cq -Cq -Cp -db -nS -VU -pa -VU -WW -Xy -mi -rh -rh -rh -rh -rh -rh -rh -WU -tE -tQ -nG -xt -xt -xt -xt -xt -xt -xt -xt -xt -xt -bO -xt -xt -xt -GY -sv -sv -sv -LJ -LJ -LJ -Qn -UJ -IL -LJ -Ft -Mr -ye -LJ -WY -WY -WY -WY -WY -"} -(26,1,1) = {" -WY -WY -WY -WY -WY -Wa -Wa -sv -sv -Wa -sv -Wa -Wa -sv -kf -VO -WL -Cp -db -PM -WQ -OZ -tz -RH -Xy -KE -Zp -gv -hw -lU -RU -pJ -wC -WU -RN -Hj -Sj -WU -uC -YZ -YZ -iq -SL -KV -Iw -zm -UX -wa -cK -CI -Ck -Iw -zo -zo -zo -LJ -LJ -LJ -Qn -UJ -IL -LJ -gX -Mr -WB -LJ -WY -WY -WY -WY -WY -"} -(27,1,1) = {" -WY -WY -WY -WY -WY -Wa -sv -sv -Wa -Wa -sv -Wa -Wa -Wa -kf -Cq -Cq -Cp -db -Te -Zi -OZ -lj -bj -Xy -eE -HF -HF -HF -kJ -FU -FN -rh -WU -Qs -pR -hA -WU -Ki -vR -iq -iq -iq -iq -Iw -xL -MO -Jj -BS -CV -ZH -EN -zo -zo -zo -LJ -LJ -LJ -Bk -UJ -ye -LJ -gX -UJ -ye -LJ -WY -WY -WY -WY -WY -"} -(28,1,1) = {" -WY -WY -WY -WY -WY -Wa -sv -Wa -sv -Wa -sv -Wa -Wa -sv -kf -LH -KW -Cp -db -PM -kx -OZ -iU -Kj -Xy -rz -HF -fl -OT -bD -yY -ak -yY -VH -ro -CA -dT -MB -Ki -MC -Ki -iq -iq -iq -Iw -zW -CV -zJ -BS -HS -BW -Qx -Qx -Qx -Qx -av -av -av -OR -UJ -uU -av -qi -UJ -uU -av -WY -WY -WY -WY -WY -"} -(29,1,1) = {" -WY -WY -WY -WY -WY -Wa -sv -sv -Wa -sv -sv -sv -sv -Wa -kf -Cq -Cq -Cp -db -PM -Cf -OZ -jE -RH -Xy -CX -VT -OT -dZ -yY -yY -kO -dT -ul -GM -GM -GM -Uz -ro -MB -Ki -Ki -XE -aq -Iw -vj -Yb -VE -AM -IO -BW -JN -xP -xP -gn -Mr -UJ -UJ -UJ -UJ -UJ -UJ -UJ -UJ -Mr -OS -WY -WY -WY -WY -WY -"} -(30,1,1) = {" -WY -WY -WY -WY -WY -Wa -Wa -sv -Wa -sv -Wa -sv -sv -Wa -kf -Cq -Cq -Cp -db -DO -wx -OZ -YB -Yf -Xy -rV -OT -pt -yY -yY -VH -bi -Hn -Hn -di -TP -xU -xU -xU -AT -IE -Ki -Ki -Iw -Iw -Iw -Iw -Iw -ge -HS -TL -Qx -Qx -Qx -Qx -Gy -Gy -Gy -Hb -Mr -Al -Gy -Pl -UJ -fw -Gy -WY -WY -WY -WY -WY -"} -(31,1,1) = {" -WY -WY -RM -WY -WY -Wa -sv -Wa -Wa -sv -Wa -Wa -Wa -Wa -kf -Cq -Cq -Pc -db -fh -Ua -OZ -tz -RH -Xy -TV -yF -yY -yY -NM -oC -yj -uv -uv -uv -uv -uv -uv -ly -IQ -AT -IE -Fb -dy -Fm -lA -hZ -Iw -aX -HS -my -Qx -zo -zo -zo -LJ -LJ -LJ -Ft -UJ -IL -LJ -gX -Mr -co -LJ -WY -WY -WY -WY -WY -"} -(32,1,1) = {" -WY -WY -WY -WY -WY -Wa -Wa -sv -Wa -sv -Wa -sv -Wa -sv -kf -VO -Cq -Cp -db -Te -Zi -UV -lj -Kj -Xy -JF -lt -Rr -VH -jz -PZ -uv -uv -hm -Vk -uv -Vj -dn -ly -ly -Sv -qv -IE -GR -xP -ps -eD -Iw -iM -pH -FX -Qx -zo -zo -zo -LJ -LJ -LJ -Qn -UJ -IL -LJ -Yc -Mr -ye -LJ -WY -WY -WY -WY -WY -"} -(33,1,1) = {" -WY -WY -WY -WY -WY -Wa -sv -Wa -Wa -sv -sv -Wa -Wa -Wa -kf -Cq -eT -Cp -db -HY -Vl -jM -GU -ME -Xy -wC -rh -yY -DS -dX -Qp -uv -lS -Vj -Vj -uv -Vj -Vj -Vj -ly -cT -Xq -qL -bz -Iw -lK -Ha -Iw -pf -VE -RX -Iw -zo -zo -zo -LJ -LJ -LJ -wV -UJ -ye -LJ -Qn -Mr -ye -LJ -WY -WY -WY -WY -WY -"} -(34,1,1) = {" -WY -WY -WY -WY -WY -Wa -sv -Wa -sv -sv -Wa -Wa -sv -Wa -kf -Cq -Cq -Cp -db -db -db -db -db -db -yd -kf -kf -NM -jz -rw -uv -uv -LA -Vj -Jp -uv -Vj -Vj -CC -uv -uv -ww -qv -MB -Iw -Iw -Iw -Iw -Iw -Au -Iw -Iw -ZN -of -of -LJ -LJ -LJ -Qn -UJ -co -LJ -Qn -Mr -If -LJ -WY -WY -WY -WY -WY -"} -(35,1,1) = {" -WY -WY -WY -WY -WY -Wa -Wa -sv -sv -sv -Wa -sv -sv -Wa -kf -jN -Cq -Cp -XJ -nN -nN -sM -nN -eG -Eu -nN -BI -DS -nQ -PZ -Fe -Vj -Vj -ux -pv -uv -RL -Vj -Vj -Vj -mC -Sv -GM -PZ -lx -LN -LN -ct -mu -Pz -LN -LN -jv -Wp -of -of -LJ -LJ -aF -Gy -Ho -LJ -At -Mr -ye -LJ -WY -WY -WY -WY -WY -"} -(36,1,1) = {" -WY -WY -WY -WY -WY -Wa -Wa -Wa -Wa -sv -sv -Wa -Wa -sv -kf -sI -Cq -Cp -yt -nN -nN -nN -nN -nN -nN -nN -Tl -qb -SW -Qo -uv -fp -Vj -uD -dq -hr -Vj -Vj -Vj -Ao -uv -XI -Oo -Vz -ZM -LN -LN -tI -LN -Pz -LN -LN -Eq -LN -yv -of -of -LJ -LJ -LJ -LJ -LJ -aF -Gy -Ho -LJ -WY -WY -WY -WY -WY -"} -(37,1,1) = {" -WY -WY -WY -WY -RM -Wa -sv -sv -sv -sv -sv -Wa -Wa -Wa -kf -Cq -KW -Cp -Nj -yh -yh -kG -kG -kG -Nr -Nr -dh -PO -nQ -PZ -Fe -Vj -Vj -sm -lT -uv -jT -Vj -Vj -Vj -ZX -PO -ID -DA -JW -Pz -Pz -pM -Pz -Pz -fP -fP -fP -fP -LN -Jx -of -zo -zo -zo -zo -zo -zo -zo -zo -zo -WY -WY -WY -WY -WY -"} -(38,1,1) = {" -WY -WY -WY -WY -WY -Wa -Wa -Wa -Wa -sv -sv -Wa -sv -Wa -kf -VO -Cq -tp -kf -kf -kf -kf -Gx -kf -kf -kf -kf -GW -LG -PZ -uv -uv -Jl -Vj -FB -uv -Vj -Vj -QK -uv -uv -Sv -qL -KA -hj -hj -hj -hj -hj -Ut -ZN -OM -OM -Sq -Gk -OM -OM -YK -YK -YK -zo -zo -zo -zo -zo -zo -WY -WY -WY -WY -WY -"} -(39,1,1) = {" -WY -WY -WY -WY -WY -Wa -Wa -sv -Wa -sv -Wa -sv -sv -sv -kf -Cq -Cq -Cp -kf -nZ -jZ -jZ -bt -jZ -SX -ug -kf -Ki -PO -Uz -BV -uv -tT -Vj -Vj -uv -Vj -Vj -Vj -ly -xc -oN -qL -KA -OB -Gd -kI -oq -hj -kk -oL -OM -yy -EY -wY -DZ -zL -pw -We -YK -YK -YK -zo -zo -zo -zo -WY -WY -WY -WY -WY -"} -(40,1,1) = {" -WY -WY -WY -WY -WY -Wa -sv -sv -Wa -Wa -sv -sv -Wa -Wa -kf -Cq -Cq -zV -kf -yp -Fl -mt -Cm -by -Nz -kU -Se -Ki -TH -LG -sn -uv -uv -To -rk -uv -Vj -oW -ly -ly -Sv -ID -ZC -WO -ck -ck -ck -pd -hj -oL -oL -OM -Ox -fL -dw -WD -WD -WD -Ie -gk -ke -YK -zo -zo -zo -zo -WY -WY -WY -WY -WY -"} -(41,1,1) = {" -WY -WY -WY -WY -WY -Wa -sv -Wa -Wa -sv -sv -Wa -sv -Wa -kf -Cq -WL -Cp -cV -cV -cV -cV -cV -cV -cV -cV -cV -Ki -Fb -GW -Ci -MB -uv -uv -uv -uv -uv -uv -ly -VH -oN -qL -KA -KA -sl -sl -mO -pd -hj -mr -am -OM -CW -fL -WD -WD -WD -WD -WD -WD -cr -YK -YK -zo -zo -zo -WY -WY -WY -WY -WY -"} -(42,1,1) = {" -WY -WY -WY -WY -WY -Wa -Wa -sv -sv -Wa -Wa -sv -Wa -Wa -kf -Cq -Cq -Cp -cV -GF -Ls -wc -KJ -fI -Bp -vN -Zr -Ki -Ki -tH -GW -Ci -ff -ro -Mp -CG -ro -br -ro -oN -to -qL -KA -sl -sl -Vg -mO -SZ -hj -OG -Xr -OM -vo -fL -WD -WD -WD -WD -WD -uN -oS -Kc -YK -zo -zo -zo -WY -WY -WY -WY -WY -"} -(43,1,1) = {" -WY -WY -WY -WY -WY -Wa -Wa -sv -Wa -Wa -sv -sv -Wa -sv -kf -Cq -KQ -Cp -cV -EV -IW -HX -gd -gd -zZ -Nq -ah -Ki -ai -tH -tH -ik -xU -eg -GM -GM -ID -xU -xU -xU -xU -ZC -tk -IU -WM -sl -iy -FS -hj -YT -YT -OM -vG -fL -Ch -Ch -Ch -Yy -kW -Ch -tn -FR -YK -YK -zo -zo -WY -WY -WY -WY -WY -"} -(44,1,1) = {" -WY -WY -WY -WY -WY -Wa -sv -sv -Wa -sv -Wa -Wa -Wa -Wa -kf -yi -Cq -Cp -iA -xi -xi -xi -Ae -Ae -Ae -yS -nu -Ki -nQ -Jq -Ki -jP -Ki -IQ -Hn -Yr -SI -gJ -gJ -gJ -Px -lR -gJ -gJ -hj -po -iy -KZ -hj -Rp -Dk -OM -kq -WD -Tk -WD -Yt -mK -gW -PE -Tk -oS -hL -YK -zo -zo -WY -WY -WY -WY -WY -"} -(45,1,1) = {" -WY -WY -WY -WY -WY -Wa -sv -sv -Wa -Wa -sv -Wa -sv -Wa -kf -VO -KW -Cp -Lr -gd -ga -gd -gd -gd -gd -IH -ah -Ki -Kl -RK -Wn -GM -Ki -Ki -iT -US -nb -gJ -XT -XT -KO -XG -XT -GS -hj -nc -iy -Ju -hj -rZ -nL -OM -ut -VK -VK -ry -VK -EE -SV -VK -TX -an -JX -YK -zo -zo -WY -WY -WY -WY -WY -"} -(46,1,1) = {" -WY -WY -WY -WY -WY -Wa -sv -sv -sv -sv -Wa -Wa -sv -Wa -kf -Cq -Cq -VJ -cV -EV -Mt -gd -gd -gd -zZ -aS -ah -Ki -vF -nQ -EA -cA -Jq -Ki -DN -LS -Hg -gJ -XT -Gs -KO -sX -sX -XT -ft -sl -td -Ju -hj -YT -tC -QC -QC -QC -QC -ZG -ZG -ZG -ZG -ZG -ZG -ZG -ZG -ZG -zo -zo -WY -WY -WY -WY -WY -"} -(47,1,1) = {" -WY -WY -WY -RM -WY -Wa -sv -sv -Wa -sv -Wa -Wa -sv -Wa -kf -VQ -Cq -VJ -cV -ku -EB -hE -rv -vl -JY -bF -ba -Ki -Mz -jA -vd -QP -Jq -Ki -LS -fU -Hg -Xj -XG -XG -go -Nt -sX -XG -Tz -sl -FZ -dW -hj -ru -gP -TF -JL -Qy -QB -ng -nF -Sb -Jm -Sb -Sb -xR -mG -ZG -zo -zo -WY -WY -WY -WY -WY -"} -(48,1,1) = {" -WY -WY -WY -WY -WY -Wa -Wa -Wa -sv -sv -Wa -Wa -sv -sv -kf -Cq -Cq -VJ -cV -cV -cV -cV -cV -cV -cV -cV -cV -Ki -AP -AP -AP -AP -AP -AP -JE -XD -Hg -bA -XG -XG -gb -iJ -sX -Rh -hj -Bn -hj -hj -hj -vm -jV -Wq -JI -JI -Lf -ng -MV -Dv -Dv -Dv -Ur -AZ -md -cu -zo -zo -WY -WY -WY -WY -WY -"} -(49,1,1) = {" -WY -WY -WY -WY -WY -Wa -Wa -sv -sv -sv -Wa -sv -sv -Wa -kf -Cq -KW -VJ -kf -Wa -sv -Wa -Wa -Wa -Wa -Wa -Wa -Wa -vC -HB -dA -eB -Nw -bg -AG -cU -MF -gJ -XT -XG -XG -XG -Vm -Gt -hj -uR -uR -hV -hj -Wu -kD -kD -kD -Ce -xO -Ih -qH -cQ -jW -jW -rB -ng -oE -ZG -zo -zo -WY -WY -WY -WY -WY -"} -(50,1,1) = {" -WY -WY -WY -WY -WY -Wa -sv -Wa -sv -Wa -sv -sv -Wa -Wa -kf -PF -PF -Ks -kf -Wa -sv -sv -Wa -Wa -sv -Wa -sv -Wa -vC -LY -zt -Hf -Yu -uS -LS -LS -MF -gJ -aZ -XT -MP -MP -XT -Yv -hj -uR -uR -hV -hj -fB -hQ -fB -fB -Rx -Lf -Pq -pu -PR -jW -jW -dP -rK -RE -qh -zo -zo -WY -WY -WY -WY -WY -"} -(51,1,1) = {" -WY -WY -WY -WY -WY -Wa -sv -Wa -sv -sv -sv -Wa -Wa -sv -kf -Hq -Hq -Hq -kf -Wa -Wa -Wa -sv -sv -Wa -Wa -Wa -sv -vC -qQ -Hk -Hf -Ud -uS -iT -Dn -mT -gJ -gJ -gJ -pz -pz -gJ -gJ -hj -hj -hj -hj -hj -Yp -vA -th -fB -LD -Lf -ng -ZV -jW -eu -jW -Io -cE -hu -Lo -zo -zo -WY -WY -WY -WY -WY -"} -(52,1,1) = {" -WY -WY -WY -WY -WY -Wa -sv -Wa -sv -sv -sv -sv -Wa -Wa -sv -Wa -Wa -Wa -sv -Wa -sv -sv -sv -sv -Wa -Wa -Wa -Wa -vC -bY -zt -lW -aU -uS -LS -LS -MF -LS -LS -LS -LS -LS -LS -LS -zp -Ux -Ux -Ux -YW -sd -MF -Vu -fB -LD -dE -ng -ui -jW -jW -jW -if -cE -jW -Lo -zo -Eb -WY -WY -WY -WY -WY -"} -(53,1,1) = {" -WY -WY -WY -WY -WY -Wa -Wa -sv -Wa -sv -sv -sv -sv -sv -Wa -sv -sv -Wa -sv -sv -Wa -Wa -Wa -Wa -sv -Wa -sv -Wa -vC -xH -Le -lW -pT -SG -LS -cU -MF -LS -LS -LS -Ps -LS -LS -LS -zp -yD -LS -LS -LS -Ps -MF -Da -QA -Qh -pl -ng -SQ -FK -jW -uJ -if -cE -jW -Lo -zo -zo -WY -WY -WY -WY -WY -"} -(54,1,1) = {" -WY -WY -WY -WY -WY -zo -Wa -Wa -sv -sv -sv -Wa -Wa -Wa -sv -Wa -sv -sv -Wa -Wa -sv -sv -Wa -Wa -sv -sv -sv -Wa -vC -ia -zt -lW -DP -vC -cn -LS -MF -CY -qS -MF -MF -MF -ka -eK -fT -zM -zM -zM -zM -zM -zM -MY -fB -PS -oy -ng -BF -jW -PR -jW -qq -cE -hu -Lo -zo -zo -WY -WY -WY -WY -WY -"} -(55,1,1) = {" -WY -WY -WY -WY -WY -zo -Wa -Wa -sv -sv -sv -sv -Wa -Wa -Wa -sv -Wa -Wa -sv -sv -sv -sv -sv -Wa -sv -sv -Wa -sv -vC -PT -zt -lW -Yu -vC -TW -TW -TW -eI -eI -eI -Kk -eI -eI -eI -Hy -yU -mV -yU -yU -ZU -yU -Hy -Hy -Hy -Hy -ng -BF -jW -jW -jW -if -ym -KL -Ix -zo -zo -WY -WY -WY -RM -WY -"} -(56,1,1) = {" -WY -RM -WY -WY -WY -zo -zo -Wa -Wa -Wa -sv -sv -Wa -sv -Wa -Wa -sv -sv -sv -Wa -Wa -Wa -sv -sv -sv -Wa -sv -sv -vC -jY -zt -lW -nk -ls -lW -EC -vC -Oj -tY -Jv -tc -Jv -Im -CS -Hy -in -zy -zy -zy -wZ -le -hl -Sk -zy -rD -ng -BF -cQ -jW -LC -Os -aP -aP -ZG -zo -zo -WY -WY -RM -WY -WY -"} -(57,1,1) = {" -WY -WY -WY -WY -WY -zo -zo -Wa -sv -Wa -sv -sv -sv -Wa -Wa -Wa -Wa -sv -sv -sv -sv -sv -sv -Wa -Wa -Wa -Wa -sv -vC -NX -zt -lW -Yu -gD -JQ -NN -vC -Vx -Ji -Cy -El -tM -dv -Ij -Hy -Rc -Vn -aT -aT -Rq -aT -aT -Pp -Nl -sq -ng -Gb -Dv -Dv -Dv -CM -xR -Tb -cu -zo -zo -WY -WY -WY -WY -WY -"} -(58,1,1) = {" -WY -WY -WY -WY -WY -WY -zo -Wa -Wa -Wa -Wa -sv -Wa -sv -Wa -Wa -Wa -sv -sv -Wa -sv -Wa -sv -Wa -sv -Wa -Wa -Wa -vC -Fk -Oa -lW -cD -vC -vC -vC -vC -Jv -Jv -Jv -YC -Jv -Jv -Jv -Hy -Sa -Fq -LQ -LQ -os -LQ -Xz -Xz -dR -eM -ng -Ts -dk -uM -iC -gN -AZ -jU -ZG -zo -zo -WY -WY -WY -WY -WY -"} -(59,1,1) = {" -WY -WY -WY -WY -WY -WY -zo -zo -Wa -Wa -sv -sv -sv -Wa -sv -Wa -sv -sv -Wa -sv -Wa -Wa -sv -sv -sv -Wa -Wa -sv -vC -ph -zt -lW -Yu -gD -kR -kX -vC -xq -ov -ve -sw -lD -yA -ZY -Hy -hS -Vy -cq -jo -TQ -gS -Bo -Vy -gS -IK -ng -ng -ng -ng -ng -ng -ng -ng -ZG -zo -vQ -WY -WY -WY -WY -WY -"} -(60,1,1) = {" -WY -WY -WY -WY -WY -WY -uo -zo -Wa -Wa -Wa -sv -sv -sv -Wa -Wa -sv -sv -Wa -Wa -sv -sv -Wa -Wa -Wa -Wa -Wa -sv -vC -nW -Nx -Wh -CE -hY -IF -EC -vC -sD -JO -Jv -pX -Jv -Pa -Hi -zf -zf -zf -KB -CL -zf -zf -zf -zf -zf -zf -Hy -Wa -Wa -sv -sv -Wa -Wa -Wa -zo -vQ -FE -WY -WY -WY -WY -WY -"} -(61,1,1) = {" -WY -WY -WY -WY -WY -WY -FE -vQ -zo -Wa -Wa -Wa -Wa -sv -sv -Wa -sv -sv -Wa -Wa -Wa -Wa -sv -Wa -sv -Wa -Wa -sv -vC -vC -vC -vC -vC -vC -vC -vC -vC -Sw -Sw -Sw -Sw -Sw -Sw -Sw -zf -Ng -zy -BU -Kr -YD -Jw -Bq -Wc -Wc -bH -sv -sv -sv -Wa -Wa -Wa -Wa -zo -zo -vQ -WY -WY -WY -WY -WY -WY -"} -(62,1,1) = {" -WY -WY -WY -WY -ZJ -WY -FE -zo -zo -zo -Wa -sv -Wa -sv -sv -Wa -sv -sv -sv -sv -Wa -Wa -Wa -sv -sv -Wa -Wa -Wa -sv -Wa -sv -sv -sv -sv -Wa -sv -sv -Wa -sv -sv -Wa -Wa -XZ -Wa -bH -Lp -Pp -Zl -qF -Xz -iu -Cs -qr -HH -ip -zo -sv -Wa -sv -Wa -Wa -zo -zo -vQ -FE -WY -WY -WY -WY -WY -WY -"} -(63,1,1) = {" -WY -WY -WY -jn -Wt -WY -FE -WY -vQ -zo -zo -Wa -Wa -sv -Wa -Wa -sv -Wa -sv -Wa -sv -sv -sv -sv -Wa -Wa -Wa -Wa -sv -sv -sv -Wa -Wa -Wa -sv -Wa -Wa -sv -sv -Wa -Wa -Wa -XZ -Wa -bH -lZ -kh -tV -zd -ud -Xn -bH -Ba -ot -bH -zo -sv -Wa -Wa -Wa -zo -zo -vQ -FE -WY -WY -WY -WY -WY -WY -WY -"} -(64,1,1) = {" -WY -WY -WY -jn -jn -FE -FE -qD -FE -vQ -zo -zo -zo -Wa -sv -Wa -Wa -Wa -sv -Wa -sv -sv -Wa -Wa -Wa -Wa -sv -sv -Wa -Wa -sv -sv -sv -sv -sv -sv -sv -sv -Wa -sv -sv -Wa -Wa -XZ -bH -KG -bH -gA -gA -bH -KG -bH -bH -bH -bH -zo -sv -sv -Wa -zo -zo -vQ -FE -WY -WY -WY -WY -WY -WY -WY -WY -"} -(65,1,1) = {" -WY -WY -Wt -jn -jn -Wt -FE -WY -WY -WY -WY -zo -vQ -zo -zo -Wa -sv -sv -Wa -sv -Wa -Wa -Wa -sv -sv -Wa -sv -Wa -Wa -sv -Wa -Wa -Wa -Wa -sv -Wa -Wa -Wa -Wa -Wa -Wa -zo -zo -zo -zo -zo -zo -zo -dr -zo -zo -zo -zo -zo -zo -zo -Wa -zo -zo -vQ -vQ -FE -WY -WY -WY -WY -WY -WY -WY -WY -WY -"} -(66,1,1) = {" -WY -WY -jn -jn -Wt -jn -FE -FE -FE -FE -FE -FE -FE -vQ -zo -zo -zo -Wa -sv -Wa -sv -sv -sv -sv -sv -Wa -Wa -Wa -Wa -sv -Wa -sv -Wa -Wa -sv -Wa -Wa -Wa -sv -Wa -zo -zo -zo -zo -zo -zo -zo -zo -zo -zo -zo -zo -zo -zo -zo -zo -zo -zo -vQ -FE -WY -WY -WY -WY -WY -WY -WY -RM -WY -WY -WY -"} -(67,1,1) = {" -WY -ZJ -Wt -jn -jn -jn -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -"} -(68,1,1) = {" -WY -WY -WY -Wt -jn -Wt -ZJ -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -RM -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -"} -(69,1,1) = {" -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -EW -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -RM -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -"} -(70,1,1) = {" -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -RM -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -"} -(71,1,1) = {" -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -"} diff --git a/_maps/RandomRuins/SpaceRuins/nova/port_tarkon/defcon5.dmm b/_maps/RandomRuins/SpaceRuins/nova/port_tarkon/defcon5.dmm deleted file mode 100644 index 8aaf274c14b..00000000000 --- a/_maps/RandomRuins/SpaceRuins/nova/port_tarkon/defcon5.dmm +++ /dev/null @@ -1,13744 +0,0 @@ -//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE -"ab" = ( -/obj/effect/turf_decal/tile/neutral/half{ - dir = 1 - }, -/obj/effect/spawner/random/trash/food_packaging, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/centerhall) -"ad" = ( -/obj/machinery/atmospherics/components/unary/portables_connector/visible{ - dir = 8 - }, -/obj/effect/turf_decal/tile/red/fourcorners{ - color = "#DE3A3A" - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/atmos) -"ag" = ( -/obj/structure/mirror/directional/west, -/obj/structure/sink/directional/east, -/obj/effect/spawner/random/trash/food_packaging, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/white, -/area/ruin/space/has_grav/port_tarkon/centerhall) -"ah" = ( -/obj/effect/turf_decal/tile/blue/half, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/trauma) -"ai" = ( -/obj/machinery/cryopod{ - dir = 4 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/centerhall) -"ak" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/door/firedoor/solid, -/obj/machinery/door/airlock/engineering/glass{ - name = "P-T Tool Storage" - }, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/toolstorage) -"am" = ( -/obj/structure/mop_bucket, -/obj/item/mop, -/obj/item/reagent_containers/cup/bucket, -/obj/item/soap/nanotrasen, -/turf/open/floor/plating, -/area/ruin/space/has_grav/port_tarkon/afthall) -"an" = ( -/obj/machinery/firealarm/directional/east, -/obj/effect/turf_decal/tile/blue/half{ - dir = 4 - }, -/obj/effect/decal/cleanable/confetti, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/port_tarkon/comms) -"aq" = ( -/obj/structure/toilet{ - dir = 8 - }, -/obj/structure/window/reinforced/tinted/spawner/directional/north, -/obj/machinery/door/window/left/directional/west{ - opacity = 1 - }, -/turf/open/floor/iron/white, -/area/ruin/space/has_grav/port_tarkon/centerhall) -"as" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/cable, -/obj/machinery/light/dim/directional/south, -/obj/machinery/light_switch/directional/south, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/observ) -"at" = ( -/obj/structure/chair/sofa/corp/corner{ - dir = 8 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/observ) -"av" = ( -/obj/effect/turf_decal/stripes/asteroid/line{ - dir = 4 - }, -/turf/open/misc/asteroid/airless, -/area/solars/tarkon) -"aF" = ( -/obj/effect/turf_decal/stripes/asteroid/corner{ - dir = 8 - }, -/turf/open/misc/asteroid/airless, -/area/solars/tarkon) -"aH" = ( -/obj/effect/spawner/random/trash/food_packaging, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/atmos) -"aP" = ( -/obj/effect/spawner/structure/window/reinforced, -/turf/open/floor/plating, -/area/ruin/space/has_grav/port_tarkon/storage) -"aS" = ( -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ - dir = 8 - }, -/obj/structure/table/rolling, -/obj/item/surgery_tray/full, -/obj/item/clothing/gloves/latex{ - pixel_y = 10 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/trauma) -"aT" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/mining) -"aU" = ( -/obj/structure/table/reinforced, -/obj/item/card/id/away/tarkon{ - pixel_y = -6 - }, -/obj/item/card/id/away/tarkon, -/obj/item/card/id/away/tarkon{ - pixel_y = 6 - }, -/obj/item/folder/red, -/obj/effect/turf_decal/tile/red/half, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/secoff) -"aX" = ( -/obj/structure/cable, -/obj/machinery/airalarm/directional/north, -/obj/effect/mapping_helpers/airalarm/all_access, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/effect/turf_decal/tile/yellow/half{ - dir = 1 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/power1) -"aY" = ( -/obj/structure/table, -/obj/item/stack/sheet/mineral/silver{ - amount = 25 - }, -/obj/machinery/airalarm/directional/east, -/obj/effect/mapping_helpers/airalarm/all_access, -/obj/effect/turf_decal/tile/purple/anticorner, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/port_tarkon/developement) -"aZ" = ( -/obj/structure/cable, -/obj/machinery/power/terminal{ - dir = 4 - }, -/obj/effect/decal/cleanable/dirt, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/port_tarkon/atmos) -"ba" = ( -/obj/structure/table/optable, -/obj/effect/turf_decal/tile/blue/anticorner, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/trauma) -"bf" = ( -/obj/effect/decal/cleanable/confetti, -/obj/effect/spawner/random/trash/food_packaging, -/obj/item/broken_bottle, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/starboardhall) -"bg" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/cable, -/obj/machinery/door/airlock/security/old, -/obj/effect/mapping_helpers/airlock/access/all/tarkon/general, -/obj/machinery/door/firedoor/solid, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/secoff) -"bi" = ( -/obj/effect/turf_decal/tile/neutral, -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/centerhall) -"bj" = ( -/obj/machinery/light/warm/directional/south, -/obj/effect/turf_decal/tile/purple/half, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/port_tarkon/developement) -"bm" = ( -/obj/machinery/light_switch/directional/south, -/obj/effect/turf_decal/tile/purple/half, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/port_tarkon/developement) -"bn" = ( -/obj/effect/turf_decal/stripes{ - dir = 1 - }, -/obj/machinery/button/door/incinerator_vent_atmos_aux{ - pixel_x = -8; - pixel_y = -24; - req_one_access = list("tarkon") - }, -/obj/machinery/button/door/incinerator_vent_atmos_main{ - pixel_x = -8; - pixel_y = -36; - req_one_access = list("tarkon") - }, -/obj/machinery/atmospherics/components/binary/pump/off/general{ - dir = 8 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/port_tarkon/atmos) -"bq" = ( -/obj/effect/decal/cleanable/vomit/old, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/observ) -"br" = ( -/obj/machinery/firealarm/directional/west, -/obj/effect/turf_decal/tile/neutral/half{ - dir = 8 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/centerhall) -"bt" = ( -/obj/effect/mapping_helpers/burnt_floor, -/turf/open/floor/plating, -/area/ruin/space/has_grav/port_tarkon/forehall) -"by" = ( -/obj/item/solar_assembly, -/obj/item/solar_assembly, -/obj/item/solar_assembly, -/obj/item/solar_assembly, -/obj/item/solar_assembly, -/obj/item/solar_assembly, -/obj/structure/closet/crate/engineering/electrical, -/obj/item/solar_assembly, -/obj/item/solar_assembly, -/obj/item/solar_assembly, -/obj/item/solar_assembly, -/obj/item/solar_assembly, -/obj/item/solar_assembly, -/obj/item/solar_assembly, -/obj/item/solar_assembly, -/obj/item/solar_assembly, -/obj/item/solar_assembly, -/obj/item/solar_assembly, -/turf/open/floor/plating, -/area/ruin/space/has_grav/port_tarkon/forehall) -"bz" = ( -/obj/structure/sign/warning/radiation, -/turf/closed/wall, -/area/ruin/space/has_grav/port_tarkon/power1) -"bA" = ( -/obj/machinery/door/firedoor/solid, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/garden) -"bD" = ( -/obj/structure/table/reinforced, -/obj/item/stack/sheet/glass/fifty, -/obj/effect/turf_decal/tile/yellow/anticorner, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/toolstorage) -"bF" = ( -/obj/machinery/iv_drip, -/obj/effect/turf_decal/tile/blue/half{ - dir = 4 - }, -/obj/effect/decal/cleanable/vomit/old, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/trauma) -"bH" = ( -/turf/closed/wall/r_wall/rust, -/area/ruin/space/has_grav/port_tarkon/mining) -"bK" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/cable, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/porthall) -"bO" = ( -/obj/structure/sign/warning/electric_shock, -/turf/closed/wall/r_wall, -/area/ruin/space/has_grav/port_tarkon/atmos) -"bT" = ( -/obj/effect/spawner/random/trash/food_packaging, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/observ) -"bV" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/turf_decal/tile/neutral/half{ - dir = 1 - }, -/obj/effect/decal/cleanable/confetti, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/centerhall) -"bX" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/observ) -"bY" = ( -/obj/structure/rack/gunrack, -/obj/machinery/light/directional/north, -/obj/effect/turf_decal/tile/red/half{ - dir = 1 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/secoff) -"cc" = ( -/obj/structure/frame/machine, -/obj/item/circuitboard/machine/protolathe/offstation, -/obj/effect/turf_decal/tile/purple/half{ - dir = 1 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/port_tarkon/developement) -"cd" = ( -/obj/structure/sign/warning/fire, -/turf/closed/wall/r_wall, -/area/ruin/space/has_grav/port_tarkon/atmos) -"ce" = ( -/obj/machinery/light/dim/directional/north, -/obj/item/broken_bottle, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/forehall) -"ck" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/cafeteria, -/area/ruin/space/has_grav/port_tarkon/kitchen) -"cn" = ( -/obj/machinery/firealarm/directional/east, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/starboardhall) -"co" = ( -/obj/item/solar_assembly, -/obj/effect/turf_decal/stripes/asteroid/line{ - dir = 1 - }, -/turf/open/misc/asteroid/airless, -/area/solars/tarkon) -"cq" = ( -/obj/effect/turf_decal/tile/brown{ - dir = 4 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/mining) -"cr" = ( -/obj/structure/table, -/obj/item/paper/crumpled, -/obj/effect/turf_decal/tile/blue/half, -/obj/item/folder, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/port_tarkon/comms) -"cs" = ( -/obj/item/broken_bottle, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/forehall) -"ct" = ( -/obj/machinery/airalarm/directional/west, -/obj/effect/mapping_helpers/airalarm/all_access, -/obj/effect/decal/cleanable/confetti, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/afthall) -"cu" = ( -/obj/structure/sign/warning/docking, -/turf/closed/wall/r_wall, -/area/ruin/space/has_grav/port_tarkon/storage) -"cv" = ( -/obj/machinery/atmospherics/components/binary/pump/off/general{ - dir = 8 - }, -/obj/effect/turf_decal/tile/dark/fourcorners, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/atmos) -"cA" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/layer_manifold/supply{ - dir = 4 - }, -/obj/effect/decal/cleanable/confetti, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/centerhall) -"cD" = ( -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ - dir = 1 - }, -/obj/effect/turf_decal/tile/red/half, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/secoff) -"cE" = ( -/obj/machinery/door/poddoor/shutters/window{ - id = "tarkoninner"; - name = "Interior Bay Shutter" - }, -/obj/effect/turf_decal/trimline/yellow/filled/warning{ - dir = 1 - }, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/storage) -"cK" = ( -/obj/structure/cable, -/obj/effect/turf_decal/delivery/white, -/obj/effect/turf_decal/tile/yellow/half{ - dir = 8 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/power1) -"cQ" = ( -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ - dir = 1 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/storage) -"cT" = ( -/obj/machinery/light/warm/directional/east, -/obj/effect/turf_decal/tile/neutral/anticorner{ - dir = 4 - }, -/obj/effect/decal/cleanable/confetti, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/centerhall) -"cU" = ( -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/starboardhall) -"cV" = ( -/turf/closed/wall, -/area/ruin/space/has_grav/port_tarkon/trauma) -"cX" = ( -/obj/machinery/door/firedoor/solid, -/obj/machinery/door/airlock/public/glass{ - name = "Port Primary Hallway" - }, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/porthall) -"db" = ( -/turf/closed/wall/r_wall, -/area/ruin/space/has_grav/port_tarkon/developement) -"df" = ( -/obj/machinery/light_switch/directional/west, -/obj/machinery/shower/directional/east, -/obj/effect/turf_decal/stripes{ - dir = 6 - }, -/obj/effect/decal/cleanable/dirt, -/obj/machinery/button/door{ - id = "ptatmos"; - name = "shutter controls"; - pixel_x = -39; - pixel_y = -10 - }, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/port_tarkon/atmos) -"dh" = ( -/obj/machinery/door/airlock/public/glass{ - name = "Fore Primary Hallway" - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/door/firedoor/solid, -/obj/structure/cable, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/forehall) -"di" = ( -/obj/machinery/airalarm/directional/east, -/obj/effect/mapping_helpers/airalarm/all_access, -/obj/effect/turf_decal/tile/neutral/half{ - dir = 4 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/centerhall) -"dk" = ( -/obj/structure/closet/crate, -/obj/item/reagent_containers/spray/cleaner, -/obj/item/reagent_containers/spray/cleaner, -/obj/item/reagent_containers/spray/cleaner, -/obj/item/grenade/chem_grenade/cleaner, -/obj/item/grenade/chem_grenade/cleaner, -/obj/item/grenade/chem_grenade/cleaner, -/obj/item/grenade/chem_grenade/cleaner, -/obj/item/grenade/chem_grenade/cleaner, -/obj/item/grenade/chem_grenade/cleaner, -/obj/item/grenade/chem_grenade/cleaner, -/obj/item/grenade/chem_grenade/cleaner, -/obj/item/holosign_creator/janibarrier, -/obj/effect/turf_decal/tile/brown/half{ - dir = 4 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/storage) -"dl" = ( -/obj/machinery/airalarm/directional/north, -/obj/effect/mapping_helpers/airalarm/all_access, -/obj/machinery/light/dim/directional/north, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/atmos) -"dq" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/cable, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon) -"dr" = ( -/obj/docking_port/stationary{ - dir = 4; - dwidth = 6; - height = 16; - name = "Port Tarkon"; - roundstart_template = /datum/map_template/shuttle/ruin/tarkon_driver; - shuttle_id = "port_tarkon"; - width = 14 - }, -/turf/open/misc/asteroid/airless, -/area/ruin/space/has_grav) -"dt" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/structure/chair/sofa/corp{ - dir = 8 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/observ) -"dv" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/airalarm/directional/east, -/obj/effect/mapping_helpers/airalarm/all_access, -/turf/open/floor/carpet/cyan, -/area/ruin/space/has_grav/port_tarkon/dorms) -"dw" = ( -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ - dir = 1 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/port_tarkon/comms) -"dy" = ( -/obj/structure/sign/warning/electric_shock, -/turf/closed/wall, -/area/ruin/space/has_grav/port_tarkon/power1) -"dA" = ( -/obj/structure/table/reinforced, -/obj/effect/turf_decal/tile/red/half{ - dir = 8 - }, -/obj/effect/decal/cleanable/dirt, -/obj/item/crowbar, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/secoff) -"dB" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/cable, -/obj/effect/spawner/random/trash/food_packaging, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/forehall) -"dC" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/atmos) -"dE" = ( -/obj/machinery/light/dim/directional/south, -/obj/effect/turf_decal/tile/brown/half, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/cargo) -"dP" = ( -/obj/effect/turf_decal/tile/brown/half, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/storage) -"dR" = ( -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/mining) -"dT" = ( -/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/neutral/half{ - dir = 8 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/centerhall) -"dW" = ( -/obj/structure/closet/secure_closet/freezer/fridge/open, -/obj/item/reagent_containers/condiment/flour, -/obj/item/reagent_containers/condiment/flour, -/obj/item/reagent_containers/condiment/flour, -/obj/item/reagent_containers/condiment/flour, -/obj/item/reagent_containers/condiment/sugar, -/obj/item/reagent_containers/condiment/sugar, -/turf/open/floor/iron/cafeteria, -/area/ruin/space/has_grav/port_tarkon/kitchen) -"dX" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/turf_decal/tile/neutral, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/centerhall) -"dZ" = ( -/obj/machinery/autolathe, -/obj/effect/turf_decal/tile/yellow/anticorner, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/toolstorage) -"eb" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/effect/spawner/random/trash/food_packaging, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/atmos) -"ed" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/cable, -/obj/item/broken_bottle, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/forehall) -"ef" = ( -/obj/effect/turf_decal/tile/purple/half{ - dir = 1 - }, -/obj/structure/table/reinforced, -/obj/structure/frame/machine, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/port_tarkon/developement) -"eg" = ( -/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/neutral{ - dir = 4 - }, -/obj/effect/spawner/random/trash/food_packaging, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/centerhall) -"ek" = ( -/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/confetti, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/forehall) -"eo" = ( -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ - dir = 4 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/port_tarkon/developement) -"ep" = ( -/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/neutral/half{ - dir = 8 - }, -/obj/effect/decal/cleanable/confetti, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/centerhall) -"et" = ( -/obj/structure/fluff/empty_sleeper{ - dir = 8 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon) -"eu" = ( -/obj/effect/decal/cleanable/confetti, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/observ) -"eB" = ( -/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/tile/red/half{ - dir = 8 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/secoff) -"eD" = ( -/obj/machinery/power/terminal{ - dir = 8 - }, -/obj/structure/cable, -/turf/open/floor/plating, -/area/ruin/space/has_grav/port_tarkon/power1) -"eE" = ( -/obj/structure/table/reinforced, -/obj/item/assembly/signaler, -/obj/effect/turf_decal/tile/yellow/half{ - dir = 1 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/toolstorage) -"eG" = ( -/obj/machinery/light/dim/directional/west, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/forehall) -"eI" = ( -/turf/closed/wall, -/area/ruin/space/has_grav/port_tarkon/starboardhall) -"eK" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/airalarm/directional/east, -/obj/effect/mapping_helpers/airalarm/all_access, -/obj/effect/decal/cleanable/confetti, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/starboardhall) -"eL" = ( -/obj/machinery/door/airlock/public, -/obj/machinery/door/firedoor/solid, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/observ) -"eM" = ( -/obj/structure/closet, -/obj/item/gun/energy/recharge/kinetic_accelerator, -/obj/item/storage/backpack/satchel/explorer, -/obj/item/clothing/shoes/workboots/mining, -/obj/item/t_scanner/adv_mining_scanner/lesser, -/obj/item/storage/bag/ore, -/obj/effect/turf_decal/tile/brown/half, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/mining) -"eQ" = ( -/obj/machinery/computer/atmos_control/tarkon/incinerator{ - dir = 1 - }, -/obj/machinery/airalarm/directional/south, -/obj/effect/mapping_helpers/airalarm/all_access, -/obj/effect/turf_decal/stripes{ - dir = 4 - }, -/obj/structure/cable, -/turf/open/floor/engine, -/area/ruin/space/has_grav/port_tarkon/atmos) -"eY" = ( -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, -/obj/effect/spawner/random/trash/food_packaging, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/forehall) -"eZ" = ( -/obj/machinery/atmospherics/components/unary/vent_scrubber/layer2{ - dir = 8 - }, -/turf/open/floor/engine/vacuum, -/area/ruin/space/has_grav/port_tarkon/atmos) -"fa" = ( -/obj/effect/turf_decal/tile/purple/half{ - dir = 1 - }, -/obj/machinery/computer, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/port_tarkon/developement) -"ff" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/turf_decal/tile/neutral/half{ - dir = 8 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/centerhall) -"fh" = ( -/obj/effect/turf_decal/tile/purple/half{ - dir = 1 - }, -/obj/structure/alien/egg/burst, -/obj/effect/mob_spawn/corpse/facehugger, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/port_tarkon/developement) -"fl" = ( -/obj/effect/spawner/random/trash/food_packaging, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/toolstorage) -"fp" = ( -/obj/machinery/airalarm/directional/north, -/obj/effect/mapping_helpers/airalarm/all_access, -/obj/structure/closet, -/obj/item/clothing/gloves/color/plasmaman/black, -/obj/item/clothing/gloves/color/plasmaman/black, -/obj/item/clothing/gloves/color/plasmaman/black, -/obj/item/clothing/gloves/color/plasmaman/black, -/obj/item/clothing/gloves/color/plasmaman/chief_engineer, -/obj/item/clothing/head/helmet/space/plasmaman, -/obj/item/clothing/head/helmet/space/plasmaman, -/obj/item/clothing/head/helmet/space/plasmaman, -/obj/item/clothing/head/helmet/space/plasmaman, -/obj/item/clothing/head/helmet/space/plasmaman, -/obj/item/clothing/under/plasmaman, -/obj/item/clothing/under/plasmaman, -/obj/item/clothing/under/plasmaman, -/obj/item/clothing/under/plasmaman, -/obj/item/clothing/under/plasmaman, -/obj/item/tank/internals/plasmaman/belt/full, -/obj/item/tank/internals/plasmaman/belt/full, -/obj/item/tank/internals/plasmaman/belt/full, -/obj/item/tank/internals/plasmaman/belt/full, -/obj/item/tank/internals/plasmaman/belt/full, -/obj/item/tank/internals/nitrogen/belt/full, -/obj/item/tank/internals/nitrogen/belt/full, -/obj/item/tank/internals/nitrogen/belt/full, -/obj/item/tank/internals/nitrogen/belt/full, -/obj/item/tank/internals/nitrogen/belt/full, -/obj/item/clothing/mask/breath/vox, -/obj/item/clothing/mask/breath/vox, -/obj/item/clothing/mask/breath/vox, -/obj/item/clothing/mask/breath/vox, -/obj/item/clothing/mask/breath/vox, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon) -"ft" = ( -/obj/structure/table/reinforced, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/kitchen) -"fv" = ( -/obj/machinery/power/apc/auto_name/directional/north, -/obj/effect/mapping_helpers/apc/no_charge, -/obj/effect/mapping_helpers/apc/unlocked, -/obj/structure/cable, -/obj/structure/closet/crate/radiation, -/obj/item/stack/sheet/mineral/uranium/five, -/obj/item/stack/sheet/mineral/uranium/five, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/atmos) -"fw" = ( -/obj/effect/turf_decal/stripes/asteroid/line{ - dir = 9 - }, -/turf/open/misc/asteroid/airless, -/area/solars/tarkon) -"fB" = ( -/obj/effect/spawner/structure/window/reinforced, -/turf/open/floor/plating, -/area/ruin/space/has_grav/port_tarkon/cargo) -"fG" = ( -/obj/structure/cable, -/obj/effect/decal/cleanable/confetti, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/port_tarkon/developement) -"fI" = ( -/obj/structure/closet/secure_closet/medical1, -/obj/effect/turf_decal/tile/blue/half{ - dir = 8 - }, -/obj/effect/decal/cleanable/dirt, -/obj/item/gun/medbeam/afad, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/trauma) -"fJ" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/turf_decal/loading_area, -/obj/item/broken_bottle, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/port_tarkon/developement) -"fK" = ( -/obj/effect/decal/cleanable/confetti, -/obj/effect/spawner/random/trash/food_packaging, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/forehall) -"fL" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/structure/cable, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/port_tarkon/comms) -"fP" = ( -/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/ruin/space/has_grav/port_tarkon/afthall) -"fR" = ( -/obj/machinery/atmospherics/components/unary/vent_pump/siphon/monitored/plasma_output/tarkon{ - dir = 8 - }, -/turf/open/floor/engine/plasma, -/area/ruin/space/has_grav/port_tarkon/atmos) -"fT" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/light/dim/directional/east, -/obj/effect/turf_decal/delivery/blue, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/starboardhall) -"fU" = ( -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/starboardhall) -"fV" = ( -/obj/structure/table/rolling, -/obj/item/scalpel, -/obj/item/hemostat, -/obj/item/cautery, -/obj/item/bonesetter, -/obj/item/stack/medical/suture/medicated, -/obj/item/retractor, -/obj/item/clothing/gloves/latex, -/obj/effect/turf_decal/tile/purple/half{ - dir = 8 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/port_tarkon/developement) -"ga" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/trauma) -"gb" = ( -/obj/structure/reagent_dispensers/watertank/high, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/garden) -"gd" = ( -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/trauma) -"ge" = ( -/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/yellow/half{ - dir = 1 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/power1) -"gk" = ( -/obj/structure/chair/office, -/obj/effect/turf_decal/tile/blue/half{ - dir = 8 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/port_tarkon/comms) -"gl" = ( -/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/neutral/half, -/obj/effect/spawner/random/trash/food_packaging, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/centerhall) -"gn" = ( -/obj/machinery/door/airlock/external/ruin{ - name = "Engineering External Access" - }, -/obj/effect/mapping_helpers/airlock/cyclelink_helper{ - dir = 1 - }, -/obj/structure/cable, -/obj/effect/mapping_helpers/airlock/access/all/tarkon/general, -/turf/open/floor/plating, -/area/ruin/space/has_grav/port_tarkon/power1) -"go" = ( -/obj/machinery/vending/hydronutrients, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/garden) -"gp" = ( -/obj/effect/spawner/structure/window/reinforced, -/turf/open/floor/plating, -/area/ruin/space/has_grav/port_tarkon/atmos) -"gs" = ( -/obj/machinery/door/airlock/public/glass/incinerator/tarkon_interior, -/obj/machinery/airlock_controller/incinerator_tarkon{ - pixel_x = 40; - pixel_y = 5 - }, -/obj/effect/mapping_helpers/airlock/locked, -/obj/effect/mapping_helpers/airlock/cyclelink_helper, -/obj/effect/turf_decal/stripes{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/visible/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/dark/visible, -/turf/open/floor/engine/vacuum, -/area/ruin/space/has_grav/port_tarkon/atmos) -"gt" = ( -/obj/structure/table/reinforced, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/port_tarkon/developement) -"gu" = ( -/obj/structure/cable, -/obj/machinery/power/apc/auto_name/directional/west, -/obj/effect/mapping_helpers/apc/no_charge, -/obj/effect/mapping_helpers/apc/unlocked, -/obj/effect/turf_decal/tile/purple/half{ - dir = 8 - }, -/obj/effect/spawner/random/trash/food_packaging, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/port_tarkon/developement) -"gv" = ( -/obj/structure/table/reinforced, -/obj/machinery/cell_charger, -/obj/item/stock_parts/cell/high/empty, -/obj/effect/turf_decal/tile/yellow/half{ - dir = 8 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/toolstorage) -"gy" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/decal/cleanable/confetti, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/mining) -"gA" = ( -/obj/machinery/door/airlock/mining/glass, -/obj/machinery/door/firedoor/heavy/closed, -/obj/effect/turf_decal/sand/plating, -/obj/effect/mapping_helpers/airlock/access/all/tarkon/general, -/turf/open/misc/asteroid, -/area/ruin/space/has_grav/port_tarkon/mining) -"gD" = ( -/obj/effect/spawner/structure/window/reinforced, -/turf/open/floor/plating, -/area/ruin/space/has_grav/port_tarkon/secoff) -"gE" = ( -/obj/structure/chair/wood{ - dir = 1 - }, -/obj/machinery/airalarm/directional/east, -/obj/effect/mapping_helpers/airalarm/all_access, -/obj/effect/decal/cleanable/confetti, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/observ) -"gJ" = ( -/obj/effect/spawner/structure/window/reinforced, -/turf/open/floor/plating, -/area/ruin/space/has_grav/port_tarkon/garden) -"gN" = ( -/obj/effect/turf_decal/tile/brown/half{ - dir = 4 - }, -/obj/structure/chair/sofa/corp/left{ - dir = 8 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/storage) -"gP" = ( -/obj/structure/table/reinforced, -/obj/item/folder/blue, -/obj/item/folder, -/obj/effect/turf_decal/tile/brown/half{ - dir = 8 - }, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/cargo) -"gS" = ( -/obj/effect/turf_decal/tile/brown/half{ - dir = 4 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/mining) -"gW" = ( -/obj/machinery/computer{ - desc = "A computer long since rendered non-functional due to lack of maintenance. Spitting out error messages."; - name = "Broken Computer" - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/port_tarkon/comms) -"gX" = ( -/obj/structure/cable, -/obj/effect/turf_decal/stripes/asteroid/line, -/turf/open/misc/asteroid/airless, -/area/solars/tarkon) -"ha" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/cable, -/obj/effect/decal/cleanable/confetti, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/trauma) -"hf" = ( -/obj/machinery/power/smes, -/obj/structure/cable, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/port_tarkon/atmos) -"hi" = ( -/obj/machinery/firealarm/directional/north, -/obj/effect/spawner/random/trash/food_packaging, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/atmos) -"hj" = ( -/turf/closed/wall, -/area/ruin/space/has_grav/port_tarkon/kitchen) -"hl" = ( -/obj/structure/cable, -/obj/machinery/light_switch/directional/west, -/obj/effect/turf_decal/tile/brown/half{ - dir = 8 - }, -/obj/effect/spawner/random/trash/food_packaging, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/mining) -"hm" = ( -/obj/structure/closet, -/obj/effect/decal/cleanable/dirt, -/obj/item/clothing/shoes/workboots/mining, -/obj/item/clothing/shoes/winterboots, -/obj/item/clothing/shoes/jackboots, -/obj/item/clothing/under/rank/cargo/tech/nova/utility, -/obj/item/clothing/under/rank/cargo/tech/nova/gorka, -/obj/item/storage/backpack/duffelbag/explorer, -/obj/item/storage/backpack/explorer, -/obj/item/storage/backpack/satchel/explorer, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon) -"hr" = ( -/obj/machinery/door/airlock/public/glass{ - name = "Crew Storage"; - state_open = 1 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/cable, -/obj/machinery/door/firedoor/solid, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon) -"hu" = ( -/obj/effect/turf_decal/caution/stand_clear, -/turf/open/floor/iron/airless, -/area/ruin/space/has_grav/port_tarkon/storage) -"hw" = ( -/obj/machinery/light/dim/directional/west, -/obj/structure/table/reinforced, -/obj/item/clothing/gloves/color/yellow, -/obj/effect/turf_decal/tile/yellow/half{ - dir = 8 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/toolstorage) -"hy" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/cable, -/obj/item/broken_bottle, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/porthall) -"hz" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/decal/cleanable/confetti, -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/effect/spawner/random/trash/food_packaging, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/porthall) -"hA" = ( -/obj/machinery/door/airlock/public/glass{ - name = "Port Primary Hallway" - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/door/firedoor/solid, -/obj/structure/cable, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/porthall) -"hB" = ( -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, -/obj/item/broken_bottle, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/forehall) -"hE" = ( -/obj/structure/table, -/obj/item/storage/medkit/regular, -/obj/item/storage/medkit/regular, -/obj/machinery/light/dim/directional/east, -/obj/effect/turf_decal/tile/blue/half{ - dir = 4 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/trauma) -"hH" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/cable, -/obj/effect/decal/cleanable/dirt, -/obj/machinery/button/door{ - id = "ptobservatory"; - name = "shutter controls"; - pixel_y = -32 - }, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/observ) -"hL" = ( -/obj/machinery/computer{ - desc = "A computer long since rendered non-functional due to lack of maintenance. Spitting out error messages."; - dir = 1; - name = "Broken Computer" - }, -/obj/effect/turf_decal/tile/blue/anticorner{ - dir = 8 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/port_tarkon/comms) -"hM" = ( -/obj/machinery/atmospherics/components/unary/portables_connector/visible{ - dir = 8 - }, -/obj/effect/turf_decal/tile/blue/fourcorners, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/atmos) -"hN" = ( -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ - dir = 8 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/porthall) -"hP" = ( -/obj/effect/turf_decal/stripes{ - dir = 1 - }, -/obj/effect/decal/cleanable/dirt, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden, -/turf/open/floor/engine, -/area/ruin/space/has_grav/port_tarkon/atmos) -"hQ" = ( -/obj/machinery/door/airlock/mining, -/obj/machinery/door/firedoor/solid, -/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/ruin/space/has_grav/port_tarkon/cargo) -"hR" = ( -/obj/machinery/atmospherics/miner/carbon_dioxide, -/turf/open/floor/engine/co2, -/area/ruin/space/has_grav/port_tarkon/atmos) -"hS" = ( -/obj/effect/turf_decal/tile/brown/anticorner{ - dir = 4 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/mining) -"hV" = ( -/obj/structure/closet/secure_closet/freezer/meat/open, -/turf/open/floor/iron/freezer, -/area/ruin/space/has_grav/port_tarkon/kitchen) -"hY" = ( -/obj/machinery/door/window/brigdoor/security/cell/right/directional/south{ - req_access = list("tarkon") - }, -/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, -/area/ruin/space/has_grav/port_tarkon/secoff) -"hZ" = ( -/obj/machinery/power/smes/engineering{ - charge = 0; - name = "backup power storage unit" - }, -/obj/structure/cable, -/turf/open/floor/plating, -/area/ruin/space/has_grav/port_tarkon/power1) -"ia" = ( -/obj/structure/table/reinforced, -/obj/item/storage/toolbox/maint_kit, -/obj/item/stack/sheet/iron/twenty, -/obj/effect/turf_decal/tile/red/half{ - dir = 1 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/secoff) -"ik" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/effect/turf_decal/tile/neutral/anticorner{ - dir = 4 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/centerhall) -"in" = ( -/obj/item/circuitboard/machine/ore_silo, -/obj/structure/frame/machine, -/obj/effect/turf_decal/tile/brown/anticorner{ - dir = 1 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/mining) -"ip" = ( -/obj/machinery/door/airlock/mining/glass, -/obj/effect/turf_decal/sand/plating, -/obj/effect/turf_decal/sand/plating, -/obj/effect/mapping_helpers/airlock/cyclelink_helper{ - dir = 1 - }, -/obj/effect/mapping_helpers/airlock/access/all/tarkon/general, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/mining) -"iq" = ( -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/white, -/area/ruin/space/has_grav/port_tarkon/centerhall) -"iu" = ( -/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, -/obj/effect/spawner/random/trash/food_packaging, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/mining) -"iv" = ( -/obj/machinery/atmospherics/components/unary/passive_vent/layer2{ - dir = 4 - }, -/turf/open/misc/asteroid/airless, -/area/ruin/space/has_grav) -"iw" = ( -/obj/effect/turf_decal/stripes{ - dir = 1 - }, -/obj/machinery/light/dim/directional/west, -/obj/structure/window/reinforced/spawner/directional/north, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/visible/layer2{ - dir = 6 - }, -/obj/structure/closet/radiation, -/obj/item/clothing/head/utility/radiation, -/obj/item/clothing/suit/utility/radiation, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/port_tarkon/atmos) -"iy" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/cafeteria, -/area/ruin/space/has_grav/port_tarkon/kitchen) -"iA" = ( -/obj/machinery/door/airlock/multi_tile/public/glass, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/door/firedoor/solid, -/obj/structure/cable, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/trauma) -"iB" = ( -/obj/effect/turf_decal/stripes/asteroid/line{ - dir = 1 - }, -/turf/open/misc/asteroid/airless, -/area/ruin/space/has_grav) -"iC" = ( -/obj/machinery/firealarm/directional/east, -/obj/effect/turf_decal/tile/brown/half{ - dir = 4 - }, -/obj/effect/mob_spawn/ghost_role/human/tarkon{ - dir = 8 - }, -/obj/structure/chair/sofa/corp{ - dir = 8 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/storage) -"iG" = ( -/obj/machinery/atmospherics/components/binary/pump/off/general{ - dir = 4 - }, -/obj/effect/turf_decal/tile/red/fourcorners{ - color = "#DE3A3A" - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/atmos) -"iI" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/turf/open/misc/asteroid/airless, -/area/ruin/space/has_grav) -"iJ" = ( -/obj/machinery/vending/hydroseeds, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/garden) -"iM" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/light/directional/north, -/obj/machinery/power/apc/auto_name/directional/north, -/obj/effect/mapping_helpers/apc/no_charge, -/obj/effect/mapping_helpers/apc/unlocked, -/obj/effect/turf_decal/tile/yellow/half{ - dir = 1 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/power1) -"iO" = ( -/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/neutral{ - dir = 8 - }, -/obj/effect/decal/cleanable/confetti, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/centerhall) -"iT" = ( -/obj/machinery/door/airlock/public/glass{ - name = "Starboard Primary Hallway" - }, -/obj/machinery/door/firedoor/solid, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/starboardhall) -"iU" = ( -/obj/structure/window/reinforced/spawner/directional/north, -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ - dir = 1 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/port_tarkon/developement) -"jc" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/item/broken_bottle, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/porthall) -"jg" = ( -/obj/machinery/door/airlock/public, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/cable, -/obj/machinery/door/firedoor/solid, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/porthall) -"jj" = ( -/obj/machinery/atmospherics/components/unary/outlet_injector/monitored/nitrogen_input/tarkon{ - dir = 4 - }, -/turf/open/floor/engine/n2, -/area/ruin/space/has_grav/port_tarkon/atmos) -"jn" = ( -/turf/closed/mineral/random/high_chance, -/area/awaymission) -"jo" = ( -/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, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/mining) -"jr" = ( -/obj/effect/decal/cleanable/confetti, -/obj/item/broken_bottle, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/afthall) -"jv" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/effect/decal/cleanable/dirt, -/obj/machinery/button/door{ - id = "ptporthall"; - name = "shutter controls"; - pixel_x = -31 - }, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/porthall) -"jz" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/centerhall) -"jA" = ( -/obj/machinery/atmospherics/components/binary/pump, -/obj/effect/decal/cleanable/confetti, -/obj/item/broken_bottle, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/centerhall) -"jB" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/decal/cleanable/confetti, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/atmos) -"jC" = ( -/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{ - dir = 4 - }, -/obj/effect/spawner/random/trash/food_packaging, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/starboardhall) -"jE" = ( -/obj/structure/window/reinforced/spawner/directional/north, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/port_tarkon/developement) -"jF" = ( -/obj/structure/chair/wood, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/observ) -"jG" = ( -/obj/effect/turf_decal/stripes{ - dir = 1 - }, -/obj/structure/cable, -/obj/machinery/power/terminal{ - dir = 4 - }, -/obj/effect/decal/cleanable/confetti, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/port_tarkon/atmos) -"jJ" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/plating, -/area/ruin/space/has_grav/port_tarkon/atmos) -"jM" = ( -/obj/effect/turf_decal/tile/purple/half{ - dir = 4 - }, -/obj/machinery/airalarm/directional/east, -/obj/effect/mapping_helpers/airalarm/all_access, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/port_tarkon/developement) -"jN" = ( -/obj/machinery/airalarm/directional/north, -/obj/effect/mapping_helpers/airalarm/all_access, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/forehall) -"jO" = ( -/obj/machinery/atmospherics/components/unary/passive_vent{ - dir = 4; - name = "killroom vent" - }, -/obj/effect/turf_decal/sand/plating, -/turf/open/floor/plating/airless, -/area/ruin/space/has_grav) -"jP" = ( -/obj/machinery/door/airlock/maintenance_hatch, -/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/ruin/space/has_grav/port_tarkon/centerhall) -"jU" = ( -/obj/effect/turf_decal/tile/brown/anticorner, -/obj/structure/rack/shelf, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/storage) -"jV" = ( -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ - dir = 4 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/cargo) -"jW" = ( -/turf/open/floor/iron/airless, -/area/ruin/space/has_grav/port_tarkon/storage) -"jY" = ( -/obj/structure/rack, -/obj/item/clothing/head/helmet, -/obj/item/clothing/head/helmet, -/obj/effect/turf_decal/tile/red/half{ - dir = 1 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/secoff) -"jZ" = ( -/turf/open/floor/plating, -/area/ruin/space/has_grav/port_tarkon/forehall) -"ka" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/firealarm/directional/east, -/obj/item/broken_bottle, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/starboardhall) -"kb" = ( -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, -/obj/effect/decal/cleanable/confetti, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/centerhall) -"kc" = ( -/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/tile/neutral{ - dir = 4 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, -/obj/effect/decal/cleanable/confetti, -/obj/effect/spawner/random/trash/food_packaging, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/centerhall) -"kd" = ( -/obj/item/wrench, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/atmos) -"ke" = ( -/obj/machinery/computer{ - desc = "A computer long since rendered non-functional due to lack of maintenance. Spitting out error messages."; - dir = 1; - name = "Broken Computer" - }, -/obj/effect/turf_decal/tile/blue/anticorner{ - dir = 8 - }, -/obj/item/paper/fluff/ruins/tarkon/vaulter, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/port_tarkon/comms) -"kf" = ( -/turf/closed/wall, -/area/ruin/space/has_grav/port_tarkon/forehall) -"kh" = ( -/obj/effect/turf_decal/sand, -/obj/machinery/light/dim/directional/east, -/obj/machinery/airalarm/directional/east, -/obj/effect/mapping_helpers/airalarm/all_access, -/obj/effect/turf_decal/tile/brown/half{ - dir = 4 - }, -/obj/effect/decal/cleanable/confetti, -/obj/effect/spawner/random/trash/food_packaging, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/mining) -"kk" = ( -/obj/structure/cable, -/obj/machinery/power/apc/auto_name/directional/north, -/obj/effect/mapping_helpers/apc/no_charge, -/obj/effect/mapping_helpers/apc/unlocked, -/turf/open/floor/plating, -/area/ruin/space/has_grav/port_tarkon/afthall) -"ko" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/turf_decal/tile/purple/half{ - dir = 1 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/port_tarkon/developement) -"kp" = ( -/obj/item/tape/ruins/tarkon/celebration, -/obj/structure/closet/crate/bin, -/obj/effect/spawner/random/trash/food_packaging, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/observ) -"kq" = ( -/obj/effect/turf_decal/tile/blue/half{ - dir = 1 - }, -/obj/machinery/vending/cigarette, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/port_tarkon/comms) -"kr" = ( -/obj/machinery/atmospherics/components/binary/pump/off/general{ - dir = 4 - }, -/obj/effect/turf_decal/tile/blue/fourcorners, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/atmos) -"ku" = ( -/obj/structure/bed, -/obj/effect/turf_decal/tile/blue/anticorner{ - dir = 4 - }, -/obj/effect/mob_spawn/ghost_role/human/tarkon/med{ - dir = 8 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/trauma) -"kx" = ( -/obj/structure/window/reinforced/spawner/directional/south, -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/port_tarkon/developement) -"kA" = ( -/obj/structure/fence, -/turf/open/misc/asteroid/airless, -/area/ruin/space/has_grav) -"kD" = ( -/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{ - dir = 4 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/cargo) -"kF" = ( -/obj/structure/fence/corner, -/turf/open/misc/asteroid/airless, -/area/ruin/space/has_grav) -"kG" = ( -/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/ruin/space/has_grav/port_tarkon/forehall) -"kI" = ( -/obj/structure/table/reinforced, -/obj/item/reagent_containers/condiment/saltshaker{ - pixel_x = -2 - }, -/obj/item/reagent_containers/condiment/saltshaker{ - pixel_x = -2 - }, -/obj/item/reagent_containers/condiment/peppermill{ - pixel_x = 2; - pixel_y = 2 - }, -/obj/item/reagent_containers/condiment/peppermill{ - pixel_x = 2; - pixel_y = 1 - }, -/obj/structure/cable, -/obj/machinery/power/apc/auto_name/directional/west, -/obj/effect/mapping_helpers/apc/no_charge, -/obj/effect/mapping_helpers/apc/unlocked, -/turf/open/floor/iron/cafeteria, -/area/ruin/space/has_grav/port_tarkon/kitchen) -"kJ" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/turf_decal/tile/yellow, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/toolstorage) -"kN" = ( -/obj/item/broken_bottle, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/cafeteria, -/area/ruin/space/has_grav/port_tarkon/kitchen) -"kO" = ( -/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/neutral/anticorner{ - dir = 1 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/centerhall) -"kR" = ( -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ - dir = 4 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/secoff) -"kS" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 8 - }, -/obj/effect/turf_decal/stripes/line{ - dir = 4 - }, -/obj/machinery/door/poddoor/incinerator_atmos_aux, -/turf/open/floor/engine/vacuum, -/area/ruin/space/has_grav/port_tarkon/atmos) -"kT" = ( -/obj/machinery/light_switch/directional/west, -/obj/effect/turf_decal/tile/purple/half{ - dir = 8 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/port_tarkon/developement) -"kU" = ( -/obj/structure/closet/crate, -/obj/effect/spawner/random/decoration/carpet, -/obj/effect/spawner/random/decoration/carpet, -/obj/effect/spawner/random/decoration/carpet, -/turf/open/floor/plating, -/area/ruin/space/has_grav/port_tarkon/forehall) -"kW" = ( -/obj/structure/table, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/item/megaphone, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/port_tarkon/comms) -"kX" = ( -/obj/structure/bed/maint, -/obj/structure/safe/floor, -/obj/item/mod/module/armor_booster/retractplates{ - desc = "A complex set of actuators, micro-seals and a simple guide on how to install it, This... \"Modification\" allows the plating around the joints to retract, giving minor protection and a bit better mobility. There also seems to be a small, wireless microphone... how odd." - }, -/obj/item/gun/ballistic/shotgun/doublebarrel, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/secoff) -"ld" = ( -/obj/machinery/atmospherics/components/unary/vent_pump/siphon/monitored/nitrous_output/tarkon{ - dir = 8 - }, -/turf/open/floor/engine/n2o, -/area/ruin/space/has_grav/port_tarkon/atmos) -"le" = ( -/obj/structure/cable, -/obj/effect/turf_decal/tile/brown/half{ - dir = 8 - }, -/obj/item/broken_bottle, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/mining) -"li" = ( -/obj/structure/sign/warning/explosives, -/turf/closed/wall, -/area/ruin/space/has_grav/port_tarkon/developement) -"lj" = ( -/obj/machinery/door/window/brigdoor/left/directional/north, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/port_tarkon/developement) -"lp" = ( -/obj/machinery/suit_storage_unit/engine, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/atmos) -"lr" = ( -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ - dir = 8 - }, -/obj/structure/chair/wood, -/obj/effect/decal/cleanable/confetti, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/observ) -"ls" = ( -/obj/machinery/door/window/brigdoor/security/cell{ - req_access = list("tarkon") - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/secoff) -"lt" = ( -/obj/machinery/light_switch/directional/east, -/obj/effect/turf_decal/tile/yellow/anticorner, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/toolstorage) -"lu" = ( -/obj/structure/cable, -/obj/effect/decal/cleanable/confetti, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/atmos) -"lw" = ( -/obj/effect/turf_decal/tile/purple/anticorner, -/obj/structure/table/rolling, -/obj/item/clothing/gloves/latex, -/obj/item/circular_saw, -/obj/item/scalpel, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/port_tarkon/developement) -"lx" = ( -/obj/machinery/door/airlock/public/glass{ - name = "Aft Primary Hallway" - }, -/obj/machinery/door/firedoor/solid, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/afthall) -"ly" = ( -/obj/effect/spawner/structure/window/reinforced, -/turf/open/floor/plating, -/area/ruin/space/has_grav/port_tarkon) -"lA" = ( -/obj/structure/closet/crate/radiation, -/obj/structure/cable, -/obj/item/stack/sheet/mineral/uranium/five, -/obj/item/stack/sheet/mineral/uranium/five, -/obj/item/stack/sheet/mineral/uranium/five, -/turf/open/floor/plating, -/area/ruin/space/has_grav/port_tarkon/power1) -"lC" = ( -/obj/item/broken_bottle, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon) -"lD" = ( -/obj/machinery/door/airlock/wood{ - id_tag = "ptdorm4"; - name = "Couples Suite" - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/door/firedoor/solid, -/turf/open/floor/wood/large, -/area/ruin/space/has_grav/port_tarkon/dorms) -"lF" = ( -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ - dir = 4 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/port_tarkon/developement) -"lH" = ( -/obj/structure/grille, -/turf/closed/wall/r_wall, -/area/ruin/space/has_grav/port_tarkon/atmos) -"lI" = ( -/obj/effect/turf_decal/stripes{ - dir = 1 - }, -/obj/machinery/atmospherics/components/unary/portables_connector/visible{ - dir = 8 - }, -/obj/machinery/portable_atmospherics/canister/oxygen, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/port_tarkon/atmos) -"lK" = ( -/obj/structure/closet/firecloset/full, -/turf/open/floor/plating, -/area/ruin/space/has_grav/port_tarkon/power1) -"lQ" = ( -/obj/structure/cable, -/obj/machinery/power/terminal{ - dir = 4 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/port_tarkon/atmos) -"lR" = ( -/obj/machinery/door/airlock/multi_tile/public/glass{ - dir = 8 - }, -/obj/machinery/door/firedoor/solid, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/garden) -"lS" = ( -/obj/structure/closet, -/obj/effect/decal/cleanable/dirt, -/obj/item/clothing/shoes/workboots/mining, -/obj/item/clothing/shoes/winterboots, -/obj/item/clothing/shoes/jackboots, -/obj/item/clothing/under/rank/medical/doctor/nova/utility, -/obj/item/clothing/under/rank/medical/doctor/nova/utility, -/obj/item/storage/backpack/duffelbag/med, -/obj/item/storage/backpack/medic, -/obj/item/storage/backpack/satchel/med, -/obj/item/storage/backpack/satchel/chem, -/obj/item/storage/backpack/satchel/vir, -/obj/item/storage/backpack/virology, -/obj/item/storage/backpack/duffelbag/virology, -/obj/item/storage/backpack/duffelbag/chemistry, -/obj/item/storage/backpack/chemistry, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon) -"lT" = ( -/obj/item/flashlight/lantern, -/obj/item/flashlight/lantern, -/obj/item/flashlight/lantern, -/obj/item/flashlight/lantern, -/obj/structure/table, -/obj/machinery/light/warm/directional/south, -/obj/structure/cable, -/obj/machinery/power/apc/auto_name/directional/south, -/obj/effect/mapping_helpers/apc/no_charge, -/obj/effect/mapping_helpers/apc/unlocked, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon) -"lU" = ( -/obj/machinery/firealarm/directional/west, -/obj/effect/turf_decal/tile/yellow/half{ - dir = 8 - }, -/obj/effect/decal/cleanable/confetti, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/toolstorage) -"lV" = ( -/obj/effect/spawner/structure/window/reinforced/no_firelock, -/obj/machinery/atmospherics/pipe/layer_manifold/brown/hidden{ - dir = 4 - }, -/turf/open/floor/plating, -/area/ruin/space/has_grav/port_tarkon/atmos) -"lW" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/secoff) -"lZ" = ( -/obj/structure/closet/emcloset, -/obj/effect/turf_decal/tile/brown/anticorner{ - dir = 4 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/mining) -"mc" = ( -/obj/structure/window/reinforced/spawner/directional/north, -/obj/effect/turf_decal/tile/red/fourcorners{ - color = "#DE3A3A" - }, -/obj/machinery/computer/atmos_control/tarkon/nitrogen_tank{ - dir = 4 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/atmos) -"md" = ( -/obj/machinery/light/dim/directional/south, -/obj/effect/turf_decal/tile/brown/anticorner, -/obj/structure/rack/shelf, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/storage) -"mi" = ( -/obj/structure/sign/warning/biohazard, -/turf/closed/wall, -/area/ruin/space/has_grav/port_tarkon/toolstorage) -"ml" = ( -/obj/structure/cable, -/obj/machinery/firealarm/directional/east, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/observ) -"mo" = ( -/obj/structure/table/reinforced, -/obj/item/stack/sheet/iron/fifty, -/obj/item/stack/sheet/glass/fifty, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/atmos) -"mq" = ( -/obj/machinery/firealarm/directional/east, -/obj/effect/decal/cleanable/confetti, -/obj/effect/spawner/random/trash/food_packaging, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/porthall) -"mr" = ( -/obj/machinery/portable_atmospherics/scrubber, -/turf/open/floor/plating, -/area/ruin/space/has_grav/port_tarkon/afthall) -"mt" = ( -/obj/structure/closet/crate, -/obj/item/transfer_valve, -/obj/item/transfer_valve, -/turf/open/floor/plating, -/area/ruin/space/has_grav/port_tarkon/forehall) -"mu" = ( -/obj/machinery/light/dim/directional/west, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/afthall) -"my" = ( -/obj/structure/reagent_dispensers/fueltank/large, -/obj/effect/turf_decal/tile/yellow/half, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/power1) -"mC" = ( -/obj/machinery/door/airlock/public/glass{ - name = "Cryogenics Room" - }, -/obj/machinery/door/firedoor/solid, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon) -"mD" = ( -/obj/structure/window/reinforced/tinted/spawner/directional/south, -/obj/effect/decal/cleanable/confetti, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/trauma) -"mG" = ( -/obj/effect/turf_decal/tile/brown/anticorner{ - dir = 8 - }, -/obj/structure/rack/shelf, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/storage) -"mH" = ( -/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/tile/neutral/half{ - dir = 1 - }, -/obj/effect/spawner/random/trash/food_packaging, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/centerhall) -"mK" = ( -/obj/machinery/computer{ - desc = "A computer long since rendered non-functional due to lack of maintenance. Spitting out error messages."; - dir = 1; - name = "Broken Computer" - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/port_tarkon/comms) -"mM" = ( -/obj/structure/table/optable, -/obj/effect/turf_decal/tile/purple/anticorner{ - dir = 8 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/port_tarkon/developement) -"mO" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/cafeteria, -/area/ruin/space/has_grav/port_tarkon/kitchen) -"mT" = ( -/obj/structure/cable, -/obj/machinery/door/airlock/public/glass{ - name = "Starboard Primary Hallway" - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/door/firedoor/solid, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/starboardhall) -"mV" = ( -/obj/machinery/door/window/right/directional/east, -/obj/machinery/door/window/right/directional/west, -/obj/structure/table/reinforced, -/obj/machinery/door/firedoor/solid, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/mining) -"mX" = ( -/obj/item/broken_bottle, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/port_tarkon/comms) -"nb" = ( -/obj/machinery/door/airlock/public/glass{ - name = "Starboard Primary Hallway" - }, -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/door/firedoor/solid, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/starboardhall) -"nc" = ( -/obj/structure/sink/directional/south, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/cafeteria, -/area/ruin/space/has_grav/port_tarkon/kitchen) -"ng" = ( -/turf/closed/wall, -/area/ruin/space/has_grav/port_tarkon/storage) -"nh" = ( -/obj/structure/window/reinforced/tinted/spawner/directional/south, -/obj/item/broken_bottle, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/port_tarkon/developement) -"nk" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/turf_decal/tile/red/half, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/secoff) -"nm" = ( -/obj/machinery/atmospherics/miner/nitrogen, -/turf/open/floor/engine/n2, -/area/ruin/space/has_grav/port_tarkon/atmos) -"no" = ( -/obj/effect/turf_decal/tile/purple/half, -/obj/structure/table/optable, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/port_tarkon/developement) -"nt" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/item/broken_bottle, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/mining) -"nu" = ( -/obj/machinery/light/dim/directional/south, -/obj/effect/turf_decal/tile/blue/half, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/trauma) -"nx" = ( -/obj/effect/turf_decal/sand/plating, -/turf/open/floor/plating/airless, -/area/ruin/space/has_grav) -"nz" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/decal/cleanable/confetti, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/storage) -"nF" = ( -/obj/structure/closet/crate/engineering, -/obj/item/stack/sheet/plasteel/fifty, -/obj/item/stack/sheet/rglass{ - amount = 50 - }, -/obj/item/stack/sheet/mineral/plasma/thirty, -/obj/machinery/light_switch/directional/north, -/obj/effect/turf_decal/tile/brown/anticorner{ - dir = 1 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/storage) -"nL" = ( -/obj/item/stack/tile/carpet/neon/simple/purple/nodots/sixty, -/turf/open/floor/plating, -/area/ruin/space/has_grav/port_tarkon/cargo) -"nP" = ( -/turf/closed/wall, -/area/ruin/space/has_grav/port_tarkon/developement) -"nS" = ( -/obj/effect/turf_decal/tile/purple/half{ - dir = 1 - }, -/obj/effect/spawner/structure/window/reinforced, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/port_tarkon/developement) -"nW" = ( -/obj/structure/table/reinforced, -/obj/item/restraints/handcuffs, -/obj/item/restraints/handcuffs, -/obj/effect/turf_decal/tile/red/anticorner{ - dir = 4 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/secoff) -"nZ" = ( -/obj/structure/closet/crate/engineering/electrical, -/obj/item/solar_assembly, -/obj/item/solar_assembly, -/obj/item/solar_assembly, -/obj/item/solar_assembly, -/obj/item/solar_assembly, -/obj/item/solar_assembly, -/obj/item/solar_assembly, -/obj/item/solar_assembly, -/obj/item/solar_assembly, -/obj/item/solar_assembly, -/obj/item/solar_assembly, -/obj/item/solar_assembly, -/obj/item/solar_assembly, -/obj/item/solar_assembly, -/obj/item/solar_assembly, -/obj/item/solar_assembly, -/obj/item/solar_assembly, -/turf/open/floor/plating, -/area/ruin/space/has_grav/port_tarkon/forehall) -"oc" = ( -/obj/effect/turf_decal/tile/purple/half{ - dir = 1 - }, -/obj/structure/frame/computer, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/port_tarkon/developement) -"oe" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/cable, -/obj/machinery/light/dim/directional/west, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/porthall) -"of" = ( -/obj/effect/spawner/structure/window/reinforced/no_firelock, -/obj/machinery/door/poddoor/shutters{ - id = "ptafthall" - }, -/turf/open/floor/plating, -/area/ruin/space/has_grav/port_tarkon/afthall) -"og" = ( -/obj/structure/table/reinforced, -/obj/item/pipe_dispenser, -/obj/item/storage/belt/utility/full, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/atmos) -"om" = ( -/obj/effect/turf_decal/vg_decals/atmos/carbon_dioxide, -/obj/machinery/light/small/directional/east, -/obj/machinery/air_sensor/tarkon/carbon_tank{ - pixel_x = 26 - }, -/turf/open/floor/engine/co2, -/area/ruin/space/has_grav/port_tarkon/atmos) -"on" = ( -/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/neutral{ - dir = 8 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, -/obj/effect/spawner/random/trash/food_packaging, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/centerhall) -"op" = ( -/obj/effect/turf_decal/tile/brown/half{ - dir = 8 - }, -/obj/effect/spawner/random/trash/food_packaging, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/mining) -"oq" = ( -/obj/machinery/processor, -/turf/open/floor/iron/cafeteria, -/area/ruin/space/has_grav/port_tarkon/kitchen) -"os" = ( -/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, -/area/ruin/space/has_grav/port_tarkon/mining) -"ot" = ( -/obj/effect/turf_decal/sand/plating, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/mining) -"ov" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/decal/cleanable/vomit/old, -/turf/open/floor/carpet/black, -/area/ruin/space/has_grav/port_tarkon/dorms) -"ow" = ( -/obj/item/broken_bottle, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/porthall) -"oy" = ( -/obj/structure/safe/floor, -/obj/structure/table, -/obj/item/stack/spacecash/c10000, -/obj/item/stack/spacecash/c10000, -/obj/item/stack/spacecash/c10000, -/obj/item/stack/spacecash/c10000, -/obj/item/stack/spacecash/c10000, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/cargo) -"oC" = ( -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ - dir = 1 - }, -/obj/effect/turf_decal/tile/neutral, -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/centerhall) -"oE" = ( -/obj/machinery/button/door{ - id = "tarkonouter"; - name = "Exterior Shutter Control"; - pixel_x = -6 - }, -/obj/machinery/button/door{ - id = "tarkoninner"; - name = "Inner Shutter Control"; - pixel_x = 6 - }, -/turf/closed/wall, -/area/ruin/space/has_grav/port_tarkon/storage) -"oG" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/cable, -/obj/effect/decal/cleanable/confetti, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/observ) -"oH" = ( -/obj/structure/chair/office, -/obj/effect/turf_decal/tile/blue{ - dir = 8 - }, -/obj/item/broken_bottle, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/port_tarkon/comms) -"oI" = ( -/obj/machinery/atmospherics/components/unary/vent_pump/siphon/monitored/oxygen_output/tarkon{ - dir = 4 - }, -/turf/open/floor/engine/o2, -/area/ruin/space/has_grav/port_tarkon/atmos) -"oK" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/decal/cleanable/confetti, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/toolstorage) -"oL" = ( -/turf/open/floor/plating, -/area/ruin/space/has_grav/port_tarkon/afthall) -"oN" = ( -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/centerhall) -"oQ" = ( -/obj/structure/window/reinforced/spawner/directional/north, -/obj/effect/turf_decal/tile/dark/fourcorners, -/obj/machinery/computer/atmos_control/tarkon/carbon_tank{ - dir = 8 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/atmos) -"oS" = ( -/obj/structure/chair/office, -/obj/effect/turf_decal/tile/blue{ - dir = 8 - }, -/obj/effect/spawner/random/trash/food_packaging, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/port_tarkon/comms) -"oV" = ( -/obj/effect/decal/cleanable/confetti, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon) -"pa" = ( -/obj/machinery/door/airlock/research/glass, -/obj/effect/mapping_helpers/airlock/access/all/tarkon/general, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/port_tarkon/developement) -"pc" = ( -/obj/effect/turf_decal/bot, -/obj/effect/decal/cleanable/confetti, -/obj/effect/spawner/random/trash/food_packaging, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/plating, -/area/ruin/space/has_grav/port_tarkon/atmos) -"pd" = ( -/obj/machinery/griddle, -/turf/open/floor/iron/cafeteria, -/area/ruin/space/has_grav/port_tarkon/kitchen) -"pf" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/light_switch/directional/east, -/obj/effect/turf_decal/tile/yellow/anticorner{ - dir = 4 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/power1) -"ph" = ( -/obj/structure/filingcabinet, -/obj/effect/turf_decal/tile/red/half{ - dir = 1 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/secoff) -"pj" = ( -/obj/machinery/light/dim/directional/east, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/porthall) -"pl" = ( -/obj/structure/table, -/obj/item/stack/spacecash/c200, -/obj/item/stack/spacecash/c200, -/obj/item/stack/spacecash/c200, -/obj/item/stack/spacecash/c200, -/obj/item/stack/spacecash/c200, -/obj/item/stack/spacecash/c200, -/obj/item/stack/spacecash/c200, -/obj/item/stack/spacecash/c200, -/obj/item/stack/spacecash/c200, -/obj/item/stack/spacecash/c200, -/obj/effect/turf_decal/tile/brown/half, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/cargo) -"po" = ( -/obj/structure/sink/kitchen/directional/south, -/obj/effect/spawner/random/trash/food_packaging, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/cafeteria, -/area/ruin/space/has_grav/port_tarkon/kitchen) -"ps" = ( -/turf/open/floor/plating, -/area/ruin/space/has_grav/port_tarkon/power1) -"pt" = ( -/obj/structure/table/reinforced, -/obj/item/stack/sheet/iron/fifty, -/obj/effect/turf_decal/tile/yellow/anticorner, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/toolstorage) -"pv" = ( -/obj/item/crowbar, -/obj/item/crowbar, -/obj/item/crowbar, -/obj/structure/table, -/obj/machinery/light/warm/directional/south, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon) -"pw" = ( -/obj/structure/table, -/obj/item/paper/crumpled, -/obj/effect/turf_decal/tile/blue/half{ - dir = 8 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/port_tarkon/comms) -"pA" = ( -/obj/effect/turf_decal/vg_decals/atmos/mix, -/obj/machinery/light/small/directional/west, -/turf/open/floor/engine/vacuum, -/area/ruin/space/has_grav/port_tarkon/atmos) -"pD" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/structure/cable, -/obj/effect/spawner/random/trash/food_packaging, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/port_tarkon/developement) -"pE" = ( -/obj/machinery/airalarm/directional/north, -/obj/effect/mapping_helpers/airalarm/all_access, -/obj/effect/turf_decal/tile/purple/half{ - dir = 1 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/port_tarkon/developement) -"pH" = ( -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ - dir = 1 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/power1) -"pJ" = ( -/obj/structure/cable, -/obj/machinery/power/apc/auto_name/directional/west, -/obj/effect/mapping_helpers/apc/no_charge, -/obj/effect/mapping_helpers/apc/unlocked, -/obj/effect/turf_decal/tile/yellow/anticorner{ - dir = 8 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/toolstorage) -"pM" = ( -/obj/structure/cable, -/obj/machinery/firealarm/directional/east, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/afthall) -"pP" = ( -/obj/effect/spawner/random/trash/food_packaging, -/obj/effect/decal/cleanable/dirt, -/obj/machinery/hydroponics/soil, -/turf/open/floor/grass, -/area/ruin/space/has_grav/port_tarkon/garden) -"pT" = ( -/obj/structure/chair/office, -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ - dir = 1 - }, -/obj/effect/turf_decal/tile/red/half, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/secoff) -"pU" = ( -/obj/machinery/atmospherics/components/unary/outlet_injector/monitored/carbon_input/tarkon{ - dir = 8 - }, -/turf/open/floor/engine/co2, -/area/ruin/space/has_grav/port_tarkon/atmos) -"pW" = ( -/obj/machinery/power/port_gen/pacman/super{ - name = "\improper emergency power generator"; - time_per_sheet = 40 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/plating, -/area/ruin/space/has_grav/port_tarkon/atmos) -"pX" = ( -/obj/machinery/vending/clothing, -/obj/machinery/light/dim/directional/east, -/turf/open/floor/wood/large, -/area/ruin/space/has_grav/port_tarkon/dorms) -"pY" = ( -/obj/machinery/door/airlock/research/glass, -/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/tarkon/general, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/port_tarkon/developement) -"qb" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/turf_decal/delivery/blue, -/obj/effect/turf_decal/tile/neutral/half{ - dir = 1 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/centerhall) -"qe" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/cable, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/observ) -"qh" = ( -/obj/machinery/door/poddoor/shutters{ - id = "tarkonouter"; - name = "External Bay Shutters" - }, -/obj/effect/turf_decal/trimline/yellow/filled/warning, -/obj/effect/turf_decal/trimline/yellow/filled/warning{ - dir = 8 - }, -/turf/open/floor/iron/airless, -/area/ruin/space/has_grav/port_tarkon/storage) -"qi" = ( -/obj/effect/turf_decal/stripes/asteroid/line{ - dir = 6 - }, -/turf/open/misc/asteroid/airless, -/area/solars/tarkon) -"qk" = ( -/obj/structure/window/reinforced/spawner/directional/north, -/obj/effect/turf_decal/tile/blue/fourcorners, -/obj/machinery/computer/atmos_control/tarkon/oxygen_tank{ - dir = 4 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/atmos) -"qr" = ( -/obj/effect/turf_decal/sand/plating, -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/mining) -"qv" = ( -/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/neutral{ - dir = 8 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/centerhall) -"qA" = ( -/obj/structure/cable, -/obj/item/broken_bottle, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/atmos) -"qD" = ( -/obj/structure/lattice, -/mob/living/basic/carp, -/turf/open/space/basic, -/area/template_noop) -"qF" = ( -/obj/effect/turf_decal/sand, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/mining) -"qH" = ( -/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{ - dir = 1 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/storage) -"qL" = ( -/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/neutral/half, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/centerhall) -"qQ" = ( -/obj/structure/cable, -/obj/machinery/power/apc/auto_name/directional/north, -/obj/effect/mapping_helpers/apc/no_charge, -/obj/effect/mapping_helpers/apc/unlocked, -/obj/effect/turf_decal/tile/red/half{ - dir = 1 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/secoff) -"qS" = ( -/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/east, -/obj/effect/mapping_helpers/apc/no_charge, -/obj/effect/mapping_helpers/apc/unlocked, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/starboardhall) -"rd" = ( -/obj/machinery/light/small/directional/east, -/obj/effect/decal/cleanable/dirt, -/obj/machinery/biogenerator, -/turf/open/floor/grass, -/area/ruin/space/has_grav/port_tarkon/garden) -"rg" = ( -/obj/effect/turf_decal/stripes/asteroid/corner, -/turf/open/misc/asteroid/airless, -/area/solars/tarkon) -"rh" = ( -/turf/closed/wall, -/area/ruin/space/has_grav/port_tarkon/toolstorage) -"rk" = ( -/obj/structure/closet, -/obj/effect/decal/cleanable/dirt, -/obj/item/clothing/shoes/workboots/mining, -/obj/item/clothing/shoes/winterboots, -/obj/item/clothing/shoes/jackboots, -/obj/item/clothing/under/misc/nova/utility, -/obj/item/clothing/under/misc/nova/utility, -/obj/item/storage/backpack, -/obj/item/storage/backpack/duffelbag, -/obj/item/storage/backpack/satchel, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon) -"ro" = ( -/obj/effect/turf_decal/tile/neutral/half{ - dir = 8 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/centerhall) -"ru" = ( -/obj/structure/table/reinforced, -/obj/effect/turf_decal/tile/brown/anticorner{ - dir = 1 - }, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/cargo) -"rv" = ( -/obj/structure/table, -/obj/item/storage/medkit/advanced, -/obj/item/storage/medkit/surgery, -/obj/machinery/airalarm/directional/east, -/obj/effect/mapping_helpers/airalarm/all_access, -/obj/effect/turf_decal/tile/blue/half{ - dir = 4 - }, -/obj/effect/decal/cleanable/dirt, -/obj/item/crowbar, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/trauma) -"rw" = ( -/obj/machinery/light_switch/directional/south, -/obj/effect/turf_decal/tile/neutral/half, -/obj/effect/decal/cleanable/confetti, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/centerhall) -"ry" = ( -/obj/machinery/firealarm/directional/east, -/obj/effect/turf_decal/tile/blue/half{ - dir = 4 - }, -/obj/machinery/light/dim/directional/east, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/port_tarkon/comms) -"rz" = ( -/obj/structure/rack, -/obj/item/assembly/igniter, -/obj/effect/turf_decal/tile/yellow/half{ - dir = 1 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/toolstorage) -"rA" = ( -/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/neutral/anticorner{ - dir = 8 - }, -/obj/effect/decal/cleanable/confetti, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/centerhall) -"rB" = ( -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ - dir = 8 - }, -/obj/machinery/airalarm/directional/south, -/obj/effect/mapping_helpers/airalarm/all_access, -/obj/effect/turf_decal/tile/brown/half, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/storage) -"rD" = ( -/obj/structure/closet, -/obj/item/storage/backpack/satchel/explorer, -/obj/item/clothing/mask/gas/explorer, -/obj/item/gps/mining, -/obj/item/storage/bag/ore, -/obj/effect/turf_decal/tile/brown/anticorner{ - dir = 8 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/mining) -"rE" = ( -/obj/effect/turf_decal/tile/yellow, -/obj/effect/decal/cleanable/confetti, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/toolstorage) -"rF" = ( -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ - dir = 8 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/port_tarkon/developement) -"rG" = ( -/obj/structure/curtain, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/port_tarkon/developement) -"rH" = ( -/obj/structure/table, -/obj/machinery/cell_charger, -/obj/machinery/light/dim/directional/east, -/obj/effect/turf_decal/tile/purple/half{ - dir = 4 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/port_tarkon/developement) -"rK" = ( -/obj/machinery/door/poddoor/shutters/window{ - id = "tarkoninner"; - name = "Interior Bay Shutter" - }, -/obj/effect/turf_decal/trimline/yellow/filled/warning{ - dir = 1 - }, -/obj/effect/turf_decal/trimline/yellow/filled/warning{ - dir = 8 - }, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/storage) -"rL" = ( -/obj/effect/turf_decal/vg_decals/atmos/oxygen, -/obj/machinery/light/small/directional/west, -/obj/machinery/air_sensor/tarkon/oxygen_tank{ - pixel_x = -26 - }, -/turf/open/floor/engine/o2, -/area/ruin/space/has_grav/port_tarkon/atmos) -"rV" = ( -/obj/machinery/airalarm/directional/north, -/obj/effect/turf_decal/tile/yellow/half{ - dir = 1 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/toolstorage) -"rW" = ( -/obj/machinery/airalarm/directional/north, -/obj/effect/mapping_helpers/airalarm/all_access, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/porthall) -"rZ" = ( -/obj/item/stack/tile/carpet/neon/simple/teal/nodots/sixty, -/turf/open/floor/plating, -/area/ruin/space/has_grav/port_tarkon/cargo) -"sa" = ( -/obj/machinery/power/turbine/inlet_compressor{ - dir = 4 - }, -/obj/effect/turf_decal/stripes/line{ - dir = 8 - }, -/obj/effect/turf_decal/stripes/red/line{ - dir = 8 - }, -/obj/structure/cable, -/turf/open/floor/engine/vacuum, -/area/ruin/space/has_grav/port_tarkon/atmos) -"sc" = ( -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/visible/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/dark/visible, -/obj/machinery/air_sensor/tarkon/incinerator_tank{ - pixel_x = -26 - }, -/turf/open/floor/engine/vacuum, -/area/ruin/space/has_grav/port_tarkon/atmos) -"sd" = ( -/obj/effect/turf_decal/tile/brown{ - dir = 1 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/starboardhall) -"sj" = ( -/obj/machinery/atmospherics/components/unary/vent_pump/siphon/monitored/nitrogen_output/tarkon{ - dir = 4 - }, -/turf/open/floor/engine/n2, -/area/ruin/space/has_grav/port_tarkon/atmos) -"sl" = ( -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/cafeteria, -/area/ruin/space/has_grav/port_tarkon/kitchen) -"sm" = ( -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ - dir = 8 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon) -"sn" = ( -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ - dir = 1 - }, -/obj/effect/turf_decal/tile/neutral/half, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/centerhall) -"sq" = ( -/obj/structure/closet, -/obj/item/pickaxe/silver, -/obj/item/storage/backpack/duffelbag, -/obj/item/clothing/glasses/meson, -/obj/item/t_scanner/adv_mining_scanner/lesser, -/obj/effect/turf_decal/tile/brown/half, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/mining) -"sr" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/effect/turf_decal/tile/purple/half, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/port_tarkon/developement) -"sv" = ( -/turf/closed/mineral/random/high_chance, -/area/ruin/space/has_grav) -"sw" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/turf/open/floor/wood/large, -/area/ruin/space/has_grav/port_tarkon/dorms) -"sD" = ( -/obj/structure/table/wood, -/obj/item/flashlight/lamp/green, -/obj/effect/spawner/random/clothing/costume, -/turf/open/floor/carpet/black, -/area/ruin/space/has_grav/port_tarkon/dorms) -"sI" = ( -/obj/effect/turf_decal/delivery/red, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/forehall) -"sK" = ( -/obj/structure/chair/sofa/corp/left{ - dir = 1 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/observ) -"sL" = ( -/obj/effect/spawner/structure/window/reinforced/plasma, -/turf/open/floor/plating, -/area/ruin/space/has_grav/port_tarkon/atmos) -"sM" = ( -/obj/machinery/firealarm/directional/west, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/forehall) -"sN" = ( -/obj/structure/frame/computer{ - dir = 8 - }, -/obj/item/circuitboard/computer/rdconsole, -/obj/effect/turf_decal/tile/purple/half{ - dir = 4 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/port_tarkon/developement) -"sX" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/structure/cable, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/garden) -"ta" = ( -/obj/effect/decal/cleanable/vomit/old, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/centerhall) -"tc" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/light_switch/directional/north, -/obj/machinery/firealarm/directional/south{ - pixel_y = -31 - }, -/turf/open/floor/wood/large, -/area/ruin/space/has_grav/port_tarkon/dorms) -"td" = ( -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ - dir = 8 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/cafeteria, -/area/ruin/space/has_grav/port_tarkon/kitchen) -"te" = ( -/obj/machinery/atmospherics/components/unary/vent_pump/high_volume/siphon/monitored/air_output/tarkon{ - dir = 4 - }, -/turf/open/floor/engine/vacuum, -/area/ruin/space/has_grav/port_tarkon/atmos) -"th" = ( -/obj/effect/turf_decal/tile/brown/anticorner{ - dir = 8 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/starboardhall) -"tk" = ( -/obj/structure/table/reinforced, -/obj/machinery/vending/boozeomat, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/centerhall) -"tn" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/port_tarkon/comms) -"to" = ( -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ - dir = 4 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/centerhall) -"tp" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/cable, -/obj/machinery/light_switch/directional/south, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/forehall) -"ts" = ( -/obj/effect/spawner/structure/window/reinforced/no_firelock, -/obj/machinery/atmospherics/pipe/layer_manifold/purple/hidden{ - dir = 4 - }, -/turf/open/floor/plating, -/area/ruin/space/has_grav/port_tarkon/atmos) -"tt" = ( -/obj/structure/fence{ - dir = 4 - }, -/turf/open/misc/asteroid/airless, -/area/ruin/space/has_grav) -"tz" = ( -/obj/structure/window/reinforced/spawner/directional/north, -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ - dir = 1 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/port_tarkon/developement) -"tA" = ( -/obj/machinery/light/dim/directional/south, -/obj/effect/turf_decal/tile/purple/half, -/obj/item/broken_bottle, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/port_tarkon/developement) -"tC" = ( -/obj/structure/falsewall, -/turf/open/floor/plating, -/area/ruin/space/has_grav/port_tarkon/cargo) -"tE" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/airalarm/directional/north, -/obj/effect/mapping_helpers/airalarm/all_access, -/obj/effect/spawner/random/trash/food_packaging, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/porthall) -"tH" = ( -/obj/effect/spawner/structure/window/reinforced, -/turf/open/floor/plating, -/area/ruin/space/has_grav/port_tarkon/centerhall) -"tI" = ( -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ - dir = 4 - }, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/afthall) -"tM" = ( -/obj/machinery/door/airlock/wood{ - id_tag = "ptdorm2"; - name = "Private Dorm 2" - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/door/firedoor/solid, -/turf/open/floor/wood/large, -/area/ruin/space/has_grav/port_tarkon/dorms) -"tQ" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/porthall) -"tT" = ( -/obj/structure/closet, -/obj/machinery/firealarm/directional/east, -/obj/effect/decal/cleanable/dirt, -/obj/item/clothing/shoes/workboots/mining, -/obj/item/clothing/shoes/winterboots, -/obj/item/clothing/shoes/jackboots, -/obj/item/clothing/under/misc/nova/utility, -/obj/item/clothing/under/misc/nova/utility, -/obj/item/storage/backpack, -/obj/item/storage/backpack/duffelbag, -/obj/item/storage/backpack/satchel, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon) -"tV" = ( -/obj/effect/turf_decal/sand/plating, -/obj/effect/turf_decal/tile/brown{ - dir = 4 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/mining) -"tY" = ( -/obj/structure/bed/pod{ - dir = 1 - }, -/obj/item/bedsheet/random{ - dir = 1 - }, -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ - dir = 4 - }, -/obj/machinery/button/door/directional/south{ - id = "ptdorm1"; - name = "Door Lock Control"; - normaldoorcontrol = 1; - specialfunctions = 4 - }, -/turf/open/floor/carpet/purple, -/area/ruin/space/has_grav/port_tarkon/dorms) -"ub" = ( -/obj/effect/spawner/structure/window/reinforced/no_firelock, -/obj/machinery/atmospherics/pipe/layer_manifold/yellow/hidden{ - dir = 4 - }, -/turf/open/floor/plating, -/area/ruin/space/has_grav/port_tarkon/atmos) -"ud" = ( -/obj/effect/turf_decal/sand, -/obj/machinery/firealarm/directional/east, -/obj/effect/turf_decal/tile/brown/half{ - dir = 4 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/mining) -"ug" = ( -/obj/structure/closet/firecloset, -/obj/effect/decal/remains/human, -/turf/open/floor/plating, -/area/ruin/space/has_grav/port_tarkon/forehall) -"uh" = ( -/obj/item/broken_bottle, -/obj/effect/decal/cleanable/vomit/old, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/plating, -/area/ruin/space/has_grav/port_tarkon/atmos) -"ui" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/power/apc/auto_name/directional/north, -/obj/effect/mapping_helpers/apc/no_charge, -/obj/effect/mapping_helpers/apc/unlocked, -/obj/effect/turf_decal/tile/brown/half{ - dir = 1 - }, -/obj/item/storage/medkit/regular, -/obj/item/storage/medkit/regular, -/obj/item/storage/medkit/fire, -/obj/item/storage/medkit/brute, -/obj/item/storage/medkit/advanced, -/obj/structure/closet/crate/medical, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/storage) -"ul" = ( -/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/neutral{ - dir = 1 - }, -/obj/effect/decal/cleanable/confetti, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/centerhall) -"un" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/cable, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/port_tarkon/developement) -"uo" = ( -/mob/living/basic/carp/mega, -/obj/structure/lattice, -/turf/open/misc/asteroid/airless, -/area/ruin/space/has_grav) -"ut" = ( -/obj/effect/spawner/random/entertainment/cigarette_pack, -/obj/structure/closet/crate/bin, -/obj/effect/turf_decal/tile/blue/anticorner{ - dir = 4 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/port_tarkon/comms) -"uv" = ( -/turf/closed/wall, -/area/ruin/space/has_grav/port_tarkon) -"uw" = ( -/obj/effect/decal/cleanable/confetti, -/obj/effect/spawner/random/trash/food_packaging, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/port_tarkon/developement) -"ux" = ( -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ - dir = 4 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon) -"uC" = ( -/obj/structure/closet/crate/bin{ - pixel_y = 8 - }, -/obj/effect/spawner/random/entertainment/cigarette_pack, -/obj/item/reagent_containers/cup/rag, -/turf/open/floor/iron/white, -/area/ruin/space/has_grav/port_tarkon/centerhall) -"uD" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/item/broken_bottle, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon) -"uH" = ( -/obj/effect/decal/cleanable/vomit/old, -/obj/effect/decal/cleanable/dirt, -/obj/item/paper/fluff/ruins/tarkon/defcon5, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon) -"uK" = ( -/obj/machinery/atmospherics/components/unary/portables_connector/visible{ - dir = 4 - }, -/obj/effect/turf_decal/tile/purple/fourcorners, -/obj/structure/cable, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/atmos) -"uM" = ( -/obj/machinery/light/dim/directional/east, -/obj/effect/turf_decal/tile/brown/half{ - dir = 4 - }, -/obj/structure/chair/sofa/corp/right{ - dir = 8 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/storage) -"uN" = ( -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ - dir = 4 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/port_tarkon/comms) -"uR" = ( -/turf/open/floor/iron/freezer, -/area/ruin/space/has_grav/port_tarkon/kitchen) -"uU" = ( -/obj/effect/turf_decal/stripes/asteroid/line{ - dir = 5 - }, -/turf/open/misc/asteroid/airless, -/area/solars/tarkon) -"uV" = ( -/obj/effect/decal/cleanable/confetti, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/porthall) -"vd" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/general, -/obj/structure/cable, -/obj/machinery/power/apc/auto_name/directional/east, -/obj/effect/mapping_helpers/apc/no_charge, -/obj/effect/mapping_helpers/apc/unlocked, -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ - dir = 8 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/centerhall) -"ve" = ( -/obj/machinery/door/airlock/wood{ - id_tag = "ptdorm3"; - name = "Private Dorm 3" - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/door/firedoor/solid, -/turf/open/floor/wood/large, -/area/ruin/space/has_grav/port_tarkon/dorms) -"vj" = ( -/obj/structure/closet/crate/internals, -/obj/item/tank/internals/oxygen, -/obj/item/clothing/mask/breath, -/obj/item/clothing/suit/space/eva, -/obj/item/clothing/head/helmet/space/eva, -/obj/effect/turf_decal/tile/yellow/anticorner{ - dir = 4 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/power1) -"vl" = ( -/obj/effect/turf_decal/tile/blue/half{ - dir = 4 - }, -/obj/structure/closet/crate/freezer/blood, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/trauma) -"vm" = ( -/obj/machinery/airalarm/directional/north, -/obj/machinery/light/directional/north, -/obj/effect/turf_decal/tile/brown/half{ - dir = 1 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/cargo) -"vn" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/decal/cleanable/confetti, -/obj/effect/spawner/random/trash/food_packaging, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/starboardhall) -"vo" = ( -/obj/structure/table/wood/fancy/blue, -/obj/effect/turf_decal/tile/blue/half{ - dir = 1 - }, -/obj/machinery/cell_charger, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/port_tarkon/comms) -"vp" = ( -/obj/machinery/atmospherics/miner/n2o, -/turf/open/floor/engine/n2o, -/area/ruin/space/has_grav/port_tarkon/atmos) -"vq" = ( -/obj/machinery/light/dim/directional/north, -/obj/effect/decal/cleanable/confetti, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/forehall) -"vs" = ( -/obj/machinery/light/dim/directional/west, -/obj/effect/turf_decal/tile/purple/half{ - dir = 8 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/port_tarkon/developement) -"vz" = ( -/obj/machinery/door/airlock/public, -/obj/machinery/door/firedoor/solid, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/porthall) -"vA" = ( -/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{ - dir = 8 - }, -/obj/effect/decal/cleanable/confetti, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/starboardhall) -"vB" = ( -/obj/structure/curtain, -/obj/effect/turf_decal/tile/purple/half, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/port_tarkon/developement) -"vC" = ( -/turf/closed/wall/r_wall, -/area/ruin/space/has_grav/port_tarkon/secoff) -"vE" = ( -/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{ - dir = 1 - }, -/obj/item/rcd_ammo, -/obj/item/rcd_ammo, -/obj/item/rcd_ammo, -/obj/structure/closet/crate/secure/engineering, -/obj/effect/decal/cleanable/dirt, -/obj/item/construction/rcd/arcd/mattermanipulator, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/storage) -"vF" = ( -/obj/item/gps/computer/space{ - gpstag = "Port Tarkon" - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/centerhall) -"vG" = ( -/obj/structure/cable, -/obj/effect/turf_decal/tile/blue/half{ - dir = 1 - }, -/obj/machinery/power/apc/auto_name/directional/north, -/obj/effect/mapping_helpers/apc/no_charge, -/obj/effect/mapping_helpers/apc/unlocked, -/obj/item/broken_bottle, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/port_tarkon/comms) -"vN" = ( -/obj/machinery/iv_drip, -/obj/effect/turf_decal/tile/blue/half{ - dir = 8 - }, -/obj/effect/decal/cleanable/vomit/old, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/trauma) -"vO" = ( -/obj/effect/mob_spawn/ghost_role/human/tarkon/engi, -/obj/effect/decal/cleanable/vomit/old, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/plating, -/area/ruin/space/has_grav/port_tarkon/atmos) -"vQ" = ( -/obj/structure/lattice, -/turf/open/misc/asteroid/airless, -/area/ruin/space/has_grav) -"vR" = ( -/obj/machinery/light/small/directional/north, -/obj/effect/decal/cleanable/confetti, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/white, -/area/ruin/space/has_grav/port_tarkon/centerhall) -"vU" = ( -/obj/machinery/firealarm/directional/north, -/obj/effect/decal/cleanable/confetti, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/forehall) -"vZ" = ( -/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{ - dir = 1 - }, -/obj/structure/closet/crate/secure/science, -/obj/item/mod/construction/broken_core, -/obj/item/mod/construction/broken_core, -/obj/item/mod/construction/broken_core, -/obj/item/mod/construction/broken_core, -/obj/item/mod/construction/broken_core, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/storage) -"wa" = ( -/obj/structure/cable, -/obj/machinery/power/terminal{ - dir = 4 - }, -/obj/effect/turf_decal/tile/yellow/half{ - dir = 8 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/power1) -"wc" = ( -/obj/structure/table, -/obj/item/clothing/suit/toggle/labcoat/medical, -/obj/machinery/power/apc/auto_name/directional/west, -/obj/effect/mapping_helpers/apc/no_charge, -/obj/effect/mapping_helpers/apc/unlocked, -/obj/structure/cable, -/obj/effect/turf_decal/tile/blue/half{ - dir = 8 - }, -/obj/item/clothing/suit/toggle/labcoat/medical, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/trauma) -"wh" = ( -/obj/structure/chair/stool/directional/south, -/obj/effect/turf_decal/stripes{ - dir = 1 - }, -/obj/effect/decal/cleanable/dirt, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden, -/turf/open/floor/engine, -/area/ruin/space/has_grav/port_tarkon/atmos) -"wm" = ( -/obj/machinery/light/dim/directional/east, -/obj/effect/turf_decal/tile/brown/half{ - dir = 4 - }, -/obj/effect/spawner/random/trash/food_packaging, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/mining) -"wt" = ( -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ - dir = 8 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/porthall) -"ww" = ( -/obj/machinery/airalarm/directional/north, -/obj/effect/mapping_helpers/airalarm/all_access, -/obj/effect/turf_decal/tile/neutral/half{ - dir = 1 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/centerhall) -"wx" = ( -/obj/structure/window/reinforced/spawner/directional/west, -/obj/structure/window/reinforced/spawner/directional/south, -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/port_tarkon/developement) -"wC" = ( -/obj/effect/turf_decal/tile/yellow/full, -/obj/structure/rack/shelf, -/obj/effect/spawner/random/engineering/tool, -/obj/effect/spawner/random/engineering/tool, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/toolstorage) -"wG" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/effect/decal/cleanable/confetti, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/port_tarkon/comms) -"wQ" = ( -/obj/structure/window/reinforced/tinted/spawner/directional/south, -/obj/machinery/light/dim/directional/west, -/obj/effect/turf_decal/tile/purple/half{ - dir = 8 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/port_tarkon/developement) -"wV" = ( -/obj/machinery/power/solar, -/obj/effect/turf_decal/stripes/asteroid/line, -/turf/open/misc/asteroid/airless, -/area/solars/tarkon) -"wW" = ( -/obj/machinery/atmospherics/components/binary/dp_vent_pump/high_volume/incinerator_tarkon{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/visible/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/dark/visible, -/turf/open/floor/engine/vacuum, -/area/ruin/space/has_grav/port_tarkon/atmos) -"wX" = ( -/obj/effect/decal/cleanable/confetti, -/obj/effect/decal/cleanable/dirt, -/obj/machinery/hydroponics/soil, -/turf/open/floor/grass, -/area/ruin/space/has_grav/port_tarkon/garden) -"wY" = ( -/obj/effect/turf_decal/tile/blue{ - dir = 8 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/port_tarkon/comms) -"wZ" = ( -/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{ - dir = 8 - }, -/obj/effect/decal/cleanable/confetti, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/mining) -"xc" = ( -/obj/machinery/light/warm/directional/west, -/obj/effect/turf_decal/tile/neutral/anticorner{ - dir = 1 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/centerhall) -"xi" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/cable, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/trauma) -"xj" = ( -/obj/machinery/atmospherics/components/unary/vent_pump/siphon/monitored/carbon_output/tarkon{ - dir = 8 - }, -/turf/open/floor/engine/co2, -/area/ruin/space/has_grav/port_tarkon/atmos) -"xo" = ( -/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/confetti, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/afthall) -"xp" = ( -/obj/effect/spawner/structure/window/reinforced/no_firelock, -/obj/machinery/atmospherics/pipe/layer_manifold/green/hidden{ - dir = 4 - }, -/turf/open/floor/plating, -/area/ruin/space/has_grav/port_tarkon/atmos) -"xq" = ( -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, -/obj/machinery/airalarm/directional/west, -/obj/effect/mapping_helpers/airalarm/all_access, -/turf/open/floor/carpet/black, -/area/ruin/space/has_grav/port_tarkon/dorms) -"xt" = ( -/turf/closed/wall/r_wall, -/area/ruin/space/has_grav/port_tarkon/atmos) -"xu" = ( -/obj/effect/turf_decal/tile/purple/anticorner{ - dir = 8 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/port_tarkon/developement) -"xB" = ( -/obj/machinery/igniter/incinerator_tarkon, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/visible/layer2{ - dir = 5 - }, -/turf/open/floor/engine/vacuum, -/area/ruin/space/has_grav/port_tarkon/atmos) -"xH" = ( -/obj/machinery/ammo_workbench/unlocked, -/obj/effect/turf_decal/tile/red/half{ - dir = 1 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/secoff) -"xL" = ( -/obj/machinery/power/smes/engineering{ - charge = 0 - }, -/obj/structure/cable, -/obj/effect/turf_decal/tile/yellow/half{ - dir = 1 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/power1) -"xN" = ( -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, -/obj/effect/spawner/random/trash/food_packaging, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/observ) -"xO" = ( -/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, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/cargo) -"xP" = ( -/obj/structure/cable, -/turf/open/floor/plating, -/area/ruin/space/has_grav/port_tarkon/power1) -"xT" = ( -/obj/effect/turf_decal/tile/purple/half{ - dir = 1 - }, -/obj/machinery/firealarm/directional/north, -/obj/structure/table/reinforced, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/port_tarkon/developement) -"xU" = ( -/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/neutral/half{ - dir = 4 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/centerhall) -"xW" = ( -/obj/effect/spawner/random/trash/food_packaging, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/white, -/area/ruin/space/has_grav/port_tarkon/centerhall) -"xY" = ( -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ - dir = 4 - }, -/obj/structure/curtain, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/port_tarkon/developement) -"xZ" = ( -/obj/machinery/firealarm/directional/north, -/obj/effect/decal/cleanable/confetti, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/porthall) -"yd" = ( -/turf/closed/wall/r_wall, -/area/ruin/space/has_grav/port_tarkon/forehall) -"ye" = ( -/obj/effect/turf_decal/stripes/asteroid/line{ - dir = 1 - }, -/turf/open/misc/asteroid/airless, -/area/solars/tarkon) -"yj" = ( -/obj/machinery/firealarm/directional/east, -/obj/effect/turf_decal/tile/neutral/anticorner, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/centerhall) -"yl" = ( -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ - dir = 4 - }, -/obj/structure/table/wood, -/obj/effect/spawner/random/trash/cigbutt, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/observ) -"ym" = ( -/obj/machinery/door/poddoor/shutters/window{ - id = "tarkoninner"; - name = "Interior Bay Shutter" - }, -/obj/effect/turf_decal/trimline/yellow/filled/warning{ - dir = 1 - }, -/obj/effect/turf_decal/trimline/yellow/filled/warning{ - dir = 4 - }, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/storage) -"yn" = ( -/obj/effect/decal/cleanable/confetti, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/garden) -"yv" = ( -/obj/machinery/vending/coffee, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/afthall) -"yx" = ( -/obj/structure/frame/machine, -/obj/item/circuitboard/machine/mechfab, -/obj/effect/turf_decal/tile/purple/half{ - dir = 1 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/port_tarkon/developement) -"yy" = ( -/obj/structure/table/wood/fancy/blue, -/obj/effect/turf_decal/tile/blue/anticorner{ - dir = 1 - }, -/obj/machinery/recharger, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/port_tarkon/comms) -"yz" = ( -/obj/machinery/firealarm/directional/west, -/obj/effect/turf_decal/tile/purple/half{ - dir = 8 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/port_tarkon/developement) -"yA" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/turf/open/floor/carpet/red, -/area/ruin/space/has_grav/port_tarkon/dorms) -"yB" = ( -/obj/effect/spawner/random/trash/food_packaging, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/centerhall) -"yC" = ( -/obj/machinery/air_sensor/tarkon/mix_tank{ - pixel_x = -26 - }, -/turf/open/floor/engine/vacuum, -/area/ruin/space/has_grav/port_tarkon/atmos) -"yD" = ( -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ - dir = 4 - }, -/obj/item/broken_bottle, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/starboardhall) -"yF" = ( -/obj/effect/turf_decal/tile/yellow/half, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/toolstorage) -"yG" = ( -/obj/structure/chair/office{ - dir = 1 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/port_tarkon/developement) -"yO" = ( -/obj/structure/window/reinforced/tinted/spawner/directional/south, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/port_tarkon/developement) -"yS" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/curtain, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/trauma) -"yU" = ( -/obj/effect/spawner/structure/window/reinforced, -/turf/open/floor/plating, -/area/ruin/space/has_grav/port_tarkon/mining) -"yY" = ( -/obj/effect/spawner/structure/window/reinforced, -/turf/open/floor/plating, -/area/ruin/space/has_grav/port_tarkon/toolstorage) -"zb" = ( -/obj/effect/turf_decal/sand/plating, -/obj/structure/fence/door/opened{ - dir = 4 - }, -/turf/open/floor/plating/airless, -/area/ruin/space/has_grav) -"zc" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/effect/spawner/random/trash/food_packaging, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/plating, -/area/ruin/space/has_grav/port_tarkon/atmos) -"zd" = ( -/obj/effect/turf_decal/sand/plating, -/obj/effect/turf_decal/tile/brown, -/obj/effect/decal/cleanable/confetti, -/obj/item/broken_bottle, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/mining) -"zf" = ( -/turf/closed/wall/r_wall, -/area/ruin/space/has_grav/port_tarkon/mining) -"zl" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/structure/cable, -/obj/effect/spawner/random/trash/food_packaging, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/port_tarkon/comms) -"zm" = ( -/obj/structure/cable, -/obj/machinery/power/terminal{ - dir = 4 - }, -/obj/effect/turf_decal/tile/yellow/anticorner{ - dir = 1 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/power1) -"zo" = ( -/turf/open/misc/asteroid/airless, -/area/ruin/space/has_grav) -"zp" = ( -/obj/effect/turf_decal/delivery/blue, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/starboardhall) -"zs" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/item/broken_bottle, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/cafeteria, -/area/ruin/space/has_grav/port_tarkon/kitchen) -"zt" = ( -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/secoff) -"zy" = ( -/obj/effect/turf_decal/tile/brown/half{ - dir = 8 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/mining) -"zA" = ( -/obj/structure/fluff/empty_sleeper{ - dir = 1 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon) -"zB" = ( -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, -/obj/effect/decal/cleanable/confetti, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/forehall) -"zC" = ( -/obj/machinery/power/turbine/turbine_outlet{ - dir = 4 - }, -/obj/structure/cable, -/turf/open/floor/engine/vacuum, -/area/ruin/space/has_grav/port_tarkon/atmos) -"zJ" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ - dir = 4 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/power1) -"zL" = ( -/obj/machinery/firealarm/directional/west, -/obj/effect/turf_decal/tile/blue/half{ - dir = 8 - }, -/obj/machinery/light/dim/directional/west, -/obj/effect/decal/cleanable/confetti, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/port_tarkon/comms) -"zM" = ( -/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{ - dir = 4 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/starboardhall) -"zT" = ( -/obj/structure/table/reinforced, -/obj/item/stack/sheet/glass/fifty, -/obj/item/stack/sheet/iron/fifty, -/obj/item/holosign_creator/atmos, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/port_tarkon/atmos) -"zV" = ( -/obj/item/broken_bottle, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/atmos) -"zW" = ( -/obj/structure/cable, -/obj/machinery/light/directional/north, -/obj/effect/turf_decal/tile/yellow/half{ - dir = 1 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/power1) -"zZ" = ( -/obj/structure/window/reinforced/tinted/spawner/directional/south, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/trauma) -"Ae" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/trauma) -"Af" = ( -/obj/effect/decal/cleanable/confetti, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/port_tarkon/comms) -"Ak" = ( -/obj/machinery/atmospherics/components/unary/outlet_injector/monitored/incinerator_input/tarkon{ - dir = 8 - }, -/turf/open/floor/engine/vacuum, -/area/ruin/space/has_grav/port_tarkon/atmos) -"Al" = ( -/obj/structure/cable, -/obj/machinery/power/solar, -/obj/effect/turf_decal/stripes/asteroid/line{ - dir = 9 - }, -/turf/open/misc/asteroid/airless, -/area/solars/tarkon) -"An" = ( -/obj/structure/fireaxecabinet/directional/north, -/obj/machinery/pipedispenser, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/atmos) -"As" = ( -/obj/effect/decal/cleanable/confetti, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/port_tarkon/developement) -"At" = ( -/obj/machinery/power/solar, -/obj/structure/cable, -/obj/effect/turf_decal/stripes/asteroid/line, -/turf/open/misc/asteroid/airless, -/area/solars/tarkon) -"Au" = ( -/obj/structure/cable, -/obj/machinery/door/airlock/engineering{ - name = "Engineering" - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/door/firedoor/solid, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/power1) -"Az" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/decal/cleanable/confetti, -/obj/effect/spawner/random/trash/food_packaging, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/port_tarkon/developement) -"AA" = ( -/obj/effect/turf_decal/stripes{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/visible/layer2{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/dark/visible, -/obj/effect/decal/cleanable/confetti, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/port_tarkon/atmos) -"AC" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/spawner/random/trash/food_packaging, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/cafeteria, -/area/ruin/space/has_grav/port_tarkon/kitchen) -"AD" = ( -/obj/effect/turf_decal/tile/brown/half{ - dir = 8 - }, -/obj/effect/decal/cleanable/confetti, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/starboardhall) -"AF" = ( -/obj/machinery/atmospherics/components/unary/outlet_injector/monitored/oxygen_input/tarkon{ - dir = 4 - }, -/turf/open/floor/engine/o2, -/area/ruin/space/has_grav/port_tarkon/atmos) -"AG" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/cable, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/starboardhall) -"AM" = ( -/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/delivery/white, -/obj/effect/turf_decal/tile/yellow{ - dir = 4 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/power1) -"AN" = ( -/obj/effect/spawner/structure/window/reinforced, -/turf/open/floor/plating, -/area/ruin/space/has_grav/port_tarkon/porthall) -"AP" = ( -/turf/closed/wall/r_wall, -/area/ruin/space/has_grav/port_tarkon/centerhall) -"AT" = ( -/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/neutral{ - dir = 8 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/centerhall) -"AX" = ( -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/centerhall) -"Ba" = ( -/obj/effect/turf_decal/sand, -/obj/machinery/light/small/directional/east, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/mining) -"Bg" = ( -/obj/effect/decal/cleanable/confetti, -/obj/effect/spawner/random/trash/food_packaging, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/starboardhall) -"Bi" = ( -/obj/machinery/atmospherics/components/binary/pump/off/general{ - dir = 4 - }, -/obj/effect/turf_decal/tile/neutral/fourcorners, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/atmos) -"Bj" = ( -/obj/effect/spawner/structure/window/reinforced/no_firelock, -/obj/machinery/atmospherics/pipe/layer_manifold/cyan/hidden{ - dir = 4 - }, -/turf/open/floor/plating, -/area/ruin/space/has_grav/port_tarkon/atmos) -"Bk" = ( -/obj/structure/cable, -/obj/machinery/power/solar, -/obj/effect/turf_decal/stripes/asteroid/line, -/turf/open/misc/asteroid/airless, -/area/solars/tarkon) -"Bn" = ( -/obj/machinery/door/airlock/public{ - name = "Kitchen Freezer" - }, -/obj/machinery/door/firedoor/solid, -/turf/open/floor/iron/freezer, -/area/ruin/space/has_grav/port_tarkon/kitchen) -"Bo" = ( -/obj/machinery/firealarm/directional/east, -/obj/effect/turf_decal/tile/brown/half{ - dir = 4 - }, -/obj/effect/decal/cleanable/dirt, -/obj/machinery/computer/order_console/mining{ - forced_express = 1; - express_cost_multiplier = 1 - }, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/mining) -"Bp" = ( -/obj/structure/window/reinforced/tinted/spawner/directional/south, -/obj/effect/turf_decal/tile/blue/half{ - dir = 8 - }, -/obj/item/circuitboard/machine/sleeper, -/obj/structure/closet/secure_closet/medical1, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/trauma) -"Bq" = ( -/obj/structure/sign/warning/vacuum, -/turf/closed/wall/r_wall, -/area/ruin/space/has_grav/port_tarkon/mining) -"By" = ( -/obj/effect/spawner/random/trash/food_packaging, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/afthall) -"BC" = ( -/obj/machinery/hydroponics/soil, -/obj/effect/decal/cleanable/dirt, -/obj/item/broken_bottle, -/turf/open/floor/grass, -/area/ruin/space/has_grav/port_tarkon/garden) -"BF" = ( -/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{ - dir = 1 - }, -/obj/item/pizzabox/margherita, -/obj/item/pizzabox/meat, -/obj/item/pizzabox/mushroom, -/obj/item/pizzabox/margherita, -/obj/item/pizzabox/meat, -/obj/item/pizzabox/mushroom, -/obj/structure/closet/crate/freezer, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/storage) -"BI" = ( -/obj/machinery/door/airlock/public/glass{ - name = "Fore Primary Hallway" - }, -/obj/machinery/door/firedoor/solid, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/forehall) -"BS" = ( -/obj/effect/turf_decal/delivery/white, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/power1) -"BU" = ( -/obj/effect/turf_decal/tile/brown{ - dir = 1 - }, -/obj/effect/decal/cleanable/confetti, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/mining) -"BV" = ( -/obj/machinery/light/warm/directional/south, -/obj/effect/turf_decal/tile/neutral/anticorner{ - dir = 8 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/centerhall) -"BW" = ( -/obj/structure/cable, -/obj/effect/turf_decal/tile/yellow/half, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/power1) -"BX" = ( -/obj/machinery/light/dim/directional/south, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/cable, -/obj/effect/spawner/random/trash/food_packaging, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/porthall) -"Cc" = ( -/obj/effect/turf_decal/tile/brown/half{ - dir = 8 - }, -/obj/item/broken_bottle, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/mining) -"Ce" = ( -/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{ - dir = 4 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/cargo) -"Cf" = ( -/obj/structure/window/reinforced/spawner/directional/south, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/port_tarkon/developement) -"Ch" = ( -/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/dark, -/area/ruin/space/has_grav/port_tarkon/comms) -"Ci" = ( -/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/tile/neutral{ - dir = 4 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, -/obj/effect/decal/cleanable/confetti, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/centerhall) -"Ck" = ( -/obj/structure/rack, -/obj/effect/turf_decal/tile/yellow/anticorner{ - dir = 8 - }, -/obj/item/stock_parts/cell/high, -/obj/item/stock_parts/cell/high, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/power1) -"Cm" = ( -/obj/structure/closet/crate, -/obj/item/stack/sheet/glass/fifty, -/obj/item/stack/sheet/glass{ - amount = 25 - }, -/turf/open/floor/plating, -/area/ruin/space/has_grav/port_tarkon/forehall) -"Cp" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/cable, -/obj/machinery/door/firedoor/solid, -/obj/effect/spawner/random/trash/food_packaging, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/forehall) -"Cq" = ( -/obj/machinery/door/firedoor/solid, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/forehall) -"Cs" = ( -/obj/machinery/door/airlock/mining/glass, -/obj/effect/turf_decal/sand, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/door/firedoor/solid, -/obj/effect/mapping_helpers/airlock/cyclelink_helper, -/obj/effect/mapping_helpers/airlock/access/all/tarkon/general, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/mining) -"Cu" = ( -/obj/item/broken_bottle, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/garden) -"Cv" = ( -/obj/effect/decal/cleanable/confetti, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/starboardhall) -"Cw" = ( -/obj/structure/table, -/obj/item/stack/sheet/mineral/gold{ - amount = 25 - }, -/obj/effect/turf_decal/tile/purple/half{ - dir = 4 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/port_tarkon/developement) -"Cx" = ( -/obj/effect/spawner/random/trash/cigbutt, -/obj/effect/decal/cleanable/dirt, -/obj/structure/chair/sofa/corp/right{ - dir = 1 - }, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/observ) -"Cy" = ( -/obj/machinery/door/airlock/wood{ - id_tag = "ptdorm1"; - name = "Private Dorm 1" - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/door/firedoor/solid, -/turf/open/floor/wood/large, -/area/ruin/space/has_grav/port_tarkon/dorms) -"CA" = ( -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ - dir = 4 - }, -/obj/effect/turf_decal/tile/neutral/half{ - dir = 8 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/centerhall) -"CB" = ( -/obj/effect/spawner/structure/window/reinforced, -/obj/effect/turf_decal/tile/purple/half{ - dir = 1 - }, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/port_tarkon/developement) -"CE" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/light/dim/directional/east, -/obj/effect/turf_decal/tile/red/anticorner, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/secoff) -"CG" = ( -/obj/machinery/light/warm/directional/west, -/obj/effect/turf_decal/tile/neutral/half{ - dir = 8 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/centerhall) -"CI" = ( -/obj/structure/cable, -/obj/effect/turf_decal/tile/yellow/half{ - dir = 8 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/power1) -"CL" = ( -/obj/structure/cable, -/obj/machinery/door/airlock/mining/glass, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/door/firedoor/solid, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/mining) -"CM" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/turf_decal/tile/brown{ - dir = 8 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/storage) -"CP" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/atmos) -"CR" = ( -/obj/item/broken_bottle, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/afthall) -"CS" = ( -/obj/structure/table/wood, -/obj/item/flashlight/lamp, -/obj/effect/spawner/random/clothing/costume, -/turf/open/floor/carpet/cyan, -/area/ruin/space/has_grav/port_tarkon/dorms) -"CV" = ( -/obj/structure/cable, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/power1) -"CW" = ( -/obj/machinery/airalarm/directional/north, -/obj/effect/mapping_helpers/airalarm/all_access, -/obj/structure/table/wood/fancy/blue, -/obj/effect/turf_decal/tile/blue/half{ - dir = 1 - }, -/obj/item/coin, -/obj/item/coin, -/obj/machinery/light/directional/north, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/port_tarkon/comms) -"CX" = ( -/obj/machinery/light/dim/directional/north, -/obj/structure/rack, -/obj/item/screwdriver, -/obj/item/wrench, -/obj/effect/turf_decal/tile/yellow/half{ - dir = 1 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/toolstorage) -"CY" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/light/dim/directional/east, -/obj/effect/decal/cleanable/confetti, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/starboardhall) -"CZ" = ( -/obj/effect/turf_decal/tile/brown/half{ - dir = 4 - }, -/obj/effect/decal/cleanable/confetti, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/mining) -"Da" = ( -/obj/effect/turf_decal/tile/brown/half, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/starboardhall) -"Dc" = ( -/obj/effect/turf_decal/tile/neutral/anticorner{ - dir = 1 - }, -/obj/item/broken_bottle, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/centerhall) -"De" = ( -/obj/structure/table/wood, -/obj/item/broken_bottle, -/obj/effect/spawner/random/trash/food_packaging, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/observ) -"Dk" = ( -/obj/item/stack/spacecash/c100, -/obj/item/stack/spacecash/c100{ - pixel_x = 4; - pixel_y = 7 - }, -/obj/item/stack/spacecash/c100{ - pixel_x = 4; - pixel_y = -8 - }, -/obj/item/stack/spacecash/c20{ - pixel_x = -4; - pixel_y = 3 - }, -/obj/item/stack/spacecash/c20{ - pixel_y = 10 - }, -/obj/item/stack/spacecash/c20{ - pixel_x = 5 - }, -/obj/item/stack/spacecash/c10{ - pixel_x = -4; - pixel_y = -5 - }, -/obj/item/stack/spacecash/c10{ - pixel_x = -6; - pixel_y = 12 - }, -/obj/item/stack/spacecash/c10{ - pixel_x = 4; - pixel_y = 4 - }, -/obj/item/mod/module/visor/rave, -/turf/open/floor/plating, -/area/ruin/space/has_grav/port_tarkon/cargo) -"Dv" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/storage) -"DA" = ( -/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/tile/neutral/anticorner, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/centerhall) -"DD" = ( -/obj/structure/table/reinforced, -/obj/machinery/cell_charger, -/obj/item/clothing/gloves/color/yellow, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/port_tarkon/atmos) -"DK" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/port_tarkon/developement) -"DN" = ( -/obj/machinery/light_switch/directional/north, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/starboardhall) -"DO" = ( -/obj/machinery/light/dim/directional/north, -/obj/effect/turf_decal/tile/purple/half{ - dir = 1 - }, -/obj/structure/window/reinforced/spawner/directional/west, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/port_tarkon/developement) -"DP" = ( -/obj/machinery/computer{ - desc = "A computer long since rendered non-functional due to lack of maintenance. Spitting out error messages."; - dir = 8; - name = "Broken Computer" - }, -/obj/effect/turf_decal/tile/red/half, -/obj/item/paper/fluff/ruins/tarkon/detain, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/secoff) -"DQ" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/decal/cleanable/confetti, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/port_tarkon/developement) -"DR" = ( -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/forehall) -"DS" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/turf_decal/tile/neutral/half{ - dir = 1 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/centerhall) -"DZ" = ( -/obj/effect/turf_decal/tile/blue/half{ - dir = 8 - }, -/obj/machinery/light_switch/directional/west, -/obj/effect/spawner/random/trash/food_packaging, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/port_tarkon/comms) -"Eb" = ( -/mob/living/basic/carp, -/turf/open/misc/asteroid/airless, -/area/ruin/space/has_grav) -"Ed" = ( -/obj/machinery/light/small/directional/south, -/obj/effect/turf_decal/tile/purple/half, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/port_tarkon/developement) -"Ef" = ( -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ - dir = 8 - }, -/obj/effect/spawner/random/trash/food_packaging, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/porthall) -"Eg" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/item/broken_bottle, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/centerhall) -"Ek" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/spawner/random/trash/food_packaging, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/cafeteria, -/area/ruin/space/has_grav/port_tarkon/kitchen) -"El" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/decal/cleanable/vomit/old, -/turf/open/floor/wood/large, -/area/ruin/space/has_grav/port_tarkon/dorms) -"En" = ( -/obj/machinery/hydroponics/soil, -/obj/item/broken_bottle, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/grass, -/area/ruin/space/has_grav/port_tarkon/garden) -"Eq" = ( -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ - dir = 4 - }, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/afthall) -"Er" = ( -/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/dark, -/area/ruin/space/has_grav/port_tarkon/developement) -"Et" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/door/firedoor/solid, -/obj/machinery/door/airlock/public/glass{ - name = "Port Primary Hallway" - }, -/obj/structure/cable, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/porthall) -"Eu" = ( -/obj/machinery/airalarm/directional/west, -/obj/effect/mapping_helpers/airalarm/all_access, -/obj/effect/decal/cleanable/confetti, -/obj/effect/spawner/random/trash/food_packaging, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/forehall) -"Ex" = ( -/obj/effect/turf_decal/vg_decals/atmos/mix, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/visible/layer2, -/turf/open/floor/engine/vacuum, -/area/ruin/space/has_grav/port_tarkon/atmos) -"Ez" = ( -/obj/structure/chair/wood{ - dir = 1 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/observ) -"EA" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/centerhall) -"EB" = ( -/obj/machinery/iv_drip, -/obj/structure/window/reinforced/tinted/spawner/directional/south, -/obj/machinery/light/small/directional/east, -/obj/effect/turf_decal/tile/blue/half{ - dir = 4 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/trauma) -"EC" = ( -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ - dir = 1 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/secoff) -"EE" = ( -/obj/structure/table, -/obj/effect/turf_decal/tile/blue/half{ - dir = 4 - }, -/obj/machinery/button/door{ - id = "ptcomms"; - name = "shutter controls" - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/port_tarkon/comms) -"EJ" = ( -/obj/effect/turf_decal/tile/purple/half, -/obj/effect/decal/cleanable/confetti, -/obj/effect/spawner/random/trash/food_packaging, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/port_tarkon/developement) -"EN" = ( -/obj/structure/sign/warning/deathsposal, -/turf/closed/wall, -/area/ruin/space/has_grav/port_tarkon/power1) -"EQ" = ( -/obj/effect/spawner/structure/window/reinforced/no_firelock, -/obj/machinery/door/poddoor/shutters{ - id = "ptobservatory" - }, -/turf/open/floor/plating, -/area/ruin/space/has_grav/port_tarkon/observ) -"EV" = ( -/obj/structure/curtain, -/obj/effect/turf_decal/tile/blue/half{ - dir = 1 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/trauma) -"EW" = ( -/mob/living/basic/carp/mega, -/turf/open/space/basic, -/area/template_noop) -"EY" = ( -/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/blue{ - dir = 1 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/port_tarkon/comms) -"Fb" = ( -/obj/structure/closet/emcloset, -/obj/effect/turf_decal/tile/neutral/full, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/centerhall) -"Fe" = ( -/obj/machinery/door/airlock/public/glass{ - name = "Crew Storage" - }, -/obj/machinery/door/firedoor/solid, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon) -"Fh" = ( -/obj/effect/turf_decal/stripes{ - dir = 1 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/port_tarkon/atmos) -"Fk" = ( -/obj/structure/table/reinforced, -/obj/item/storage/pouch/ammo, -/obj/item/storage/pouch/ammo, -/obj/machinery/firealarm/directional/north, -/obj/effect/turf_decal/tile/red/half{ - dir = 1 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/secoff) -"Fl" = ( -/obj/item/electronics/apc, -/obj/item/electronics/apc, -/obj/item/electronics/airlock, -/obj/item/electronics/airlock, -/obj/item/electronics/airalarm, -/obj/item/electronics/airalarm, -/obj/structure/closet/crate/engineering/electrical{ - name = "electronics crate" - }, -/obj/item/electronics/tracker, -/obj/item/stack/cable_coil, -/obj/item/clothing/gloves/color/yellow, -/obj/item/circuitboard/computer/atmos_control/tarkon/carbon_tank, -/obj/item/circuitboard/computer/atmos_control/tarkon/mix_tank, -/obj/item/circuitboard/computer/atmos_control/tarkon/nitrogen_tank, -/obj/item/circuitboard/computer/atmos_control/tarkon/incinerator, -/obj/item/circuitboard/computer/atmos_control/tarkon/oxygen_tank, -/obj/item/circuitboard/computer/atmos_control/tarkon/plasma_tank, -/obj/item/circuitboard/computer/tarkon_driver, -/turf/open/floor/plating, -/area/ruin/space/has_grav/port_tarkon/forehall) -"Fm" = ( -/obj/structure/table/reinforced, -/obj/item/clothing/gloves/color/yellow, -/obj/item/paper/fluff/ruins/oldstation/generator_manual, -/obj/item/wirecutters, -/obj/item/wrench, -/obj/structure/cable, -/turf/open/floor/plating, -/area/ruin/space/has_grav/port_tarkon/power1) -"Fo" = ( -/obj/effect/decal/cleanable/confetti, -/obj/effect/spawner/random/trash/food_packaging, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/plating, -/area/ruin/space/has_grav/port_tarkon/atmos) -"Fq" = ( -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, -/obj/effect/decal/cleanable/confetti, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/mining) -"Fr" = ( -/obj/machinery/atmospherics/pipe/layer_manifold/scrubbers/visible, -/turf/closed/wall/r_wall, -/area/ruin/space/has_grav/port_tarkon/atmos) -"Fs" = ( -/obj/machinery/airlock_sensor/incinerator_tarkon{ - pixel_x = 6; - pixel_y = 23 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden, -/turf/open/floor/engine/vacuum, -/area/ruin/space/has_grav/port_tarkon/atmos) -"Ft" = ( -/obj/item/solar_assembly, -/obj/effect/turf_decal/stripes/asteroid/line, -/turf/open/misc/asteroid/airless, -/area/solars/tarkon) -"FB" = ( -/obj/item/flashlight/lantern, -/obj/item/flashlight/lantern, -/obj/item/flashlight/lantern, -/obj/item/flashlight/lantern, -/obj/structure/table, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon) -"FC" = ( -/obj/machinery/firealarm/directional/east, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/porthall) -"FE" = ( -/obj/structure/lattice, -/turf/open/space/basic, -/area/template_noop) -"FG" = ( -/obj/item/shovel, -/turf/open/misc/asteroid/airless, -/area/ruin/space/has_grav) -"FN" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/light_switch/directional/south, -/obj/effect/turf_decal/tile/yellow/anticorner, -/obj/effect/decal/cleanable/confetti, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/toolstorage) -"FR" = ( -/obj/structure/table, -/obj/effect/turf_decal/tile/blue/half, -/obj/item/encryptionkey/headset_cargo/tarkon, -/obj/item/encryptionkey/headset_cargo/tarkon, -/obj/item/encryptionkey/headset_cargo/tarkon, -/obj/item/encryptionkey/headset_cargo/tarkon, -/obj/item/encryptionkey/headset_cargo/tarkon, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/port_tarkon/comms) -"FS" = ( -/obj/structure/table/reinforced, -/obj/item/reagent_containers/condiment/enzyme, -/obj/item/reagent_containers/condiment/sugar, -/turf/open/floor/iron/cafeteria, -/area/ruin/space/has_grav/port_tarkon/kitchen) -"FT" = ( -/obj/machinery/power/turbine/core_rotor{ - dir = 4; - mapping_id = "tarkon_turbine" - }, -/obj/structure/cable, -/turf/open/floor/engine/vacuum, -/area/ruin/space/has_grav/port_tarkon/atmos) -"FU" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, -/obj/effect/turf_decal/tile/yellow/half{ - dir = 4 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/toolstorage) -"FX" = ( -/obj/structure/table, -/obj/item/multitool, -/obj/item/storage/belt/utility/full, -/obj/item/paper/fluff/ruins/tarkon/designdoc, -/obj/effect/turf_decal/tile/yellow/half, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/power1) -"FY" = ( -/obj/effect/spawner/structure/window/reinforced/no_firelock, -/obj/machinery/door/poddoor/shutters{ - id = "ptporthall" - }, -/turf/open/floor/plating, -/area/ruin/space/has_grav/port_tarkon/porthall) -"FZ" = ( -/obj/machinery/light/small/directional/east, -/obj/machinery/light_switch/directional/east, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/cafeteria, -/area/ruin/space/has_grav/port_tarkon/kitchen) -"Gb" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/turf_decal/tile/brown/half{ - dir = 1 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/storage) -"Gd" = ( -/obj/structure/table/reinforced, -/obj/machinery/reagentgrinder{ - desc = "Used to grind things up into raw materials and liquids."; - pixel_y = 5 - }, -/obj/machinery/light/small/directional/west, -/turf/open/floor/iron/cafeteria, -/area/ruin/space/has_grav/port_tarkon/kitchen) -"Gf" = ( -/obj/structure/table/wood, -/obj/machinery/light/dim/directional/east, -/obj/effect/spawner/random/trash/food_packaging, -/obj/item/broken_bottle, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/observ) -"Gk" = ( -/obj/machinery/door/airlock/multi_tile/public/glass{ - dir = 8 - }, -/obj/effect/turf_decal/tile/blue/half, -/obj/machinery/door/firedoor/solid, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/comms) -"Gl" = ( -/obj/structure/table/wood, -/obj/effect/spawner/random/trash/food_packaging, -/obj/item/paper/crumpled/fluff/tarkon, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/observ) -"Gp" = ( -/obj/machinery/light/small/directional/north, -/obj/machinery/atmospherics/pipe/smart/manifold/scrubbers/hidden, -/turf/open/floor/engine/vacuum, -/area/ruin/space/has_grav/port_tarkon/atmos) -"Gs" = ( -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/garden) -"Gt" = ( -/obj/machinery/hydroponics/soil, -/obj/machinery/firealarm/directional/south{ - pixel_y = -31 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/grass, -/area/ruin/space/has_grav/port_tarkon/garden) -"Gu" = ( -/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{ - dir = 1 - }, -/obj/effect/decal/cleanable/confetti, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/storage) -"Gv" = ( -/obj/machinery/light/dim/directional/north, -/obj/effect/turf_decal/tile/purple/half{ - dir = 1 - }, -/obj/structure/table/reinforced, -/obj/item/circuitboard/machine/reagentgrinder, -/obj/structure/frame/machine, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/port_tarkon/developement) -"Gx" = ( -/obj/machinery/door/airlock/maintenance_hatch, -/turf/open/floor/plating, -/area/ruin/space/has_grav/port_tarkon/forehall) -"Gy" = ( -/obj/effect/turf_decal/stripes/asteroid/line{ - dir = 8 - }, -/turf/open/misc/asteroid/airless, -/area/solars/tarkon) -"GB" = ( -/obj/effect/turf_decal/vg_decals/atmos/nitrous_oxide, -/obj/machinery/light/small/directional/east, -/obj/machinery/air_sensor/tarkon/nitrous_tank{ - pixel_x = 26 - }, -/turf/open/floor/engine/n2o, -/area/ruin/space/has_grav/port_tarkon/atmos) -"GE" = ( -/obj/effect/spawner/structure/window/reinforced/plasma, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden{ - dir = 8 - }, -/turf/open/floor/plating, -/area/ruin/space/has_grav/port_tarkon/atmos) -"GF" = ( -/obj/structure/bed{ - dir = 4 - }, -/obj/effect/turf_decal/tile/blue/anticorner{ - dir = 1 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/trauma) -"GR" = ( -/obj/machinery/door/airlock/engineering{ - name = "Backup Generator Room" - }, -/obj/structure/cable, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/power1) -"GS" = ( -/obj/machinery/hydroponics/soil, -/obj/machinery/light/small/directional/south, -/obj/machinery/light_switch/directional/south, -/obj/effect/decal/cleanable/confetti, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/grass, -/area/ruin/space/has_grav/port_tarkon/garden) -"GT" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/structure/cable, -/obj/item/broken_bottle, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/afthall) -"GU" = ( -/obj/effect/turf_decal/tile/purple/half{ - dir = 4 - }, -/obj/structure/window/reinforced/spawner/directional/north, -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ - dir = 1 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/port_tarkon/developement) -"GW" = ( -/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/tile/neutral/anticorner{ - dir = 4 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/centerhall) -"GY" = ( -/turf/closed/wall, -/area/ruin/space/has_grav/port_tarkon/atmos) -"Ha" = ( -/obj/machinery/power/port_gen/pacman/super{ - name = "\improper emergency power generator"; - time_per_sheet = 40 - }, -/obj/effect/decal/cleanable/greenglow, -/turf/open/floor/plating, -/area/ruin/space/has_grav/port_tarkon/power1) -"Hb" = ( -/obj/effect/turf_decal/stripes/asteroid/line{ - dir = 10 - }, -/turf/open/misc/asteroid/airless, -/area/solars/tarkon) -"Hc" = ( -/obj/effect/turf_decal/tile/blue/half{ - dir = 4 - }, -/obj/effect/decal/cleanable/confetti, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/port_tarkon/comms) -"Hf" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/cable, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/secoff) -"Hg" = ( -/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, -/area/ruin/space/has_grav/port_tarkon/starboardhall) -"Hi" = ( -/obj/structure/table/wood, -/obj/item/flashlight/lamp/green, -/obj/item/clothing/neck/mantle, -/turf/open/floor/carpet/red, -/area/ruin/space/has_grav/port_tarkon/dorms) -"Hk" = ( -/obj/structure/cable, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/secoff) -"Hm" = ( -/obj/machinery/hydroponics/soil, -/obj/effect/decal/cleanable/confetti, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/grass, -/area/ruin/space/has_grav/port_tarkon/garden) -"Hn" = ( -/obj/effect/turf_decal/tile/neutral/half{ - dir = 4 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/centerhall) -"Ho" = ( -/obj/effect/turf_decal/stripes/asteroid/corner{ - dir = 1 - }, -/turf/open/misc/asteroid/airless, -/area/solars/tarkon) -"Hr" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/structure/cable, -/obj/effect/decal/cleanable/confetti, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/port_tarkon/comms) -"Ht" = ( -/obj/machinery/airalarm/directional/north, -/obj/effect/mapping_helpers/airalarm/all_access, -/obj/effect/decal/cleanable/confetti, -/obj/effect/spawner/random/trash/food_packaging, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/porthall) -"Hy" = ( -/turf/closed/wall, -/area/ruin/space/has_grav/port_tarkon/mining) -"HB" = ( -/obj/structure/table/reinforced, -/obj/machinery/recharger, -/obj/effect/turf_decal/tile/red/anticorner{ - dir = 1 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/secoff) -"HF" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/toolstorage) -"HH" = ( -/obj/effect/turf_decal/sand/plating, -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ - dir = 1 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/mining) -"HO" = ( -/obj/item/broken_bottle, -/obj/effect/decal/cleanable/confetti, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/plating, -/area/ruin/space/has_grav/port_tarkon/atmos) -"HQ" = ( -/obj/machinery/door/airlock/research, -/obj/machinery/door/firedoor/solid, -/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/tarkon/general, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/developement) -"HS" = ( -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/power1) -"HU" = ( -/obj/machinery/atmospherics/components/unary/portables_connector/visible{ - dir = 8 - }, -/obj/effect/turf_decal/tile/neutral/fourcorners, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/atmos) -"HW" = ( -/obj/machinery/door/airlock/public, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/cable, -/obj/machinery/door/firedoor/solid, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/observ) -"HX" = ( -/obj/structure/cable, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/trauma) -"HY" = ( -/obj/effect/turf_decal/tile/purple/anticorner{ - dir = 4 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/port_tarkon/developement) -"Ib" = ( -/obj/effect/spawner/random/trash/food_packaging, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/porthall) -"Ic" = ( -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ - dir = 4 - }, -/obj/structure/cable, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/port_tarkon/developement) -"Id" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/port_tarkon/developement) -"Ie" = ( -/obj/structure/chair/office{ - dir = 8 - }, -/obj/effect/turf_decal/tile/blue{ - dir = 8 - }, -/obj/item/broken_bottle, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/port_tarkon/comms) -"If" = ( -/obj/item/solar_assembly, -/obj/structure/cable, -/obj/effect/turf_decal/stripes/asteroid/line{ - dir = 1 - }, -/turf/open/misc/asteroid/airless, -/area/solars/tarkon) -"Ih" = ( -/obj/machinery/door/airlock/multi_tile/public/glass, -/obj/machinery/door/firedoor/solid, -/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/ruin/space/has_grav/port_tarkon/storage) -"Ij" = ( -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ - dir = 1 - }, -/obj/effect/decal/cleanable/vomit/old, -/turf/open/floor/carpet/cyan, -/area/ruin/space/has_grav/port_tarkon/dorms) -"Ik" = ( -/obj/effect/turf_decal/tile/purple/anticorner{ - dir = 1 - }, -/obj/structure/chair/comfy/black, -/obj/effect/mob_spawn/ghost_role/human/tarkon/sci, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/port_tarkon/developement) -"Il" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/structure/cable, -/obj/effect/decal/cleanable/confetti, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/afthall) -"Im" = ( -/obj/structure/bed/pod{ - dir = 1 - }, -/obj/item/bedsheet/random{ - dir = 1 - }, -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ - dir = 4 - }, -/obj/machinery/button/door/directional/north{ - id = "ptdorm2"; - name = "Door Lock Control"; - normaldoorcontrol = 1; - specialfunctions = 4 - }, -/turf/open/floor/carpet/cyan, -/area/ruin/space/has_grav/port_tarkon/dorms) -"Io" = ( -/obj/effect/turf_decal/caution/stand_clear, -/obj/effect/turf_decal/tile/brown/half, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/storage) -"Iw" = ( -/turf/closed/wall, -/area/ruin/space/has_grav/port_tarkon/power1) -"Ix" = ( -/obj/effect/turf_decal/trimline/yellow/filled/warning, -/obj/effect/turf_decal/trimline/yellow/filled/warning{ - dir = 4 - }, -/obj/machinery/door/poddoor/shutters{ - id = "tarkonouter"; - name = "External Bay Shutters" - }, -/turf/open/floor/iron/airless, -/area/ruin/space/has_grav/port_tarkon/storage) -"ID" = ( -/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/neutral, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/centerhall) -"IE" = ( -/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/neutral/anticorner{ - dir = 8 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/centerhall) -"IF" = ( -/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, -/area/ruin/space/has_grav/port_tarkon/secoff) -"IG" = ( -/obj/structure/table/reinforced, -/obj/item/clothing/gloves/color/yellow, -/obj/item/paper/fluff/ruins/oldstation/generator_manual, -/obj/item/wirecutters, -/obj/item/wrench, -/obj/item/circuitboard/machine/rtg, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/plating, -/area/ruin/space/has_grav/port_tarkon/atmos) -"IH" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/structure/curtain, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/trauma) -"IK" = ( -/obj/structure/closet, -/obj/item/pickaxe/mini, -/obj/item/storage/backpack/duffelbag, -/obj/item/clothing/mask/gas/explorer, -/obj/item/clothing/shoes/workboots/mining, -/obj/item/gps/mining, -/obj/item/storage/bag/ore, -/obj/item/storage/belt/mining, -/obj/effect/turf_decal/tile/brown/anticorner, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/mining) -"IL" = ( -/obj/structure/cable, -/obj/effect/turf_decal/stripes/asteroid/line{ - dir = 1 - }, -/turf/open/misc/asteroid/airless, -/area/solars/tarkon) -"IO" = ( -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ - dir = 1 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/power1) -"IP" = ( -/obj/structure/window/reinforced/spawner/directional/west, -/obj/item/broken_bottle, -/obj/effect/decal/cleanable/vomit/old, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/plating, -/area/ruin/space/has_grav/port_tarkon/atmos) -"IQ" = ( -/obj/effect/turf_decal/tile/neutral/anticorner{ - dir = 4 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/centerhall) -"IU" = ( -/obj/structure/closet/crate/bin, -/obj/effect/spawner/random/trash/food_packaging, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/cafeteria, -/area/ruin/space/has_grav/port_tarkon/kitchen) -"IW" = ( -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ - dir = 4 - }, -/obj/structure/curtain, -/obj/structure/window/reinforced/tinted/spawner/directional/south, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/trauma) -"IY" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/cable, -/obj/machinery/power/apc/auto_name/directional/west, -/obj/effect/mapping_helpers/apc/no_charge, -/obj/effect/mapping_helpers/apc/unlocked, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/porthall) -"Jc" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/item/broken_bottle, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/cafeteria, -/area/ruin/space/has_grav/port_tarkon/kitchen) -"Ji" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/airalarm/directional/east, -/obj/effect/mapping_helpers/airalarm/all_access, -/turf/open/floor/carpet/purple, -/area/ruin/space/has_grav/port_tarkon/dorms) -"Jj" = ( -/obj/machinery/power/smes/engineering{ - charge = 0 - }, -/obj/structure/cable, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/power1) -"Jl" = ( -/obj/structure/closet, -/obj/effect/decal/cleanable/dirt, -/obj/item/clothing/under/rank/security/nova/utility/redsec, -/obj/item/clothing/under/rank/security/nova/utility, -/obj/item/clothing/shoes/workboots/mining, -/obj/item/clothing/shoes/winterboots, -/obj/item/clothing/shoes/jackboots, -/obj/item/storage/backpack/duffelbag/sec, -/obj/item/storage/backpack/duffelbag/sec/redsec, -/obj/item/storage/backpack/satchel/sec/redsec, -/obj/item/storage/backpack/security/redsec, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon) -"Jm" = ( -/obj/machinery/light/dim/directional/west, -/obj/effect/turf_decal/tile/brown/half{ - dir = 8 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/storage) -"Jp" = ( -/obj/item/crowbar, -/obj/item/crowbar, -/obj/item/crowbar, -/obj/item/crowbar, -/obj/structure/table, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon) -"Jq" = ( -/obj/machinery/cryopod{ - dir = 1 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/centerhall) -"Ju" = ( -/obj/structure/table/reinforced, -/obj/machinery/microwave{ - desc = "Cooks and boils stuff, somehow."; - pixel_x = -3; - pixel_y = 5 - }, -/turf/open/floor/iron/cafeteria, -/area/ruin/space/has_grav/port_tarkon/kitchen) -"Jv" = ( -/turf/closed/wall, -/area/ruin/space/has_grav/port_tarkon/dorms) -"Jw" = ( -/obj/structure/ore_box, -/obj/effect/turf_decal/tile/brown/anticorner{ - dir = 8 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/mining) -"Jx" = ( -/obj/machinery/vending/cola, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/afthall) -"Jz" = ( -/obj/structure/frame/machine, -/obj/item/circuitboard/machine/destructive_analyzer, -/obj/effect/turf_decal/tile/purple/half{ - dir = 4 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/port_tarkon/developement) -"JB" = ( -/obj/effect/spawner/random/trash/food_packaging, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/forehall) -"JE" = ( -/obj/machinery/airalarm/directional/north, -/obj/machinery/light/directional/north, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/cable, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/starboardhall) -"JF" = ( -/obj/effect/turf_decal/tile/yellow/anticorner{ - dir = 4 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/toolstorage) -"JI" = ( -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/cargo) -"JL" = ( -/obj/structure/table/reinforced, -/obj/machinery/light/dim/directional/west, -/obj/item/paper_bin, -/obj/effect/turf_decal/tile/brown/half{ - dir = 8 - }, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/cargo) -"JN" = ( -/obj/machinery/door/airlock/external/ruin{ - name = "Engineering External Access" - }, -/obj/effect/mapping_helpers/airlock/cyclelink_helper, -/obj/structure/cable, -/obj/effect/mapping_helpers/airlock/access/all/tarkon/general, -/turf/open/floor/plating, -/area/ruin/space/has_grav/port_tarkon/power1) -"JO" = ( -/obj/structure/bed/pod, -/obj/item/bedsheet/random, -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ - dir = 8 - }, -/obj/machinery/button/door/directional/south{ - id = "ptdorm3"; - name = "Door Lock Control"; - normaldoorcontrol = 1; - specialfunctions = 4 - }, -/turf/open/floor/carpet/black, -/area/ruin/space/has_grav/port_tarkon/dorms) -"JQ" = ( -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ - dir = 8 - }, -/obj/machinery/light/small/directional/east, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/secoff) -"JT" = ( -/obj/effect/turf_decal/tile/neutral/half{ - dir = 4 - }, -/obj/effect/spawner/random/trash/food_packaging, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/centerhall) -"JW" = ( -/obj/machinery/door/airlock/public/glass{ - name = "Aft Primary Hallway" - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/cable, -/obj/machinery/door/firedoor/solid, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/afthall) -"JX" = ( -/obj/structure/table, -/obj/item/paper/crumpled, -/obj/effect/turf_decal/tile/blue/anticorner, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/port_tarkon/comms) -"JY" = ( -/obj/structure/window/reinforced/tinted/spawner/directional/south, -/obj/structure/closet/secure_closet/medical2{ - req_access = list("medical") - }, -/obj/effect/turf_decal/tile/blue/half{ - dir = 4 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/trauma) -"Kc" = ( -/obj/machinery/computer{ - desc = "A computer long since rendered non-functional due to lack of maintenance. Spitting out error messages."; - dir = 1; - name = "Broken Computer" - }, -/obj/effect/turf_decal/tile/blue/anticorner{ - dir = 8 - }, -/obj/item/paper/fluff/ruins/tarkon/driverpitch, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/port_tarkon/comms) -"Ke" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 4 - }, -/obj/effect/turf_decal/stripes/line{ - dir = 8 - }, -/obj/machinery/door/poddoor/incinerator_atmos_main, -/turf/open/floor/engine/vacuum, -/area/ruin/space/has_grav/port_tarkon/atmos) -"Kf" = ( -/obj/machinery/light/dim/directional/west, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/porthall) -"Kg" = ( -/obj/effect/turf_decal/tile/neutral/anticorner{ - dir = 8 - }, -/obj/effect/spawner/random/trash/food_packaging, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/centerhall) -"Ki" = ( -/turf/closed/wall, -/area/ruin/space/has_grav/port_tarkon/centerhall) -"Kj" = ( -/obj/effect/turf_decal/tile/purple/half, -/obj/machinery/airalarm/directional/south, -/obj/effect/mapping_helpers/airalarm/all_access, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/port_tarkon/developement) -"Kk" = ( -/obj/machinery/door/airlock/wood/glass, -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/door/firedoor/solid, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/starboardhall) -"Kl" = ( -/obj/machinery/light/directional/north, -/obj/item/broken_bottle, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/centerhall) -"Kp" = ( -/obj/effect/turf_decal/tile/neutral/anticorner{ - dir = 4 - }, -/obj/effect/decal/cleanable/confetti, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/centerhall) -"Kr" = ( -/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 = 8 - }, -/obj/effect/spawner/random/trash/food_packaging, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/mining) -"Ks" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/door/firedoor/solid/closed, -/turf/open/floor/plating, -/area/ruin/space/has_grav/port_tarkon/forehall) -"KA" = ( -/obj/structure/table/reinforced, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/centerhall) -"KB" = ( -/obj/machinery/door/firedoor/solid, -/obj/machinery/door/airlock/mining/glass, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/mining) -"KE" = ( -/obj/structure/table/reinforced, -/obj/item/flashlight, -/obj/effect/turf_decal/tile/yellow/anticorner{ - dir = 1 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/toolstorage) -"KG" = ( -/obj/structure/sign/warning/docking, -/turf/closed/wall/r_wall/rust, -/area/ruin/space/has_grav/port_tarkon/mining) -"KJ" = ( -/obj/structure/table, -/obj/machinery/firealarm/directional/west, -/obj/machinery/light/dim/directional/west, -/obj/effect/turf_decal/tile/blue/half{ - dir = 8 - }, -/obj/item/defibrillator, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/trauma) -"KL" = ( -/obj/effect/turf_decal/trimline/yellow/filled/warning{ - dir = 4 - }, -/turf/open/floor/iron/airless, -/area/ruin/space/has_grav/port_tarkon/storage) -"KM" = ( -/obj/machinery/button/ignition/incinerator/tarkon, -/turf/closed/wall/r_wall, -/area/ruin/space/has_grav/port_tarkon/atmos) -"KO" = ( -/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, -/area/ruin/space/has_grav/port_tarkon/garden) -"KP" = ( -/obj/structure/table/reinforced, -/obj/item/storage/box/stockparts/basic, -/obj/item/storage/toolbox/mechanical, -/obj/effect/turf_decal/tile/purple/half{ - dir = 1 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/port_tarkon/developement) -"KQ" = ( -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/forehall) -"KS" = ( -/obj/structure/table/wood, -/obj/effect/spawner/random/trash/food_packaging, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/observ) -"KU" = ( -/obj/effect/decal/cleanable/confetti, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/forehall) -"KV" = ( -/obj/structure/window/reinforced/tinted/spawner/directional/north, -/obj/machinery/door/window/left/directional/east{ - opacity = 1 - }, -/obj/machinery/shower/directional/east, -/turf/open/floor/iron/white, -/area/ruin/space/has_grav/port_tarkon/centerhall) -"KW" = ( -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/forehall) -"KZ" = ( -/obj/structure/table/reinforced, -/obj/item/reagent_containers/cup/beaker/large, -/obj/item/reagent_containers/cup/beaker/large, -/turf/open/floor/iron/cafeteria, -/area/ruin/space/has_grav/port_tarkon/kitchen) -"La" = ( -/obj/structure/chair/sofa/corp{ - dir = 1 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/observ) -"Ld" = ( -/obj/machinery/door/airlock/public/glass/incinerator/tarkon_exterior, -/obj/effect/mapping_helpers/airlock/locked, -/obj/effect/mapping_helpers/airlock/cyclelink_helper{ - dir = 1 - }, -/obj/effect/turf_decal/stripes, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/visible/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/dark/visible, -/turf/open/floor/engine/vacuum, -/area/ruin/space/has_grav/port_tarkon/atmos) -"Le" = ( -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/secoff) -"Lf" = ( -/obj/effect/turf_decal/tile/brown/half, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/cargo) -"Lg" = ( -/obj/effect/decal/cleanable/confetti, -/obj/item/broken_bottle, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon) -"Lm" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/structure/cable, -/obj/effect/spawner/random/trash/food_packaging, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/forehall) -"Lo" = ( -/obj/effect/turf_decal/trimline/yellow/filled/warning, -/obj/machinery/door/poddoor/shutters{ - id = "tarkonouter"; - name = "External Bay Shutters" - }, -/turf/open/floor/iron/airless, -/area/ruin/space/has_grav/port_tarkon/storage) -"Lp" = ( -/obj/structure/closet/emcloset, -/obj/effect/turf_decal/tile/brown/half{ - dir = 1 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/mining) -"Lr" = ( -/obj/machinery/door/firedoor/solid, -/obj/machinery/light_switch/directional/east, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/trauma) -"Ls" = ( -/obj/machinery/iv_drip, -/obj/structure/window/reinforced/tinted/spawner/directional/south, -/obj/machinery/light/small/directional/west, -/obj/effect/turf_decal/tile/blue/half{ - dir = 8 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/trauma) -"Ly" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/structure/cable, -/obj/effect/decal/cleanable/confetti, -/obj/effect/spawner/random/trash/food_packaging, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/garden) -"LA" = ( -/obj/structure/closet, -/obj/effect/decal/cleanable/dirt, -/obj/item/clothing/under/rank/rnd/scientist/nova/utility, -/obj/item/clothing/under/rank/rnd/roboticist/nova/sleek, -/obj/item/clothing/shoes/jackboots, -/obj/item/clothing/shoes/workboots/mining, -/obj/item/clothing/shoes/winterboots, -/obj/item/storage/backpack/duffelbag/science, -/obj/item/storage/backpack/duffelbag/science/robo, -/obj/item/storage/backpack/satchel/science, -/obj/item/storage/backpack/satchel/science/robo, -/obj/item/storage/backpack/science, -/obj/item/storage/backpack/science/robo, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon) -"LD" = ( -/obj/effect/turf_decal/tile/brown/half{ - dir = 1 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/cargo) -"LG" = ( -/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/tile/neutral{ - dir = 4 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/centerhall) -"LH" = ( -/obj/machinery/firealarm/directional/north, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/forehall) -"LJ" = ( -/turf/open/misc/asteroid/airless, -/area/solars/tarkon) -"LN" = ( -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/afthall) -"LQ" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/mining) -"LS" = ( -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/starboardhall) -"LW" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/observ) -"LY" = ( -/obj/structure/table/reinforced, -/obj/item/book/manual/wiki/security_space_law, -/obj/item/pen/fountain, -/obj/machinery/firealarm/directional/north, -/obj/effect/turf_decal/tile/red/half{ - dir = 1 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/secoff) -"Me" = ( -/obj/effect/turf_decal/stripes{ - dir = 1 - }, -/obj/machinery/light/dim/directional/east, -/obj/structure/window/reinforced/spawner/directional/north, -/obj/machinery/power/smes, -/obj/structure/cable, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/port_tarkon/atmos) -"Mi" = ( -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/porthall) -"Mn" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/decal/cleanable/confetti, -/obj/effect/spawner/random/trash/food_packaging, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/mining) -"Mp" = ( -/obj/machinery/airalarm/directional/west, -/obj/effect/mapping_helpers/airalarm/all_access, -/obj/effect/turf_decal/tile/neutral/half{ - dir = 8 - }, -/obj/effect/decal/cleanable/confetti, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/centerhall) -"Mr" = ( -/obj/structure/cable, -/obj/effect/turf_decal/sand/plating, -/turf/open/floor/plating/airless, -/area/solars/tarkon) -"Mt" = ( -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ - dir = 8 - }, -/obj/structure/curtain, -/obj/structure/window/reinforced/tinted/spawner/directional/south, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/trauma) -"Mu" = ( -/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{ - dir = 4 - }, -/obj/effect/decal/cleanable/confetti, -/obj/effect/spawner/random/trash/food_packaging, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/starboardhall) -"Mz" = ( -/obj/machinery/atmospherics/components/tank/air, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/centerhall) -"MB" = ( -/obj/effect/turf_decal/tile/neutral/anticorner{ - dir = 8 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/centerhall) -"MC" = ( -/obj/machinery/door/airlock{ - name = "Bathroom" - }, -/obj/machinery/door/firedoor/solid, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/centerhall) -"MD" = ( -/obj/machinery/atmospherics/miner/plasma, -/turf/open/floor/engine/plasma, -/area/ruin/space/has_grav/port_tarkon/atmos) -"ME" = ( -/obj/effect/turf_decal/tile/purple/anticorner, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/port_tarkon/developement) -"MF" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/starboardhall) -"MG" = ( -/obj/effect/turf_decal/stripes/asteroid/corner{ - dir = 4 - }, -/turf/open/misc/asteroid/airless, -/area/solars/tarkon) -"MJ" = ( -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/observ) -"MO" = ( -/obj/structure/safe/floor, -/obj/item/areaeditor/blueprints/tarkon, -/obj/item/tape/ruins/tarkon/safe, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/power1) -"MS" = ( -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/porthall) -"MU" = ( -/turf/open/floor/engine/vacuum, -/area/ruin/space/has_grav/port_tarkon/atmos) -"MV" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/firealarm/directional/north, -/obj/effect/turf_decal/tile/brown/half{ - dir = 1 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/storage) -"MY" = ( -/obj/effect/turf_decal/tile/brown/anticorner, -/obj/effect/decal/cleanable/confetti, -/obj/item/broken_bottle, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/starboardhall) -"Ng" = ( -/obj/structure/tank_dispenser, -/obj/effect/turf_decal/tile/brown/anticorner{ - dir = 1 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/mining) -"Ni" = ( -/obj/structure/closet/crate/bin, -/obj/effect/turf_decal/tile/purple/half, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/port_tarkon/developement) -"Nj" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/cable, -/obj/machinery/door/firedoor/solid, -/obj/machinery/door/airlock/public/glass{ - name = "Fore Primary Hallway" - }, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/forehall) -"Nl" = ( -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ - dir = 4 - }, -/obj/item/broken_bottle, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/mining) -"Nq" = ( -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ - dir = 4 - }, -/obj/structure/table/rolling, -/obj/item/surgery_tray/full, -/obj/item/clothing/gloves/latex{ - pixel_y = 10 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/trauma) -"Nr" = ( -/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/ruin/space/has_grav/port_tarkon/forehall) -"Nt" = ( -/obj/machinery/seed_extractor, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/garden) -"Nw" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/cable, -/obj/machinery/light_switch/directional/west, -/obj/effect/turf_decal/tile/red/anticorner{ - dir = 8 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/secoff) -"Nx" = ( -/obj/structure/table/reinforced, -/obj/item/assembly/flash, -/obj/item/assembly/flash, -/obj/effect/turf_decal/tile/red/half{ - dir = 4 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/secoff) -"Nz" = ( -/obj/structure/closet/crate, -/obj/item/stack/sheet/iron/twenty, -/obj/item/stack/sheet/iron/fifty, -/turf/open/floor/plating, -/area/ruin/space/has_grav/port_tarkon/forehall) -"NF" = ( -/obj/effect/turf_decal/tile/purple/anticorner{ - dir = 1 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/port_tarkon/developement) -"NG" = ( -/obj/effect/turf_decal/stripes{ - dir = 1 - }, -/obj/item/broken_bottle, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/port_tarkon/atmos) -"NH" = ( -/obj/structure/chair/sofa/corp/right{ - dir = 8 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/observ) -"NK" = ( -/obj/effect/spawner/structure/window/reinforced/no_firelock, -/obj/machinery/atmospherics/pipe/layer_manifold/dark/hidden{ - dir = 4 - }, -/turf/open/floor/plating, -/area/ruin/space/has_grav/port_tarkon/atmos) -"NL" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/door/firedoor/solid, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/forehall) -"NM" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/turf_decal/tile/neutral/anticorner{ - dir = 1 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/centerhall) -"NN" = ( -/obj/structure/bed/maint, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/secoff) -"NR" = ( -/obj/effect/turf_decal/tile/brown/half{ - dir = 8 - }, -/obj/effect/decal/cleanable/confetti, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/storage) -"NU" = ( -/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/trash/food_packaging, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/afthall) -"NX" = ( -/obj/structure/rack, -/obj/item/ammo_box/magazine/c35sol_pistol, -/obj/item/ammo_box/magazine/c35sol_pistol, -/obj/item/ammo_box/magazine/c35sol_pistol, -/obj/item/ammo_box/magazine/c35sol_pistol, -/obj/item/ammo_box/magazine/c35sol_pistol, -/obj/item/ammo_box/magazine/c35sol_pistol, -/obj/item/gun/ballistic/automatic/m6pdw, -/obj/item/gun/ballistic/automatic/m6pdw, -/obj/effect/turf_decal/tile/red/half{ - dir = 1 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/secoff) -"Oa" = ( -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/secoff) -"Ob" = ( -/obj/machinery/computer/turbine_computer{ - dir = 1; - mapping_id = "tarkon_turbine" - }, -/obj/structure/cable, -/obj/machinery/light/dim/directional/south, -/turf/open/floor/engine, -/area/ruin/space/has_grav/port_tarkon/atmos) -"Oi" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/observ) -"Oj" = ( -/obj/structure/table/wood, -/obj/item/flashlight/lamp/bananalamp, -/obj/effect/spawner/random/clothing/beret_or_rabbitears, -/turf/open/floor/carpet/purple, -/area/ruin/space/has_grav/port_tarkon/dorms) -"Om" = ( -/obj/item/broken_bottle, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/starboardhall) -"On" = ( -/obj/effect/turf_decal/tile/purple/half{ - dir = 8 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/port_tarkon/developement) -"Oo" = ( -/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/delivery/blue, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/centerhall) -"Oq" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/structure/cable, -/obj/effect/decal/cleanable/confetti, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/forehall) -"Os" = ( -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ - dir = 4 - }, -/obj/effect/turf_decal/tile/brown/half, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/storage) -"Ow" = ( -/obj/effect/spawner/random/trash/food_packaging, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/starboardhall) -"Ox" = ( -/obj/structure/table/wood/fancy/blue, -/obj/effect/turf_decal/tile/blue/half{ - dir = 1 - }, -/obj/item/dice, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/port_tarkon/comms) -"OB" = ( -/obj/machinery/vending/dinnerware, -/turf/open/floor/iron/cafeteria, -/area/ruin/space/has_grav/port_tarkon/kitchen) -"OD" = ( -/obj/machinery/light/dim/directional/north, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/atmos) -"OF" = ( -/obj/effect/turf_decal/tile/blue/half{ - dir = 4 - }, -/obj/effect/spawner/random/trash/food_packaging, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/port_tarkon/comms) -"OG" = ( -/obj/machinery/space_heater, -/turf/open/floor/plating, -/area/ruin/space/has_grav/port_tarkon/afthall) -"OI" = ( -/obj/machinery/light/dim/directional/south, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/cable, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/porthall) -"OM" = ( -/turf/closed/wall/r_wall, -/area/ruin/space/has_grav/port_tarkon/comms) -"OQ" = ( -/obj/machinery/portable_atmospherics/canister/air, -/obj/machinery/atmospherics/components/unary/portables_connector{ - dir = 1 - }, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/port_tarkon/atmos) -"OR" = ( -/obj/structure/cable, -/obj/effect/turf_decal/stripes/asteroid/line{ - dir = 6 - }, -/turf/open/misc/asteroid/airless, -/area/solars/tarkon) -"OS" = ( -/obj/structure/cable, -/obj/item/solar_assembly, -/obj/effect/turf_decal/sand/plating, -/turf/open/floor/plating/airless, -/area/solars/tarkon) -"OT" = ( -/obj/effect/turf_decal/tile/yellow, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/toolstorage) -"OZ" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/port_tarkon/developement) -"Pa" = ( -/obj/structure/bed/double/pod, -/obj/item/bedsheet/random/double, -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ - dir = 8 - }, -/obj/item/fancy_pillow, -/obj/item/fancy_pillow, -/obj/machinery/button/door/directional/north{ - id = "ptdorm4"; - name = "Door Lock Control"; - normaldoorcontrol = 1; - specialfunctions = 4 - }, -/turf/open/floor/carpet/red, -/area/ruin/space/has_grav/port_tarkon/dorms) -"Pc" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/cable, -/obj/machinery/power/apc/auto_name/directional/south, -/obj/effect/mapping_helpers/apc/no_charge, -/obj/effect/mapping_helpers/apc/unlocked, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/forehall) -"Pf" = ( -/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/purple/half, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/port_tarkon/developement) -"Pl" = ( -/obj/structure/cable, -/obj/effect/turf_decal/stripes/asteroid/line{ - dir = 10 - }, -/turf/open/misc/asteroid/airless, -/area/solars/tarkon) -"Pp" = ( -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/mining) -"Pq" = ( -/obj/machinery/door/firedoor/solid, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/storage) -"Ps" = ( -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ - dir = 4 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/starboardhall) -"Px" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/door/firedoor/solid, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/garden) -"Pz" = ( -/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/ruin/space/has_grav/port_tarkon/afthall) -"PB" = ( -/obj/machinery/atmospherics/components/unary/portables_connector/visible{ - dir = 4 - }, -/obj/effect/turf_decal/tile/dark/fourcorners, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/atmos) -"PE" = ( -/obj/structure/chair/office{ - dir = 1 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/port_tarkon/comms) -"PF" = ( -/obj/machinery/door/firedoor/solid/closed, -/turf/open/floor/plating, -/area/ruin/space/has_grav/port_tarkon/forehall) -"PK" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/cable, -/obj/machinery/door/firedoor/solid, -/obj/machinery/door/airlock/atmos/glass, -/obj/effect/mapping_helpers/airlock/access/all/tarkon/general, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/atmos) -"PM" = ( -/obj/effect/turf_decal/tile/purple/half{ - dir = 1 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/port_tarkon/developement) -"PO" = ( -/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/tile/neutral/half{ - dir = 1 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/centerhall) -"PP" = ( -/obj/effect/decal/cleanable/confetti, -/obj/effect/spawner/random/trash/food_packaging, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/atmos) -"PQ" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/cable, -/obj/effect/spawner/random/trash/food_packaging, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/porthall) -"PR" = ( -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/storage) -"PS" = ( -/obj/machinery/computer{ - desc = "A computer long since rendered non-functional due to lack of maintenance. Spitting out error messages."; - dir = 8; - name = "Financing Console" - }, -/obj/effect/turf_decal/tile/brown/anticorner{ - dir = 4 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/cargo) -"PT" = ( -/obj/structure/rack, -/obj/item/clothing/suit/armor/vest, -/obj/item/clothing/suit/armor/vest, -/obj/machinery/airalarm/directional/north, -/obj/effect/turf_decal/tile/red/half{ - dir = 1 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/secoff) -"PZ" = ( -/obj/effect/turf_decal/tile/neutral/half, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/centerhall) -"Qd" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/item/broken_bottle, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/atmos) -"Qf" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/cable, -/obj/effect/decal/cleanable/confetti, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/port_tarkon/developement) -"Qg" = ( -/obj/effect/spawner/structure/window/reinforced/no_firelock, -/obj/machinery/atmospherics/pipe/layer_manifold/pink/hidden{ - dir = 4 - }, -/turf/open/floor/plating, -/area/ruin/space/has_grav/port_tarkon/atmos) -"Qh" = ( -/obj/structure/chair/office{ - dir = 1 - }, -/obj/effect/turf_decal/tile/brown/half{ - dir = 1 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/cargo) -"Qi" = ( -/obj/effect/decal/cleanable/confetti, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/afthall) -"Qk" = ( -/obj/machinery/atmospherics/components/unary/outlet_injector/monitored/plasma_input/tarkon{ - dir = 8 - }, -/turf/open/floor/engine/plasma, -/area/ruin/space/has_grav/port_tarkon/atmos) -"Qn" = ( -/obj/effect/turf_decal/stripes/asteroid/line, -/turf/open/misc/asteroid/airless, -/area/solars/tarkon) -"Qo" = ( -/obj/effect/turf_decal/delivery/blue, -/obj/effect/turf_decal/tile/neutral/half, -/obj/effect/decal/cleanable/confetti, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/centerhall) -"Qp" = ( -/obj/machinery/light/warm/directional/south, -/obj/effect/turf_decal/tile/neutral/anticorner, -/obj/effect/spawner/random/trash/food_packaging, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/centerhall) -"Qs" = ( -/obj/machinery/door/airlock/public/glass{ - name = "Port Primary Hallway" - }, -/obj/machinery/door/firedoor/solid, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/porthall) -"Qu" = ( -/obj/structure/window/reinforced/spawner/directional/north, -/obj/effect/turf_decal/tile/purple/fourcorners, -/obj/structure/cable, -/obj/machinery/computer/atmos_control/tarkon/plasma_tank{ - dir = 8 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/atmos) -"Qx" = ( -/obj/effect/spawner/structure/window/reinforced/no_firelock, -/turf/open/floor/plating, -/area/ruin/space/has_grav/port_tarkon/power1) -"Qy" = ( -/obj/machinery/firealarm/directional/west, -/obj/machinery/suit_storage_unit/industrial/hauler, -/obj/effect/turf_decal/tile/brown/half{ - dir = 8 - }, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/cargo) -"QA" = ( -/obj/machinery/door/window/left/directional/north, -/obj/machinery/door/window/left/directional/south, -/obj/structure/table/reinforced, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/cargo) -"QB" = ( -/obj/structure/filingcabinet, -/obj/effect/turf_decal/tile/brown/anticorner{ - dir = 8 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/cargo) -"QC" = ( -/turf/closed/wall/r_wall, -/area/ruin/space/has_grav/port_tarkon/cargo) -"QD" = ( -/obj/effect/decal/cleanable/confetti, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/porthall) -"QH" = ( -/obj/machinery/atmospherics/components/unary/outlet_injector/monitored/air_input/tarkon{ - dir = 4 - }, -/turf/open/floor/engine/vacuum, -/area/ruin/space/has_grav/port_tarkon/atmos) -"QL" = ( -/obj/structure/cable, -/obj/machinery/power/apc/auto_name/directional/east, -/obj/effect/mapping_helpers/apc/no_charge, -/obj/effect/mapping_helpers/apc/unlocked, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/observ) -"QP" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/general, -/obj/machinery/meter, -/obj/structure/cable, -/obj/effect/decal/cleanable/vomit/old, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/centerhall) -"QW" = ( -/obj/structure/cable, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/engine, -/area/ruin/space/has_grav/port_tarkon/atmos) -"QX" = ( -/obj/effect/turf_decal/tile/purple/half{ - dir = 1 - }, -/obj/structure/closet/crate/secure/science, -/obj/item/raw_anomaly_core/random, -/obj/item/raw_anomaly_core/random, -/obj/item/raw_anomaly_core/random, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/port_tarkon/developement) -"QY" = ( -/obj/structure/frame/machine, -/obj/item/circuitboard/machine/component_printer, -/obj/effect/turf_decal/tile/purple/half{ - dir = 1 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/port_tarkon/developement) -"Ra" = ( -/obj/effect/decal/cleanable/confetti, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/cafeteria, -/area/ruin/space/has_grav/port_tarkon/kitchen) -"Rc" = ( -/obj/machinery/firealarm/directional/north, -/obj/effect/turf_decal/tile/brown/half{ - dir = 1 - }, -/obj/item/stack/cable_coil, -/obj/item/stock_parts/matter_bin, -/obj/item/stock_parts/micro_laser, -/obj/item/stock_parts/servo, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/mining) -"Rf" = ( -/obj/machinery/atmospherics/components/unary/outlet_injector/monitored/nitrous_input/tarkon{ - dir = 8 - }, -/turf/open/floor/engine/n2o, -/area/ruin/space/has_grav/port_tarkon/atmos) -"Rg" = ( -/obj/machinery/atmospherics/components/binary/pump/off/general{ - dir = 8 - }, -/obj/effect/turf_decal/tile/yellow/fourcorners, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/atmos) -"Rh" = ( -/obj/structure/cable, -/obj/machinery/power/apc/auto_name/directional/south, -/obj/effect/mapping_helpers/apc/no_charge, -/obj/effect/mapping_helpers/apc/unlocked, -/obj/effect/decal/cleanable/confetti, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/garden) -"Rk" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/cable, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/forehall) -"Rm" = ( -/obj/effect/turf_decal/stripes/line, -/obj/effect/turf_decal/stripes/line{ - dir = 1 - }, -/obj/machinery/door/airlock/external/glass{ - name = "Turbine Maintenance Door" - }, -/obj/structure/cable, -/turf/open/floor/plating, -/area/ruin/space/has_grav/port_tarkon/atmos) -"Rp" = ( -/obj/machinery/vending/dorms, -/turf/open/floor/plating, -/area/ruin/space/has_grav/port_tarkon/cargo) -"Rq" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/mining) -"Rr" = ( -/obj/machinery/door/firedoor/solid, -/obj/machinery/door/airlock/engineering/glass{ - name = "P-T Tool Storage" - }, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/toolstorage) -"Rx" = ( -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ - dir = 8 - }, -/obj/effect/turf_decal/tile/brown/half{ - dir = 1 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/cargo) -"RB" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/porthall) -"RC" = ( -/obj/effect/turf_decal/tile/blue/half, -/obj/effect/decal/cleanable/vomit/old, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/trauma) -"RE" = ( -/obj/effect/turf_decal/trimline/yellow/filled/warning{ - dir = 8 - }, -/turf/open/floor/iron/airless, -/area/ruin/space/has_grav/port_tarkon/storage) -"RH" = ( -/obj/effect/turf_decal/tile/purple/half, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/port_tarkon/developement) -"RI" = ( -/obj/structure/frame/machine, -/obj/item/circuitboard/machine/circuit_imprinter/offstation, -/obj/effect/turf_decal/tile/purple/anticorner{ - dir = 4 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/port_tarkon/developement) -"RJ" = ( -/obj/structure/cable, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/observ) -"RK" = ( -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, -/obj/effect/decal/cleanable/confetti, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/centerhall) -"RL" = ( -/obj/structure/fluff/empty_sleeper, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon) -"RM" = ( -/mob/living/basic/carp, -/turf/open/space/basic, -/area/template_noop) -"RO" = ( -/obj/effect/turf_decal/tile/purple/half{ - dir = 1 - }, -/obj/item/areaeditor/blueprints/slime, -/obj/item/slime_extract/grey, -/obj/item/slime_extract/grey, -/obj/item/slime_extract/grey, -/obj/structure/closet/crate/secure/science, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/port_tarkon/developement) -"RT" = ( -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/port_tarkon/developement) -"RU" = ( -/obj/machinery/airalarm/directional/west, -/obj/effect/mapping_helpers/airalarm/all_access, -/obj/effect/turf_decal/tile/yellow/half{ - dir = 8 - }, -/obj/effect/spawner/random/trash/food_packaging, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/toolstorage) -"RX" = ( -/obj/structure/table, -/obj/item/clothing/head/utility/welding, -/obj/item/clothing/gloves/color/yellow, -/obj/machinery/firealarm/directional/south, -/obj/effect/turf_decal/tile/yellow/anticorner, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/power1) -"RY" = ( -/obj/effect/turf_decal/vg_decals/atmos/plasma, -/obj/machinery/light/small/directional/east, -/obj/machinery/air_sensor/tarkon/plasma_tank{ - pixel_x = 26 - }, -/turf/open/floor/engine/plasma, -/area/ruin/space/has_grav/port_tarkon/atmos) -"Sa" = ( -/obj/structure/frame/machine, -/obj/effect/turf_decal/tile/brown/half{ - dir = 1 - }, -/obj/item/circuitboard/machine/ore_redemption, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/mining) -"Sb" = ( -/obj/effect/turf_decal/tile/brown/half{ - dir = 8 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/storage) -"Se" = ( -/obj/structure/trash_pile, -/turf/open/floor/plating, -/area/ruin/space/has_grav/port_tarkon/forehall) -"Sf" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/cable, -/obj/effect/decal/cleanable/confetti, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/porthall) -"Sg" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/turf_decal/tile/purple/half, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/port_tarkon/developement) -"Sj" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/cable, -/obj/machinery/light_switch/directional/south, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/porthall) -"Sk" = ( -/obj/structure/cable, -/obj/machinery/power/apc/auto_name/directional/west, -/obj/effect/mapping_helpers/apc/no_charge, -/obj/effect/mapping_helpers/apc/unlocked, -/obj/machinery/light/dim/directional/west, -/obj/effect/turf_decal/tile/brown/half{ - dir = 8 - }, -/obj/effect/decal/cleanable/confetti, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/mining) -"Sn" = ( -/obj/structure/table, -/obj/item/stack/sheet/mineral/titanium{ - amount = 30 - }, -/obj/effect/turf_decal/tile/purple/half, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/port_tarkon/developement) -"Sp" = ( -/obj/machinery/light/dim/directional/east, -/obj/effect/turf_decal/tile/purple/half{ - dir = 4 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/port_tarkon/developement) -"Sq" = ( -/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/blue/half{ - dir = 1 - }, -/obj/machinery/door/firedoor/solid, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/comms) -"Su" = ( -/obj/effect/turf_decal/tile/purple/half, -/obj/structure/table/reinforced, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/port_tarkon/developement) -"Sv" = ( -/obj/effect/turf_decal/tile/neutral/half{ - dir = 1 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/centerhall) -"Sw" = ( -/turf/closed/wall/r_wall, -/area/ruin/space/has_grav/port_tarkon/dorms) -"SG" = ( -/obj/structure/table/reinforced, -/obj/machinery/door/window/brigdoor/left/directional/south, -/obj/machinery/door/window/brigdoor/left/directional/north, -/obj/item/paper_bin{ - pixel_x = 7 - }, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/secoff) -"SI" = ( -/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/neutral/anticorner, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/centerhall) -"SK" = ( -/obj/effect/decal/cleanable/confetti, -/obj/effect/spawner/random/trash/food_packaging, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon) -"SL" = ( -/obj/machinery/shower/directional/east, -/obj/structure/window/reinforced/tinted/spawner/directional/east, -/obj/machinery/door/window/right/directional/north{ - opacity = 1 - }, -/obj/effect/decal/cleanable/vomit/old, -/turf/open/floor/iron/white, -/area/ruin/space/has_grav/port_tarkon/centerhall) -"SM" = ( -/obj/effect/decal/cleanable/confetti, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/atmos) -"SP" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/item/broken_bottle, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/starboardhall) -"SQ" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/light/directional/north, -/obj/effect/turf_decal/tile/brown/half{ - dir = 1 - }, -/obj/structure/closet/crate, -/obj/item/storage/belt/utility, -/obj/item/clothing/gloves/color/black, -/obj/item/clothing/head/utility/hardhat/orange, -/obj/item/clothing/suit/hazardvest, -/obj/item/clothing/gloves/color/yellow, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/storage) -"ST" = ( -/obj/structure/window/reinforced/spawner/directional/west, -/obj/item/broken_bottle, -/obj/effect/decal/cleanable/confetti, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/plating, -/area/ruin/space/has_grav/port_tarkon/atmos) -"SU" = ( -/turf/closed/wall, -/area/ruin/space/has_grav/port_tarkon/observ) -"SV" = ( -/obj/structure/table, -/obj/item/paper_bin, -/obj/item/pen, -/obj/effect/turf_decal/tile/blue/half{ - dir = 4 - }, -/obj/item/folder/red, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/port_tarkon/comms) -"SW" = ( -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ - dir = 1 - }, -/obj/effect/turf_decal/delivery/blue, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/centerhall) -"SX" = ( -/obj/effect/decal/cleanable/ash, -/obj/effect/spawner/random/maintenance, -/turf/open/floor/plating, -/area/ruin/space/has_grav/port_tarkon/forehall) -"SY" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/centerhall) -"SZ" = ( -/obj/structure/table/reinforced, -/obj/item/kitchen/rollingpin, -/turf/open/floor/iron/cafeteria, -/area/ruin/space/has_grav/port_tarkon/kitchen) -"Tb" = ( -/obj/machinery/light/dim/directional/south, -/obj/effect/turf_decal/tile/brown/anticorner{ - dir = 8 - }, -/obj/structure/rack/shelf, -/obj/effect/decal/cleanable/dirt, -/obj/item/crowbar, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/storage) -"Te" = ( -/obj/effect/turf_decal/tile/purple/half{ - dir = 1 - }, -/obj/machinery/airalarm/directional/north, -/obj/effect/mapping_helpers/airalarm/all_access, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/port_tarkon/developement) -"Ti" = ( -/obj/effect/turf_decal/stripes{ - dir = 5 - }, -/obj/structure/cable, -/obj/effect/decal/cleanable/dirt, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden, -/turf/open/floor/engine, -/area/ruin/space/has_grav/port_tarkon/atmos) -"Tk" = ( -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ - dir = 8 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/port_tarkon/comms) -"Tl" = ( -/obj/effect/spawner/structure/window/reinforced, -/turf/open/floor/plating, -/area/ruin/space/has_grav/port_tarkon/forehall) -"To" = ( -/obj/structure/closet, -/obj/effect/decal/cleanable/dirt, -/obj/item/clothing/shoes/workboots/mining, -/obj/item/clothing/shoes/winterboots, -/obj/item/clothing/shoes/jackboots, -/obj/item/clothing/under/rank/engineering/engineer/nova/utility, -/obj/item/clothing/under/rank/engineering/engineer/nova/utility, -/obj/item/storage/backpack/industrial, -/obj/item/storage/backpack/duffelbag/engineering, -/obj/item/storage/backpack/satchel/eng, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon) -"Ts" = ( -/obj/structure/closet/crate, -/obj/item/bedsheet/dorms, -/obj/item/bedsheet/dorms, -/obj/item/bedsheet/dorms, -/obj/item/bedsheet/dorms, -/obj/item/bedsheet/dorms, -/obj/item/bedsheet/dorms, -/obj/item/bedsheet/dorms, -/obj/item/bedsheet/dorms_double, -/obj/item/bedsheet/dorms_double, -/obj/item/bedsheet/dorms_double, -/obj/item/bedsheet/dorms_double, -/obj/effect/turf_decal/tile/brown/anticorner{ - dir = 4 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/storage) -"Tx" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/cable, -/obj/effect/decal/cleanable/confetti, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/forehall) -"Tz" = ( -/obj/machinery/door/airlock/public/glass{ - name = "Kitchen" - }, -/obj/machinery/door/firedoor/solid, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/kitchen) -"TF" = ( -/obj/structure/cable, -/obj/machinery/power/apc/auto_name/directional/west, -/obj/effect/mapping_helpers/apc/no_charge, -/obj/effect/mapping_helpers/apc/unlocked, -/obj/structure/table/reinforced, -/obj/item/folder/yellow, -/obj/item/folder/red, -/obj/effect/turf_decal/tile/brown/half{ - dir = 8 - }, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/cargo) -"TH" = ( -/obj/machinery/airalarm/directional/north, -/obj/effect/mapping_helpers/airalarm/all_access, -/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/tile/neutral/anticorner{ - dir = 4 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/centerhall) -"TJ" = ( -/obj/machinery/light/dim/directional/north, -/obj/effect/turf_decal/tile/purple/half{ - dir = 1 - }, -/obj/effect/decal/cleanable/confetti, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/port_tarkon/developement) -"TL" = ( -/obj/machinery/power/solar_control{ - dir = 1; - id = "aftport"; - name = "Station Solar Control" - }, -/obj/structure/cable, -/obj/item/paper/guides/jobs/engi/solars, -/obj/effect/turf_decal/tile/yellow/half, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/power1) -"TM" = ( -/obj/effect/decal/cleanable/confetti, -/obj/effect/spawner/random/trash/food_packaging, -/obj/effect/decal/cleanable/vomit/old, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon) -"TP" = ( -/obj/machinery/light/warm/directional/east, -/obj/effect/turf_decal/tile/neutral/half{ - dir = 4 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/centerhall) -"TQ" = ( -/obj/structure/cable, -/obj/machinery/airalarm/directional/east, -/obj/effect/mapping_helpers/airalarm/all_access, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/effect/turf_decal/tile/brown/half{ - dir = 4 - }, -/obj/item/broken_bottle, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/mining) -"TT" = ( -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ - dir = 8 - }, -/obj/item/storage/box/stockparts/basic, -/obj/structure/table/reinforced, -/obj/item/stack/sheet/glass{ - amount = 25 - }, -/obj/item/stack/cable_coil, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/port_tarkon/developement) -"TV" = ( -/obj/machinery/firealarm/directional/north, -/obj/effect/turf_decal/tile/yellow/half{ - dir = 1 - }, -/obj/effect/decal/cleanable/confetti, -/obj/effect/spawner/random/trash/food_packaging, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/toolstorage) -"TW" = ( -/turf/closed/wall/r_wall, -/area/ruin/space/has_grav/port_tarkon/starboardhall) -"TX" = ( -/obj/machinery/airalarm/directional/east, -/obj/effect/mapping_helpers/airalarm/all_access, -/obj/effect/turf_decal/tile/blue/half{ - dir = 4 - }, -/obj/machinery/light/dim/directional/east, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/port_tarkon/comms) -"Ua" = ( -/obj/structure/safe/floor, -/obj/item/stack/sheet/bluespace_crystal{ - amount = 5 - }, -/obj/item/stack/sheet/mineral/diamond{ - amount = 10 - }, -/obj/item/weldingtool/abductor, -/obj/item/circuitboard/machine/bluespace_miner, -/obj/structure/window/reinforced/spawner/directional/south, -/obj/item/paper/fluff/ruins/tarkon/coupplans, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/port_tarkon/developement) -"Ud" = ( -/obj/structure/closet/crate/bin, -/obj/effect/spawner/random/trash/food_packaging, -/obj/item/mod/module/springlock, -/obj/effect/turf_decal/tile/red/half, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/secoff) -"Uf" = ( -/obj/effect/turf_decal/tile/purple/half{ - dir = 1 - }, -/obj/structure/table/reinforced, -/obj/item/circuitboard/machine/anomaly_refinery, -/obj/effect/decal/cleanable/dirt, -/obj/item/crowbar, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/port_tarkon/developement) -"Ug" = ( -/obj/effect/turf_decal/tile/red/half, -/obj/structure/chair/greyscale{ - dir = 1 - }, -/obj/effect/mob_spawn/ghost_role/human/tarkon/sec{ - dir = 1 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/secoff) -"Uh" = ( -/obj/effect/decal/cleanable/confetti, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/forehall) -"Un" = ( -/obj/structure/cable, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/atmos) -"Up" = ( -/obj/effect/decal/cleanable/confetti, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/white, -/area/ruin/space/has_grav/port_tarkon/centerhall) -"Ur" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/turf_decal/tile/brown, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/storage) -"Ut" = ( -/obj/machinery/door/airlock/maintenance_hatch, -/obj/structure/cable, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/afthall) -"Uv" = ( -/obj/machinery/hydroponics/soil, -/obj/effect/spawner/random/trash/food_packaging, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/grass, -/area/ruin/space/has_grav/port_tarkon/garden) -"Uw" = ( -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/observ) -"Ux" = ( -/obj/effect/turf_decal/tile/brown/half{ - dir = 8 - }, -/obj/effect/spawner/random/trash/food_packaging, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/starboardhall) -"Uz" = ( -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/centerhall) -"UG" = ( -/obj/effect/decal/cleanable/vomit/old, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon) -"UI" = ( -/obj/effect/spawner/structure/window/reinforced/plasma, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden, -/turf/open/floor/plating, -/area/ruin/space/has_grav/port_tarkon/atmos) -"UJ" = ( -/obj/effect/turf_decal/sand/plating, -/turf/open/floor/plating/airless, -/area/solars/tarkon) -"US" = ( -/obj/effect/spawner/structure/window/reinforced, -/turf/open/floor/plating, -/area/ruin/space/has_grav/port_tarkon/starboardhall) -"UV" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/port_tarkon/developement) -"UX" = ( -/obj/structure/cable, -/obj/machinery/airalarm/directional/west, -/obj/effect/mapping_helpers/airalarm/all_access, -/obj/effect/turf_decal/tile/yellow/half{ - dir = 8 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/power1) -"UZ" = ( -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/porthall) -"Vc" = ( -/obj/machinery/door/airlock/research, -/obj/machinery/door/firedoor/solid, -/obj/effect/mapping_helpers/airlock/access/all/tarkon/general, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/developement) -"Vg" = ( -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/cafeteria, -/area/ruin/space/has_grav/port_tarkon/kitchen) -"Vi" = ( -/obj/effect/turf_decal/sand/plating, -/obj/structure/grille, -/turf/open/floor/plating/airless, -/area/ruin/space/has_grav) -"Vj" = ( -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon) -"Vk" = ( -/obj/structure/closet, -/obj/effect/decal/cleanable/dirt, -/obj/item/clothing/shoes/workboots/mining, -/obj/item/clothing/shoes/winterboots, -/obj/item/clothing/shoes/jackboots, -/obj/item/clothing/under/rank/captain/nova/utility, -/obj/item/clothing/under/rank/captain/nova/utility, -/obj/item/storage/backpack/duffelbag/blueshield, -/obj/item/storage/backpack/blueshield, -/obj/item/storage/backpack/satchel/blueshield, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon) -"Vl" = ( -/obj/effect/turf_decal/tile/purple/half{ - dir = 4 - }, -/obj/structure/window/reinforced/spawner/directional/south, -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/port_tarkon/developement) -"Vm" = ( -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ - dir = 8 - }, -/obj/item/broken_bottle, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/garden) -"Vn" = ( -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/mining) -"Vu" = ( -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ - dir = 1 - }, -/obj/effect/turf_decal/tile/brown/half, -/obj/effect/spawner/random/trash/food_packaging, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/starboardhall) -"Vw" = ( -/obj/structure/sign/warning/no_smoking, -/turf/closed/wall/r_wall, -/area/ruin/space/has_grav/port_tarkon/atmos) -"Vx" = ( -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, -/turf/open/floor/carpet/purple, -/area/ruin/space/has_grav/port_tarkon/dorms) -"Vy" = ( -/obj/machinery/light/dim/directional/east, -/obj/effect/turf_decal/tile/brown/half{ - dir = 4 - }, -/obj/item/broken_bottle, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/mining) -"Vz" = ( -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ - dir = 1 - }, -/obj/effect/turf_decal/delivery/blue, -/obj/effect/turf_decal/tile/neutral/half, -/obj/effect/decal/cleanable/confetti, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/centerhall) -"VA" = ( -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/obj/effect/decal/cleanable/confetti, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/centerhall) -"VE" = ( -/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/yellow/half{ - dir = 4 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/power1) -"VG" = ( -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/atmos) -"VH" = ( -/obj/effect/turf_decal/tile/neutral/anticorner{ - dir = 1 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/centerhall) -"VJ" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/forehall) -"VK" = ( -/obj/effect/turf_decal/tile/blue/half{ - dir = 4 - }, -/obj/effect/decal/cleanable/confetti, -/obj/item/broken_bottle, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/port_tarkon/comms) -"VN" = ( -/obj/effect/decal/cleanable/confetti, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/effect/spawner/random/trash/food_packaging, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/porthall) -"VO" = ( -/obj/machinery/light/dim/directional/north, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/forehall) -"VP" = ( -/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/tile/neutral/half{ - dir = 1 - }, -/obj/effect/decal/cleanable/confetti, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/centerhall) -"VS" = ( -/obj/machinery/atmospherics/miner/oxygen, -/turf/open/floor/engine/o2, -/area/ruin/space/has_grav/port_tarkon/atmos) -"VT" = ( -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ - dir = 8 - }, -/obj/effect/decal/cleanable/confetti, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/toolstorage) -"VU" = ( -/obj/effect/spawner/structure/window/reinforced, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/port_tarkon/developement) -"VV" = ( -/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/ruin/space/has_grav/port_tarkon/forehall) -"Wa" = ( -/turf/closed/mineral/random, -/area/ruin/space/has_grav) -"Wc" = ( -/obj/effect/turf_decal/sand, -/obj/structure/closet/emcloset, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/mining) -"Wd" = ( -/obj/effect/turf_decal/vg_decals/atmos/nitrogen, -/obj/machinery/light/small/directional/west, -/obj/machinery/air_sensor/tarkon/nitrogen_tank{ - pixel_x = -26 - }, -/turf/open/floor/engine/n2, -/area/ruin/space/has_grav/port_tarkon/atmos) -"We" = ( -/obj/machinery/computer{ - desc = "A computer long since rendered non-functional due to lack of maintenance. Spitting out error messages."; - dir = 4; - name = "Broken Computer" - }, -/obj/effect/turf_decal/tile/blue/anticorner{ - dir = 8 - }, -/obj/item/paper/fluff/ruins/tarkon/goals, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/port_tarkon/comms) -"Wh" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/airalarm/directional/east, -/obj/effect/turf_decal/tile/red/half{ - dir = 4 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/secoff) -"Wn" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/computer/cryopod/tarkon/directional/west, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/centerhall) -"Wp" = ( -/obj/machinery/vending/snack/teal, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/afthall) -"Wq" = ( -/obj/structure/cable, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/cargo) -"Ws" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/decal/cleanable/vomit/old, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/observ) -"Wt" = ( -/turf/closed/mineral/random, -/area/awaymission) -"Wu" = ( -/obj/machinery/light_switch/directional/north, -/obj/effect/turf_decal/tile/brown/anticorner{ - dir = 4 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/cargo) -"Ww" = ( -/obj/structure/frame/machine, -/obj/item/circuitboard/machine/module_duplicator, -/obj/effect/turf_decal/tile/purple/half{ - dir = 1 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/port_tarkon/developement) -"WB" = ( -/obj/machinery/power/solar, -/obj/structure/cable, -/obj/effect/turf_decal/stripes/asteroid/line{ - dir = 1 - }, -/turf/open/misc/asteroid/airless, -/area/solars/tarkon) -"WC" = ( -/obj/machinery/light/dim/directional/west, -/obj/structure/window/reinforced/spawner/directional/north, -/obj/effect/turf_decal/tile/neutral/fourcorners, -/obj/machinery/computer/atmos_control/tarkon/mix_tank{ - dir = 4 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/atmos) -"WD" = ( -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/port_tarkon/comms) -"WE" = ( -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/forehall) -"WJ" = ( -/obj/effect/spawner/random/trash/food_packaging, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon) -"WM" = ( -/obj/machinery/light/small/directional/east, -/obj/machinery/oven/range, -/turf/open/floor/iron/cafeteria, -/area/ruin/space/has_grav/port_tarkon/kitchen) -"WO" = ( -/obj/structure/table/reinforced, -/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/ruin/space/has_grav/port_tarkon/centerhall) -"WP" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/door/poddoor/shutters{ - id = "ptatmos" - }, -/obj/effect/spawner/structure/window/reinforced/no_firelock, -/turf/open/floor/plating, -/area/ruin/space/has_grav/port_tarkon/atmos) -"WQ" = ( -/obj/structure/window/reinforced/spawner/directional/south, -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/port_tarkon/developement) -"WU" = ( -/turf/closed/wall, -/area/ruin/space/has_grav/port_tarkon/porthall) -"WW" = ( -/obj/effect/turf_decal/tile/purple/half, -/obj/effect/spawner/structure/window/reinforced, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/port_tarkon/developement) -"WY" = ( -/turf/open/space/basic, -/area/template_noop) -"Xb" = ( -/obj/structure/cable, -/obj/machinery/power/solar, -/obj/effect/turf_decal/stripes/asteroid/line{ - dir = 1 - }, -/turf/open/misc/asteroid/airless, -/area/solars/tarkon) -"Xc" = ( -/obj/effect/decal/cleanable/confetti, -/obj/effect/decal/cleanable/vomit/old, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon) -"Xh" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/structure/cable, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/port_tarkon/developement) -"Xj" = ( -/obj/machinery/door/airlock/multi_tile/public/glass, -/obj/machinery/door/firedoor/solid, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/garden) -"Xn" = ( -/obj/structure/ore_box, -/obj/effect/turf_decal/tile/brown/anticorner, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/mining) -"Xq" = ( -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/centerhall) -"Xr" = ( -/obj/structure/reagent_dispensers/watertank, -/turf/open/floor/plating, -/area/ruin/space/has_grav/port_tarkon/afthall) -"Xw" = ( -/obj/item/broken_bottle, -/obj/effect/decal/cleanable/dirt, -/obj/structure/chair/sofa/corp/left{ - dir = 1 - }, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/observ) -"Xy" = ( -/turf/closed/wall/r_wall, -/area/ruin/space/has_grav/port_tarkon/toolstorage) -"Xz" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/mining) -"XD" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/structure/cable, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/starboardhall) -"XE" = ( -/obj/structure/toilet{ - dir = 8 - }, -/obj/machinery/light/small/directional/north, -/obj/machinery/door/window/left/directional/west{ - opacity = 1 - }, -/obj/effect/decal/cleanable/vomit/old, -/turf/open/floor/iron/white, -/area/ruin/space/has_grav/port_tarkon/centerhall) -"XG" = ( -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/garden) -"XH" = ( -/obj/machinery/atmospherics/components/binary/pump/off/general{ - dir = 8 - }, -/obj/effect/turf_decal/tile/purple/fourcorners, -/obj/structure/cable, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/atmos) -"XI" = ( -/obj/machinery/light_switch/directional/north, -/obj/effect/turf_decal/delivery/blue, -/obj/effect/turf_decal/tile/neutral/half{ - dir = 1 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/centerhall) -"XJ" = ( -/obj/machinery/door/firedoor/solid, -/obj/machinery/door/airlock/public/glass{ - name = "Fore Primary Hallway" - }, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/forehall) -"XN" = ( -/obj/machinery/airalarm/directional/north, -/obj/effect/mapping_helpers/airalarm/all_access, -/obj/effect/spawner/random/trash/food_packaging, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/forehall) -"XO" = ( -/obj/structure/fluff/empty_sleeper{ - dir = 4 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon) -"XS" = ( -/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/neutral/half{ - dir = 4 - }, -/obj/effect/decal/cleanable/confetti, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/centerhall) -"XT" = ( -/obj/machinery/hydroponics/soil, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/grass, -/area/ruin/space/has_grav/port_tarkon/garden) -"XV" = ( -/obj/effect/spawner/random/trash/food_packaging, -/obj/machinery/button/door{ - id = "ptafthall"; - name = "shutter controls"; - pixel_x = -26 - }, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/afthall) -"XZ" = ( -/turf/closed/wall/r_wall/rust, -/area/ruin/space/has_grav) -"Yb" = ( -/obj/machinery/firealarm/directional/east, -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, -/obj/effect/turf_decal/tile/yellow/half{ - dir = 4 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/power1) -"Yc" = ( -/obj/item/solar_assembly, -/obj/structure/cable, -/obj/effect/turf_decal/stripes/asteroid/line, -/turf/open/misc/asteroid/airless, -/area/solars/tarkon) -"Yf" = ( -/obj/effect/turf_decal/tile/purple/half, -/obj/structure/window/reinforced/spawner/directional/west, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/port_tarkon/developement) -"Yk" = ( -/obj/effect/turf_decal/tile/neutral/anticorner{ - dir = 1 - }, -/obj/effect/decal/cleanable/confetti, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/centerhall) -"Yl" = ( -/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/neutral/half{ - dir = 4 - }, -/obj/effect/spawner/random/trash/food_packaging, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/centerhall) -"Yp" = ( -/obj/machinery/airalarm/directional/north, -/obj/effect/turf_decal/tile/brown/anticorner{ - dir = 1 - }, -/obj/effect/spawner/random/trash/food_packaging, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/starboardhall) -"Yr" = ( -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ - dir = 8 - }, -/obj/effect/turf_decal/tile/neutral/half{ - dir = 4 - }, -/obj/effect/decal/cleanable/confetti, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/centerhall) -"Yt" = ( -/obj/structure/chair/office, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/port_tarkon/comms) -"Yu" = ( -/obj/effect/turf_decal/tile/red/half, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/secoff) -"Yv" = ( -/obj/machinery/hydroponics/soil, -/obj/machinery/light/small/directional/east, -/obj/effect/spawner/random/trash/food_packaging, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/grass, -/area/ruin/space/has_grav/port_tarkon/garden) -"Yy" = ( -/obj/structure/table, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/item/folder/blue, -/obj/item/pen, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/port_tarkon/comms) -"YB" = ( -/obj/structure/window/reinforced/spawner/directional/north, -/obj/structure/window/reinforced/spawner/directional/west, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/port_tarkon/developement) -"YC" = ( -/obj/machinery/power/apc/auto_name/directional/north, -/obj/effect/mapping_helpers/apc/no_charge, -/obj/effect/mapping_helpers/apc/unlocked, -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/airalarm/directional/south, -/obj/effect/mapping_helpers/airalarm/all_access, -/turf/open/floor/wood/large, -/area/ruin/space/has_grav/port_tarkon/dorms) -"YD" = ( -/obj/machinery/light/dim/directional/west, -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ - dir = 4 - }, -/obj/effect/turf_decal/tile/brown/half{ - dir = 8 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/mining) -"YF" = ( -/obj/effect/spawner/structure/window/reinforced, -/obj/effect/turf_decal/tile/purple/half, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/port_tarkon/developement) -"YI" = ( -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/port_tarkon/developement) -"YK" = ( -/obj/effect/spawner/structure/window/reinforced/no_firelock, -/obj/machinery/door/poddoor/shutters{ - id = "ptcomms" - }, -/turf/open/floor/plating, -/area/ruin/space/has_grav/port_tarkon/comms) -"YT" = ( -/turf/closed/wall, -/area/ruin/space/has_grav/port_tarkon/cargo) -"YW" = ( -/obj/machinery/light/dim/directional/west, -/obj/effect/turf_decal/tile/brown/half{ - dir = 8 - }, -/obj/item/broken_bottle, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/starboardhall) -"YZ" = ( -/obj/structure/mirror/directional/west, -/obj/structure/sink/directional/east, -/obj/effect/decal/cleanable/vomit/old, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/white, -/area/ruin/space/has_grav/port_tarkon/centerhall) -"Za" = ( -/obj/machinery/firealarm/directional/west, -/obj/effect/turf_decal/tile/purple/half{ - dir = 8 - }, -/obj/effect/decal/cleanable/confetti, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/port_tarkon/developement) -"Zc" = ( -/turf/closed/mineral/random/high_chance, -/area/solars/tarkon) -"Zi" = ( -/obj/machinery/door/window/brigdoor/left/directional/south, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/port_tarkon/developement) -"Zl" = ( -/obj/effect/turf_decal/sand, -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/mining) -"Zm" = ( -/obj/machinery/atmospherics/components/unary/portables_connector/visible{ - dir = 4 - }, -/obj/effect/turf_decal/tile/yellow/fourcorners, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/atmos) -"Zn" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/turf_decal/tile/neutral/anticorner{ - dir = 1 - }, -/obj/effect/spawner/random/trash/food_packaging, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/centerhall) -"Zp" = ( -/obj/structure/table/reinforced, -/obj/item/storage/belt/utility, -/obj/effect/turf_decal/tile/yellow/half{ - dir = 8 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/toolstorage) -"Zq" = ( -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/port_tarkon/atmos) -"Zr" = ( -/obj/structure/table/optable, -/obj/effect/turf_decal/tile/blue/anticorner{ - dir = 8 - }, -/obj/effect/decal/cleanable/vomit/old, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/trauma) -"Zv" = ( -/obj/machinery/door/window/left/directional/west, -/obj/item/broken_bottle, -/obj/effect/decal/cleanable/confetti, -/obj/effect/decal/cleanable/dirt, -/obj/item/crowbar, -/turf/open/floor/plating, -/area/ruin/space/has_grav/port_tarkon/atmos) -"Zw" = ( -/obj/machinery/light/dim/directional/east, -/obj/structure/window/reinforced/spawner/directional/north, -/obj/effect/turf_decal/tile/yellow/fourcorners, -/obj/machinery/computer/atmos_control/tarkon/nitrous_tank{ - dir = 8 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/atmos) -"Zy" = ( -/obj/effect/decal/cleanable/confetti, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/trauma) -"ZA" = ( -/obj/effect/decal/cleanable/confetti, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/storage) -"ZC" = ( -/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/neutral/anticorner, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/centerhall) -"ZE" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/decal/cleanable/confetti, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/cafeteria, -/area/ruin/space/has_grav/port_tarkon/kitchen) -"ZG" = ( -/turf/closed/wall/r_wall, -/area/ruin/space/has_grav/port_tarkon/storage) -"ZH" = ( -/obj/structure/cable, -/obj/structure/rack, -/obj/item/stack/cable_coil, -/obj/item/stack/sheet/iron/fifty, -/obj/item/stack/sheet/glass/fifty, -/obj/effect/turf_decal/tile/yellow/half, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/power1) -"ZJ" = ( -/turf/open/misc/asteroid/airless, -/area/awaymission) -"ZK" = ( -/obj/effect/turf_decal/tile/purple, -/obj/structure/curtain, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/dark, -/area/ruin/space/has_grav/port_tarkon/developement) -"ZM" = ( -/obj/effect/spawner/structure/window/reinforced, -/turf/open/floor/plating, -/area/ruin/space/has_grav/port_tarkon/afthall) -"ZN" = ( -/turf/closed/wall, -/area/ruin/space/has_grav/port_tarkon/afthall) -"ZO" = ( -/obj/effect/spawner/structure/window/reinforced, -/turf/open/floor/plating, -/area/ruin/space/has_grav/port_tarkon/developement) -"ZS" = ( -/obj/effect/turf_decal/tile/brown/half{ - dir = 4 - }, -/obj/effect/decal/cleanable/confetti, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/storage) -"ZU" = ( -/obj/machinery/door/airlock/mining/glass, -/obj/structure/cable, -/obj/machinery/door/firedoor/solid, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/mining) -"ZV" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/airalarm/directional/north, -/obj/effect/mapping_helpers/airalarm/all_access, -/obj/effect/turf_decal/tile/brown/half{ - dir = 1 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon/storage) -"ZX" = ( -/obj/machinery/door/airlock/public/glass{ - name = "Cryogenics Room" - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/door/firedoor/solid, -/obj/structure/cable, -/obj/modular_map_connector, -/turf/open/floor/iron, -/area/ruin/space/has_grav/port_tarkon) -"ZY" = ( -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ - dir = 1 - }, -/obj/machinery/airalarm/directional/west, -/obj/effect/mapping_helpers/airalarm/all_access, -/turf/open/floor/carpet/red, -/area/ruin/space/has_grav/port_tarkon/dorms) - -(1,1,1) = {" -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -"} -(2,1,1) = {" -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -RM -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -RM -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -"} -(3,1,1) = {" -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -RM -WY -WY -WY -WY -RM -WY -WY -WY -EW -WY -WY -WY -WY -WY -WY -WY -RM -WY -WY -WY -WY -WY -WY -RM -WY -WY -"} -(4,1,1) = {" -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -RM -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -"} -(5,1,1) = {" -WY -WY -WY -WY -RM -WY -WY -WY -WY -WY -WY -WY -WY -EW -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -zo -zo -zo -zo -zo -zo -zo -zo -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -"} -(6,1,1) = {" -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -zo -zo -zo -zo -zo -zo -zo -zo -zo -zo -zo -zo -zo -zo -zo -zo -zo -zo -zo -zo -zo -zo -Eb -zo -zo -zo -Wa -Wa -sv -Wa -Wa -sv -Wa -Wa -Wa -Wa -Wa -Wa -Wa -Wa -Wa -Wa -WY -WY -WY -WY -WY -WY -RM -WY -WY -WY -WY -WY -"} -(7,1,1) = {" -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -zo -zo -zo -zo -zo -zo -zo -zo -zo -zo -zo -zo -zo -zo -zo -zo -zo -zo -zo -zo -zo -zo -zo -zo -zo -iv -zo -Wa -Wa -Wa -sv -Wa -sv -Wa -Wa -Wa -Wa -Wa -sv -Wa -sv -Wa -sv -sv -sv -sv -Wa -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -"} -(8,1,1) = {" -WY -WY -WY -WY -WY -WY -WY -EW -WY -WY -WY -WY -zo -zo -zo -zo -zo -zo -zo -zo -zo -zo -zo -zo -zo -zo -zo -zo -zo -zo -zo -zo -zo -zo -zo -zo -zo -zo -zo -iI -Wa -Wa -sv -Wa -Wa -Wa -Wa -sv -Wa -Wa -sv -Wa -sv -sv -Wa -Wa -Wa -sv -Wa -Wa -Wa -Wa -Wa -WY -WY -WY -WY -WY -WY -WY -WY -"} -(9,1,1) = {" -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -zo -zo -zo -zo -zo -EQ -EQ -EQ -WU -WU -WU -WU -WU -WU -WU -WU -WU -WU -WU -WU -FY -FY -FY -FY -WU -WU -WU -xt -xt -WP -Vw -xt -xt -xt -xt -xt -xt -xt -xt -xt -xt -sv -sv -Wa -sv -Wa -Wa -Wa -sv -sv -Wa -Wa -sv -Wa -WY -WY -WY -WY -WY -WY -WY -"} -(10,1,1) = {" -WY -WY -WY -WY -WY -WY -WY -WY -WY -zo -zo -zo -zo -EQ -EQ -EQ -Uw -oG -jg -bK -bK -hy -bK -bK -bK -IY -oe -hz -RB -jv -uV -RB -RB -RB -Kf -RB -VN -gp -df -jB -og -lH -pA -yC -lH -Wd -nm -lH -rL -VS -lH -sv -sv -sv -zo -zo -Wa -sv -Wa -Wa -Wa -Wa -Wa -Wa -WY -WY -WY -WY -WY -WY -WY -"} -(11,1,1) = {" -WY -WY -WY -WY -WY -WY -WY -WY -zo -zo -zo -EQ -EQ -EQ -Uw -eu -Uw -qe -WU -rW -hN -UZ -wt -QD -UZ -hN -UZ -UZ -QD -UZ -ow -UZ -Ef -UZ -QD -hN -RB -PK -dC -eb -lp -lH -te -QH -lH -sj -jj -lH -oI -AF -lH -sv -jO -iB -zo -zo -zo -sv -sv -sv -sv -sv -sv -Wa -Wa -WY -WY -WY -WY -WY -WY -"} -(12,1,1) = {" -WY -WY -WY -WY -WY -WY -WY -WY -zo -zo -EQ -EQ -De -sK -bq -Uw -xN -qe -vz -QD -pj -Ib -UZ -UZ -mq -UZ -ow -UZ -UZ -UZ -Ib -QD -pj -FC -UZ -UZ -jc -gp -SM -CP -mo -lH -ts -NK -lH -xp -NK -lH -Bj -NK -lH -xt -GE -xt -zo -WY -zo -xt -sv -Wa -sv -sv -Wa -Wa -Wa -WY -WY -WY -WY -WY -WY -"} -(13,1,1) = {" -WY -WY -WY -WY -WY -WY -WY -zo -zo -zo -EQ -KS -yl -La -eu -Uw -Uw -hH -nP -nP -nP -nP -Vc -li -nP -nP -nP -nP -nP -nP -nP -nP -nP -nP -cX -AN -Et -xt -hi -Qd -VG -WC -Bi -HU -mc -iG -ad -qk -kr -hM -iw -Fr -Gp -xt -xt -kS -cd -xt -Wa -sv -Wa -sv -sv -Wa -Wa -Wa -RM -WY -WY -WY -WY -"} -(14,1,1) = {" -WY -WY -RM -WY -WY -WY -WY -zo -zo -EQ -EQ -NH -dt -at -Uw -Uw -Uw -as -nP -Ik -yz -kT -On -vs -On -xu -ZO -NF -gu -Za -wQ -fV -mM -nP -UZ -ow -Sf -xt -dl -CP -SM -VG -VG -VG -VG -SM -aH -zV -VG -aH -AA -gs -wW -Ld -sc -Ex -xB -xt -Wa -Wa -sv -Wa -sv -Wa -Wa -zo -WY -WY -WY -WY -WY -"} -(15,1,1) = {" -WY -WY -WY -WY -WY -WY -zo -zo -zo -EQ -kp -Uw -LW -Uw -Uw -Uw -eu -qe -nP -Uf -YI -lF -YI -YI -eo -RH -ZO -QY -fG -YI -nh -YI -Ed -nP -Ht -Mi -bK -xt -An -jJ -zc -VG -zV -VG -VG -VG -VG -VG -SM -VG -bn -xt -Fs -xt -Ak -MU -eZ -xt -zo -sv -Wa -sv -sv -Wa -zo -zo -WY -WY -WY -WY -WY -"} -(16,1,1) = {" -WY -WY -WY -WY -WY -WY -zo -zo -EQ -EQ -eu -bX -Ws -Oi -Oi -Oi -Oi -qe -nP -ef -YI -UV -YI -YI -Id -RH -ZO -KP -Ic -YI -yO -xY -vB -nP -UZ -MS -bK -xt -pW -Un -VG -VG -SM -VG -PP -VG -VG -VG -VG -kd -lI -KM -UI -xt -xt -sa -xt -xt -zo -zo -Wa -sv -Wa -Wa -zo -zo -WY -WY -RM -WY -WY -"} -(17,1,1) = {" -WY -WY -WY -WY -WY -WY -zo -zo -EQ -Xw -Uw -lr -Gl -Ez -bT -Uw -MJ -qe -nP -fa -yG -UV -YI -YI -Id -RH -ZO -Ww -Xh -YI -As -Id -EJ -Vc -UZ -QD -BX -xt -IG -Un -VG -VG -VG -VG -VG -VG -VG -SM -VG -VG -Fh -Zq -hP -QW -Rm -FT -sL -zo -Wa -Vi -sv -sv -Wa -zo -zo -zo -WY -WY -WY -WY -WY -"} -(18,1,1) = {" -WY -WY -WY -WY -WY -zo -zo -zo -EQ -Cx -Uw -jF -Gf -gE -QL -RJ -ml -qe -nP -QX -YI -Er -Er -Er -Er -sr -ZO -PM -pD -YI -YI -Id -RH -nP -ow -UZ -bK -xt -fv -Un -zV -VG -SM -VG -VG -SM -aH -VG -SM -VG -Fh -DD -wh -Ob -xt -zC -xt -zo -Vi -zo -nx -Wa -Wa -zo -zo -zo -WY -WY -WY -WY -WY -"} -(19,1,1) = {" -WY -WY -WY -WY -WY -zo -zo -zo -SU -SU -SU -SU -SU -SU -SU -eL -SU -HW -nP -pE -YI -YI -OZ -YI -RT -Sg -pY -ko -Qf -un -un -Az -tA -nP -xZ -UZ -bK -xt -VG -lu -VG -aH -VG -aH -VG -VG -VG -VG -VG -SM -NG -zT -Ti -eQ -xt -Ke -cd -zo -Vi -zo -zo -zo -tt -zo -zo -zo -WY -WY -WY -WY -WY -"} -(20,1,1) = {" -WY -WY -WY -WY -WY -zo -zo -zo -Wa -sv -sv -Wa -Wa -Wa -kf -DR -cs -Rk -nP -CB -VU -VU -pa -VU -VU -YF -ZO -TJ -Id -YI -YI -DK -bm -nP -UZ -Ib -Sf -xt -OD -qA -Un -Un -Un -Un -lu -Un -Un -lu -VG -VG -jG -lQ -aZ -OQ -xt -WY -zo -zo -sv -FG -nx -nx -Wa -zo -zo -zo -WY -WY -WY -WY -WY -"} -(21,1,1) = {" -WY -WY -WY -WY -WY -zo -zo -Wa -Wa -sv -Wa -sv -Wa -sv -kf -KU -JB -Rk -nP -Gv -gt -YI -OZ -rG -YI -Su -ZO -yx -fJ -YI -YI -DQ -Pf -HQ -tQ -UZ -hy -xt -SM -VG -aH -Zw -Zm -Rg -oQ -PB -cv -Qu -uK -XH -Me -hf -hf -xt -xt -zo -zo -sv -Wa -Wa -zb -kA -kF -zo -zo -zo -WY -WY -WY -WY -WY -"} -(22,1,1) = {" -WY -WY -WY -RM -WY -zo -zo -Wa -Wa -Wa -Wa -Wa -sv -Wa -kf -VO -DR -Rk -nP -xT -YI -YI -OZ -rG -YI -RH -ZO -cc -TT -uw -YI -rF -Ni -nP -tQ -UZ -OI -xt -ST -Zv -IP -lH -NK -ub -lH -NK -lV -lH -NK -Qg -lH -xt -xt -xt -sv -sv -sv -sv -Wa -LJ -UJ -UJ -rg -av -MG -LJ -WY -WY -WY -WY -WY -"} -(23,1,1) = {" -WY -WY -WY -WY -WY -zo -Wa -Wa -Wa -sv -sv -sv -sv -sv -kf -sI -zB -Rk -nP -oc -yG -OZ -OZ -rG -YI -no -ZO -PM -YI -YI -YI -uw -Sn -nP -tQ -QD -PQ -xt -vO -pc -HO -lH -Rf -ld -lH -pU -xj -lH -Qk -fR -lH -sv -sv -sv -sv -Wa -Zc -LJ -rg -av -MG -UJ -At -Mr -ye -LJ -WY -WY -WY -WY -WY -"} -(24,1,1) = {" -WY -WY -WY -WY -WY -Wa -sv -Wa -sv -Wa -sv -sv -Wa -Wa -kf -jN -JB -Rk -nP -RO -YI -OZ -YI -ZK -Sp -lw -ZO -RI -Jz -sN -rH -Cw -aY -nP -tQ -Mi -bK -xt -uh -uh -Fo -lH -GB -vp -lH -om -hR -lH -RY -MD -lH -sv -sv -sv -sv -LJ -LJ -LJ -Qn -UJ -Xb -LJ -Qn -Mr -If -LJ -WY -WY -WY -WY -WY -"} -(25,1,1) = {" -WY -WY -WY -WY -WY -Wa -sv -Wa -Wa -Wa -sv -sv -Wa -Wa -kf -DR -DR -Tx -db -nS -VU -pa -VU -WW -Xy -mi -rh -rh -rh -rh -rh -rh -rh -WU -tE -tQ -Sf -xt -xt -xt -xt -xt -xt -xt -xt -xt -xt -bO -xt -xt -xt -GY -sv -sv -sv -LJ -LJ -LJ -Qn -UJ -IL -LJ -Ft -Mr -ye -LJ -WY -WY -WY -WY -WY -"} -(26,1,1) = {" -WY -WY -WY -WY -WY -Wa -Wa -sv -sv -Wa -sv -Wa -Wa -sv -kf -ce -DR -dB -db -PM -WQ -OZ -tz -RH -Xy -KE -Zp -gv -hw -lU -RU -pJ -wC -WU -QD -MS -Sj -WU -uC -ag -YZ -Up -SL -KV -Iw -zm -UX -wa -cK -CI -Ck -Iw -zo -zo -zo -LJ -LJ -LJ -Qn -UJ -IL -LJ -gX -Mr -WB -LJ -WY -WY -WY -WY -WY -"} -(27,1,1) = {" -WY -WY -WY -WY -WY -Wa -sv -sv -Wa -Wa -sv -Wa -Wa -Wa -kf -JB -KU -Rk -db -Te -Zi -OZ -lj -bj -Xy -eE -HF -oK -HF -kJ -FU -FN -rh -WU -Qs -AN -hA -WU -Ki -vR -iq -iq -xW -iq -Iw -xL -MO -Jj -BS -CV -ZH -EN -zo -zo -zo -LJ -LJ -LJ -Bk -UJ -ye -LJ -gX -UJ -ye -LJ -WY -WY -RM -WY -WY -"} -(28,1,1) = {" -WY -WY -WY -WY -WY -Wa -sv -Wa -sv -Wa -sv -Wa -Wa -sv -kf -LH -KW -Rk -db -PM -kx -OZ -iU -Kj -Xy -rz -HF -fl -rE -bD -yY -ak -yY -VH -ro -CA -ep -Kg -Ki -MC -Ki -xW -iq -Up -Iw -zW -CV -zJ -BS -HS -BW -Qx -Qx -Qx -Qx -av -av -av -OR -UJ -uU -av -qi -UJ -uU -av -WY -WY -WY -WY -WY -"} -(29,1,1) = {" -WY -WY -WY -WY -WY -Wa -sv -sv -Wa -sv -sv -sv -sv -Wa -kf -DR -DR -Tx -db -PM -Cf -OZ -jE -RH -Xy -CX -VT -OT -dZ -yY -yY -kO -dT -ul -SY -Eg -SY -Uz -ro -MB -Ki -Ki -XE -aq -Iw -vj -Yb -VE -AM -IO -BW -JN -xP -xP -gn -Mr -UJ -UJ -UJ -UJ -UJ -UJ -UJ -UJ -Mr -OS -WY -WY -WY -WY -WY -"} -(30,1,1) = {" -WY -WY -WY -WY -WY -Wa -Wa -sv -Wa -sv -Wa -sv -sv -Wa -kf -DR -DR -ed -db -DO -wx -OZ -YB -Yf -Xy -rV -OT -pt -yY -yY -Dc -bi -Hn -JT -di -TP -xU -xU -XS -on -IE -Ki -Ki -Iw -Iw -Iw -Iw -Iw -ge -HS -TL -Qx -Qx -Qx -Qx -Gy -Gy -Gy -Hb -Mr -Al -Gy -Pl -UJ -fw -Gy -WY -WY -WY -WY -WY -"} -(31,1,1) = {" -WY -WY -RM -WY -WY -Wa -sv -Wa -Wa -sv -Wa -Wa -Wa -Wa -kf -DR -JB -Pc -db -fh -Ua -OZ -tz -RH -Xy -TV -yF -yY -yY -Zn -oC -yj -uv -uv -uv -uv -uv -uv -ly -IQ -AT -IE -Fb -dy -Fm -lA -hZ -Iw -aX -HS -my -Qx -zo -zo -zo -LJ -LJ -LJ -Ft -UJ -IL -LJ -gX -Mr -co -LJ -WY -WY -WY -WY -WY -"} -(32,1,1) = {" -WY -WY -WY -WY -WY -Wa -Wa -sv -Wa -sv -Wa -sv -Wa -sv -kf -vq -DR -Rk -db -Te -Zi -UV -lj -Kj -Xy -JF -lt -Rr -VH -jz -PZ -uv -uv -hm -Vk -uv -Vj -XO -ly -ly -Sv -qv -rA -GR -xP -ps -eD -Iw -iM -pH -FX -Qx -zo -zo -zo -LJ -LJ -LJ -Qn -UJ -IL -LJ -Yc -Mr -ye -LJ -WY -WY -WY -WY -WY -"} -(33,1,1) = {" -WY -WY -WY -WY -WY -Wa -sv -Wa -Wa -sv -sv -Wa -Wa -Wa -kf -DR -hB -Rk -db -HY -Vl -jM -GU -ME -Xy -wC -rh -yY -bV -dX -Qp -uv -lS -oV -Vj -uv -Lg -UG -Vj -ly -cT -Xq -gl -bz -Iw -lK -Ha -Iw -pf -VE -RX -Iw -zo -zo -zo -LJ -LJ -LJ -wV -UJ -ye -LJ -Qn -Mr -ye -LJ -WY -WY -WY -WY -WY -"} -(34,1,1) = {" -WY -WY -WY -WY -WY -Wa -sv -Wa -sv -sv -Wa -Wa -sv -Wa -kf -Cq -Cq -Cp -db -db -db -db -db -db -yd -kf -kf -NM -jz -rw -uv -uv -LA -Vj -Jp -uv -Vj -WJ -zA -uv -uv -ww -iO -MB -Iw -Iw -Iw -Iw -Iw -Au -Iw -Iw -ZN -of -of -LJ -LJ -LJ -Qn -UJ -co -LJ -Qn -Mr -If -LJ -WY -WY -WY -WY -WY -"} -(35,1,1) = {" -WY -WY -WY -WY -WY -Wa -Wa -sv -sv -sv -Wa -sv -sv -Wa -kf -XN -DR -Tx -XJ -fK -WE -sM -WE -eG -Eu -WE -BI -DS -yB -PZ -Fe -oV -lC -ux -pv -uv -RL -Vj -Vj -oV -mC -ab -SY -PZ -lx -LN -CR -ct -mu -Pz -LN -jr -XV -Wp -of -of -LJ -LJ -aF -Gy -Ho -LJ -At -Mr -ye -LJ -WY -WY -WY -WY -WY -"} -(36,1,1) = {" -WY -WY -WY -WY -WY -Wa -Wa -Wa -Wa -sv -sv -Wa -Wa -sv -kf -sI -cs -Rk -Tl -WE -WE -Uh -WE -Uh -WE -WE -Tl -qb -SW -Qo -uv -fp -Vj -uD -dq -hr -SK -Vj -lC -uH -uv -XI -Oo -Vz -ZM -By -LN -tI -Qi -Pz -By -LN -Eq -LN -yv -of -of -LJ -LJ -LJ -LJ -LJ -aF -Gy -Ho -LJ -WY -WY -WY -WY -WY -"} -(37,1,1) = {" -WY -WY -WY -WY -RM -Wa -sv -sv -sv -sv -sv -Wa -Wa -Wa -kf -KU -eY -Rk -Nj -VV -VV -Oq -Lm -kG -Nr -ek -dh -VP -AX -PZ -Fe -Vj -oV -sm -lT -uv -Vj -Xc -Vj -WJ -ZX -PO -ID -DA -JW -Pz -xo -pM -NU -Pz -GT -fP -Il -fP -Qi -Jx -of -zo -zo -zo -zo -zo -zo -zo -zo -zo -WY -WY -WY -WY -WY -"} -(38,1,1) = {" -WY -WY -WY -WY -WY -Wa -Wa -Wa -Wa -sv -sv -Wa -sv -Wa -kf -VO -DR -tp -kf -kf -kf -kf -Gx -kf -kf -kf -kf -GW -LG -PZ -uv -uv -Jl -Vj -FB -uv -RL -Vj -zA -uv -uv -Sv -qL -KA -hj -hj -hj -hj -hj -Ut -ZN -OM -OM -Sq -Gk -OM -OM -YK -YK -YK -zo -zo -zo -zo -zo -zo -WY -WY -RM -WY -WY -"} -(39,1,1) = {" -WY -WY -WY -WY -WY -Wa -Wa -sv -Wa -sv -Wa -sv -sv -sv -kf -DR -JB -Rk -kf -nZ -jZ -jZ -bt -jZ -SX -ug -kf -Ki -mH -kb -BV -uv -tT -Vj -Lg -uv -TM -lC -Vj -ly -xc -VA -gl -KA -OB -Gd -kI -oq -hj -kk -oL -OM -yy -EY -wY -DZ -zL -pw -We -YK -YK -YK -zo -zo -zo -zo -WY -WY -WY -WY -WY -"} -(40,1,1) = {" -WY -WY -WY -WY -WY -Wa -sv -sv -Wa -Wa -sv -sv -Wa -Wa -kf -cs -KU -Rk -kf -Se -Fl -mt -Cm -by -Nz -kU -Se -Ki -TH -LG -sn -uv -uv -To -rk -uv -Vj -et -ly -ly -Sv -ID -ZC -WO -Ek -zs -ck -pd -hj -oL -oL -OM -Ox -fL -dw -Af -WD -WD -Ie -gk -ke -YK -zo -zo -zo -zo -WY -WY -WY -WY -WY -"} -(41,1,1) = {" -WY -WY -WY -WY -WY -Wa -sv -Wa -Wa -sv -sv -Wa -sv -Wa -kf -DR -DR -dB -cV -cV -cV -cV -cV -cV -cV -cV -cV -Ki -Fb -GW -kc -MB -uv -uv -uv -uv -uv -uv -ly -Yk -oN -qL -KA -KA -sl -Ra -mO -pd -hj -mr -am -OM -CW -fL -WD -WD -WD -Af -WD -Af -cr -YK -YK -zo -zo -zo -WY -WY -WY -WY -WY -"} -(42,1,1) = {" -WY -WY -WY -WY -WY -Wa -Wa -sv -sv -Wa -Wa -sv -Wa -Wa -kf -DR -DR -Rk -cV -GF -Ls -wc -KJ -fI -Bp -vN -Zr -Ki -Ki -tH -GW -Ci -ff -ro -Mp -CG -ro -br -ro -oN -to -qL -KA -kN -Ra -Vg -AC -SZ -hj -OG -Xr -OM -vo -Hr -WD -WD -mX -WD -WD -uN -oS -Kc -YK -zo -zo -zo -WY -WY -WY -WY -WY -"} -(43,1,1) = {" -WY -WY -WY -WY -WY -Wa -Wa -sv -Wa -Wa -sv -sv -Wa -sv -kf -JB -KQ -ed -cV -EV -IW -HX -gd -Zy -zZ -Nq -RC -Ki -ai -tH -tH -ik -xU -eg -SY -SY -ID -XS -Yl -xU -xU -ZC -tk -IU -WM -sl -iy -FS -hj -YT -YT -OM -vG -zl -Ch -Ch -wG -Yy -kW -Ch -tn -FR -YK -YK -zo -zo -WY -WY -WY -WY -WY -"} -(44,1,1) = {" -WY -WY -WY -WY -WY -Wa -sv -sv -Wa -sv -Wa -Wa -Wa -Wa -kf -vU -DR -Rk -iA -xi -xi -ha -Ae -Ae -Ae -yS -nu -Ki -ta -Jq -Ki -jP -Ki -Kp -Hn -Yr -SI -gJ -gJ -gJ -Px -lR -gJ -gJ -hj -po -ZE -KZ -hj -Rp -Dk -OM -kq -Af -Tk -WD -Yt -mK -gW -PE -Tk -oH -hL -YK -zo -zo -WY -WY -WY -WY -WY -"} -(45,1,1) = {" -WY -WY -WY -WY -WY -Wa -sv -sv -Wa -Wa -sv -Wa -sv -Wa -kf -VO -KW -Tx -Lr -Zy -ga -gd -gd -gd -gd -IH -ah -Ki -Kl -RK -Wn -SY -Ki -Ki -iT -US -nb -gJ -Uv -Hm -KO -XG -En -GS -hj -nc -Jc -Ju -hj -rZ -nL -OM -ut -OF -Hc -ry -VK -EE -SV -OF -TX -an -JX -YK -zo -zo -WY -WY -WY -WY -WY -"} -(46,1,1) = {" -WY -WY -WY -WY -WY -Wa -sv -sv -sv -sv -Wa -Wa -sv -Wa -kf -Cq -Cq -NL -cV -EV -Mt -gd -Zy -gd -mD -aS -ah -Ki -vF -AX -EA -cA -Jq -Ki -DN -LS -Hg -gJ -XT -Gs -KO -Ly -sX -Uv -ft -Ra -td -Ju -hj -YT -tC -QC -QC -QC -QC -ZG -ZG -ZG -ZG -ZG -ZG -ZG -ZG -ZG -zo -zo -WY -WY -WY -WY -WY -"} -(47,1,1) = {" -WY -WY -WY -RM -WY -Wa -sv -sv -Wa -sv -Wa -Wa -sv -Wa -kf -cs -DR -VJ -cV -ku -EB -hE -rv -vl -JY -bF -ba -Ki -Mz -jA -vd -QP -Jq -Ki -Bg -fU -SP -Xj -yn -Cu -go -Nt -sX -XG -Tz -sl -FZ -dW -hj -ru -gP -TF -JL -Qy -QB -ng -nF -Sb -Jm -NR -Sb -Sb -mG -ZG -zo -zo -WY -WY -WY -WY -WY -"} -(48,1,1) = {" -WY -WY -WY -WY -WY -Wa -Wa -Wa -sv -sv -Wa -Wa -sv -sv -kf -DR -DR -VJ -cV -cV -cV -cV -cV -cV -cV -cV -cV -Ki -AP -AP -AP -AP -AP -AP -JE -XD -Hg -bA -XG -XG -gb -iJ -sX -Rh -hj -Bn -hj -hj -hj -vm -jV -Wq -JI -JI -Lf -ng -MV -Dv -Dv -Dv -Ur -ZS -md -cu -zo -zo -WY -WY -RM -WY -WY -"} -(49,1,1) = {" -WY -WY -WY -WY -WY -Wa -Wa -sv -sv -sv -Wa -sv -sv -Wa -kf -DR -KW -VJ -kf -Wa -sv -Wa -Wa -Wa -Wa -Wa -Wa -Wa -vC -HB -dA -eB -Nw -bg -AG -cU -vn -gJ -pP -yn -XG -XG -Vm -Gt -hj -uR -uR -hV -hj -Wu -kD -kD -kD -Ce -xO -Ih -qH -cQ -ZA -PR -rB -ng -oE -ZG -zo -zo -WY -WY -WY -WY -WY -"} -(50,1,1) = {" -WY -WY -WY -WY -WY -Wa -sv -Wa -sv -Wa -sv -sv -Wa -Wa -kf -PF -PF -Ks -kf -Wa -sv -sv -Wa -Wa -sv -Wa -sv -Wa -vC -LY -zt -Hf -Yu -gD -LS -Om -MF -gJ -rd -BC -pP -wX -XT -Yv -hj -uR -uR -hV -hj -fB -hQ -fB -fB -Rx -Lf -Pq -Gu -PR -PR -PR -dP -rK -RE -qh -zo -zo -WY -WY -WY -WY -WY -"} -(51,1,1) = {" -WY -WY -WY -WY -WY -Wa -sv -Wa -sv -sv -sv -Wa -Wa -sv -kf -jZ -jZ -jZ -kf -Wa -Wa -Wa -sv -sv -Wa -Wa -Wa -sv -vC -qQ -Hk -Hf -Ud -gD -iT -US -mT -gJ -gJ -gJ -gJ -gJ -gJ -gJ -hj -hj -hj -hj -hj -Yp -vA -th -fB -LD -Lf -ng -ZV -PR -PR -PR -Io -cE -hu -Lo -zo -zo -WY -WY -WY -WY -WY -"} -(52,1,1) = {" -WY -WY -WY -WY -WY -Wa -sv -Wa -sv -sv -sv -sv -Wa -Wa -sv -Wa -Wa -Wa -sv -Wa -sv -sv -sv -sv -Wa -Wa -Wa -Wa -vC -bY -zt -lW -aU -gD -LS -LS -MF -LS -LS -bf -LS -LS -Om -LS -zp -AD -Ux -AD -YW -sd -MF -Vu -fB -LD -dE -ng -ui -PR -PR -ZA -dP -cE -jW -Lo -zo -zo -WY -WY -WY -WY -WY -"} -(53,1,1) = {" -WY -WY -WY -WY -WY -Wa -Wa -sv -Wa -sv -sv -sv -sv -sv -Wa -sv -sv -Wa -sv -sv -Wa -Wa -Wa -Wa -sv -Wa -sv -Wa -vC -xH -Le -lW -pT -SG -Cv -cU -MF -LS -Om -LS -Ps -LS -Cv -Ow -zp -yD -LS -LS -Cv -Ps -MF -Da -QA -Qh -pl -ng -SQ -PR -PR -PR -dP -cE -jW -Lo -zo -zo -WY -WY -WY -WY -WY -"} -(54,1,1) = {" -WY -WY -WY -WY -WY -zo -Wa -Wa -sv -sv -sv -Wa -Wa -Wa -sv -Wa -sv -sv -Wa -Wa -sv -sv -Wa -Wa -sv -sv -sv -Wa -vC -ia -zt -lW -DP -vC -cn -Ow -MF -CY -qS -MF -MF -MF -ka -eK -fT -zM -Mu -zM -zM -jC -zM -MY -fB -PS -oy -ng -BF -PR -PR -PR -Io -cE -hu -Lo -zo -zo -WY -WY -WY -WY -WY -"} -(55,1,1) = {" -WY -WY -WY -WY -WY -zo -Wa -Wa -sv -sv -sv -sv -Wa -Wa -Wa -sv -Wa -Wa -sv -sv -sv -sv -sv -Wa -sv -sv -Wa -sv -vC -PT -zt -lW -Ug -vC -TW -TW -TW -eI -eI -eI -Kk -eI -eI -eI -Hy -yU -mV -yU -yU -ZU -yU -Hy -Hy -Hy -Hy -ng -vZ -PR -PR -ZA -dP -ym -KL -Ix -zo -zo -WY -WY -WY -RM -WY -"} -(56,1,1) = {" -WY -RM -WY -WY -WY -zo -zo -Wa -Wa -Wa -sv -sv -Wa -sv -Wa -Wa -sv -sv -sv -Wa -Wa -Wa -sv -sv -sv -Wa -sv -sv -vC -jY -zt -lW -nk -ls -lW -EC -vC -Oj -tY -Jv -tc -Jv -Im -CS -Hy -in -Cc -zy -op -wZ -le -hl -Sk -zy -rD -ng -vE -cQ -PR -PR -Os -aP -aP -ZG -zo -zo -WY -WY -WY -WY -WY -"} -(57,1,1) = {" -WY -WY -WY -WY -WY -zo -zo -Wa -sv -Wa -sv -sv -sv -Wa -Wa -Wa -Wa -sv -sv -sv -sv -sv -sv -Wa -Wa -Wa -Wa -sv -vC -NX -zt -lW -Yu -gD -JQ -NN -vC -Vx -Ji -Cy -El -tM -dv -Ij -Hy -Rc -Vn -nt -aT -Rq -aT -aT -Pp -Nl -sq -ng -Gb -Dv -nz -Dv -CM -Sb -Tb -cu -zo -zo -WY -WY -WY -WY -WY -"} -(58,1,1) = {" -WY -WY -WY -WY -WY -WY -zo -Wa -Wa -Wa -Wa -sv -Wa -sv -Wa -Wa -Wa -sv -sv -Wa -sv -Wa -sv -Wa -sv -Wa -Wa -Wa -vC -Fk -Oa -lW -cD -vC -vC -vC -vC -Jv -Jv -Jv -YC -Jv -Jv -Jv -Hy -Sa -Fq -LQ -LQ -os -LQ -Xz -Mn -dR -eM -ng -Ts -dk -uM -iC -gN -ZS -jU -ZG -zo -zo -WY -WY -WY -WY -WY -"} -(59,1,1) = {" -WY -WY -WY -WY -WY -WY -zo -zo -Wa -Wa -sv -sv -sv -Wa -sv -Wa -sv -sv -Wa -sv -Wa -Wa -sv -sv -sv -Wa -Wa -sv -vC -ph -zt -lW -Yu -gD -kR -kX -vC -xq -ov -ve -sw -lD -yA -ZY -Hy -hS -wm -cq -jo -TQ -CZ -Bo -Vy -gS -IK -ng -ng -ng -ng -ng -ng -ng -ng -ZG -zo -vQ -WY -WY -WY -WY -WY -"} -(60,1,1) = {" -WY -WY -WY -WY -WY -WY -uo -zo -Wa -Wa -Wa -sv -sv -sv -Wa -Wa -sv -sv -Wa -Wa -sv -sv -Wa -Wa -Wa -Wa -Wa -sv -vC -nW -Nx -Wh -CE -hY -IF -EC -vC -sD -JO -Jv -pX -Jv -Pa -Hi -zf -zf -zf -KB -CL -zf -zf -zf -zf -zf -zf -Hy -Wa -Wa -sv -sv -Wa -Wa -Wa -zo -vQ -FE -WY -WY -WY -WY -WY -"} -(61,1,1) = {" -WY -WY -WY -WY -WY -WY -FE -vQ -zo -Wa -Wa -Wa -Wa -sv -sv -Wa -sv -sv -Wa -Wa -Wa -Wa -sv -Wa -sv -Wa -Wa -sv -vC -vC -vC -vC -vC -vC -vC -vC -vC -Sw -Sw -Sw -Sw -Sw -Sw -Sw -zf -Ng -Cc -BU -Kr -YD -Jw -Bq -Wc -Wc -bH -sv -sv -sv -Wa -Wa -Wa -Wa -zo -zo -vQ -WY -WY -WY -WY -WY -WY -"} -(62,1,1) = {" -WY -WY -WY -WY -ZJ -WY -FE -zo -zo -zo -Wa -sv -Wa -sv -sv -Wa -sv -sv -sv -sv -Wa -Wa -Wa -sv -sv -Wa -Wa -Wa -sv -Wa -sv -sv -sv -sv -Wa -sv -sv -Wa -sv -sv -Wa -Wa -XZ -Wa -bH -Lp -Pp -Zl -qF -gy -iu -Cs -qr -HH -ip -zo -sv -Wa -sv -Wa -Wa -zo -zo -vQ -FE -WY -WY -WY -WY -WY -WY -"} -(63,1,1) = {" -WY -WY -WY -jn -Wt -WY -FE -WY -vQ -zo -zo -Wa -Wa -sv -Wa -Wa -sv -Wa -sv -Wa -sv -sv -sv -sv -Wa -Wa -Wa -Wa -sv -sv -sv -Wa -Wa -Wa -sv -Wa -Wa -sv -sv -Wa -Wa -Wa -XZ -Wa -bH -lZ -kh -tV -zd -ud -Xn -bH -Ba -ot -bH -zo -sv -Wa -Wa -Wa -zo -zo -vQ -FE -WY -WY -WY -WY -WY -WY -WY -"} -(64,1,1) = {" -WY -WY -WY -jn -jn -FE -FE -qD -FE -vQ -zo -zo -zo -Wa -sv -Wa -Wa -Wa -sv -Wa -sv -sv -Wa -Wa -Wa -Wa -sv -sv -Wa -Wa -sv -sv -sv -sv -sv -sv -sv -sv -Wa -sv -sv -Wa -Wa -XZ -bH -KG -bH -gA -gA -bH -KG -bH -bH -bH -bH -zo -sv -sv -Wa -zo -zo -vQ -FE -WY -WY -WY -WY -WY -WY -WY -WY -"} -(65,1,1) = {" -WY -WY -Wt -jn -jn -Wt -FE -WY -WY -WY -WY -zo -vQ -zo -zo -Wa -sv -sv -Wa -sv -Wa -Wa -Wa -sv -sv -Wa -sv -Wa -Wa -sv -Wa -Wa -Wa -Wa -sv -Wa -Wa -Wa -Wa -Wa -Wa -zo -zo -zo -zo -zo -zo -zo -dr -zo -zo -zo -zo -zo -zo -zo -Wa -zo -zo -vQ -vQ -FE -WY -WY -WY -WY -WY -WY -WY -WY -WY -"} -(66,1,1) = {" -WY -WY -jn -jn -Wt -jn -FE -FE -FE -FE -FE -FE -FE -vQ -zo -zo -zo -Wa -sv -Wa -sv -sv -sv -sv -sv -Wa -Wa -Wa -Wa -sv -Wa -sv -Wa -Wa -sv -Wa -Wa -Wa -sv -Wa -zo -zo -zo -zo -zo -zo -zo -zo -zo -zo -zo -zo -zo -zo -zo -zo -zo -zo -vQ -FE -WY -WY -WY -WY -WY -WY -WY -RM -WY -WY -WY -"} -(67,1,1) = {" -WY -ZJ -Wt -jn -jn -jn -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -"} -(68,1,1) = {" -WY -WY -WY -Wt -jn -Wt -ZJ -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -RM -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -"} -(69,1,1) = {" -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -EW -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -RM -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -"} -(70,1,1) = {" -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -RM -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -"} -(71,1,1) = {" -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -WY -"} diff --git a/_maps/RandomRuins/SpaceRuins/nova/port_tarkon/dorm_cabin.dmm b/_maps/RandomRuins/SpaceRuins/nova/port_tarkon/dorm_cabin.dmm new file mode 100644 index 00000000000..67f62f0d301 --- /dev/null +++ b/_maps/RandomRuins/SpaceRuins/nova/port_tarkon/dorm_cabin.dmm @@ -0,0 +1,195 @@ +//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE +"a" = ( +/obj/structure/bed/double, +/obj/effect/spawner/random/bedsheet/double, +/turf/open/floor/carpet/royalblack, +/area/template_noop) +"b" = ( +/obj/structure/closet/cabinet, +/obj/effect/spawner/random/food_or_drink/booze, +/obj/effect/spawner/random/food_or_drink/booze, +/obj/effect/spawner/random/food_or_drink/booze, +/obj/effect/spawner/random/food_or_drink/booze, +/obj/effect/spawner/random/food_or_drink/booze, +/obj/effect/spawner/random/food_or_drink/booze, +/obj/effect/spawner/random/food_or_drink/booze, +/obj/effect/spawner/random/food_or_drink/booze, +/obj/effect/spawner/random/food_or_drink/booze, +/obj/effect/spawner/random/food_or_drink/booze, +/obj/machinery/light/directional/west, +/turf/open/floor/wood/parquet, +/area/template_noop) +"c" = ( +/obj/structure/cable, +/obj/structure/closet/secure_closet/freezer/fridge/all_access, +/obj/effect/spawner/random/food_or_drink/three_course_meal, +/obj/effect/spawner/random/food_or_drink/three_course_meal, +/obj/machinery/power/apc/auto_name/directional/west, +/obj/effect/mapping_helpers/apc/full_charge, +/obj/effect/mapping_helpers/apc/unlocked, +/obj/effect/spawner/random/food_or_drink/three_course_meal, +/turf/open/floor/wood/parquet, +/area/template_noop) +"d" = ( +/obj/structure/curtain/bounty, +/turf/open/floor/carpet/royalblack, +/area/template_noop) +"e" = ( +/obj/machinery/airalarm/directional/east, +/obj/effect/mapping_helpers/airalarm/all_access, +/turf/open/floor/carpet/royalblue, +/area/template_noop) +"g" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 1 + }, +/turf/open/floor/wood/parquet, +/area/template_noop) +"o" = ( +/obj/machinery/light_switch/directional/east, +/turf/open/floor/wood/parquet, +/area/template_noop) +"q" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 8 + }, +/turf/open/floor/carpet/royalblue, +/area/template_noop) +"r" = ( +/obj/effect/spawner/random/structure/chair_comfy{ + dir = 1 + }, +/obj/machinery/firealarm/directional/east, +/turf/open/floor/carpet/royalblue, +/area/template_noop) +"s" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/wood/parquet, +/area/template_noop) +"t" = ( +/obj/structure/fireplace, +/turf/open/floor/stone, +/area/template_noop) +"x" = ( +/obj/modular_map_connector, +/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/parquet, +/area/template_noop) +"z" = ( +/turf/open/floor/wood/parquet, +/area/template_noop) +"A" = ( +/obj/structure/extinguisher_cabinet/directional/north, +/obj/item/grown/log/tree, +/obj/item/grown/log/tree, +/obj/item/grown/log/tree, +/obj/item/grown/log/tree, +/obj/item/grown/log/tree, +/turf/open/floor/stone, +/area/template_noop) +"B" = ( +/obj/structure/curtain/bounty/start_closed, +/turf/open/floor/carpet/royalblack, +/area/template_noop) +"D" = ( +/obj/effect/spawner/random/structure/table_fancy, +/obj/effect/spawner/random/food_or_drink/booze, +/obj/effect/spawner/random/food_or_drink/booze, +/turf/open/floor/carpet/royalblue, +/area/template_noop) +"E" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 4 + }, +/turf/open/floor/wood/parquet, +/area/template_noop) +"F" = ( +/obj/machinery/light/directional/east, +/turf/open/floor/wood/parquet, +/area/template_noop) +"G" = ( +/obj/item/hatchet/wooden, +/obj/machinery/airalarm/directional/north, +/obj/effect/mapping_helpers/airalarm/all_access, +/turf/open/floor/stone, +/area/template_noop) +"I" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/spawner/random/structure/chair_comfy{ + dir = 1 + }, +/turf/open/floor/carpet/royalblue, +/area/template_noop) +"K" = ( +/obj/machinery/firealarm/directional/north, +/turf/open/floor/wood/parquet, +/area/template_noop) +"N" = ( +/obj/structure/cable, +/obj/machinery/firealarm/directional/west, +/obj/machinery/vending/clothing, +/turf/open/floor/wood/parquet, +/area/template_noop) +"O" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 1 + }, +/obj/machinery/airalarm/directional/west, +/obj/effect/mapping_helpers/airalarm/all_access, +/turf/open/floor/wood/parquet, +/area/template_noop) +"Y" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/carpet/royalblue, +/area/template_noop) + +(1,1,1) = {" +b +c +N +x +O +d +a +"} +(2,1,1) = {" +K +E +z +s +z +B +B +"} +(3,1,1) = {" +G +Y +I +s +g +d +a +"} +(4,1,1) = {" +t +q +D +z +z +B +B +"} +(5,1,1) = {" +A +e +r +o +F +d +a +"} diff --git a/_maps/RandomRuins/SpaceRuins/nova/port_tarkon/dorm_classic.dmm b/_maps/RandomRuins/SpaceRuins/nova/port_tarkon/dorm_classic.dmm new file mode 100644 index 00000000000..4912f4c058f --- /dev/null +++ b/_maps/RandomRuins/SpaceRuins/nova/port_tarkon/dorm_classic.dmm @@ -0,0 +1,264 @@ +//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE +"a" = ( +/obj/structure/table/wood, +/obj/item/flashlight/lamp, +/obj/effect/spawner/random/clothing/beret_or_rabbitears, +/turf/open/floor/carpet/cyan, +/area/template_noop) +"c" = ( +/obj/structure/bed/double/pod, +/obj/effect/spawner/random/bedsheet/any/double, +/obj/machinery/button/door/directional/north{ + id = "ptdorm4"; + name = "Door Lock Control"; + normaldoorcontrol = 1; + specialfunctions = 4 + }, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 8 + }, +/turf/open/floor/carpet/red, +/area/template_noop) +"f" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 1 + }, +/turf/open/floor/carpet/cyan, +/area/template_noop) +"k" = ( +/obj/machinery/airalarm/directional/east, +/obj/effect/mapping_helpers/airalarm/all_access, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/carpet/purple, +/area/template_noop) +"l" = ( +/obj/machinery/door/airlock/wood{ + id_tag = "ptdorm4"; + name = "Couples Suite" + }, +/obj/machinery/door/firedoor/solid, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/wood/large, +/area/template_noop) +"m" = ( +/obj/structure/bed/pod{ + dir = 1 + }, +/obj/effect/spawner/random/bedsheet/any{ + dir = 1 + }, +/obj/machinery/button/door/directional/south{ + id = "ptdorm1"; + name = "Door Lock Control"; + normaldoorcontrol = 1; + specialfunctions = 4 + }, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 4 + }, +/turf/open/floor/carpet/purple, +/area/template_noop) +"o" = ( +/obj/structure/table/wood, +/obj/item/flashlight/lamp/bananalamp, +/obj/effect/spawner/random/clothing/funny_hats, +/turf/open/floor/carpet/purple, +/area/template_noop) +"q" = ( +/obj/machinery/light_switch/directional/north, +/obj/machinery/firealarm/directional/south{ + pixel_y = -31 + }, +/obj/modular_map_connector, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/wood/large, +/area/template_noop) +"r" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, +/turf/open/floor/carpet/purple, +/area/template_noop) +"t" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/wood/large, +/area/template_noop) +"y" = ( +/obj/machinery/vending/clothing, +/obj/machinery/light/directional/east, +/turf/open/floor/wood/large, +/area/template_noop) +"B" = ( +/obj/structure/table/wood, +/obj/item/flashlight/lamp/green, +/obj/effect/spawner/random/clothing/kittyears_or_rabbitears, +/turf/open/floor/carpet/red, +/area/template_noop) +"C" = ( +/obj/machinery/airalarm/directional/west, +/obj/effect/mapping_helpers/airalarm/all_access, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, +/turf/open/floor/carpet/black, +/area/template_noop) +"D" = ( +/obj/machinery/airalarm/directional/east, +/obj/effect/mapping_helpers/airalarm/all_access, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/carpet/cyan, +/area/template_noop) +"E" = ( +/obj/structure/bed/pod{ + dir = 1 + }, +/obj/effect/spawner/random/bedsheet/any{ + dir = 1 + }, +/obj/machinery/button/door/directional/north{ + id = "ptdorm2"; + name = "Door Lock Control"; + normaldoorcontrol = 1; + specialfunctions = 4 + }, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 4 + }, +/turf/open/floor/carpet/cyan, +/area/template_noop) +"G" = ( +/turf/closed/wall, +/area/template_noop) +"H" = ( +/obj/machinery/power/apc/auto_name/directional/north, +/obj/effect/mapping_helpers/apc/full_charge, +/obj/effect/mapping_helpers/apc/unlocked, +/obj/machinery/airalarm/directional/south, +/obj/effect/mapping_helpers/airalarm/all_access, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/wood/large, +/area/template_noop) +"K" = ( +/obj/machinery/door/airlock/wood{ + id_tag = "ptdorm1"; + name = "Private Dorm 1" + }, +/obj/machinery/door/firedoor/solid, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/wood/large, +/area/template_noop) +"N" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/wood/large, +/area/template_noop) +"R" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/carpet/black, +/area/template_noop) +"T" = ( +/obj/machinery/door/airlock/wood{ + id_tag = "ptdorm2"; + name = "Private Dorm 2" + }, +/obj/machinery/door/firedoor/solid, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/wood/large, +/area/template_noop) +"U" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/carpet/red, +/area/template_noop) +"W" = ( +/obj/structure/bed/pod, +/obj/effect/spawner/random/bedsheet/any, +/obj/machinery/button/door/directional/south{ + id = "ptdorm3"; + name = "Door Lock Control"; + normaldoorcontrol = 1; + specialfunctions = 4 + }, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 8 + }, +/turf/open/floor/carpet/black, +/area/template_noop) +"X" = ( +/obj/structure/table/wood, +/obj/item/flashlight/lamp/green, +/obj/effect/spawner/random/clothing/costume, +/turf/open/floor/carpet/black, +/area/template_noop) +"Y" = ( +/obj/machinery/airalarm/directional/west, +/obj/effect/mapping_helpers/airalarm/all_access, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 1 + }, +/turf/open/floor/carpet/red, +/area/template_noop) +"Z" = ( +/obj/machinery/door/airlock/wood{ + id_tag = "ptdorm3"; + name = "Private Dorm 3" + }, +/obj/machinery/door/firedoor/solid, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/wood/large, +/area/template_noop) + +(1,1,1) = {" +o +m +G +q +G +E +a +"} +(2,1,1) = {" +r +k +K +N +T +D +f +"} +(3,1,1) = {" +G +G +G +H +G +G +G +"} +(4,1,1) = {" +C +R +Z +t +l +U +Y +"} +(5,1,1) = {" +X +W +G +y +G +c +B +"} diff --git a/_maps/RandomRuins/SpaceRuins/nova/port_tarkon/dorm_party.dmm b/_maps/RandomRuins/SpaceRuins/nova/port_tarkon/dorm_party.dmm new file mode 100644 index 00000000000..dda3746a749 --- /dev/null +++ b/_maps/RandomRuins/SpaceRuins/nova/port_tarkon/dorm_party.dmm @@ -0,0 +1,268 @@ +//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE +"a" = ( +/obj/machinery/firealarm/directional/south{ + pixel_y = -31 + }, +/obj/structure/chair/plastic{ + dir = 4 + }, +/turf/open/floor/wood/large, +/area/template_noop) +"c" = ( +/obj/machinery/airalarm/directional/west, +/obj/effect/mapping_helpers/airalarm/all_access, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, +/turf/open/floor/carpet/royalblue, +/area/template_noop) +"d" = ( +/obj/machinery/door/airlock/wood{ + id_tag = "ptdorm1"; + name = "Private Dorm 1" + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/carpet/royalblack, +/area/template_noop) +"e" = ( +/obj/machinery/airalarm/directional/east, +/obj/effect/mapping_helpers/airalarm/all_access, +/turf/open/floor/wood/large, +/area/template_noop) +"k" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/wood/large, +/area/template_noop) +"m" = ( +/obj/machinery/airalarm/directional/east, +/obj/effect/mapping_helpers/airalarm/all_access, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/carpet/royalblack, +/area/template_noop) +"o" = ( +/obj/machinery/airalarm/directional/south, +/obj/effect/mapping_helpers/airalarm/all_access, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/wood/large, +/area/template_noop) +"q" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 4 + }, +/turf/open/floor/wood/large, +/area/template_noop) +"s" = ( +/obj/machinery/button/door/directional/south{ + id = "ptdorm1"; + name = "Door Lock Control"; + normaldoorcontrol = 1; + specialfunctions = 4 + }, +/obj/structure/table/wood/fancy/black, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 4 + }, +/obj/effect/spawner/random/entertainment/lighter, +/obj/item/bong, +/obj/item/reagent_containers/hash, +/turf/open/floor/carpet/royalblack, +/area/template_noop) +"t" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/carpet/royalblue, +/area/template_noop) +"w" = ( +/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/large, +/area/template_noop) +"x" = ( +/obj/machinery/button/door/directional/south{ + id = "ptdorm4"; + name = "Door Lock Control"; + normaldoorcontrol = 1; + specialfunctions = 4 + }, +/obj/structure/table/wood/fancy/blue, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 8 + }, +/obj/item/clothing/mask/cigarette/candy, +/obj/item/clothing/mask/cigarette, +/obj/effect/spawner/random/entertainment/lighter, +/turf/open/floor/carpet/royalblue, +/area/template_noop) +"z" = ( +/obj/structure/table/wood/poker, +/obj/item/toy/tennis/yellow, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/wood/large, +/area/template_noop) +"B" = ( +/obj/structure/bed/double, +/obj/effect/spawner/random/bedsheet/double, +/turf/open/floor/carpet/royalblue, +/area/template_noop) +"D" = ( +/turf/closed/wall, +/area/template_noop) +"G" = ( +/turf/open/floor/wood/large, +/area/template_noop) +"I" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 4 + }, +/turf/open/floor/wood/large, +/area/template_noop) +"J" = ( +/obj/structure/chair/plastic, +/obj/machinery/firealarm/directional/east, +/turf/open/floor/wood/large, +/area/template_noop) +"L" = ( +/obj/machinery/power/apc/auto_name/directional/north, +/obj/effect/mapping_helpers/apc/full_charge, +/obj/effect/mapping_helpers/apc/unlocked, +/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/large, +/area/template_noop) +"M" = ( +/obj/machinery/vending/clothing, +/turf/open/floor/wood/large, +/area/template_noop) +"N" = ( +/obj/structure/table/wood/poker, +/turf/open/floor/wood/large, +/area/template_noop) +"O" = ( +/obj/machinery/light_switch/directional/north, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/modular_map_connector, +/turf/open/floor/wood/large, +/area/template_noop) +"P" = ( +/obj/structure/chair/plastic{ + dir = 4 + }, +/turf/open/floor/wood/large, +/area/template_noop) +"R" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, +/turf/open/floor/carpet/royalblack, +/area/template_noop) +"S" = ( +/obj/structure/table/wood/poker, +/obj/item/reagent_containers/cup/glass/bottle/ale{ + pixel_x = -5; + pixel_y = 4 + }, +/obj/item/reagent_containers/cup/glass/bottle/ale{ + pixel_y = 7 + }, +/obj/item/reagent_containers/cup/glass/bottle/ale{ + pixel_x = 6; + pixel_y = 11 + }, +/obj/item/reagent_containers/cup/glass/bottle/ale{ + pixel_x = 6; + pixel_y = 4 + }, +/obj/item/reagent_containers/cup/glass/bottle/ale{ + pixel_x = 6; + pixel_y = -4 + }, +/obj/item/reagent_containers/cup/glass/bottle/ale, +/turf/open/floor/wood/large, +/area/template_noop) +"T" = ( +/obj/machinery/door/airlock/wood{ + id_tag = "ptdorm4"; + name = "Couples Suite" + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/carpet/royalblue, +/area/template_noop) +"V" = ( +/obj/structure/chair/plastic{ + dir = 8 + }, +/turf/open/floor/wood/large, +/area/template_noop) +"W" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 8 + }, +/turf/open/floor/wood/large, +/area/template_noop) +"Y" = ( +/obj/structure/bed/double{ + dir = 1 + }, +/obj/effect/spawner/random/bedsheet/double{ + dir = 1 + }, +/turf/open/floor/carpet/royalblack, +/area/template_noop) +"Z" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 8 + }, +/turf/open/floor/wood/large, +/area/template_noop) + +(1,1,1) = {" +Y +s +D +O +P +G +a +"} +(2,1,1) = {" +R +m +d +w +I +N +q +"} +(3,1,1) = {" +D +D +D +L +k +z +o +"} +(4,1,1) = {" +c +t +T +k +W +S +Z +"} +(5,1,1) = {" +B +x +D +M +J +e +V +"} diff --git a/_maps/RandomRuins/SpaceRuins/nova/port_tarkon/xeno_dead.dmm b/_maps/RandomRuins/SpaceRuins/nova/port_tarkon/xeno_dead.dmm new file mode 100644 index 00000000000..e1e981d7c10 --- /dev/null +++ b/_maps/RandomRuins/SpaceRuins/nova/port_tarkon/xeno_dead.dmm @@ -0,0 +1,157 @@ +//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE +"a" = ( +/turf/template_noop, +/area/template_noop) +"c" = ( +/obj/structure/alien/resin/wall, +/turf/template_noop, +/area/template_noop) +"k" = ( +/obj/structure/spawner/tarkon_xenos/minor, +/turf/template_noop, +/area/template_noop) +"l" = ( +/obj/structure/window/reinforced/spawner/directional/north, +/obj/structure/alien/resin/wall, +/turf/template_noop, +/area/template_noop) +"m" = ( +/obj/machinery/door/window/brigdoor/right/directional/north, +/turf/template_noop, +/area/template_noop) +"p" = ( +/obj/structure/alien/weeds/node, +/obj/structure/alien/resin/wall, +/turf/template_noop, +/area/template_noop) +"u" = ( +/obj/structure/window/reinforced/spawner/directional/south, +/turf/template_noop, +/area/template_noop) +"w" = ( +/obj/structure/alien/weeds, +/turf/template_noop, +/area/template_noop) +"x" = ( +/obj/structure/window/reinforced/spawner/directional/north, +/turf/template_noop, +/area/template_noop) +"B" = ( +/obj/structure/window/reinforced/spawner/directional/south, +/obj/structure/window/reinforced/spawner/directional/east, +/turf/template_noop, +/area/template_noop) +"C" = ( +/obj/effect/mob_spawn/corpse/facehugger, +/obj/structure/alien/egg/burst, +/turf/template_noop, +/area/template_noop) +"D" = ( +/obj/structure/window/reinforced/spawner/directional/north, +/obj/structure/window/reinforced/spawner/directional/east, +/turf/template_noop, +/area/template_noop) +"H" = ( +/obj/structure/window/reinforced/spawner/directional/south, +/obj/structure/alien/resin/wall, +/turf/template_noop, +/area/template_noop) +"J" = ( +/obj/machinery/door/window/brigdoor/right/directional/south, +/turf/template_noop, +/area/template_noop) +"L" = ( +/obj/modular_map_connector, +/obj/structure/alien/resin/wall, +/obj/structure/alien/weeds, +/turf/template_noop, +/area/template_noop) +"O" = ( +/obj/structure/alien/weeds/node, +/turf/template_noop, +/area/template_noop) +"Q" = ( +/obj/structure/window/reinforced/spawner/directional/south, +/obj/structure/alien/weeds/node, +/turf/template_noop, +/area/template_noop) +"X" = ( +/obj/structure/window/reinforced/spawner/directional/east, +/turf/template_noop, +/area/template_noop) +"Z" = ( +/obj/machinery/door/window/brigdoor/right/directional/north, +/obj/structure/alien/weeds/node, +/turf/template_noop, +/area/template_noop) + +(1,1,1) = {" +a +a +w +a +a +"} +(2,1,1) = {" +a +a +O +a +a +"} +(3,1,1) = {" +c +H +L +l +p +"} +(4,1,1) = {" +a +u +a +x +k +"} +(5,1,1) = {" +a +J +a +Z +a +"} +(6,1,1) = {" +X +B +a +D +X +"} +(7,1,1) = {" +a +Q +a +x +a +"} +(8,1,1) = {" +C +J +a +m +a +"} +(9,1,1) = {" +k +u +a +x +a +"} +(10,1,1) = {" +O +u +a +x +a +"} diff --git a/_maps/RandomRuins/SpaceRuins/nova/port_tarkon/xeno_nest.dmm b/_maps/RandomRuins/SpaceRuins/nova/port_tarkon/xeno_nest.dmm new file mode 100644 index 00000000000..d523bdf264f --- /dev/null +++ b/_maps/RandomRuins/SpaceRuins/nova/port_tarkon/xeno_nest.dmm @@ -0,0 +1,97 @@ +//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE +"a" = ( +/obj/structure/alien/resin/wall, +/turf/template_noop, +/area/template_noop) +"f" = ( +/obj/structure/spawner/tarkon_xenos/common, +/turf/template_noop, +/area/template_noop) +"C" = ( +/obj/structure/alien/weeds/node, +/turf/template_noop, +/area/template_noop) +"V" = ( +/obj/structure/alien/weeds, +/turf/template_noop, +/area/template_noop) +"X" = ( +/turf/template_noop, +/area/template_noop) +"Z" = ( +/obj/structure/alien/resin/wall, +/obj/modular_map_connector, +/obj/structure/alien/weeds, +/turf/template_noop, +/area/template_noop) + +(1,1,1) = {" +X +X +V +X +X +"} +(2,1,1) = {" +X +X +C +X +X +"} +(3,1,1) = {" +a +a +Z +a +a +"} +(4,1,1) = {" +a +C +X +X +a +"} +(5,1,1) = {" +X +X +X +C +X +"} +(6,1,1) = {" +X +X +X +X +X +"} +(7,1,1) = {" +C +X +f +X +X +"} +(8,1,1) = {" +X +X +X +X +C +"} +(9,1,1) = {" +X +X +C +X +X +"} +(10,1,1) = {" +X +X +X +X +X +"} diff --git a/_maps/RandomRuins/SpaceRuins/nova/port_tarkon/xeno_safe.dmm b/_maps/RandomRuins/SpaceRuins/nova/port_tarkon/xeno_safe.dmm new file mode 100644 index 00000000000..b857f1d07a8 --- /dev/null +++ b/_maps/RandomRuins/SpaceRuins/nova/port_tarkon/xeno_safe.dmm @@ -0,0 +1,95 @@ +//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE +"a" = ( +/turf/template_noop, +/area/template_noop) +"f" = ( +/obj/machinery/door/window/brigdoor/right/directional/south, +/turf/template_noop, +/area/template_noop) +"o" = ( +/obj/structure/window/reinforced/spawner/directional/north, +/obj/structure/window/reinforced/spawner/directional/east, +/turf/template_noop, +/area/template_noop) +"v" = ( +/obj/structure/window/reinforced/spawner/directional/north, +/turf/template_noop, +/area/template_noop) +"z" = ( +/obj/structure/window/reinforced/spawner/directional/south, +/obj/structure/window/reinforced/spawner/directional/east, +/turf/template_noop, +/area/template_noop) +"I" = ( +/obj/structure/window/reinforced/spawner/directional/south, +/turf/template_noop, +/area/template_noop) +"K" = ( +/obj/machinery/door/window/brigdoor/right/directional/north, +/turf/template_noop, +/area/template_noop) +"Q" = ( +/obj/structure/window/reinforced/spawner/directional/east, +/turf/template_noop, +/area/template_noop) +"S" = ( +/obj/modular_map_connector, +/turf/template_noop, +/area/template_noop) + +(1,1,1) = {" +a +I +S +v +a +"} +(2,1,1) = {" +a +I +a +v +a +"} +(3,1,1) = {" +a +f +a +K +a +"} +(4,1,1) = {" +Q +z +a +o +Q +"} +(5,1,1) = {" +a +I +a +v +a +"} +(6,1,1) = {" +a +f +a +K +a +"} +(7,1,1) = {" +a +I +a +v +a +"} +(8,1,1) = {" +a +I +a +v +a +"} diff --git a/_maps/RandomRuins/SpaceRuins/nova/salvagepost.dmm b/_maps/RandomRuins/SpaceRuins/nova/salvagepost.dmm index 0ddbffca61e..b1a875ecf83 100644 --- a/_maps/RandomRuins/SpaceRuins/nova/salvagepost.dmm +++ b/_maps/RandomRuins/SpaceRuins/nova/salvagepost.dmm @@ -502,7 +502,7 @@ "zf" = ( /obj/structure/bed/pod, /obj/effect/decal/cleanable/dirt, -/obj/item/bedsheet/dorms, +/obj/effect/spawner/random/bedsheet, /turf/open/floor/carpet/red, /area/ruin/powered) "Ae" = ( @@ -657,7 +657,7 @@ /area/template_noop) "Gf" = ( /obj/structure/bed/pod, -/obj/item/bedsheet/dorms, +/obj/effect/spawner/random/bedsheet, /obj/effect/decal/cleanable/dirt, /turf/open/floor/carpet/red, /area/ruin/powered) diff --git a/_maps/RandomRuins/SpaceRuins/nova/scrapheap.dmm b/_maps/RandomRuins/SpaceRuins/nova/scrapheap.dmm index cf46c6f8114..c0c37d9f659 100644 --- a/_maps/RandomRuins/SpaceRuins/nova/scrapheap.dmm +++ b/_maps/RandomRuins/SpaceRuins/nova/scrapheap.dmm @@ -36,9 +36,7 @@ /obj/structure/toilet{ dir = 4 }, -/obj/machinery/door/window{ - dir = 4 - }, +/obj/machinery/door/window/left/directional/east, /obj/structure/window/reinforced/tinted/spawner/directional/south, /turf/open/floor/iron/showroomfloor, /area/ruin/space/has_grav/powered/nova/scrapheap) @@ -261,8 +259,7 @@ /area/ruin/space/has_grav/powered/nova/scrapheap) "gL" = ( /obj/effect/decal/cleanable/dirt, -/obj/machinery/door/window{ - dir = 8; +/obj/machinery/door/window/left/directional/west{ req_access = list("maint_tunnels") }, /obj/effect/turf_decal/trimline/brown/filled/end{ @@ -565,10 +562,8 @@ /obj/structure/bed/medical{ dir = 4 }, -/obj/item/bedsheet/random, -/obj/machinery/door/window{ - dir = 8 - }, +/obj/effect/spawner/random/bedsheet/any, +/obj/machinery/door/window/left/directional/west, /turf/open/floor/iron, /area/ruin/space/has_grav/powered/nova/scrapheap) "pZ" = ( @@ -790,10 +785,8 @@ /obj/structure/bed/medical{ dir = 4 }, -/obj/item/bedsheet/random, -/obj/machinery/door/window{ - dir = 8 - }, +/obj/effect/spawner/random/bedsheet/any, +/obj/machinery/door/window/left/directional/west, /obj/structure/window/reinforced/tinted/spawner/directional/south, /obj/structure/window/reinforced/tinted/spawner/directional/east, /turf/open/floor/iron, @@ -877,10 +870,8 @@ /obj/structure/bed/medical{ dir = 4 }, -/obj/item/bedsheet/random, -/obj/machinery/door/window{ - dir = 8 - }, +/obj/effect/spawner/random/bedsheet/any, +/obj/machinery/door/window/left/directional/west, /obj/structure/window/reinforced/tinted/spawner/directional/south, /turf/open/floor/iron, /area/ruin/space/has_grav/powered/nova/scrapheap) @@ -1304,9 +1295,7 @@ /area/ruin/space/has_grav/powered/nova/scrapheap) "Ig" = ( /obj/structure/curtain, -/obj/machinery/door/window{ - dir = 8 - }, +/obj/machinery/door/window/left/directional/west, /obj/structure/window/reinforced/tinted/spawner/directional/south, /obj/machinery/shower/directional/south, /turf/open/floor/iron/showroomfloor, @@ -1594,9 +1583,7 @@ /obj/structure/toilet{ dir = 8 }, -/obj/machinery/door/window{ - dir = 8 - }, +/obj/machinery/door/window/left/directional/west, /obj/structure/window/reinforced/tinted/spawner/directional/south, /turf/open/floor/iron/showroomfloor, /area/ruin/space/has_grav/powered/nova/scrapheap) @@ -1639,10 +1626,8 @@ /obj/structure/bed/medical{ dir = 4 }, -/obj/item/bedsheet/random, -/obj/machinery/door/window{ - dir = 8 - }, +/obj/effect/spawner/random/bedsheet/any, +/obj/machinery/door/window/left/directional/west, /obj/structure/window/reinforced/tinted/spawner/directional/south, /turf/open/floor/iron, /area/ruin/space/has_grav/powered/nova/scrapheap) @@ -1844,10 +1829,8 @@ /obj/structure/bed/medical{ dir = 4 }, -/obj/item/bedsheet/random, -/obj/machinery/door/window{ - dir = 8 - }, +/obj/effect/spawner/random/bedsheet/any, +/obj/machinery/door/window/left/directional/west, /obj/structure/window/reinforced/tinted/spawner/directional/east, /obj/structure/window/reinforced/tinted/spawner/directional/north, /turf/open/floor/iron, @@ -1965,9 +1948,7 @@ /area/ruin/space/has_grav/powered/nova/scrapheap) "Zu" = ( /obj/structure/curtain, -/obj/machinery/door/window{ - dir = 4 - }, +/obj/machinery/door/window/left/directional/east, /obj/structure/window/reinforced/tinted/spawner/directional/south, /obj/machinery/shower/directional/south, /turf/open/floor/iron/showroomfloor, diff --git a/_maps/RandomRuins/SpaceRuins/nova/spacehotel.dmm b/_maps/RandomRuins/SpaceRuins/nova/spacehotel.dmm index fa1830fa67d..c055ff2272c 100644 --- a/_maps/RandomRuins/SpaceRuins/nova/spacehotel.dmm +++ b/_maps/RandomRuins/SpaceRuins/nova/spacehotel.dmm @@ -363,7 +363,7 @@ /area/ruin/space/has_grav/hotel) "cp" = ( /obj/structure/bed/double, -/obj/item/bedsheet/random/double, +/obj/effect/spawner/random/bedsheet/any/double, /obj/machinery/button/curtain{ id = "HotelRoom6Curtains"; pixel_x = 24 @@ -2351,7 +2351,7 @@ /obj/structure/bed/double{ dir = 4 }, -/obj/item/bedsheet/random/double{ +/obj/effect/spawner/random/bedsheet/any/double{ dir = 1 }, /turf/open/floor/carpet/neon/simple/teal/nodots, @@ -2479,10 +2479,8 @@ /turf/open/floor/iron, /area/ruin/space/has_grav/hotel/power) "lD" = ( -/obj/machinery/door/window/left{ - dir = 8 - }, /obj/effect/turf_decal/siding/dark, +/obj/machinery/door/window/left/directional/west, /turf/open/floor/carpet/black, /area/ruin/space/has_grav/hotel) "lF" = ( @@ -2922,7 +2920,7 @@ /area/ruin/space/has_grav/hotel/workroom/quarters) "nC" = ( /obj/structure/bed/double, -/obj/item/bedsheet/random/double, +/obj/effect/spawner/random/bedsheet/any/double, /obj/machinery/button/curtain{ id = "HotelRoom2Curtains"; pixel_x = 22; @@ -4258,7 +4256,7 @@ /obj/structure/bed/double{ dir = 4 }, -/obj/item/bedsheet/random/double{ +/obj/effect/spawner/random/bedsheet/any/double{ dir = 1 }, /turf/open/floor/carpet/neon/simple/black/nodots, @@ -4343,7 +4341,7 @@ /area/ruin/space/has_grav/hotel/guestroom/room_5) "wG" = ( /obj/structure/bed/double, -/obj/item/bedsheet/random/double, +/obj/effect/spawner/random/bedsheet/any/double, /obj/machinery/button/curtain{ id = "HotelRoom7Curtains1"; pixel_x = 24 @@ -5075,9 +5073,7 @@ /area/ruin/space/has_grav/hotel/custodial) "BC" = ( /obj/structure/table/glass, -/obj/machinery/door/window{ - dir = 4 - }, +/obj/machinery/door/window/left/directional/east, /obj/effect/turf_decal/siding/dark{ dir = 4 }, @@ -5745,7 +5741,7 @@ /turf/open/floor/carpet/black, /area/ruin/space/has_grav/hotel) "Gj" = ( -/obj/machinery/door/window, +/obj/machinery/door/window/left/directional/south, /turf/open/floor/iron/showroomfloor, /area/ruin/space/has_grav/hotel/pool) "Gk" = ( @@ -6261,7 +6257,7 @@ /obj/structure/bed/double{ dir = 4 }, -/obj/item/bedsheet/random/double{ +/obj/effect/spawner/random/bedsheet/any/double{ dir = 1 }, /turf/open/floor/wood, @@ -7626,12 +7622,10 @@ /turf/open/floor/iron/white, /area/ruin/space/has_grav/hotel/workroom) "Sg" = ( -/obj/machinery/door/window/right{ - dir = 8 - }, /obj/effect/turf_decal/siding/dark{ dir = 1 }, +/obj/machinery/door/window/right/directional/west, /turf/open/floor/carpet/black, /area/ruin/space/has_grav/hotel) "Sl" = ( diff --git a/_maps/RandomRuins/SpaceRuins/nova/syndibase.dmm b/_maps/RandomRuins/SpaceRuins/nova/syndibase.dmm index 703a80b20e8..38e6203163a 100644 --- a/_maps/RandomRuins/SpaceRuins/nova/syndibase.dmm +++ b/_maps/RandomRuins/SpaceRuins/nova/syndibase.dmm @@ -105,9 +105,7 @@ /turf/open/floor/iron, /area/ruin/space/has_grav/powered) "jV" = ( -/obj/machinery/door/window/survival_pod{ - dir = 8 - }, +/obj/machinery/door/window/survival_pod/left/directional/west, /obj/structure/bed, /turf/open/floor/iron, /area/ruin/space/has_grav/powered) @@ -211,8 +209,7 @@ /area/ruin/space/has_grav/powered) "vS" = ( /obj/structure/window/reinforced/tinted/spawner/directional/south, -/obj/machinery/door/window/survival_pod{ - dir = 8; +/obj/machinery/door/window/survival_pod/left/directional/west{ req_access = list("syndicate") }, /obj/structure/bed, @@ -230,9 +227,7 @@ /area/ruin/space/has_grav/powered) "wU" = ( /obj/structure/window/reinforced/tinted/spawner/directional/south, -/obj/machinery/door/window/survival_pod{ - dir = 4 - }, +/obj/machinery/door/window/survival_pod/left/directional/east, /obj/structure/toilet{ dir = 4 }, @@ -402,8 +397,7 @@ /area/ruin/space/has_grav/powered) "Pl" = ( /obj/structure/window/reinforced/tinted/spawner/directional/south, -/obj/machinery/door/window/survival_pod{ - dir = 4; +/obj/machinery/door/window/survival_pod/left/directional/east{ req_access = list("syndicate") }, /obj/structure/toilet{ @@ -449,9 +443,7 @@ /area/ruin/space/has_grav/powered) "Uh" = ( /obj/structure/window/reinforced/tinted/spawner/directional/west, -/obj/machinery/door/window/survival_pod{ - dir = 1 - }, +/obj/machinery/door/window/survival_pod/left/directional/north, /turf/open/floor/iron, /area/ruin/space/has_grav/powered) "UY" = ( @@ -461,9 +453,7 @@ /turf/open/floor/iron/dark, /area/ruin/space/has_grav/powered) "Vo" = ( -/obj/machinery/door/window/survival_pod{ - dir = 4 - }, +/obj/machinery/door/window/survival_pod/left/directional/east, /obj/structure/toilet{ dir = 4 }, diff --git a/_maps/RandomRuins/SpaceRuins/nova/vaulttango.dmm b/_maps/RandomRuins/SpaceRuins/nova/vaulttango.dmm index 990b54c1084..7566662c2b5 100644 --- a/_maps/RandomRuins/SpaceRuins/nova/vaulttango.dmm +++ b/_maps/RandomRuins/SpaceRuins/nova/vaulttango.dmm @@ -171,9 +171,7 @@ /obj/effect/turf_decal/trimline/neutral/filled/line{ dir = 1 }, -/obj/machinery/door/window/brigdoor{ - dir = 4 - }, +/obj/machinery/door/window/brigdoor/left/directional/east, /turf/open/floor/iron/dark, /area/ruin/space/has_grav/vaulttango) "ec" = ( @@ -234,8 +232,7 @@ /turf/open/floor/iron/dark, /area/ruin/space/has_grav/vaulttango) "ff" = ( -/obj/machinery/door/window/brigdoor{ - dir = 8; +/obj/machinery/door/window/brigdoor/left/directional/west{ name = "Office Door" }, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer4, diff --git a/_maps/RandomRuins/SpaceRuins/nova/wreckedhomestead.dmm b/_maps/RandomRuins/SpaceRuins/nova/wreckedhomestead.dmm index afa164d0b27..680ee3a654e 100644 --- a/_maps/RandomRuins/SpaceRuins/nova/wreckedhomestead.dmm +++ b/_maps/RandomRuins/SpaceRuins/nova/wreckedhomestead.dmm @@ -184,9 +184,7 @@ /turf/open/floor/engine/airless, /area/ruin/unpowered) "DU" = ( -/obj/machinery/door/window/brigdoor{ - dir = 8 - }, +/obj/machinery/door/window/brigdoor/left/directional/west, /obj/machinery/light/directional/east, /obj/effect/mob_spawn/corpse/human/skeleton, /turf/open/floor/iron/dark/airless, diff --git a/_maps/RandomRuins/SpaceRuins/oldstation.dmm b/_maps/RandomRuins/SpaceRuins/oldstation.dmm index 2fd8256c659..890cfb4e146 100644 --- a/_maps/RandomRuins/SpaceRuins/oldstation.dmm +++ b/_maps/RandomRuins/SpaceRuins/oldstation.dmm @@ -1599,8 +1599,7 @@ /obj/effect/decal/cleanable/dirt, /obj/item/crowbar, /obj/item/stock_parts/cell/high, -/obj/machinery/door/window/right/directional/east{ - dir = 1; +/obj/machinery/door/window/right/directional/north{ req_access = list("away_general") }, /obj/item/paper/fluff/ruins/oldstation/apc_note, @@ -4776,9 +4775,7 @@ /turf/open/floor/iron/white/textured_large, /area/ruin/space/ancientstation/delta/biolab) "zm" = ( -/obj/machinery/door/window/brigdoor{ - dir = 8; - icon_state = "rightsecure"; +/obj/machinery/door/window/brigdoor/right/directional/west{ name = "Plasma Canister Storage" }, /obj/effect/turf_decal/stripes/line{ diff --git a/_maps/RandomRuins/SpaceRuins/phonebooth.dmm b/_maps/RandomRuins/SpaceRuins/phonebooth.dmm index 10ced2125dd..9f766e42f85 100644 --- a/_maps/RandomRuins/SpaceRuins/phonebooth.dmm +++ b/_maps/RandomRuins/SpaceRuins/phonebooth.dmm @@ -4,10 +4,8 @@ /turf/open/floor/iron/dark, /area/ruin/space/has_grav/powered/space_phone_booth) "c" = ( -/obj/machinery/door/window{ - dir = 1 - }, -/obj/machinery/door/window, +/obj/machinery/door/window/left/directional/north, +/obj/machinery/door/window/left/directional/south, /turf/open/floor/iron/dark/smooth_edge, /area/ruin/space/has_grav/powered/space_phone_booth) "e" = ( diff --git a/_maps/RandomRuins/SpaceRuins/shuttlerelic.dmm b/_maps/RandomRuins/SpaceRuins/shuttlerelic.dmm index 86ea8c855cc..71074aa4451 100644 --- a/_maps/RandomRuins/SpaceRuins/shuttlerelic.dmm +++ b/_maps/RandomRuins/SpaceRuins/shuttlerelic.dmm @@ -74,7 +74,7 @@ /turf/open/floor/oldshuttle, /area/ruin/space/has_grav/powered) "t" = ( -/obj/machinery/power/generator, +/obj/machinery/power/thermoelectric_generator, /turf/open/floor/oldshuttle, /area/ruin/space/has_grav/powered) "u" = ( diff --git a/_maps/RandomRuins/SpaceRuins/the_outlet.dmm b/_maps/RandomRuins/SpaceRuins/the_outlet.dmm index e10d5abc111..ba0ca4afdf6 100644 --- a/_maps/RandomRuins/SpaceRuins/the_outlet.dmm +++ b/_maps/RandomRuins/SpaceRuins/the_outlet.dmm @@ -509,7 +509,7 @@ /turf/open/floor/iron/white, /area/ruin/space/has_grav/the_outlet/researchrooms) "nq" = ( -/obj/machinery/door/window, +/obj/machinery/door/window/left/directional/south, /turf/open/floor/eighties, /area/ruin/space/has_grav/the_outlet/storefront) "nx" = ( @@ -1180,7 +1180,7 @@ /turf/open/floor/plating/rust, /area/ruin/space/has_grav/the_outlet/employeesection) "BW" = ( -/obj/machinery/door/window, +/obj/machinery/door/window/left/directional/south, /turf/open/floor/plating/rust, /area/ruin/space/has_grav/the_outlet/storefront) "Ce" = ( diff --git a/_maps/RandomRuins/SpaceRuins/thelizardsgas.dmm b/_maps/RandomRuins/SpaceRuins/thelizardsgas.dmm index fe62f0ed09d..87cd248283e 100644 --- a/_maps/RandomRuins/SpaceRuins/thelizardsgas.dmm +++ b/_maps/RandomRuins/SpaceRuins/thelizardsgas.dmm @@ -244,7 +244,7 @@ /turf/open/floor/iron/white, /area/ruin/space/has_grav/thelizardsgas) "zz" = ( -/obj/machinery/door/window, +/obj/machinery/door/window/left/directional/south, /obj/structure/cable, /turf/open/floor/iron/dark/smooth_corner{ dir = 4 diff --git a/_maps/RandomRuins/SpaceRuins/travelers_rest.dmm b/_maps/RandomRuins/SpaceRuins/travelers_rest.dmm index 7ad7cfc5a1d..3837f245384 100644 --- a/_maps/RandomRuins/SpaceRuins/travelers_rest.dmm +++ b/_maps/RandomRuins/SpaceRuins/travelers_rest.dmm @@ -196,9 +196,7 @@ /area/ruin/space/has_grav/travelers_rest) "xk" = ( /obj/structure/cable, -/obj/machinery/door/window/brigdoor{ - dir = 1 - }, +/obj/machinery/door/window/brigdoor/left/directional/north, /obj/effect/turf_decal/trimline/yellow, /obj/machinery/light/floor, /turf/open/floor/iron/textured, diff --git a/_maps/RandomRuins/SpaceRuins/waystation.dmm b/_maps/RandomRuins/SpaceRuins/waystation.dmm index 9399ee02947..def97102238 100644 --- a/_maps/RandomRuins/SpaceRuins/waystation.dmm +++ b/_maps/RandomRuins/SpaceRuins/waystation.dmm @@ -1143,7 +1143,7 @@ /area/ruin/space/has_grav/waystation/dorms) "rQ" = ( /obj/structure/bed, -/obj/item/bedsheet/random, +/obj/effect/spawner/random/bedsheet/any, /turf/open/floor/wood, /area/ruin/space/has_grav/waystation/dorms) "rV" = ( @@ -1889,7 +1889,7 @@ /area/ruin/space/has_grav/waystation/cargobay) "IS" = ( /obj/structure/bed, -/obj/item/bedsheet/random, +/obj/effect/spawner/random/bedsheet/any, /obj/effect/decal/cleanable/dirt, /turf/open/floor/wood, /area/ruin/space/has_grav/waystation/dorms) diff --git a/_maps/RandomZLevels/SnowCabin.dmm b/_maps/RandomZLevels/SnowCabin.dmm index c6366d62e54..7ad0b42218f 100644 --- a/_maps/RandomZLevels/SnowCabin.dmm +++ b/_maps/RandomZLevels/SnowCabin.dmm @@ -2142,7 +2142,7 @@ /area/awaymission/cabin/caves) "km" = ( /obj/structure/bed, -/obj/item/bedsheet/dorms, +/obj/effect/spawner/random/bedsheet, /turf/open/floor/wood, /area/awaymission/cabin/caves) "ko" = ( diff --git a/_maps/RandomZLevels/caves.dmm b/_maps/RandomZLevels/caves.dmm index 99998973a32..0b0fba3f0cb 100644 --- a/_maps/RandomZLevels/caves.dmm +++ b/_maps/RandomZLevels/caves.dmm @@ -484,11 +484,7 @@ /turf/open/floor/plating, /area/awaymission/caves/research) "cS" = ( -/obj/machinery/door/window{ - base_state = "right"; - dir = 4; - icon_state = "right" - }, +/obj/machinery/door/window/right/directional/east, /turf/open/floor/plating, /area/awaymission/caves/research) "cV" = ( @@ -1343,11 +1339,7 @@ /area/awaymission/caves/bmp_asteroid/level_three) "pL" = ( /obj/structure/window/reinforced/spawner/directional/south, -/obj/machinery/door/window{ - base_state = "right"; - dir = 4; - icon_state = "right" - }, +/obj/machinery/door/window/right/directional/east, /turf/open/floor/plating, /area/awaymission/caves/research) "qD" = ( diff --git a/_maps/RandomZLevels/moonoutpost19.dmm b/_maps/RandomZLevels/moonoutpost19.dmm index 828d8a187dc..c64455b1d09 100644 --- a/_maps/RandomZLevels/moonoutpost19.dmm +++ b/_maps/RandomZLevels/moonoutpost19.dmm @@ -4034,8 +4034,7 @@ /turf/open/floor/iron/white, /area/awaymission/moonoutpost19/research) "AC" = ( -/obj/machinery/door/window{ - dir = 1; +/obj/machinery/door/window/left/directional/north{ name = "Gateway Access"; req_access = "150" }, diff --git a/_maps/RandomZLevels/mothership_astrum.dmm b/_maps/RandomZLevels/mothership_astrum.dmm index e42e33f49a7..b734d2885eb 100644 --- a/_maps/RandomZLevels/mothership_astrum.dmm +++ b/_maps/RandomZLevels/mothership_astrum.dmm @@ -851,7 +851,7 @@ /obj/structure/bed{ name = "Reproduction Bench" }, -/obj/item/bedsheet/random, +/obj/effect/spawner/random/bedsheet/any, /obj/effect/mapping_helpers/broken_floor, /turf/open/floor/wood, /area/awaymission/mothership_astrum/deck3) @@ -859,7 +859,7 @@ /obj/structure/bed{ name = "Reproduction Bench" }, -/obj/item/bedsheet/random, +/obj/effect/spawner/random/bedsheet/any, /turf/open/floor/wood, /area/awaymission/mothership_astrum/deck3) "oA" = ( @@ -1496,9 +1496,7 @@ }, /area/awaymission/mothership_astrum/deck5) "yE" = ( -/obj/machinery/door/window{ - dir = 4 - }, +/obj/machinery/door/window/left/directional/east, /turf/open/floor/grass, /area/awaymission/mothership_astrum/halls) "zc" = ( @@ -2375,11 +2373,6 @@ /obj/item/circular_saw/alien, /turf/open/floor/plating/abductor, /area/awaymission/mothership_astrum/halls) -"JQ" = ( -/obj/structure/alien/weeds, -/obj/item/crowbar/freeman, -/turf/open/floor/mineral/abductor, -/area/awaymission/mothership_astrum/halls) "JR" = ( /obj/structure/table, /obj/item/reagent_containers/condiment/peppermill{ @@ -38786,7 +38779,7 @@ On ad AZ TY -JQ +ud bV bV bV diff --git a/_maps/RandomZLevels/museum.dmm b/_maps/RandomZLevels/museum.dmm new file mode 100644 index 00000000000..7429c0b4538 --- /dev/null +++ b/_maps/RandomZLevels/museum.dmm @@ -0,0 +1,71209 @@ +//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE +"aa" = ( +/obj/effect/turf_decal/tile/neutral/opposingcorners, +/obj/effect/turf_decal/siding/dark_blue, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/iron/dark, +/area/awaymission/museum) +"ab" = ( +/obj/machinery/computer/old{ + name = "replica computer"; + dir = 8; + icon_keyboard = "rd_key"; + icon_screen = "rdcomp" + }, +/turf/open/floor/iron/smooth_large, +/area/awaymission/museum) +"ai" = ( +/obj/structure/railing{ + dir = 8 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/turf/open/floor/engine, +/area/awaymission/museum) +"am" = ( +/obj/structure/table/reinforced, +/obj/structure/railing{ + dir = 9 + }, +/obj/item/storage/toolbox/mechanical/old, +/turf/open/floor/iron/smooth_corner, +/area/awaymission/museum) +"ap" = ( +/turf/cordon, +/area/awaymission/museum) +"as" = ( +/obj/machinery/conveyor{ + dir = 1 + }, +/obj/item/stack/rods, +/turf/open/indestructible/plating, +/area/awaymission/museum) +"at" = ( +/obj/structure/lattice/catwalk/mining, +/obj/structure/railing/corner{ + dir = 1 + }, +/obj/item/stack/rods, +/turf/open/chasm/true/no_smooth, +/area/awaymission/museum) +"av" = ( +/obj/structure/chair/stool/directional/south, +/turf/open/floor/iron, +/area/awaymission/museum) +"aw" = ( +/obj/structure/shipping_container/nanotrasen{ + opacity = 1 + }, +/turf/open/indestructible/plating, +/area/awaymission/museum) +"az" = ( +/obj/structure/table/reinforced, +/obj/effect/spawner/random/entertainment/musical_instrument, +/turf/open/floor/iron/dark/textured_large, +/area/awaymission/museum) +"aG" = ( +/obj/machinery/conveyor{ + dir = 4 + }, +/obj/machinery/light/small/dim/directional/south, +/turf/open/indestructible/plating, +/area/awaymission/museum) +"aK" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/structure/closet/crate/preopen, +/turf/open/indestructible/plating, +/area/awaymission/museum) +"aR" = ( +/obj/effect/turf_decal/tile/neutral/opposingcorners, +/obj/effect/turf_decal/siding/dark_blue{ + dir = 1 + }, +/obj/structure/chair/sofa/bench{ + dir = 1 + }, +/turf/open/floor/iron/dark, +/area/awaymission/museum) +"aW" = ( +/obj/structure/closet/crate/bin, +/turf/open/floor/wood/large, +/area/awaymission/museum) +"bg" = ( +/obj/structure/no_effect_signpost{ + name = "if youre reading this you stink and also made by jimmyl" + }, +/turf/open/floor/bluespace, +/area/awaymission/museum) +"bi" = ( +/obj/effect/turf_decal/tile/neutral/opposingcorners, +/obj/effect/turf_decal/siding/dark_blue{ + dir = 4 + }, +/obj/machinery/computer/terminal/museum{ + dir = 4; + content = list("Sometime long ago, someone accidentally slipped in the design for gloves that work like batons into the basic employee craftsmanship teaching program. Naturally, this was not a good thing and all the ruffians onstation would usually have one of these. As Nanotrasen found out and removed the design, these are no longer ever seen, for nobody knows how to make them.") + }, +/turf/open/floor/iron/dark, +/area/awaymission/museum) +"bj" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 1 + }, +/obj/machinery/door/airlock/wood{ + name = "Bathroom" + }, +/turf/open/floor/iron/showroomfloor, +/area/awaymission/museum) +"bk" = ( +/obj/structure/transport/linear/tram/slow, +/obj/structure/thermoplastic, +/turf/open/chasm/true/no_smooth, +/area/awaymission/museum) +"bn" = ( +/obj/structure/hedge/opaque, +/obj/effect/turf_decal/tile/neutral/opposingcorners, +/obj/structure/fluff/fake_camera{ + dir = 4 + }, +/turf/open/floor/iron/dark, +/area/awaymission/museum) +"br" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 1 + }, +/turf/open/floor/wood/tile, +/area/awaymission/museum) +"bs" = ( +/turf/open/misc/dirt/station, +/area/awaymission/museum/mothroachvoid) +"bt" = ( +/obj/effect/step_trigger/teleporter/offset{ + teleport_y_offset = 12 + }, +/obj/effect/oneway{ + dir = 4 + }, +/turf/open/mirage{ + dir = 8; + target_turf_x = 11; + range = 1 + }, +/area/awaymission/museum) +"bC" = ( +/obj/structure/closet/secure_closet/freezer/kitchen/all_access, +/turf/open/floor/iron/freezer, +/area/awaymission/museum) +"bE" = ( +/obj/machinery/door/airlock/grunge, +/obj/effect/mapping_helpers/airlock/locked, +/turf/open/floor/iron/dark/textured_large, +/area/awaymission/museum) +"bF" = ( +/obj/effect/mapping_helpers/bombable_wall, +/turf/closed/indestructible/reinforced, +/area/awaymission/museum) +"bG" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/structure/grille/broken, +/turf/open/indestructible/plating, +/area/awaymission/museum) +"bI" = ( +/obj/machinery/door/poddoor/shutters/indestructible{ + id = "nothing" + }, +/turf/open/floor/iron, +/area/awaymission/museum) +"bJ" = ( +/mob/living/basic/statue/mannequin{ + dir = 8; + name = "Dale Knox" + }, +/obj/effect/turf_decal/tile/blue/opposingcorners, +/turf/open/floor/holofloor/white, +/area/awaymission/museum) +"bK" = ( +/obj/effect/turf_decal/tile/neutral/opposingcorners, +/obj/effect/turf_decal/siding/dark_blue/corner{ + dir = 1 + }, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/iron/dark, +/area/awaymission/museum) +"bM" = ( +/obj/item/kirbyplants/random/dead, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/iron/dark/textured_large, +/area/awaymission/museum) +"bQ" = ( +/obj/effect/turf_decal/tile/blue/opposingcorners, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/holofloor/white, +/area/awaymission/museum) +"bV" = ( +/obj/effect/turf_decal/tile/neutral/opposingcorners, +/obj/effect/turf_decal/siding/dark_blue{ + dir = 8 + }, +/turf/open/floor/iron/dark, +/area/awaymission/museum) +"bW" = ( +/obj/structure/transport/linear/tram/slow, +/obj/structure/thermoplastic/light, +/obj/effect/landmark/transport/transport_id{ + specific_transport_id = "museum_cargo" + }, +/turf/open/chasm/true/no_smooth, +/area/awaymission/museum) +"ce" = ( +/obj/structure/lattice/catwalk/mining, +/obj/structure/railing{ + dir = 6 + }, +/turf/open/chasm/true/no_smooth, +/area/awaymission/museum) +"cf" = ( +/obj/structure/table, +/obj/effect/turf_decal/tile/neutral/opposingcorners, +/obj/item/storage/box/stickers/googly, +/turf/open/floor/iron/dark, +/area/awaymission/museum) +"cm" = ( +/obj/machinery/door/airlock/grunge, +/obj/structure/barricade/wooden/crude, +/obj/effect/turf_decal/stripes/end{ + dir = 1 + }, +/turf/open/floor/engine, +/area/awaymission/museum) +"cn" = ( +/obj/effect/turf_decal/stripes{ + dir = 4 + }, +/obj/structure/railing{ + dir = 1 + }, +/turf/open/floor/iron/smooth_half, +/area/awaymission/museum) +"cs" = ( +/obj/effect/spawner/random/food_or_drink/snack, +/obj/effect/spawner/random/food_or_drink/snack, +/obj/effect/spawner/random/food_or_drink/snack, +/obj/structure/table/reinforced, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/iron/smooth_half, +/area/awaymission/museum) +"ct" = ( +/obj/structure/chair/comfy, +/mob/living/basic/mothroach, +/obj/effect/mapping_helpers/mob_buckler, +/obj/machinery/light/dim/directional/north, +/turf/open/floor/iron/dark/textured_large, +/area/awaymission/museum) +"cv" = ( +/obj/effect/turf_decal/bot/left, +/turf/open/floor/iron/dark/diagonal, +/area/awaymission/museum) +"cy" = ( +/obj/effect/decal/cleanable/fuel_pool/hivis, +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/decal/cleanable/blood/old, +/turf/open/indestructible/plating, +/area/awaymission/museum) +"cA" = ( +/obj/structure/rack, +/obj/effect/turf_decal/tile/green/opposingcorners, +/obj/effect/spawner/random/entertainment/toy, +/obj/effect/spawner/random/entertainment/toy, +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/turf_decal/siding/green{ + dir = 10 + }, +/turf/open/floor/iron, +/area/awaymission/museum) +"cB" = ( +/obj/effect/turf_decal/tile/green/opposingcorners, +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/decal/cleanable/blood/footprints{ + dir = 8 + }, +/turf/open/floor/iron, +/area/awaymission/museum) +"cC" = ( +/turf/open/floor/mineral/silver, +/area/awaymission/museum/mothroachvoid) +"cF" = ( +/turf/open/floor/iron/dark/side{ + dir = 8 + }, +/area/awaymission/museum) +"cH" = ( +/obj/effect/mapping_helpers/broken_floor, +/turf/open/floor/iron/showroomfloor, +/area/awaymission/museum) +"cM" = ( +/obj/structure/table/reinforced, +/obj/effect/spawner/random/bureaucracy/pen, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/iron/white, +/area/awaymission/museum) +"cN" = ( +/obj/structure/table, +/obj/effect/turf_decal/tile/neutral/opposingcorners, +/obj/item/toy/balloon/corgi, +/obj/machinery/status_display/random_message{ + firstline_to_secondline = list("NO" = "LITTERING","YOU ARE" = "BEING WATCHED", "DO NOT TOUCH" = "THE EXHIBITS"); + pixel_x = 32 + }, +/turf/open/floor/iron/dark, +/area/awaymission/museum) +"cR" = ( +/obj/structure/broken_flooring/side/always_floorplane{ + dir = 8 + }, +/obj/structure/lattice, +/turf/open/chasm/true/no_smooth, +/area/awaymission/museum) +"cS" = ( +/obj/effect/step_trigger/thrower{ + direction = 1; + facedir = 1; + tiles = 10; + mobs_only = 1 + }, +/obj/machinery/light/floor, +/turf/open/floor/iron, +/area/awaymission/museum) +"cW" = ( +/obj/machinery/computer/old, +/turf/open/floor/circuit/green, +/area/awaymission/museum) +"cX" = ( +/obj/structure/plaque/static_plaque/golden/commission/dream, +/turf/closed/indestructible/reinforced, +/area/awaymission/museum) +"cZ" = ( +/obj/structure/fluff/divine/nexus, +/turf/open/floor/cult, +/area/awaymission/museum) +"da" = ( +/obj/effect/turf_decal/siding/dark_blue/corner, +/turf/open/floor/mineral/titanium/blue, +/area/awaymission/museum) +"de" = ( +/obj/effect/turf_decal/stripes/line, +/obj/effect/turf_decal/caution/stand_clear, +/turf/open/floor/engine, +/area/awaymission/museum) +"dl" = ( +/obj/structure/sign/warning/fire/directional/west, +/obj/machinery/portable_atmospherics/pump, +/obj/effect/turf_decal/delivery/red, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/indestructible/plating, +/area/awaymission/museum) +"dn" = ( +/turf/open/floor/carpet, +/area/awaymission/museum) +"do" = ( +/obj/structure/lattice/catwalk/mining, +/obj/structure/railing, +/obj/structure/railing{ + dir = 1 + }, +/turf/open/chasm/true/no_smooth, +/area/awaymission/museum) +"dx" = ( +/obj/structure/fluff/beach_umbrella, +/turf/open/misc/beach/sand, +/area/awaymission/museum/mothroachvoid) +"dF" = ( +/obj/effect/turf_decal/tile/neutral/opposingcorners, +/obj/effect/turf_decal/siding/dark_blue{ + dir = 1 + }, +/obj/structure/table, +/obj/effect/spawner/random/bureaucracy/paper{ + spawn_loot_count = 7; + spawn_random_offset = 6 + }, +/obj/machinery/light/small/dim/directional/south, +/turf/open/floor/iron/dark, +/area/awaymission/museum) +"dH" = ( +/obj/structure/table/wood, +/obj/item/reagent_containers/cup/glass/shaker, +/turf/open/floor/wood/tile, +/area/awaymission/museum) +"dK" = ( +/turf/open/mirage{ + range = 2; + target_turf_y = -4; + dir = 1 + }, +/area/awaymission/museum) +"dL" = ( +/obj/structure/sink/directional/west, +/turf/open/floor/wood/tile, +/area/awaymission/museum) +"dN" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/spawner/random/structure/closet_empty/crate/with_loot, +/turf/open/indestructible/plating, +/area/awaymission/museum) +"dR" = ( +/obj/effect/turf_decal/siding/wideplating/corner{ + dir = 8 + }, +/turf/open/misc/beach/sand, +/area/awaymission/museum/mothroachvoid) +"dS" = ( +/mob/living/basic/statue/mannequin{ + dir = 4; + held_item = /obj/item/weldingtool; + hat = /obj/item/clothing/head/utility/welding + }, +/turf/open/floor/engine, +/area/awaymission/museum) +"dV" = ( +/obj/machinery/door/window/brigdoor/left/directional/south{ + req_access = list("bartender") + }, +/turf/open/floor/wood/tile, +/area/awaymission/museum) +"dY" = ( +/mob/living/basic/statue/mannequin{ + hat = /obj/item/clothing/head/helmet/space; + dir = 1 + }, +/turf/open/floor/holofloor/hyperspace/ns, +/area/awaymission/museum) +"dZ" = ( +/obj/structure/lattice/catwalk/mining, +/turf/open/chasm/true/no_smooth, +/area/awaymission/museum) +"ea" = ( +/obj/structure/flora/rock/icy/style_random, +/obj/effect/turf_decal/siding{ + dir = 10 + }, +/obj/structure/railing{ + dir = 8 + }, +/obj/structure/railing/corner, +/turf/open/floor/holofloor/asteroid, +/area/awaymission/museum) +"ec" = ( +/obj/effect/turf_decal/tile/neutral/opposingcorners, +/obj/effect/turf_decal/siding/dark_blue{ + dir = 8 + }, +/obj/machinery/door/poddoor/shutters/indestructible{ + id = "museum_secret" + }, +/obj/machinery/puzzle_keycardpad/directional/east{ + id = "museum_secret" + }, +/turf/open/floor/iron/dark, +/area/awaymission/museum) +"eg" = ( +/obj/effect/spawner/structure/window/hollow/directional{ + dir = 4 + }, +/turf/open/indestructible/plating, +/area/awaymission/museum) +"ek" = ( +/obj/effect/decal/cleanable/crayon{ + icon_state = "l"; + pixel_x = -10 + }, +/obj/effect/decal/cleanable/crayon{ + icon_state = "i" + }, +/obj/effect/decal/cleanable/crayon{ + icon_state = "e"; + pixel_x = 12 + }, +/obj/effect/decal/cleanable/dirt/dust, +/obj/machinery/light/small/dim/directional/west, +/turf/open/floor/engine, +/area/awaymission/museum) +"el" = ( +/obj/effect/turf_decal/tile/neutral/opposingcorners, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/iron/dark, +/area/awaymission/museum) +"em" = ( +/obj/structure/window/reinforced/spawner/directional/east, +/turf/open/floor/iron, +/area/awaymission/museum) +"en" = ( +/obj/effect/decal/cleanable/blood/old, +/obj/effect/turf_decal/stripes/red/line{ + dir = 6 + }, +/turf/open/floor/iron, +/area/awaymission/museum) +"es" = ( +/obj/effect/turf_decal/tile/neutral/opposingcorners, +/obj/effect/turf_decal/siding/dark_blue{ + dir = 8 + }, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/iron/dark, +/area/awaymission/museum) +"ev" = ( +/obj/structure/hedge, +/obj/effect/turf_decal/siding/wood{ + dir = 8 + }, +/turf/open/floor/grass, +/area/awaymission/museum) +"ex" = ( +/obj/structure/chair/stool/bar/directional/west{ + can_buckle = 1 + }, +/mob/living/basic/mothroach, +/obj/effect/mapping_helpers/mob_buckler, +/turf/open/floor/wood/large, +/area/awaymission/museum) +"eA" = ( +/obj/machinery/door/airlock/wood{ + name = "Dance Room" + }, +/turf/open/floor/wood/large, +/area/awaymission/museum) +"eD" = ( +/obj/effect/turf_decal/siding/dark_blue{ + dir = 1 + }, +/obj/structure/showcase/machinery/implanter, +/obj/machinery/light/small/dim/directional/south, +/turf/open/floor/mineral/titanium/blue, +/area/awaymission/museum) +"eF" = ( +/obj/structure/showcase/machinery/cloning_pod, +/obj/machinery/conveyor{ + dir = 1 + }, +/obj/machinery/light/floor, +/turf/open/floor/engine, +/area/awaymission/museum) +"eH" = ( +/obj/structure/railing{ + dir = 8 + }, +/obj/effect/turf_decal/tile/blue/opposingcorners, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/holofloor/white, +/area/awaymission/museum) +"eM" = ( +/obj/structure/statue/gold/qm{ + anchored = 1 + }, +/turf/open/misc/dirt/station, +/area/awaymission/museum/mothroachvoid) +"eN" = ( +/obj/machinery/door/poddoor/shutters/window/indestructible{ + dir = 4; + id = "nothing" + }, +/turf/open/floor/iron, +/area/awaymission/museum) +"eO" = ( +/obj/structure/table, +/obj/effect/turf_decal/tile/neutral/opposingcorners, +/obj/effect/spawner/random/entertainment/dice, +/obj/structure/fluff/fake_camera{ + dir = 8 + }, +/turf/open/floor/iron/dark, +/area/awaymission/museum) +"eP" = ( +/turf/open/misc/beach/sand, +/area/awaymission/museum/mothroachvoid) +"eQ" = ( +/obj/effect/turf_decal/tile/green/opposingcorners, +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/turf_decal/siding/green, +/obj/structure/fluff/fake_camera{ + dir = 5 + }, +/turf/open/floor/iron, +/area/awaymission/museum) +"eR" = ( +/obj/structure/plaque/static_plaque/golden/commission/omega, +/turf/closed/indestructible/reinforced, +/area/awaymission/museum) +"eX" = ( +/obj/effect/turf_decal/siding/wideplating{ + dir = 4 + }, +/turf/open/floor/holofloor/beach/coast{ + dir = 1 + }, +/area/awaymission/museum) +"fa" = ( +/obj/effect/turf_decal/sand/plating, +/mob/living/basic/statue/mannequin{ + held_item = /obj/item/pickaxe; + hat = /obj/item/clothing/suit/hooded/explorer + }, +/obj/effect/turf_decal/mining, +/turf/open/indestructible/plating, +/area/awaymission/museum) +"fe" = ( +/turf/closed/indestructible/reinforced/titanium/nodiagonal, +/area/awaymission/museum) +"ff" = ( +/turf/open/floor/holofloor/beach/coast{ + dir = 6 + }, +/area/awaymission/museum/mothroachvoid) +"fi" = ( +/obj/structure/table/wood, +/obj/item/plate, +/obj/item/kitchen/fork, +/turf/open/floor/wood/tile, +/area/awaymission/museum) +"fn" = ( +/turf/open/floor/holofloor/hyperspace/ns, +/area/awaymission/museum) +"fo" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/effect/mapping_helpers/broken_floor, +/turf/open/floor/engine, +/area/awaymission/museum) +"fu" = ( +/obj/item/banhammer{ + force = -200 + }, +/turf/open/floor/bluespace, +/area/awaymission/museum) +"fy" = ( +/obj/effect/turf_decal/tile/neutral/opposingcorners, +/obj/effect/turf_decal/siding/dark_blue{ + dir = 1 + }, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/iron/dark, +/area/awaymission/museum) +"fz" = ( +/obj/structure/table/wood, +/obj/effect/turf_decal/siding/wood{ + dir = 4 + }, +/obj/item/plate/large, +/obj/item/food/little_hawaii_hotdog, +/turf/open/floor/wood/large, +/area/awaymission/museum) +"fC" = ( +/obj/machinery/light/small/directional/west, +/obj/structure/table/wood, +/obj/item/language_manual/roundstart_species, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/iron/dark/textured_large, +/area/awaymission/museum) +"fJ" = ( +/obj/structure/fluff/fake_camera{ + dir = 10 + }, +/turf/open/misc/beach/coast{ + dir = 1 + }, +/area/awaymission/museum) +"fK" = ( +/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/structure/sign/painting{ + pixel_y = 32; + persistence_id = "museumgate" + }, +/obj/machinery/light/floor, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/iron/dark, +/area/awaymission/museum) +"fT" = ( +/obj/structure/broken_flooring/corner/always_floorplane{ + dir = 1 + }, +/obj/structure/lattice, +/turf/open/chasm/true/no_smooth, +/area/awaymission/museum) +"fW" = ( +/obj/machinery/light/warm/directional/north, +/turf/open/floor/wood/tile, +/area/awaymission/museum) +"gf" = ( +/obj/structure/railing{ + dir = 4 + }, +/obj/effect/turf_decal/tile/green, +/obj/effect/turf_decal/tile/green{ + dir = 1 + }, +/turf/open/floor/iron, +/area/awaymission/museum) +"gj" = ( +/obj/machinery/door/poddoor/shutters/preopen{ + dir = 8 + }, +/turf/open/floor/iron, +/area/awaymission/museum) +"gm" = ( +/obj/structure/statue/gold/cmo{ + anchored = 1 + }, +/turf/open/floor/mineral/diamond, +/area/awaymission/museum/mothroachvoid) +"go" = ( +/obj/effect/turf_decal/tile/dark_blue/half/contrasted{ + dir = 8 + }, +/obj/effect/turf_decal/tile/dark_blue{ + dir = 4 + }, +/turf/open/floor/iron/white, +/area/awaymission/museum) +"gu" = ( +/obj/structure/flora/tree/palm/style_random, +/turf/open/misc/beach/sand, +/area/awaymission/museum/mothroachvoid) +"gA" = ( +/obj/structure/toilet{ + dir = 1 + }, +/turf/open/floor/iron/showroomfloor, +/area/awaymission/museum) +"gB" = ( +/obj/structure/table/wood, +/obj/item/knife, +/obj/item/kitchen/rollingpin, +/obj/machinery/light/warm/directional/north, +/turf/open/floor/iron/freezer, +/area/awaymission/museum) +"gC" = ( +/obj/machinery/conveyor{ + dir = 8 + }, +/obj/machinery/light/small/dim/directional/south, +/turf/open/indestructible/plating, +/area/awaymission/museum) +"gG" = ( +/obj/effect/turf_decal/siding/dark_blue/corner{ + dir = 4 + }, +/turf/open/floor/mineral/titanium/blue, +/area/awaymission/museum) +"gJ" = ( +/obj/effect/turf_decal/tile/neutral/opposingcorners, +/obj/effect/turf_decal/siding/dark_blue/corner{ + dir = 8 + }, +/obj/effect/spawner/random/vending/snackvend, +/turf/open/floor/iron/dark, +/area/awaymission/museum) +"gM" = ( +/turf/open/floor/wood/large, +/area/awaymission/museum) +"gN" = ( +/obj/structure/lattice/catwalk/mining, +/obj/item/stack/rods/ten, +/turf/open/chasm/true/no_smooth, +/area/awaymission/museum) +"gQ" = ( +/turf/open/mirage{ + target_turf_y = 14 + }, +/area/awaymission/museum) +"gR" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/structure/rack, +/obj/effect/spawner/random/maintenance/eight, +/obj/effect/spawner/random/maintenance/eight, +/turf/open/indestructible/plating, +/area/awaymission/museum) +"gT" = ( +/obj/machinery/door/window/left/directional/north, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/iron/white, +/area/awaymission/museum) +"gW" = ( +/obj/effect/turf_decal/tile/neutral/opposingcorners, +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/turf_decal/siding/dark_blue{ + dir = 8 + }, +/turf/open/floor/iron/dark, +/area/awaymission/museum) +"hb" = ( +/turf/open/misc/beach/coast{ + dir = 9 + }, +/area/awaymission/museum/mothroachvoid) +"hi" = ( +/obj/effect/turf_decal/tile/neutral/fourcorners, +/turf/open/floor/iron/dark, +/area/awaymission/museum) +"hj" = ( +/obj/structure/lattice/catwalk/mining, +/turf/open/misc/grass, +/area/awaymission/museum/mothroachvoid) +"hk" = ( +/obj/effect/smooths_with_walls, +/turf/open/mirage{ + target_turf_y = -29; + dir = 1 + }, +/area/awaymission/museum) +"hl" = ( +/obj/machinery/door/poddoor/shutters/indestructible{ + id = "gateway_waste" + }, +/obj/machinery/conveyor{ + dir = 1 + }, +/turf/open/indestructible/plating, +/area/awaymission/museum) +"hp" = ( +/mob/living/basic/mothroach/bar, +/turf/open/floor/wood/tile, +/area/awaymission/museum) +"ht" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 4 + }, +/obj/effect/spawner/random/vending/colavend, +/obj/machinery/light/small/directional/west, +/turf/open/floor/wood/large, +/area/awaymission/museum) +"hw" = ( +/obj/effect/turf_decal/stripes/red/line{ + dir = 10 + }, +/turf/open/floor/iron, +/area/awaymission/museum) +"hA" = ( +/obj/effect/turf_decal/tile/neutral/opposingcorners, +/obj/effect/turf_decal/siding/dark_blue{ + dir = 8 + }, +/obj/effect/decal/cleanable/dirt/dust, +/obj/structure/chair/sofa/bench{ + dir = 4 + }, +/turf/open/floor/iron/dark, +/area/awaymission/museum) +"hC" = ( +/obj/structure/railing{ + dir = 8 + }, +/obj/machinery/computer/terminal/museum{ + dir = 4; + content = list("2005 - By the early 2000s, Nanotrasen had long observed the computer gaming industry since its inception during the 1980s, and in 2005 would finally make their own entry into the market via the Nanoplay: the world’s first game console with built-in internet connectivity capabilities, bringing the gamers of the world together.") + }, +/obj/effect/turf_decal/tile/neutral/opposingcorners, +/turf/open/floor/iron/dark, +/area/awaymission/museum) +"hE" = ( +/obj/machinery/light/floor, +/turf/open/floor/holofloor/hyperspace/ns, +/area/awaymission/museum) +"hM" = ( +/turf/closed/wall/rock/porous, +/area/awaymission/museum) +"hT" = ( +/mob/living/basic/statue/mannequin{ + dir = 8; + name = "Dale Knox"; + held_item = /obj/item/circuitboard + }, +/obj/structure/sign/flag/nanotrasen/directional/south, +/turf/open/floor/holofloor/white, +/area/awaymission/museum) +"hV" = ( +/obj/effect/turf_decal/tile/neutral/opposingcorners, +/obj/effect/turf_decal/siding/dark_blue{ + dir = 4 + }, +/turf/open/floor/iron/dark, +/area/awaymission/museum) +"hX" = ( +/obj/item/circuitboard{ + icon_state = "flopdrive"; + name = "microprocessor" + }, +/obj/structure/table/reinforced, +/turf/open/floor/circuit/green, +/area/awaymission/museum) +"hY" = ( +/obj/effect/turf_decal/trimline/yellow/arrow_ccw{ + dir = 6 + }, +/turf/open/floor/engine, +/area/awaymission/museum) +"il" = ( +/obj/structure/table/wood, +/obj/item/clothing/suit/costume/judgerobe, +/turf/open/floor/wood/large, +/area/awaymission/museum) +"im" = ( +/obj/effect/turf_decal/tile/neutral/opposingcorners, +/obj/effect/turf_decal/siding/dark_blue{ + dir = 4 + }, +/obj/machinery/light/directional/west, +/turf/open/floor/iron/dark, +/area/awaymission/museum) +"ix" = ( +/obj/effect/decal/cleanable/crayon{ + icon_state = "l"; + pixel_x = -10 + }, +/obj/effect/decal/cleanable/crayon{ + icon_state = "i" + }, +/obj/effect/decal/cleanable/crayon{ + icon_state = "e"; + pixel_x = 12 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/engine, +/area/awaymission/museum) +"iz" = ( +/obj/machinery/door/airlock/shuttle/glass, +/obj/effect/turf_decal/siding/dark_blue{ + dir = 5 + }, +/turf/open/floor/mineral/plastitanium, +/area/awaymission/museum) +"iB" = ( +/obj/effect/spawner/random/engineering/canister, +/obj/effect/decal/cleanable/dirt/dust, +/obj/structure/broken_flooring/singular/always_floorplane, +/turf/open/indestructible/plating, +/area/awaymission/museum) +"iD" = ( +/obj/structure/window/reinforced/spawner/directional/east, +/obj/effect/decal/cleanable/blood/gibs, +/turf/open/floor/iron, +/area/awaymission/museum) +"iE" = ( +/obj/structure/fluff/wallsign/directional/west{ + name = "History of Nanotrasen" + }, +/obj/effect/turf_decal/tile/neutral/opposingcorners, +/obj/effect/turf_decal/siding/dark_blue{ + dir = 4 + }, +/obj/machinery/light/warm/directional/west, +/turf/open/floor/iron/dark, +/area/awaymission/museum) +"iF" = ( +/obj/effect/turf_decal/sand/plating, +/obj/effect/turf_decal/stripes/asteroid/line{ + dir = 1 + }, +/obj/machinery/button{ + pixel_y = 32 + }, +/turf/open/indestructible/plating, +/area/awaymission/museum) +"iI" = ( +/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/structure/sign/painting{ + pixel_y = 32; + persistence_id = "museumgate" + }, +/obj/machinery/light/floor, +/turf/open/floor/iron/dark, +/area/awaymission/museum) +"iK" = ( +/obj/effect/turf_decal/sand/plating, +/obj/effect/turf_decal/siding{ + dir = 8 + }, +/obj/structure/railing{ + dir = 8 + }, +/turf/open/floor/tram/plate, +/area/awaymission/museum) +"iN" = ( +/mob/living/basic/mothroach, +/obj/structure/window/spawner/directional/west, +/turf/open/floor/light/colour_cycle/dancefloor_b, +/area/awaymission/museum) +"iT" = ( +/obj/machinery/door/airlock/engineering, +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/mapping_helpers/airlock/access/all/away/generic3, +/turf/open/indestructible/plating, +/area/awaymission/museum) +"iU" = ( +/obj/machinery/telecomms/relay/preset/auto, +/turf/open/floor/bluespace, +/area/awaymission/museum) +"iV" = ( +/obj/structure/lattice/catwalk/mining, +/obj/structure/railing{ + dir = 10 + }, +/obj/structure/table, +/obj/item/binoculars, +/obj/item/clothing/mask/whistle, +/turf/open/misc/grass, +/area/awaymission/museum/mothroachvoid) +"iW" = ( +/obj/effect/turf_decal/tile/dark_blue/half/contrasted{ + dir = 8 + }, +/turf/open/floor/iron/white, +/area/awaymission/museum) +"iZ" = ( +/obj/effect/turf_decal/tile/neutral/opposingcorners, +/obj/effect/turf_decal/siding/dark_blue{ + dir = 4 + }, +/obj/effect/step_trigger/thrower{ + direction = 1; + facedir = 1; + tiles = 10; + mobs_only = 1 + }, +/turf/open/floor/iron/dark, +/area/awaymission/museum) +"jf" = ( +/mob/living/basic/mothroach, +/turf/open/floor/wood/large, +/area/awaymission/museum) +"jm" = ( +/mob/living/basic/mothroach, +/turf/open/misc/dirt/station, +/area/awaymission/museum/mothroachvoid) +"jn" = ( +/obj/effect/turf_decal/siding/dark_blue{ + dir = 4 + }, +/turf/open/floor/mineral/titanium/white, +/area/awaymission/museum) +"jo" = ( +/obj/effect/spawner/structure/window/hollow/directional{ + dir = 8 + }, +/turf/open/indestructible/plating, +/area/awaymission/museum) +"jt" = ( +/obj/structure/fluff/divine/conduit, +/obj/structure/railing{ + dir = 9 + }, +/obj/effect/turf_decal/siding/wood{ + dir = 9 + }, +/turf/open/floor/cult, +/area/awaymission/museum) +"jy" = ( +/mob/living/basic/statue/mannequin{ + dir = 8; + name = "Dale Knox"; + held_item = /obj/item/circuitboard + }, +/obj/effect/turf_decal/stripes{ + dir = 8 + }, +/turf/open/floor/circuit/green, +/area/awaymission/museum) +"jB" = ( +/obj/effect/spawner/structure/window, +/turf/open/indestructible/plating, +/area/awaymission/museum) +"jF" = ( +/obj/machinery/suit_storage_unit/open, +/obj/effect/turf_decal/box, +/obj/structure/fluff/fake_camera{ + dir = 4 + }, +/turf/open/floor/iron/white/textured_large, +/area/awaymission/museum) +"jG" = ( +/turf/open/floor/carpet/cyan, +/area/awaymission/museum/mothroachvoid) +"jH" = ( +/obj/structure/fake_stairs/directional/west, +/turf/open/floor/iron/smooth_half, +/area/awaymission/museum) +"jI" = ( +/obj/effect/turf_decal/stripes/line, +/turf/open/floor/engine, +/area/awaymission/museum) +"jL" = ( +/obj/structure/sink/kitchen/directional/west, +/turf/open/floor/iron/freezer, +/area/awaymission/museum) +"jN" = ( +/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/iron/dark, +/area/awaymission/museum) +"jP" = ( +/obj/effect/turf_decal/tile/neutral/opposingcorners, +/obj/effect/turf_decal/siding/dark_blue/corner{ + dir = 8 + }, +/obj/structure/table, +/obj/structure/fluff/fake_camera{ + dir = 9 + }, +/obj/item/reagent_containers/cup/glass/coffee, +/turf/open/floor/iron/dark, +/area/awaymission/museum) +"jU" = ( +/obj/effect/landmark/transport/nav_beacon/tram/platform{ + specific_transport_id = "museum_cargo"; + platform_code = 2; + name = "Exhibit Loading Bay" + }, +/turf/open/chasm/true/no_smooth, +/area/awaymission/museum) +"jV" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/turf/open/floor/engine, +/area/awaymission/museum) +"jW" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/structure/table, +/obj/item/integrated_circuit/loaded/hello_world, +/turf/open/floor/iron, +/area/awaymission/museum) +"kd" = ( +/mob/living/basic/mothroach, +/obj/structure/chair/comfy{ + dir = 1 + }, +/obj/effect/mapping_helpers/mob_buckler, +/turf/open/floor/wood/large, +/area/awaymission/museum) +"ke" = ( +/obj/structure/statue/gold/hos{ + anchored = 1 + }, +/turf/open/floor/mineral/diamond, +/area/awaymission/museum/mothroachvoid) +"kg" = ( +/obj/machinery/conveyor{ + dir = 1 + }, +/obj/effect/spawner/random/structure/crate, +/turf/open/indestructible/plating, +/area/awaymission/museum) +"kh" = ( +/obj/structure/lattice/catwalk/mining, +/obj/structure/railing/corner{ + dir = 8 + }, +/obj/machinery/light/small/directional/west, +/turf/open/chasm/true/no_smooth, +/area/awaymission/museum) +"kq" = ( +/obj/machinery/door/airlock/grunge, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/iron/dark/textured_large, +/area/awaymission/museum) +"kr" = ( +/obj/structure/table/wood, +/obj/structure/window/spawner/directional/west, +/obj/item/storage/box/fireworks, +/turf/open/floor/wood/tile, +/area/awaymission/museum) +"kw" = ( +/obj/effect/turf_decal/tile/green/opposingcorners, +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/turf_decal/siding/green{ + dir = 1 + }, +/turf/open/floor/iron, +/area/awaymission/museum) +"kA" = ( +/obj/machinery/conveyor{ + dir = 1 + }, +/obj/item/vending_refill/wardrobe/coroner_wardrobe, +/turf/open/indestructible/plating, +/area/awaymission/museum) +"kO" = ( +/obj/structure/railing{ + dir = 8 + }, +/obj/effect/turf_decal/tile/blue/opposingcorners, +/turf/open/floor/holofloor/white, +/area/awaymission/museum) +"kQ" = ( +/obj/structure/fluff/meteor, +/turf/open/floor/holofloor/hyperspace/ns, +/area/awaymission/museum) +"kX" = ( +/obj/structure/girder/displaced, +/obj/structure/railing{ + dir = 8 + }, +/turf/open/floor/iron/smooth_half{ + dir = 1 + }, +/area/awaymission/museum) +"kY" = ( +/obj/structure/closet/crate, +/obj/effect/spawner/random/entertainment/money_medium, +/obj/effect/spawner/random/entertainment/money_medium, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/indestructible/plating, +/area/awaymission/museum) +"la" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 4 + }, +/turf/open/floor/wood/large, +/area/awaymission/museum) +"lb" = ( +/obj/effect/turf_decal/tile/neutral/opposingcorners, +/obj/effect/turf_decal/siding/dark_blue, +/turf/open/floor/iron/dark, +/area/awaymission/museum) +"lf" = ( +/obj/effect/turf_decal/tile/neutral/opposingcorners, +/obj/effect/turf_decal/siding/dark_blue{ + dir = 9 + }, +/turf/open/floor/iron/dark, +/area/awaymission/museum) +"lg" = ( +/mob/living/basic/mothroach, +/obj/effect/turf_decal/siding/wood{ + dir = 4 + }, +/turf/open/floor/carpet/executive, +/area/awaymission/museum) +"lh" = ( +/obj/effect/turf_decal/stripes{ + dir = 8 + }, +/obj/structure/railing, +/turf/open/floor/catwalk_floor, +/area/awaymission/museum) +"lk" = ( +/obj/effect/turf_decal/siding/wideplating{ + dir = 4 + }, +/turf/open/floor/holofloor/beach/coast, +/area/awaymission/museum) +"ll" = ( +/obj/structure/plasticflaps/opaque, +/obj/machinery/conveyor{ + dir = 1 + }, +/turf/open/indestructible/plating, +/area/awaymission/museum) +"ls" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/machinery/computer/arcade/amputation{ + dir = 8 + }, +/turf/open/indestructible/plating, +/area/awaymission/museum) +"lz" = ( +/obj/effect/landmark/awaystart, +/obj/structure/flora/bush/sparsegrass/style_random, +/turf/open/floor/grass, +/area/awaymission/museum) +"lB" = ( +/obj/effect/turf_decal/sand/plating, +/obj/effect/turf_decal/siding{ + dir = 4 + }, +/obj/structure/railing{ + dir = 4 + }, +/turf/open/floor/tram/plate, +/area/awaymission/museum) +"lC" = ( +/obj/structure/table, +/obj/item/cigbutt/cigarbutt, +/turf/open/floor/mineral/titanium/blue, +/area/awaymission/museum) +"lG" = ( +/mob/living/basic/mothroach, +/obj/item/clothing/shoes/sandal/beach, +/turf/open/misc/beach/sand, +/area/awaymission/museum/mothroachvoid) +"lH" = ( +/obj/structure/plaque/static_plaque/golden/commission/uterus, +/turf/closed/indestructible/reinforced, +/area/awaymission/museum) +"lI" = ( +/obj/effect/smooths_with_walls, +/turf/open/mirage{ + target_turf_y = 29 + }, +/area/awaymission/museum) +"lM" = ( +/turf/open/floor/iron/smooth_large, +/area/awaymission/museum) +"lS" = ( +/obj/structure/table, +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/spawner/random/clothing/beret_or_rabbitears, +/turf/open/floor/iron, +/area/awaymission/museum) +"lT" = ( +/obj/structure/chair/office{ + dir = 1 + }, +/mob/living/basic/statue/mannequin{ + hat = /obj/item/clothing/suit/toggle/labcoat/science; + dir = 1 + }, +/obj/machinery/light/floor, +/turf/open/floor/iron/smooth_large, +/area/awaymission/museum) +"lU" = ( +/obj/structure/plasticflaps, +/turf/open/indestructible/plating, +/area/awaymission/museum) +"lV" = ( +/obj/structure/transport/linear/tram/slow, +/obj/structure/thermoplastic/light, +/obj/effect/landmark/transport/nav_beacon/tram/nav{ + specific_transport_id = "museum_cargo" + }, +/obj/effect/landmark/transport/nav_beacon/tram/platform{ + specific_transport_id = "museum_cargo"; + platform_code = 1; + name = "Internal Loading Bay" + }, +/turf/open/chasm/true/no_smooth, +/area/awaymission/museum) +"lZ" = ( +/obj/structure/plaque/static_plaque/golden/commission/cere, +/turf/closed/indestructible/reinforced, +/area/awaymission/museum) +"mg" = ( +/obj/structure/table, +/obj/effect/turf_decal/tile/neutral/opposingcorners, +/obj/item/reagent_containers/cup/soda_cans/air, +/turf/open/floor/iron/dark, +/area/awaymission/museum) +"mj" = ( +/turf/open/mirage{ + range = 2; + target_turf_y = 4 + }, +/area/awaymission/museum) +"ml" = ( +/obj/structure/table/wood, +/obj/item/food/hotcrossbun, +/turf/open/floor/iron/freezer, +/area/awaymission/museum) +"mn" = ( +/obj/structure/lattice/catwalk/mining, +/obj/structure/railing/corner{ + dir = 8 + }, +/turf/open/chasm/true/no_smooth, +/area/awaymission/museum) +"mA" = ( +/obj/structure/window/reinforced/spawner/directional/west, +/turf/open/floor/holofloor/beach/water, +/area/awaymission/museum) +"mC" = ( +/obj/structure/fluff/beach_umbrella, +/turf/open/floor/carpet/cyan, +/area/awaymission/museum/mothroachvoid) +"mK" = ( +/obj/structure/window/spawner/directional/south, +/turf/open/floor/light/colour_cycle/dancefloor_a, +/area/awaymission/museum) +"mN" = ( +/obj/structure/statue/sandstone/assistant, +/obj/effect/turf_decal/tile/green/opposingcorners, +/turf/open/floor/iron, +/area/awaymission/museum) +"mQ" = ( +/obj/structure/hedge, +/obj/effect/turf_decal/siding/wood/corner, +/turf/open/floor/grass, +/area/awaymission/museum) +"mS" = ( +/mob/living/basic/statue/mannequin{ + held_item = /obj/item/wrench; + hat = /obj/item/clothing/head/utility/hardhat; + dir = 1 + }, +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/decal/cleanable/blood/gibs, +/turf/open/floor/iron, +/area/awaymission/museum) +"mV" = ( +/turf/open/misc/grass, +/area/awaymission/museum/mothroachvoid) +"mX" = ( +/obj/machinery/computer/arcade/battle{ + dir = 4 + }, +/obj/effect/turf_decal/siding/red, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/iron/smooth_half, +/area/awaymission/museum) +"mZ" = ( +/obj/effect/turf_decal/siding/wood, +/obj/machinery/door/airlock/freezer{ + req_access = list("bartender") + }, +/turf/open/floor/iron/freezer, +/area/awaymission/museum) +"nb" = ( +/turf/open/misc/beach/coast/corner, +/area/awaymission/museum/mothroachvoid) +"nc" = ( +/obj/structure/transport/linear/tram/slow, +/obj/structure/tram, +/obj/machinery/transport/tram_controller{ + configured_transport_id = "museum_cargo"; + cover_locked = 0 + }, +/turf/open/chasm/true/no_smooth, +/area/awaymission/museum) +"ne" = ( +/obj/structure/fluff/preserved_borer, +/turf/open/floor/carpet, +/area/awaymission/museum) +"nh" = ( +/obj/effect/turf_decal/tile/neutral/opposingcorners, +/obj/effect/turf_decal/siding/dark_blue{ + dir = 5 + }, +/turf/open/floor/iron/dark, +/area/awaymission/museum) +"nl" = ( +/obj/effect/turf_decal/stripes/line, +/obj/structure/fluff/fake_camera{ + dir = 4 + }, +/turf/open/floor/engine, +/area/awaymission/museum) +"nq" = ( +/obj/structure/table/wood, +/obj/item/paper/fluff/jobs/security/court_judgement, +/turf/open/floor/wood/large, +/area/awaymission/museum) +"nr" = ( +/obj/machinery/light/small/directional/north, +/turf/open/floor/iron/showroomfloor, +/area/awaymission/museum) +"ns" = ( +/obj/machinery/light/small/directional/south, +/obj/structure/chair{ + dir = 1 + }, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/iron/white, +/area/awaymission/museum) +"nu" = ( +/obj/effect/decal/cleanable/glass/titanium, +/mob/living/basic/mouse/rat, +/turf/open/floor/iron/white, +/area/awaymission/museum) +"nv" = ( +/obj/effect/turf_decal/tile/neutral/opposingcorners, +/obj/effect/turf_decal/siding/dark_blue{ + dir = 5 + }, +/obj/machinery/light/floor, +/turf/open/floor/iron/dark, +/area/awaymission/museum) +"nw" = ( +/obj/effect/turf_decal/tile/neutral/opposingcorners, +/obj/effect/turf_decal/siding/dark_blue{ + dir = 8 + }, +/obj/machinery/computer/terminal/museum{ + dir = 8; + content = list("The so-called Hands Of God, loyal devotees of some illegal eldritch force. Their effect on the world weakened and crumbled as Nanotrasen loyal employees destroyed these so called Gods. Remember, only follow the faith of the chaplain and his regulated religions!") + }, +/turf/open/floor/iron/dark, +/area/awaymission/museum) +"nx" = ( +/obj/structure/chair/plastic{ + dir = 1 + }, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/iron/dark/textured_large, +/area/awaymission/museum) +"nz" = ( +/obj/structure/lattice/catwalk/mining, +/obj/structure/fluff{ + icon = 'icons/mob/simple/hivebot.dmi'; + icon_state = "fab_robot"; + name = "old plasma extractor" + }, +/turf/open/lava/plasma/mafia, +/area/awaymission/museum) +"nC" = ( +/obj/structure/railing, +/obj/effect/turf_decal/siding/wood, +/turf/open/floor/carpet, +/area/awaymission/museum) +"nD" = ( +/obj/structure/plaque/static_plaque/golden/commission/efficiency, +/turf/closed/indestructible/reinforced, +/area/awaymission/museum) +"nE" = ( +/obj/machinery/light/warm/dim/directional/north, +/obj/effect/turf_decal/bot, +/turf/open/floor/iron/dark/diagonal, +/area/awaymission/museum) +"nF" = ( +/obj/effect/turf_decal/tile/neutral/opposingcorners, +/obj/effect/turf_decal/siding/dark_blue{ + dir = 8 + }, +/obj/effect/step_trigger/thrower{ + direction = 1; + facedir = 1; + tiles = 10; + mobs_only = 1 + }, +/turf/open/floor/iron/dark, +/area/awaymission/museum) +"nH" = ( +/obj/structure/fluff/minepost, +/obj/effect/turf_decal/siding{ + dir = 5 + }, +/obj/structure/railing{ + dir = 4 + }, +/turf/open/floor/holofloor/asteroid, +/area/awaymission/museum) +"nJ" = ( +/obj/structure/fluff/divine/convertaltar, +/obj/structure/railing{ + dir = 1 + }, +/obj/effect/turf_decal/siding/wood{ + dir = 1 + }, +/turf/open/floor/cult, +/area/awaymission/museum) +"nQ" = ( +/obj/effect/spawner/random/vending/colavend, +/obj/effect/turf_decal/bot, +/turf/open/floor/iron, +/area/awaymission/museum) +"nS" = ( +/obj/effect/turf_decal/tile/dark_blue{ + dir = 4 + }, +/turf/open/floor/iron/white, +/area/awaymission/museum) +"nT" = ( +/obj/effect/mapping_helpers/bombable_wall, +/turf/closed/indestructible/fakedoor/maintenance, +/area/awaymission/museum) +"nW" = ( +/obj/effect/turf_decal/tile/neutral/opposingcorners, +/obj/effect/turf_decal/siding/dark_blue{ + dir = 1 + }, +/obj/structure/chair/sofa/bench/right{ + dir = 1 + }, +/turf/open/floor/iron/dark, +/area/awaymission/museum) +"od" = ( +/obj/structure/fluff/fake_vent, +/turf/open/floor/iron, +/area/awaymission/museum) +"oe" = ( +/obj/effect/turf_decal/tile/neutral/opposingcorners, +/obj/effect/turf_decal/siding/dark_blue/corner{ + dir = 1 + }, +/obj/structure/table, +/obj/item/food/sandwich/cheese/grilled, +/turf/open/floor/iron/dark, +/area/awaymission/museum) +"of" = ( +/obj/effect/puzzle_poddoor_open{ + icon = 'icons/effects/mapping_helpers.dmi'; + id = "museum_secret"; + queue_id = "museum_secret" + }, +/turf/closed/indestructible/reinforced, +/area/awaymission/museum) +"oo" = ( +/obj/machinery/iv_drip, +/obj/effect/turf_decal/tile/blue/opposingcorners, +/turf/open/floor/holofloor/white, +/area/awaymission/museum) +"os" = ( +/obj/item/toy/beach_ball/branded, +/turf/open/misc/beach/sand, +/area/awaymission/museum/mothroachvoid) +"ot" = ( +/obj/structure/grille, +/turf/open/floor/iron/dark/textured_large, +/area/awaymission/museum) +"ow" = ( +/obj/structure/girder/displaced, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/indestructible/plating, +/area/awaymission/museum) +"ox" = ( +/obj/machinery/computer/terminal/museum{ + dir = 8; + content = list("1998 - Dale Knox, the cofounder of Nanotrasen, would leave for health reasons.") + }, +/obj/effect/turf_decal/tile/neutral/opposingcorners, +/obj/effect/turf_decal/siding/dark_blue{ + dir = 8 + }, +/turf/open/floor/iron/dark, +/area/awaymission/museum) +"oA" = ( +/obj/effect/turf_decal/siding/wideplating{ + dir = 4 + }, +/turf/open/floor/holofloor/beach/water, +/area/awaymission/museum) +"oC" = ( +/obj/structure/flora/coconuts, +/turf/open/misc/beach/sand, +/area/awaymission/museum/mothroachvoid) +"oI" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/machinery/light/floor, +/turf/open/floor/iron, +/area/awaymission/museum) +"oQ" = ( +/turf/open/floor/holofloor/beach/coast{ + dir = 1 + }, +/area/awaymission/museum) +"oZ" = ( +/obj/effect/turf_decal/trimline/yellow/arrow_ccw{ + dir = 4 + }, +/turf/open/floor/engine, +/area/awaymission/museum) +"pb" = ( +/obj/effect/turf_decal/tile/neutral/opposingcorners, +/obj/effect/turf_decal/siding/dark_blue{ + dir = 1 + }, +/obj/effect/decal/cleanable/dirt/dust, +/obj/structure/sign/poster/official/pda_ad/directional/south, +/turf/open/floor/iron/dark, +/area/awaymission/museum) +"pc" = ( +/turf/open/floor/iron/dark/side{ + dir = 6 + }, +/area/awaymission/museum) +"pf" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/decal/cleanable/blood/gibs/body, +/turf/open/floor/iron, +/area/awaymission/museum) +"pg" = ( +/obj/effect/turf_decal/tile/green/opposingcorners, +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/turf_decal/siding/green{ + dir = 6 + }, +/obj/structure/hedge/opaque, +/turf/open/floor/iron, +/area/awaymission/museum) +"pi" = ( +/mob/living/basic/statue/mannequin{ + hat = /obj/item/clothing/head/costume/nursehat; + held_item = /obj/item/clothing/neck/stethoscope + }, +/obj/effect/turf_decal/tile/blue/opposingcorners, +/turf/open/floor/holofloor/white, +/area/awaymission/museum) +"pp" = ( +/obj/structure/chair/stool/bar/directional/north, +/turf/open/floor/wood/large, +/area/awaymission/museum) +"pt" = ( +/obj/structure/railing{ + dir = 8 + }, +/obj/effect/turf_decal/siding/wood{ + dir = 8 + }, +/turf/open/floor/carpet, +/area/awaymission/museum) +"pv" = ( +/obj/machinery/computer/terminal/museum{ + dir = 4; + content = list("Nanotrasen used to have much more volatile welding fuel mixtures because it was cheap. This backfired when a review revealed that infiltrators would use the fuel tanks to destroy bodies of their victims, leading to Nanotrasen developing a less unstable mixture months later.") + }, +/obj/effect/turf_decal/tile/neutral/opposingcorners, +/obj/effect/turf_decal/siding/dark_blue{ + dir = 4 + }, +/turf/open/floor/iron/dark, +/area/awaymission/museum) +"pw" = ( +/obj/effect/spawner/random/vending/snackvend, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/iron/white, +/area/awaymission/museum) +"pD" = ( +/obj/structure/broken_flooring/corner/always_floorplane/directional/west, +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/spawner/random/structure/crate_loot, +/turf/open/indestructible/plating, +/area/awaymission/museum) +"pF" = ( +/obj/structure/hedge/opaque, +/obj/effect/turf_decal/tile/neutral/fourcorners, +/turf/open/floor/iron/dark, +/area/awaymission/museum) +"pI" = ( +/obj/machinery/suit_storage_unit/open, +/obj/machinery/light/small/dim/directional/east, +/obj/effect/turf_decal/box, +/turf/open/floor/iron/white/textured_large, +/area/awaymission/museum) +"pL" = ( +/obj/item/clothing/suit/costume/bronze, +/turf/open/floor/bronze, +/area/awaymission/museum) +"pM" = ( +/obj/effect/spawner/random/engineering/canister, +/obj/effect/decal/cleanable/dirt/dust, +/obj/structure/broken_flooring/singular/always_floorplane{ + dir = 8 + }, +/turf/open/indestructible/plating, +/area/awaymission/museum) +"pX" = ( +/obj/structure/rack, +/obj/effect/spawner/random/maintenance/two, +/obj/effect/decal/cleanable/dirt/dust, +/obj/item/grenade/iedcasing/spawned, +/turf/open/indestructible/plating, +/area/awaymission/museum) +"pY" = ( +/obj/item/pickaxe/drill/diamonddrill, +/turf/open/misc/grass, +/area/awaymission/museum/mothroachvoid) +"qj" = ( +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/iron, +/area/awaymission/museum) +"qo" = ( +/obj/effect/oneway{ + dir = 8 + }, +/turf/open/water/beach, +/area/awaymission/museum/mothroachvoid) +"qp" = ( +/turf/open/floor/iron/dark/textured_large, +/area/awaymission/museum) +"qt" = ( +/obj/effect/spawner/random/food_or_drink/booze{ + loot = list(/obj/item/reagent_containers/cup/glass/bottle/beer = 10, /obj/item/reagent_containers/cup/glass/bottle/ale = 10, /obj/item/reagent_containers/cup/glass/bottle/beer/light = 5, /obj/item/reagent_containers/cup/glass/bottle/maltliquor = 5, /obj/item/reagent_containers/cup/glass/bottle/whiskey = 5, /obj/item/reagent_containers/cup/glass/bottle/gin = 5, /obj/item/reagent_containers/cup/glass/bottle/vodka = 5, /obj/item/reagent_containers/cup/glass/bottle/tequila = 5, /obj/item/reagent_containers/cup/glass/bottle/rum = 5, /obj/item/reagent_containers/cup/glass/bottle/vermouth = 5, /obj/item/reagent_containers/cup/glass/bottle/cognac = 5, /obj/item/reagent_containers/cup/glass/bottle/wine = 5, /obj/item/reagent_containers/cup/glass/bottle/kahlua = 5, /obj/item/reagent_containers/cup/glass/bottle/amaretto = 5, /obj/item/reagent_containers/cup/glass/bottle/hcider = 5, /obj/item/reagent_containers/cup/glass/bottle/absinthe = 5, /obj/item/reagent_containers/cup/glass/bottle/sake = 5, /obj/item/reagent_containers/cup/glass/bottle/grappa = 5, /obj/item/reagent_containers/cup/glass/bottle/applejack = 5, /obj/item/reagent_containers/cup/glass/bottle/wine_voltaic = 5, /obj/item/reagent_containers/cup/bottle/ethanol = 2, /obj/item/reagent_containers/cup/glass/bottle/fernet = 2, /obj/item/reagent_containers/cup/glass/bottle/champagne = 2, /obj/item/reagent_containers/cup/glass/bottle/absinthe/premium = 2, /obj/item/reagent_containers/cup/glass/bottle/goldschlager = 2, /obj/item/reagent_containers/cup/glass/bottle/patron = 1, /obj/item/reagent_containers/cup/glass/bottle/kong = 1, /obj/item/reagent_containers/cup/glass/bottle/lizardwine = 1, /obj/item/reagent_containers/cup/glass/bottle/vodka/badminka = 1, /obj/item/reagent_containers/cup/glass/bottle/trappist = 1); + spawn_random_offset = 2 + }, +/turf/open/floor/carpet/cyan, +/area/awaymission/museum/mothroachvoid) +"qw" = ( +/obj/item/flashlight/flare{ + start_on = 1; + icon_state = "flare-on" + }, +/obj/structure/table, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/indestructible/plating, +/area/awaymission/museum) +"qx" = ( +/obj/structure/reagent_dispensers/fueltank, +/obj/effect/decal/cleanable/fuel_pool/hivis, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/indestructible/plating, +/area/awaymission/museum) +"qA" = ( +/obj/effect/turf_decal/tile/neutral/opposingcorners, +/obj/effect/turf_decal/siding/dark_blue{ + dir = 6 + }, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/iron/dark, +/area/awaymission/museum) +"qJ" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/engine, +/area/awaymission/museum) +"qL" = ( +/obj/effect/turf_decal/tile/neutral/opposingcorners, +/obj/effect/turf_decal/siding/dark_blue{ + dir = 1 + }, +/obj/structure/fluff/fake_camera{ + dir = 5 + }, +/turf/open/floor/iron/dark, +/area/awaymission/museum) +"qM" = ( +/obj/machinery/conveyor{ + dir = 1 + }, +/obj/effect/spawner/random/structure/closet_empty/crate/with_loot, +/turf/open/indestructible/plating, +/area/awaymission/museum) +"qP" = ( +/obj/structure/plaque/static_plaque/golden/commission/pubby, +/turf/closed/indestructible/reinforced, +/area/awaymission/museum) +"qQ" = ( +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/iron/dark/textured_large, +/area/awaymission/museum) +"qR" = ( +/obj/effect/turf_decal/tile/neutral/opposingcorners, +/obj/effect/turf_decal/siding/dark_blue/corner{ + dir = 4 + }, +/obj/structure/chair/sofa/bench/right{ + dir = 4 + }, +/turf/open/floor/iron/dark, +/area/awaymission/museum) +"qS" = ( +/obj/structure/lattice, +/obj/structure/grille, +/turf/open/chasm/true/no_smooth, +/area/awaymission/museum) +"qU" = ( +/obj/structure/reagent_dispensers/fueltank, +/obj/effect/decal/cleanable/fuel_pool/hivis, +/obj/effect/turf_decal/delivery/red, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/indestructible/plating, +/area/awaymission/museum) +"qX" = ( +/obj/effect/turf_decal/tile/neutral/opposingcorners, +/obj/effect/turf_decal/siding/dark_blue{ + dir = 1 + }, +/obj/structure/fluff/fake_camera, +/turf/open/floor/iron/dark, +/area/awaymission/museum) +"qY" = ( +/obj/machinery/power/shuttle_engine/heater{ + dir = 4; + opacity = 1 + }, +/obj/structure/window/reinforced/spawner/directional/west, +/turf/open/indestructible/plating, +/area/awaymission/museum) +"rc" = ( +/obj/machinery/light/small/directional/east, +/obj/structure/girder/displaced, +/turf/open/floor/iron/dark/textured_large, +/area/awaymission/museum) +"re" = ( +/turf/cordon/secret, +/area/awaymission/museum) +"rm" = ( +/turf/open/indestructible/plating, +/area/awaymission/museum) +"ro" = ( +/obj/structure/railing, +/turf/open/floor/holofloor/asteroid{ + icon_state = "asteroid3" + }, +/area/awaymission/museum) +"rp" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 6 + }, +/turf/open/floor/carpet/executive, +/area/awaymission/museum) +"rq" = ( +/obj/effect/decal/cleanable/blood/old, +/obj/effect/gibspawner/human, +/obj/effect/gibspawner/human, +/obj/effect/gibspawner/human, +/obj/effect/gibspawner/human, +/mob/living/basic/statue/mannequin/suspicious, +/turf/open/floor/iron, +/area/awaymission/museum) +"rr" = ( +/turf/open/floor/wood/tile, +/area/awaymission/museum) +"rA" = ( +/obj/structure/chair/comfy/beige{ + dir = 8 + }, +/mob/living/basic/mothroach, +/obj/effect/mapping_helpers/mob_buckler, +/turf/open/floor/wood/large, +/area/awaymission/museum) +"rB" = ( +/obj/structure/lattice/catwalk/mining, +/obj/machinery/light/floor, +/turf/open/chasm, +/area/awaymission/museum) +"rJ" = ( +/obj/structure/broken_flooring/side/always_floorplane{ + dir = 2 + }, +/obj/structure/lattice, +/turf/open/chasm/true/no_smooth, +/area/awaymission/museum) +"rL" = ( +/obj/structure/lattice/catwalk/mining, +/obj/structure/railing{ + dir = 8 + }, +/obj/structure/holosign/barrier/engineering, +/turf/open/chasm/true/no_smooth, +/area/awaymission/museum) +"rO" = ( +/obj/effect/spawner/random/trash/mess, +/obj/effect/turf_decal/siding/red, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/iron/smooth_half, +/area/awaymission/museum) +"rP" = ( +/obj/item/clothing/mask/gas/clown_hat, +/turf/open/floor/iron, +/area/awaymission/museum) +"rQ" = ( +/obj/effect/turf_decal/tile/neutral/opposingcorners, +/obj/effect/turf_decal/siding/dark_blue{ + dir = 1 + }, +/obj/structure/railing/corner/end, +/turf/open/floor/iron/dark, +/area/awaymission/museum) +"rU" = ( +/mob/living/basic/statue/mannequin{ + dir = 4; + held_item = /obj/item/wrench; + name = "Michael Trasen" + }, +/obj/structure/sign/flag/nanotrasen/directional/south, +/obj/machinery/light/small/dim/directional/west, +/turf/open/floor/holofloor/white, +/area/awaymission/museum) +"rW" = ( +/obj/effect/turf_decal/tile/neutral/opposingcorners, +/obj/structure/table/reinforced, +/obj/structure/window/reinforced/spawner/directional/east, +/obj/effect/turf_decal/siding/dark_blue, +/obj/effect/spawner/random/entertainment/toy_figure, +/obj/effect/spawner/random/entertainment/toy_figure, +/obj/structure/desk_bell, +/turf/open/floor/iron/dark, +/area/awaymission/museum) +"rX" = ( +/obj/structure/railing{ + dir = 8 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/effect/mapping_helpers/broken_floor, +/turf/open/floor/engine, +/area/awaymission/museum) +"rY" = ( +/obj/machinery/light/small/broken/directional/north, +/obj/effect/decal/cleanable/dirt/dust, +/mob/living/basic/mouse/rat, +/turf/open/floor/iron/dark/textured_large, +/area/awaymission/museum) +"sd" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/structure/chair/office, +/turf/open/floor/iron, +/area/awaymission/museum) +"sh" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/structure/filingcabinet/chestdrawer, +/turf/open/floor/iron, +/area/awaymission/museum) +"sj" = ( +/mob/living/basic/statue{ + sentience_type = 2 + }, +/turf/open/floor/black, +/area/awaymission/museum) +"sm" = ( +/obj/effect/turf_decal/siding/dark_blue{ + dir = 8 + }, +/turf/open/floor/mineral/titanium/white, +/area/awaymission/museum) +"sp" = ( +/obj/machinery/door/window/left/directional/west, +/obj/machinery/light/warm/directional/south, +/turf/open/floor/wood/large, +/area/awaymission/museum) +"sq" = ( +/obj/structure/plaque/static_plaque/golden/commission/delta, +/turf/closed/indestructible/reinforced, +/area/awaymission/museum) +"st" = ( +/obj/effect/turf_decal/tile/neutral/opposingcorners, +/obj/effect/turf_decal/siding/dark_blue{ + dir = 4 + }, +/obj/machinery/door/poddoor/shutters/preopen, +/turf/open/floor/iron/dark, +/area/awaymission/museum) +"sy" = ( +/obj/structure/railing/corner, +/obj/effect/turf_decal/tile/neutral/opposingcorners, +/obj/effect/turf_decal/siding/dark_blue{ + dir = 1 + }, +/obj/effect/decal/cleanable/dirt/dust, +/obj/structure/fluff/fake_camera, +/turf/open/floor/iron/dark, +/area/awaymission/museum) +"sz" = ( +/obj/effect/decal/cleanable/glass/titanium, +/turf/open/floor/iron/white, +/area/awaymission/museum) +"sA" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/item/gift{ + contains_type = /mob/living/basic/pet/cat/feral + }, +/turf/open/indestructible/plating, +/area/awaymission/museum) +"sC" = ( +/obj/item/toy/figure/dsquad, +/obj/item/toy/figure/dsquad{ + pixel_x = -9 + }, +/obj/item/toy/figure/dsquad{ + pixel_x = 9 + }, +/obj/structure/window/reinforced/spawner/directional/west, +/turf/open/floor/holofloor/beach/coast, +/area/awaymission/museum) +"sD" = ( +/obj/structure/lattice/catwalk/mining, +/obj/structure/railing{ + dir = 8 + }, +/turf/open/chasm/true/no_smooth, +/area/awaymission/museum) +"sE" = ( +/obj/effect/turf_decal/tile/neutral/opposingcorners, +/obj/effect/turf_decal/siding/dark_blue{ + dir = 4 + }, +/obj/machinery/door/poddoor/shutters/indestructible{ + id = "museum_secret" + }, +/turf/open/floor/iron/dark, +/area/awaymission/museum) +"sG" = ( +/obj/effect/turf_decal/tile/green, +/turf/open/floor/iron, +/area/awaymission/museum) +"sN" = ( +/obj/effect/mine/explosive, +/obj/item/food/cake/berry_chocolate_cake, +/obj/structure/table, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/engine, +/area/awaymission/museum) +"sX" = ( +/obj/effect/turf_decal/tile/neutral/opposingcorners, +/obj/effect/turf_decal/siding/dark_blue{ + dir = 1 + }, +/obj/machinery/light/warm/directional/south, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/iron/dark, +/area/awaymission/museum) +"tc" = ( +/obj/structure/lattice/catwalk/mining, +/obj/structure/railing{ + dir = 6 + }, +/obj/structure/chair, +/mob/living/basic/mothroach, +/obj/effect/mapping_helpers/mob_buckler, +/turf/open/misc/grass, +/area/awaymission/museum/mothroachvoid) +"tf" = ( +/obj/item/instrument/musicalmoth, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/indestructible/plating, +/area/awaymission/museum) +"th" = ( +/obj/structure/flora/rock/icy/style_random, +/obj/effect/turf_decal/siding{ + dir = 4 + }, +/obj/structure/railing{ + dir = 4 + }, +/turf/open/floor/holofloor/asteroid, +/area/awaymission/museum) +"tj" = ( +/obj/effect/turf_decal/sand/plating, +/obj/effect/turf_decal/stripes/asteroid/line{ + dir = 1 + }, +/mob/living/basic/statue/mannequin{ + dir = 1; + hat = /obj/item/clothing/head/utility/hardhat; + held_item = /obj/item/wrench + }, +/turf/open/indestructible/plating, +/area/awaymission/museum) +"tk" = ( +/obj/structure/plaque/static_plaque/golden/commission/northstar, +/turf/open/floor/mineral/gold, +/area/awaymission/museum) +"tl" = ( +/obj/item/food/cake/mothmallow, +/obj/structure/table, +/turf/open/floor/carpet/executive, +/area/awaymission/museum) +"tq" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/turf/open/floor/engine, +/area/awaymission/museum) +"ts" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/decal/cleanable/blood/footprints{ + dir = 4 + }, +/turf/open/floor/iron, +/area/awaymission/museum) +"tt" = ( +/obj/effect/turf_decal/siding/dark_blue/corner{ + dir = 8 + }, +/turf/open/floor/mineral/titanium/blue, +/area/awaymission/museum) +"tv" = ( +/obj/effect/turf_decal/stripes{ + dir = 4 + }, +/obj/structure/railing, +/turf/open/floor/iron/smooth_half, +/area/awaymission/museum) +"tx" = ( +/obj/structure/table/wood, +/obj/effect/spawner/random/food_or_drink/booze{ + loot = list(/obj/item/reagent_containers/cup/glass/bottle/beer = 10, /obj/item/reagent_containers/cup/glass/bottle/ale = 10, /obj/item/reagent_containers/cup/glass/bottle/beer/light = 5, /obj/item/reagent_containers/cup/glass/bottle/maltliquor = 5, /obj/item/reagent_containers/cup/glass/bottle/whiskey = 5, /obj/item/reagent_containers/cup/glass/bottle/gin = 5, /obj/item/reagent_containers/cup/glass/bottle/vodka = 5, /obj/item/reagent_containers/cup/glass/bottle/tequila = 5, /obj/item/reagent_containers/cup/glass/bottle/rum = 5, /obj/item/reagent_containers/cup/glass/bottle/vermouth = 5, /obj/item/reagent_containers/cup/glass/bottle/cognac = 5, /obj/item/reagent_containers/cup/glass/bottle/wine = 5, /obj/item/reagent_containers/cup/glass/bottle/kahlua = 5, /obj/item/reagent_containers/cup/glass/bottle/amaretto = 5, /obj/item/reagent_containers/cup/glass/bottle/hcider = 5, /obj/item/reagent_containers/cup/glass/bottle/absinthe = 5, /obj/item/reagent_containers/cup/glass/bottle/sake = 5, /obj/item/reagent_containers/cup/glass/bottle/grappa = 5, /obj/item/reagent_containers/cup/glass/bottle/applejack = 5, /obj/item/reagent_containers/cup/glass/bottle/wine_voltaic = 5, /obj/item/reagent_containers/cup/bottle/ethanol = 2, /obj/item/reagent_containers/cup/glass/bottle/fernet = 2, /obj/item/reagent_containers/cup/glass/bottle/champagne = 2, /obj/item/reagent_containers/cup/glass/bottle/absinthe/premium = 2, /obj/item/reagent_containers/cup/glass/bottle/goldschlager = 2, /obj/item/reagent_containers/cup/glass/bottle/patron = 1, /obj/item/reagent_containers/cup/glass/bottle/kong = 1, /obj/item/reagent_containers/cup/glass/bottle/lizardwine = 1, /obj/item/reagent_containers/cup/glass/bottle/vodka/badminka = 1, /obj/item/reagent_containers/cup/glass/bottle/trappist = 1); + spawn_random_offset = 2 + }, +/turf/open/floor/wood/tile, +/area/awaymission/museum) +"ty" = ( +/obj/structure/table, +/obj/item/clothing/gloves/color/yellow{ + siemens_coefficient = 10; + name = "fake stungloves"; + desc = "A crude replica of stungloves. Essentially gloves wrapped with wire. Extremely unsafe." + }, +/obj/machinery/light/floor, +/turf/open/floor/iron, +/area/awaymission/museum) +"tB" = ( +/obj/effect/turf_decal/siding/thinplating_new, +/turf/open/chasm, +/area/awaymission/museum) +"tC" = ( +/obj/structure/sign/departments/lawyer/directional/south, +/turf/open/misc/grass, +/area/awaymission/museum/mothroachvoid) +"tD" = ( +/obj/effect/turf_decal/tile/neutral/opposingcorners, +/obj/effect/turf_decal/siding/dark_blue{ + dir = 1 + }, +/turf/open/floor/iron/dark, +/area/awaymission/museum) +"tG" = ( +/obj/structure/barricade/wooden/crude, +/turf/closed/indestructible/fakedoor, +/area/awaymission/museum) +"tI" = ( +/obj/effect/turf_decal/siding{ + dir = 8 + }, +/obj/structure/railing{ + dir = 8 + }, +/turf/open/floor/holofloor/asteroid{ + icon_state = "asteroid5" + }, +/area/awaymission/museum) +"tK" = ( +/obj/structure/sign/warning, +/turf/closed/indestructible/reinforced, +/area/awaymission/museum) +"tM" = ( +/obj/structure/table/wood, +/obj/effect/spawner/random/contraband/cannabis, +/obj/effect/spawner/random/contraband/cannabis, +/obj/effect/spawner/random/contraband/cannabis, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/iron/dark/textured_large, +/area/awaymission/museum) +"tN" = ( +/obj/effect/turf_decal/sand/plating, +/turf/open/floor/tram/plate, +/area/awaymission/museum) +"tS" = ( +/obj/structure/lattice/catwalk/mining, +/obj/structure/closet/crate/bin, +/turf/open/chasm/true/no_smooth, +/area/awaymission/museum) +"tU" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/decal/cleanable/blood/old, +/turf/open/indestructible/plating, +/area/awaymission/museum) +"uc" = ( +/turf/open/floor/light/colour_cycle/dancefloor_a, +/area/awaymission/museum) +"ud" = ( +/obj/effect/spawner/structure/window/hollow/reinforced/middle, +/turf/open/indestructible/plating, +/area/awaymission/museum) +"ue" = ( +/obj/effect/decal/cleanable/blood/old, +/obj/effect/mapping_helpers/broken_floor, +/obj/machinery/light/small/dim/directional/north, +/obj/effect/turf_decal/stripes/red/line{ + dir = 1 + }, +/turf/open/floor/iron, +/area/awaymission/museum) +"uf" = ( +/obj/effect/turf_decal/tile/neutral/opposingcorners, +/obj/effect/turf_decal/siding/dark_blue{ + dir = 1 + }, +/obj/machinery/door/poddoor/shutters/preopen{ + dir = 8 + }, +/turf/open/floor/iron/dark, +/area/awaymission/museum) +"ul" = ( +/obj/effect/oneway{ + dir = 8 + }, +/turf/open/floor/holofloor/beach/coast{ + dir = 2 + }, +/area/awaymission/museum/mothroachvoid) +"up" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 4 + }, +/obj/machinery/door/airlock/wood{ + name = "Bathroom" + }, +/turf/open/floor/iron/showroomfloor, +/area/awaymission/museum) +"uu" = ( +/obj/structure/rack, +/obj/effect/spawner/random/engineering/material, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/indestructible/plating, +/area/awaymission/museum) +"uE" = ( +/obj/structure/hedge, +/obj/effect/turf_decal/siding/wood{ + dir = 9 + }, +/turf/open/floor/grass, +/area/awaymission/museum) +"uM" = ( +/obj/structure/fluff/fake_camera{ + dir = 10 + }, +/turf/open/floor/mineral/titanium/blue, +/area/awaymission/museum) +"uN" = ( +/turf/open/floor/grass, +/area/awaymission/museum) +"uR" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/machinery/light/small/dim/directional/east, +/turf/open/indestructible/plating, +/area/awaymission/museum) +"uT" = ( +/obj/effect/spawner/structure/window/reinforced/shuttle/indestructible, +/turf/open/indestructible/plating, +/area/awaymission/museum) +"uY" = ( +/turf/open/floor/iron, +/area/awaymission/museum) +"vb" = ( +/obj/structure/grille/indestructible, +/obj/effect/decal/cleanable/fuel_pool/hivis, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/indestructible/plating, +/area/awaymission/museum) +"vc" = ( +/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/structure/sign/painting/large{ + persistence_id = "museumgate_big"; + dir = 1 + }, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/iron/dark, +/area/awaymission/museum) +"ve" = ( +/obj/structure/lattice/catwalk/mining, +/obj/structure/holosign/barrier/engineering, +/turf/open/chasm/true/no_smooth, +/area/awaymission/museum) +"vg" = ( +/obj/structure/puzzle_blockade/oneway{ + dir = 8 + }, +/obj/structure/broken_flooring/side/always_floorplane/directional/south, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/indestructible/plating, +/area/awaymission/museum) +"vh" = ( +/obj/structure/table, +/obj/effect/turf_decal/tile/neutral/opposingcorners, +/obj/item/reagent_containers/cup/soda_cans/sol_dry, +/turf/open/floor/iron/dark, +/area/awaymission/museum) +"vj" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/structure/table, +/obj/item/phone, +/turf/open/indestructible/plating, +/area/awaymission/museum) +"vp" = ( +/obj/structure/girder/displaced, +/obj/effect/mapping_helpers/broken_floor, +/turf/open/floor/iron/dark/textured_large, +/area/awaymission/museum) +"vs" = ( +/obj/effect/mapping_helpers/broken_floor, +/obj/structure/holosign/barrier/engineering, +/turf/open/indestructible/plating, +/area/awaymission/museum) +"vw" = ( +/obj/structure/window/bronze/spawner/directional/south, +/obj/structure/window/bronze/spawner/directional/west, +/obj/structure/window/bronze/spawner/directional/north, +/obj/structure/grille, +/turf/open/indestructible/plating, +/area/awaymission/museum) +"vx" = ( +/obj/structure/sign/poster/random/directional/north, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/iron/dark/textured_large, +/area/awaymission/museum) +"vy" = ( +/obj/machinery/door/poddoor/shutters/preopen{ + dir = 4 + }, +/turf/open/floor/iron, +/area/awaymission/museum) +"vC" = ( +/obj/structure/lattice/catwalk/mining, +/obj/structure/chair/plastic, +/turf/open/chasm/true/no_smooth, +/area/awaymission/museum) +"vE" = ( +/obj/effect/turf_decal/tile/green/opposingcorners, +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/turf_decal/siding/green{ + dir = 5 + }, +/obj/structure/filingcabinet, +/turf/open/floor/iron, +/area/awaymission/museum) +"vM" = ( +/mob/living/basic/statue/mannequin{ + dir = 1; + hat = /obj/item/clothing/suit/costume/bronze + }, +/obj/structure/fluff/fake_camera{ + dir = 4 + }, +/turf/open/floor/bronze, +/area/awaymission/museum) +"vO" = ( +/turf/open/floor/iron/stairs/left{ + dir = 4 + }, +/area/awaymission/museum) +"vU" = ( +/obj/machinery/door/airlock/wood{ + name = "Dance Room" + }, +/obj/effect/turf_decal/siding/wood, +/turf/open/floor/iron/dark, +/area/awaymission/museum) +"vZ" = ( +/obj/structure/table/reinforced, +/obj/effect/spawner/random/entertainment/toy, +/obj/structure/window/reinforced/spawner/directional/south, +/obj/structure/window/reinforced/spawner/directional/west, +/obj/effect/turf_decal/siding/dark_blue, +/turf/open/floor/mineral/titanium/blue, +/area/awaymission/museum) +"wh" = ( +/obj/structure/broken_flooring/corner/always_floorplane/directional/west, +/obj/structure/lattice, +/turf/open/chasm/true/no_smooth, +/area/awaymission/museum) +"wi" = ( +/obj/machinery/door/poddoor/shutters/indestructible{ + dir = 8; + id = "nothing" + }, +/turf/open/floor/iron, +/area/awaymission/museum) +"wk" = ( +/obj/machinery/vending/dinnerware, +/turf/open/floor/iron/freezer, +/area/awaymission/museum) +"wy" = ( +/obj/effect/turf_decal/loading_area{ + dir = 8 + }, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/iron/dark/textured_large, +/area/awaymission/museum) +"wA" = ( +/obj/effect/turf_decal/tile/green{ + dir = 1 + }, +/turf/open/floor/iron, +/area/awaymission/museum) +"wC" = ( +/obj/structure/hedge, +/obj/effect/turf_decal/siding/wideplating{ + dir = 1 + }, +/turf/open/floor/iron/dark/diagonal, +/area/awaymission/museum) +"wE" = ( +/obj/effect/turf_decal/tile/neutral/opposingcorners, +/obj/effect/turf_decal/siding/dark_blue{ + dir = 6 + }, +/obj/machinery/light/floor, +/turf/open/floor/iron/dark, +/area/awaymission/museum) +"wG" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/decal/cleanable/blood/footprints{ + dir = 4 + }, +/obj/structure/broken_flooring/corner/always_floorplane{ + dir = 8 + }, +/turf/open/indestructible/plating, +/area/awaymission/museum) +"wH" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/decal/cleanable/blood/footprints, +/turf/open/floor/iron, +/area/awaymission/museum) +"wI" = ( +/obj/structure/window/spawner/directional/north, +/turf/open/floor/light/colour_cycle/dancefloor_a, +/area/awaymission/museum) +"wJ" = ( +/obj/effect/turf_decal/tile/neutral/opposingcorners, +/obj/structure/fluff/dnamod, +/turf/open/floor/iron/dark, +/area/awaymission/museum) +"wL" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 4 + }, +/obj/structure/flora/bush/sparsegrass/style_random, +/turf/open/floor/grass, +/area/awaymission/museum) +"wN" = ( +/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/structure/sign/painting/large{ + persistence_id = "museumgate_big"; + dir = 1 + }, +/turf/open/floor/iron/dark, +/area/awaymission/museum) +"wO" = ( +/obj/item/kirbyplants/random, +/turf/open/floor/wood/large, +/area/awaymission/museum) +"wZ" = ( +/turf/open/misc/beach/coast{ + dir = 1 + }, +/area/awaymission/museum/mothroachvoid) +"xb" = ( +/obj/effect/turf_decal/tile/neutral/opposingcorners, +/obj/effect/turf_decal/siding/dark_blue{ + dir = 4 + }, +/obj/structure/chair/sofa/bench/left{ + dir = 4 + }, +/turf/open/floor/iron/dark, +/area/awaymission/museum) +"xc" = ( +/obj/structure/falsewall/reinforced, +/turf/open/indestructible/plating, +/area/awaymission/museum) +"xd" = ( +/obj/structure/table/reinforced, +/obj/structure/window/spawner/directional/west, +/obj/effect/spawner/random/bureaucracy/paper{ + spawn_random_offset = 7; + spawn_loot_count = 8 + }, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/iron/white, +/area/awaymission/museum) +"xf" = ( +/obj/effect/turf_decal/tile/neutral/opposingcorners, +/obj/effect/turf_decal/siding/dark_blue{ + dir = 1 + }, +/obj/structure/sign/poster/official/random/directional/south, +/turf/open/floor/iron/dark, +/area/awaymission/museum) +"xg" = ( +/obj/structure/table/reinforced, +/obj/item/circuitboard{ + icon_state = "bluespacearray"; + name = "fancy replica tech" + }, +/turf/open/floor/iron/smooth_large, +/area/awaymission/museum) +"xj" = ( +/obj/effect/turf_decal/siding{ + dir = 1 + }, +/turf/open/floor/holofloor/asteroid{ + icon_state = "asteroid3" + }, +/area/awaymission/museum) +"xm" = ( +/turf/open/floor/holofloor/beach/coast{ + dir = 2 + }, +/area/awaymission/museum/mothroachvoid) +"xn" = ( +/obj/effect/oneway{ + dir = 8 + }, +/turf/open/misc/beach/sand, +/area/awaymission/museum/mothroachvoid) +"xr" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/structure/closet/crate/freezer/food, +/turf/open/indestructible/plating, +/area/awaymission/museum) +"xt" = ( +/obj/item/kirbyplants/random, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/iron/dark/textured_large, +/area/awaymission/museum) +"xu" = ( +/turf/closed/indestructible/rock, +/area/awaymission/museum/mothroachvoid) +"xv" = ( +/obj/structure/hedge, +/obj/effect/turf_decal/siding/wood{ + dir = 6 + }, +/turf/open/floor/grass, +/area/awaymission/museum) +"xx" = ( +/obj/effect/turf_decal/siding/dark_blue{ + dir = 10 + }, +/obj/effect/turf_decal/tile/neutral/opposingcorners, +/turf/open/floor/iron/dark, +/area/awaymission/museum) +"xB" = ( +/obj/structure/table, +/obj/effect/decal/cleanable/dirt/dust, +/obj/item/flashlight/lamp{ + start_on = 0 + }, +/turf/open/floor/iron, +/area/awaymission/museum) +"xD" = ( +/obj/structure/window/reinforced/spawner/directional/west, +/obj/structure/fluff/balloon_nuke, +/turf/open/floor/holofloor/beach, +/area/awaymission/museum) +"xE" = ( +/turf/open/floor/mineral/gold, +/area/awaymission/museum/mothroachvoid) +"xF" = ( +/mob/living/basic/statue/mannequin{ + dir = 1; + held_item = /obj/item/weldingtool + }, +/obj/effect/mapping_helpers/burnt_floor, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/iron, +/area/awaymission/museum) +"xI" = ( +/turf/open/floor/iron/white, +/area/awaymission/museum) +"xJ" = ( +/obj/structure/railing/corner{ + dir = 8 + }, +/obj/machinery/computer/terminal/museum{ + dir = 1; + content = list("1995 - By the early 90s, as computers became smaller and technology more compact, Trasen-Knox saw the need to create more of a recognisable brand. They would officially change their name to Nanotrasen in 1995, and the name would stick for the company.") + }, +/obj/effect/turf_decal/tile/neutral/opposingcorners, +/obj/effect/turf_decal/siding/dark_blue{ + dir = 1 + }, +/turf/open/floor/iron/dark, +/area/awaymission/museum) +"xP" = ( +/obj/structure/closet/crate/cardboard, +/obj/item/storage/toolbox/artistic, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/indestructible/plating, +/area/awaymission/museum) +"xR" = ( +/obj/structure/railing{ + dir = 8 + }, +/obj/effect/turf_decal/tile/neutral/opposingcorners, +/turf/open/floor/iron/dark, +/area/awaymission/museum) +"xT" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 1 + }, +/obj/item/storage/box/party_poppers, +/obj/structure/table/wood, +/turf/open/floor/wood/large, +/area/awaymission/museum) +"ya" = ( +/obj/structure/table/wood, +/obj/effect/turf_decal/siding/wood{ + dir = 4 + }, +/obj/item/plate, +/obj/item/food/kebab/fiesta, +/turf/open/floor/wood/large, +/area/awaymission/museum) +"yf" = ( +/obj/structure/lattice/catwalk/mining, +/obj/machinery/light/small/directional/north, +/turf/open/chasm/true/no_smooth, +/area/awaymission/museum) +"yi" = ( +/obj/structure/chair/comfy/beige{ + dir = 1 + }, +/mob/living/basic/mothroach, +/obj/effect/mapping_helpers/mob_buckler, +/turf/open/floor/wood/large, +/area/awaymission/museum) +"yl" = ( +/turf/open/lava/plasma/mafia, +/area/awaymission/museum) +"yn" = ( +/obj/effect/spawner/structure/window/hollow/reinforced/end{ + dir = 8 + }, +/turf/open/indestructible/plating, +/area/awaymission/museum) +"yo" = ( +/obj/machinery/conveyor/inverted{ + dir = 10 + }, +/turf/open/indestructible/plating, +/area/awaymission/museum) +"yq" = ( +/obj/structure/fluff/meteor/large, +/turf/open/floor/holofloor/hyperspace/ns, +/area/awaymission/museum) +"yr" = ( +/obj/structure/chair/comfy, +/obj/effect/mapping_helpers/mob_buckler, +/mob/living/basic/mothroach, +/turf/open/floor/wood/large, +/area/awaymission/museum) +"yu" = ( +/turf/open/floor/catwalk_floor/iron_dark, +/area/awaymission/museum) +"yw" = ( +/obj/structure/lattice/catwalk/mining, +/obj/structure/railing{ + dir = 10 + }, +/obj/structure/table, +/obj/item/flashlight/lamp, +/turf/open/chasm/true/no_smooth, +/area/awaymission/museum) +"yx" = ( +/obj/effect/spawner/structure/window/hollow/reinforced/end, +/turf/open/indestructible/plating, +/area/awaymission/museum) +"yA" = ( +/obj/effect/turf_decal/tile/neutral/opposingcorners, +/obj/effect/turf_decal/siding/dark_blue{ + dir = 10 + }, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/iron/dark, +/area/awaymission/museum) +"yE" = ( +/obj/item/pickaxe/diamond, +/turf/open/misc/grass, +/area/awaymission/museum/mothroachvoid) +"yF" = ( +/obj/machinery/light/small/broken/directional/south, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/iron/dark/textured_large, +/area/awaymission/museum) +"yG" = ( +/obj/structure/lattice/catwalk/mining, +/obj/machinery/button/door/directional/east{ + id = "gateway_waste" + }, +/obj/structure/railing, +/turf/open/chasm/true/no_smooth, +/area/awaymission/museum) +"yK" = ( +/obj/effect/turf_decal/tile/neutral/opposingcorners, +/obj/effect/turf_decal/siding/dark_blue{ + dir = 8 + }, +/obj/structure/fluff/fokoff_sign, +/turf/open/floor/iron/dark, +/area/awaymission/museum) +"yM" = ( +/obj/machinery/door/poddoor{ + id = "gatewayfake" + }, +/turf/open/indestructible/plating, +/area/awaymission/museum) +"yN" = ( +/obj/effect/turf_decal/tile/neutral/opposingcorners, +/obj/effect/turf_decal/siding/dark_blue{ + dir = 8 + }, +/obj/effect/decal/cleanable/dirt/dust, +/obj/machinery/computer/terminal/museum{ + dir = 8; + content = list("Galaxywise Shipyards (Field: General Aerospace) - Much of Nanotrasen's strength as a megacorporation comes from their ability to practice what is essentially autarky- the production of all required goods from raw material to finalised item, with little to no reliance on external companies or factors. To this end, Galaxywise is critical to Nanotrasen's practice of autarky- from their orbital shipyards above Adasta, Nanotrasen is able to produce a wide range of important vessels, from small single-man scouting vessels to large-scale freighters and everything inbetween. Unfortunately for Nanotrasen, however, their autarky chain is broken by limitations imposed by TerraGov stating that only licensed corporations are capable of producing heavily armed vessels (the Merchant Marine Act states that any vessel capable of bearing armaments in excess of Class 2, the highest legal civilian grade, may be produced by licensed companies only)- a license Galaxywise has been unable to secure due to politicking by corporate rivals at the senate. ") + }, +/turf/open/floor/iron/dark, +/area/awaymission/museum) +"yS" = ( +/turf/closed/wall/space, +/area/awaymission/museum) +"zc" = ( +/obj/structure/railing, +/obj/effect/turf_decal/stripes, +/obj/structure/fluff/fake_camera{ + dir = 8 + }, +/turf/open/floor/iron/smooth_large, +/area/awaymission/museum) +"zd" = ( +/obj/effect/landmark/awaystart, +/turf/open/floor/grass, +/area/awaymission/museum) +"zg" = ( +/obj/effect/turf_decal/tile/neutral/opposingcorners, +/obj/effect/turf_decal/siding/dark_blue{ + dir = 6 + }, +/turf/open/floor/iron/dark, +/area/awaymission/museum) +"zh" = ( +/obj/machinery/conveyor{ + dir = 9 + }, +/turf/open/indestructible/plating, +/area/awaymission/museum) +"zr" = ( +/obj/structure/lattice/catwalk/mining, +/obj/structure/railing{ + dir = 4 + }, +/turf/open/chasm/true/no_smooth, +/area/awaymission/museum) +"zz" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/structure/girder/bronze, +/turf/open/floor/bronze/flat, +/area/awaymission/museum) +"zA" = ( +/obj/effect/mapping_helpers/ztrait_injector/museum, +/turf/open/floor/bluespace, +/area/awaymission/museum) +"zC" = ( +/obj/machinery/vending/boozeomat/all_access, +/turf/open/floor/wood/tile, +/area/awaymission/museum) +"zE" = ( +/turf/closed/indestructible/rock, +/area/awaymission/museum) +"zG" = ( +/obj/structure/chair/office{ + dir = 8 + }, +/obj/effect/turf_decal/siding/red, +/mob/living/basic/statue/mannequin{ + dir = 8; + hat = /obj/item/clothing/head/fedora + }, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/iron/smooth_half, +/area/awaymission/museum) +"zI" = ( +/obj/effect/turf_decal/tile/neutral/opposingcorners, +/obj/structure/window/bronze/spawner/directional/north, +/obj/machinery/computer/terminal/museum{ + pixel_y = -6; + content = list("Ratvar was once a powerful entity competing with the likes of Nar-Sie. It resided on a plane known as “Reebee” or the “City of cogs.” Supposedly, it was a clockwork city made of brass in which its cultists could enter once they had realized its power. However, this plane was also Ratvar’s prison from which it yearned to escape. While Reebee is gone, it is assumed that other structures such as temples or engines of the cult's creation still exist although it is unknown if they still have the power once bestowed to them by Ratvar. The fall of Reebe was an event in which Reebe, Ratvar, and all of its cultists were struck down by Nanotrasen. The cult was preparing Reebe for the freeing of Ratvar where the Veil was weak. Outpost 17, a small nanotrasen asteroid mining station was the target. Brave crewmembers managed to slip through the cracks in the veil and into the heart of Reebe with a bluespace artillery beacon in tow. With a desperate plea being sent out to a nearby security outpost, Reebe was obliterated along with the crewmembers of Outpost 17.") + }, +/turf/open/floor/iron/dark, +/area/awaymission/museum) +"zK" = ( +/obj/machinery/computer/arcade/battle{ + dir = 8 + }, +/obj/effect/turf_decal/siding/wood{ + dir = 1 + }, +/turf/open/floor/wood/tile, +/area/awaymission/museum) +"zL" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/structure/table, +/obj/item/stamp/denied{ + pixel_y = 12 + }, +/obj/item/stamp/granted{ + pixel_y = 12; + pixel_x = 8 + }, +/obj/effect/spawner/random/bureaucracy/paper{ + spawn_random_offset = 12; + spawn_scatter_radius = 1; + spawn_loot_count = 8 + }, +/turf/open/floor/iron, +/area/awaymission/museum) +"zM" = ( +/obj/effect/turf_decal/stripes/line, +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/decal/cleanable/blood/tracks, +/obj/structure/broken_flooring/side/always_floorplane{ + dir = 8 + }, +/turf/open/indestructible/plating, +/area/awaymission/museum) +"zR" = ( +/obj/structure/statue/gold/hop{ + anchored = 1 + }, +/turf/open/floor/mineral/diamond, +/area/awaymission/museum/mothroachvoid) +"zU" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/decal/cleanable/generic, +/turf/open/indestructible/plating, +/area/awaymission/museum) +"zX" = ( +/obj/machinery/door/poddoor/shutters/preopen, +/turf/open/floor/iron, +/area/awaymission/museum) +"zY" = ( +/obj/effect/turf_decal/tile/neutral/opposingcorners, +/obj/effect/turf_decal/siding/dark_blue, +/obj/machinery/light/warm/directional/north, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/iron/dark, +/area/awaymission/museum) +"Ab" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/decal/cleanable/glass/titanium, +/obj/structure/chair{ + dir = 1 + }, +/obj/structure/fluff/fake_vent, +/turf/open/floor/iron/white, +/area/awaymission/museum) +"Ag" = ( +/obj/effect/turf_decal/tile/dark_blue/half/contrasted{ + dir = 4 + }, +/turf/open/floor/iron/white, +/area/awaymission/museum) +"Ah" = ( +/obj/structure/transport/linear/tram/slow, +/obj/structure/tram/alt/titanium, +/turf/open/chasm/true/no_smooth, +/area/awaymission/museum) +"Ai" = ( +/obj/structure/transport/linear/tram/slow, +/obj/structure/thermoplastic, +/obj/effect/spawner/random/structure/closet_empty/crate/with_loot, +/obj/machinery/door/window/elevator/left/directional/south{ + transport_linked_id = "museum_cargo" + }, +/turf/open/chasm/true/no_smooth, +/area/awaymission/museum) +"Ak" = ( +/obj/effect/turf_decal/tile/neutral/opposingcorners, +/obj/effect/turf_decal/siding/dark_blue{ + dir = 8 + }, +/obj/effect/decal/cleanable/dirt/dust, +/obj/structure/chair/sofa/bench/right{ + dir = 4 + }, +/turf/open/floor/iron/dark, +/area/awaymission/museum) +"Am" = ( +/obj/structure/window/spawner/directional/west, +/obj/structure/window/spawner/directional/north, +/turf/open/floor/light/colour_cycle/dancefloor_a, +/area/awaymission/museum) +"Aq" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/structure/sign/poster/random/directional/east, +/turf/open/floor/engine, +/area/awaymission/museum) +"Ar" = ( +/turf/open/water/beach, +/area/awaymission/museum/mothroachvoid) +"As" = ( +/mob/living/basic/statue/mannequin{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/yellow, +/obj/effect/turf_decal/trimline/yellow/corner, +/obj/machinery/conveyor{ + dir = 1 + }, +/turf/open/floor/engine, +/area/awaymission/museum) +"At" = ( +/obj/effect/turf_decal/siding/wood, +/turf/open/floor/grass, +/area/awaymission/museum) +"Ay" = ( +/obj/effect/turf_decal/tile/neutral/opposingcorners, +/obj/effect/turf_decal/siding/dark_blue/corner{ + dir = 1 + }, +/obj/item/kirbyplants/random, +/turf/open/floor/iron/dark, +/area/awaymission/museum) +"AC" = ( +/obj/machinery/door/airlock/shuttle/glass, +/obj/effect/turf_decal/siding/dark_blue{ + dir = 9 + }, +/turf/open/floor/mineral/plastitanium, +/area/awaymission/museum) +"AE" = ( +/obj/structure/fluff/divine/powerpylon, +/obj/structure/railing{ + dir = 8 + }, +/obj/effect/turf_decal/siding/wood{ + dir = 8 + }, +/turf/open/floor/cult, +/area/awaymission/museum) +"AG" = ( +/obj/machinery/oven, +/turf/open/floor/iron/freezer, +/area/awaymission/museum) +"AI" = ( +/obj/machinery/conveyor{ + dir = 1 + }, +/obj/machinery/light/small/dim/directional/east, +/turf/open/indestructible/plating, +/area/awaymission/museum) +"AM" = ( +/obj/effect/step_trigger/teleporter/offset{ + teleport_y_offset = -30 + }, +/turf/open/mirage{ + target_turf_y = -29; + dir = 1 + }, +/area/awaymission/museum) +"AP" = ( +/obj/structure/railing{ + dir = 4 + }, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/indestructible/plating, +/area/awaymission/museum) +"AR" = ( +/obj/structure/railing{ + dir = 8 + }, +/obj/structure/grille/broken, +/turf/open/indestructible/plating, +/area/awaymission/museum) +"AS" = ( +/obj/effect/smooths_with_walls, +/turf/open/mirage{ + dir = 1; + target_turf_x = -9 + }, +/area/awaymission/museum) +"AY" = ( +/obj/effect/turf_decal/tile/neutral/opposingcorners, +/obj/machinery/door/airlock/grunge{ + name = "Souvenir Shop" + }, +/obj/effect/turf_decal/siding/green, +/obj/effect/mapping_helpers/airlock/access/all/away/generic3, +/turf/open/floor/iron/dark, +/area/awaymission/museum) +"AZ" = ( +/obj/effect/turf_decal/tile/neutral/opposingcorners, +/obj/effect/turf_decal/siding/dark_blue{ + dir = 1 + }, +/obj/machinery/light/warm/directional/south, +/obj/structure/closet/crate/bin, +/turf/open/floor/iron/dark, +/area/awaymission/museum) +"Be" = ( +/obj/effect/turf_decal/stripes/red/line{ + dir = 4 + }, +/turf/open/floor/iron, +/area/awaymission/museum) +"Bj" = ( +/obj/structure/closet/lawcloset, +/turf/open/floor/wood/large, +/area/awaymission/museum) +"Bo" = ( +/obj/machinery/jukebox, +/turf/open/floor/iron/dark/textured_large, +/area/awaymission/museum) +"Bq" = ( +/obj/effect/turf_decal/tile/neutral/opposingcorners, +/obj/effect/turf_decal/siding/dark_blue{ + dir = 8 + }, +/obj/machinery/light/warm/directional/east, +/turf/open/floor/iron/dark, +/area/awaymission/museum) +"Bu" = ( +/obj/effect/turf_decal/siding/dark_blue/corner{ + dir = 1 + }, +/turf/open/floor/mineral/titanium/blue, +/area/awaymission/museum) +"BF" = ( +/turf/open/misc/beach/coast{ + dir = 6 + }, +/area/awaymission/museum/mothroachvoid) +"BK" = ( +/obj/structure/railing{ + dir = 8 + }, +/turf/open/indestructible/plating, +/area/awaymission/museum) +"BO" = ( +/obj/structure/sign/poster/random/directional/south, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/iron/white, +/area/awaymission/museum) +"BQ" = ( +/obj/machinery/conveyor{ + dir = 1 + }, +/turf/open/floor/engine, +/area/awaymission/museum) +"BX" = ( +/obj/machinery/conveyor{ + dir = 1 + }, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/indestructible/plating, +/area/awaymission/museum) +"Cb" = ( +/obj/structure/transport/linear/tram/slow, +/obj/structure/thermoplastic, +/obj/effect/spawner/random/structure/closet_empty/crate/with_loot, +/turf/open/chasm/true/no_smooth, +/area/awaymission/museum) +"Cc" = ( +/obj/structure/hedge/opaque, +/obj/effect/turf_decal/tile/neutral/opposingcorners, +/turf/open/floor/iron/dark, +/area/awaymission/museum) +"Cd" = ( +/obj/effect/step_trigger/teleporter/offset{ + teleport_y_offset = 14 + }, +/turf/open/floor/iron, +/area/awaymission/museum) +"Cf" = ( +/obj/effect/turf_decal/tile/neutral/opposingcorners, +/obj/effect/turf_decal/siding/dark_blue/corner{ + dir = 4 + }, +/obj/structure/table, +/obj/effect/spawner/random/bureaucracy/crayon{ + spawn_loot_count = 5; + spawn_random_offset = 4 + }, +/turf/open/floor/iron/dark, +/area/awaymission/museum) +"Ci" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 1 + }, +/obj/item/clothing/mask/party_horn, +/obj/item/clothing/mask/party_horn, +/obj/structure/table/wood, +/turf/open/floor/wood/large, +/area/awaymission/museum) +"Cj" = ( +/obj/structure/rack, +/obj/effect/turf_decal/tile/green/opposingcorners, +/obj/effect/spawner/random/entertainment/toy, +/obj/effect/spawner/random/entertainment/toy, +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/turf_decal/siding/green{ + dir = 8 + }, +/turf/open/floor/iron, +/area/awaymission/museum) +"Co" = ( +/obj/effect/turf_decal/tile/neutral/opposingcorners, +/obj/effect/turf_decal/siding/dark_blue{ + dir = 4 + }, +/obj/structure/chair/sofa/bench{ + dir = 4 + }, +/turf/open/floor/iron/dark, +/area/awaymission/museum) +"Cq" = ( +/obj/structure/statue/gold/rd{ + anchored = 1 + }, +/turf/open/floor/mineral/diamond, +/area/awaymission/museum/mothroachvoid) +"Cu" = ( +/turf/open/misc/beach/coast{ + dir = 10 + }, +/area/awaymission/museum/mothroachvoid) +"Cy" = ( +/obj/structure/table/wood, +/obj/effect/spawner/random/food_or_drink/booze{ + loot = list(/obj/item/reagent_containers/cup/glass/bottle/beer = 10, /obj/item/reagent_containers/cup/glass/bottle/ale = 10, /obj/item/reagent_containers/cup/glass/bottle/beer/light = 5, /obj/item/reagent_containers/cup/glass/bottle/maltliquor = 5, /obj/item/reagent_containers/cup/glass/bottle/whiskey = 5, /obj/item/reagent_containers/cup/glass/bottle/gin = 5, /obj/item/reagent_containers/cup/glass/bottle/vodka = 5, /obj/item/reagent_containers/cup/glass/bottle/tequila = 5, /obj/item/reagent_containers/cup/glass/bottle/rum = 5, /obj/item/reagent_containers/cup/glass/bottle/vermouth = 5, /obj/item/reagent_containers/cup/glass/bottle/cognac = 5, /obj/item/reagent_containers/cup/glass/bottle/wine = 5, /obj/item/reagent_containers/cup/glass/bottle/kahlua = 5, /obj/item/reagent_containers/cup/glass/bottle/amaretto = 5, /obj/item/reagent_containers/cup/glass/bottle/hcider = 5, /obj/item/reagent_containers/cup/glass/bottle/absinthe = 5, /obj/item/reagent_containers/cup/glass/bottle/sake = 5, /obj/item/reagent_containers/cup/glass/bottle/grappa = 5, /obj/item/reagent_containers/cup/glass/bottle/applejack = 5, /obj/item/reagent_containers/cup/glass/bottle/wine_voltaic = 5, /obj/item/reagent_containers/cup/bottle/ethanol = 2, /obj/item/reagent_containers/cup/glass/bottle/fernet = 2, /obj/item/reagent_containers/cup/glass/bottle/champagne = 2, /obj/item/reagent_containers/cup/glass/bottle/absinthe/premium = 2, /obj/item/reagent_containers/cup/glass/bottle/goldschlager = 2, /obj/item/reagent_containers/cup/glass/bottle/patron = 1, /obj/item/reagent_containers/cup/glass/bottle/kong = 1, /obj/item/reagent_containers/cup/glass/bottle/lizardwine = 1, /obj/item/reagent_containers/cup/glass/bottle/vodka/badminka = 1, /obj/item/reagent_containers/cup/glass/bottle/trappist = 1); + spawn_random_offset = 2; + spawn_loot_count = 2 + }, +/obj/machinery/light/warm/directional/west, +/turf/open/floor/wood/large, +/area/awaymission/museum) +"CB" = ( +/obj/effect/turf_decal/stripes/red/line{ + dir = 5 + }, +/turf/open/floor/iron, +/area/awaymission/museum) +"CC" = ( +/obj/effect/turf_decal/siding/wideplating, +/turf/open/misc/beach/sand, +/area/awaymission/museum/mothroachvoid) +"CD" = ( +/obj/effect/turf_decal/tile/neutral/opposingcorners, +/obj/effect/turf_decal/siding/dark_blue{ + dir = 4 + }, +/obj/structure/fluff/wallsign/directional/west{ + name = "Exit"; + dir = 2 + }, +/turf/open/floor/iron/dark, +/area/awaymission/museum) +"CF" = ( +/obj/effect/turf_decal/tile/neutral/opposingcorners, +/obj/effect/turf_decal/siding/dark_blue{ + dir = 4 + }, +/obj/machinery/door/poddoor/shutters/indestructible{ + id = "nothing" + }, +/turf/open/floor/iron/dark, +/area/awaymission/museum) +"CI" = ( +/obj/effect/turf_decal/caution, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/indestructible/plating, +/area/awaymission/museum) +"CK" = ( +/obj/item/bedsheet/medical, +/obj/structure/bed, +/obj/effect/turf_decal/tile/blue/opposingcorners, +/turf/open/floor/holofloor/white, +/area/awaymission/museum) +"CL" = ( +/obj/effect/turf_decal/siding/wood, +/turf/open/floor/carpet/executive, +/area/awaymission/museum) +"CT" = ( +/mob/living/basic/mothroach, +/mob/living/basic/mothroach, +/obj/structure/window/spawner/directional/south, +/turf/open/floor/light/colour_cycle/dancefloor_b, +/area/awaymission/museum) +"CV" = ( +/obj/structure/sink/directional/south, +/obj/structure/mirror/directional/north{ + pixel_y = 32 + }, +/turf/open/floor/iron/showroomfloor, +/area/awaymission/museum) +"CW" = ( +/obj/effect/turf_decal/tile/neutral/opposingcorners, +/obj/effect/turf_decal/siding/dark_blue{ + dir = 4 + }, +/obj/structure/fluff/fake_camera{ + dir = 8 + }, +/turf/open/floor/iron/dark, +/area/awaymission/museum) +"De" = ( +/obj/effect/oneway{ + dir = 8 + }, +/turf/open/misc/beach/coast{ + dir = 1 + }, +/area/awaymission/museum/mothroachvoid) +"Dk" = ( +/obj/effect/mapping_helpers/broken_floor, +/turf/open/floor/engine, +/area/awaymission/museum) +"Dl" = ( +/turf/open/misc/beach/coast/corner{ + dir = 4 + }, +/area/awaymission/museum/mothroachvoid) +"Dr" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/structure/fluff/fake_scrubber, +/turf/open/floor/iron/white, +/area/awaymission/museum) +"Du" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/decal/cleanable/insectguts, +/obj/structure/closet/crate/preopen, +/turf/open/indestructible/plating, +/area/awaymission/museum) +"Dx" = ( +/obj/effect/mine/sound, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/indestructible/plating, +/area/awaymission/museum) +"DA" = ( +/obj/machinery/light/small/directional/west, +/turf/open/chasm/true/no_smooth, +/area/awaymission/museum) +"DD" = ( +/turf/open/floor/bluespace, +/area/awaymission/museum) +"DE" = ( +/obj/effect/turf_decal/tile/neutral/opposingcorners, +/obj/effect/turf_decal/siding/dark_blue{ + dir = 4 + }, +/obj/structure/fluff/fake_camera{ + dir = 10 + }, +/turf/open/floor/iron/dark, +/area/awaymission/museum) +"DI" = ( +/obj/effect/turf_decal/tile/neutral/opposingcorners, +/obj/effect/turf_decal/siding/dark_blue/corner, +/obj/structure/chair/sofa/bench/right{ + dir = 8 + }, +/turf/open/floor/iron/dark, +/area/awaymission/museum) +"DL" = ( +/obj/structure/railing{ + dir = 8 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 9 + }, +/turf/open/floor/engine, +/area/awaymission/museum) +"DS" = ( +/obj/effect/mapping_helpers/broken_floor, +/obj/effect/spawner/random/structure/girder, +/turf/open/indestructible/plating, +/area/awaymission/museum) +"DT" = ( +/obj/structure/broken_flooring/side/always_floorplane/directional/south, +/turf/open/floor/black, +/area/awaymission/museum) +"DU" = ( +/obj/effect/turf_decal/tile/dark_blue/anticorner/contrasted{ + dir = 1 + }, +/turf/open/floor/iron/white, +/area/awaymission/museum) +"DV" = ( +/obj/effect/turf_decal/tile/neutral/opposingcorners, +/obj/effect/turf_decal/siding/dark_blue{ + dir = 9 + }, +/obj/machinery/light/floor, +/turf/open/floor/iron/dark, +/area/awaymission/museum) +"DY" = ( +/turf/closed/indestructible/reinforced/titanium, +/area/awaymission/museum) +"Ea" = ( +/obj/machinery/light/small/broken/directional/north, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/iron/dark/textured_large, +/area/awaymission/museum) +"Ec" = ( +/mob/living/basic/mothroach, +/obj/structure/window/spawner/directional/north, +/turf/open/floor/light/colour_cycle/dancefloor_b, +/area/awaymission/museum) +"Ef" = ( +/obj/machinery/computer/old{ + name = "replica computer"; + dir = 4; + icon_keyboard = "rd_key"; + icon_screen = "rdcomp" + }, +/turf/open/floor/iron/smooth_large, +/area/awaymission/museum) +"Ek" = ( +/obj/structure/table/wood, +/obj/structure/window/spawner/directional/east, +/obj/item/plate, +/obj/item/kitchen/fork, +/turf/open/floor/wood/tile, +/area/awaymission/museum) +"El" = ( +/obj/effect/turf_decal/tile/neutral/opposingcorners, +/obj/effect/turf_decal/siding/dark_blue{ + dir = 1 + }, +/obj/machinery/door/poddoor/shutters/preopen{ + dir = 4 + }, +/obj/structure/fluff/wallsign/directional/south{ + dir = 4; + name = "Oddities" + }, +/turf/open/floor/iron/dark, +/area/awaymission/museum) +"Eo" = ( +/mob/living/basic/statue/mannequin{ + held_item = /obj/item/wrench; + hat = /obj/item/clothing/head/utility/hardhat + }, +/obj/machinery/light/directional/north, +/turf/open/indestructible/plating, +/area/awaymission/museum) +"Er" = ( +/obj/structure/chair/comfy/beige, +/mob/living/basic/mothroach, +/obj/effect/mapping_helpers/mob_buckler, +/obj/machinery/light/warm/directional/west, +/turf/open/floor/wood/large, +/area/awaymission/museum) +"EA" = ( +/obj/machinery/door/airlock/shuttle/glass, +/obj/effect/turf_decal/siding/dark_blue, +/turf/open/floor/mineral/titanium/blue, +/area/awaymission/museum) +"ED" = ( +/obj/structure/transport/linear/tram/slow, +/obj/structure/thermoplastic, +/obj/machinery/light/floor, +/turf/open/chasm/true/no_smooth, +/area/awaymission/museum) +"EE" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/structure/closet/crate/secure/freezer, +/obj/item/food/pizza/flatbread/fish, +/turf/open/indestructible/plating, +/area/awaymission/museum) +"EG" = ( +/obj/item/flashlight/flare{ + start_on = 1; + icon_state = "flare-on"; + light_range = 4 + }, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/indestructible/plating, +/area/awaymission/museum) +"EK" = ( +/obj/machinery/conveyor{ + dir = 1 + }, +/turf/open/indestructible/plating, +/area/awaymission/museum) +"EM" = ( +/obj/structure/table/wood, +/obj/effect/spawner/random/food_or_drink/booze{ + loot = list(/obj/item/reagent_containers/cup/glass/bottle/beer = 10, /obj/item/reagent_containers/cup/glass/bottle/ale = 10, /obj/item/reagent_containers/cup/glass/bottle/beer/light = 5, /obj/item/reagent_containers/cup/glass/bottle/maltliquor = 5, /obj/item/reagent_containers/cup/glass/bottle/whiskey = 5, /obj/item/reagent_containers/cup/glass/bottle/gin = 5, /obj/item/reagent_containers/cup/glass/bottle/vodka = 5, /obj/item/reagent_containers/cup/glass/bottle/tequila = 5, /obj/item/reagent_containers/cup/glass/bottle/rum = 5, /obj/item/reagent_containers/cup/glass/bottle/vermouth = 5, /obj/item/reagent_containers/cup/glass/bottle/cognac = 5, /obj/item/reagent_containers/cup/glass/bottle/wine = 5, /obj/item/reagent_containers/cup/glass/bottle/kahlua = 5, /obj/item/reagent_containers/cup/glass/bottle/amaretto = 5, /obj/item/reagent_containers/cup/glass/bottle/hcider = 5, /obj/item/reagent_containers/cup/glass/bottle/absinthe = 5, /obj/item/reagent_containers/cup/glass/bottle/sake = 5, /obj/item/reagent_containers/cup/glass/bottle/grappa = 5, /obj/item/reagent_containers/cup/glass/bottle/applejack = 5, /obj/item/reagent_containers/cup/glass/bottle/wine_voltaic = 5, /obj/item/reagent_containers/cup/bottle/ethanol = 2, /obj/item/reagent_containers/cup/glass/bottle/fernet = 2, /obj/item/reagent_containers/cup/glass/bottle/champagne = 2, /obj/item/reagent_containers/cup/glass/bottle/absinthe/premium = 2, /obj/item/reagent_containers/cup/glass/bottle/goldschlager = 2, /obj/item/reagent_containers/cup/glass/bottle/patron = 1, /obj/item/reagent_containers/cup/glass/bottle/kong = 1, /obj/item/reagent_containers/cup/glass/bottle/lizardwine = 1, /obj/item/reagent_containers/cup/glass/bottle/vodka/badminka = 1, /obj/item/reagent_containers/cup/glass/bottle/trappist = 1); + spawn_random_offset = 2; + spawn_loot_count = 2 + }, +/turf/open/floor/wood/large, +/area/awaymission/museum) +"EO" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/decal/cleanable/blood/old, +/obj/structure/chair{ + dir = 1 + }, +/turf/open/floor/iron, +/area/awaymission/museum) +"EQ" = ( +/obj/item/circuitboard{ + icon_state = "secmodschematic" + }, +/obj/item/screwdriver, +/obj/structure/table/reinforced, +/obj/structure/railing{ + dir = 4 + }, +/turf/open/floor/circuit/green, +/area/awaymission/museum) +"ET" = ( +/obj/structure/chair/stool/directional/north, +/obj/effect/turf_decal/tile/green/opposingcorners, +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/turf_decal/siding/green{ + dir = 1 + }, +/mob/living/basic/statue/mannequin{ + dir = 1 + }, +/turf/open/floor/iron, +/area/awaymission/museum) +"EU" = ( +/obj/effect/turf_decal/tile/neutral/opposingcorners, +/obj/effect/turf_decal/siding/dark_blue, +/obj/machinery/door/poddoor/shutters/preopen{ + dir = 4 + }, +/obj/structure/fluff/wallsign/directional/north{ + dir = 4; + name = "Oddities" + }, +/turf/open/floor/iron/dark, +/area/awaymission/museum) +"EX" = ( +/obj/structure/railing{ + dir = 8 + }, +/turf/open/floor/engine, +/area/awaymission/museum) +"EY" = ( +/obj/effect/turf_decal/tile/neutral/opposingcorners, +/obj/effect/turf_decal/siding/dark_blue/corner, +/obj/item/kirbyplants/random, +/turf/open/floor/iron/dark, +/area/awaymission/museum) +"Fa" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/decal/cleanable/blood/gibs/core, +/turf/open/floor/iron, +/area/awaymission/museum) +"Fc" = ( +/obj/item/food/sandwich/cheese, +/turf/open/floor/carpet/cyan, +/area/awaymission/museum/mothroachvoid) +"Fg" = ( +/obj/structure/hedge, +/obj/effect/turf_decal/siding/wood/corner{ + dir = 8 + }, +/turf/open/floor/grass, +/area/awaymission/museum) +"Fh" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 4 + }, +/obj/structure/closet/crate/bin, +/obj/structure/sign/departments/restroom/directional/west, +/turf/open/floor/wood/large, +/area/awaymission/museum) +"Fi" = ( +/obj/effect/turf_decal/siding/dark_blue, +/turf/open/floor/mineral/titanium/blue, +/area/awaymission/museum) +"Fj" = ( +/obj/effect/turf_decal/stripes/line, +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/decal/cleanable/blood/footprints{ + dir = 2 + }, +/turf/open/indestructible/plating, +/area/awaymission/museum) +"Fq" = ( +/obj/machinery/light/warm/directional/north, +/obj/effect/turf_decal/tile/neutral/opposingcorners, +/obj/effect/turf_decal/siding/dark_blue, +/turf/open/floor/iron/dark, +/area/awaymission/museum) +"Fr" = ( +/obj/structure/lattice/catwalk/mining, +/obj/structure/railing/corner/end{ + dir = 4 + }, +/turf/open/chasm/true/no_smooth, +/area/awaymission/museum) +"Fv" = ( +/obj/effect/smooths_with_walls, +/turf/open/mirage{ + target_turf_y = -19 + }, +/area/awaymission/museum) +"Fw" = ( +/obj/effect/decal/cleanable/blood/tracks{ + should_dry = 0; + name = "replica blood" + }, +/obj/effect/mapping_helpers/burnt_floor, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/iron, +/area/awaymission/museum) +"FA" = ( +/obj/structure/table/reinforced, +/obj/item/circuitboard{ + icon_state = "printer"; + name = "fancy replica tech" + }, +/turf/open/floor/iron/smooth_large, +/area/awaymission/museum) +"FD" = ( +/obj/structure/girder, +/obj/structure/grille, +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/turf_decal/stripes/line, +/turf/open/indestructible/plating, +/area/awaymission/museum) +"FE" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 4 + }, +/turf/open/floor/carpet/executive, +/area/awaymission/museum) +"FG" = ( +/obj/structure/window/spawner/directional/south, +/turf/open/floor/light/colour_cycle/dancefloor_b, +/area/awaymission/museum) +"FH" = ( +/obj/structure/plaque/static_plaque/golden/commission/box, +/turf/closed/indestructible/reinforced, +/area/awaymission/museum) +"FJ" = ( +/obj/effect/mapping_helpers/broken_floor, +/obj/effect/turf_decal/stripes/red/line, +/turf/open/floor/iron, +/area/awaymission/museum) +"FK" = ( +/turf/closed/indestructible/reinforced, +/area/awaymission/museum) +"FM" = ( +/obj/structure/sign/departments/restroom/directional/south, +/turf/open/floor/wood/large, +/area/awaymission/museum) +"Gh" = ( +/obj/effect/turf_decal/tile/neutral/opposingcorners, +/obj/effect/turf_decal/siding/dark_blue{ + dir = 10 + }, +/obj/machinery/light/floor, +/turf/open/floor/iron/dark, +/area/awaymission/museum) +"Gi" = ( +/obj/effect/turf_decal/sand/plating, +/obj/structure/closet/crate/miningcar, +/turf/open/floor/tram/plate, +/area/awaymission/museum) +"Gv" = ( +/obj/effect/decal/cleanable/crayon{ + icon_state = "l"; + pixel_x = -10 + }, +/obj/effect/decal/cleanable/crayon{ + icon_state = "i" + }, +/obj/effect/decal/cleanable/crayon{ + icon_state = "e"; + pixel_x = 12 + }, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/engine, +/area/awaymission/museum) +"Gx" = ( +/obj/machinery/vending/coffee, +/obj/effect/turf_decal/bot, +/turf/open/floor/iron, +/area/awaymission/museum) +"GE" = ( +/obj/structure/plaque/static_plaque/golden/commission/meta, +/turf/open/floor/mineral/gold, +/area/awaymission/museum) +"GG" = ( +/obj/structure/chair/office{ + dir = 4 + }, +/obj/effect/turf_decal/siding/wood{ + dir = 1 + }, +/mob/living/basic/statue/mannequin{ + dir = 4 + }, +/turf/open/floor/wood/tile, +/area/awaymission/museum) +"GO" = ( +/obj/structure/table/wood, +/obj/effect/turf_decal/siding/wood{ + dir = 4 + }, +/obj/item/plate/large, +/obj/item/food/kurry_ok_subsando, +/turf/open/floor/wood/large, +/area/awaymission/museum) +"GQ" = ( +/obj/effect/spawner/structure/window/hollow/reinforced/middle{ + dir = 4 + }, +/turf/open/indestructible/plating, +/area/awaymission/museum) +"GS" = ( +/obj/effect/spawner/structure/window/hollow/reinforced/end{ + dir = 1 + }, +/turf/open/indestructible/plating, +/area/awaymission/museum) +"GT" = ( +/obj/structure/table/wood, +/obj/structure/window/spawner/directional/north, +/obj/structure/window/spawner/directional/west, +/obj/item/book/manual/wiki/security_space_law, +/turf/open/floor/wood/large, +/area/awaymission/museum) +"GU" = ( +/mob/living/basic/mothroach, +/turf/open/water/beach, +/area/awaymission/museum/mothroachvoid) +"GV" = ( +/obj/structure/plaque/static_plaque/golden/commission/disc, +/turf/closed/indestructible/reinforced, +/area/awaymission/museum) +"GY" = ( +/obj/effect/turf_decal/tile/neutral/opposingcorners, +/obj/effect/turf_decal/siding/dark_blue, +/obj/structure/fluff/fake_camera{ + dir = 9 + }, +/turf/open/floor/iron/dark, +/area/awaymission/museum) +"Hf" = ( +/obj/structure/table/wood, +/obj/item/language_manual/roundstart_species, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/iron/dark/textured_large, +/area/awaymission/museum) +"Hi" = ( +/obj/structure/fluff/fake_scrubber, +/turf/open/floor/mineral/titanium/white, +/area/awaymission/museum) +"Hj" = ( +/obj/effect/turf_decal/tile/neutral/opposingcorners, +/obj/effect/turf_decal/siding/dark_blue{ + dir = 4 + }, +/obj/structure/chair/sofa/bench/left{ + dir = 8 + }, +/turf/open/floor/iron/dark, +/area/awaymission/museum) +"Hk" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/structure/broken_flooring/corner/always_floorplane, +/turf/open/indestructible/plating, +/area/awaymission/museum) +"Hn" = ( +/mob/living/basic/statue/mannequin{ + hat = /obj/item/clothing/head/costume/kitty; + dir = 8 + }, +/obj/effect/turf_decal/trimline/yellow, +/obj/effect/turf_decal/trimline/yellow/corner{ + dir = 4 + }, +/obj/machinery/conveyor{ + dir = 1 + }, +/turf/open/floor/engine, +/area/awaymission/museum) +"Ho" = ( +/obj/structure/fluff/divine/powerpylon, +/turf/open/floor/cult, +/area/awaymission/museum) +"Hs" = ( +/obj/effect/turf_decal/tile/neutral/opposingcorners, +/obj/effect/turf_decal/siding/dark_blue, +/obj/machinery/door/poddoor/shutters/indestructible{ + dir = 4; + id = "nothing" + }, +/turf/open/floor/iron/dark, +/area/awaymission/museum) +"Hw" = ( +/obj/machinery/computer/terminal/museum{ + content = list("Early 1970s, 1978 - With the introduction of the microprocessor in the early 1970s, the world of computers became accessible to the masses via the introduction of the personal computer. Seizing on the opportunity to expand their horizons, Trasen-Knox would introduce their first personal computer, the TKC Personal Computer, in 1978, becoming a household name as well as the favourite computer producer of scientific groups in North America.") + }, +/obj/effect/turf_decal/tile/neutral/opposingcorners, +/obj/effect/turf_decal/siding/dark_blue, +/turf/open/floor/iron/dark, +/area/awaymission/museum) +"HA" = ( +/obj/machinery/status_display/random_message{ + firstline_to_secondline = list("NO" = "LITTERING","YOU ARE" = "BEING WATCHED", "DO NOT TOUCH" = "THE EXHIBITS") + }, +/turf/closed/indestructible/reinforced, +/area/awaymission/museum) +"HD" = ( +/obj/effect/turf_decal/tile/neutral/opposingcorners, +/obj/effect/turf_decal/siding/dark_blue, +/obj/machinery/door/poddoor/shutters/indestructible{ + dir = 8; + id = "nothing" + }, +/turf/open/floor/iron/dark, +/area/awaymission/museum) +"HE" = ( +/obj/effect/turf_decal/siding/dark_blue{ + dir = 1 + }, +/obj/structure/showcase/perfect_employee, +/turf/open/floor/mineral/titanium/blue, +/area/awaymission/museum) +"HJ" = ( +/obj/structure/hedge/opaque, +/obj/effect/turf_decal/tile/neutral/opposingcorners, +/obj/structure/fluff/fake_camera{ + dir = 5 + }, +/turf/open/floor/iron/dark, +/area/awaymission/museum) +"HL" = ( +/obj/structure/table/reinforced, +/obj/item/toy/beach_ball/branded{ + pixel_y = 10 + }, +/obj/structure/window/reinforced/spawner/directional/south, +/obj/structure/window/reinforced/spawner/directional/east, +/obj/machinery/light/directional/north, +/turf/open/floor/mineral/titanium/blue, +/area/awaymission/museum) +"HP" = ( +/turf/open/floor/iron/freezer, +/area/awaymission/museum) +"HU" = ( +/obj/structure/railing{ + dir = 4 + }, +/obj/machinery/computer/old{ + dir = 8 + }, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/indestructible/plating, +/area/awaymission/museum) +"HY" = ( +/obj/machinery/light/floor, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/iron, +/area/awaymission/museum) +"Ic" = ( +/obj/machinery/light/warm/dim/directional/north, +/turf/open/floor/carpet, +/area/awaymission/museum) +"Ij" = ( +/obj/machinery/door/airlock/external, +/obj/effect/mapping_helpers/airlock/locked, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/indestructible/plating, +/area/awaymission/museum) +"Im" = ( +/obj/structure/lattice/catwalk/mining, +/obj/structure/railing{ + dir = 4 + }, +/obj/structure/holosign/barrier/engineering, +/turf/open/chasm/true/no_smooth, +/area/awaymission/museum) +"Iu" = ( +/turf/open/floor/mineral/titanium/blue, +/area/awaymission/museum) +"Iz" = ( +/obj/structure/disposalpipe/broken, +/turf/open/indestructible/plating, +/area/awaymission/museum) +"IB" = ( +/obj/structure/transport/linear/tram/slow, +/obj/structure/thermoplastic/light, +/obj/effect/spawner/random/structure/closet_empty/crate/with_loot, +/obj/item/clothing/gloves/color/yellow, +/turf/open/chasm/true/no_smooth, +/area/awaymission/museum) +"IC" = ( +/obj/structure/hedge, +/obj/effect/turf_decal/siding/wood{ + dir = 5 + }, +/turf/open/floor/grass, +/area/awaymission/museum) +"IF" = ( +/obj/structure/table/wood, +/obj/effect/spawner/random/food_or_drink/refreshing_beverage, +/obj/item/food/grilled_beef_gyro, +/turf/open/floor/wood/tile, +/area/awaymission/museum) +"IH" = ( +/obj/machinery/portable_atmospherics/canister/water_vapor, +/obj/effect/decal/cleanable/dirt/dust, +/obj/structure/broken_flooring/singular/always_floorplane{ + dir = 4 + }, +/turf/open/indestructible/plating, +/area/awaymission/museum) +"IP" = ( +/turf/open/floor/holofloor/beach/coast, +/area/awaymission/museum) +"IV" = ( +/obj/structure/railing, +/obj/effect/turf_decal/stripes, +/turf/open/floor/iron/smooth_large, +/area/awaymission/museum) +"IZ" = ( +/obj/structure/chair/comfy/beige{ + dir = 4 + }, +/mob/living/basic/mothroach, +/obj/effect/mapping_helpers/mob_buckler, +/turf/open/floor/wood/large, +/area/awaymission/museum) +"Jb" = ( +/turf/open/floor/iron/dark/side, +/area/awaymission/museum) +"Jc" = ( +/obj/structure/window/spawner/directional/north, +/turf/open/floor/light/colour_cycle/dancefloor_b, +/area/awaymission/museum) +"Jd" = ( +/obj/machinery/vending/cigarette/beach, +/obj/machinery/light/warm/directional/north, +/turf/open/floor/wood/large, +/area/awaymission/museum) +"Je" = ( +/obj/structure/railing{ + dir = 10 + }, +/obj/effect/turf_decal/siding/wood{ + dir = 10 + }, +/turf/open/floor/carpet, +/area/awaymission/museum) +"Jg" = ( +/obj/structure/statue/sandstone/assistant, +/obj/effect/turf_decal/tile/green{ + dir = 1 + }, +/turf/open/floor/iron, +/area/awaymission/museum) +"Jj" = ( +/mob/living/basic/mothroach, +/turf/open/floor/mineral/gold, +/area/awaymission/museum/mothroachvoid) +"Jk" = ( +/obj/item/toy/plush/moth, +/obj/machinery/light/small/dim/directional/west, +/turf/open/floor/carpet/executive, +/area/awaymission/museum) +"Jn" = ( +/obj/structure/table/reinforced, +/obj/effect/spawner/random/entertainment/toy, +/obj/structure/window/reinforced/spawner/directional/south, +/obj/structure/window/reinforced/spawner/directional/east, +/obj/effect/turf_decal/siding/dark_blue, +/turf/open/floor/mineral/titanium/blue, +/area/awaymission/museum) +"Js" = ( +/obj/effect/turf_decal/tile/neutral/opposingcorners, +/obj/effect/turf_decal/siding/dark_blue{ + dir = 8 + }, +/obj/machinery/computer/terminal/museum{ + dir = 8; + content = list("This exhibit is of a preserved cortical borer. Cortical borers went extinct in the Spinward sector due to almost every of them starving as they could not find enough food in the brains of the crewmembers, as they are usually pretty small or damaged by plasma exposure.") + }, +/turf/open/floor/iron/dark, +/area/awaymission/museum) +"Jv" = ( +/obj/machinery/light/warm/dim/directional/south, +/obj/structure/fluff/divine/shrine, +/turf/open/floor/cult, +/area/awaymission/museum) +"Jx" = ( +/obj/effect/turf_decal/tile/neutral/opposingcorners, +/obj/effect/turf_decal/siding/dark_blue, +/obj/machinery/door/poddoor/shutters/preopen{ + dir = 8 + }, +/turf/open/floor/iron/dark, +/area/awaymission/museum) +"Jz" = ( +/obj/machinery/light/floor, +/turf/open/floor/mineral/silver, +/area/awaymission/museum) +"JF" = ( +/obj/machinery/gateway/away, +/obj/effect/turf_decal/bot, +/turf/open/floor/iron/dark/diagonal, +/area/awaymission/museum) +"JK" = ( +/obj/effect/step_trigger/teleporter/offset{ + teleport_y_offset = 18 + }, +/turf/open/mirage{ + dir = 1; + target_turf_x = -9 + }, +/area/awaymission/museum) +"JU" = ( +/obj/machinery/computer/terminal/museum{ + dir = 4; + content = list("1963 - Founded in the city of Fresno by Michael Trasen and Dale Knox, Trasen-Knox Computing (as it was known at the time) would get its start producing scientific computers for academia. Trasen-Knox computers quickly gained a reputation for quality and reliability, and the company would gain a decent market share with American and Canadian universities over the coming decade. Trasen-Knox would also work closely with NASA in producing equipment for the space race- giving them an early start in Humanity’s push to the stars. ") + }, +/obj/effect/turf_decal/tile/neutral/opposingcorners, +/obj/effect/turf_decal/siding/dark_blue{ + dir = 4 + }, +/turf/open/floor/iron/dark, +/area/awaymission/museum) +"JV" = ( +/turf/open/floor/bronze, +/area/awaymission/museum) +"JW" = ( +/obj/structure/broken_flooring/singular/always_floorplane{ + dir = 8 + }, +/turf/open/floor/black, +/area/awaymission/museum) +"JY" = ( +/turf/open/floor/iron/stairs{ + dir = 8 + }, +/area/awaymission/museum/mothroachvoid) +"Kb" = ( +/obj/effect/turf_decal/loading_area{ + dir = 4 + }, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/iron/dark/textured_large, +/area/awaymission/museum) +"Kd" = ( +/obj/structure/chair/stool/bar/directional/east{ + can_buckle = 1 + }, +/turf/open/floor/wood/large, +/area/awaymission/museum) +"Kh" = ( +/turf/closed/indestructible/fakeglass, +/area/awaymission/museum) +"Ko" = ( +/obj/structure/lattice/catwalk/mining, +/obj/structure/marker_beacon/burgundy, +/turf/open/chasm/true/no_smooth, +/area/awaymission/museum) +"Ks" = ( +/obj/effect/turf_decal/siding/wood, +/obj/item/keycard/blue{ + puzzle_id = "museum_secret" + }, +/turf/open/floor/carpet/executive, +/area/awaymission/museum) +"Kt" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/spawner/random/structure/closet_empty/crate/with_loot, +/turf/open/floor/iron, +/area/awaymission/museum) +"Kv" = ( +/obj/effect/turf_decal/stripes{ + dir = 8 + }, +/obj/structure/railing{ + dir = 1 + }, +/turf/open/floor/catwalk_floor, +/area/awaymission/museum) +"Kx" = ( +/obj/effect/decal/cleanable/dirt/dust, +/mob/living/basic/skeleton, +/obj/effect/spawner/random/maintenance/three, +/turf/open/indestructible/plating, +/area/awaymission/museum) +"KI" = ( +/turf/open/floor/iron/dark/side{ + dir = 10 + }, +/area/awaymission/museum) +"KN" = ( +/obj/effect/landmark/awaystart, +/obj/effect/turf_decal/siding/wood{ + dir = 1 + }, +/turf/open/floor/grass, +/area/awaymission/museum) +"Le" = ( +/obj/structure/fluff/fake_vent, +/turf/open/floor/mineral/titanium/white, +/area/awaymission/museum) +"Lg" = ( +/obj/machinery/griddle, +/turf/open/floor/iron/freezer, +/area/awaymission/museum) +"Lk" = ( +/obj/machinery/light/directional/north, +/obj/structure/showcase/mecha/marauder, +/turf/open/floor/mineral/titanium/blue, +/area/awaymission/museum) +"Lm" = ( +/turf/open/floor/black, +/area/awaymission/museum) +"Lp" = ( +/obj/machinery/status_display/random_message{ + firstline_to_secondline = list("NO" = "LITTERING","YOU ARE" = "BEING WATCHED", "DO NOT TOUCH" = "THE EXHIBITS") + }, +/turf/closed/indestructible/reinforced/titanium/nodiagonal, +/area/awaymission/museum) +"Lq" = ( +/obj/structure/hedge, +/obj/effect/turf_decal/siding/wood{ + dir = 10 + }, +/turf/open/floor/grass, +/area/awaymission/museum) +"Ls" = ( +/obj/structure/table/reinforced, +/obj/item/instrument/piano_synth/headphones, +/turf/open/floor/iron/dark/textured_large, +/area/awaymission/museum) +"Lt" = ( +/obj/structure/plaque/static_plaque/golden/commission/asteroid, +/turf/closed/indestructible/reinforced, +/area/awaymission/museum) +"Lv" = ( +/obj/structure/window/reinforced/spawner/directional/south, +/turf/open/floor/circuit/green, +/area/awaymission/museum) +"Lw" = ( +/turf/open/floor/mineral/silver, +/area/awaymission/museum) +"Ly" = ( +/obj/structure/railing{ + dir = 4 + }, +/obj/effect/turf_decal/tile/green, +/turf/open/floor/iron, +/area/awaymission/museum) +"LB" = ( +/turf/open/floor/iron/stairs/right{ + dir = 8 + }, +/area/awaymission/museum) +"LC" = ( +/obj/machinery/computer/terminal/museum{ + dir = 4; + content = list("Mothroach") + }, +/obj/effect/turf_decal/tile/neutral/opposingcorners, +/obj/effect/turf_decal/siding/dark_blue/corner{ + dir = 4 + }, +/turf/open/floor/iron/dark, +/area/awaymission/museum) +"LN" = ( +/obj/effect/decal/cleanable/glass/titanium, +/turf/open/floor/iron/dark/textured_large, +/area/awaymission/museum) +"LQ" = ( +/obj/effect/step_trigger/teleporter/offset{ + teleport_y_offset = -12 + }, +/obj/effect/oneway{ + dir = 8 + }, +/turf/open/mirage{ + dir = 4; + range = 1; + target_turf_x = -11 + }, +/area/awaymission/museum) +"LS" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/turf_decal/tile/neutral/opposingcorners, +/obj/effect/turf_decal/siding/dark_blue{ + dir = 4 + }, +/turf/open/floor/iron/dark, +/area/awaymission/museum) +"LY" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 8 + }, +/obj/structure/flora/bush/sparsegrass/style_random, +/turf/open/floor/grass, +/area/awaymission/museum) +"Ma" = ( +/turf/open/chasm/true/no_smooth, +/area/awaymission/museum) +"Mg" = ( +/obj/structure/plaque/static_plaque/golden/commission/tram, +/turf/closed/indestructible/reinforced, +/area/awaymission/museum) +"Mn" = ( +/obj/machinery/light/warm/directional/south, +/turf/open/floor/wood/large, +/area/awaymission/museum) +"Ms" = ( +/obj/effect/turf_decal/stripes/line, +/obj/effect/decal/cleanable/dirt/dust, +/obj/structure/broken_flooring/side/always_floorplane{ + dir = 8 + }, +/turf/open/indestructible/plating, +/area/awaymission/museum) +"Mv" = ( +/mob/living/basic/statue/mannequin{ + dir = 4; + held_item = /obj/item/wrench; + name = "Michael Trasen" + }, +/obj/effect/turf_decal/stripes{ + dir = 4 + }, +/turf/open/floor/iron/smooth_large, +/area/awaymission/museum) +"Mx" = ( +/obj/structure/table, +/obj/item/phone, +/turf/open/floor/mineral/titanium/blue, +/area/awaymission/museum) +"MB" = ( +/obj/structure/railing, +/turf/open/floor/holofloor/asteroid{ + icon_state = "asteroid5" + }, +/area/awaymission/museum) +"MC" = ( +/obj/effect/turf_decal/tile/blue/opposingcorners, +/obj/machinery/light/floor, +/turf/open/floor/holofloor/white, +/area/awaymission/museum) +"ME" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/decal/cleanable/blood/tracks, +/turf/open/floor/iron, +/area/awaymission/museum) +"MF" = ( +/turf/closed/indestructible/wood, +/area/awaymission/museum) +"MI" = ( +/obj/structure/table, +/obj/effect/decal/cleanable/dirt/dust, +/obj/item/mecha_parts/mecha_equipment/generator, +/turf/open/floor/iron, +/area/awaymission/museum) +"MV" = ( +/turf/open/floor/engine, +/area/awaymission/museum) +"MZ" = ( +/obj/structure/fluff/divine/defensepylon, +/turf/open/floor/cult, +/area/awaymission/museum) +"Na" = ( +/obj/structure/girder, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/indestructible/plating, +/area/awaymission/museum) +"Nc" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/structure/fluff/fake_camera{ + dir = 5 + }, +/turf/open/floor/iron/white, +/area/awaymission/museum) +"Nd" = ( +/obj/structure/rack, +/obj/effect/turf_decal/tile/green/opposingcorners, +/obj/effect/spawner/random/entertainment/toy, +/obj/effect/spawner/random/entertainment/toy, +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/turf_decal/siding/green{ + dir = 9 + }, +/turf/open/floor/iron, +/area/awaymission/museum) +"Ng" = ( +/obj/item/stack/sheet/bronze/thirty, +/obj/structure/table/bronze, +/turf/open/floor/bronze, +/area/awaymission/museum) +"Ni" = ( +/obj/machinery/computer/terminal/museum{ + dir = 4; + content = list("Primarily an advanced research and development conglomerate, but also has skin in many other fields. While a great deal of their income still comes from producing public research funded by government research grants, their operations also include directly producing and selling their most profitable designs, leasing their asset protection forces to governments and private organizations (both space fleets and ground troops), logistics management with a specialization in remote settlement self-sufficiency, and maintaining interstellar communication infrastructures to name a few. The common theme that runs through most of their business ventures is taking the lessons they've learned from operating on such a massive scale and helping smaller organizations stretch themselves.") + }, +/turf/open/floor/mineral/titanium/blue, +/area/awaymission/museum) +"Nm" = ( +/obj/structure/plaque/static_plaque/golden/commission/birdboat, +/turf/closed/indestructible/reinforced, +/area/awaymission/museum) +"Ns" = ( +/obj/structure/table/wood, +/obj/effect/spawner/random/food_or_drink/booze{ + loot = list(/obj/item/reagent_containers/cup/glass/bottle/beer = 10, /obj/item/reagent_containers/cup/glass/bottle/ale = 10, /obj/item/reagent_containers/cup/glass/bottle/beer/light = 5, /obj/item/reagent_containers/cup/glass/bottle/maltliquor = 5, /obj/item/reagent_containers/cup/glass/bottle/whiskey = 5, /obj/item/reagent_containers/cup/glass/bottle/gin = 5, /obj/item/reagent_containers/cup/glass/bottle/vodka = 5, /obj/item/reagent_containers/cup/glass/bottle/tequila = 5, /obj/item/reagent_containers/cup/glass/bottle/rum = 5, /obj/item/reagent_containers/cup/glass/bottle/vermouth = 5, /obj/item/reagent_containers/cup/glass/bottle/cognac = 5, /obj/item/reagent_containers/cup/glass/bottle/wine = 5, /obj/item/reagent_containers/cup/glass/bottle/kahlua = 5, /obj/item/reagent_containers/cup/glass/bottle/amaretto = 5, /obj/item/reagent_containers/cup/glass/bottle/hcider = 5, /obj/item/reagent_containers/cup/glass/bottle/absinthe = 5, /obj/item/reagent_containers/cup/glass/bottle/sake = 5, /obj/item/reagent_containers/cup/glass/bottle/grappa = 5, /obj/item/reagent_containers/cup/glass/bottle/applejack = 5, /obj/item/reagent_containers/cup/glass/bottle/wine_voltaic = 5, /obj/item/reagent_containers/cup/bottle/ethanol = 2, /obj/item/reagent_containers/cup/glass/bottle/fernet = 2, /obj/item/reagent_containers/cup/glass/bottle/champagne = 2, /obj/item/reagent_containers/cup/glass/bottle/absinthe/premium = 2, /obj/item/reagent_containers/cup/glass/bottle/goldschlager = 2, /obj/item/reagent_containers/cup/glass/bottle/patron = 1, /obj/item/reagent_containers/cup/glass/bottle/kong = 1, /obj/item/reagent_containers/cup/glass/bottle/lizardwine = 1, /obj/item/reagent_containers/cup/glass/bottle/vodka/badminka = 1, /obj/item/reagent_containers/cup/glass/bottle/trappist = 1); + spawn_random_offset = 2 + }, +/turf/open/floor/wood/large, +/area/awaymission/museum) +"Ny" = ( +/obj/effect/turf_decal/siding/dark_blue{ + dir = 1 + }, +/obj/structure/closet/crate/bin, +/turf/open/floor/mineral/titanium/blue, +/area/awaymission/museum) +"NB" = ( +/obj/effect/turf_decal/siding/wideplating/corner, +/turf/open/misc/beach/sand, +/area/awaymission/museum/mothroachvoid) +"ND" = ( +/obj/structure/lattice/catwalk/mining, +/obj/structure/railing, +/obj/structure/table, +/obj/item/clothing/mask/cigarette/cigar{ + lit = 1; + icon_state = "cigaron" + }, +/turf/open/chasm/true/no_smooth, +/area/awaymission/museum) +"NK" = ( +/obj/machinery/door/airlock/maintenance_hatch, +/obj/effect/decal/cleanable/blood/tracks{ + dir = 4 + }, +/obj/effect/mapping_helpers/airlock/access/all/away/generic3, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/indestructible/plating, +/area/awaymission/museum) +"NO" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 10 + }, +/turf/open/floor/engine, +/area/awaymission/museum) +"NT" = ( +/obj/machinery/light/floor, +/obj/effect/turf_decal/sand/plating, +/obj/effect/turf_decal/stripes/asteroid/line{ + dir = 1 + }, +/turf/open/indestructible/plating, +/area/awaymission/museum) +"NV" = ( +/obj/structure/bed/pod{ + dir = 1 + }, +/turf/open/floor/wood/tile, +/area/awaymission/museum) +"NY" = ( +/obj/effect/turf_decal/tile/green/opposingcorners, +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/turf_decal/siding/green{ + dir = 4 + }, +/obj/effect/decal/cleanable/blood/footprints{ + dir = 8 + }, +/turf/open/floor/iron, +/area/awaymission/museum) +"Oi" = ( +/obj/structure/table, +/obj/effect/turf_decal/tile/neutral/opposingcorners, +/obj/effect/spawner/random/trash/cigbutt, +/obj/structure/fluff/fake_camera{ + dir = 4 + }, +/turf/open/floor/iron/dark, +/area/awaymission/museum) +"Ok" = ( +/obj/effect/turf_decal/tile/neutral/opposingcorners, +/obj/effect/turf_decal/siding/dark_blue{ + dir = 9 + }, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/iron/dark, +/area/awaymission/museum) +"Ol" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/structure/broken_flooring/singular/always_floorplane{ + dir = 4 + }, +/turf/open/indestructible/plating, +/area/awaymission/museum) +"Oo" = ( +/obj/structure/closet/secure_closet/bar/lavaland_bartender_booze{ + anchored = 1 + }, +/turf/open/floor/wood/tile, +/area/awaymission/museum) +"Op" = ( +/obj/effect/turf_decal/tile/neutral/opposingcorners, +/obj/machinery/computer/terminal/museum{ + dir = 4; + content = list("The DNA Manipulator, oh how great you were. Phased out several years ago because a study discovered that plants modified by the DNA Manipulator usually gave you cancer. Naturally, this was the botanists fault.") + }, +/turf/open/floor/iron/dark, +/area/awaymission/museum) +"Ov" = ( +/turf/open/chasm, +/area/awaymission/museum) +"OD" = ( +/obj/machinery/computer/terminal/museum{ + dir = 8; + content = list("2560 - The Nanotrasen Cloning Incident; Did you know that Nanotrasen used to provide cloning for profitable employees? No? Good! Because in 2560, there was a terrorist backed sabotage on one of our cloning material supply facilities, resulting in a Feline serum being dumped into the carefully curated output. This resulted in horrible cat mutations for anyone who got cloned, weeks later. Facing outlash, Nanotrasen had to shut down all cloning clinics.") + }, +/obj/effect/turf_decal/tile/neutral/opposingcorners, +/obj/effect/turf_decal/siding/dark_blue{ + dir = 8 + }, +/turf/open/floor/iron/dark, +/area/awaymission/museum) +"OI" = ( +/obj/machinery/light/floor, +/turf/open/floor/bronze/filled, +/area/awaymission/museum) +"OP" = ( +/obj/effect/mapping_helpers/burnt_floor, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/iron, +/area/awaymission/museum) +"OS" = ( +/obj/structure/chair/stool/bar/directional/east{ + can_buckle = 1 + }, +/obj/effect/mapping_helpers/mob_buckler, +/mob/living/basic/mothroach, +/turf/open/floor/wood/large, +/area/awaymission/museum) +"OT" = ( +/obj/structure/marker_beacon/burgundy, +/obj/structure/lattice/catwalk/mining, +/turf/open/chasm/true/no_smooth, +/area/awaymission/museum) +"OZ" = ( +/obj/item/toy/figure/syndie, +/obj/item/toy/figure/syndie{ + pixel_x = -9 + }, +/obj/item/toy/figure/syndie{ + pixel_x = 9 + }, +/obj/structure/window/reinforced/spawner/directional/west, +/turf/open/floor/holofloor/beach/coast{ + dir = 1 + }, +/area/awaymission/museum) +"Pb" = ( +/mob/living/basic/mothroach, +/turf/open/floor/light/colour_cycle/dancefloor_a, +/area/awaymission/museum) +"Pc" = ( +/obj/effect/turf_decal/siding/wood/corner{ + dir = 4 + }, +/turf/open/floor/grass, +/area/awaymission/museum) +"Pd" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/decal/cleanable/blood/footprints{ + dir = 2 + }, +/obj/structure/broken_flooring/corner/always_floorplane{ + dir = 8 + }, +/turf/open/indestructible/plating, +/area/awaymission/museum) +"Pf" = ( +/obj/structure/table/wood, +/obj/item/food/kebab/pineapple_skewer, +/turf/open/floor/iron/freezer, +/area/awaymission/museum) +"Pi" = ( +/obj/effect/turf_decal/tile/neutral/opposingcorners, +/obj/effect/turf_decal/siding/dark_blue/corner{ + dir = 4 + }, +/obj/structure/chair/sofa/bench/left{ + dir = 1 + }, +/turf/open/floor/iron/dark, +/area/awaymission/museum) +"Pl" = ( +/obj/structure/filingcabinet/chestdrawer, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/iron/dark/textured_large, +/area/awaymission/museum) +"Pp" = ( +/obj/effect/turf_decal/tile/neutral/opposingcorners, +/obj/effect/turf_decal/siding/dark_blue, +/obj/machinery/light/small/dim/directional/north, +/obj/structure/chair/stool/directional/east, +/turf/open/floor/iron/dark, +/area/awaymission/museum) +"Pq" = ( +/obj/structure/table/wood, +/obj/effect/turf_decal/siding/wood{ + dir = 4 + }, +/obj/item/plate, +/obj/item/food/kebab/pineapple_skewer, +/turf/open/floor/wood/large, +/area/awaymission/museum) +"Ps" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 1 + }, +/turf/open/floor/wood/large, +/area/awaymission/museum) +"PB" = ( +/turf/closed/indestructible/fakedoor/engineering, +/area/awaymission/museum) +"PC" = ( +/obj/structure/lattice/catwalk/mining, +/obj/structure/railing, +/turf/open/chasm/true/no_smooth, +/area/awaymission/museum) +"PF" = ( +/obj/effect/turf_decal/sand/plating, +/obj/effect/turf_decal/mining, +/obj/item/flashlight/lantern{ + icon_state = "lantern-on"; + start_on = 1 + }, +/turf/open/indestructible/plating, +/area/awaymission/museum) +"PK" = ( +/obj/machinery/door/poddoor{ + id = "gatewayfake" + }, +/obj/machinery/conveyor{ + dir = 1 + }, +/turf/open/indestructible/plating, +/area/awaymission/museum) +"PN" = ( +/obj/structure/girder/bronze, +/turf/open/floor/bronze/flat, +/area/awaymission/museum) +"PP" = ( +/obj/effect/decal/cleanable/fuel_pool/hivis, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/indestructible/plating, +/area/awaymission/museum) +"PR" = ( +/obj/structure/fluff/minepost, +/obj/effect/turf_decal/siding{ + dir = 9 + }, +/obj/structure/railing{ + dir = 8 + }, +/turf/open/floor/holofloor/asteroid, +/area/awaymission/museum) +"PU" = ( +/obj/machinery/shower/directional/east, +/obj/effect/decal/cleanable/plastic, +/turf/open/floor/iron/white/textured_large, +/area/awaymission/museum) +"PW" = ( +/obj/effect/step_trigger/teleporter/offset{ + teleport_y_offset = -18 + }, +/turf/open/mirage{ + target_turf_y = -19 + }, +/area/awaymission/museum) +"PX" = ( +/obj/structure/transport/linear/tram/slow, +/obj/structure/thermoplastic/light, +/turf/open/chasm/true/no_smooth, +/area/awaymission/museum) +"PZ" = ( +/obj/effect/mapping_helpers/broken_floor, +/obj/item/flashlight/flare{ + start_on = 1; + icon_state = "flare-on" + }, +/turf/open/indestructible/plating, +/area/awaymission/museum) +"Qa" = ( +/obj/effect/turf_decal/tile/neutral/opposingcorners, +/obj/effect/turf_decal/siding/dark_blue/corner{ + dir = 1 + }, +/obj/item/kirbyplants/random, +/obj/structure/fluff/fake_camera{ + dir = 4 + }, +/turf/open/floor/iron/dark, +/area/awaymission/museum) +"Qb" = ( +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/iron/white, +/area/awaymission/museum) +"Qc" = ( +/obj/item/kirbyplants/random/dead, +/obj/effect/mapping_helpers/broken_floor, +/turf/open/floor/iron/dark/textured_large, +/area/awaymission/museum) +"Qe" = ( +/obj/structure/broken_flooring/singular/always_floorplane{ + dir = 4 + }, +/turf/open/floor/black, +/area/awaymission/museum) +"Qf" = ( +/obj/effect/turf_decal/tile/green/opposingcorners, +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/turf_decal/siding/green, +/obj/structure/table, +/obj/machinery/coffeemaker, +/turf/open/floor/iron, +/area/awaymission/museum) +"Qi" = ( +/obj/effect/spawner/structure/window/reinforced/indestructible, +/turf/open/indestructible/plating, +/area/awaymission/museum) +"Qj" = ( +/obj/structure/hedge, +/obj/effect/turf_decal/siding/wood, +/turf/open/floor/grass, +/area/awaymission/museum) +"Qk" = ( +/obj/structure/lattice/catwalk/mining, +/obj/structure/railing{ + dir = 8 + }, +/obj/structure/railing/corner{ + dir = 4 + }, +/turf/open/chasm/true/no_smooth, +/area/awaymission/museum) +"Qo" = ( +/obj/structure/closet/crate/cardboard/mothic, +/obj/item/food/pizza/mothic_white_pie, +/obj/item/toy/plush/moth, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/indestructible/plating, +/area/awaymission/museum) +"Qs" = ( +/obj/effect/mapping_helpers/burnt_floor, +/obj/machinery/light/floor, +/obj/effect/replica_spawner{ + target_path = /obj/structure/reagent_dispensers/fueltank + }, +/obj/effect/decal/cleanable/blood/gibs, +/turf/open/floor/iron, +/area/awaymission/museum) +"Qt" = ( +/obj/effect/mapping_helpers/burnt_floor, +/obj/structure/window/reinforced/spawner/directional/east, +/turf/open/floor/iron, +/area/awaymission/museum) +"Qv" = ( +/turf/open/floor/iron/dark/side{ + dir = 4 + }, +/area/awaymission/museum) +"Qw" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 4 + }, +/turf/open/floor/grass, +/area/awaymission/museum) +"QB" = ( +/obj/structure/plaque/static_plaque/golden/commission/birdshot, +/turf/closed/indestructible/reinforced, +/area/awaymission/museum) +"QD" = ( +/obj/structure/fluff/broken_canister_frame, +/turf/open/indestructible/plating, +/area/awaymission/museum) +"QF" = ( +/obj/structure/hedge, +/obj/effect/turf_decal/siding/wood/corner{ + dir = 1 + }, +/turf/open/floor/grass, +/area/awaymission/museum) +"QG" = ( +/obj/effect/turf_decal/bot, +/turf/open/floor/iron/dark/diagonal, +/area/awaymission/museum) +"QI" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/machinery/light/small/dim/directional/north, +/turf/open/indestructible/plating, +/area/awaymission/museum) +"QK" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 8 + }, +/obj/structure/flora/bush/sparsegrass/style_random, +/obj/structure/closet/crate/bin, +/turf/open/floor/grass, +/area/awaymission/museum) +"QN" = ( +/obj/structure/table/wood, +/obj/item/food/grilled_beef_gyro, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/iron/dark/textured_large, +/area/awaymission/museum) +"QP" = ( +/obj/effect/playeronly_barrier, +/obj/machinery/door/airlock/public/glass, +/turf/open/floor/iron, +/area/awaymission/museum) +"QU" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/structure/broken_flooring/side/always_floorplane{ + dir = 1 + }, +/turf/open/indestructible/plating, +/area/awaymission/museum) +"QX" = ( +/obj/structure/sign/poster/party_game/directional/south, +/turf/open/floor/iron/dark/side, +/area/awaymission/museum) +"Re" = ( +/obj/effect/mapping_helpers/broken_floor, +/turf/open/indestructible/plating, +/area/awaymission/museum) +"Ri" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/decal/remains/human, +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/turf/open/indestructible/plating, +/area/awaymission/museum) +"Rl" = ( +/obj/structure/railing{ + dir = 10 + }, +/obj/structure/fluff{ + name = "replica prototype autolathe"; + icon = 'icons/obj/machines/lathes.dmi'; + icon_state = "autolathe"; + desc = "A non-functional replica of a prototype Autolathe." + }, +/turf/open/floor/iron/smooth_corner{ + dir = 4 + }, +/area/awaymission/museum) +"Rq" = ( +/obj/structure/fluff/fake_camera{ + dir = 5 + }, +/turf/open/floor/iron, +/area/awaymission/museum) +"Rs" = ( +/mob/living/basic/mothroach, +/turf/open/floor/light/colour_cycle/dancefloor_b, +/area/awaymission/museum) +"Rz" = ( +/obj/effect/spawner/structure/window/hollow/reinforced/end{ + dir = 4 + }, +/turf/open/indestructible/plating, +/area/awaymission/museum) +"RC" = ( +/obj/effect/turf_decal/tile/neutral/opposingcorners, +/obj/effect/turf_decal/siding/dark_blue{ + dir = 10 + }, +/turf/open/floor/iron/dark, +/area/awaymission/museum) +"RD" = ( +/obj/effect/turf_decal/trimline/yellow/arrow_ccw{ + dir = 5 + }, +/turf/open/floor/engine, +/area/awaymission/museum) +"RJ" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/spawner/random/maintenance/three, +/turf/open/indestructible/plating, +/area/awaymission/museum) +"RL" = ( +/obj/effect/spawner/random/vending/colavend, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/iron/white, +/area/awaymission/museum) +"RR" = ( +/obj/machinery/suit_storage_unit/open, +/obj/effect/turf_decal/box, +/turf/open/floor/iron/white/textured_large, +/area/awaymission/museum) +"RU" = ( +/obj/structure/transport/linear/tram/slow, +/obj/structure/thermoplastic, +/obj/structure/closet/crate/engineering, +/turf/open/chasm/true/no_smooth, +/area/awaymission/museum) +"Sa" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 4 + }, +/obj/machinery/door/airlock/freezer, +/turf/open/floor/iron/freezer, +/area/awaymission/museum) +"Sc" = ( +/obj/effect/baseturf_helper{ + baseturf_to_replace = list(/turf/open/space/basic); + baseturf = /turf/open/indestructible/plating + }, +/turf/open/floor/bluespace, +/area/awaymission/museum) +"Se" = ( +/obj/structure/chair/comfy/beige, +/mob/living/basic/mothroach, +/obj/effect/mapping_helpers/mob_buckler, +/turf/open/floor/wood/large, +/area/awaymission/museum) +"Sh" = ( +/obj/effect/turf_decal/siding, +/obj/structure/railing, +/turf/open/floor/holofloor/asteroid, +/area/awaymission/museum) +"So" = ( +/obj/machinery/shower/directional/east, +/turf/open/floor/iron/white/textured_large, +/area/awaymission/museum) +"Sr" = ( +/obj/effect/turf_decal/tile/neutral/opposingcorners, +/turf/open/floor/iron/dark, +/area/awaymission/museum) +"Sv" = ( +/obj/machinery/status_display/random_message{ + firstline_to_secondline = list("SOUVENIR" = "SHOP") + }, +/turf/closed/indestructible/reinforced, +/area/awaymission/museum) +"SA" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/structure/table, +/obj/item/wirecutters, +/turf/open/indestructible/plating, +/area/awaymission/museum) +"SN" = ( +/obj/structure/fluff/divine/conduit, +/obj/structure/railing{ + dir = 1 + }, +/obj/effect/turf_decal/siding/wood{ + dir = 1 + }, +/turf/open/floor/cult, +/area/awaymission/museum) +"SQ" = ( +/mob/living/basic/mothroach, +/turf/open/misc/grass, +/area/awaymission/museum/mothroachvoid) +"ST" = ( +/obj/effect/turf_decal/tile/neutral/opposingcorners, +/obj/effect/turf_decal/siding/dark_blue{ + dir = 1 + }, +/obj/machinery/door/poddoor/shutters/indestructible{ + dir = 8; + id = "nothing" + }, +/turf/open/floor/iron/dark, +/area/awaymission/museum) +"SU" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/item/stack/spacecash/c1000, +/turf/open/indestructible/plating, +/area/awaymission/museum) +"Tr" = ( +/obj/structure/plaque/static_plaque/golden/commission/kilo, +/obj/machinery/light/floor, +/turf/open/floor/mineral/gold, +/area/awaymission/museum) +"Tt" = ( +/obj/structure/holosign/barrier/engineering, +/turf/open/misc/grass, +/area/awaymission/museum/mothroachvoid) +"Tu" = ( +/obj/effect/turf_decal/tile/neutral/opposingcorners, +/obj/effect/turf_decal/siding/dark_blue/corner{ + dir = 8 + }, +/obj/structure/chair/sofa/bench/left{ + dir = 4 + }, +/turf/open/floor/iron/dark, +/area/awaymission/museum) +"Tz" = ( +/obj/structure/hedge, +/obj/effect/turf_decal/siding/wood{ + dir = 4 + }, +/turf/open/floor/grass, +/area/awaymission/museum) +"TB" = ( +/obj/item/stack/rods, +/obj/effect/decal/cleanable/dirt/dust, +/obj/structure/broken_flooring/corner/always_floorplane{ + dir = 8 + }, +/turf/open/indestructible/plating, +/area/awaymission/museum) +"TF" = ( +/turf/open/floor/iron/stairs/right{ + dir = 4 + }, +/area/awaymission/museum) +"TI" = ( +/obj/structure/chair/bronze{ + dir = 8 + }, +/turf/open/floor/bronze/flat, +/area/awaymission/museum) +"TJ" = ( +/obj/structure/railing{ + dir = 8 + }, +/obj/effect/replica_spawner{ + target_path = /obj/machinery/autolathe + }, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/turf/open/floor/engine, +/area/awaymission/museum) +"TM" = ( +/obj/machinery/light/floor, +/turf/open/floor/iron, +/area/awaymission/museum) +"TN" = ( +/obj/effect/turf_decal/siding/dark_blue{ + dir = 1 + }, +/obj/item/kirbyplants/random/fullysynthetic, +/turf/open/floor/mineral/titanium/blue, +/area/awaymission/museum) +"TO" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/spawner/random/structure/crate_abandoned, +/turf/open/floor/iron, +/area/awaymission/museum) +"TQ" = ( +/obj/machinery/portable_atmospherics/scrubber, +/obj/effect/decal/cleanable/dirt/dust, +/obj/structure/broken_flooring/singular/always_floorplane{ + dir = 8 + }, +/turf/open/indestructible/plating, +/area/awaymission/museum) +"TR" = ( +/obj/structure/window/spawner/directional/east, +/turf/open/floor/light/colour_cycle/dancefloor_b, +/area/awaymission/museum) +"TV" = ( +/obj/structure/sign/poster/random/directional/east, +/obj/structure/grille, +/turf/open/floor/iron/dark/textured_large, +/area/awaymission/museum) +"TY" = ( +/turf/open/floor/iron/showroomfloor, +/area/awaymission/museum) +"Ue" = ( +/obj/structure/transport/linear/tram/slow, +/obj/structure/thermoplastic, +/obj/effect/spawner/random/structure/closet_empty/crate/with_loot, +/obj/machinery/door/window/elevator/right/directional/south{ + transport_linked_id = "museum_cargo" + }, +/obj/effect/spawner/random/maintenance/seven, +/turf/open/chasm/true/no_smooth, +/area/awaymission/museum) +"Um" = ( +/obj/effect/turf_decal/tile/neutral/opposingcorners, +/obj/effect/turf_decal/siding/dark_blue{ + dir = 8 + }, +/obj/structure/fluff/wallsign/directional/east{ + dir = 2; + name = "Exit" + }, +/turf/open/floor/iron/dark, +/area/awaymission/museum) +"Un" = ( +/obj/structure/fluff/wallsign/directional/west{ + name = "History of Nanotrasen" + }, +/obj/effect/turf_decal/tile/neutral/opposingcorners, +/obj/effect/turf_decal/siding/dark_blue{ + dir = 4 + }, +/obj/machinery/light/warm/directional/west, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/iron/dark, +/area/awaymission/museum) +"Uo" = ( +/obj/structure/fluff/fake_scrubber, +/turf/open/floor/iron, +/area/awaymission/museum) +"Uq" = ( +/obj/effect/smooths_with_walls, +/turf/cordon/secret, +/area/awaymission/museum) +"Ut" = ( +/mob/living/basic/statue/mannequin{ + held_item = /obj/item/banner/command; + hat = /obj/item/clothing/head/helmet/space + }, +/turf/open/floor/holofloor/hyperspace/ns, +/area/awaymission/museum) +"Uu" = ( +/turf/open/floor/mineral/titanium/white, +/area/awaymission/museum) +"Ux" = ( +/obj/effect/turf_decal/tile/neutral/opposingcorners, +/obj/structure/table, +/obj/item/computer_disk{ + icon_state = "datadisk_hydro"; + name = "plant data disk" + }, +/turf/open/floor/iron/dark, +/area/awaymission/museum) +"UB" = ( +/obj/structure/fluff/minepost, +/obj/effect/turf_decal/siding{ + dir = 6 + }, +/obj/structure/railing{ + dir = 4 + }, +/obj/structure/railing/corner{ + dir = 8 + }, +/turf/open/floor/holofloor/asteroid, +/area/awaymission/museum) +"UD" = ( +/obj/item/reagent_containers/pill/patch/ondansetron, +/obj/structure/rack, +/obj/effect/decal/cleanable/dirt/dust, +/obj/item/reagent_containers/pill/patch/libital, +/turf/open/indestructible/plating, +/area/awaymission/museum) +"UG" = ( +/mob/living/basic/mothroach, +/turf/open/misc/beach/sand, +/area/awaymission/museum/mothroachvoid) +"UI" = ( +/obj/effect/turf_decal/tile/green/opposingcorners, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/iron, +/area/awaymission/museum) +"UK" = ( +/obj/effect/turf_decal/tile/neutral/opposingcorners, +/obj/effect/turf_decal/siding/dark_blue{ + dir = 8 + }, +/obj/machinery/door/poddoor/shutters/preopen, +/turf/open/floor/iron/dark, +/area/awaymission/museum) +"UP" = ( +/obj/structure/table/bronze, +/obj/item/clothing/suit/costume/bronze, +/obj/item/clothing/suit/costume/bronze, +/obj/item/clothing/shoes/bronze, +/obj/item/clothing/head/costume/bronze, +/turf/open/floor/bronze/flat, +/area/awaymission/museum) +"UR" = ( +/obj/structure/railing, +/obj/structure/fluff/fake_camera{ + dir = 4 + }, +/turf/open/floor/holofloor/asteroid, +/area/awaymission/museum) +"US" = ( +/obj/machinery/computer/old{ + name = "replica computer"; + dir = 8 + }, +/obj/structure/railing{ + dir = 6 + }, +/turf/open/floor/circuit/green, +/area/awaymission/museum) +"UT" = ( +/obj/machinery/status_display/random_message{ + firstline_to_secondline = list("NO" = "LITTERING","YOU ARE" = "BEING WATCHED", "DO NOT TOUCH" = "THE EXHIBITS"); + pixel_x = 32 + }, +/turf/open/floor/carpet, +/area/awaymission/museum) +"UU" = ( +/obj/effect/turf_decal/siding{ + dir = 1 + }, +/turf/open/floor/holofloor/asteroid, +/area/awaymission/museum) +"UV" = ( +/obj/machinery/conveyor{ + dir = 1 + }, +/obj/item/storage/toolbox/emergency/old, +/turf/open/floor/engine, +/area/awaymission/museum) +"UY" = ( +/obj/effect/spawner/random/trash/mess, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/iron/smooth_half, +/area/awaymission/museum) +"Vc" = ( +/obj/machinery/light/warm/directional/east, +/obj/effect/turf_decal/tile/neutral/opposingcorners, +/obj/effect/turf_decal/siding/dark_blue{ + dir = 8 + }, +/turf/open/floor/iron/dark, +/area/awaymission/museum) +"Vh" = ( +/obj/structure/lattice/catwalk/mining, +/obj/structure/railing/corner, +/obj/machinery/light/small/directional/east, +/turf/open/chasm/true/no_smooth, +/area/awaymission/museum) +"Vk" = ( +/obj/effect/mapping_helpers/broken_floor, +/obj/effect/turf_decal/stripes/red/line{ + dir = 8 + }, +/turf/open/floor/iron, +/area/awaymission/museum) +"Vq" = ( +/obj/effect/turf_decal/tile/neutral/opposingcorners, +/obj/effect/turf_decal/siding/dark_blue{ + dir = 4 + }, +/obj/structure/fluff/fokoff_sign, +/turf/open/floor/iron/dark, +/area/awaymission/museum) +"Vz" = ( +/obj/structure/grille/broken, +/obj/structure/window/reinforced/spawner/directional/west, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/indestructible/plating, +/area/awaymission/museum) +"VA" = ( +/obj/effect/turf_decal/stripes/line, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/indestructible/plating, +/area/awaymission/museum) +"VD" = ( +/obj/effect/step_trigger/teleporter/offset{ + teleport_y_offset = 30 + }, +/turf/open/mirage{ + target_turf_y = 29 + }, +/area/awaymission/museum) +"VE" = ( +/obj/structure/lattice/catwalk/mining, +/obj/structure/railing{ + dir = 1 + }, +/obj/structure/railing/corner, +/turf/open/chasm/true/no_smooth, +/area/awaymission/museum) +"VH" = ( +/obj/structure/window/reinforced/spawner/directional/west, +/obj/structure/server, +/turf/open/floor/holofloor/beach, +/area/awaymission/museum) +"VK" = ( +/obj/effect/turf_decal/tile/neutral/opposingcorners, +/obj/effect/turf_decal/siding/dark_blue{ + dir = 4 + }, +/obj/effect/decal/cleanable/dirt/dust, +/obj/structure/fluff/fake_camera{ + dir = 8 + }, +/turf/open/floor/iron/dark, +/area/awaymission/museum) +"VL" = ( +/obj/effect/turf_decal/tile/neutral/opposingcorners, +/obj/effect/turf_decal/siding/dark_blue{ + dir = 4 + }, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/iron/dark, +/area/awaymission/museum) +"VM" = ( +/obj/machinery/conveyor{ + dir = 1 + }, +/obj/item/clothing/under/rank/medical/scrubs/coroner, +/turf/open/indestructible/plating, +/area/awaymission/museum) +"VS" = ( +/obj/effect/turf_decal/tile/neutral/opposingcorners, +/obj/effect/turf_decal/siding/dark_blue/corner, +/turf/open/floor/iron/dark, +/area/awaymission/museum) +"VT" = ( +/obj/effect/turf_decal/tile/dark_blue{ + dir = 8 + }, +/obj/effect/turf_decal/tile/dark_blue/half/contrasted{ + dir = 4 + }, +/turf/open/floor/iron/white, +/area/awaymission/museum) +"VW" = ( +/turf/open/floor/holofloor/beach/water, +/area/awaymission/museum) +"VZ" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 8 + }, +/turf/open/floor/grass, +/area/awaymission/museum) +"Wc" = ( +/obj/effect/turf_decal/tile/neutral/opposingcorners, +/obj/effect/turf_decal/siding/dark_blue{ + dir = 1 + }, +/obj/machinery/door/poddoor/shutters/indestructible{ + dir = 4; + id = "nothing" + }, +/turf/open/floor/iron/dark, +/area/awaymission/museum) +"We" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/machinery/portable_atmospherics/canister/oxygen, +/turf/open/indestructible/plating, +/area/awaymission/museum) +"Wf" = ( +/obj/effect/turf_decal/siding/wood, +/obj/structure/flora/bush/sparsegrass/style_random, +/turf/open/floor/grass, +/area/awaymission/museum) +"Wg" = ( +/mob/living/basic/mothroach, +/obj/structure/window/spawner/directional/north, +/obj/structure/window/spawner/directional/east, +/turf/open/floor/light/colour_cycle/dancefloor_a, +/area/awaymission/museum) +"Wj" = ( +/obj/effect/turf_decal/siding/wood/corner{ + dir = 1 + }, +/turf/open/floor/grass, +/area/awaymission/museum) +"Wo" = ( +/obj/effect/turf_decal/tile/neutral/opposingcorners, +/obj/effect/turf_decal/siding/dark_blue/corner{ + dir = 1 + }, +/obj/machinery/light/directional/south, +/turf/open/floor/iron/dark, +/area/awaymission/museum) +"Wr" = ( +/obj/effect/light_emitter{ + light_color = "#FFF4AA"; + set_cap = 1 + }, +/turf/closed/indestructible/rock, +/area/awaymission/museum) +"Wt" = ( +/obj/machinery/computer/old{ + name = "replica computer"; + dir = 8 + }, +/obj/structure/railing{ + dir = 5 + }, +/turf/open/floor/circuit/green, +/area/awaymission/museum) +"Wu" = ( +/obj/machinery/door/airlock/grunge, +/obj/effect/turf_decal/stripes/end, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/engine, +/area/awaymission/museum) +"Wy" = ( +/obj/effect/turf_decal/siding/dark_blue{ + dir = 9 + }, +/obj/effect/turf_decal/tile/neutral/opposingcorners, +/obj/structure/fluff/fake_camera{ + dir = 5 + }, +/turf/open/floor/iron/dark, +/area/awaymission/museum) +"WB" = ( +/obj/structure/chair/stool/bar/directional/east, +/turf/open/floor/wood/large, +/area/awaymission/museum) +"WD" = ( +/obj/effect/mob_spawn/corpse/human/assistant, +/obj/effect/mapping_helpers/broken_floor, +/turf/open/floor/iron/white, +/area/awaymission/museum) +"WE" = ( +/obj/effect/turf_decal/tile/green/opposingcorners, +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/decal/cleanable/blood/footprints{ + dir = 1 + }, +/obj/structure/fluff/fake_scrubber, +/turf/open/floor/iron, +/area/awaymission/museum) +"WH" = ( +/obj/structure/fluff/divine/defensepylon, +/obj/structure/railing{ + dir = 8 + }, +/obj/effect/turf_decal/siding/wood{ + dir = 8 + }, +/turf/open/floor/cult, +/area/awaymission/museum) +"WJ" = ( +/obj/structure/transport/linear/tram/slow, +/obj/structure/thermoplastic, +/obj/effect/spawner/random/maintenance/seven, +/obj/item/storage/pill_bottle/maintenance_pill/full, +/obj/effect/spawner/random/structure/closet_empty/crate/with_loot, +/turf/open/chasm/true/no_smooth, +/area/awaymission/museum) +"WM" = ( +/obj/structure/flora/bush/sparsegrass/style_random, +/turf/open/floor/grass, +/area/awaymission/museum) +"WQ" = ( +/obj/effect/spawner/random/vending/snackvend, +/obj/effect/turf_decal/bot, +/turf/open/floor/iron, +/area/awaymission/museum) +"WT" = ( +/obj/machinery/computer/terminal/museum{ + content = list("2008 - Nanotrasen would buy out and merge with the Wulfe Group, a German company known for their manufacture of industrial equipment. Rebranding the company as Nanotrasen Heavy Industry (or NTHI), this would be Nanotrasen’s first step towards new horizons beyond computing. In a series of purchases, Nanotrasen would expand its range of products considerably, acquiring a chemical and oil subsidiary in Texas Chemical (now Nanotrasen Chemical Supply), a consumer goods subsidiary in Seowon Appliances (now Nanotrasen Consumer Goods)") + }, +/obj/effect/turf_decal/tile/neutral/opposingcorners, +/turf/open/floor/iron/dark, +/area/awaymission/museum) +"WU" = ( +/obj/machinery/light/warm/directional/south, +/obj/effect/turf_decal/tile/neutral/opposingcorners, +/obj/effect/turf_decal/siding/dark_blue{ + dir = 1 + }, +/turf/open/floor/iron/dark, +/area/awaymission/museum) +"WX" = ( +/obj/effect/turf_decal/tile/neutral/opposingcorners, +/obj/effect/turf_decal/siding/dark_blue/corner{ + dir = 8 + }, +/turf/open/floor/iron/dark, +/area/awaymission/museum) +"Xa" = ( +/obj/structure/broken_flooring/corner/always_floorplane{ + dir = 2 + }, +/obj/structure/lattice, +/obj/structure/fluff/fake_camera{ + dir = 5 + }, +/turf/open/chasm/true/no_smooth, +/area/awaymission/museum) +"Xc" = ( +/obj/structure/table/wood, +/obj/effect/turf_decal/siding/wood{ + dir = 4 + }, +/obj/item/plate, +/obj/item/food/kitzushi, +/turf/open/floor/wood/large, +/area/awaymission/museum) +"Xh" = ( +/turf/closed/indestructible/fakedoor/maintenance, +/area/awaymission/museum) +"Xo" = ( +/obj/structure/lattice/catwalk/mining, +/obj/structure/railing, +/obj/structure/table, +/obj/item/pen/red, +/obj/item/paper/fluff/museum/noend, +/turf/open/chasm/true/no_smooth, +/area/awaymission/museum) +"Xs" = ( +/obj/structure/fluff/broken_canister_frame, +/obj/structure/fluff/fake_camera{ + dir = 4 + }, +/turf/open/indestructible/plating, +/area/awaymission/museum) +"Xt" = ( +/obj/structure/table, +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/spawner/random/contraband/cannabis, +/turf/open/floor/iron, +/area/awaymission/museum) +"XB" = ( +/obj/effect/turf_decal/bot/right, +/turf/open/floor/iron/dark/diagonal, +/area/awaymission/museum) +"XC" = ( +/obj/structure/plaque/static_plaque/golden/commission/mini, +/turf/closed/indestructible/reinforced, +/area/awaymission/museum) +"XD" = ( +/obj/effect/turf_decal/tile/neutral/opposingcorners, +/obj/effect/turf_decal/siding/dark_blue{ + dir = 4 + }, +/obj/effect/step_trigger/teleporter/offset{ + teleport_y_offset = 14 + }, +/turf/open/floor/iron/dark, +/area/awaymission/museum) +"XF" = ( +/obj/structure/fluff/fake_vent, +/turf/open/floor/iron/white, +/area/awaymission/museum) +"XK" = ( +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/indestructible/plating, +/area/awaymission/museum) +"XM" = ( +/obj/effect/decal/cleanable/blood/old, +/obj/effect/turf_decal/stripes/red/line{ + dir = 9 + }, +/turf/open/floor/iron, +/area/awaymission/museum) +"XP" = ( +/obj/effect/turf_decal/tile/neutral/opposingcorners, +/obj/effect/turf_decal/siding/dark_blue{ + dir = 8 + }, +/obj/machinery/door/poddoor/shutters/indestructible{ + id = "nothing" + }, +/turf/open/floor/iron/dark, +/area/awaymission/museum) +"XR" = ( +/obj/structure/filingcabinet/chestdrawer, +/obj/effect/decal/cleanable/dirt/dust, +/obj/structure/broken_flooring/corner/always_floorplane, +/turf/open/indestructible/plating, +/area/awaymission/museum) +"XW" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/structure/fluff/fake_camera{ + dir = 5 + }, +/turf/open/floor/iron/dark/textured_large, +/area/awaymission/museum) +"Yb" = ( +/obj/structure/table/wood, +/obj/effect/turf_decal/siding/wood{ + dir = 4 + }, +/obj/item/plate/large, +/obj/item/food/khachapuri, +/turf/open/floor/wood/large, +/area/awaymission/museum) +"Yd" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/structure/broken_flooring/side/directional/east, +/obj/machinery/door/airlock/atmos/glass, +/obj/structure/barricade/wooden, +/obj/effect/mapping_helpers/airlock/locked, +/obj/effect/mapping_helpers/airlock/access/all/away/generic3, +/turf/open/indestructible/plating, +/area/awaymission/museum) +"Ye" = ( +/obj/structure/sign/nanotrasen, +/turf/closed/indestructible/reinforced/titanium/nodiagonal, +/area/awaymission/museum) +"Yg" = ( +/obj/effect/decal/cleanable/dirt/dust, +/mob/living/basic/cockroach, +/turf/open/indestructible/plating, +/area/awaymission/museum) +"Yk" = ( +/obj/machinery/door/poddoor/shutters/indestructible{ + id = "museum_secret" + }, +/turf/open/floor/iron, +/area/awaymission/museum) +"Yr" = ( +/obj/effect/turf_decal/tile/neutral/opposingcorners, +/obj/structure/table/reinforced, +/obj/effect/turf_decal/siding/dark_blue, +/obj/effect/spawner/random/entertainment/toy, +/obj/effect/spawner/random/entertainment/toy, +/obj/item/reagent_containers/cup/glass/mug/nanotrasen, +/turf/open/floor/iron/dark, +/area/awaymission/museum) +"Yz" = ( +/obj/effect/turf_decal/siding, +/mob/living/basic/statue/mannequin{ + dir = 8; + held_item = /obj/item/pickaxe; + hat = /obj/item/clothing/suit/hooded/explorer + }, +/obj/structure/railing, +/turf/open/floor/holofloor/asteroid, +/area/awaymission/museum) +"YC" = ( +/obj/item/storage/box/mothic_cans_sauces, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/indestructible/plating, +/area/awaymission/museum) +"YD" = ( +/obj/effect/spawner/structure/window/hollow/reinforced/middle{ + dir = 4 + }, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/indestructible/plating, +/area/awaymission/museum) +"YF" = ( +/obj/structure/hedge, +/obj/effect/turf_decal/siding/wood/corner{ + dir = 4 + }, +/turf/open/floor/grass, +/area/awaymission/museum) +"YP" = ( +/obj/structure/broken_flooring/singular/always_floorplane{ + dir = 1 + }, +/turf/open/floor/black, +/area/awaymission/museum) +"YY" = ( +/turf/open/floor/iron/stairs/left{ + dir = 8 + }, +/area/awaymission/museum) +"YZ" = ( +/obj/machinery/light/warm/dim/directional/south, +/obj/effect/turf_decal/tile/green/opposingcorners, +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/turf_decal/siding/green, +/obj/structure/table, +/obj/item/coffee_cartridge/bootleg, +/obj/item/reagent_containers/cup/glass/coffee/no_lid{ + pixel_x = 12 + }, +/turf/open/floor/iron, +/area/awaymission/museum) +"Zf" = ( +/obj/structure/plaque/static_plaque/golden/commission/donut, +/turf/closed/indestructible/reinforced, +/area/awaymission/museum) +"Zg" = ( +/obj/machinery/light/warm/directional/west, +/turf/open/floor/holofloor/beach/water, +/area/awaymission/museum) +"Zk" = ( +/obj/effect/decal/cleanable/fuel_pool/hivis, +/turf/open/indestructible/plating, +/area/awaymission/museum) +"Zn" = ( +/obj/structure/lattice, +/turf/open/chasm/true/no_smooth, +/area/awaymission/museum) +"Zp" = ( +/obj/structure/plaque/static_plaque/golden/commission/icebox, +/turf/closed/indestructible/reinforced, +/area/awaymission/museum) +"Zr" = ( +/obj/effect/turf_decal/tile/neutral/opposingcorners, +/obj/effect/turf_decal/siding/dark_blue{ + dir = 8 + }, +/obj/effect/step_trigger/teleporter/offset{ + teleport_y_offset = 14 + }, +/turf/open/floor/iron/dark, +/area/awaymission/museum) +"Zw" = ( +/obj/effect/turf_decal/tile/neutral/opposingcorners, +/obj/effect/turf_decal/siding/dark_blue{ + dir = 4 + }, +/obj/structure/chair/sofa/bench{ + dir = 8 + }, +/turf/open/floor/iron/dark, +/area/awaymission/museum) +"ZB" = ( +/obj/machinery/door/airlock/maintenance_hatch, +/obj/structure/broken_flooring/side/always_floorplane/directional/east, +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/mapping_helpers/airlock/access/all/away/generic3, +/turf/open/indestructible/plating, +/area/awaymission/museum) +"ZF" = ( +/mob/living/basic/mothroach, +/turf/open/misc/beach/coast/corner{ + dir = 1 + }, +/area/awaymission/museum/mothroachvoid) +"ZH" = ( +/obj/structure/lattice/catwalk/mining, +/obj/structure/railing{ + dir = 8 + }, +/obj/structure/railing{ + dir = 4 + }, +/turf/open/chasm/true/no_smooth, +/area/awaymission/museum) +"ZI" = ( +/obj/structure/railing, +/obj/effect/turf_decal/tile/neutral/opposingcorners, +/obj/effect/turf_decal/siding/dark_blue{ + dir = 1 + }, +/turf/open/floor/iron/dark, +/area/awaymission/museum) +"ZP" = ( +/obj/structure/statue/gold/ce{ + anchored = 1 + }, +/turf/open/floor/mineral/diamond, +/area/awaymission/museum/mothroachvoid) +"ZW" = ( +/obj/machinery/door/airlock/wood/glass, +/obj/effect/turf_decal/siding/wood{ + dir = 1 + }, +/turf/open/floor/wood/large, +/area/awaymission/museum) +"ZY" = ( +/obj/structure/window/bronze/spawner/directional/south, +/obj/structure/window/bronze/spawner/directional/east, +/obj/structure/window/bronze/spawner/directional/north, +/obj/structure/grille, +/turf/open/indestructible/plating, +/area/awaymission/museum) +"ZZ" = ( +/obj/item/stack/rods, +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/decal/cleanable/blood/footprints{ + dir = 4 + }, +/turf/open/indestructible/plating, +/area/awaymission/museum) + +(1,1,1) = {" +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +"} +(2,1,1) = {" +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +"} +(3,1,1) = {" +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +"} +(4,1,1) = {" +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +"} +(5,1,1) = {" +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +"} +(6,1,1) = {" +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +"} +(7,1,1) = {" +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +"} +(8,1,1) = {" +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +"} +(9,1,1) = {" +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +"} +(10,1,1) = {" +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +"} +(11,1,1) = {" +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +"} +(12,1,1) = {" +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +"} +(13,1,1) = {" +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +"} +(14,1,1) = {" +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +"} +(15,1,1) = {" +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +"} +(16,1,1) = {" +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +"} +(17,1,1) = {" +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +"} +(18,1,1) = {" +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +"} +(19,1,1) = {" +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +"} +(20,1,1) = {" +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +"} +(21,1,1) = {" +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +"} +(22,1,1) = {" +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +"} +(23,1,1) = {" +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +"} +(24,1,1) = {" +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +"} +(25,1,1) = {" +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +"} +(26,1,1) = {" +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +"} +(27,1,1) = {" +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +"} +(28,1,1) = {" +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +"} +(29,1,1) = {" +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +"} +(30,1,1) = {" +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +"} +(31,1,1) = {" +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +"} +(32,1,1) = {" +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +"} +(33,1,1) = {" +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +"} +(34,1,1) = {" +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +"} +(35,1,1) = {" +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +"} +(36,1,1) = {" +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +"} +(37,1,1) = {" +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +"} +(38,1,1) = {" +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +"} +(39,1,1) = {" +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +"} +(40,1,1) = {" +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +"} +(41,1,1) = {" +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +"} +(42,1,1) = {" +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +"} +(43,1,1) = {" +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +"} +(44,1,1) = {" +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +"} +(45,1,1) = {" +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +"} +(46,1,1) = {" +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +"} +(47,1,1) = {" +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +"} +(48,1,1) = {" +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +"} +(49,1,1) = {" +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +"} +(50,1,1) = {" +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +"} +(51,1,1) = {" +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +"} +(52,1,1) = {" +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +"} +(53,1,1) = {" +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +"} +(54,1,1) = {" +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +"} +(55,1,1) = {" +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +"} +(56,1,1) = {" +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +"} +(57,1,1) = {" +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +"} +(58,1,1) = {" +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +"} +(59,1,1) = {" +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +"} +(60,1,1) = {" +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +"} +(61,1,1) = {" +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +"} +(62,1,1) = {" +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +"} +(63,1,1) = {" +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +"} +(64,1,1) = {" +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +"} +(65,1,1) = {" +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +"} +(66,1,1) = {" +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +"} +(67,1,1) = {" +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +"} +(68,1,1) = {" +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +"} +(69,1,1) = {" +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +"} +(70,1,1) = {" +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +"} +(71,1,1) = {" +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +"} +(72,1,1) = {" +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +"} +(73,1,1) = {" +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +"} +(74,1,1) = {" +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +"} +(75,1,1) = {" +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +Lm +Lm +Lm +Lm +Lm +Lm +Lm +Lm +Lm +Lm +Lm +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +"} +(76,1,1) = {" +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +Lm +Lm +Lm +Lm +Lm +Lm +Lm +Lm +Lm +Lm +Lm +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +"} +(77,1,1) = {" +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +Lm +Lm +Lm +Lm +Lm +Lm +Lm +Lm +Lm +Lm +Lm +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +"} +(78,1,1) = {" +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +Lm +Lm +Lm +Lm +Qe +Lm +Qe +Lm +Lm +Lm +Lm +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +"} +(79,1,1) = {" +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +Lm +Lm +Lm +Qe +Lm +Qe +Lm +YP +Lm +Lm +Lm +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +"} +(80,1,1) = {" +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +Lm +Lm +Lm +Lm +Qe +Lm +JW +Lm +Lm +Lm +sj +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +"} +(81,1,1) = {" +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +yS +yS +yS +yS +yS +re +re +re +re +re +re +re +re +re +re +re +re +FK +DT +DT +DT +FK +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +"} +(82,1,1) = {" +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +yS +yS +fn +kQ +fn +yS +yS +re +re +re +re +re +FK +FK +FK +FK +FK +re +FK +xx +TM +Wy +FK +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +"} +(83,1,1) = {" +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +yS +fn +fn +fn +fn +kQ +yS +re +re +re +FK +FK +FK +IP +Zg +fJ +FK +FK +FK +Hs +eN +Wc +FK +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +"} +(84,1,1) = {" +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +yS +fn +Ut +hE +dY +fn +yS +re +re +re +FK +jH +mX +IP +VW +oQ +br +NV +FK +aa +qj +fy +FK +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +"} +(85,1,1) = {" +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +yS +yq +fn +fn +fn +fn +yS +re +re +re +FK +UY +zG +IP +VW +oQ +GG +rr +FK +lb +TM +tD +FK +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +"} +(86,1,1) = {" +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +yS +fe +uT +uT +uT +fe +yS +re +re +re +FK +cs +rO +lk +oA +eX +zK +IF +FK +lb +uY +tD +FK +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +"} +(87,1,1) = {" +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +MF +MF +MF +MF +MF +MF +MF +MF +MF +MF +MF +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +fe +fe +Mx +Ni +lC +fe +fe +FK +FK +FK +FK +GQ +yx +xR +hC +xR +GS +GQ +FK +lb +uY +tD +FK +HA +FK +FK +FK +FK +FK +FK +FK +FK +Uq +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +"} +(88,1,1) = {" +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +MF +Ns +yi +Er +EM +yi +Se +Cy +yi +Ns +MF +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +fe +fe +fe +fe +HL +Iu +Uu +Iu +uM +iz +VL +hV +LS +hV +hV +hV +VL +hV +hV +hV +hV +hV +zg +uY +nh +hV +hV +hV +hV +VK +im +hV +hV +VL +CF +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +"} +(89,1,1) = {" +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +MF +rA +gM +gM +gM +gM +gM +gM +gM +rA +MF +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +fe +FA +Ef +zc +Iu +Uu +Hi +Uu +Iu +EA +uY +TM +uY +uY +uY +uY +uY +uY +uY +qj +od +qj +uY +HY +qj +qj +qj +uY +uY +uY +uY +uY +TM +qj +bI +re +re +re +re +re +re +re +re +re +re +Uq +re +Uq +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +"} +(90,1,1) = {" +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +MF +MF +MF +MF +MF +MF +WB +WB +WB +WB +WB +WB +gM +gM +wO +MF +re +re +re +re +Ma +Ma +re +re +re +re +re +re +re +re +re +re +re +re +fe +xg +lT +IV +da +jn +jn +jn +gG +AC +bV +gW +bV +RC +uY +DV +bV +bV +bV +Gh +uY +lf +bV +bV +bV +bV +bV +bV +bV +RC +qj +Ok +bV +es +XP +re +re +re +re +re +re +re +re +re +re +FK +yM +FK +FK +FK +FK +FK +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +"} +(91,1,1) = {" +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +MF +ml +Pf +Lg +Lg +MF +fi +fi +fi +fi +fi +fi +pp +gM +IZ +MF +re +re +re +re +Zn +Ma +Ma +re +re +re +re +re +re +re +re +re +re +re +fe +ab +lM +IV +Fi +iW +go +iW +TN +Ye +FK +FK +FK +GY +uY +tD +am +kX +Rl +lb +uY +sy +FK +FK +PR +tI +iK +ea +FK +lb +uY +tD +FK +FK +FK +FK +FK +FK +FK +FK +FK +FK +FK +FK +FK +FK +aG +FK +Gv +ek +Gv +FK +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +"} +(92,1,1) = {" +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +MF +gB +HP +HP +HP +MF +fW +rr +rr +rr +rr +Ek +pp +gM +EM +MF +re +re +re +DS +wh +Ma +Ma +Ma +re +re +re +re +re +re +re +re +re +re +fe +jo +jo +Lp +vZ +Ag +VT +Ag +HE +fe +FK +cW +Lv +lb +qj +tD +cn +Mv +tv +lb +uY +ZI +rU +FK +UU +fa +Gi +Yz +Sr +lb +uY +pb +FK +EE +Yg +vj +SA +FK +Ma +Ma +DA +Ma +Ma +as +PK +EK +yo +Kh +Gv +sN +Gv +FK +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +"} +(93,1,1) = {" +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +MF +AG +HP +HP +HP +mZ +rr +Oo +zC +dH +rr +dV +gM +gM +rA +MF +MF +re +re +DS +Re +wh +Ma +Ma +Zn +re +re +re +re +re +re +re +re +re +fe +eg +eg +fe +Jn +nS +xI +xI +eD +fe +FK +hX +Lv +lb +uY +tD +Kv +jy +lh +lb +uY +ZI +hT +FK +xj +PF +tN +Sh +WT +lb +uY +xf +FK +xr +XK +Yg +XK +FD +ZH +Qk +Ma +Ma +Ma +tK +FK +FK +Kh +Kh +ix +ix +ix +FK +Uq +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +"} +(94,1,1) = {" +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +MF +wk +jL +HP +bC +MF +dL +rr +rr +hp +rr +kr +pp +gM +gM +aW +MF +MF +MF +MF +Re +PZ +Ma +Ma +dZ +re +re +re +re +re +re +re +re +re +fe +hM +iF +ro +Fi +DU +iW +iW +Ny +Ye +FK +FK +FK +Hw +uY +tD +Wt +EQ +US +lb +uY +xJ +FK +FK +nH +th +lB +UB +FK +lb +qj +xf +FK +FK +bF +FK +We +tK +Ma +VE +zr +Ma +Ma +Ri +nT +Dx +XK +XK +XK +uR +SU +Xh +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +"} +(95,1,1) = {" +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +MF +MF +MF +MF +MF +Sa +MF +MF +MF +tx +tx +tx +tx +tx +pp +gM +jf +gM +bj +TY +cH +cH +vs +cR +Ma +Ma +Zn +re +re +re +re +re +re +re +re +re +fe +yl +NT +MB +tt +sm +sm +sm +Bu +iz +hV +hV +hV +zg +uY +nv +hV +JU +hV +wE +uY +nh +hV +hV +hV +hV +hV +hV +hV +zg +uY +xf +FK +Na +ow +FK +FK +FK +Ma +do +Ma +Ma +Ma +tK +FK +FK +Kh +Kh +FK +FK +FK +FK +Uq +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +"} +(96,1,1) = {" +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +MF +cF +cF +cF +cF +cF +KI +Ci +MF +ex +ex +ex +ex +ex +gM +gM +gM +FM +MF +nr +TY +cH +vs +cR +Ma +Ma +re +re +re +re +re +re +re +re +re +re +fe +nz +tj +UR +Iu +Uu +Le +Uu +Iu +EA +uY +TM +uY +qj +Uo +uY +uY +uY +uY +uY +uY +uY +uY +oI +uY +uY +uY +qj +qj +qj +Uo +xf +FK +XK +XK +pX +bF +kh +sD +at +Ma +Ma +Ma +kA +PK +EK +EK +zh +FK +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +"} +(97,1,1) = {" +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +MF +YY +LB +Am +iN +uc +Jb +Ps +eA +gM +gM +gM +gM +gM +gM +gM +gM +Mn +MF +CV +TY +gA +MF +Zn +Ma +Ma +re +re +re +re +re +re +re +re +re +re +fe +fe +fe +fe +Lk +Uu +Uu +Uu +Iu +AC +bV +es +bV +OD +bV +bV +RC +qj +lf +bV +bV +ox +bV +es +es +bV +bV +yN +bV +bV +bV +Wo +FK +QI +XK +XK +Xh +dZ +dZ +yG +Ma +Ma +Ma +VM +PK +EK +zh +gC +FK +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +"} +(98,1,1) = {" +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +MF +qp +Ls +Ec +uc +CT +Jb +xT +MF +Jd +Kd +OS +Kd +OS +OS +Kd +gM +gM +MF +MF +up +MF +MF +Zn +Ma +Ma +re +re +re +re +re +re +re +re +re +re +re +re +re +fe +VH +sC +mA +OZ +xD +fe +FK +FK +EX +EX +EX +yn +lb +uY +tD +yn +eH +kO +kO +FK +AR +BK +DL +ai +rX +ai +ai +TJ +FK +HU +AP +HU +FK +Kh +Kh +FK +Kh +Kh +FK +FK +FK +FK +yM +yM +FK +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +"} +(99,1,1) = {" +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +MF +ct +Bo +wI +Rs +mK +QX +MF +MF +MF +Pq +ya +Yb +Xc +GO +fz +la +la +MF +Fh +la +ht +MF +qS +Ma +Ma +re +re +re +re +re +re +FK +FK +FK +FK +FK +FK +re +fe +qY +qY +qY +qY +qY +fe +ap +FK +Hn +eF +As +ud +lb +uY +fy +ud +pi +MC +bQ +FK +Eo +Iz +fo +yu +yu +yu +Dk +BQ +ll +BX +BX +BX +hl +EK +EK +EK +qM +EK +hl +EK +kg +EK +EK +EK +yM +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +"} +(100,1,1) = {" +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +MF +qp +az +Jc +Pb +FG +Jb +MF +eP +eP +eP +nb +Ar +Ar +Ar +wZ +eP +eP +mV +mV +mV +mV +mV +qS +qS +Ko +re +re +re +re +re +re +FK +Ov +Ov +Ov +tB +FK +re +FK +sA +XK +bG +XK +XK +FK +ap +FK +RD +oZ +hY +FK +lb +TM +qL +FK +oo +bJ +CK +FK +QD +Xs +fo +MV +dS +MV +MV +UV +ll +BX +BX +BX +hl +EK +qM +AI +EK +EK +hl +EK +EK +EK +EK +EK +yM +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +"} +(101,1,1) = {" +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +MF +TF +vO +Wg +TR +Pb +Jb +vU +eP +gu +nb +ff +Ar +Ar +hb +Dl +eP +SQ +mV +mV +mV +mV +SQ +MF +MF +MF +MF +MF +re +re +re +re +FK +Ov +rB +Ov +tB +FK +re +FK +FK +iT +FK +UD +uu +FK +FK +FK +FK +FK +FK +FK +Jx +gj +uf +FK +FK +FK +FK +FK +FK +FK +DY +Ij +DY +Ij +DY +DY +FK +TB +ZZ +XK +tK +Kh +Kh +FK +Kh +Kh +FK +FK +lU +lU +lU +tK +FK +FK +Uq +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +"} +(102,1,1) = {" +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +MF +Qv +Qv +Qv +Qv +Qv +pc +MF +oC +nb +BF +Ar +GU +Ar +wZ +gu +eP +mV +mV +mC +jG +mV +mV +ZW +gM +wO +Bj +MF +re +re +re +re +FK +Ov +Ov +Ov +tB +FK +re +FK +iB +Ol +FK +FK +FK +FK +Cc +eO +cf +mg +Cc +FK +lb +uY +tD +FK +Cc +Cc +Cc +Cc +Cc +FK +FK +XK +XK +XK +FK +re +FK +TO +wG +XK +VA +Ma +Ma +Ma +Ma +Ma +Ma +Ma +Cb +ED +bk +Ue +tU +PB +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +"} +(103,1,1) = {" +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +MF +MF +MF +MF +MF +MF +MF +MF +eP +xm +Ar +Ar +Ar +hb +Dl +eP +oC +mV +mV +Fc +jG +mV +tC +MF +gM +gM +gM +MF +re +re +re +re +FK +FK +FK +FK +FK +FK +re +FK +IH +XK +Hk +MI +FK +pF +Cc +DI +Zw +Hj +VL +Un +qA +uY +nh +iE +xb +Co +Co +qR +Cc +Cc +FK +YC +dN +tf +FK +re +FK +sh +ts +Pd +Fj +Ma +Ma +Ma +Ma +Ma +Ma +Ma +bk +bW +IB +Ah +tU +FK +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +"} +(104,1,1) = {" +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +zE +xu +eP +xm +Ar +Ar +Ar +wZ +os +eP +eP +mV +mV +jG +qt +mV +mV +jB +gM +GT +sp +MF +re +re +re +re +re +re +re +re +re +re +re +FK +TQ +QU +sd +Xt +FK +fK +VS +zg +qj +uY +qj +qj +uY +uY +uY +uY +uY +uY +qj +nh +Pi +Cc +FK +FK +FK +FK +FK +re +FK +jW +EO +ME +zM +Ma +jU +Ma +Ma +Ma +Ma +Ma +bk +lV +PX +nc +tU +FK +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +"} +(105,1,1) = {" +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +xu +xu +xu +dx +xm +Ar +Ar +Ar +wZ +eP +eP +eP +mV +mV +SQ +mV +mV +mV +jB +yr +nq +kd +MF +re +re +re +re +re +re +re +re +re +re +re +FK +pM +XR +xB +lS +FK +vc +lb +uY +od +qj +uY +uY +uY +uY +uY +uY +uY +uY +Uo +uY +aR +HJ +FK +re +re +re +re +re +FK +zL +qj +qj +Ms +Ma +Ma +Ma +Ma +Ma +Ma +Ma +RU +ED +WJ +Ai +tU +PB +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +"} +(106,1,1) = {" +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +xu +xu +mV +eP +xm +GU +Ar +Ar +wZ +eP +eP +mV +mV +mV +mV +mV +mV +mV +jB +gM +il +gM +MF +re +re +re +re +re +re +re +re +re +re +re +FK +FK +FK +FK +FK +FK +jN +lb +uY +uY +Gx +uE +ev +VZ +VZ +LY +ev +Lq +WQ +uY +uY +aR +Cc +FK +re +re +re +re +re +FK +FK +FK +FK +tK +FK +FK +FK +FK +FK +FK +FK +FK +PB +PB +tK +FK +FK +Uq +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +"} +(107,1,1) = {" +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +xu +xu +mV +eP +xm +Ar +Ar +Ar +wZ +gu +eP +zE +Wr +zE +zE +zE +zE +zE +MF +MF +MF +MF +MF +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +FK +fK +lb +uY +uY +uE +QF +uN +WM +uN +uN +uN +Fg +Lq +uY +uY +nW +Cc +FK +re +re +re +Uq +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +"} +(108,1,1) = {" +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +zE +xu +xu +mV +eP +xm +Ar +Ar +Ar +wZ +eP +NB +zE +FK +Fv +re +re +re +re +zE +re +re +re +re +re +re +re +re +re +re +re +re +AS +FK +FK +FK +FK +FK +FK +FK +FK +FK +zY +uY +uY +IC +Qw +wL +Qw +Pc +WM +uN +uN +Qj +qj +uY +AZ +FK +FK +FK +FK +FK +FK +FK +FK +FK +FK +FK +FK +FK +FK +FK +FK +FK +FK +FK +FK +FK +FK +FK +FK +FK +FK +FK +FK +FK +FK +FK +FK +FK +FK +FK +FK +FK +FK +FK +FK +FK +FK +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +"} +(109,1,1) = {" +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +zE +xu +mV +mV +eP +xm +Ar +Ar +Ar +wZ +eP +CC +QP +nh +PW +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +JK +hV +hV +hV +hV +hV +hV +hV +sE +VK +zg +uY +uY +wC +XB +QG +cv +KN +zd +zd +WM +At +qj +uY +nh +CD +st +hV +hV +hV +hV +hV +hV +hV +hV +hV +hV +hV +hV +hV +hV +hV +hV +hV +hV +hV +hV +hV +hV +hV +hV +gQ +XD +hV +hV +hV +hV +hV +hV +hV +hV +hV +hV +hV +iZ +Vq +FK +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +"} +(110,1,1) = {" +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +zE +xu +mV +mV +eP +ZF +Cu +Ar +Ar +wZ +lG +CC +QP +TM +PW +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +JK +uY +TM +uY +uY +uY +TM +uY +Yk +qj +uY +uY +Rq +FK +nE +JF +QG +KN +lz +zd +uN +Wf +qj +qj +uY +uY +zX +uY +uY +uY +uY +uY +uY +uY +uY +uY +uY +uY +uY +uY +uY +uY +uY +uY +uY +uY +uY +uY +uY +uY +uY +gQ +Cd +uY +uY +uY +uY +uY +uY +uY +uY +uY +uY +uY +cS +rP +FK +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +"} +(111,1,1) = {" +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +zE +xu +xu +mV +dx +eP +xm +Ar +Ar +wZ +eP +CC +QP +lf +PW +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +JK +bV +bV +bV +bV +bV +bV +bV +ec +es +yA +uY +uY +wC +cv +QG +XB +KN +zd +lz +WM +At +qj +uY +lf +Um +UK +bV +bV +bV +bV +bV +bV +bV +bV +bV +bV +bV +bV +bV +bV +bV +bV +bV +bV +bV +bV +bV +bV +bV +bV +gQ +Zr +bV +bV +bV +bV +bV +bV +bV +bV +bV +bV +bV +nF +yK +FK +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +"} +(112,1,1) = {" +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +zE +xu +mV +mV +eP +gu +xm +Ar +Ar +wZ +dx +dR +zE +FK +Fv +re +re +re +re +zE +zE +re +re +re +re +re +re +re +re +re +re +re +AS +FK +FK +FK +FK +FK +FK +of +FK +FK +zY +qj +uY +uE +QK +VZ +VZ +Wj +uN +uN +uN +Qj +qj +uY +sX +FK +FK +FK +FK +FK +FK +FK +FK +FK +FK +FK +FK +FK +FK +FK +FK +FK +FK +FK +FK +FK +FK +FK +FK +FK +FK +FK +FK +FK +FK +FK +FK +FK +FK +FK +FK +FK +FK +FK +FK +FK +FK +re +re +re +Uq +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +"} +(113,1,1) = {" +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +zE +xu +JY +iV +eP +oC +xm +Ar +Ar +wZ +eP +eP +zE +Wr +zE +zE +zE +zE +zE +zE +zE +zE +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +FK +iI +aa +qj +uY +IC +YF +WM +uN +WM +WM +uN +mQ +xv +qj +uY +fy +Cc +Sv +Nd +Cj +cA +FK +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +FK +FK +FK +FK +FK +re +re +re +re +Uq +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +"} +(114,1,1) = {" +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +zE +xu +hj +tc +eP +eP +xm +Ar +Ar +wZ +eP +oC +SQ +mV +SQ +mV +SQ +mV +mV +mV +xu +zE +re +re +re +re +re +re +re +re +re +re +re +re +FK +FK +FK +Xh +FK +FK +FK +wN +lb +uY +uY +nQ +IC +Tz +Qw +Qw +Qw +Tz +xv +Gx +uY +uY +fy +el +Yr +kw +UI +eQ +FK +FK +FK +FK +FK +FK +FK +FK +bt +bt +bt +bt +bt +bt +bt +bt +bt +bt +bt +bt +bt +bt +bt +bt +bt +bt +bt +bt +bt +bt +bt +bt +bt +bt +bt +bt +FK +QN +fC +tM +FK +FK +tG +tG +FK +FK +Uq +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +"} +(115,1,1) = {" +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +zE +xu +xu +mV +eP +nb +BF +Ar +Ar +wZ +eP +eP +mV +SQ +mV +SQ +mV +jm +bs +bs +xu +zE +zE +re +re +re +re +re +re +re +re +re +re +re +FK +qw +XK +PP +PP +xP +FK +hi +lb +uY +Uo +uY +uY +uY +uY +uY +uY +uY +uY +uY +od +uY +fy +el +rW +ET +WE +YZ +FK +en +Vk +CB +FK +tS +dZ +Xo +Ma +Ma +Ma +Ma +Ma +Ma +Ma +Ma +Ma +Ma +Ma +Ma +Ma +Ma +Ma +Ma +Ma +Ma +Ma +Ma +Ma +Ma +Ma +Ma +Ma +Ma +Ma +Ma +FK +Hf +Ab +XW +FK +xt +wy +wy +yF +FK +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +"} +(116,1,1) = {" +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +zE +zE +xu +mV +eP +xm +Ar +Ar +Ar +wZ +eP +gu +mV +SQ +ZP +Jj +zR +xE +eM +bs +xu +xu +zE +re +re +re +re +re +re +re +re +re +re +re +FK +FK +YD +Vz +PP +Qo +FK +iI +WX +RC +uY +qj +qj +uY +uY +uY +uY +uY +uY +uY +uY +Ok +bK +el +AY +kw +cB +Qf +FK +ue +rq +FJ +FK +yf +vC +ND +Ma +Ma +Ma +Ma +Ma +Ma +Ma +Ma +Ma +Ma +Ma +Ma +Ma +Ma +Ma +Ma +Ma +Ma +Ma +Ma +Ma +Ma +Ma +Ma +Ma +Ma +Ma +Ma +ud +qQ +Dr +qQ +kq +qQ +Dr +sz +Qb +tG +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +"} +(117,1,1) = {" +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +zE +xu +mV +eP +xm +Ar +GU +Ar +wZ +oC +eP +mV +mV +xE +cC +cC +cC +xE +bs +mV +xu +zE +re +re +re +re +re +re +re +re +re +re +re +re +FK +XK +XK +PP +kY +FK +pF +Cc +Tu +hA +Ak +es +Bq +RC +uY +lf +Bq +bV +bV +bV +bK +Cc +Cc +FK +vE +NY +pg +FK +hw +Be +XM +FK +dZ +dZ +PC +Ma +Ma +Ma +Ma +Ma +Ma +Ma +Ma +Ma +Ma +Ma +Ma +Ma +Ma +Ma +Ma +Ma +Ma +Ma +Ma +Ma +Ma +Ma +Ma +Ma +Ma +Ma +Ma +ud +nx +qQ +Pl +FK +Ea +xI +xI +RL +FK +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +"} +(118,1,1) = {" +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +zE +xu +mV +oC +xm +Ar +Ar +Ar +wZ +eP +eP +mV +mV +xE +cC +cC +cC +xE +mV +mV +xu +zE +re +re +re +re +re +re +re +re +re +re +re +re +FK +ls +XK +qx +FK +FK +FK +Cc +Oi +cN +vh +Cc +FK +lb +uY +qX +FK +Cc +Cc +bn +Cc +Cc +FK +FK +FK +NK +FK +FK +FK +FK +Yd +FK +NO +dZ +mn +yw +Ma +Ma +Ma +Ma +Ma +Ma +Ma +Ma +Ma +Ma +Ma +Ma +Ma +Ma +Ma +Ma +Ma +Ma +Ma +Ma +Ma +Ma +Ma +Ma +Ma +Ma +Ma +FK +FK +FK +FK +FK +vx +nu +FK +FK +FK +Uq +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +"} +(119,1,1) = {" +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +zE +xu +mV +eP +xm +Ar +Ar +Ar +wZ +eP +UG +mV +mV +gm +xE +ke +xE +Cq +mV +xu +xu +zE +re +re +re +re +re +re +re +re +re +re +re +re +FK +FK +vg +bF +FK +gR +FK +FK +FK +FK +FK +FK +FK +EU +vy +El +FK +FK +FK +FK +FK +FK +FK +Ks +aw +XK +aK +Du +bF +dl +CI +tq +jI +dZ +dZ +mn +rL +sD +sD +sD +gN +gN +gN +sD +Ma +Ma +dZ +Ma +sD +Ma +dZ +Ma +Ma +Ma +Ma +Ma +sD +sD +Ma +sD +Ma +sD +dZ +FK +So +PU +So +FK +qQ +xI +gT +Qb +FK +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +"} +(120,1,1) = {" +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +zE +xu +mV +gu +xm +Ar +Ar +Ar +wZ +gu +oC +mV +mV +mV +mV +mV +mV +mV +mV +xu +zE +zE +re +re +re +re +re +re +re +re +re +re +re +re +FK +Kt +qj +pD +FK +XK +RJ +Kx +FK +Fa +OP +pf +ud +lb +uY +tD +ud +Jg +Jg +mN +FK +tl +Jk +CL +rm +Zk +EG +XK +bF +qU +CI +tq +jI +dZ +dZ +dZ +ve +dZ +Ko +dZ +dZ +dZ +dZ +Ko +dZ +Ma +dZ +OT +dZ +Ma +dZ +Ko +dZ +dZ +dZ +Ko +dZ +dZ +dZ +Ko +Ma +Ma +dZ +cm +jV +jV +qJ +Wu +qQ +xI +xd +ns +FK +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +"} +(121,1,1) = {" +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +zE +xu +mV +eP +xm +Ar +Ar +Ar +wZ +eP +eP +mV +mV +mV +mV +Tt +Tt +Tt +Tt +xu +zE +re +re +re +re +re +re +re +re +re +re +re +re +re +FK +qj +wH +mS +FK +xc +FK +FK +FK +Fw +Qs +xF +ud +lb +TM +tD +ud +wA +ty +sG +FK +lg +FE +rp +rm +PP +zU +XK +bF +PP +CI +tq +de +dZ +dZ +Fr +Im +zr +zr +zr +zr +zr +zr +zr +zr +zr +dZ +zr +zr +zr +dZ +zr +zr +Ma +Ma +Ma +Ma +zr +Ma +zr +zr +zr +dZ +FK +RR +pI +jF +FK +qp +xI +cM +BO +FK +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +"} +(122,1,1) = {" +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +zE +xu +xu +eP +xm +Ar +Ar +Ar +wZ +eP +eP +xu +xu +xu +xu +xu +yE +mV +pY +xu +zE +re +re +re +re +re +re +re +re +re +re +re +re +re +FK +ZB +FK +FK +FK +Ux +Op +wJ +FK +em +Qt +iD +Rz +lb +uY +tD +Rz +gf +Ly +Ly +FK +GQ +GQ +FK +FK +vb +FK +FK +FK +PP +CI +tq +jI +dZ +dZ +PC +Ma +Ma +Ma +Ma +Ma +Ma +Ma +Ma +Ma +Ma +Ma +Ma +Ma +Ma +Ma +Ma +Ma +Ma +Ma +Ma +Ma +Ma +Ma +Ma +Ma +Ma +Ma +FK +FK +FK +FK +FK +LN +Nc +FK +FK +FK +Uq +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +"} +(123,1,1) = {" +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +zE +xu +xu +xn +ul +qo +qo +qo +De +xn +xn +xu +zE +zE +zE +xu +xu +xu +xu +xu +zE +re +re +re +re +re +re +re +re +re +re +re +re +re +FK +zz +pL +PN +ZY +VS +hV +hV +DE +hV +pv +hV +hV +zg +uY +nh +hV +hV +bi +hV +CW +hV +hV +LC +FK +cy +PP +PP +vb +PP +CI +Aq +nl +dZ +Vh +ce +Ma +Ma +Ma +Ma +Ma +Ma +Ma +Ma +Ma +Ma +Ma +Ma +Ma +Ma +Ma +Ma +Ma +Ma +Ma +Ma +Ma +Ma +Ma +Ma +Ma +Ma +Ma +Zn +Zn +fT +Qc +FK +rY +xI +xI +pw +FK +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +"} +(124,1,1) = {" +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +zE +xu +gu +xm +Ar +Ar +Ar +wZ +gu +oC +xu +zE +re +zE +zE +zE +zE +zE +zE +zE +re +re +re +re +re +re +re +re +re +re +re +re +re +FK +Ng +OI +JV +zI +lb +uY +uY +uY +uY +uY +uY +uY +uY +od +uY +uY +uY +uY +uY +uY +uY +uY +tD +FK +FK +FK +FK +FK +FK +FK +FK +FK +PB +FK +Ma +Ma +Ma +Ma +Ma +Ma +Ma +Ma +Ma +Ma +Ma +Ma +Ma +Ma +Ma +Ma +Ma +Ma +Ma +Ma +Ma +Ma +Ma +Ma +Ma +Ma +Ma +Ma +Zn +Ma +Ma +fT +bE +qQ +XF +xI +Qb +tG +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +"} +(125,1,1) = {" +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +zE +xu +eP +xm +Ar +Ar +Ar +wZ +eP +eP +xu +zE +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +FK +UP +vM +TI +vw +lb +uY +lf +Vc +bV +bV +bV +bV +RC +uY +lf +bV +bV +bV +bV +Vc +RC +uY +tD +HA +re +re +re +FK +re +re +re +re +re +FK +Ma +Ma +Ma +Ma +Ma +Ma +Ma +Ma +Ma +Ma +Ma +Ma +Ma +Ma +Ma +Ma +Ma +Ma +Ma +Ma +Ma +Ma +Ma +Ma +Ma +Ma +Ma +Ma +Zn +rJ +rJ +Xa +FK +bM +Kb +Kb +yF +FK +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +"} +(126,1,1) = {" +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +zE +xu +eP +xm +Ar +Ar +Ar +wZ +eP +eP +xu +zE +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +hk +FK +FK +FK +FK +FK +lb +uY +tD +FK +GQ +GQ +GQ +FK +Fq +uY +WU +FK +GQ +GQ +GQ +FK +lb +uY +tD +FK +FK +FK +FK +FK +lI +re +re +re +re +FK +LQ +LQ +LQ +LQ +LQ +LQ +LQ +LQ +LQ +LQ +LQ +LQ +LQ +LQ +LQ +LQ +LQ +LQ +LQ +LQ +LQ +LQ +LQ +LQ +LQ +LQ +LQ +LQ +FK +vp +WD +vp +FK +FK +tG +tG +FK +FK +Uq +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +"} +(127,1,1) = {" +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +zE +xu +eP +xm +Ar +Ar +Ar +wZ +eP +eP +xu +zE +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +AM +Sr +Sr +Sr +Sr +Sr +lb +Uo +tD +sq +Lw +Lw +Lw +qP +lb +uY +tD +XC +Lw +tk +Lw +FH +lb +Uo +tD +Sr +Sr +Sr +Sr +Sr +VD +re +re +re +re +Uq +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +FK +ot +rc +TV +FK +re +re +re +re +Uq +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +"} +(128,1,1) = {" +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +zE +xu +gu +xm +Ar +Ar +Ar +wZ +gu +oC +xu +zE +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +hk +FK +FK +FK +FK +FK +lb +uY +tD +GV +Lw +Tr +Lw +ud +lb +uY +tD +ud +Lw +Jz +Lw +QB +lb +uY +tD +FK +FK +FK +FK +FK +lI +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +FK +FK +FK +FK +FK +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +"} +(129,1,1) = {" +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +zE +xu +eP +xm +Ar +Ar +Ar +wZ +eP +eP +xu +zE +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +HA +lb +uY +tD +Zf +Lw +Lw +Lw +Mg +lb +uY +tD +eR +Lw +GE +Lw +Nm +lb +uY +tD +FK +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +Uq +re +re +re +Uq +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +"} +(130,1,1) = {" +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +zE +xu +eP +xm +Ar +Ar +Ar +wZ +eP +eP +xu +zE +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +FK +gJ +Vc +Qa +FK +Zp +nD +lH +FK +lb +uY +qL +FK +Lt +lZ +cX +FK +gJ +Vc +Ay +FK +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +"} +(131,1,1) = {" +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +zE +xu +eP +xm +Ar +Ar +Ar +wZ +eP +eP +xu +zE +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +FK +FK +FK +FK +FK +EY +hV +hV +hV +zg +uY +nh +hV +hV +hV +Cf +FK +FK +FK +FK +FK +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +"} +(132,1,1) = {" +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +zE +xu +gu +xm +Ar +Ar +Ar +wZ +gu +oC +xu +zE +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +FK +Pp +uY +uY +uY +uY +Uo +uY +uY +uY +av +dF +FK +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +"} +(133,1,1) = {" +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +zE +xu +eP +xm +Ar +Ar +Ar +wZ +eP +eP +xu +zE +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +FK +jP +bV +Js +bV +RC +uY +lf +bV +nw +bV +oe +FK +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +"} +(134,1,1) = {" +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +zE +xu +xu +xu +xu +xu +xu +xu +xu +xu +xu +zE +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +FK +FK +pt +pt +Je +lb +uY +tD +jt +WH +AE +FK +FK +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +"} +(135,1,1) = {" +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +zE +zE +zE +zE +zE +zE +zE +zE +zE +zE +zE +zE +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +FK +Ic +ne +nC +lb +uY +tD +nJ +cZ +Jv +FK +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +"} +(136,1,1) = {" +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +FK +dn +UT +nC +lb +uY +tD +SN +MZ +Ho +FK +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +"} +(137,1,1) = {" +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +FK +FK +FK +FK +FK +lb +uY +rQ +FK +FK +FK +FK +FK +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +"} +(138,1,1) = {" +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +FK +re +re +dK +Qi +lb +uY +tD +Qi +mj +re +re +FK +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +"} +(139,1,1) = {" +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +FK +re +re +dK +Qi +lb +TM +tD +Qi +mj +re +re +FK +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +"} +(140,1,1) = {" +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +FK +re +re +dK +Qi +lb +uY +tD +Qi +mj +re +re +FK +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +"} +(141,1,1) = {" +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +FK +re +re +dK +Qi +lb +uY +tD +Qi +mj +re +re +FK +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +"} +(142,1,1) = {" +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +FK +re +re +dK +Qi +lb +TM +tD +Qi +mj +re +re +FK +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +"} +(143,1,1) = {" +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +FK +re +re +dK +Qi +lb +uY +tD +Qi +mj +re +re +FK +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +"} +(144,1,1) = {" +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +FK +FK +FK +FK +FK +lb +uY +qX +FK +FK +FK +FK +FK +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +"} +(145,1,1) = {" +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +FK +HD +wi +ST +FK +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +"} +(146,1,1) = {" +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +Uq +re +re +re +Uq +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +"} +(147,1,1) = {" +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +"} +(148,1,1) = {" +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +"} +(149,1,1) = {" +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +"} +(150,1,1) = {" +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +"} +(151,1,1) = {" +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +"} +(152,1,1) = {" +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +"} +(153,1,1) = {" +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +"} +(154,1,1) = {" +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +"} +(155,1,1) = {" +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +"} +(156,1,1) = {" +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +"} +(157,1,1) = {" +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +"} +(158,1,1) = {" +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +"} +(159,1,1) = {" +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +"} +(160,1,1) = {" +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +"} +(161,1,1) = {" +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +"} +(162,1,1) = {" +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +"} +(163,1,1) = {" +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +"} +(164,1,1) = {" +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +"} +(165,1,1) = {" +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +"} +(166,1,1) = {" +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +"} +(167,1,1) = {" +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +"} +(168,1,1) = {" +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +"} +(169,1,1) = {" +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +"} +(170,1,1) = {" +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +"} +(171,1,1) = {" +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +"} +(172,1,1) = {" +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +"} +(173,1,1) = {" +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +"} +(174,1,1) = {" +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +"} +(175,1,1) = {" +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +"} +(176,1,1) = {" +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +"} +(177,1,1) = {" +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +"} +(178,1,1) = {" +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +"} +(179,1,1) = {" +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +"} +(180,1,1) = {" +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +"} +(181,1,1) = {" +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +"} +(182,1,1) = {" +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +"} +(183,1,1) = {" +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +"} +(184,1,1) = {" +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +"} +(185,1,1) = {" +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +"} +(186,1,1) = {" +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +"} +(187,1,1) = {" +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +"} +(188,1,1) = {" +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +"} +(189,1,1) = {" +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +"} +(190,1,1) = {" +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +"} +(191,1,1) = {" +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +"} +(192,1,1) = {" +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +"} +(193,1,1) = {" +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +"} +(194,1,1) = {" +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +"} +(195,1,1) = {" +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +"} +(196,1,1) = {" +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +"} +(197,1,1) = {" +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +"} +(198,1,1) = {" +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +"} +(199,1,1) = {" +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +"} +(200,1,1) = {" +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +"} +(201,1,1) = {" +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +"} +(202,1,1) = {" +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +"} +(203,1,1) = {" +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +"} +(204,1,1) = {" +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +"} +(205,1,1) = {" +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +"} +(206,1,1) = {" +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +"} +(207,1,1) = {" +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +"} +(208,1,1) = {" +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +"} +(209,1,1) = {" +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +"} +(210,1,1) = {" +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +"} +(211,1,1) = {" +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +"} +(212,1,1) = {" +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +"} +(213,1,1) = {" +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +"} +(214,1,1) = {" +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +"} +(215,1,1) = {" +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +"} +(216,1,1) = {" +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +"} +(217,1,1) = {" +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +"} +(218,1,1) = {" +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +"} +(219,1,1) = {" +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +"} +(220,1,1) = {" +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +"} +(221,1,1) = {" +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +"} +(222,1,1) = {" +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +"} +(223,1,1) = {" +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +"} +(224,1,1) = {" +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +"} +(225,1,1) = {" +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +"} +(226,1,1) = {" +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +"} +(227,1,1) = {" +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +"} +(228,1,1) = {" +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +"} +(229,1,1) = {" +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +"} +(230,1,1) = {" +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +"} +(231,1,1) = {" +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +"} +(232,1,1) = {" +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +"} +(233,1,1) = {" +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +"} +(234,1,1) = {" +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +"} +(235,1,1) = {" +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +"} +(236,1,1) = {" +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +"} +(237,1,1) = {" +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +"} +(238,1,1) = {" +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +"} +(239,1,1) = {" +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +"} +(240,1,1) = {" +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +"} +(241,1,1) = {" +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +"} +(242,1,1) = {" +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +"} +(243,1,1) = {" +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +"} +(244,1,1) = {" +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +"} +(245,1,1) = {" +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +"} +(246,1,1) = {" +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +"} +(247,1,1) = {" +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +"} +(248,1,1) = {" +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +"} +(249,1,1) = {" +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +"} +(250,1,1) = {" +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +"} +(251,1,1) = {" +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +"} +(252,1,1) = {" +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +bg +DD +fu +re +"} +(253,1,1) = {" +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +DD +Ov +zA +re +"} +(254,1,1) = {" +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +iU +DD +Sc +re +"} +(255,1,1) = {" +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +re +"} diff --git a/_maps/RandomZLevels/research.dmm b/_maps/RandomZLevels/research.dmm index c0c0d0a8c04..b5be9a8313b 100644 --- a/_maps/RandomZLevels/research.dmm +++ b/_maps/RandomZLevels/research.dmm @@ -485,9 +485,7 @@ /turf/open/floor/iron/dark, /area/awaymission/research/interior/gateway) "ck" = ( -/obj/machinery/door/window/right/directional/east{ - dir = 2 - }, +/obj/machinery/door/window/right/directional/south, /obj/effect/landmark/awaystart, /obj/structure/cable, /turf/open/floor/iron/dark, diff --git a/_maps/RandomZLevels/undergroundoutpost45.dmm b/_maps/RandomZLevels/undergroundoutpost45.dmm index 32e837c178f..4f34db636f9 100644 --- a/_maps/RandomZLevels/undergroundoutpost45.dmm +++ b/_maps/RandomZLevels/undergroundoutpost45.dmm @@ -1655,8 +1655,7 @@ /obj/structure/table/reinforced, /obj/machinery/door/firedoor, /obj/item/folder/red, -/obj/machinery/door/window/left/directional/south{ - dir = 8; +/obj/machinery/door/window/left/directional/west{ name = "Security Checkpoint"; req_access = list("away_maintenance") }, @@ -1897,10 +1896,7 @@ "hZ" = ( /obj/structure/table/reinforced, /obj/machinery/door/firedoor, -/obj/machinery/door/window/left/directional/south{ - base_state = "right"; - dir = 4; - icon_state = "right"; +/obj/machinery/door/window/right/directional/east{ name = "Hydroponics Desk"; req_access = list("away_maintenance") }, @@ -2006,7 +2002,7 @@ /turf/open/floor/iron/dark, /area/awaymission/undergroundoutpost45/gateway) "iu" = ( -/obj/machinery/door/window{ +/obj/machinery/door/window/left/directional/south{ name = "Gateway Chamber"; req_access = list("away_maintenance") }, @@ -6855,8 +6851,7 @@ "Ed" = ( /obj/structure/table/reinforced, /obj/machinery/door/firedoor, -/obj/machinery/door/window/left/directional/south{ - dir = 4; +/obj/machinery/door/window/left/directional/east{ name = "Hydroponics Desk"; req_access = list("away_maintenance") }, @@ -7365,10 +7360,7 @@ pixel_y = 9 }, /obj/item/pen, -/obj/machinery/door/window/left/directional/south{ - base_state = "right"; - dir = 8; - icon_state = "right"; +/obj/machinery/door/window/right/directional/west{ name = "Security Checkpoint"; req_access = list("away_maintenance") }, @@ -7490,8 +7482,7 @@ id = "UO45_EngineeringOffice"; name = "Privacy Shutters" }, -/obj/machinery/door/window/left/directional/south{ - dir = 4; +/obj/machinery/door/window/left/directional/east{ name = "Engineering Reception"; req_access = list("away_maintenance") }, @@ -7858,8 +7849,7 @@ "Wo" = ( /obj/structure/table/reinforced, /obj/machinery/door/firedoor, -/obj/machinery/door/window/left/directional/east{ - dir = 1; +/obj/machinery/door/window/left/directional/north{ name = "Hydroponics Desk"; req_access = list("away_maintenance") }, @@ -7953,10 +7943,7 @@ id = "UO45_EngineeringOffice"; name = "Privacy Shutters" }, -/obj/machinery/door/window/left/directional/south{ - base_state = "right"; - dir = 4; - icon_state = "right"; +/obj/machinery/door/window/right/directional/east{ name = "Engineering Reception"; req_access = list("away_maintenance") }, diff --git a/_maps/map_files/Basketball/beach_bums.dmm b/_maps/map_files/Basketball/beach_bums.dmm index 768a436e094..f5d5ecca73e 100644 --- a/_maps/map_files/Basketball/beach_bums.dmm +++ b/_maps/map_files/Basketball/beach_bums.dmm @@ -1,6 +1,6 @@ //MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE "af" = ( -/obj/item/bedsheet/dorms{ +/obj/effect/spawner/random/bedsheet{ pixel_x = 6; pixel_y = 11 }, @@ -340,7 +340,7 @@ /turf/open/misc/beach/sand, /area/centcom/basketball) "Jb" = ( -/obj/item/bedsheet/dorms{ +/obj/effect/spawner/random/bedsheet{ pixel_x = 6; pixel_y = 11 }, @@ -356,7 +356,7 @@ /turf/open/misc/beach/sand, /area/centcom/basketball) "Lu" = ( -/obj/item/bedsheet/dorms{ +/obj/effect/spawner/random/bedsheet{ pixel_x = 6; pixel_y = 11 }, diff --git a/_maps/map_files/Basketball/lusty_xenomorphs.dmm b/_maps/map_files/Basketball/lusty_xenomorphs.dmm index afcfdb58997..b5c8b5a6184 100644 --- a/_maps/map_files/Basketball/lusty_xenomorphs.dmm +++ b/_maps/map_files/Basketball/lusty_xenomorphs.dmm @@ -52,8 +52,7 @@ /turf/open/floor/iron/white, /area/centcom/basketball) "dM" = ( -/obj/machinery/door/window/brigdoor{ - dir = 8; +/obj/machinery/door/window/brigdoor/left/directional/west{ name = "Containment Pen" }, /turf/open/floor/iron/white, @@ -234,10 +233,7 @@ /area/centcom/basketball) "rU" = ( /obj/effect/turf_decal/delivery, -/obj/machinery/door/window/left/directional/north{ - base_state = "right"; - dir = 4; - icon_state = "right"; +/obj/machinery/door/window/right/directional/east{ name = "Containment Pen" }, /obj/machinery/door/poddoor/preopen{ @@ -291,14 +287,13 @@ /turf/closed/indestructible/fakeglass, /area/centcom/basketball) "zZ" = ( -/obj/effect/mapping_helpers/damaged_window, -/obj/structure/window/reinforced/fulltile, /obj/effect/particle_effect/water/extinguisher/stomach_acid, /obj/machinery/door/poddoor/preopen{ id = null; name = "Xenobiology Blast Door" }, -/turf/open/floor/engine, +/obj/effect/mapping_helpers/damaged_window, +/turf/closed/indestructible/fakeglass, /area/centcom/basketball) "Ax" = ( /obj/structure/alien/weeds, @@ -316,10 +311,7 @@ /area/centcom/basketball) "AI" = ( /obj/effect/turf_decal/delivery, -/obj/machinery/door/window/left/directional/north{ - base_state = "right"; - dir = 8; - icon_state = "right"; +/obj/machinery/door/window/right/directional/west{ name = "Containment Pen" }, /obj/machinery/door/poddoor/preopen{ @@ -390,8 +382,7 @@ /turf/open/floor/engine, /area/centcom/basketball) "Gi" = ( -/obj/machinery/door/window/brigdoor{ - dir = 4; +/obj/machinery/door/window/brigdoor/left/directional/east{ name = "Containment Pen" }, /turf/open/floor/iron/white, @@ -485,18 +476,24 @@ /obj/effect/landmark/basketball/team_spawn/home, /turf/open/floor/engine, /area/centcom/basketball) +"PN" = ( +/obj/machinery/door/poddoor/preopen{ + id = null; + name = "Xenobiology Blast Door" + }, +/turf/open/floor/engine, +/area/centcom/basketball) "PU" = ( /obj/structure/window/reinforced/spawner/directional/south, /turf/open/floor/engine, /area/centcom/basketball) "PW" = ( -/obj/effect/mapping_helpers/damaged_window, -/obj/structure/window/reinforced/fulltile, /obj/machinery/door/poddoor/preopen{ id = null; name = "Xenobiology Blast Door" }, -/turf/open/floor/engine, +/obj/effect/mapping_helpers/damaged_window, +/turf/closed/indestructible/fakeglass, /area/centcom/basketball) "Qh" = ( /obj/effect/turf_decal/stripes/corner{ @@ -866,7 +863,7 @@ uH Cw Vr Vr -PW +PN kT dr IA diff --git a/_maps/map_files/Basketball/soviet_bear.dmm b/_maps/map_files/Basketball/soviet_bear.dmm index b034f0c33c8..36f47288a03 100644 --- a/_maps/map_files/Basketball/soviet_bear.dmm +++ b/_maps/map_files/Basketball/soviet_bear.dmm @@ -159,11 +159,8 @@ /area/centcom/basketball) "ly" = ( /obj/structure/table/reinforced, -/obj/machinery/door/window/left/directional/west{ - base_state = "right"; - icon_state = "right"; - name = "Shooting Range"; - dir = 4 +/obj/machinery/door/window/right/directional/east{ + name = "Shooting Range" }, /obj/item/gun/ballistic/rifle/boltaction{ pixel_y = 10 @@ -247,9 +244,7 @@ pixel_y = 5 }, /obj/item/gun/ballistic/rifle/boltaction, -/obj/machinery/door/window/left/directional/west{ - base_state = "right"; - icon_state = "right"; +/obj/machinery/door/window/right/directional/west{ name = "Shooting Range" }, /turf/open/floor/iron/dark, @@ -522,9 +517,7 @@ /obj/item/gun/ballistic/rifle/boltaction{ pixel_y = 10 }, -/obj/machinery/door/window/left/directional/west{ - base_state = "right"; - icon_state = "right"; +/obj/machinery/door/window/right/directional/west{ name = "Shooting Range" }, /turf/open/floor/iron/dark, @@ -691,11 +684,8 @@ /area/centcom/basketball) "ZM" = ( /obj/structure/table/reinforced, -/obj/machinery/door/window/left/directional/west{ - base_state = "right"; - icon_state = "right"; - name = "Shooting Range"; - dir = 4 +/obj/machinery/door/window/right/directional/east{ + name = "Shooting Range" }, /obj/item/gun/ballistic/rifle/boltaction{ pixel_y = 5 diff --git a/_maps/map_files/Birdshot/birdshot.dmm b/_maps/map_files/Birdshot/birdshot.dmm index 3a7cbc96fe0..b2fad9e88d2 100644 --- a/_maps/map_files/Birdshot/birdshot.dmm +++ b/_maps/map_files/Birdshot/birdshot.dmm @@ -795,6 +795,7 @@ }, /obj/structure/cable, /obj/effect/turf_decal/siding/wideplating/dark, +/obj/machinery/firealarm/directional/west, /turf/open/floor/iron, /area/station/security) "apB" = ( @@ -1660,9 +1661,7 @@ /obj/effect/turf_decal/stripes/white/line{ dir = 8 }, -/obj/machinery/door/window/survival_pod{ - dir = 4 - }, +/obj/machinery/door/window/survival_pod/left/directional/east, /turf/open/floor/engine, /area/station/engineering/supermatter) "aJq" = ( @@ -2560,6 +2559,18 @@ /obj/effect/mapping_helpers/broken_floor, /turf/open/floor/plating, /area/station/maintenance/department/medical/central) +"bbK" = ( +/obj/structure/disposalpipe/segment, +/obj/effect/decal/cleanable/dirt, +/obj/structure/railing{ + dir = 6 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/item/kirbyplants/organic/applebush{ + pixel_y = 5 + }, +/turf/open/floor/wood, +/area/station/cargo/miningfoundry) "bbU" = ( /obj/effect/landmark/generic_maintenance_landmark, /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ @@ -3016,6 +3027,12 @@ }, /turf/open/floor/iron/dark/small, /area/station/science/xenobiology) +"bll" = ( +/obj/effect/turf_decal/tile/brown/opposingcorners, +/obj/structure/closet/crate, +/obj/effect/spawner/random/engineering/flashlight, +/turf/open/floor/iron, +/area/station/cargo/miningoffice) "blq" = ( /obj/structure/disposalpipe/segment, /obj/effect/landmark/start/hangover, @@ -3420,8 +3437,7 @@ /area/station/engineering/supermatter/room) "bsF" = ( /obj/structure/cable, -/obj/machinery/door/window/brigdoor/security/cell/left{ - dir = 4; +/obj/machinery/door/window/brigdoor/security/cell/left/directional/east{ id = "engicell"; name = "Cell Door"; req_access = list("security") @@ -4069,6 +4085,7 @@ /obj/effect/turf_decal/siding/green{ dir = 8 }, +/obj/machinery/firealarm/directional/west, /turf/open/floor/iron/cafeteria, /area/station/science/circuits) "bDN" = ( @@ -4614,6 +4631,13 @@ /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) "bPb" = ( /obj/structure/cable, /obj/structure/disposalpipe/segment{ @@ -5121,16 +5145,6 @@ name = "Custom Channel"; pixel_x = -10 }, -/obj/machinery/door/window{ - atom_integrity = 300; - base_state = "rightsecure"; - dir = 4; - icon_state = "rightsecure"; - layer = 4.1; - name = "Secondary AI Core Access"; - pixel_x = 4; - req_access = list("ai_upload") - }, /obj/item/radio/intercom/directional/south{ freerange = 1; frequency = 1447; @@ -5154,6 +5168,11 @@ }, /obj/structure/cable/multilayer/connected, /obj/effect/turf_decal/box/red, +/obj/machinery/door/window/brigdoor/right/directional/east{ + name = "Tertiary AI Core Access"; + req_access = list("ai_upload"); + pixel_x = 4 + }, /turf/open/floor/iron/dark, /area/station/ai_monitored/turret_protected/ai) "caI" = ( @@ -5167,16 +5186,6 @@ /turf/open/floor/iron/chapel, /area/station/maintenance/starboard/greater) "cbi" = ( -/obj/machinery/door/window{ - atom_integrity = 300; - base_state = "leftsecure"; - dir = 8; - icon_state = "leftsecure"; - layer = 4.1; - name = "Tertiary AI Core Access"; - pixel_x = -3; - req_access = list("ai_upload") - }, /obj/effect/landmark/start/ai/secondary, /obj/item/radio/intercom/directional/north{ freerange = 1; @@ -6603,14 +6612,10 @@ "cDH" = ( /obj/structure/table/reinforced, /obj/machinery/door/firedoor, -/obj/machinery/door/window/left/directional/west{ - base_state = "right"; - dir = 4; - icon_state = "right"; +/obj/machinery/door/window/right/directional/east{ name = "Outer Window" }, -/obj/machinery/door/window/brigdoor{ - dir = 8; +/obj/machinery/door/window/brigdoor/left/directional/west{ name = "Brig Control Desk"; req_access = list("armory") }, @@ -7051,6 +7056,7 @@ dir = 1 }, /obj/effect/turf_decal/tile/neutral/half/contrasted, +/obj/machinery/firealarm/directional/south, /turf/open/floor/iron, /area/station/security/courtroom) "cLH" = ( @@ -8592,6 +8598,11 @@ pixel_y = 26 }, /obj/structure/cable, +/obj/machinery/door/window/brigdoor/left/directional/west{ + name = "Secondary AI Core Access"; + req_access = list("ai_upload"); + pixel_x = -4 + }, /turf/open/floor/iron/dark, /area/station/ai_monitored/turret_protected/ai) "dov" = ( @@ -9288,7 +9299,7 @@ /area/station/maintenance/department/medical/central) "dBA" = ( /obj/structure/bed, -/obj/item/bedsheet/dorms, +/obj/effect/spawner/random/bedsheet, /obj/machinery/light/small/directional/east, /turf/open/floor/carpet/royalblack, /area/station/commons/dorms) @@ -10420,6 +10431,7 @@ /obj/effect/turf_decal/siding/red{ dir = 6 }, +/obj/machinery/firealarm/directional/south, /turf/open/floor/iron/white/small, /area/station/security/warden) "dXE" = ( @@ -11055,7 +11067,7 @@ /obj/structure/bed{ dir = 4 }, -/obj/item/bedsheet/dorms{ +/obj/effect/spawner/random/bedsheet{ dir = 4 }, /obj/machinery/light/small/directional/west, @@ -11856,8 +11868,7 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/table/reinforced, -/obj/machinery/door/window/left/directional/north{ - dir = 4; +/obj/machinery/door/window/left/directional/east{ name = "Engineering Desk"; req_access = list("engineering") }, @@ -12961,6 +12972,15 @@ /obj/item/stock_parts/cell/high, /turf/open/floor/circuit, /area/station/maintenance/port/aft) +"ePn" = ( +/obj/structure/disposalpipe/segment, +/obj/machinery/light/small/directional/south, +/obj/machinery/conveyor{ + dir = 8; + id = "mining" + }, +/turf/open/floor/iron, +/area/station/cargo/miningfoundry) "ePu" = ( /obj/effect/turf_decal/stripes/line{ dir = 1 @@ -13987,9 +14007,7 @@ "fjN" = ( /obj/effect/mapping_helpers/broken_floor, /obj/structure/window/reinforced/spawner/directional/north, -/obj/machinery/door/window/survival_pod{ - dir = 4 - }, +/obj/machinery/door/window/survival_pod/left/directional/east, /turf/open/floor/iron, /area/station/maintenance/fore/greater) "fjR" = ( @@ -15144,6 +15162,9 @@ }, /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 @@ -15978,9 +15999,8 @@ dir = 4 }, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/visible/layer2, -/obj/machinery/door/window/brigdoor/left/directional/east{ - atom_integrity = 300; - dir = 8 +/obj/machinery/door/window/brigdoor/left/directional/west{ + atom_integrity = 300 }, /obj/machinery/button/door/incinerator_vent_atmos_aux{ pixel_x = -8; @@ -16033,6 +16053,9 @@ /obj/machinery/airalarm/directional/west, /turf/open/floor/iron/white, /area/station/medical/medbay/central) +"fSe" = ( +/turf/closed/wall/rust, +/area/station/cargo/miningfoundry) "fSf" = ( /obj/structure/cable, /obj/effect/spawner/structure/window/reinforced, @@ -17716,6 +17739,15 @@ /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{ @@ -18079,13 +18111,6 @@ /obj/machinery/portable_atmospherics/canister/plasma, /turf/open/floor/plating, /area/station/engineering/atmos/storage/gas) -"gDR" = ( -/obj/structure/disposalpipe/segment, -/obj/structure/table/greyscale, -/obj/item/folder/yellow, -/obj/machinery/light/small/directional/south, -/turf/open/floor/plating, -/area/station/maintenance/port/fore) "gEc" = ( /obj/structure/closet/emcloset, /turf/open/floor/plating, @@ -18201,6 +18226,12 @@ }, /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) "gGB" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -18431,10 +18462,10 @@ /obj/machinery/door/airlock/maintenance{ name = "Maintenance" }, -/obj/effect/mapping_helpers/airlock/access/all/supply/general, /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" = ( @@ -19589,13 +19620,9 @@ /obj/effect/turf_decal/siding/wood{ dir = 9 }, -/obj/structure/rack{ - icon = 'icons/obj/fluff/general.dmi'; - icon_state = "minibar"; - name = "skeletal minibar" - }, /obj/item/storage/fancy/candle_box, /obj/machinery/light_switch/directional/west, +/obj/structure/rack/skeletal, /turf/open/floor/iron/grimy, /area/station/service/library) "hei" = ( @@ -19915,6 +19942,9 @@ /obj/effect/decal/cleanable/dirt, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/transport/power_rectifier{ + configured_transport_id = "bird_2" + }, /turf/open/floor/iron, /area/station/maintenance/department/medical/central) "hic" = ( @@ -20108,11 +20138,6 @@ /obj/machinery/meter, /turf/open/floor/iron/smooth, /area/station/engineering/supermatter/room) -"hlA" = ( -/obj/machinery/airalarm/directional/north, -/obj/machinery/newscaster/directional/west, -/turf/open/floor/wood, -/area/station/maintenance/port/fore) "hlJ" = ( /obj/machinery/atmospherics/pipe/smart/simple/dark/visible{ dir = 4 @@ -20323,6 +20348,16 @@ /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) "hpc" = ( /obj/machinery/atmospherics/pipe/smart/simple/yellow/visible, /obj/structure/cable, @@ -20835,6 +20870,13 @@ }, /turf/open/floor/iron, /area/station/hallway/secondary/exit/departure_lounge) +"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, @@ -21005,11 +21047,6 @@ }, /turf/open/floor/engine, /area/station/science/xenobiology) -"hAN" = ( -/obj/structure/cable, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/smooth, -/area/station/cargo/warehouse) "hAQ" = ( /obj/structure/table, /obj/effect/mapping_helpers/broken_floor, @@ -21065,15 +21102,11 @@ name = "Privacy Shutters" }, /obj/machinery/door/firedoor, -/obj/machinery/door/window/brigdoor{ - base_state = "rightsecure"; - dir = 4; - icon_state = "rightsecure"; +/obj/machinery/door/window/brigdoor/right/directional/east{ name = "Head of Personnel's Desk"; req_access = list("hop") }, -/obj/machinery/door/window/left/directional/north{ - dir = 8; +/obj/machinery/door/window/left/directional/west{ name = "Reception Window" }, /turf/open/floor/iron/textured_large, @@ -21574,14 +21607,6 @@ }, /turf/open/floor/iron, /area/station/commons/storage/art) -"hMq" = ( -/obj/machinery/atmospherics/pipe/smart/simple/general/visible{ - dir = 10 - }, -/obj/structure/table, -/obj/item/clothing/mask/cigarette, -/turf/open/floor/plating, -/area/station/maintenance/port/fore) "hMr" = ( /obj/effect/turf_decal/tile/dark_red/opposingcorners, /obj/structure/closet/secure_closet/security/sec, @@ -21597,17 +21622,6 @@ /obj/effect/decal/cleanable/dirt, /turf/open/floor/iron/dark, /area/station/science/xenobiology) -"hMw" = ( -/obj/effect/turf_decal/tile/brown/opposingcorners, -/obj/structure/closet/crate, -/obj/effect/spawner/random/engineering/flashlight, -/obj/effect/spawner/random/engineering/flashlight, -/obj/item/stack/cable_coil{ - pixel_x = 3; - pixel_y = -7 - }, -/turf/open/floor/iron, -/area/station/cargo/miningoffice) "hMz" = ( /obj/machinery/computer/order_console/cook, /turf/open/floor/iron/freezer, @@ -21785,6 +21799,7 @@ /obj/machinery/atmospherics/pipe/smart/simple/dark/hidden{ dir = 10 }, +/obj/machinery/firealarm/directional/north, /turf/open/floor/circuit, /area/station/tcommsat/server) "hQs" = ( @@ -22215,6 +22230,18 @@ }, /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, @@ -24102,6 +24129,12 @@ /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) "iJt" = ( /obj/machinery/door/airlock{ name = "Maintenance" @@ -24194,11 +24227,6 @@ /obj/effect/decal/cleanable/dirt, /turf/open/floor/plating, /area/station/maintenance/fore/greater) -"iKV" = ( -/obj/effect/mapping_helpers/broken_floor, -/obj/machinery/light/small/directional/north, -/turf/open/floor/wood, -/area/station/maintenance/port/fore) "iLc" = ( /obj/effect/turf_decal/siding/red{ dir = 4 @@ -24363,14 +24391,6 @@ /obj/effect/spawner/random/vending/snackvend, /turf/open/floor/plating, /area/station/maintenance/port/fore) -"iNL" = ( -/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/maintenance/port/fore) "iNO" = ( /obj/effect/turf_decal/stripes/white/line{ dir = 6 @@ -25268,15 +25288,6 @@ /obj/effect/landmark/start/captain, /turf/open/floor/iron/freezer, /area/station/command/heads_quarters/captain/private) -"jef" = ( -/obj/effect/turf_decal/stripes/corner, -/obj/effect/turf_decal/trimline/yellow/line{ - dir = 9 - }, -/obj/structure/cable, -/obj/machinery/atmospherics/components/trinary/filter/critical, -/turf/open/floor/iron/smooth, -/area/station/engineering/supermatter/room) "jeg" = ( /obj/effect/mapping_helpers/broken_floor, /obj/effect/decal/cleanable/dirt, @@ -25553,12 +25564,6 @@ /obj/effect/mapping_helpers/broken_floor, /turf/open/floor/iron, /area/station/commons) -"jkw" = ( -/obj/effect/mapping_helpers/broken_floor, -/obj/structure/table/greyscale, -/obj/item/folder/ancient_paperwork, -/turf/open/floor/wood, -/area/station/maintenance/port/fore) "jkz" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ dir = 8 @@ -25585,14 +25590,6 @@ /obj/structure/cable, /turf/open/floor/iron, /area/station/cargo/storage) -"jlb" = ( -/obj/structure/disposalpipe/segment{ - dir = 6 - }, -/obj/effect/mapping_helpers/broken_floor, -/obj/structure/chair, -/turf/open/floor/wood, -/area/station/maintenance/port/fore) "jlt" = ( /obj/structure/disposalpipe/segment{ dir = 4 @@ -25750,7 +25747,6 @@ /turf/open/floor/wood/tile, /area/station/command/corporate_showroom) "jns" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/chair/stool/directional/south, /obj/effect/decal/cleanable/dirt, /obj/machinery/holopad, @@ -25761,6 +25757,7 @@ /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ dir = 4 }, +/obj/machinery/firealarm/directional/south, /turf/open/floor/iron/smooth, /area/station/security/evidence) "jnS" = ( @@ -26076,6 +26073,7 @@ /obj/structure/bed, /obj/item/bedsheet/hop, /obj/effect/landmark/start/head_of_personnel, +/obj/machinery/firealarm/directional/south, /turf/open/floor/iron/grimy, /area/station/command/heads_quarters/hop) "jvB" = ( @@ -26110,6 +26108,20 @@ /obj/effect/landmark/generic_maintenance_landmark, /turf/open/floor/iron, /area/station/hallway/secondary/construction) +"jvR" = ( +/obj/structure/cable, +/obj/effect/turf_decal/tile/brown/opposingcorners, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/power/apc/auto_name/directional/north, +/obj/machinery/light_switch/directional/east, +/obj/structure/rack, +/obj/item/stack/cable_coil{ + pixel_x = 3; + pixel_y = -7 + }, +/obj/effect/spawner/random/engineering/flashlight, +/turf/open/floor/iron, +/area/station/cargo/miningoffice) "jwa" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -26139,6 +26151,16 @@ /obj/effect/mapping_helpers/broken_floor, /turf/open/floor/plating, /area/station/maintenance/starboard/aft) +"jwU" = ( +/obj/effect/mapping_helpers/broken_floor, +/obj/structure/sign/poster/random/directional/south, +/obj/machinery/conveyor{ + dir = 8; + id = "mining" + }, +/obj/machinery/bouldertech/refinery/smelter, +/turf/open/floor/iron, +/area/station/cargo/miningfoundry) "jwZ" = ( /obj/effect/turf_decal/stripes/white/line, /obj/structure/frame/machine, @@ -26501,18 +26523,6 @@ /obj/effect/decal/cleanable/dirt, /turf/open/floor/iron/smooth, /area/station/cargo/warehouse) -"jCR" = ( -/obj/structure/cable, -/obj/machinery/power/apc/auto_name/directional/north, -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ - dir = 8 - }, -/turf/open/floor/iron/smooth, -/area/station/cargo/warehouse) -"jCW" = ( -/obj/machinery/airalarm/directional/east, -/turf/open/floor/plating, -/area/station/cargo/warehouse) "jDa" = ( /obj/machinery/holopad, /turf/open/floor/wood/tile, @@ -26949,6 +26959,16 @@ /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 @@ -27342,12 +27362,6 @@ /obj/structure/broken_flooring/corner/directional/south, /turf/open/floor/plating, /area/station/maintenance/hallway/abandoned_command) -"jPm" = ( -/obj/machinery/light/small/directional/east, -/obj/machinery/light_switch/directional/east, -/obj/effect/mapping_helpers/turn_off_lights_with_lightswitch, -/turf/open/floor/iron/smooth, -/area/station/cargo/warehouse) "jPq" = ( /obj/structure/disposalpipe/segment, /obj/effect/spawner/structure/window/reinforced/tinted, @@ -28396,13 +28410,11 @@ /turf/open/floor/plating, /area/station/engineering/atmos) "kkd" = ( -/obj/machinery/door/window/brigdoor{ - dir = 8; +/obj/machinery/door/window/brigdoor/left/directional/west{ name = "Creature Pen"; req_access = list("research") }, -/obj/machinery/door/window/brigdoor{ - dir = 4; +/obj/machinery/door/window/brigdoor/left/directional/east{ name = "Creature Pen"; req_access = list("research") }, @@ -28413,14 +28425,6 @@ /obj/effect/spawner/structure/window/reinforced, /turf/open/floor/plating, /area/station/command/teleporter) -"kkl" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/effect/mapping_helpers/broken_floor, -/obj/structure/sign/poster/random/directional/east, -/turf/open/floor/wood, -/area/station/maintenance/port/fore) "kkm" = ( /obj/machinery/door/airlock/medical/glass{ name = "Primary Treatment Centre" @@ -29723,6 +29727,7 @@ /obj/structure/table, /obj/effect/spawner/random/maintenance, /obj/machinery/light/small/directional/west, +/obj/machinery/firealarm/directional/west, /turf/open/floor/iron, /area/station/commons/dorms) "kIe" = ( @@ -31232,15 +31237,6 @@ dir = 1 }, /area/station/hallway/secondary/exit/departure_lounge) -"lgT" = ( -/obj/structure/cable, -/obj/effect/turf_decal/tile/brown/opposingcorners, -/obj/effect/decal/cleanable/dirt, -/obj/item/kirbyplants/random, -/obj/machinery/power/apc/auto_name/directional/north, -/obj/machinery/light_switch/directional/east, -/turf/open/floor/iron, -/area/station/cargo/miningoffice) "lgV" = ( /obj/structure/table, /obj/item/camera, @@ -31478,7 +31474,6 @@ /obj/structure/disposalpipe/segment{ dir = 4 }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/effect/turf_decal/tile/brown/half/contrasted{ dir = 1 }, @@ -32319,6 +32314,7 @@ /obj/item/stack/sheet/titaniumglass, /obj/effect/turf_decal/tile/yellow/opposingcorners, /obj/machinery/light/directional/north, +/obj/machinery/firealarm/directional/north, /turf/open/floor/iron, /area/station/engineering/atmos/storage/gas) "lAO" = ( @@ -32791,8 +32787,7 @@ /obj/machinery/atmospherics/pipe/smart/simple/general/visible, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/door/window/left/directional/south{ - dir = 4; +/obj/machinery/door/window/left/directional/east{ name = "Maximum Security Test Chamber"; req_access = list("xenobiology") }, @@ -33249,6 +33244,7 @@ /obj/structure/table, /obj/effect/spawner/random/maintenance, /obj/machinery/light/small/directional/east, +/obj/machinery/firealarm/directional/east, /turf/open/floor/iron, /area/station/commons/dorms) "lQh" = ( @@ -34096,6 +34092,14 @@ }, /turf/open/floor/iron, /area/station/hallway/primary/port) +"mdX" = ( +/obj/machinery/light/small/directional/north, +/obj/machinery/conveyor_switch{ + id = "mining"; + pixel_x = -10 + }, +/turf/open/floor/wood, +/area/station/cargo/miningfoundry) "meu" = ( /turf/closed/wall, /area/station/command/heads_quarters/captain) @@ -35395,20 +35399,6 @@ /obj/structure/sign/departments/cargo/directional/west, /turf/open/floor/iron, /area/station/hallway/primary/central/fore) -"mDC" = ( -/obj/structure/closet/crate{ - name = "Game Supplies" - }, -/obj/item/toy/figure/lawyer, -/obj/item/toy/figure/ian, -/obj/item/toy/figure/hop, -/obj/item/toy/figure/syndie, -/obj/item/toy/figure/roboticist, -/obj/item/toy/figure/md, -/obj/item/clothing/head/collectable/paper, -/obj/item/toy/toy_dagger, -/turf/open/floor/wood, -/area/station/maintenance/port/fore) "mDG" = ( /obj/effect/turf_decal/tile/dark_red/half/contrasted{ dir = 1 @@ -35816,10 +35806,7 @@ location = "QM #1" }, /obj/effect/turf_decal/delivery, -/mob/living/simple_animal/bot/mulebot{ - home_destination = "QM #1"; - suffix = "#1" - }, +/mob/living/simple_animal/bot/mulebot, /turf/open/floor/iron, /area/station/cargo/storage) "mKD" = ( @@ -36445,6 +36432,15 @@ /obj/effect/decal/cleanable/dirt, /turf/open/floor/plating, /area/station/security/prison/safe) +"mWN" = ( +/obj/effect/turf_decal/stripes/corner, +/obj/effect/turf_decal/trimline/yellow/line{ + dir = 9 + }, +/obj/structure/cable, +/obj/machinery/atmospherics/components/trinary/filter/critical, +/turf/open/floor/iron/smooth, +/area/station/engineering/supermatter/room) "mWY" = ( /obj/effect/turf_decal/tile/dark_red/opposingcorners, /obj/structure/chair/sofa/bench/left{ @@ -36462,14 +36458,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/plating, /area/station/maintenance/starboard/aft) -"mXo" = ( -/obj/machinery/atmospherics/pipe/smart/manifold/general/visible{ - dir = 1 - }, -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/ash, -/turf/open/floor/iron, -/area/station/maintenance/port/fore) "mXt" = ( /obj/machinery/rnd/production/techfab/department/medical, /obj/effect/turf_decal/stripes/box, @@ -36985,12 +36973,11 @@ /area/station/maintenance/starboard/greater) "nhC" = ( /obj/structure/cable, -/obj/machinery/door/window/brigdoor{ - dir = 1; +/obj/machinery/door/window/brigdoor/left/directional/north{ name = "Creature Pen"; req_access = list("research") }, -/obj/machinery/door/window/brigdoor{ +/obj/machinery/door/window/brigdoor/left/directional/south{ name = "Creature Pen"; req_access = list("research") }, @@ -37543,6 +37530,11 @@ }, /turf/open/floor/iron, /area/station/hallway/primary/port) +"nsX" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, +/turf/open/floor/wood, +/area/station/cargo/miningfoundry) "nta" = ( /obj/machinery/photocopier, /turf/open/floor/plating, @@ -38149,6 +38141,13 @@ "nCH" = ( /turf/closed/wall/r_wall, /area/station/security) +"nCL" = ( +/obj/effect/mapping_helpers/broken_floor, +/obj/machinery/transport/power_rectifier{ + configured_transport_id = "bird_2" + }, +/turf/open/floor/iron, +/area/station/maintenance/port/aft) "nCR" = ( /obj/effect/decal/cleanable/dirt, /obj/effect/turf_decal/stripes/line, @@ -38675,6 +38674,12 @@ /obj/effect/spawner/random/structure/grille, /turf/open/floor/plating, /area/station/maintenance/central/greater) +"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) "nLN" = ( /obj/structure/cable, /obj/structure/disposalpipe/segment, @@ -39018,6 +39023,7 @@ /obj/effect/decal/cleanable/cobweb, /obj/effect/mapping_helpers/broken_floor, /obj/structure/sign/poster/official/random/directional/north, +/obj/machinery/firealarm/directional/west, /turf/open/floor/wood/parquet, /area/station/service/library) "nTi" = ( @@ -39062,6 +39068,12 @@ /obj/machinery/camera/autoname/directional/south, /turf/open/floor/iron, /area/station/hallway/secondary/dock) +"nTy" = ( +/obj/machinery/transport/power_rectifier{ + configured_transport_id = "bird_1" + }, +/turf/open/floor/plating, +/area/station/security/tram) "nTz" = ( /obj/effect/turf_decal/tile/yellow/anticorner/contrasted, /obj/machinery/chem_dispenser{ @@ -39106,6 +39118,13 @@ }, /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) "nUG" = ( /obj/structure/cable, /obj/structure/disposalpipe/segment, @@ -39784,7 +39803,7 @@ /area/station/security/checkpoint/customs) "ohO" = ( /obj/structure/bed, -/obj/item/bedsheet/dorms, +/obj/effect/spawner/random/bedsheet, /obj/machinery/light/small/directional/east, /turf/open/floor/carpet/red, /area/station/commons/dorms) @@ -40458,6 +40477,12 @@ }, /turf/open/floor/iron, /area/station/cargo/storage) +"ouT" = ( +/obj/structure/cable, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/airalarm/directional/west, +/turf/open/floor/iron/smooth, +/area/station/cargo/warehouse) "ouY" = ( /obj/effect/decal/cleanable/dirt, /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, @@ -40563,11 +40588,6 @@ /obj/machinery/door/firedoor, /turf/open/floor/iron/dark, /area/station/medical/medbay/central) -"owQ" = ( -/obj/effect/decal/cleanable/dirt, -/obj/structure/chair/stool/directional/east, -/turf/open/floor/wood, -/area/station/maintenance/port/fore) "owR" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/effect/turf_decal/tile/neutral{ @@ -41171,6 +41191,7 @@ /obj/machinery/camera/autoname/directional/east, /obj/item/wrench, /obj/item/paper/fluff/jobs/engineering/frequencies, +/obj/machinery/firealarm/directional/east, /turf/open/floor/circuit, /area/station/tcommsat/server) "oJz" = ( @@ -42644,6 +42665,10 @@ }, /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{ @@ -43015,8 +43040,7 @@ }, /obj/structure/cable, /obj/effect/decal/cleanable/dirt, -/obj/machinery/door/window/brigdoor{ - dir = 4; +/obj/machinery/door/window/brigdoor/left/directional/east{ name = "Secure Creature Pen"; req_access = list("research") }, @@ -43781,10 +43805,6 @@ }, /turf/open/floor/iron/dark/smooth_large, /area/station/security/execution/education) -"pBV" = ( -/obj/structure/filingcabinet/filingcabinet, -/turf/open/floor/plating, -/area/station/maintenance/port/fore) "pCa" = ( /obj/structure/disposalpipe/segment{ dir = 6 @@ -44142,6 +44162,30 @@ /obj/structure/reagent_dispensers/plumbed, /turf/open/floor/iron/kitchen/small, /area/station/security/prison/mess) +"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) "pIm" = ( /obj/structure/cable, /obj/structure/disposalpipe/segment{ @@ -44613,6 +44657,7 @@ }, /obj/machinery/mechpad, /obj/machinery/light/small/directional/north, +/obj/machinery/firealarm/directional/north, /turf/open/floor/iron/smooth_large, /area/station/science/robotics/mechbay) "pQE" = ( @@ -45148,8 +45193,7 @@ "pXL" = ( /obj/structure/disposalpipe/segment, /obj/effect/turf_decal/tile/neutral/fourcorners, -/obj/machinery/door/window/right/directional/south{ - dir = 1; +/obj/machinery/door/window/right/directional/north{ name = "Medical Deliveries"; req_access = list("medical") }, @@ -45321,9 +45365,6 @@ /obj/machinery/light/floor, /turf/open/floor/iron/dark, /area/station/science/server) -"qbg" = ( -/turf/open/floor/iron/smooth, -/area/station/cargo/warehouse) "qbj" = ( /obj/effect/turf_decal/tile/dark_red/opposingcorners, /obj/structure/closet/secure_closet/security/sec, @@ -45355,12 +45396,6 @@ /obj/effect/landmark/start/hangover, /turf/open/floor/grass, /area/station/service/hydroponics/garden/monastery) -"qbu" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/mapping_helpers/broken_floor, -/obj/structure/chair/stool/directional/east, -/turf/open/floor/wood, -/area/station/maintenance/port/fore) "qbw" = ( /obj/structure/disposalpipe/segment, /obj/structure/cable, @@ -45438,14 +45473,6 @@ /obj/effect/landmark/navigate_destination/dockarrival, /turf/open/floor/iron, /area/station/hallway/secondary/entry) -"qcN" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/mapping_helpers/broken_floor, -/obj/structure/table/greyscale, -/obj/item/folder/red, -/obj/item/toy/figure/detective, -/turf/open/floor/wood, -/area/station/maintenance/port/fore) "qcQ" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -45454,18 +45481,6 @@ }, /turf/open/floor/iron, /area/station/hallway/primary/aft) -"qcU" = ( -/obj/structure/disposalpipe/segment, -/obj/effect/decal/cleanable/dirt, -/obj/effect/mapping_helpers/broken_floor, -/obj/structure/table/greyscale, -/obj/item/folder/white, -/obj/item/storage/dice{ - pixel_x = -16; - pixel_y = -6 - }, -/turf/open/floor/wood, -/area/station/maintenance/port/fore) "qcX" = ( /obj/structure/flora/bush/flowers_yw/style_random, /obj/structure/window/reinforced/spawner/directional/east, @@ -46561,6 +46576,18 @@ /obj/machinery/camera/autoname/directional/north, /turf/open/floor/wood/parquet, /area/station/service/theater) +"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) "quo" = ( /obj/structure/sign/poster/official/random/directional/north, /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ @@ -46970,11 +46997,6 @@ /obj/structure/table, /turf/open/floor/plating, /area/station/maintenance/port/greater) -"qBb" = ( -/obj/item/kirbyplants/organic/applebush, -/obj/machinery/light_switch/directional/north, -/turf/open/floor/wood, -/area/station/maintenance/port/fore) "qBc" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -47207,7 +47229,6 @@ /turf/open/misc/sandy_dirt, /area/station/security/tram) "qDP" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/chair/stool/directional/north, /obj/effect/landmark/event_spawn, /turf/open/floor/iron, @@ -47854,13 +47875,6 @@ /obj/machinery/airalarm/directional/south, /turf/open/floor/iron/dark/small, /area/station/medical/chemistry) -"qQt" = ( -/obj/effect/mapping_helpers/broken_floor, -/obj/structure/table/greyscale, -/obj/item/folder/blue, -/obj/structure/sign/poster/random/directional/south, -/turf/open/floor/wood, -/area/station/maintenance/port/fore) "qQv" = ( /turf/open/floor/iron, /area/station/security/prison/rec) @@ -49012,6 +49026,39 @@ /obj/structure/broken_flooring/corner/directional/south, /turf/open/floor/plating, /area/station/maintenance/port/aft) +"rhm" = ( +/obj/machinery/atmospherics/pipe/smart/simple/general/visible{ + dir = 10 + }, +/obj/structure/table, +/obj/item/clothing/mask/cigarette, +/obj/item/toy/toy_dagger, +/obj/item/clothing/head/collectable/paper, +/obj/item/toy/figure/roboticist{ + pixel_x = 6; + pixel_y = 6 + }, +/obj/item/toy/figure/syndie{ + pixel_y = 5; + pixel_x = -6 + }, +/obj/item/toy/figure/md{ + pixel_x = 10 + }, +/obj/item/toy/figure/hop{ + pixel_x = 2; + pixel_y = -2 + }, +/obj/item/toy/figure/ian{ + pixel_x = -5; + pixel_y = -1 + }, +/obj/item/toy/figure/lawyer{ + pixel_x = -10 + }, +/obj/item/toy/figure/detective, +/turf/open/floor/plating, +/area/station/maintenance/port/fore) "rho" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -49153,10 +49200,6 @@ }, /turf/open/floor/iron, /area/station/hallway/primary/port) -"rjP" = ( -/obj/structure/disposalpipe/segment, -/turf/closed/wall, -/area/station/maintenance/port/fore) "rkb" = ( /obj/effect/turf_decal/siding/wood{ dir = 4 @@ -49748,6 +49791,7 @@ pixel_y = -2 }, /obj/effect/decal/cleanable/dirt, +/obj/machinery/firealarm/directional/south, /turf/open/floor/iron, /area/station/science/lower) "ruC" = ( @@ -49825,8 +49869,7 @@ /area/station/engineering/storage/tech) "rvX" = ( /obj/structure/table/reinforced, -/obj/machinery/door/window/left/directional/west{ - dir = 2; +/obj/machinery/door/window/left/directional/south{ name = "Genetics Desk"; req_access = list("genetics") }, @@ -50077,6 +50120,15 @@ 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) "rzR" = ( /obj/effect/decal/cleanable/dirt, /obj/machinery/holopad, @@ -50454,8 +50506,7 @@ /obj/structure/disposalpipe/segment{ dir = 4 }, -/obj/machinery/door/window/right/directional/north{ - dir = 4; +/obj/machinery/door/window/right/directional/east{ name = "Research Delivery"; req_access = list("science") }, @@ -52272,6 +52323,7 @@ /obj/item/clothing/mask/bandana/skull, /obj/effect/mapping_helpers/broken_floor, /obj/item/toy/basketball, +/obj/machinery/firealarm/directional/east, /turf/open/floor/iron, /area/station/hallway/secondary/recreation) "sih" = ( @@ -54352,8 +54404,7 @@ /area/space/nearstation) "sRv" = ( /obj/structure/table/reinforced, -/obj/machinery/door/window/left/directional/north{ - dir = 8; +/obj/machinery/door/window/left/directional/west{ name = "Hydroponics Desk"; req_access = list("hydroponics") }, @@ -54448,7 +54499,6 @@ /turf/open/floor/iron, /area/station/cargo/sorting) "sSA" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/table, /obj/item/folder/yellow, /turf/open/floor/iron, @@ -54552,14 +54602,6 @@ /obj/machinery/telecomms/bus/preset_one, /turf/open/floor/circuit, /area/station/tcommsat/server) -"sTN" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 1 - }, -/obj/effect/decal/cleanable/dirt, -/obj/machinery/firealarm/directional/east, -/turf/open/floor/iron/smooth, -/area/station/cargo/warehouse) "sTR" = ( /obj/structure/cable, /obj/effect/mapping_helpers/airlock/access/all/medical/general, @@ -54993,8 +55035,7 @@ pixel_x = 4; pixel_y = 3 }, -/obj/machinery/door/window/left/directional/south{ - dir = 1; +/obj/machinery/door/window/left/directional/north{ name = "Research Lab Desk"; req_access = list("science") }, @@ -55106,6 +55147,16 @@ /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) "tdF" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -55278,8 +55329,7 @@ /obj/item/folder{ pixel_x = -6 }, -/obj/machinery/door/window/left/directional/west{ - dir = 4; +/obj/machinery/door/window/left/directional/east{ name = "Robotics Desk"; req_access = list("robotics") }, @@ -57251,6 +57301,18 @@ }, /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) "tPd" = ( /obj/structure/chair/sofa/left/maroon{ dir = 1 @@ -57498,6 +57560,7 @@ dir = 4 }, /obj/structure/flora/bush/flowers_pp/style_random, +/obj/machinery/firealarm/directional/east, /turf/open/floor/grass, /area/station/service/hydroponics/garden/monastery) "tTR" = ( @@ -57796,6 +57859,18 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/hallway/primary/port) +"tYI" = ( +/obj/machinery/atmospherics/pipe/smart/manifold/general/visible{ + dir = 1 + }, +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/ash, +/obj/item/storage/dice{ + pixel_x = -16; + pixel_y = -6 + }, +/turf/open/floor/iron, +/area/station/maintenance/port/fore) "tYL" = ( /obj/effect/decal/cleanable/dirt, /turf/open/floor/plating, @@ -57942,11 +58017,6 @@ /obj/structure/flora/tree/stump, /turf/open/floor/grass, /area/station/service/hydroponics/garden/monastery) -"uav" = ( -/obj/structure/chair/stool/directional/west, -/obj/structure/sign/poster/random/directional/south, -/turf/open/floor/wood, -/area/station/maintenance/port/fore) "uax" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -58569,6 +58639,10 @@ }, /turf/open/floor/iron/grimy, /area/station/tcommsat/server) +"uki" = ( +/obj/structure/disposalpipe/segment, +/turf/closed/wall, +/area/station/cargo/miningfoundry) "uku" = ( /obj/machinery/computer/crew{ dir = 8 @@ -59124,6 +59198,14 @@ /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{ @@ -59196,9 +59278,7 @@ "uwH" = ( /obj/effect/mapping_helpers/broken_floor, /obj/structure/window/reinforced/spawner/directional/south, -/obj/machinery/door/window/survival_pod{ - dir = 8 - }, +/obj/machinery/door/window/survival_pod/left/directional/west, /obj/effect/decal/cleanable/dirt, /turf/open/floor/plating, /area/station/maintenance/fore/greater) @@ -60780,12 +60860,11 @@ /area/station/maintenance/aft) "uXV" = ( /obj/structure/cable, -/obj/machinery/door/window/brigdoor{ +/obj/machinery/door/window/brigdoor/left/directional/south{ name = "Creature Pen"; req_access = list("research") }, -/obj/machinery/door/window/brigdoor{ - dir = 1; +/obj/machinery/door/window/brigdoor/left/directional/north{ name = "Creature Pen"; req_access = list("research") }, @@ -61084,6 +61163,21 @@ 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) "vdm" = ( /obj/effect/decal/cleanable/dirt, /obj/structure/broken_flooring/pile/directional/east, @@ -61236,7 +61330,7 @@ dir = 8 }, /obj/machinery/button/flasher{ - id = "IsolationFlash"; + id = "IsolationFlash2"; pixel_x = 28 }, /obj/effect/decal/cleanable/dirt, @@ -62084,6 +62178,18 @@ }, /turf/open/space/basic, /area/space/nearstation) +"vrW" = ( +/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 = 4 + }, +/obj/effect/turf_decal/stripes/white/line{ + dir = 4 + }, +/turf/open/floor/iron/smooth, +/area/station/cargo/warehouse) "vrY" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -62251,6 +62357,13 @@ /obj/effect/mapping_helpers/airlock/access/all/science/xenobio, /turf/open/floor/catwalk_floor/iron, /area/station/science/xenobiology) +"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) "vuK" = ( /obj/structure/cable, /obj/structure/table/reinforced, @@ -62569,7 +62682,8 @@ /obj/machinery/door/airlock/command{ name = "Centcom Dock" }, -/obj/effect/mapping_helpers/airlock/access/all/command/general, +/obj/effect/mapping_helpers/airlock/access/any/command/general, +/obj/effect/mapping_helpers/airlock/access/any/admin/general, /turf/open/floor/iron/textured_half, /area/station/command/corporate_dock) "vzY" = ( @@ -62987,8 +63101,7 @@ /area/station/security/office) "vHk" = ( /obj/structure/disposalpipe/segment, -/obj/machinery/door/window/left/directional/south{ - dir = 4; +/obj/machinery/door/window/left/directional/east{ name = "Mass Driver Door"; req_access = list("ordnance") }, @@ -63835,10 +63948,7 @@ name = "justice gas pump" }, /obj/item/wrench, -/obj/machinery/door/window/left/directional/west{ - base_state = "right"; - dir = 4; - icon_state = "right"; +/obj/machinery/door/window/right/directional/east{ name = "Gas Ports" }, /turf/open/floor/plating, @@ -64006,13 +64116,11 @@ /turf/open/space/basic, /area/space) "vWI" = ( -/obj/machinery/door/window/brigdoor{ - dir = 4; +/obj/machinery/door/window/brigdoor/left/directional/east{ name = "Creature Pen"; req_access = list("research") }, -/obj/machinery/door/window/brigdoor{ - dir = 8; +/obj/machinery/door/window/brigdoor/left/directional/west{ name = "Creature Pen"; req_access = list("research") }, @@ -64391,7 +64499,6 @@ /turf/open/floor/plating, /area/station/maintenance/fore/greater) "wcP" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/modular_computer/preset/cargochat/cargo, /turf/open/floor/iron, /area/station/cargo/sorting) @@ -65328,6 +65435,11 @@ }, /turf/open/floor/iron/dark, /area/station/engineering/atmos) +"wta" = ( +/obj/structure/railing/corner/end/flip, +/obj/effect/mapping_helpers/broken_floor, +/turf/open/floor/plating, +/area/station/cargo/miningfoundry) "wtc" = ( /obj/structure/cable, /obj/structure/window/reinforced/spawner/directional/north, @@ -65953,7 +66065,9 @@ /turf/open/floor/iron/smooth, /area/station/engineering/supermatter/room) "wCt" = ( -/obj/machinery/flasher/directional/east, +/obj/machinery/flasher/directional/east{ + id = "hopflash" + }, /turf/open/floor/iron/half, /area/station/hallway/primary/central/fore) "wCx" = ( @@ -66295,10 +66409,11 @@ }, /area/station/science/xenobiology) "wIm" = ( -/obj/effect/mapping_helpers/airlock/access/all/command/general, /obj/machinery/door/airlock/hatch{ name = "Centcom Dock" }, +/obj/effect/mapping_helpers/airlock/access/any/command/general, +/obj/effect/mapping_helpers/airlock/access/any/admin/general, /turf/open/floor/plating, /area/station/maintenance/department/science/xenobiology) "wIp" = ( @@ -67936,6 +68051,7 @@ /area/station/service/library) "xeP" = ( /obj/structure/table/wood, +/obj/machinery/firealarm/directional/west, /turf/open/floor/wood, /area/station/service/chapel/office) "xeT" = ( @@ -67965,8 +68081,7 @@ "xeX" = ( /obj/structure/disposalpipe/segment, /obj/structure/table/reinforced, -/obj/machinery/door/window/left/directional/west{ - dir = 1; +/obj/machinery/door/window/left/directional/north{ name = "Genetics Desk"; req_access = list("genetics") }, @@ -68908,10 +69023,7 @@ "xrX" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/door/window/left/directional/west{ - base_state = "right"; - dir = 2; - icon_state = "right"; +/obj/machinery/door/window/right/directional/south{ layer = 3.1; name = "Upload Console Window"; req_access = list("ai_upload") @@ -69220,6 +69332,12 @@ "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) "xvT" = ( /turf/closed/wall/r_wall, /area/station/ai_monitored/turret_protected/aisat/maint) @@ -69285,6 +69403,9 @@ /obj/machinery/light/small/directional/west, /turf/open/floor/plating, /area/station/maintenance/fore/greater) +"xwz" = ( +/turf/closed/wall, +/area/station/cargo/miningfoundry) "xwH" = ( /obj/structure/barricade/wooden/crude, /turf/open/floor/plating, @@ -69955,7 +70076,7 @@ /obj/structure/bed{ dir = 4 }, -/obj/item/bedsheet/dorms{ +/obj/effect/spawner/random/bedsheet{ dir = 4 }, /obj/machinery/light/small/directional/west, @@ -71731,12 +71852,6 @@ /obj/effect/mapping_helpers/mail_sorting/service/bar, /turf/open/floor/plating, /area/station/maintenance/central/greater) -"ydA" = ( -/obj/effect/mapping_helpers/broken_floor, -/obj/structure/chair/stool/directional/west, -/obj/structure/sign/poster/random/directional/east, -/turf/open/floor/wood, -/area/station/maintenance/port/fore) "ydH" = ( /obj/effect/turf_decal/box/corners, /obj/effect/turf_decal/box/corners{ @@ -72041,10 +72156,7 @@ "yha" = ( /obj/structure/cable, /obj/structure/table, -/obj/machinery/door/window{ - base_state = "right"; - dir = 1; - icon_state = "right"; +/obj/machinery/door/window/right/directional/north{ name = "Core Modules"; req_access = list("captain") }, @@ -81688,7 +81800,7 @@ xZV xYG xYG wHh -jef +mWN hlw diK aII @@ -82766,7 +82878,7 @@ iVK ixX jhC lOj -hMw +bll rgo imS lOj @@ -83798,7 +83910,7 @@ hNZ thM kuy lOj -lgT +jvR jir lPi uzJ @@ -85335,7 +85447,7 @@ hyO roi jCi nPX -hAN +ouT jMb kzI kzI @@ -85849,7 +85961,7 @@ slY hfC slY jjq -jCR +hyb jNc qSH vNv @@ -86100,14 +86212,14 @@ dDB dDB slY mEk -mXo +tYI nEA slY oPi xOm pAU -qbg -rif +nLH +nUx rie ipd rTA @@ -86356,15 +86468,15 @@ dDB dDB dDB slY -hMq +rhm cis slY slY oPo xOm -sTN -jCW -jPm +tdD +vrW +qul rif tro rTA @@ -86618,10 +86730,10 @@ slY slY lbW dRD -slY -slY -slY -ueX +xwz +xwz +gxr +fSe ibe ipP rST @@ -86697,7 +86809,7 @@ dwa dBr eWB lzM -aFR +nTy mnb cDt xpV @@ -86874,13 +86986,13 @@ blb dDB slY ohb -slY -ueX -pBV -mDC -slY -slY -slY +xwz +fSe +pIi +tPa +xwz +xwz +mTl rST sgL swO @@ -87131,12 +87243,12 @@ blb dDB ueX xpl -slY -hlA -qbu -qbu -owQ -slY +xwz +gGw +nsX +hoV +vuH +xwz rFa rTD iWb @@ -87388,12 +87500,12 @@ blb dDB slY mFA -slY -iKV -jkw -qcN -qQt -slY +xwz +mdX +fCd +iJh +jwU +xwz rFP rTU sgR @@ -87645,12 +87757,12 @@ blb dDB slY xpl -iNL -kPW -jlb -qcU -gDR -rjP +uuR +wta +jIH +bbK +ePn +uki rFW bCZ lkG @@ -87902,12 +88014,12 @@ mEB ueX slY ohl -slY -qBb -kkl -ydA -uav -slY +xwz +pjG +hZe +bOY +rzL +xwz rGq rUt sgR @@ -88159,12 +88271,12 @@ hNo wZF wZF had -slY -slY -xZh -slY -ueX -slY +xwz +xwz +xvJ +xwz +fSe +xwz xng pjL llN @@ -88420,7 +88532,7 @@ pJQ wZF pqv wZF -sxA +vdl slY ueX rVQ @@ -91333,7 +91445,7 @@ trp trp trp trp -nFu +nCL xqd xul trp diff --git a/_maps/map_files/Deathmatch/Maint_Mania.dmm b/_maps/map_files/Deathmatch/Maint_Mania.dmm new file mode 100644 index 00000000000..ec04776ae83 --- /dev/null +++ b/_maps/map_files/Deathmatch/Maint_Mania.dmm @@ -0,0 +1,1499 @@ +//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE +"aD" = ( +/turf/closed/indestructible/reinforced, +/area/deathmatch) +"aP" = ( +/obj/machinery/door/airlock/centcom, +/turf/open/space/basic, +/area/deathmatch) +"bI" = ( +/obj/machinery/light/no_nightlight/directional/north, +/turf/open/indestructible, +/area/deathmatch) +"cn" = ( +/turf/open/indestructible, +/area/deathmatch) +"cx" = ( +/obj/machinery/vending/wallmed/directional/north, +/turf/open/indestructible, +/area/deathmatch) +"cy" = ( +/obj/structure/table/reinforced/ctf, +/obj/item/gun/ballistic/shotgun/riot, +/turf/open/indestructible, +/area/deathmatch) +"eX" = ( +/obj/item/ammo_casing/shotgun/frag12, +/turf/open/indestructible, +/area/deathmatch) +"fh" = ( +/obj/structure/table/reinforced/ctf, +/obj/item/storage/backpack/duffelbag/syndie/ammo, +/turf/open/indestructible, +/area/deathmatch) +"ga" = ( +/obj/structure/lattice, +/turf/open/space/basic, +/area/template_noop) +"gJ" = ( +/obj/item/ammo_casing/shotgun/stunslug, +/turf/open/indestructible, +/area/deathmatch) +"ho" = ( +/obj/effect/spawner/structure/window/reinforced/indestructible, +/turf/open/floor/plating, +/area/deathmatch) +"hB" = ( +/turf/closed/indestructible/fakedoor, +/area/deathmatch) +"hN" = ( +/obj/structure/lattice, +/obj/effect/decal/cleanable/dirt/dust, +/turf/template_noop, +/area/template_noop) +"ih" = ( +/obj/item/reagent_containers/pill/maintenance, +/turf/open/indestructible, +/area/deathmatch) +"iC" = ( +/obj/machinery/light/small/directional/south, +/obj/structure/table/reinforced, +/turf/open/indestructible, +/area/deathmatch) +"jc" = ( +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/indestructible, +/area/deathmatch) +"jX" = ( +/obj/machinery/light/small/directional/north, +/turf/open/indestructible, +/area/deathmatch) +"jY" = ( +/obj/item/stack/medical/gauze{ + amount = 1 + }, +/turf/open/indestructible, +/area/deathmatch) +"ka" = ( +/obj/effect/decal/cleanable/blood/old, +/turf/open/indestructible, +/area/deathmatch) +"kp" = ( +/obj/effect/turf_decal/stripes/corner{ + dir = 4 + }, +/turf/open/indestructible, +/area/deathmatch) +"kx" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/effect/landmark/deathmatch_player_spawn, +/turf/open/indestructible, +/area/deathmatch) +"lA" = ( +/obj/effect/turf_decal/stripes/corner{ + dir = 1 + }, +/turf/open/indestructible, +/area/deathmatch) +"lJ" = ( +/obj/item/crowbar, +/obj/structure/table/reinforced, +/turf/open/indestructible, +/area/deathmatch) +"lN" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/turf_decal/caution/stand_clear, +/turf/open/indestructible, +/area/deathmatch) +"mS" = ( +/obj/effect/turf_decal/caution/stand_clear, +/turf/open/indestructible, +/area/deathmatch) +"mZ" = ( +/obj/structure/grille, +/turf/open/indestructible, +/area/deathmatch) +"nQ" = ( +/obj/effect/decal/cleanable/dirt, +/turf/open/indestructible, +/area/deathmatch) +"nS" = ( +/obj/machinery/light/small/directional/north, +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/decal/cleanable/blood/gibs/old, +/turf/open/indestructible, +/area/deathmatch) +"pT" = ( +/obj/structure/rack, +/obj/item/grenade/chem_grenade/cleaner, +/turf/open/indestructible, +/area/deathmatch) +"pZ" = ( +/obj/structure/sign/poster/random/directional/west, +/turf/open/indestructible, +/area/deathmatch) +"qK" = ( +/obj/effect/decal/cleanable/dirt, +/obj/item/reagent_containers/pill/maintenance, +/turf/open/indestructible, +/area/deathmatch) +"sk" = ( +/obj/structure/sign/poster/random/directional/east, +/turf/open/indestructible, +/area/deathmatch) +"sl" = ( +/obj/machinery/door/airlock/public/glass, +/obj/effect/mapping_helpers/airlock/abandoned, +/turf/open/indestructible, +/area/deathmatch) +"sF" = ( +/obj/structure/extinguisher_cabinet/directional/east, +/obj/structure/closet/firecloset, +/obj/effect/turf_decal/delivery, +/turf/open/indestructible, +/area/deathmatch) +"sV" = ( +/obj/structure/closet/emcloset, +/obj/effect/turf_decal/delivery, +/turf/open/indestructible, +/area/deathmatch) +"sX" = ( +/obj/structure/rack, +/obj/machinery/light/small/directional/north, +/obj/item/reagent_containers/cup/soda_cans/lemon_lime, +/turf/open/indestructible, +/area/deathmatch) +"tT" = ( +/obj/structure/rack, +/obj/item/stack/cable_coil, +/obj/item/assembly/igniter, +/turf/open/indestructible, +/area/deathmatch) +"ur" = ( +/obj/structure/lattice, +/turf/template_noop, +/area/template_noop) +"vB" = ( +/obj/machinery/light/small/directional/east, +/turf/open/indestructible, +/area/deathmatch) +"wi" = ( +/obj/item/screwdriver, +/obj/structure/table/reinforced, +/turf/open/indestructible, +/area/deathmatch) +"wC" = ( +/obj/item/weldingtool, +/obj/structure/rack, +/obj/item/flashlight/flare, +/turf/open/indestructible, +/area/deathmatch) +"zd" = ( +/obj/machinery/vending/medical{ + desc = "Go on, smash this vending machine. You want free healing right? Do it." + }, +/turf/open/indestructible, +/area/deathmatch) +"zF" = ( +/obj/item/ammo_casing/shotgun/improvised, +/turf/open/indestructible, +/area/deathmatch) +"AG" = ( +/obj/structure/lattice/catwalk, +/obj/item/storage/toolbox/mechanical/old/clean{ + desc = "An old, blue toolbox, it looks soulful." + }, +/turf/open/space/basic, +/area/template_noop) +"Bs" = ( +/obj/machinery/light/small/directional/west, +/obj/effect/decal/cleanable/dirt, +/turf/open/indestructible, +/area/deathmatch) +"BU" = ( +/obj/item/chainsaw, +/turf/open/indestructible, +/area/deathmatch) +"BV" = ( +/obj/structure/table/reinforced, +/turf/open/indestructible, +/area/deathmatch) +"Dh" = ( +/obj/structure/lattice/catwalk, +/obj/effect/mob_spawn/corpse/human/engineer/mod, +/turf/template_noop, +/area/template_noop) +"Dt" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/turf_decal/loading_area{ + dir = 4 + }, +/turf/open/indestructible, +/area/deathmatch) +"Er" = ( +/obj/item/clothing/head/utility/welding, +/obj/structure/table/reinforced, +/turf/open/indestructible, +/area/deathmatch) +"Ew" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/item/reagent_containers/pill/maintenance, +/turf/open/indestructible, +/area/deathmatch) +"EK" = ( +/obj/machinery/light/small/directional/south, +/turf/open/indestructible, +/area/deathmatch) +"EN" = ( +/obj/structure/reagent_dispensers/fueltank, +/obj/effect/turf_decal/bot, +/turf/open/indestructible, +/area/deathmatch) +"EW" = ( +/obj/effect/decal/cleanable/blood/tracks, +/obj/effect/landmark/deathmatch_player_spawn, +/turf/open/indestructible, +/area/deathmatch) +"Fp" = ( +/obj/structure/rack, +/obj/item/reagent_containers/pill/maintenance, +/obj/item/spear, +/turf/open/indestructible, +/area/deathmatch) +"FH" = ( +/obj/effect/decal/cleanable/oil/slippery, +/turf/open/indestructible, +/area/deathmatch) +"FL" = ( +/turf/template_noop, +/area/template_noop) +"Gi" = ( +/obj/effect/decal/cleanable/blood/gibs/limb, +/turf/open/indestructible, +/area/deathmatch) +"GA" = ( +/obj/item/stack/medical/mesh{ + amount = 4 + }, +/obj/item/spear, +/obj/structure/closet/emcloset, +/obj/effect/turf_decal/delivery, +/turf/open/indestructible, +/area/deathmatch) +"GF" = ( +/obj/machinery/light/small/directional/west, +/turf/open/indestructible, +/area/deathmatch) +"Hd" = ( +/obj/machinery/light/small/directional/north, +/obj/item/soap/nanotrasen, +/obj/structure/table/reinforced, +/turf/open/indestructible, +/area/deathmatch) +"Hp" = ( +/obj/item/reagent_containers/pill/maintenance, +/obj/structure/sign/poster/random/directional/north, +/obj/structure/table/reinforced, +/turf/open/indestructible, +/area/deathmatch) +"HE" = ( +/obj/structure/lattice/catwalk, +/obj/structure/statue/sandstone/assistant, +/turf/template_noop, +/area/template_noop) +"Ij" = ( +/turf/open/space/basic, +/area/template_noop) +"It" = ( +/obj/item/gun/ballistic/rifle/boltaction/pipegun/prime, +/obj/effect/turf_decal/box, +/turf/open/indestructible, +/area/deathmatch) +"Kt" = ( +/obj/structure/table/reinforced/ctf, +/obj/item/weldingtool, +/turf/open/indestructible, +/area/deathmatch) +"KW" = ( +/obj/machinery/space_heater, +/obj/effect/turf_decal/bot, +/turf/open/indestructible, +/area/deathmatch) +"La" = ( +/obj/structure/sign/poster/random/directional/south, +/obj/item/flashlight/flare, +/obj/structure/table/reinforced, +/turf/open/indestructible, +/area/deathmatch) +"LJ" = ( +/obj/structure/reagent_dispensers/watertank, +/obj/effect/turf_decal/bot, +/turf/open/indestructible, +/area/deathmatch) +"Mt" = ( +/obj/effect/landmark/deathmatch_player_spawn, +/turf/open/indestructible, +/area/deathmatch) +"MC" = ( +/obj/effect/mob_spawn/corpse/human/assistant, +/turf/template_noop, +/area/template_noop) +"Na" = ( +/obj/structure/rack, +/obj/item/reagent_containers/cup/soda_cans/starkist, +/turf/open/indestructible, +/area/deathmatch) +"Ns" = ( +/obj/item/stack/cable_coil, +/obj/structure/table/reinforced, +/turf/open/indestructible, +/area/deathmatch) +"NO" = ( +/obj/structure/extinguisher_cabinet/directional/west, +/turf/open/indestructible, +/area/deathmatch) +"NU" = ( +/obj/effect/decal/cleanable/blood, +/turf/open/indestructible, +/area/deathmatch) +"NY" = ( +/obj/item/screwdriver, +/turf/open/indestructible, +/area/deathmatch) +"Ok" = ( +/obj/structure/extinguisher_cabinet/directional/south, +/obj/machinery/light/small/directional/south, +/turf/open/indestructible, +/area/deathmatch) +"Om" = ( +/obj/effect/decal/cleanable/dirt, +/obj/structure/sign/poster/random/directional/south, +/turf/open/indestructible, +/area/deathmatch) +"OA" = ( +/obj/effect/decal/cleanable/blood/tracks, +/turf/open/indestructible, +/area/deathmatch) +"OO" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/blood/tracks, +/obj/structure/sign/poster/random/directional/east, +/turf/open/indestructible, +/area/deathmatch) +"OR" = ( +/obj/item/stack/medical/suture{ + amount = 6 + }, +/turf/open/indestructible, +/area/deathmatch) +"Pp" = ( +/obj/machinery/light/small/directional/south, +/obj/effect/decal/cleanable/dirt, +/turf/open/indestructible, +/area/deathmatch) +"PW" = ( +/obj/effect/decal/cleanable/blood/gibs/torso, +/turf/open/indestructible, +/area/deathmatch) +"Qr" = ( +/obj/structure/closet/wardrobe, +/turf/open/floor/plating/airless, +/area/template_noop) +"QN" = ( +/obj/item/razor, +/obj/structure/table/reinforced, +/turf/open/indestructible, +/area/deathmatch) +"QQ" = ( +/obj/effect/decal/cleanable/blood/drip, +/obj/effect/turf_decal/box, +/turf/open/indestructible, +/area/deathmatch) +"Rm" = ( +/obj/item/weldingtool, +/obj/structure/rack, +/turf/open/indestructible, +/area/deathmatch) +"Su" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/turf_decal/box, +/obj/effect/landmark/deathmatch_player_spawn, +/turf/open/indestructible, +/area/deathmatch) +"SN" = ( +/obj/effect/decal/cleanable/blood/tracks, +/obj/effect/turf_decal/caution/stand_clear, +/turf/open/indestructible, +/area/deathmatch) +"Tu" = ( +/obj/machinery/light/small/directional/north, +/obj/structure/table/reinforced, +/turf/open/indestructible, +/area/deathmatch) +"TB" = ( +/obj/structure/closet/firecloset, +/obj/effect/turf_decal/delivery, +/turf/open/indestructible, +/area/deathmatch) +"TP" = ( +/obj/effect/mapping_helpers/airlock/abandoned, +/obj/machinery/door/airlock/public/glass, +/turf/open/indestructible, +/area/deathmatch) +"Un" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/blood/tracks{ + dir = 10 + }, +/obj/effect/turf_decal/stripes/corner, +/turf/open/indestructible, +/area/deathmatch) +"Vb" = ( +/obj/effect/decal/cleanable/blood/tracks{ + dir = 5 + }, +/obj/effect/turf_decal/stripes/line, +/turf/open/indestructible, +/area/deathmatch) +"Xb" = ( +/obj/effect/turf_decal/stripes/corner{ + dir = 8 + }, +/turf/open/indestructible, +/area/deathmatch) +"XC" = ( +/obj/item/assembly/igniter, +/turf/open/indestructible, +/area/deathmatch) +"XD" = ( +/obj/item/holosign_creator/security, +/obj/machinery/light/small/directional/south, +/turf/open/indestructible, +/area/deathmatch) + +(1,1,1) = {" +FL +FL +FL +FL +FL +ur +FL +FL +FL +FL +ur +FL +FL +FL +FL +FL +FL +FL +ur +FL +FL +FL +FL +FL +ur +FL +FL +FL +FL +"} +(2,1,1) = {" +FL +FL +FL +FL +ur +ur +hN +ur +ur +ur +ur +ur +ur +ur +HE +ur +ur +ur +ur +ur +ur +ur +ur +ur +ur +ur +FL +FL +FL +"} +(3,1,1) = {" +FL +FL +FL +FL +FL +ur +FL +FL +FL +FL +ur +FL +FL +FL +FL +FL +FL +FL +ur +FL +FL +FL +FL +FL +ur +FL +FL +FL +FL +"} +(4,1,1) = {" +FL +FL +FL +FL +FL +ur +FL +FL +FL +FL +ur +FL +FL +FL +FL +FL +FL +FL +ur +FL +FL +FL +FL +FL +ur +FL +FL +FL +FL +"} +(5,1,1) = {" +FL +FL +FL +FL +FL +aD +aD +aD +aD +aD +aD +ho +ho +ho +ho +ho +ho +ho +aD +aD +aD +aD +aD +aD +aD +FL +FL +FL +FL +"} +(6,1,1) = {" +FL +FL +FL +FL +FL +aD +cn +lN +cn +pZ +nQ +zF +zF +zF +It +zF +zF +zF +jc +cn +sk +nQ +mS +cn +aD +FL +FL +FL +FL +"} +(7,1,1) = {" +FL +FL +FL +FL +FL +aD +iC +aD +aD +aD +aD +aD +aD +BV +lJ +Ns +aD +aD +aD +aD +aD +aD +aD +Tu +aD +FL +FL +FL +FL +"} +(8,1,1) = {" +FL +FL +FL +FL +FL +aD +cn +mS +nQ +cn +cn +cn +cn +cn +jc +cn +NO +cn +cn +nQ +cn +ih +mS +cn +aD +FL +FL +FL +FL +"} +(9,1,1) = {" +FL +FL +FL +FL +FL +aD +ho +aD +aD +aD +sX +cn +EN +mZ +EN +cn +EK +aD +aD +mZ +aD +aD +aD +TP +aD +FL +FL +FL +FL +"} +(10,1,1) = {" +FL +FL +FL +FL +FL +aD +Ew +mS +Mt +nQ +sk +cn +mZ +GA +mZ +cn +NU +OA +OO +EW +OA +OA +SN +Un +aD +FL +FL +FL +FL +"} +(11,1,1) = {" +FL +FL +FL +FL +FL +aD +cn +aD +aD +aD +aD +aD +aD +aD +aD +aD +nQ +aD +aD +ho +ho +aD +aD +Vb +hB +ur +Dh +FL +FL +"} +(12,1,1) = {" +aD +aD +aD +aD +aD +aD +jX +aD +Ij +Ij +Ij +ga +Ij +Ij +Ij +aD +NY +aD +TB +cn +cn +Rm +aD +Xb +aD +FL +FL +FL +FL +"} +(13,1,1) = {" +aD +bI +cy +cy +cn +ho +jY +ho +Ij +Ij +Ij +AG +Ij +Ij +Ij +ho +Ok +aD +jX +jc +cn +EK +aD +jc +aD +FL +FL +FL +FL +"} +(14,1,1) = {" +aP +cn +cn +cn +gJ +ho +ka +aD +Ij +Ij +Ij +ga +Ij +Ij +Ij +aD +jc +aD +jY +PW +nQ +cn +aD +jX +aD +FL +FL +FL +FL +"} +(15,1,1) = {" +aD +cn +cn +cn +cn +aD +kp +aD +aD +aD +aD +aD +aD +aD +aD +aD +cn +aD +sl +aD +QN +BV +aD +ih +aD +FL +FL +FL +FL +"} +(16,1,1) = {" +aD +cx +cn +cn +cn +hB +kx +mZ +cn +sk +cn +Bs +cn +cn +cn +pZ +cn +cn +nQ +cn +QQ +Su +aD +cn +aD +FL +FL +ur +FL +"} +(17,1,1) = {" +aD +cn +eX +cn +cn +aD +lA +aD +ih +aD +tT +cn +EN +aD +aD +aD +cn +aD +EN +cn +cn +cn +cn +nQ +aD +ur +ur +ur +ur +"} +(18,1,1) = {" +aP +cn +cn +cn +cn +ho +cn +aD +cn +aD +aD +aD +aD +aD +sV +GF +cn +aD +aD +ho +ho +aD +aD +Mt +aD +FL +FL +ur +FL +"} +(19,1,1) = {" +aD +bI +fh +fh +cn +ho +cn +cn +cn +hB +vB +BU +Fp +aD +Kt +cn +Om +aD +Ij +ga +Ij +Ij +aD +mZ +aD +FL +FL +ur +FL +"} +(20,1,1) = {" +aD +aD +aD +aD +aD +aD +lJ +aD +nQ +aD +aD +BV +aD +aD +KW +cn +cn +ho +ga +Qr +ga +Ij +ho +cn +ho +FL +FL +ur +FL +"} +(21,1,1) = {" +FL +FL +FL +FL +FL +aD +aD +aD +cn +aD +Mt +Dt +cn +aD +aD +aD +cn +ho +Ij +Ij +ga +ga +ho +nQ +ho +FL +FL +ur +MC +"} +(22,1,1) = {" +FL +FL +FL +FL +FL +ur +FL +aD +cn +sl +cn +cn +FH +GF +La +aD +cn +aD +Ij +Ij +ga +Ij +aD +XC +aD +FL +FL +ur +FL +"} +(23,1,1) = {" +FL +FL +FL +FL +FL +ur +FL +aD +cn +aD +jX +cn +cn +nQ +LJ +mZ +Mt +aD +aD +ho +ho +aD +aD +cn +aD +FL +FL +ur +FL +"} +(24,1,1) = {" +FL +FL +FL +FL +FL +ur +FL +aD +nS +aD +wi +Er +Gi +cn +Na +aD +jX +jc +jc +cn +qK +cn +sk +XD +aD +ur +ur +ur +ur +"} +(25,1,1) = {" +FL +FL +FL +FL +ur +ur +ur +aD +cn +aD +aD +aD +aD +sl +aD +aD +cn +aD +sl +aD +aD +aD +aD +aD +aD +FL +FL +ur +FL +"} +(26,1,1) = {" +FL +FL +FL +FL +FL +ur +FL +ho +cn +cn +pZ +nQ +cn +cn +cn +cn +cn +aD +OR +aD +FL +FL +FL +ur +FL +FL +FL +ur +FL +"} +(27,1,1) = {" +FL +FL +FL +FL +FL +ur +FL +ho +pT +sF +Mt +mZ +aD +aD +mZ +aD +aD +aD +Pp +aD +FL +FL +FL +ur +FL +FL +FL +ur +FL +"} +(28,1,1) = {" +FL +FL +FL +FL +ur +ur +ur +aD +aD +aD +cn +cn +aD +Hd +nQ +cn +cn +cn +cn +ho +FL +FL +FL +ur +FL +FL +FL +ur +FL +"} +(29,1,1) = {" +FL +FL +FL +FL +FL +ur +FL +FL +FL +aD +wC +EK +aD +Hp +cn +aD +aD +ho +aD +aD +FL +FL +FL +ur +FL +FL +FL +ur +FL +"} +(30,1,1) = {" +FL +FL +FL +FL +FL +FL +FL +FL +FL +aD +zd +nQ +aD +EN +cn +ho +FL +FL +FL +ur +FL +FL +FL +ur +FL +FL +FL +ur +FL +"} +(31,1,1) = {" +FL +FL +FL +FL +FL +FL +FL +FL +FL +aD +mZ +cn +cn +jc +cn +aD +FL +FL +FL +ur +FL +FL +FL +ur +FL +FL +FL +ur +FL +"} +(32,1,1) = {" +FL +FL +FL +FL +FL +FL +FL +FL +FL +aD +aD +ho +ho +ho +aD +aD +ur +ur +ur +ur +ur +ur +ur +ur +ur +ur +ur +ur +ur +"} +(33,1,1) = {" +FL +FL +FL +FL +FL +FL +FL +FL +FL +FL +FL +FL +FL +FL +FL +FL +FL +FL +FL +ur +FL +FL +FL +ur +FL +FL +FL +ur +FL +"} diff --git a/_maps/map_files/Deathmatch/OSHA_Violator.dmm b/_maps/map_files/Deathmatch/OSHA_Violator.dmm new file mode 100644 index 00000000000..fc8291d1814 --- /dev/null +++ b/_maps/map_files/Deathmatch/OSHA_Violator.dmm @@ -0,0 +1,2168 @@ +//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE +"ac" = ( +/obj/structure/closet/crate/medical, +/turf/open/space/basic, +/area/template_noop) +"ae" = ( +/obj/effect/mob_spawn/corpse/human/cargo_tech, +/turf/open/space/basic, +/area/template_noop) +"ai" = ( +/turf/closed/indestructible/reinforced, +/area/deathmatch) +"aE" = ( +/turf/closed/indestructible/fakedoor, +/area/deathmatch) +"bl" = ( +/turf/closed/indestructible/fakeglass, +/area/deathmatch) +"bW" = ( +/obj/structure/closet/secure_closet/engineering_welding, +/turf/open/indestructible, +/area/deathmatch) +"cA" = ( +/turf/open/indestructible, +/area/deathmatch) +"cR" = ( +/obj/machinery/field/generator/starts_on, +/obj/effect/turf_decal/bot, +/obj/structure/cable, +/turf/open/indestructible, +/area/deathmatch) +"do" = ( +/obj/effect/turf_decal/stripes/line, +/turf/open/indestructible, +/area/deathmatch) +"dt" = ( +/obj/machinery/light/no_nightlight/directional/north, +/obj/effect/turf_decal/stripes/line, +/obj/machinery/field/generator/starts_on, +/obj/structure/cable, +/turf/open/indestructible, +/area/deathmatch) +"dy" = ( +/obj/structure/sign/poster/official/random/directional/north, +/obj/effect/turf_decal/stripes/line, +/turf/open/indestructible, +/area/deathmatch) +"er" = ( +/obj/structure/disposalpipe/segment{ + dir = 6 + }, +/turf/closed/indestructible/reinforced, +/area/deathmatch) +"fH" = ( +/obj/machinery/light/no_nightlight/directional/east, +/turf/open/indestructible, +/area/deathmatch) +"fN" = ( +/obj/structure/sign/directions/engineering, +/turf/closed/indestructible/reinforced, +/area/deathmatch) +"gd" = ( +/obj/machinery/power/energy_accumulator/grounding_rod/anchored, +/turf/open/indestructible, +/area/deathmatch) +"go" = ( +/obj/machinery/power/energy_accumulator/grounding_rod/anchored, +/obj/machinery/light/red/directional/east, +/turf/open/indestructible, +/area/deathmatch) +"gC" = ( +/obj/machinery/power/emitter/energycannon, +/obj/effect/turf_decal/bot, +/obj/structure/cable, +/turf/open/indestructible, +/area/deathmatch) +"gG" = ( +/obj/structure/cable, +/obj/structure/extinguisher_cabinet/directional/west, +/turf/open/indestructible, +/area/deathmatch) +"gN" = ( +/obj/structure/cable, +/turf/open/indestructible, +/area/deathmatch) +"gU" = ( +/obj/structure/cable, +/obj/machinery/conveyor/auto/inverted{ + dir = 5 + }, +/turf/open/indestructible, +/area/deathmatch) +"hj" = ( +/obj/machinery/conveyor/auto{ + dir = 8 + }, +/obj/structure/cable, +/turf/open/indestructible, +/area/deathmatch) +"hR" = ( +/obj/structure/cable, +/obj/machinery/conveyor/auto/inverted{ + dir = 6 + }, +/turf/open/indestructible, +/area/deathmatch) +"hU" = ( +/obj/machinery/light/no_nightlight/directional/east, +/obj/structure/cable, +/turf/open/indestructible, +/area/deathmatch) +"ig" = ( +/obj/structure/cable, +/obj/effect/turf_decal/delivery, +/turf/open/indestructible, +/area/deathmatch) +"iE" = ( +/obj/structure/cable, +/obj/effect/turf_decal/loading_area, +/turf/open/indestructible, +/area/deathmatch) +"je" = ( +/turf/open/space/basic, +/area/template_noop) +"jn" = ( +/obj/effect/spawner/structure/window/reinforced/plasma, +/obj/structure/cable, +/turf/open/floor/plating, +/area/deathmatch) +"jC" = ( +/obj/structure/cable, +/obj/structure/sign/poster/official/random/directional/east, +/obj/effect/landmark/deathmatch_player_spawn, +/turf/open/indestructible, +/area/deathmatch) +"kh" = ( +/obj/structure/closet/secure_closet/engineering_electrical, +/turf/open/indestructible, +/area/deathmatch) +"kB" = ( +/obj/effect/landmark/deathmatch_player_spawn, +/turf/open/indestructible, +/area/deathmatch) +"kP" = ( +/obj/machinery/conveyor/auto, +/turf/open/indestructible, +/area/deathmatch) +"lu" = ( +/obj/machinery/conveyor/auto{ + dir = 8 + }, +/turf/open/indestructible, +/area/deathmatch) +"ly" = ( +/obj/machinery/conveyor/auto/inverted{ + dir = 6 + }, +/turf/open/indestructible, +/area/deathmatch) +"lU" = ( +/obj/machinery/conveyor/auto{ + dir = 1 + }, +/turf/open/indestructible, +/area/deathmatch) +"mg" = ( +/obj/effect/turf_decal/delivery, +/turf/open/indestructible, +/area/deathmatch) +"mj" = ( +/obj/structure/reagent_dispensers/fueltank, +/turf/open/indestructible, +/area/deathmatch) +"mw" = ( +/obj/machinery/conveyor/auto{ + dir = 8 + }, +/obj/structure/closet, +/obj/item/soap/nanotrasen, +/turf/open/indestructible, +/area/deathmatch) +"mK" = ( +/obj/effect/landmark/deathmatch_player_spawn, +/obj/machinery/conveyor/auto/inverted{ + dir = 6 + }, +/turf/open/indestructible, +/area/deathmatch) +"mO" = ( +/obj/effect/spawner/structure/window/reinforced/plasma, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/plating, +/area/deathmatch) +"np" = ( +/obj/structure/reflector/double/mapping{ + dir = 6 + }, +/obj/effect/turf_decal/bot/left, +/turf/open/indestructible, +/area/deathmatch) +"nV" = ( +/obj/item/stack/cable_coil, +/turf/open/indestructible, +/area/deathmatch) +"or" = ( +/obj/machinery/conveyor/auto, +/obj/structure/closet/firecloset, +/turf/open/indestructible, +/area/deathmatch) +"oT" = ( +/obj/effect/spawner/structure/window/reinforced/plasma, +/turf/open/indestructible, +/area/deathmatch) +"pe" = ( +/obj/machinery/conveyor/auto{ + dir = 1 + }, +/obj/item/clothing/glasses/meson/engine/tray, +/turf/open/indestructible, +/area/deathmatch) +"pf" = ( +/obj/structure/reflector/single/mapping{ + dir = 10 + }, +/obj/effect/turf_decal/bot/left, +/turf/open/indestructible, +/area/deathmatch) +"pO" = ( +/obj/structure/table/reinforced, +/obj/item/assembly/prox_sensor, +/turf/open/indestructible, +/area/deathmatch) +"qn" = ( +/obj/structure/reflector/single/mapping{ + dir = 6 + }, +/obj/effect/turf_decal/bot/left, +/turf/open/indestructible, +/area/deathmatch) +"qo" = ( +/obj/structure/cable, +/obj/effect/turf_decal/caution/stand_clear, +/turf/open/indestructible, +/area/deathmatch) +"rz" = ( +/obj/machinery/power/emitter/energycannon{ + dir = 8 + }, +/obj/effect/turf_decal/bot, +/obj/structure/cable, +/turf/open/indestructible, +/area/deathmatch) +"sa" = ( +/turf/cordon, +/area/template_noop) +"sb" = ( +/obj/structure/frame/machine/secured, +/turf/open/indestructible, +/area/deathmatch) +"sp" = ( +/obj/structure/cable, +/obj/effect/turf_decal/stripes/corner{ + dir = 8 + }, +/turf/open/indestructible, +/area/deathmatch) +"sx" = ( +/obj/item/clothing/suit/hazardvest, +/turf/open/indestructible, +/area/deathmatch) +"sP" = ( +/obj/item/stack/rods/fifty, +/obj/structure/rack, +/turf/open/indestructible, +/area/deathmatch) +"sX" = ( +/obj/machinery/conveyor/auto, +/obj/item/stack/sheet/cardboard, +/turf/open/indestructible, +/area/deathmatch) +"sZ" = ( +/obj/structure/cable, +/obj/effect/landmark/deathmatch_player_spawn, +/turf/open/indestructible, +/area/deathmatch) +"ta" = ( +/obj/structure/table/reinforced, +/obj/item/clothing/head/utility/welding, +/turf/open/indestructible, +/area/deathmatch) +"tc" = ( +/obj/machinery/light/red/directional/west, +/turf/open/indestructible, +/area/deathmatch) +"th" = ( +/obj/structure/cable, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/turf/open/indestructible, +/area/deathmatch) +"tT" = ( +/obj/structure/disposalpipe/trunk{ + dir = 2 + }, +/obj/structure/disposaloutlet{ + dir = 1 + }, +/turf/open/indestructible, +/area/deathmatch) +"tU" = ( +/obj/item/storage/toolbox/drone{ + pixel_y = 5 + }, +/obj/item/storage/toolbox/electrical, +/obj/structure/rack, +/obj/item/crowbar, +/turf/open/indestructible, +/area/deathmatch) +"ub" = ( +/obj/machinery/conveyor/auto{ + dir = 1 + }, +/obj/machinery/light/no_nightlight/directional/west, +/turf/open/indestructible, +/area/deathmatch) +"uv" = ( +/obj/structure/table/reinforced, +/obj/item/weldingtool/largetank, +/turf/open/indestructible, +/area/deathmatch) +"uY" = ( +/obj/structure/closet/crate/engineering, +/turf/open/indestructible, +/area/deathmatch) +"vD" = ( +/obj/machinery/power/energy_accumulator/tesla_coil/anchored, +/turf/open/indestructible, +/area/deathmatch) +"vG" = ( +/obj/item/tank/internals/plasma/full, +/obj/structure/rack, +/turf/open/indestructible, +/area/deathmatch) +"vK" = ( +/obj/structure/cable, +/obj/effect/turf_decal/stripes/corner{ + dir = 1 + }, +/turf/open/indestructible, +/area/deathmatch) +"vT" = ( +/obj/effect/turf_decal/stripes/corner, +/turf/open/indestructible, +/area/deathmatch) +"wb" = ( +/obj/effect/turf_decal/stripes/line, +/obj/structure/disposalpipe/segment{ + dir = 5 + }, +/turf/open/indestructible, +/area/deathmatch) +"wy" = ( +/obj/effect/turf_decal/stripes/line, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/indestructible, +/area/deathmatch) +"wI" = ( +/obj/effect/turf_decal/stripes/corner{ + dir = 8 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/indestructible, +/area/deathmatch) +"wK" = ( +/obj/structure/cable, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/indestructible, +/area/deathmatch) +"wL" = ( +/obj/machinery/conveyor/auto, +/obj/item/shard, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/indestructible, +/area/deathmatch) +"xa" = ( +/obj/machinery/conveyor/auto, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/indestructible, +/area/deathmatch) +"xg" = ( +/obj/effect/spawner/structure/window/reinforced/plasma, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/indestructible/plating, +/area/deathmatch) +"xj" = ( +/obj/machinery/conveyor/auto{ + dir = 1 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/indestructible, +/area/deathmatch) +"xs" = ( +/obj/machinery/conveyor/auto{ + dir = 1 + }, +/obj/item/crowbar/red, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/indestructible, +/area/deathmatch) +"xF" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/indestructible, +/area/deathmatch) +"xN" = ( +/obj/structure/rack, +/obj/item/wrench, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/indestructible, +/area/deathmatch) +"xW" = ( +/obj/structure/reflector/single/mapping{ + dir = 9 + }, +/obj/effect/turf_decal/bot/left, +/turf/open/indestructible, +/area/deathmatch) +"xY" = ( +/obj/structure/disposalpipe/segment{ + dir = 10 + }, +/turf/open/indestructible, +/area/deathmatch) +"yj" = ( +/obj/machinery/conveyor/auto{ + dir = 1 + }, +/obj/structure/closet, +/obj/item/toy/crayon/spraycan, +/turf/open/indestructible, +/area/deathmatch) +"yo" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/structure/cable, +/turf/open/indestructible, +/area/deathmatch) +"ys" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/closed/indestructible/reinforced, +/area/deathmatch) +"yB" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/indestructible, +/area/deathmatch) +"yW" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/indestructible, +/area/deathmatch) +"yX" = ( +/obj/structure/reflector/single/mapping{ + dir = 5 + }, +/obj/effect/turf_decal/bot/left, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/indestructible, +/area/deathmatch) +"yY" = ( +/obj/structure/reflector/single/mapping{ + dir = 9 + }, +/obj/effect/turf_decal/bot/left, +/obj/structure/disposalpipe/segment{ + dir = 1 + }, +/turf/open/indestructible, +/area/deathmatch) +"zb" = ( +/obj/structure/table/wood/fancy/black, +/obj/item/hemostat/supermatter, +/turf/open/indestructible, +/area/deathmatch) +"zj" = ( +/obj/machinery/disposal/delivery_chute, +/obj/structure/disposalpipe/trunk{ + dir = 1 + }, +/turf/open/indestructible, +/area/deathmatch) +"zl" = ( +/obj/machinery/button/door/directional/north{ + id = "deathmatch_shutter_1"; + name = "Water Vapour Shutter" + }, +/obj/structure/table/reinforced, +/obj/item/clothing/glasses/meson/engine/tray, +/turf/open/indestructible, +/area/deathmatch) +"zw" = ( +/obj/item/kirbyplants, +/obj/machinery/light/no_nightlight/directional/north, +/turf/open/indestructible, +/area/deathmatch) +"zL" = ( +/obj/structure/rack, +/obj/item/extinguisher/mini, +/turf/open/indestructible, +/area/deathmatch) +"Aa" = ( +/obj/effect/turf_decal/box, +/obj/effect/turf_decal/caution/stand_clear, +/turf/open/indestructible, +/area/deathmatch) +"Am" = ( +/obj/machinery/door/airlock/engineering/glass{ + name = "Supermatter Room" + }, +/turf/open/indestructible, +/area/deathmatch) +"Ax" = ( +/obj/structure/cable, +/obj/effect/turf_decal/stripes/line{ + dir = 9 + }, +/turf/open/indestructible, +/area/deathmatch) +"AF" = ( +/obj/structure/cable, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/turf/open/indestructible, +/area/deathmatch) +"AZ" = ( +/obj/structure/cable, +/obj/effect/turf_decal/stripes/line{ + dir = 5 + }, +/turf/open/indestructible, +/area/deathmatch) +"Bf" = ( +/obj/effect/spawner/structure/window/reinforced/plasma, +/turf/open/floor/plating, +/area/deathmatch) +"Bv" = ( +/obj/effect/turf_decal/stripes/line, +/obj/machinery/field/generator/starts_on, +/obj/structure/cable, +/turf/open/indestructible, +/area/deathmatch) +"CC" = ( +/obj/machinery/vending/engineering, +/turf/open/indestructible, +/area/deathmatch) +"CH" = ( +/obj/structure/reflector/single/mapping{ + dir = 5 + }, +/obj/effect/turf_decal/bot/left, +/turf/open/indestructible, +/area/deathmatch) +"CI" = ( +/obj/structure/disposalpipe/segment{ + dir = 1 + }, +/turf/open/indestructible, +/area/deathmatch) +"CR" = ( +/obj/machinery/conveyor/auto, +/obj/structure/closet/crate, +/obj/item/toy/spinningtoy, +/turf/open/indestructible, +/area/deathmatch) +"DY" = ( +/obj/structure/cable, +/obj/machinery/power/rtg/advanced{ + power_gen = 50000 + }, +/turf/open/indestructible, +/area/deathmatch) +"Ea" = ( +/obj/effect/turf_decal/stripes/line, +/obj/structure/cable, +/turf/open/indestructible, +/area/deathmatch) +"Eb" = ( +/obj/structure/table/wood/fancy/black, +/obj/item/nuke_core_container/supermatter, +/obj/machinery/light/no_nightlight/directional/west, +/turf/open/indestructible, +/area/deathmatch) +"Ec" = ( +/obj/machinery/door/poddoor/shutters/indestructible{ + id = "deathmatch_shutter_2" + }, +/obj/effect/turf_decal/caution/stand_clear, +/obj/effect/turf_decal/bot, +/turf/open/indestructible, +/area/deathmatch) +"Em" = ( +/obj/structure/chair/comfy/black, +/turf/open/indestructible, +/area/deathmatch) +"EY" = ( +/obj/machinery/door/airlock/engineering/glass{ + name = "Control Room" + }, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/effect/mapping_helpers/airlock/access/all/engineering/general, +/turf/open/indestructible, +/area/deathmatch) +"Fd" = ( +/obj/structure/reflector/box/mapping{ + dir = 4 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/effect/turf_decal/bot, +/turf/open/indestructible, +/area/deathmatch) +"Fv" = ( +/obj/machinery/power/supermatter_crystal/hugbox, +/turf/open/indestructible, +/area/deathmatch) +"FM" = ( +/obj/structure/cable, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/turf/open/indestructible, +/area/deathmatch) +"FV" = ( +/obj/structure/cable, +/obj/machinery/light/no_nightlight/directional/east, +/turf/open/indestructible, +/area/deathmatch) +"Gq" = ( +/obj/structure/cable, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/machinery/light/no_nightlight/directional/west, +/turf/open/indestructible, +/area/deathmatch) +"Gx" = ( +/obj/machinery/conveyor/auto, +/obj/structure/cable, +/turf/open/indestructible, +/area/deathmatch) +"Gz" = ( +/obj/machinery/conveyor/auto, +/obj/item/multitool, +/turf/open/indestructible, +/area/deathmatch) +"GB" = ( +/obj/machinery/conveyor/auto{ + dir = 1 + }, +/obj/item/tank/internals/oxygen, +/turf/open/indestructible, +/area/deathmatch) +"GH" = ( +/obj/structure/reflector/single/mapping{ + dir = 6 + }, +/obj/effect/turf_decal/bot/right, +/turf/open/indestructible, +/area/deathmatch) +"GP" = ( +/obj/structure/reflector/single/mapping{ + dir = 10 + }, +/obj/effect/turf_decal/bot/right, +/turf/open/indestructible, +/area/deathmatch) +"GT" = ( +/obj/structure/cable, +/obj/item/clothing/suit/hazardvest, +/turf/open/indestructible, +/area/deathmatch) +"GV" = ( +/obj/structure/cable, +/turf/closed/indestructible/reinforced, +/area/deathmatch) +"Hn" = ( +/obj/structure/table/wood/fancy/black, +/obj/item/scalpel/supermatter, +/turf/open/indestructible, +/area/deathmatch) +"HL" = ( +/obj/item/clothing/gloves/color/yellow{ + desc = "This is it. The only reason of your existence. Grab it, put them on and enjoy your newfound godhood!" + }, +/obj/structure/rack, +/turf/open/indestructible, +/area/deathmatch) +"HP" = ( +/obj/machinery/computer/operating{ + desc = "You start to get the feeling this is the wrong operating console...."; + dir = 1 + }, +/turf/open/indestructible, +/area/deathmatch) +"HY" = ( +/obj/structure/reflector/single/mapping{ + dir = 9 + }, +/obj/effect/turf_decal/bot/right, +/turf/open/indestructible, +/area/deathmatch) +"Js" = ( +/obj/structure/table/reinforced, +/obj/item/reagent_containers/pill/patch/aiuri, +/turf/open/indestructible, +/area/deathmatch) +"JF" = ( +/obj/structure/cable, +/obj/effect/turf_decal/stripes/line{ + dir = 10 + }, +/turf/open/indestructible, +/area/deathmatch) +"Kd" = ( +/obj/structure/cable, +/obj/effect/turf_decal/stripes/line, +/turf/open/indestructible, +/area/deathmatch) +"KY" = ( +/obj/structure/cable, +/obj/effect/turf_decal/stripes/line{ + dir = 6 + }, +/turf/open/indestructible, +/area/deathmatch) +"LK" = ( +/obj/structure/reflector/single/mapping{ + dir = 10 + }, +/obj/effect/turf_decal/bot/right, +/obj/structure/disposalpipe/segment{ + dir = 5 + }, +/turf/open/indestructible, +/area/deathmatch) +"Mm" = ( +/obj/machinery/conveyor/auto{ + dir = 8 + }, +/obj/item/clothing/suit/armor/vest, +/turf/open/indestructible, +/area/deathmatch) +"Mp" = ( +/obj/structure/disposalpipe/segment{ + dir = 10 + }, +/turf/closed/indestructible/reinforced, +/area/deathmatch) +"Mu" = ( +/obj/structure/cable, +/obj/structure/sign/poster/official/random/directional/west, +/turf/open/indestructible, +/area/deathmatch) +"My" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/turf/open/indestructible, +/area/deathmatch) +"MC" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/turf/open/indestructible, +/area/deathmatch) +"MP" = ( +/obj/structure/cable, +/obj/machinery/power/floodlight, +/turf/open/indestructible, +/area/deathmatch) +"MV" = ( +/obj/structure/disposalpipe/trunk{ + dir = 1 + }, +/obj/structure/disposaloutlet, +/turf/open/indestructible, +/area/deathmatch) +"NJ" = ( +/obj/structure/disposalpipe/trunk{ + dir = 1 + }, +/obj/machinery/disposal/delivery_chute, +/turf/open/indestructible, +/area/deathmatch) +"NY" = ( +/obj/machinery/power/emitter/energycannon{ + dir = 1 + }, +/obj/effect/turf_decal/bot, +/obj/structure/cable, +/turf/open/indestructible, +/area/deathmatch) +"OL" = ( +/obj/machinery/conveyor/auto/inverted{ + dir = 5 + }, +/turf/open/indestructible, +/area/deathmatch) +"Pg" = ( +/obj/machinery/field/generator/starts_on, +/obj/machinery/light/no_nightlight/directional/north, +/turf/open/indestructible, +/area/deathmatch) +"Pu" = ( +/obj/effect/turf_decal/stripes/corner{ + dir = 4 + }, +/turf/open/indestructible, +/area/deathmatch) +"Px" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/turf/open/indestructible, +/area/deathmatch) +"QA" = ( +/obj/effect/turf_decal/stripes/corner{ + dir = 1 + }, +/turf/open/indestructible, +/area/deathmatch) +"QG" = ( +/obj/structure/rack, +/obj/item/reagent_containers/cup/bucket, +/obj/item/pen, +/turf/open/indestructible, +/area/deathmatch) +"QQ" = ( +/obj/machinery/door/poddoor/shutters/indestructible{ + id = "deathmatch_shutter_1" + }, +/obj/effect/turf_decal/caution/stand_clear, +/obj/effect/turf_decal/bot, +/turf/open/indestructible, +/area/deathmatch) +"Rj" = ( +/obj/machinery/portable_atmospherics/canister/water_vapor{ + desc = "You monster." + }, +/obj/machinery/button/door/directional/east{ + id = "deathmatch_shutter_2"; + name = "Supermatter Sampling Shutter" + }, +/turf/open/indestructible, +/area/deathmatch) +"Rk" = ( +/obj/effect/mob_spawn/corpse/human/assistant, +/turf/open/indestructible, +/area/deathmatch) +"Rv" = ( +/obj/structure/table/reinforced, +/obj/item/weldingtool/mini, +/turf/open/indestructible, +/area/deathmatch) +"RF" = ( +/obj/machinery/conveyor/auto{ + dir = 1 + }, +/obj/structure/closet/crate, +/obj/item/stack/medical/suture{ + amount = 6 + }, +/turf/open/indestructible, +/area/deathmatch) +"Sc" = ( +/obj/structure/reflector/double/mapping{ + dir = 5 + }, +/obj/effect/turf_decal/bot/right, +/turf/open/indestructible, +/area/deathmatch) +"Sh" = ( +/obj/effect/spawner/structure/window/reinforced/plasma, +/turf/open/indestructible/plating, +/area/deathmatch) +"Si" = ( +/obj/item/clothing/head/utility/welding, +/turf/open/indestructible, +/area/deathmatch) +"SR" = ( +/obj/machinery/conveyor/auto, +/obj/item/tank/internals/oxygen, +/turf/open/indestructible, +/area/deathmatch) +"SW" = ( +/obj/machinery/conveyor/auto{ + dir = 1 + }, +/obj/structure/closet/cardboard, +/obj/item/dualsaber/toy, +/turf/open/indestructible, +/area/deathmatch) +"Tu" = ( +/obj/structure/table/reinforced, +/obj/item/bodypart/arm/left/robot, +/turf/open/indestructible, +/area/deathmatch) +"TO" = ( +/obj/structure/reflector/single/mapping{ + dir = 5 + }, +/obj/effect/turf_decal/bot/right, +/turf/open/indestructible, +/area/deathmatch) +"TY" = ( +/obj/structure/cable, +/obj/effect/turf_decal/loading_area{ + dir = 4 + }, +/turf/open/indestructible, +/area/deathmatch) +"Ue" = ( +/obj/structure/table/reinforced, +/obj/item/clothing/mask/gas/welding/up, +/turf/open/indestructible, +/area/deathmatch) +"Uu" = ( +/obj/machinery/conveyor/auto{ + dir = 1 + }, +/obj/structure/closet, +/obj/item/pizzabox/meat{ + desc = "In honor of those who fell during the infamous Pizza Riot." + }, +/turf/open/indestructible, +/area/deathmatch) +"UI" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/machinery/field/generator/starts_on, +/obj/structure/cable, +/turf/open/indestructible, +/area/deathmatch) +"Vr" = ( +/obj/machinery/conveyor/auto/inverted{ + dir = 9 + }, +/turf/open/indestructible, +/area/deathmatch) +"Vu" = ( +/obj/machinery/conveyor/auto{ + dir = 4 + }, +/turf/open/indestructible, +/area/deathmatch) +"VC" = ( +/obj/machinery/conveyor/auto/inverted{ + dir = 10 + }, +/turf/open/indestructible, +/area/deathmatch) +"VG" = ( +/obj/item/wrench, +/turf/open/indestructible, +/area/deathmatch) +"WI" = ( +/obj/effect/landmark/deathmatch_player_spawn, +/obj/machinery/conveyor/auto/inverted{ + dir = 9 + }, +/turf/open/indestructible, +/area/deathmatch) +"Xp" = ( +/obj/structure/cable, +/obj/structure/extinguisher_cabinet/directional/west, +/obj/item/clothing/suit/armor/vest, +/turf/open/indestructible, +/area/deathmatch) +"XU" = ( +/obj/structure/cable, +/obj/machinery/conveyor/auto/inverted{ + dir = 9 + }, +/turf/open/indestructible, +/area/deathmatch) +"Yn" = ( +/obj/machinery/conveyor/auto{ + dir = 4 + }, +/obj/structure/cable, +/turf/open/indestructible, +/area/deathmatch) +"Yz" = ( +/obj/machinery/conveyor/auto{ + dir = 4 + }, +/obj/structure/cable, +/obj/item/clothing/glasses/meson/engine/tray, +/turf/open/indestructible, +/area/deathmatch) +"YA" = ( +/obj/structure/cable, +/turf/closed/indestructible/fakeglass, +/area/deathmatch) +"YJ" = ( +/obj/structure/cable, +/obj/machinery/conveyor/auto/inverted{ + dir = 10 + }, +/turf/open/indestructible, +/area/deathmatch) +"YU" = ( +/obj/structure/cable, +/obj/structure/extinguisher_cabinet/directional/east, +/turf/open/indestructible, +/area/deathmatch) +"YY" = ( +/obj/machinery/light/no_nightlight/directional/south, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/machinery/field/generator/starts_on, +/obj/structure/cable, +/turf/open/indestructible, +/area/deathmatch) +"Zi" = ( +/obj/structure/sign/poster/official/random/directional/south, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/turf/open/indestructible, +/area/deathmatch) +"Zr" = ( +/obj/item/storage/backpack/duffelbag/syndie/med/medicalbundle, +/turf/open/space/basic, +/area/template_noop) +"Zz" = ( +/obj/machinery/power/singularity_beacon/syndicate, +/turf/open/space/basic, +/area/template_noop) +"ZD" = ( +/obj/item/storage/toolbox/syndicate, +/turf/open/space/basic, +/area/template_noop) + +(1,1,1) = {" +sa +sa +sa +sa +sa +sa +sa +sa +sa +sa +sa +sa +sa +sa +sa +sa +sa +sa +sa +sa +sa +sa +sa +sa +sa +"} +(2,1,1) = {" +sa +je +je +je +je +je +je +je +je +je +ai +ai +ai +ai +ai +je +je +je +je +je +je +je +je +je +sa +"} +(3,1,1) = {" +sa +je +ai +ai +fN +ai +ai +ai +ai +ai +ai +zb +Eb +Hn +ai +ai +ai +ai +je +je +je +je +je +je +sa +"} +(4,1,1) = {" +sa +je +ai +bW +cA +cA +cA +cA +tc +cA +aE +cA +cA +cA +aE +cA +cA +aE +je +je +je +je +je +je +sa +"} +(5,1,1) = {" +sa +je +ai +cA +cA +sb +cA +sb +cA +cA +er +zj +cA +cA +ai +cA +cA +aE +je +je +je +je +je +je +sa +"} +(6,1,1) = {" +sa +je +aE +cA +sb +sb +sb +sb +cA +uY +ys +ai +Ec +ai +ai +cA +cA +ai +je +je +je +je +je +je +sa +"} +(7,1,1) = {" +sa +je +aE +cA +cA +cA +cA +sb +cA +vD +ys +zl +cA +HL +ai +cA +Rk +ai +ai +ai +ai +ai +ai +je +sa +"} +(8,1,1) = {" +sa +je +ai +cA +gd +cA +cA +cA +cA +vD +ys +zw +Em +HP +ai +Pg +cA +cA +cA +cA +cA +cA +aE +je +sa +"} +(9,1,1) = {" +sa +je +ai +cA +go +kh +kh +bW +cA +vG +ys +zL +cA +Js +ai +vG +cA +bW +kh +kh +cA +cA +aE +je +sa +"} +(10,1,1) = {" +sa +je +ai +aE +ai +bl +bl +bl +aE +bl +ys +bl +EY +bl +ai +bl +aE +bl +bl +bl +ai +aE +ai +je +sa +"} +(11,1,1) = {" +sa +je +ai +cR +ai +gN +gN +sp +th +vK +wK +gN +gN +gN +Mu +sp +th +vK +gN +gN +ai +cR +ai +je +sa +"} +(12,1,1) = {" +sa +je +ai +YA +ai +gN +cA +np +cA +vT +yB +Aa +Fd +Aa +My +Pu +cA +Sc +cA +gN +ai +YA +ai +je +sa +"} +(13,1,1) = {" +sa +je +ai +Ea +gG +gN +cA +cA +tT +wb +mO +Am +oT +Am +Bf +Px +cA +cA +nV +gN +Xp +yo +ai +je +sa +"} +(14,1,1) = {" +sa +je +ai +do +gN +kB +cA +sx +cA +wy +mO +Ax +th +JF +Bf +Px +cA +cA +cA +kB +gN +Px +ai +je +sa +"} +(15,1,1) = {" +sa +je +ai +dt +gN +cA +np +cA +cA +wy +mO +AF +Fv +Kd +Bf +Px +cA +cA +Sc +cA +gN +YY +ai +je +sa +"} +(16,1,1) = {" +sa +je +ai +do +gN +cA +cA +cA +cA +wy +mO +AZ +FM +KY +Bf +Px +cA +Si +cA +cA +gN +Px +ai +je +sa +"} +(17,1,1) = {" +sa +je +ai +do +gN +cA +nV +cA +cA +wy +mO +Bf +jn +Bf +Bf +Px +cA +cA +cA +cA +gN +Px +ai +je +sa +"} +(18,1,1) = {" +sa +je +ai +dy +gN +kB +cA +sP +tU +wI +yW +MC +Gq +MC +MC +QA +tU +sP +cA +cA +gN +Px +ai +je +sa +"} +(19,1,1) = {" +sa +je +bl +do +gN +gN +gN +gN +gN +wK +wK +gN +sZ +gN +gN +gN +gN +gN +TY +TY +gN +Px +bl +je +sa +"} +(20,1,1) = {" +sa +je +bl +do +gU +kP +or +kP +kP +wL +xa +kP +Gx +kP +kP +kP +kP +SR +kP +kP +XU +Px +bl +Zr +sa +"} +(21,1,1) = {" +sa +je +bl +do +hj +OL +kP +sX +kP +xa +xa +kP +Gz +kP +kP +kP +kP +kP +kP +Vr +Yn +Px +bl +Zz +sa +"} +(22,1,1) = {" +sa +je +bl +Bv +hj +lu +Sh +Sh +Sh +xg +xg +Sh +Sh +Sh +Sh +Sh +Sh +Sh +Sh +Vu +Yn +UI +bl +je +sa +"} +(23,1,1) = {" +sa +je +bl +do +hj +ly +pe +lU +ub +xj +xj +lU +GB +lU +lU +lU +ub +SW +lU +VC +Yz +Px +bl +je +sa +"} +(24,1,1) = {" +sa +je +bl +do +hR +lU +lU +lU +lU +xs +xj +lU +lU +lU +lU +lU +lU +lU +lU +lU +YJ +Px +bl +ZD +sa +"} +(25,1,1) = {" +sa +ac +bl +do +ig +mg +pf +cA +cA +xF +yX +CC +kB +GH +cA +cA +cA +cA +HY +VG +gN +Px +bl +je +sa +"} +(26,1,1) = {" +sa +ae +ai +do +gN +cA +cA +pf +cA +xF +xF +CH +GH +cA +cA +cA +cA +HY +cA +cA +gN +Px +ai +je +sa +"} +(27,1,1) = {" +sa +je +ai +do +gN +gN +gN +sZ +gN +wK +wK +gN +gN +gN +gN +gN +gN +sZ +gN +gN +gN +Zi +ai +je +sa +"} +(28,1,1) = {" +sa +je +ai +do +gN +mj +pO +ta +uv +xN +xF +cA +cA +cA +MP +QG +Rv +Tu +Ue +mj +gN +Px +ai +je +sa +"} +(29,1,1) = {" +sa +je +ai +dt +gN +cA +cA +cA +cA +xF +xY +CI +CI +CI +MV +cA +nV +cA +cA +cA +gN +YY +ai +je +sa +"} +(30,1,1) = {" +sa +je +ai +do +gN +OL +kP +kP +kP +xa +kP +CR +kP +kP +kP +or +kP +kP +kP +WI +gN +Px +ai +je +sa +"} +(31,1,1) = {" +sa +je +ai +do +iE +mw +qn +cA +cA +xY +yY +CI +CI +LK +cA +cA +cA +cA +TO +Vu +ig +Px +ai +je +sa +"} +(32,1,1) = {" +sa +je +ai +do +iE +Mm +cA +qn +cA +cA +cA +xW +GP +xF +cA +cA +cA +TO +cA +Vu +ig +Px +ai +je +sa +"} +(33,1,1) = {" +sa +je +ai +do +gN +mK +lU +lU +lU +yj +lU +lU +lU +xj +lU +lU +RF +lU +Uu +VC +gN +Px +ai +je +sa +"} +(34,1,1) = {" +sa +je +ai +do +YU +gN +qo +qo +FV +gN +gN +jC +GT +wK +gN +gN +FV +qo +qo +gN +YU +Px +ai +je +sa +"} +(35,1,1) = {" +sa +je +ai +bl +ai +ai +Bf +Bf +ai +ai +ai +ai +GV +ys +ai +QQ +ai +Bf +Bf +ai +ai +bl +ai +je +sa +"} +(36,1,1) = {" +sa +je +ai +cR +NY +ai +rz +rz +ai +gN +DY +DY +gN +Mp +NJ +Rj +ai +rz +rz +ai +gC +cR +ai +je +sa +"} +(37,1,1) = {" +sa +je +aE +cA +gN +ai +ai +GV +ai +gN +cA +cA +gN +ai +ai +ai +ai +GV +ai +ai +gN +cA +aE +je +sa +"} +(38,1,1) = {" +sa +je +ai +fH +gN +gN +gN +hU +gN +gN +cA +cA +hU +gN +gN +gN +gN +hU +gN +gN +gN +fH +ai +je +sa +"} +(39,1,1) = {" +sa +je +ai +ai +ai +ai +ai +ai +ai +ai +ai +ai +ai +ai +ai +ai +ai +ai +ai +ai +ai +ai +ai +je +sa +"} +(40,1,1) = {" +sa +sa +sa +sa +sa +sa +sa +sa +sa +sa +sa +sa +sa +sa +sa +sa +sa +sa +sa +sa +sa +sa +sa +sa +sa +"} diff --git a/_maps/map_files/Deathmatch/SecuRing.dmm b/_maps/map_files/Deathmatch/SecuRing.dmm new file mode 100644 index 00000000000..615103813fa --- /dev/null +++ b/_maps/map_files/Deathmatch/SecuRing.dmm @@ -0,0 +1,567 @@ +//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE +"a" = ( +/turf/template_noop, +/area/template_noop) +"e" = ( +/obj/structure/barricade/security/ctf, +/turf/open/floor/mineral/plastitanium/red, +/area/deathmatch) +"l" = ( +/obj/machinery/light{ + dir = 1 + }, +/turf/open/floor/mineral/plastitanium/red, +/area/deathmatch) +"n" = ( +/turf/open/floor/pod/light, +/area/deathmatch) +"o" = ( +/obj/machinery/recharger, +/turf/open/floor/pod/light, +/area/deathmatch) +"t" = ( +/obj/structure/barricade/security/ctf, +/turf/open/floor/pod/light, +/area/deathmatch) +"u" = ( +/turf/open/floor/pod, +/area/deathmatch) +"G" = ( +/obj/structure/barricade/security/ctf, +/turf/open/floor/pod/dark, +/area/deathmatch) +"H" = ( +/obj/machinery/light{ + dir = 8 + }, +/turf/open/floor/pod, +/area/deathmatch) +"I" = ( +/turf/closed/indestructible/reinforced, +/area/deathmatch) +"M" = ( +/obj/machinery/light, +/turf/open/floor/pod, +/area/deathmatch) +"N" = ( +/obj/machinery/light{ + dir = 4 + }, +/turf/open/floor/pod, +/area/deathmatch) +"O" = ( +/obj/machinery/light{ + dir = 8 + }, +/turf/open/floor/mineral/plastitanium/red, +/area/deathmatch) +"R" = ( +/obj/machinery/light{ + dir = 1 + }, +/turf/open/floor/pod, +/area/deathmatch) +"S" = ( +/obj/machinery/light{ + dir = 4 + }, +/turf/open/floor/mineral/plastitanium/red, +/area/deathmatch) +"T" = ( +/obj/machinery/light, +/turf/open/floor/mineral/plastitanium/red, +/area/deathmatch) +"W" = ( +/turf/open/floor/pod/dark, +/area/deathmatch) +"X" = ( +/turf/open/floor/mineral/plastitanium/red, +/area/deathmatch) +"Y" = ( +/obj/effect/landmark/deathmatch_player_spawn, +/turf/open/floor/mineral/plastitanium/red, +/area/deathmatch) + +(1,1,1) = {" +a +a +a +a +a +a +a +I +I +I +I +I +I +I +a +a +a +a +a +a +a +"} +(2,1,1) = {" +a +a +a +a +a +I +I +I +X +X +O +X +X +I +I +I +a +a +a +a +a +"} +(3,1,1) = {" +a +a +a +a +I +I +X +X +X +X +Y +X +X +X +X +I +I +a +a +a +a +"} +(4,1,1) = {" +a +a +a +I +I +X +X +X +X +n +o +n +X +X +X +X +I +I +a +a +a +"} +(5,1,1) = {" +a +a +I +I +e +X +X +n +n +t +t +t +n +n +X +X +e +I +I +a +a +"} +(6,1,1) = {" +a +I +I +X +X +e +n +n +t +n +W +n +t +n +n +e +X +X +I +I +a +"} +(7,1,1) = {" +a +I +X +X +X +n +o +n +W +W +W +W +W +n +o +n +X +X +X +I +a +"} +(8,1,1) = {" +I +I +X +X +n +n +n +W +W +G +G +G +W +W +n +n +n +X +X +I +I +"} +(9,1,1) = {" +I +X +X +X +n +t +W +W +W +u +u +u +W +W +W +t +n +X +X +X +I +"} +(10,1,1) = {" +I +X +X +n +t +n +W +G +u +u +N +u +u +G +W +n +t +n +X +X +I +"} +(11,1,1) = {" +I +l +Y +o +t +W +W +G +u +M +I +R +u +G +W +W +t +o +Y +T +I +"} +(12,1,1) = {" +I +X +X +n +t +n +W +G +u +u +H +u +u +G +W +n +t +n +X +X +I +"} +(13,1,1) = {" +I +X +X +X +n +t +W +W +W +u +u +u +W +W +W +t +n +X +X +X +I +"} +(14,1,1) = {" +I +I +X +X +n +n +n +W +W +G +G +G +W +W +n +n +n +X +X +I +I +"} +(15,1,1) = {" +a +I +X +X +X +n +o +n +W +W +W +W +W +n +o +n +X +X +X +I +a +"} +(16,1,1) = {" +a +I +I +X +X +e +n +n +t +n +W +n +t +n +n +e +X +X +I +I +a +"} +(17,1,1) = {" +a +a +I +I +e +X +X +n +n +t +t +t +n +n +X +X +e +I +I +a +a +"} +(18,1,1) = {" +a +a +a +I +I +X +X +X +X +n +o +n +X +X +X +X +I +I +a +a +a +"} +(19,1,1) = {" +a +a +a +a +I +I +X +X +X +X +Y +X +X +X +X +I +I +a +a +a +a +"} +(20,1,1) = {" +a +a +a +a +a +I +I +I +X +X +S +X +X +I +I +I +a +a +a +a +a +"} +(21,1,1) = {" +a +a +a +a +a +a +a +I +I +I +I +I +I +I +a +a +a +a +a +a +a +"} diff --git a/_maps/map_files/Deathmatch/Sniper_elite.dmm b/_maps/map_files/Deathmatch/Sniper_elite.dmm new file mode 100644 index 00000000000..3882bd4a814 --- /dev/null +++ b/_maps/map_files/Deathmatch/Sniper_elite.dmm @@ -0,0 +1,802 @@ +//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE +"a" = ( +/turf/closed/indestructible/reinforced, +/area/deathmatch) +"b" = ( +/obj/item/ammo_casing/spent, +/obj/item/ammo_casing/spent, +/turf/open/floor/carpet/neon, +/area/deathmatch) +"c" = ( +/turf/open/floor/fake_snow, +/area/deathmatch) +"e" = ( +/obj/structure/statue/snow/snowman, +/obj/item/toy/balloon/syndicate{ + pixel_y = 11; + pixel_x = 5 + }, +/turf/open/floor/fake_snow, +/area/deathmatch) +"f" = ( +/obj/structure/table/reinforced/plastitaniumglass, +/obj/item/ammo_casing/spent, +/obj/item/ammo_casing/spent, +/turf/open/floor/carpet/neon, +/area/deathmatch) +"g" = ( +/obj/machinery/light{ + dir = 4 + }, +/turf/open/floor/carpet/neon, +/area/deathmatch) +"i" = ( +/obj/structure/table/reinforced/plastitaniumglass, +/turf/open/floor/carpet/neon, +/area/deathmatch) +"k" = ( +/obj/structure/rack, +/obj/item/ammo_box/magazine/sniper_rounds/penetrator, +/obj/item/ammo_casing/spent, +/turf/open/floor/carpet/neon, +/area/deathmatch) +"n" = ( +/obj/item/ammo_casing/spent, +/turf/open/floor/carpet/neon, +/area/deathmatch) +"o" = ( +/obj/item/stack/medical/suture, +/turf/open/floor/fake_snow, +/area/deathmatch) +"p" = ( +/obj/structure/barricade/wooden, +/turf/open/floor/carpet/neon, +/area/deathmatch) +"q" = ( +/obj/item/crowbar, +/turf/open/floor/carpet/neon, +/area/deathmatch) +"r" = ( +/obj/machinery/light{ + dir = 8 + }, +/obj/structure/barricade/wooden, +/turf/open/floor/carpet/neon, +/area/deathmatch) +"t" = ( +/obj/structure/barricade/wooden, +/obj/item/ammo_casing/spent, +/obj/item/ammo_casing/spent, +/turf/open/floor/carpet/neon, +/area/deathmatch) +"u" = ( +/obj/item/ammo_casing/spent, +/obj/item/ammo_casing/spent, +/obj/item/ammo_casing/spent, +/turf/open/floor/carpet/neon, +/area/deathmatch) +"v" = ( +/obj/structure/rack, +/turf/open/floor/carpet/neon, +/area/deathmatch) +"x" = ( +/obj/effect/landmark/deathmatch_player_spawn, +/obj/item/ammo_casing/spent, +/obj/item/ammo_casing/spent, +/turf/open/floor/carpet/neon, +/area/deathmatch) +"y" = ( +/obj/effect/decal/cleanable/blood/old, +/obj/item/ammo_casing/spent, +/obj/item/ammo_casing/spent, +/turf/open/floor/carpet/neon, +/area/deathmatch) +"z" = ( +/obj/machinery/light{ + dir = 8 + }, +/turf/open/floor/carpet/neon, +/area/deathmatch) +"A" = ( +/obj/machinery/light{ + dir = 1 + }, +/obj/item/ammo_casing/spent, +/turf/open/floor/carpet/neon, +/area/deathmatch) +"B" = ( +/obj/machinery/light{ + dir = 4 + }, +/turf/open/floor/fakeice/slippery, +/area/deathmatch) +"C" = ( +/obj/machinery/light{ + dir = 4 + }, +/turf/open/chasm, +/area/deathmatch) +"D" = ( +/turf/open/floor/fakeice/slippery, +/area/deathmatch) +"F" = ( +/obj/structure/closet/crate/secure/science, +/obj/item/toy/plush/lizard_plushie/green, +/turf/open/floor/carpet/neon, +/area/deathmatch) +"H" = ( +/obj/effect/decal/cleanable/blood/old, +/turf/open/floor/carpet/neon, +/area/deathmatch) +"J" = ( +/obj/effect/decal/cleanable/blood/old, +/obj/item/ammo_casing/spent, +/turf/open/floor/carpet/neon, +/area/deathmatch) +"K" = ( +/obj/machinery/light{ + dir = 4 + }, +/turf/open/floor/fake_snow, +/area/deathmatch) +"L" = ( +/obj/machinery/light{ + dir = 8 + }, +/turf/open/floor/fakeice/slippery, +/area/deathmatch) +"M" = ( +/obj/machinery/door/airlock/freezer, +/obj/structure/barricade/wooden/crude, +/turf/open/floor/iron/freezer, +/area/deathmatch) +"N" = ( +/obj/effect/landmark/deathmatch_player_spawn, +/obj/effect/decal/cleanable/blood/old, +/turf/open/floor/carpet/neon, +/area/deathmatch) +"O" = ( +/obj/machinery/door/airlock/freezer, +/turf/open/floor/iron/freezer, +/area/deathmatch) +"P" = ( +/obj/structure/table/reinforced/plastitaniumglass, +/obj/item/ammo_casing/spent, +/turf/open/floor/carpet/neon, +/area/deathmatch) +"Q" = ( +/obj/structure/rack, +/obj/item/reagent_containers/hypospray/medipen/stimulants, +/obj/item/ammo_casing/spent, +/turf/open/floor/carpet/neon, +/area/deathmatch) +"R" = ( +/obj/effect/landmark/deathmatch_player_spawn, +/obj/item/ammo_casing/spent, +/turf/open/floor/carpet/neon, +/area/deathmatch) +"U" = ( +/obj/structure/barricade/wooden, +/obj/item/ammo_casing/spent, +/turf/open/floor/carpet/neon, +/area/deathmatch) +"V" = ( +/obj/structure/rack, +/obj/item/ammo_box/magazine/sniper_rounds/penetrator, +/turf/open/floor/carpet/neon, +/area/deathmatch) +"W" = ( +/obj/structure/toilet{ + dir = 8 + }, +/obj/machinery/light{ + dir = 4 + }, +/obj/effect/decal/cleanable/blood/old, +/turf/open/floor/iron/freezer, +/area/deathmatch) +"Y" = ( +/turf/open/floor/carpet/neon, +/area/deathmatch) +"Z" = ( +/obj/effect/landmark/deathmatch_player_spawn, +/obj/item/ammo_casing/spent, +/obj/item/ammo_casing/spent, +/obj/item/ammo_casing/spent, +/turf/open/floor/carpet/neon, +/area/deathmatch) + +(1,1,1) = {" +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +"} +(2,1,1) = {" +a +F +r +Y +p +Y +Y +Y +z +H +Y +Y +p +Y +H +Y +z +Y +Y +i +Y +H +Y +Y +Y +Y +z +Y +Y +Y +a +"} +(3,1,1) = {" +a +p +H +Y +i +Y +H +Y +i +Y +Y +Y +p +Y +Y +Y +i +Y +Y +p +Y +Y +i +Y +Y +H +Y +Y +J +n +a +"} +(4,1,1) = {" +a +Y +Y +H +p +Y +Y +Y +i +Y +Y +Y +i +Y +H +Y +i +H +Y +p +Y +Y +i +H +Y +Y +i +Y +P +P +a +"} +(5,1,1) = {" +a +i +i +Y +a +Y +H +Y +p +Y +H +Y +i +Y +Y +Y +p +Y +Y +a +Y +Y +a +n +J +n +p +n +Y +H +a +"} +(6,1,1) = {" +a +Y +Y +Y +a +n +R +J +a +n +n +n +N +n +n +n +p +b +b +y +b +x +a +b +b +x +p +Y +H +Y +a +"} +(7,1,1) = {" +a +a +p +i +a +P +P +U +a +a +P +P +p +p +P +P +a +a +P +P +P +U +a +f +f +t +a +a +p +a +a +"} +(8,1,1) = {" +a +n +J +n +U +c +c +c +c +e +c +c +c +c +c +c +L +D +D +c +c +c +c +c +D +D +P +J +Y +H +a +"} +(9,1,1) = {" +a +A +n +n +P +c +c +D +D +c +o +D +D +D +c +D +D +D +D +D +D +c +D +D +D +D +P +n +Y +v +a +"} +(10,1,1) = {" +a +k +n +n +P +D +D +D +D +D +D +D +D +D +D +D +D +c +D +D +D +D +D +D +D +c +a +A +H +V +a +"} +(11,1,1) = {" +a +Q +n +J +U +D +D +c +K +D +D +c +c +D +D +c +c +c +c +c +D +D +B +c +c +c +p +Y +Y +Y +a +"} +(12,1,1) = {" +a +p +p +a +U +U +P +P +a +U +P +P +p +P +P +P +a +U +P +P +P +P +a +p +i +i +a +a +p +a +a +"} +(13,1,1) = {" +a +Y +Y +Y +n +n +R +n +p +n +n +n +R +n +n +n +p +x +n +n +n +n +a +Z +u +u +p +Y +Y +H +a +"} +(14,1,1) = {" +a +Y +Y +H +Y +Y +Y +Y +a +Y +Y +Y +Y +Y +Y +H +a +Y +Y +H +Y +Y +i +Y +Y +H +p +p +i +Y +a +"} +(15,1,1) = {" +a +q +Y +Y +a +Y +Y +Y +i +Y +Y +H +a +Y +Y +Y +Y +Y +Y +Y +Y +Y +p +Y +Y +Y +i +Y +H +Y +a +"} +(16,1,1) = {" +a +M +a +O +a +Y +Y +H +i +Y +Y +Y +i +Y +Y +Y +g +Y +Y +i +Y +Y +H +Y +Y +Y +g +Y +i +i +a +"} +(17,1,1) = {" +a +C +a +W +p +Y +Y +Y +g +Y +Y +Y +i +Y +H +Y +a +Y +Y +i +Y +Y +Y +Y +H +Y +a +Y +Y +Y +a +"} +(18,1,1) = {" +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +"} diff --git a/_maps/map_files/Deathmatch/The_Brig.dmm b/_maps/map_files/Deathmatch/The_Brig.dmm new file mode 100644 index 00000000000..15048da48e2 --- /dev/null +++ b/_maps/map_files/Deathmatch/The_Brig.dmm @@ -0,0 +1,4779 @@ +//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE +"aa" = ( +/obj/machinery/door/poddoor/shutters{ + id = "dm16"; + name = "Visitation Shutters" + }, +/obj/structure/window/reinforced/spawner/directional/south, +/obj/structure/table, +/turf/open/indestructible, +/area/deathmatch) +"ad" = ( +/obj/structure/rack, +/obj/item/storage/briefcase{ + pixel_x = -3; + pixel_y = 2 + }, +/turf/open/floor/iron/grimy, +/area/deathmatch) +"al" = ( +/obj/structure/marker_beacon/burgundy, +/obj/structure/lattice/catwalk, +/turf/template_noop, +/area/template_noop) +"an" = ( +/obj/structure/lattice, +/turf/template_noop, +/area/space) +"ao" = ( +/obj/structure/rack, +/obj/machinery/camera/motion{ + c_tag = "Armory - Internal"; + dir = 4 + }, +/obj/effect/turf_decal/tile/blue, +/obj/effect/turf_decal/tile/blue{ + dir = 8 + }, +/obj/effect/turf_decal/tile/blue{ + dir = 4 + }, +/obj/machinery/light/directional/west, +/obj/item/reagent_containers/cup/bucket, +/turf/open/indestructible/dark, +/area/deathmatch) +"aw" = ( +/obj/structure/extinguisher_cabinet/directional/east, +/turf/closed/indestructible/reinforced, +/area/deathmatch) +"aB" = ( +/obj/structure/table, +/obj/item/flashlight, +/turf/open/indestructible/dark, +/area/deathmatch) +"aE" = ( +/obj/structure/chair/wood{ + dir = 8 + }, +/obj/structure/cable, +/turf/open/floor/carpet, +/area/deathmatch) +"aH" = ( +/obj/structure/table/wood, +/obj/item/folder/red, +/obj/item/hand_labeler, +/obj/item/camera/detective, +/turf/open/floor/carpet, +/area/deathmatch) +"aI" = ( +/obj/effect/decal/cleanable/oil/slippery, +/turf/open/floor/iron/grimy, +/area/deathmatch) +"aR" = ( +/obj/effect/turf_decal/tile/neutral{ + dir = 1 + }, +/obj/effect/turf_decal/tile/neutral, +/obj/effect/turf_decal/tile/neutral{ + dir = 4 + }, +/obj/effect/turf_decal/tile/neutral{ + dir = 8 + }, +/obj/effect/landmark/deathmatch_player_spawn, +/turf/open/indestructible/dark, +/area/deathmatch) +"aZ" = ( +/obj/structure/cable, +/obj/effect/turf_decal/tile/red{ + dir = 1 + }, +/obj/structure/disposalpipe/segment{ + dir = 9 + }, +/turf/open/indestructible, +/area/deathmatch) +"bc" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/turf/open/indestructible, +/area/deathmatch) +"bh" = ( +/obj/effect/decal/cleanable/blood/footprints{ + dir = 8 + }, +/turf/open/indestructible, +/area/deathmatch) +"bj" = ( +/obj/structure/closet{ + name = "Evidence Closet 2" + }, +/obj/effect/turf_decal/tile/neutral{ + dir = 1 + }, +/obj/effect/turf_decal/tile/neutral, +/obj/effect/turf_decal/tile/neutral{ + dir = 4 + }, +/obj/effect/turf_decal/tile/neutral{ + dir = 8 + }, +/obj/effect/turf_decal/tile/red{ + dir = 4 + }, +/obj/effect/turf_decal/tile/red, +/turf/open/indestructible/dark, +/area/deathmatch) +"bp" = ( +/obj/machinery/light/small/directional/south, +/obj/structure/cable, +/obj/effect/turf_decal/trimline/blue/filled/line, +/turf/open/floor/iron/white, +/area/deathmatch) +"br" = ( +/obj/effect/turf_decal/tile/red, +/obj/effect/turf_decal/tile/red{ + dir = 8 + }, +/obj/structure/cable, +/obj/effect/decal/cleanable/blood/splatter, +/turf/open/indestructible, +/area/deathmatch) +"by" = ( +/obj/machinery/photocopier{ + pixel_y = 3 + }, +/turf/open/indestructible/dark, +/area/deathmatch) +"bA" = ( +/obj/effect/decal/cleanable/blood/tracks, +/turf/open/indestructible/dark, +/area/deathmatch) +"bI" = ( +/obj/effect/turf_decal/trimline/blue/filled/corner{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/red/filled/corner{ + dir = 1 + }, +/turf/open/indestructible, +/area/deathmatch) +"bM" = ( +/obj/effect/decal/cleanable/dirt, +/obj/structure/cable, +/obj/effect/landmark/deathmatch_player_spawn, +/turf/open/indestructible, +/area/deathmatch) +"cf" = ( +/obj/structure/cable, +/turf/open/floor/carpet, +/area/deathmatch) +"cl" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 9 + }, +/obj/structure/window/reinforced/spawner/directional/west, +/obj/structure/cable, +/turf/open/indestructible, +/area/deathmatch) +"cs" = ( +/obj/structure/cable, +/obj/structure/disposalpipe/segment{ + dir = 1 + }, +/turf/open/indestructible, +/area/deathmatch) +"ct" = ( +/obj/effect/turf_decal/tile/neutral, +/obj/effect/turf_decal/tile/neutral{ + dir = 8 + }, +/obj/structure/cable, +/turf/open/indestructible/dark, +/area/deathmatch) +"cN" = ( +/obj/effect/decal/cleanable/blood/drip, +/turf/open/indestructible, +/area/deathmatch) +"cW" = ( +/obj/effect/turf_decal/trimline/red/filled/line{ + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 9 + }, +/turf/open/indestructible, +/area/deathmatch) +"cX" = ( +/obj/structure/cable, +/obj/machinery/power/rtg/debug, +/turf/open/indestructible/dark, +/area/deathmatch) +"da" = ( +/obj/structure/disposalpipe/segment{ + dir = 9 + }, +/obj/structure/cable, +/obj/effect/turf_decal/trimline/red/filled/line{ + dir = 4 + }, +/turf/open/indestructible, +/area/deathmatch) +"dl" = ( +/obj/effect/turf_decal/tile/red{ + dir = 8 + }, +/obj/effect/turf_decal/tile/red{ + dir = 1 + }, +/obj/structure/cable, +/obj/structure/disposalpipe/segment, +/obj/structure/chair{ + dir = 8 + }, +/turf/open/indestructible, +/area/deathmatch) +"dp" = ( +/turf/open/floor/carpet, +/area/deathmatch) +"dq" = ( +/obj/structure/rack, +/obj/effect/turf_decal/tile/blue{ + dir = 4 + }, +/obj/effect/turf_decal/tile/blue, +/obj/structure/cable, +/obj/item/shield/riot{ + pixel_x = 3; + pixel_y = -3 + }, +/obj/item/shield/riot, +/obj/item/shield/riot{ + pixel_x = -3; + pixel_y = 3 + }, +/turf/open/indestructible/dark, +/area/deathmatch) +"du" = ( +/turf/closed/indestructible/fakedoor, +/area/deathmatch) +"dA" = ( +/obj/effect/turf_decal/tile/blue{ + dir = 8 + }, +/obj/effect/turf_decal/tile/blue{ + dir = 1 + }, +/turf/open/indestructible/dark, +/area/deathmatch) +"dN" = ( +/obj/effect/turf_decal/trimline/red/filled/corner, +/obj/effect/decal/cleanable/oil/slippery, +/turf/open/indestructible/dark, +/area/deathmatch) +"ew" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 5 + }, +/obj/structure/cable, +/turf/open/indestructible, +/area/deathmatch) +"eB" = ( +/obj/structure/window/reinforced/spawner/directional/north, +/obj/structure/bodycontainer/morgue, +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 8 + }, +/turf/open/floor/iron/white, +/area/deathmatch) +"eC" = ( +/obj/effect/turf_decal/tile/red{ + dir = 8 + }, +/obj/structure/cable, +/turf/open/indestructible, +/area/deathmatch) +"eD" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/iron/grimy, +/area/deathmatch) +"eT" = ( +/obj/effect/turf_decal/tile/red{ + dir = 8 + }, +/obj/effect/turf_decal/tile/red, +/obj/effect/turf_decal/tile/red{ + dir = 1 + }, +/turf/open/indestructible/dark, +/area/deathmatch) +"eU" = ( +/obj/structure/disposalpipe/segment, +/obj/effect/turf_decal/trimline/red/filled/line{ + dir = 8 + }, +/obj/vehicle/ridden/secway, +/obj/item/spear, +/turf/open/indestructible, +/area/deathmatch) +"eZ" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 6 + }, +/obj/structure/cable, +/turf/open/indestructible, +/area/deathmatch) +"fB" = ( +/obj/effect/turf_decal/tile/neutral, +/obj/effect/turf_decal/tile/neutral{ + dir = 4 + }, +/turf/open/indestructible/dark, +/area/deathmatch) +"fE" = ( +/obj/structure/rack, +/obj/effect/turf_decal/tile/red{ + dir = 4 + }, +/obj/effect/turf_decal/tile/red{ + dir = 1 + }, +/turf/open/indestructible, +/area/deathmatch) +"fL" = ( +/obj/structure/cable, +/obj/structure/reagent_dispensers/fueltank, +/turf/open/indestructible/dark, +/area/deathmatch) +"fO" = ( +/obj/structure/extinguisher_cabinet/directional/east, +/obj/effect/turf_decal/tile/neutral{ + dir = 1 + }, +/obj/effect/turf_decal/tile/neutral, +/obj/effect/turf_decal/tile/neutral{ + dir = 4 + }, +/obj/effect/turf_decal/tile/neutral{ + dir = 8 + }, +/obj/machinery/suit_storage_unit, +/turf/open/indestructible/dark, +/area/deathmatch) +"gd" = ( +/obj/effect/turf_decal/tile/blue{ + dir = 8 + }, +/obj/effect/turf_decal/tile/blue{ + dir = 1 + }, +/obj/structure/cable, +/turf/open/indestructible/dark, +/area/deathmatch) +"gf" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/structure/cable, +/obj/machinery/light/small/directional/east, +/turf/open/indestructible, +/area/deathmatch) +"gC" = ( +/obj/machinery/suit_storage_unit, +/turf/open/indestructible/dark, +/area/deathmatch) +"gE" = ( +/obj/structure/table/wood, +/obj/item/folder/red{ + pixel_x = -7; + pixel_y = 6 + }, +/obj/item/folder/red{ + pixel_x = -7 + }, +/turf/open/indestructible/dark, +/area/deathmatch) +"gI" = ( +/obj/machinery/light/small/directional/north, +/turf/open/floor/iron/grimy, +/area/deathmatch) +"hi" = ( +/turf/open/floor/plating, +/area/deathmatch) +"hv" = ( +/obj/effect/turf_decal/trimline/red/filled/corner{ + dir = 8 + }, +/obj/structure/rack, +/turf/open/indestructible, +/area/deathmatch) +"hw" = ( +/obj/effect/spawner/structure/window/reinforced, +/obj/machinery/door/poddoor/preopen{ + id = "briglockdown"; + name = "Brig Shutters" + }, +/obj/structure/cable, +/turf/open/floor/plating, +/area/deathmatch) +"hx" = ( +/obj/machinery/microwave{ + pixel_x = -3; + pixel_y = 6 + }, +/obj/structure/table, +/obj/effect/turf_decal/tile/red{ + dir = 8 + }, +/obj/effect/turf_decal/tile/red, +/turf/open/indestructible/dark, +/area/deathmatch) +"hG" = ( +/obj/structure/table/wood, +/obj/item/storage/fancy/cigarettes/cigpack_syndicate, +/turf/open/floor/carpet, +/area/deathmatch) +"hK" = ( +/obj/structure/table, +/obj/structure/window/reinforced/spawner/directional/east, +/obj/item/paper_bin{ + pixel_x = -3; + pixel_y = 7 + }, +/obj/item/pen, +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 5 + }, +/turf/open/floor/iron/white, +/area/deathmatch) +"hS" = ( +/obj/structure/table/wood, +/obj/machinery/computer/security/telescreen{ + desc = "Used for watching Prison Wing holding areas."; + name = "Prison Monitor"; + network = list("prison"); + pixel_y = 30 + }, +/obj/item/flashlight/lamp/green{ + pixel_x = 1; + pixel_y = 5 + }, +/turf/open/floor/carpet, +/area/deathmatch) +"hY" = ( +/obj/effect/turf_decal/tile/red{ + dir = 4 + }, +/obj/structure/cable, +/obj/structure/disposalpipe/segment{ + dir = 6 + }, +/obj/effect/turf_decal/tile/red{ + dir = 1 + }, +/obj/structure/chair{ + dir = 1 + }, +/turf/open/indestructible, +/area/deathmatch) +"iy" = ( +/obj/structure/table, +/obj/item/storage/backpack/duffelbag/sec{ + pixel_y = 7 + }, +/obj/item/storage/backpack/duffelbag/sec, +/turf/open/indestructible/dark, +/area/deathmatch) +"iB" = ( +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock/security/glass{ + name = "Security E.V.A. Storage" + }, +/obj/structure/cable, +/obj/effect/mapping_helpers/airlock/locked, +/turf/open/indestructible, +/area/deathmatch) +"iI" = ( +/obj/effect/turf_decal/tile/red{ + dir = 4 + }, +/obj/effect/turf_decal/tile/red, +/obj/machinery/computer/old{ + dir = 4 + }, +/turf/open/indestructible, +/area/deathmatch) +"ja" = ( +/obj/structure/cable, +/obj/effect/turf_decal/trimline/red/filled/line{ + dir = 4 + }, +/obj/machinery/computer/old{ + dir = 8 + }, +/turf/open/indestructible, +/area/deathmatch) +"je" = ( +/obj/machinery/light/directional/south, +/obj/effect/turf_decal/tile/red{ + dir = 8 + }, +/obj/structure/cable, +/turf/open/indestructible, +/area/deathmatch) +"jr" = ( +/obj/effect/decal/cleanable/dirt, +/obj/structure/cable, +/obj/effect/turf_decal/trimline/red/filled/line{ + dir = 5 + }, +/turf/open/indestructible, +/area/deathmatch) +"jB" = ( +/obj/machinery/light_switch/directional/west, +/turf/open/indestructible/dark, +/area/deathmatch) +"jN" = ( +/obj/structure/table, +/obj/machinery/light/small/directional/north, +/obj/item/folder/red{ + pixel_x = 3 + }, +/obj/item/folder/white{ + pixel_x = -4; + pixel_y = 2 + }, +/obj/item/healthanalyzer, +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 1 + }, +/turf/open/floor/iron/white, +/area/deathmatch) +"jQ" = ( +/obj/structure/table/wood, +/obj/machinery/computer/security/wooden_tv{ + pixel_x = 3; + pixel_y = 2 + }, +/obj/machinery/button/door/directional/north{ + id = "dm7"; + name = "detective's office shutters control" + }, +/turf/open/floor/carpet, +/area/deathmatch) +"jT" = ( +/obj/structure/cable, +/obj/effect/turf_decal/trimline/red/filled/line, +/obj/structure/disposalpipe/segment, +/turf/open/indestructible, +/area/deathmatch) +"jX" = ( +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock/security/glass{ + name = "Security Airlock" + }, +/turf/open/indestructible, +/area/deathmatch) +"kf" = ( +/obj/structure/cable, +/obj/effect/decal/cleanable/dirt, +/obj/effect/turf_decal/trimline/red/filled/line{ + dir = 10 + }, +/obj/structure/disposalpipe/segment{ + dir = 1 + }, +/turf/open/indestructible, +/area/deathmatch) +"ki" = ( +/obj/structure/extinguisher_cabinet/directional/south, +/obj/effect/turf_decal/tile/red{ + dir = 8 + }, +/obj/structure/cable, +/turf/open/indestructible, +/area/deathmatch) +"kj" = ( +/obj/effect/turf_decal/trimline/red/filled/line{ + dir = 1 + }, +/obj/structure/chair/stool/directional/south, +/turf/open/indestructible, +/area/deathmatch) +"ku" = ( +/obj/structure/table, +/obj/item/wirecutters, +/obj/item/screwdriver{ + pixel_x = -2; + pixel_y = 10 + }, +/obj/effect/turf_decal/trimline/red/filled/line{ + dir = 8 + }, +/obj/machinery/syndicatebomb/training, +/turf/open/indestructible, +/area/deathmatch) +"kU" = ( +/obj/effect/turf_decal/stripes/line, +/turf/open/indestructible, +/area/deathmatch) +"kV" = ( +/obj/structure/cable, +/obj/structure/disposalpipe/segment, +/obj/structure/bed/dogbed/mcgriff, +/obj/effect/turf_decal/trimline/red/filled/line{ + dir = 9 + }, +/turf/open/indestructible, +/area/deathmatch) +"la" = ( +/obj/machinery/vending/wardrobe/sec_wardrobe{ + active = 0 + }, +/obj/effect/turf_decal/tile/red{ + dir = 8 + }, +/obj/effect/turf_decal/tile/red{ + dir = 1 + }, +/turf/open/indestructible/dark, +/area/deathmatch) +"lf" = ( +/turf/closed/indestructible/fakedoor/glass_airlock, +/area/deathmatch) +"li" = ( +/obj/structure/table, +/obj/item/clothing/mask/surgical, +/obj/item/reagent_containers/spray/cleaner, +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 9 + }, +/turf/open/floor/iron/white, +/area/deathmatch) +"lj" = ( +/obj/item/paper_bin/carbon, +/obj/item/pen/fountain, +/obj/structure/table, +/turf/open/indestructible/dark, +/area/deathmatch) +"lC" = ( +/obj/structure/filingcabinet, +/turf/open/floor/iron/grimy, +/area/deathmatch) +"lT" = ( +/obj/machinery/button/flasher{ + id = "dm1"; + name = "Brig Entrance Flasher"; + pixel_x = -6; + pixel_y = -38 + }, +/obj/machinery/button/flasher{ + id = "dm2"; + name = "Holding Cell Flasher"; + pixel_x = 6; + pixel_y = -38 + }, +/turf/open/indestructible, +/area/deathmatch) +"lV" = ( +/obj/structure/cable, +/obj/effect/turf_decal/tile/neutral{ + dir = 8 + }, +/obj/effect/turf_decal/tile/neutral{ + dir = 4 + }, +/obj/effect/turf_decal/tile/neutral{ + dir = 1 + }, +/obj/effect/turf_decal/tile/neutral, +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock/security/glass{ + name = "Security Airlock" + }, +/turf/open/indestructible/dark, +/area/deathmatch) +"ma" = ( +/obj/effect/spawner/structure/window/reinforced, +/obj/structure/cable, +/obj/machinery/door/poddoor/preopen{ + id = "briglockdown"; + name = "Brig Shutters" + }, +/turf/open/floor/plating, +/area/deathmatch) +"mc" = ( +/obj/structure/closet/bombcloset/security, +/obj/effect/turf_decal/tile/red{ + dir = 4 + }, +/obj/effect/turf_decal/tile/red, +/obj/structure/window/reinforced/spawner/directional/west, +/turf/open/indestructible, +/area/deathmatch) +"mi" = ( +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock/security/glass{ + name = "Security Airlock" + }, +/turf/open/indestructible/dark, +/area/deathmatch) +"mn" = ( +/obj/effect/decal/cleanable/dirt, +/obj/structure/closet/secure_closet/brig{ + id = "Cell 3"; + name = "Cell 3 Locker" + }, +/obj/structure/cable, +/turf/open/indestructible, +/area/deathmatch) +"mC" = ( +/obj/effect/turf_decal/bot, +/obj/structure/plasticflaps/opaque{ + name = "Security Deliveries" + }, +/turf/open/indestructible, +/area/deathmatch) +"mE" = ( +/obj/structure/extinguisher_cabinet/directional/east, +/obj/effect/turf_decal/trimline/red/filled/corner{ + dir = 4 + }, +/obj/structure/table, +/obj/machinery/recharger{ + pixel_y = 4 + }, +/turf/open/indestructible, +/area/deathmatch) +"mG" = ( +/obj/structure/chair/comfy/black, +/obj/effect/landmark/deathmatch_player_spawn, +/turf/open/indestructible/dark, +/area/deathmatch) +"mJ" = ( +/obj/machinery/door/airlock/maintenance{ + name = "Security Maintenance" + }, +/obj/effect/mapping_helpers/airlock/locked, +/turf/open/floor/plating, +/area/deathmatch) +"mR" = ( +/obj/effect/turf_decal/trimline/red/filled/line{ + dir = 1 + }, +/obj/structure/cable, +/obj/structure/disposalpipe/segment{ + dir = 9 + }, +/turf/open/indestructible, +/area/deathmatch) +"mS" = ( +/obj/structure/cable, +/obj/effect/turf_decal/tile/red{ + dir = 4 + }, +/turf/open/indestructible, +/area/deathmatch) +"mW" = ( +/obj/structure/cable, +/obj/machinery/button/door/directional/south{ + id = "dm4"; + name = "Armory Shutters" + }, +/turf/open/indestructible/dark, +/area/deathmatch) +"ne" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 8 + }, +/turf/open/indestructible/hotelwood, +/area/deathmatch) +"nf" = ( +/obj/machinery/light/directional/south, +/obj/structure/fluff/fake_camera{ + dir = 5 + }, +/turf/open/indestructible, +/area/deathmatch) +"nh" = ( +/obj/machinery/door/firedoor, +/obj/effect/mapping_helpers/airlock/cyclelink_helper{ + dir = 1 + }, +/obj/effect/decal/cleanable/dirt, +/obj/structure/cable, +/obj/machinery/flasher/directional/east{ + id = "dm1" + }, +/obj/machinery/door/airlock/security/glass{ + name = "Security Airlock" + }, +/turf/open/indestructible, +/area/deathmatch) +"nq" = ( +/obj/structure/cable, +/obj/effect/landmark/deathmatch_player_spawn, +/turf/open/indestructible, +/area/deathmatch) +"nx" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/turf_decal/trimline/red/filled/line{ + dir = 1 + }, +/turf/open/indestructible, +/area/deathmatch) +"nz" = ( +/obj/structure/table, +/obj/item/storage/box/donkpockets{ + pixel_x = -13; + pixel_y = 9 + }, +/obj/item/storage/fancy/donut_box{ + pixel_x = 4 + }, +/obj/effect/turf_decal/tile/red{ + dir = 8 + }, +/obj/effect/turf_decal/tile/red, +/obj/structure/cable, +/turf/open/indestructible/dark, +/area/deathmatch) +"nB" = ( +/obj/effect/turf_decal/trimline/red/filled/line{ + dir = 9 + }, +/turf/open/indestructible, +/area/deathmatch) +"nH" = ( +/obj/structure/rack, +/obj/effect/turf_decal/tile/blue, +/obj/effect/turf_decal/tile/blue{ + dir = 8 + }, +/obj/effect/turf_decal/tile/blue{ + dir = 4 + }, +/turf/open/indestructible/dark, +/area/deathmatch) +"nI" = ( +/obj/effect/decal/cleanable/dirt, +/obj/structure/cable, +/turf/open/indestructible, +/area/deathmatch) +"nN" = ( +/obj/structure/table, +/obj/item/flashlight/lamp, +/turf/open/indestructible/dark, +/area/deathmatch) +"nY" = ( +/obj/structure/table/wood, +/obj/machinery/light/small/directional/west, +/obj/machinery/button/door/directional/west{ + id = "dm6"; + name = "Privacy Shutters Control" + }, +/turf/open/indestructible/hotelwood, +/area/deathmatch) +"ob" = ( +/obj/effect/turf_decal/tile/red{ + dir = 4 + }, +/obj/effect/turf_decal/tile/red, +/obj/structure/cable, +/obj/structure/chair{ + dir = 4 + }, +/turf/open/indestructible, +/area/deathmatch) +"os" = ( +/obj/structure/sign/warning/pods{ + pixel_x = 32 + }, +/turf/open/indestructible, +/area/deathmatch) +"oy" = ( +/obj/machinery/light_switch/directional/west, +/turf/open/floor/iron/grimy, +/area/deathmatch) +"oA" = ( +/obj/machinery/light/directional/north, +/turf/open/indestructible, +/area/deathmatch) +"oB" = ( +/obj/structure/closet/secure_closet/evidence, +/obj/effect/turf_decal/tile/neutral{ + dir = 1 + }, +/obj/effect/turf_decal/tile/neutral, +/obj/effect/turf_decal/tile/neutral{ + dir = 4 + }, +/obj/effect/turf_decal/tile/neutral{ + dir = 8 + }, +/obj/effect/turf_decal/tile/red{ + dir = 8 + }, +/obj/effect/turf_decal/tile/red{ + dir = 1 + }, +/obj/effect/spawner/random/contraband/narcotics, +/turf/open/indestructible/dark, +/area/deathmatch) +"oD" = ( +/obj/effect/turf_decal/tile/red{ + dir = 8 + }, +/obj/structure/disposaloutlet{ + dir = 4; + name = "Cargo Deliveries" + }, +/obj/structure/disposalpipe/trunk{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/brown/warning{ + dir = 9 + }, +/obj/effect/turf_decal/trimline/brown/warning{ + dir = 9 + }, +/obj/structure/window/reinforced/spawner/directional/west, +/obj/effect/turf_decal/siding/red{ + dir = 1 + }, +/turf/open/indestructible, +/area/deathmatch) +"oN" = ( +/obj/effect/turf_decal/tile/red{ + dir = 1 + }, +/obj/effect/turf_decal/tile/red{ + dir = 8 + }, +/obj/machinery/light/directional/north, +/obj/structure/reagent_dispensers/fueltank, +/turf/open/indestructible/dark, +/area/deathmatch) +"oQ" = ( +/obj/machinery/door/firedoor, +/obj/effect/turf_decal/delivery, +/obj/structure/cable, +/obj/machinery/door/airlock/security/glass{ + name = "Security Airlock" + }, +/turf/open/indestructible/dark, +/area/deathmatch) +"oY" = ( +/obj/structure/chair/office{ + dir = 4 + }, +/obj/structure/cable, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/red/filled/line{ + dir = 5 + }, +/turf/open/indestructible, +/area/deathmatch) +"pa" = ( +/obj/effect/turf_decal/tile/red{ + dir = 8 + }, +/obj/effect/turf_decal/tile/red{ + dir = 1 + }, +/obj/machinery/light/directional/east, +/obj/structure/closet/secure_closet/security/sec{ + anchored = 1 + }, +/turf/open/indestructible/dark, +/area/deathmatch) +"pc" = ( +/obj/structure/cable, +/obj/structure/disposalpipe/segment{ + dir = 5 + }, +/turf/open/indestructible, +/area/deathmatch) +"pe" = ( +/obj/effect/turf_decal/bot, +/turf/open/indestructible/dark, +/area/deathmatch) +"pg" = ( +/obj/machinery/door/poddoor/shutters{ + id = "dm16"; + name = "Visitation Shutters" + }, +/obj/effect/spawner/structure/window/reinforced, +/obj/structure/cable, +/turf/open/floor/plating, +/area/deathmatch) +"ph" = ( +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 4 + }, +/turf/open/floor/iron/white, +/area/deathmatch) +"pr" = ( +/obj/effect/spawner/structure/window/reinforced, +/obj/structure/cable, +/obj/machinery/door/poddoor/preopen{ + id = "dm6"; + name = "Privacy Shutters" + }, +/turf/open/floor/plating, +/area/deathmatch) +"pC" = ( +/obj/effect/turf_decal/tile/neutral{ + dir = 1 + }, +/obj/effect/turf_decal/tile/neutral, +/obj/effect/turf_decal/tile/neutral{ + dir = 4 + }, +/obj/effect/turf_decal/tile/neutral{ + dir = 8 + }, +/obj/effect/turf_decal/tile/red{ + dir = 8 + }, +/obj/effect/turf_decal/tile/red{ + dir = 1 + }, +/turf/open/indestructible/dark, +/area/deathmatch) +"pF" = ( +/obj/structure/rack, +/obj/item/book/manual/wiki/security_space_law{ + pixel_x = -5; + pixel_y = 7 + }, +/obj/item/book/manual/wiki/security_space_law{ + pixel_y = 4 + }, +/obj/item/book/manual/wiki/security_space_law{ + pixel_x = 5; + pixel_y = 2 + }, +/obj/effect/turf_decal/siding/wood{ + dir = 8 + }, +/obj/structure/cable, +/turf/open/indestructible/hotelwood, +/area/deathmatch) +"pM" = ( +/obj/structure/table, +/obj/machinery/recharger{ + pixel_y = 4 + }, +/obj/structure/cable, +/obj/effect/turf_decal/tile/red{ + dir = 8 + }, +/obj/effect/turf_decal/tile/red{ + dir = 1 + }, +/turf/open/indestructible/dark, +/area/deathmatch) +"pV" = ( +/obj/machinery/computer/old{ + dir = 8 + }, +/turf/open/floor/carpet, +/area/deathmatch) +"pY" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/turf_decal/trimline/red/filled/line, +/turf/open/indestructible, +/area/deathmatch) +"qd" = ( +/obj/structure/cable, +/obj/effect/spawner/structure/window/reinforced, +/turf/open/floor/plating, +/area/deathmatch) +"qf" = ( +/obj/structure/chair{ + dir = 8 + }, +/turf/open/indestructible/dark, +/area/deathmatch) +"qk" = ( +/obj/structure/cable, +/obj/effect/decal/cleanable/blood/gibs/body, +/turf/open/indestructible, +/area/deathmatch) +"qv" = ( +/obj/structure/disposalpipe/segment{ + dir = 9 + }, +/turf/open/floor/iron/grimy, +/area/deathmatch) +"qy" = ( +/obj/structure/table, +/obj/item/folder/blue{ + pixel_x = -2; + pixel_y = 3 + }, +/turf/open/indestructible/dark, +/area/deathmatch) +"qC" = ( +/obj/effect/turf_decal/tile/red, +/turf/open/indestructible, +/area/deathmatch) +"qE" = ( +/obj/effect/turf_decal/trimline/neutral/filled/corner{ + dir = 8 + }, +/turf/open/indestructible/dark, +/area/deathmatch) +"qP" = ( +/obj/machinery/light/directional/east, +/turf/open/indestructible/hotelwood, +/area/deathmatch) +"qS" = ( +/obj/structure/table, +/obj/item/reagent_containers/cup/bottle/epinephrine, +/obj/item/reagent_containers/cup/bottle/multiver, +/obj/item/reagent_containers/syringe, +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 8 + }, +/turf/open/floor/iron/white, +/area/deathmatch) +"ri" = ( +/obj/structure/extinguisher_cabinet/directional/east, +/obj/effect/turf_decal/trimline/red/filled/line{ + dir = 4 + }, +/obj/structure/disposalpipe/segment, +/turf/open/indestructible, +/area/deathmatch) +"rl" = ( +/obj/effect/turf_decal/trimline/red/filled/line{ + dir = 8 + }, +/obj/structure/disposalpipe/segment{ + dir = 1 + }, +/obj/effect/decal/cleanable/oil/slippery, +/turf/open/indestructible, +/area/deathmatch) +"rN" = ( +/obj/effect/turf_decal/trimline/red/filled/line{ + dir = 4 + }, +/obj/machinery/light_switch/directional/east, +/turf/open/indestructible, +/area/deathmatch) +"sb" = ( +/obj/structure/closet{ + name = "Evidence Closet 4" + }, +/obj/effect/turf_decal/tile/neutral{ + dir = 1 + }, +/obj/effect/turf_decal/tile/neutral, +/obj/effect/turf_decal/tile/neutral{ + dir = 4 + }, +/obj/effect/turf_decal/tile/neutral{ + dir = 8 + }, +/obj/effect/turf_decal/tile/red{ + dir = 8 + }, +/obj/effect/turf_decal/tile/red{ + dir = 1 + }, +/obj/item/storage/toolbox/emergency/old, +/turf/open/indestructible/dark, +/area/deathmatch) +"sg" = ( +/obj/machinery/light/small/directional/south, +/turf/open/floor/iron/grimy, +/area/deathmatch) +"sr" = ( +/obj/structure/cable, +/obj/effect/decal/cleanable/dirt, +/obj/effect/turf_decal/trimline/red/filled/line{ + dir = 9 + }, +/obj/structure/disposalpipe/segment{ + dir = 1 + }, +/turf/open/indestructible, +/area/deathmatch) +"st" = ( +/obj/structure/chair{ + dir = 1 + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/indestructible, +/area/deathmatch) +"sw" = ( +/obj/item/target, +/obj/item/target, +/obj/item/target/alien, +/obj/item/target/alien, +/obj/item/target/clown, +/obj/item/target/clown, +/obj/item/target/syndicate, +/obj/item/target/syndicate, +/obj/structure/closet/crate/secure{ + desc = "A secure crate containing various materials for building a customised test-site."; + name = "Firing Range Gear Crate" + }, +/obj/effect/turf_decal/tile/neutral{ + dir = 1 + }, +/obj/effect/turf_decal/tile/neutral{ + dir = 4 + }, +/obj/effect/turf_decal/tile/neutral{ + dir = 8 + }, +/turf/open/indestructible/dark, +/area/deathmatch) +"sA" = ( +/obj/effect/turf_decal/tile/red{ + dir = 8 + }, +/obj/structure/cable, +/obj/effect/turf_decal/trimline/brown/warning{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/brown/warning{ + dir = 1 + }, +/obj/effect/turf_decal/siding/red{ + dir = 1 + }, +/obj/structure/disposalpipe/segment{ + dir = 9 + }, +/turf/open/indestructible, +/area/deathmatch) +"sG" = ( +/obj/effect/turf_decal/trimline/red/filled/line{ + dir = 1 + }, +/obj/structure/cable, +/turf/open/indestructible, +/area/deathmatch) +"sJ" = ( +/obj/effect/turf_decal/tile/neutral{ + dir = 1 + }, +/obj/effect/turf_decal/tile/neutral{ + dir = 8 + }, +/turf/open/indestructible/dark, +/area/deathmatch) +"sL" = ( +/obj/structure/chair{ + dir = 4 + }, +/turf/open/indestructible/dark, +/area/deathmatch) +"sR" = ( +/obj/machinery/door/firedoor, +/obj/effect/mapping_helpers/airlock/cyclelink_helper{ + dir = 1 + }, +/obj/effect/decal/cleanable/dirt, +/obj/structure/cable, +/obj/machinery/door/airlock/security/glass{ + name = "Security Airlock" + }, +/obj/structure/disposalpipe/segment{ + dir = 1 + }, +/turf/open/indestructible, +/area/deathmatch) +"sZ" = ( +/obj/effect/turf_decal/trimline/blue/filled/corner{ + dir = 1 + }, +/obj/structure/extinguisher_cabinet/directional/west, +/obj/effect/decal/cleanable/blood/drip, +/turf/open/indestructible, +/area/deathmatch) +"th" = ( +/obj/structure/grille/broken, +/turf/open/floor/plating, +/area/deathmatch) +"tl" = ( +/obj/structure/table/wood, +/obj/machinery/recharger, +/obj/effect/turf_decal/siding/wood{ + dir = 4 + }, +/turf/open/indestructible/hotelwood, +/area/deathmatch) +"tn" = ( +/obj/structure/chair, +/obj/effect/decal/cleanable/dirt, +/turf/open/indestructible, +/area/deathmatch) +"tH" = ( +/obj/effect/turf_decal/tile/red{ + dir = 1 + }, +/obj/effect/turf_decal/tile/red{ + dir = 8 + }, +/turf/open/indestructible/dark, +/area/deathmatch) +"tQ" = ( +/obj/effect/turf_decal/tile/red{ + dir = 4 + }, +/obj/structure/cable, +/obj/effect/turf_decal/tile/red, +/turf/open/indestructible, +/area/deathmatch) +"tR" = ( +/obj/effect/turf_decal/trimline/red/filled/line{ + dir = 1 + }, +/obj/structure/disposalpipe/segment{ + dir = 6 + }, +/turf/open/indestructible, +/area/deathmatch) +"ua" = ( +/obj/machinery/door/poddoor/preopen{ + id = "dm10"; + name = "Brig Shutters" + }, +/obj/structure/cable, +/obj/structure/grille/broken, +/turf/open/floor/plating, +/area/deathmatch) +"ue" = ( +/obj/effect/turf_decal/tile/red{ + dir = 8 + }, +/obj/effect/turf_decal/tile/red{ + dir = 1 + }, +/obj/effect/turf_decal/tile/red, +/turf/open/indestructible, +/area/deathmatch) +"us" = ( +/obj/effect/turf_decal/tile/red{ + dir = 1 + }, +/obj/structure/cable, +/obj/effect/turf_decal/tile/red{ + dir = 8 + }, +/obj/structure/disposalpipe/segment, +/turf/open/indestructible, +/area/deathmatch) +"uD" = ( +/obj/effect/turf_decal/tile/red, +/obj/effect/turf_decal/tile/red{ + dir = 4 + }, +/turf/open/indestructible/dark, +/area/deathmatch) +"uF" = ( +/obj/effect/turf_decal/tile/red, +/obj/machinery/light/directional/north, +/turf/open/indestructible, +/area/deathmatch) +"uI" = ( +/obj/effect/turf_decal/tile/red{ + dir = 8 + }, +/obj/structure/window/reinforced/spawner/directional/east, +/obj/effect/turf_decal/trimline/brown/warning{ + dir = 5 + }, +/obj/effect/turf_decal/trimline/brown/warning{ + dir = 5 + }, +/obj/effect/turf_decal/siding/red{ + dir = 1 + }, +/obj/structure/reagent_dispensers/fueltank, +/turf/open/indestructible, +/area/deathmatch) +"uN" = ( +/obj/structure/disposalpipe/segment, +/obj/effect/landmark/deathmatch_player_spawn, +/turf/open/floor/carpet, +/area/deathmatch) +"uQ" = ( +/obj/structure/rack, +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/dirt, +/obj/item/restraints/handcuffs/fake{ + desc = "Commonly used for stopping criminals."; + name = "handcuffs" + }, +/turf/open/indestructible, +/area/deathmatch) +"uT" = ( +/obj/machinery/door/window/brigdoor/left/directional/south{ + name = "Cell 2" + }, +/obj/effect/turf_decal/tile/red, +/obj/effect/turf_decal/tile/red{ + dir = 8 + }, +/obj/structure/cable, +/turf/open/indestructible, +/area/deathmatch) +"vf" = ( +/obj/effect/landmark/deathmatch_player_spawn, +/turf/open/floor/iron/white, +/area/deathmatch) +"vl" = ( +/obj/effect/turf_decal/tile/red{ + dir = 8 + }, +/obj/effect/turf_decal/tile/red, +/obj/effect/turf_decal/tile/red{ + dir = 4 + }, +/turf/open/indestructible, +/area/deathmatch) +"vo" = ( +/obj/structure/extinguisher_cabinet/directional/north, +/obj/effect/turf_decal/tile/red, +/obj/effect/turf_decal/tile/red{ + dir = 4 + }, +/obj/structure/closet/secure_closet/security/sec{ + anchored = 1 + }, +/turf/open/indestructible/dark, +/area/deathmatch) +"vt" = ( +/obj/item/storage/box/deputy, +/obj/structure/table, +/turf/open/indestructible/dark, +/area/deathmatch) +"vC" = ( +/obj/structure/lattice, +/turf/template_noop, +/area/template_noop) +"vD" = ( +/obj/structure/table, +/obj/structure/cable, +/obj/machinery/button/flasher{ + id = "dm1"; + name = "Brig Entrance Flasher"; + pixel_y = -3 + }, +/turf/open/indestructible, +/area/deathmatch) +"vJ" = ( +/obj/machinery/computer/old{ + dir = 8 + }, +/turf/open/indestructible/dark, +/area/deathmatch) +"vL" = ( +/obj/machinery/light/small/directional/east, +/obj/item/toy/plush/beeplushie, +/turf/open/indestructible/dark, +/area/deathmatch) +"vU" = ( +/obj/structure/rack, +/obj/machinery/light/directional/west, +/obj/effect/turf_decal/tile/blue, +/obj/effect/turf_decal/tile/blue{ + dir = 8 + }, +/obj/structure/cable, +/obj/item/storage/fancy/cigarettes/cigpack_syndicate, +/turf/open/indestructible/dark, +/area/deathmatch) +"vZ" = ( +/obj/machinery/light/small/directional/north, +/obj/effect/turf_decal/tile/neutral{ + dir = 1 + }, +/obj/effect/turf_decal/tile/neutral, +/obj/effect/turf_decal/tile/neutral{ + dir = 4 + }, +/obj/effect/turf_decal/tile/neutral{ + dir = 8 + }, +/turf/open/indestructible/dark, +/area/deathmatch) +"wc" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/structure/cable, +/obj/effect/decal/cleanable/blood/drip, +/turf/open/indestructible, +/area/deathmatch) +"wm" = ( +/obj/effect/turf_decal/tile/neutral, +/obj/effect/turf_decal/tile/neutral{ + dir = 1 + }, +/obj/effect/turf_decal/tile/neutral{ + dir = 8 + }, +/obj/machinery/light_switch/directional/west{ + pixel_y = -12 + }, +/obj/structure/extinguisher_cabinet/directional/west, +/turf/open/indestructible/dark, +/area/deathmatch) +"wn" = ( +/obj/structure/fluff/fake_camera{ + dir = 9 + }, +/turf/open/indestructible, +/area/deathmatch) +"wR" = ( +/obj/structure/cable, +/obj/structure/disposalpipe/trunk{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/red/filled/line{ + dir = 10 + }, +/obj/machinery/disposal/delivery_chute{ + dir = 1 + }, +/turf/open/indestructible, +/area/deathmatch) +"wT" = ( +/obj/structure/cable, +/obj/effect/decal/cleanable/blood/gibs/limb, +/turf/open/indestructible, +/area/deathmatch) +"wX" = ( +/obj/effect/landmark/deathmatch_player_spawn, +/turf/open/indestructible, +/area/deathmatch) +"xi" = ( +/obj/structure/rack, +/obj/effect/turf_decal/tile/red{ + dir = 1 + }, +/obj/effect/turf_decal/tile/red{ + dir = 8 + }, +/obj/effect/spawner/random/contraband/plus, +/turf/open/indestructible/dark, +/area/deathmatch) +"xk" = ( +/obj/effect/turf_decal/tile/red, +/obj/effect/turf_decal/tile/red{ + dir = 8 + }, +/obj/effect/turf_decal/tile/red{ + dir = 4 + }, +/obj/structure/closet/secure_closet/security/sec{ + anchored = 1 + }, +/turf/open/indestructible/dark, +/area/deathmatch) +"xm" = ( +/obj/structure/table, +/obj/item/implanter{ + pixel_x = 5; + pixel_y = 12 + }, +/obj/item/storage/box/evidence{ + pixel_x = -5; + pixel_y = 12 + }, +/obj/item/toy/crayon/white{ + pixel_y = -4 + }, +/obj/item/toy/crayon/white{ + pixel_x = -5; + pixel_y = -4 + }, +/turf/open/indestructible/dark, +/area/deathmatch) +"xu" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/dirt, +/obj/structure/cable, +/turf/open/indestructible, +/area/deathmatch) +"xD" = ( +/obj/effect/turf_decal/trimline/red/filled/line{ + dir = 1 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/indestructible, +/area/deathmatch) +"xS" = ( +/obj/machinery/button/door/directional/north{ + id = "dm5"; + name = "Space Shutters Control"; + pixel_x = -24 + }, +/obj/machinery/computer/old{ + dir = 4 + }, +/turf/open/indestructible/hotelwood, +/area/deathmatch) +"yy" = ( +/obj/effect/turf_decal/trimline/red/filled/corner{ + dir = 4 + }, +/turf/open/indestructible, +/area/deathmatch) +"yH" = ( +/obj/structure/table, +/obj/machinery/recharger{ + pixel_y = 4 + }, +/obj/structure/cable, +/obj/effect/turf_decal/tile/red, +/obj/effect/turf_decal/tile/red{ + dir = 4 + }, +/turf/open/indestructible/dark, +/area/deathmatch) +"yN" = ( +/turf/cordon, +/area/template_noop) +"yO" = ( +/obj/effect/turf_decal/trimline/red/filled/line{ + dir = 4 + }, +/obj/structure/disposalpipe/segment, +/obj/structure/cable, +/turf/open/indestructible, +/area/deathmatch) +"yR" = ( +/obj/structure/chair/stool/directional/east, +/obj/effect/turf_decal/trimline/red/warning{ + dir = 8 + }, +/turf/open/indestructible, +/area/deathmatch) +"yS" = ( +/obj/structure/table/reinforced, +/obj/machinery/door/window/brigdoor/left/directional/north{ + name = "Brig Control Desk" + }, +/obj/item/folder/red, +/obj/item/folder/red, +/obj/item/poster/random_official, +/obj/structure/cable, +/obj/item/book/manual/wiki/security_space_law{ + pixel_x = -3; + pixel_y = 5 + }, +/turf/open/floor/iron/showroomfloor, +/area/deathmatch) +"yT" = ( +/obj/effect/turf_decal/tile/red, +/obj/machinery/light/directional/west, +/obj/machinery/light_switch/directional/west, +/obj/effect/turf_decal/tile/red{ + dir = 8 + }, +/turf/open/indestructible, +/area/deathmatch) +"yY" = ( +/obj/structure/cable, +/obj/machinery/computer/old{ + dir = 4 + }, +/turf/open/indestructible/hotelwood, +/area/deathmatch) +"zg" = ( +/obj/machinery/light/directional/south, +/turf/open/indestructible, +/area/deathmatch) +"zh" = ( +/obj/effect/turf_decal/tile/red{ + dir = 1 + }, +/obj/effect/turf_decal/tile/red{ + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/structure/chair{ + dir = 1 + }, +/turf/open/indestructible, +/area/deathmatch) +"zj" = ( +/obj/machinery/airalarm/directional/west, +/turf/open/indestructible, +/area/deathmatch) +"zm" = ( +/obj/machinery/light/small/directional/east, +/turf/open/indestructible/dark, +/area/deathmatch) +"zq" = ( +/obj/structure/window/reinforced/spawner/directional/north, +/turf/open/floor/iron/grimy, +/area/deathmatch) +"zu" = ( +/obj/machinery/door/firedoor, +/obj/effect/mapping_helpers/airlock/cyclelink_helper, +/obj/structure/cable, +/obj/effect/turf_decal/trimline/red/filled/corner{ + dir = 1 + }, +/obj/machinery/door/airlock/security/glass{ + name = "Security Airlock" + }, +/obj/structure/disposalpipe/segment{ + dir = 1 + }, +/turf/open/indestructible, +/area/deathmatch) +"zG" = ( +/obj/machinery/light/directional/south, +/obj/machinery/firealarm/directional/south, +/obj/structure/cable, +/turf/open/indestructible, +/area/deathmatch) +"zU" = ( +/obj/effect/turf_decal/tile/neutral{ + dir = 8 + }, +/obj/effect/turf_decal/tile/neutral{ + dir = 4 + }, +/obj/effect/turf_decal/tile/neutral, +/obj/effect/turf_decal/tile/neutral{ + dir = 1 + }, +/turf/open/indestructible/dark, +/area/deathmatch) +"Ae" = ( +/obj/structure/cable, +/obj/effect/turf_decal/trimline/red/filled/line{ + dir = 1 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/indestructible, +/area/deathmatch) +"Am" = ( +/obj/structure/rack, +/obj/effect/turf_decal/tile/red{ + dir = 1 + }, +/obj/effect/turf_decal/tile/red{ + dir = 8 + }, +/obj/item/restraints/handcuffs/fake{ + desc = "Commonly used for stopping criminals."; + name = "handcuffs" + }, +/turf/open/indestructible/dark, +/area/deathmatch) +"An" = ( +/obj/effect/turf_decal/tile/red{ + dir = 1 + }, +/obj/effect/turf_decal/tile/red{ + dir = 8 + }, +/obj/structure/frame/machine/secured, +/turf/open/indestructible/dark, +/area/deathmatch) +"As" = ( +/obj/machinery/vending/wardrobe/det_wardrobe, +/turf/open/floor/iron/grimy, +/area/deathmatch) +"Ay" = ( +/obj/structure/table, +/obj/item/inspector{ + pixel_x = -5; + pixel_y = 12 + }, +/obj/item/inspector{ + pixel_x = 5 + }, +/turf/open/indestructible/dark, +/area/deathmatch) +"AF" = ( +/obj/effect/turf_decal/tile/red{ + dir = 8 + }, +/obj/effect/turf_decal/tile/red, +/obj/machinery/light/directional/north, +/turf/open/indestructible, +/area/deathmatch) +"AS" = ( +/obj/machinery/door/firedoor, +/obj/structure/disposalpipe/segment, +/obj/structure/cable, +/obj/machinery/door/airlock/security/glass{ + name = "Security Airlock" + }, +/turf/open/indestructible/dark, +/area/deathmatch) +"Bf" = ( +/obj/machinery/light/directional/west, +/turf/open/indestructible/dark, +/area/deathmatch) +"Bt" = ( +/obj/machinery/computer/old{ + dir = 4 + }, +/turf/open/indestructible/hotelwood, +/area/deathmatch) +"By" = ( +/obj/machinery/vending/security{ + active = 0 + }, +/obj/effect/turf_decal/tile/red{ + dir = 8 + }, +/obj/effect/turf_decal/tile/red{ + dir = 1 + }, +/obj/effect/turf_decal/tile/red{ + dir = 4 + }, +/turf/open/indestructible/dark, +/area/deathmatch) +"Bz" = ( +/obj/structure/table, +/obj/machinery/recharger{ + pixel_y = 4 + }, +/obj/effect/turf_decal/tile/neutral, +/obj/effect/turf_decal/tile/neutral{ + dir = 1 + }, +/obj/effect/turf_decal/tile/neutral{ + dir = 4 + }, +/obj/structure/cable, +/turf/open/indestructible/dark, +/area/deathmatch) +"BK" = ( +/obj/effect/turf_decal/tile/red{ + dir = 8 + }, +/obj/effect/turf_decal/tile/red{ + dir = 1 + }, +/obj/structure/cable, +/obj/structure/disposalpipe/segment{ + dir = 6 + }, +/obj/structure/chair{ + dir = 8 + }, +/turf/open/indestructible, +/area/deathmatch) +"BM" = ( +/obj/structure/table, +/obj/item/poster/random_official{ + pixel_y = 13 + }, +/obj/item/poster/random_official{ + pixel_y = 5 + }, +/obj/item/poster/random_official, +/turf/open/indestructible/dark, +/area/deathmatch) +"Cc" = ( +/obj/structure/table/reinforced, +/obj/machinery/door/window/brigdoor/left/directional/north{ + name = "Weapon Distribution"; + req_access = list("armory") + }, +/obj/item/paper, +/obj/machinery/door/firedoor, +/obj/structure/cable, +/obj/item/pen, +/turf/open/indestructible/dark, +/area/deathmatch) +"Cx" = ( +/obj/effect/turf_decal/tile/red{ + dir = 8 + }, +/obj/effect/turf_decal/tile/red, +/obj/structure/cable, +/obj/structure/disposalpipe/trunk{ + dir = 2 + }, +/obj/structure/disposaloutlet, +/turf/open/indestructible/dark, +/area/deathmatch) +"CH" = ( +/obj/structure/table, +/obj/item/folder/red, +/obj/item/taperecorder, +/turf/open/indestructible/dark, +/area/deathmatch) +"CM" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 4 + }, +/turf/open/indestructible/hotelwood, +/area/deathmatch) +"CP" = ( +/obj/structure/rack, +/obj/effect/turf_decal/tile/blue, +/obj/effect/turf_decal/tile/blue{ + dir = 4 + }, +/obj/item/weldingtool, +/turf/open/indestructible/dark, +/area/deathmatch) +"CS" = ( +/obj/effect/decal/cleanable/blood/tracks{ + dir = 4 + }, +/turf/open/indestructible/dark, +/area/deathmatch) +"Dd" = ( +/obj/structure/filingcabinet/security{ + pixel_x = 4 + }, +/obj/effect/turf_decal/tile/neutral{ + dir = 1 + }, +/obj/effect/turf_decal/tile/neutral, +/obj/effect/turf_decal/tile/neutral{ + dir = 4 + }, +/obj/effect/turf_decal/tile/neutral{ + dir = 8 + }, +/obj/effect/turf_decal/tile/red{ + dir = 8 + }, +/obj/effect/turf_decal/tile/red{ + dir = 1 + }, +/turf/open/indestructible/dark, +/area/deathmatch) +"Dk" = ( +/obj/structure/cable, +/obj/machinery/computer/old{ + dir = 1 + }, +/obj/effect/turf_decal/tile/red{ + dir = 1 + }, +/obj/effect/turf_decal/tile/red{ + dir = 4 + }, +/turf/open/indestructible, +/area/deathmatch) +"Dm" = ( +/obj/effect/turf_decal/trimline/red/filled/corner{ + dir = 1 + }, +/turf/open/indestructible/dark, +/area/deathmatch) +"Dp" = ( +/obj/machinery/door/poddoor{ + name = "Lockdown Door" + }, +/turf/open/floor/plating, +/area/deathmatch) +"Dz" = ( +/obj/machinery/door/poddoor/shutters{ + id = "dm16"; + name = "Visitation Shutters" + }, +/obj/structure/window/reinforced/spawner/directional/north, +/obj/structure/table, +/turf/open/indestructible, +/area/deathmatch) +"DD" = ( +/obj/structure/table/wood, +/obj/item/paper_bin/carbon{ + pixel_x = -3; + pixel_y = 7 + }, +/obj/item/pen, +/obj/item/book/manual/wiki/security_space_law, +/turf/open/floor/carpet, +/area/deathmatch) +"DL" = ( +/obj/structure/cable, +/obj/effect/turf_decal/trimline/red/filled/line{ + dir = 1 + }, +/turf/open/indestructible, +/area/deathmatch) +"DR" = ( +/obj/effect/turf_decal/tile/neutral{ + dir = 8 + }, +/obj/effect/turf_decal/tile/neutral{ + dir = 1 + }, +/obj/structure/grille/broken, +/turf/open/indestructible/dark, +/area/deathmatch) +"Eb" = ( +/obj/machinery/door/window/brigdoor/left/directional/south{ + name = "Cell 3" + }, +/obj/structure/cable, +/obj/effect/turf_decal/trimline/red/filled/line{ + dir = 4 + }, +/obj/effect/turf_decal/tile/red{ + dir = 8 + }, +/obj/effect/turf_decal/tile/red, +/turf/open/indestructible, +/area/deathmatch) +"Ee" = ( +/obj/structure/cable, +/turf/open/indestructible/hotelwood, +/area/deathmatch) +"Ef" = ( +/obj/effect/turf_decal/box, +/obj/structure/cable, +/obj/effect/landmark/deathmatch_player_spawn, +/turf/open/indestructible/dark, +/area/deathmatch) +"Ep" = ( +/obj/effect/turf_decal/delivery, +/obj/structure/cable, +/obj/machinery/door/poddoor{ + name = "Prison Lockdown" + }, +/turf/open/indestructible, +/area/deathmatch) +"Et" = ( +/obj/structure/table, +/obj/item/storage/box/evidence{ + pixel_x = 9; + pixel_y = 8 + }, +/obj/item/hand_labeler{ + pixel_x = -8; + pixel_y = 10 + }, +/obj/effect/turf_decal/tile/neutral{ + dir = 1 + }, +/obj/effect/turf_decal/tile/neutral, +/obj/effect/turf_decal/tile/neutral{ + dir = 4 + }, +/obj/effect/turf_decal/tile/neutral{ + dir = 8 + }, +/obj/effect/turf_decal/tile/red{ + dir = 1 + }, +/obj/effect/turf_decal/tile/red{ + dir = 8 + }, +/obj/item/storage/box/evidence{ + pixel_x = 9; + pixel_y = 8 + }, +/obj/item/storage/box/evidence{ + pixel_x = 9; + pixel_y = 8 + }, +/obj/item/storage/box/prisoner{ + pixel_x = 9 + }, +/obj/machinery/recharger{ + pixel_x = -5; + pixel_y = -3 + }, +/turf/open/indestructible/dark, +/area/deathmatch) +"EA" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/dirt, +/turf/open/indestructible, +/area/deathmatch) +"EJ" = ( +/obj/effect/turf_decal/trimline/red/filled/line{ + dir = 6 + }, +/obj/machinery/computer/old{ + dir = 8 + }, +/turf/open/indestructible, +/area/deathmatch) +"EP" = ( +/obj/structure/rack, +/obj/effect/turf_decal/tile/red{ + dir = 1 + }, +/obj/effect/turf_decal/tile/red{ + dir = 8 + }, +/obj/item/reagent_containers/cup/bucket, +/turf/open/indestructible/dark, +/area/deathmatch) +"EX" = ( +/obj/machinery/light/directional/east, +/turf/open/indestructible, +/area/deathmatch) +"Fi" = ( +/turf/template_noop, +/area/space) +"Fj" = ( +/obj/effect/turf_decal/tile/red{ + dir = 8 + }, +/obj/effect/turf_decal/tile/red{ + dir = 1 + }, +/obj/structure/cable, +/obj/structure/closet/secure_closet/security/sec{ + anchored = 1 + }, +/turf/open/indestructible/dark, +/area/deathmatch) +"Fr" = ( +/obj/machinery/light/small/directional/south, +/obj/structure/reagent_dispensers/fueltank, +/turf/open/floor/iron/grimy, +/area/deathmatch) +"Fx" = ( +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 8 + }, +/turf/open/indestructible, +/area/deathmatch) +"FK" = ( +/obj/machinery/light/small/directional/east, +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/flasher/directional/east{ + id = "dm2" + }, +/turf/open/indestructible, +/area/deathmatch) +"FQ" = ( +/obj/effect/turf_decal/tile/neutral{ + dir = 1 + }, +/obj/effect/turf_decal/tile/neutral, +/obj/effect/turf_decal/tile/neutral{ + dir = 4 + }, +/obj/effect/turf_decal/tile/neutral{ + dir = 8 + }, +/obj/effect/turf_decal/tile/red{ + dir = 1 + }, +/obj/effect/turf_decal/tile/red{ + dir = 8 + }, +/obj/machinery/computer/old{ + dir = 8 + }, +/turf/open/indestructible/dark, +/area/deathmatch) +"FY" = ( +/obj/structure/chair/office{ + dir = 8 + }, +/turf/open/floor/carpet, +/area/deathmatch) +"Gi" = ( +/obj/structure/cable, +/obj/effect/turf_decal/siding/wood{ + dir = 4 + }, +/turf/open/indestructible/hotelwood, +/area/deathmatch) +"Gm" = ( +/obj/effect/turf_decal/trimline/neutral/filled/corner{ + dir = 4 + }, +/obj/structure/cable, +/turf/open/indestructible/dark, +/area/deathmatch) +"Gs" = ( +/obj/structure/chair{ + dir = 4 + }, +/obj/effect/landmark/deathmatch_player_spawn, +/turf/open/indestructible/dark, +/area/deathmatch) +"GM" = ( +/obj/effect/turf_decal/trimline/red/filled/line{ + dir = 8 + }, +/turf/open/indestructible, +/area/deathmatch) +"GO" = ( +/obj/effect/turf_decal/tile/red{ + dir = 4 + }, +/obj/effect/turf_decal/tile/red{ + dir = 1 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/structure/chair{ + dir = 1 + }, +/turf/open/indestructible, +/area/deathmatch) +"GR" = ( +/obj/effect/decal/cleanable/dirt, +/turf/open/indestructible, +/area/deathmatch) +"GU" = ( +/obj/effect/turf_decal/tile/red{ + dir = 4 + }, +/obj/effect/turf_decal/tile/red{ + dir = 1 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/effect/decal/cleanable/blood/tracks, +/obj/effect/decal/cleanable/blood, +/turf/open/indestructible, +/area/deathmatch) +"GY" = ( +/obj/structure/table/wood, +/obj/item/phone{ + desc = "Supposedly a direct line to Nanotrasen Central Command. It's not even plugged in."; + pixel_x = -3; + pixel_y = 3 + }, +/obj/item/cigbutt/cigarbutt{ + pixel_x = 5; + pixel_y = -1 + }, +/obj/effect/turf_decal/siding/wood{ + dir = 4 + }, +/obj/structure/cable, +/turf/open/indestructible/hotelwood, +/area/deathmatch) +"Hd" = ( +/obj/structure/cable, +/obj/effect/decal/cleanable/blood/drip, +/obj/effect/decal/cleanable/blood/footprints{ + dir = 8 + }, +/turf/open/indestructible, +/area/deathmatch) +"He" = ( +/obj/structure/tank_dispenser/oxygen, +/obj/effect/turf_decal/tile/neutral{ + dir = 1 + }, +/obj/effect/turf_decal/tile/neutral, +/obj/effect/turf_decal/tile/neutral{ + dir = 4 + }, +/obj/effect/turf_decal/tile/neutral{ + dir = 8 + }, +/turf/open/indestructible/dark, +/area/deathmatch) +"Ho" = ( +/obj/effect/turf_decal/trimline/red/filled/line{ + dir = 1 + }, +/turf/open/indestructible, +/area/deathmatch) +"Hp" = ( +/obj/machinery/recharger{ + pixel_y = 4 + }, +/obj/structure/table, +/obj/effect/turf_decal/trimline/red/filled/line{ + dir = 4 + }, +/turf/open/indestructible, +/area/deathmatch) +"Hv" = ( +/obj/effect/turf_decal/trimline/red/filled/line{ + dir = 1 + }, +/obj/structure/cable, +/obj/effect/decal/cleanable/blood/drip, +/turf/open/indestructible, +/area/deathmatch) +"Hz" = ( +/obj/structure/cable, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/indestructible, +/area/deathmatch) +"HK" = ( +/turf/closed/indestructible/fakeglass, +/area/deathmatch) +"HV" = ( +/obj/structure/rack, +/obj/effect/turf_decal/tile/blue{ + dir = 4 + }, +/obj/effect/turf_decal/tile/blue, +/obj/item/gun/ballistic/shotgun/riot, +/obj/item/gun/ballistic/shotgun/riot{ + pixel_y = 3 + }, +/obj/item/gun/ballistic/shotgun/riot{ + pixel_y = 6 + }, +/turf/open/indestructible/dark, +/area/deathmatch) +"Ii" = ( +/obj/effect/turf_decal/tile/red{ + dir = 1 + }, +/obj/effect/turf_decal/tile/red{ + dir = 8 + }, +/obj/machinery/light_switch/directional/east, +/turf/open/indestructible/dark, +/area/deathmatch) +"Ik" = ( +/obj/effect/turf_decal/trimline/red/filled/corner, +/turf/open/indestructible, +/area/deathmatch) +"Iy" = ( +/obj/effect/turf_decal/tile/red, +/obj/effect/turf_decal/tile/red{ + dir = 8 + }, +/obj/structure/cable, +/obj/structure/disposalpipe/segment, +/turf/open/indestructible, +/area/deathmatch) +"IJ" = ( +/turf/closed/indestructible/reinforced, +/area/deathmatch) +"IL" = ( +/obj/machinery/light/small/directional/east, +/obj/effect/turf_decal/tile/blue{ + dir = 8 + }, +/obj/effect/turf_decal/tile/blue{ + dir = 1 + }, +/turf/open/indestructible/dark, +/area/deathmatch) +"IS" = ( +/obj/effect/turf_decal/tile/red{ + dir = 1 + }, +/obj/effect/turf_decal/tile/red{ + dir = 8 + }, +/obj/machinery/computer/old{ + dir = 8 + }, +/turf/open/indestructible/dark, +/area/deathmatch) +"IU" = ( +/obj/structure/sign/warning/pods, +/turf/closed/wall/r_wall, +/area/deathmatch) +"Jb" = ( +/obj/effect/turf_decal/trimline/red/filled/line{ + dir = 8 + }, +/obj/structure/cable, +/turf/open/indestructible, +/area/deathmatch) +"Jo" = ( +/obj/structure/extinguisher_cabinet/directional/east, +/turf/open/floor/carpet, +/area/deathmatch) +"Jp" = ( +/obj/effect/turf_decal/tile/neutral{ + dir = 1 + }, +/obj/effect/turf_decal/tile/neutral, +/obj/effect/turf_decal/tile/neutral{ + dir = 4 + }, +/obj/effect/turf_decal/tile/neutral{ + dir = 8 + }, +/obj/machinery/door/poddoor/shutters/window/preopen{ + id = "dm4"; + name = "Armory Shutters" + }, +/turf/open/indestructible/dark, +/area/deathmatch) +"Jv" = ( +/obj/structure/disposalpipe/trunk{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/red/filled/corner{ + dir = 1 + }, +/obj/machinery/button/door/directional/west{ + id = "dm8"; + name = "Labor Camp Shuttle Lockdown" + }, +/obj/machinery/disposal/delivery_chute{ + dir = 1 + }, +/turf/open/indestructible, +/area/deathmatch) +"Jw" = ( +/obj/vehicle/ridden/secway, +/obj/effect/turf_decal/bot, +/turf/open/indestructible/dark, +/area/deathmatch) +"JC" = ( +/obj/machinery/light/directional/north, +/obj/effect/turf_decal/trimline/red/filled/line{ + dir = 1 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/indestructible, +/area/deathmatch) +"JF" = ( +/obj/structure/table/reinforced, +/obj/machinery/door/window/brigdoor/left/directional/north{ + name = "Brig Control Desk" + }, +/obj/item/paper, +/obj/machinery/door/firedoor, +/obj/structure/cable, +/obj/item/storage/fancy/donut_box, +/obj/machinery/door/poddoor/shutters/preopen{ + id = "dm11"; + name = "Warden Desk Shutters" + }, +/turf/open/floor/iron/showroomfloor, +/area/deathmatch) +"JM" = ( +/obj/structure/rack, +/obj/effect/turf_decal/tile/blue, +/obj/effect/turf_decal/tile/blue{ + dir = 8 + }, +/obj/item/soap/nanotrasen, +/turf/open/indestructible/dark, +/area/deathmatch) +"JU" = ( +/obj/structure/table, +/obj/item/folder/red, +/obj/item/clothing/head/cone{ + pixel_x = -4; + pixel_y = 4 + }, +/obj/item/clothing/head/cone{ + pixel_x = -4; + pixel_y = 4 + }, +/obj/item/clothing/head/cone{ + pixel_x = -4; + pixel_y = 4 + }, +/obj/item/clothing/head/cone{ + pixel_x = -4; + pixel_y = 4 + }, +/obj/item/clothing/head/cone{ + pixel_x = -4; + pixel_y = 4 + }, +/obj/structure/cable, +/turf/open/indestructible/dark, +/area/deathmatch) +"JZ" = ( +/obj/machinery/door/poddoor/preopen{ + id = "dm8"; + name = "Prisoner Processing" + }, +/obj/effect/turf_decal/delivery, +/obj/machinery/button/door/directional/west{ + id = "dm8"; + name = "Labor Camp Shuttle Lockdown" + }, +/turf/open/indestructible, +/area/deathmatch) +"Ke" = ( +/obj/machinery/door/firedoor, +/obj/effect/mapping_helpers/airlock/cyclelink_helper, +/obj/effect/turf_decal/tile/neutral{ + dir = 1 + }, +/obj/effect/turf_decal/tile/neutral, +/obj/effect/turf_decal/tile/neutral{ + dir = 4 + }, +/obj/effect/turf_decal/tile/neutral{ + dir = 8 + }, +/obj/structure/cable, +/obj/effect/turf_decal/delivery, +/obj/machinery/door/airlock/security/glass{ + name = "Security Airlock" + }, +/turf/open/indestructible/dark, +/area/deathmatch) +"Kh" = ( +/obj/structure/cable, +/turf/closed/indestructible/fakeglass, +/area/deathmatch) +"Ki" = ( +/obj/effect/turf_decal/tile/red{ + dir = 1 + }, +/obj/effect/turf_decal/tile/red{ + dir = 4 + }, +/obj/structure/cable, +/turf/open/indestructible, +/area/deathmatch) +"Km" = ( +/obj/structure/cable, +/obj/effect/turf_decal/tile/red{ + dir = 1 + }, +/obj/effect/turf_decal/tile/red{ + dir = 4 + }, +/turf/open/indestructible, +/area/deathmatch) +"Ku" = ( +/obj/structure/disposalpipe/segment{ + dir = 5 + }, +/obj/structure/cable, +/obj/effect/decal/cleanable/blood, +/turf/open/indestructible, +/area/deathmatch) +"Kz" = ( +/obj/structure/cable, +/obj/effect/turf_decal/trimline/red/filled/line, +/obj/machinery/computer/old{ + dir = 4 + }, +/turf/open/indestructible, +/area/deathmatch) +"KO" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 10 + }, +/obj/structure/window/reinforced/spawner/directional/west, +/turf/open/indestructible, +/area/deathmatch) +"KQ" = ( +/obj/effect/decal/cleanable/dirt, +/obj/structure/chair, +/obj/effect/decal/cleanable/dirt, +/turf/open/indestructible, +/area/deathmatch) +"Lk" = ( +/obj/structure/chair, +/obj/structure/cable, +/turf/open/indestructible/hotelwood, +/area/deathmatch) +"Lp" = ( +/obj/effect/turf_decal/delivery, +/obj/machinery/door/poddoor{ + name = "Prison Lockdown" + }, +/turf/open/indestructible, +/area/deathmatch) +"Ls" = ( +/obj/effect/turf_decal/trimline/red/filled/line{ + dir = 8 + }, +/obj/structure/disposalpipe/segment{ + dir = 1 + }, +/turf/open/indestructible, +/area/deathmatch) +"Lz" = ( +/obj/structure/sign/directions/security{ + dir = 1; + pixel_y = 8 + }, +/turf/closed/indestructible/reinforced, +/area/deathmatch) +"LL" = ( +/obj/effect/spawner/structure/window/reinforced/tinted, +/turf/open/floor/plating, +/area/deathmatch) +"LU" = ( +/obj/machinery/photocopier, +/turf/open/indestructible/dark, +/area/deathmatch) +"LX" = ( +/obj/item/paper_bin{ + pixel_x = -3; + pixel_y = 7 + }, +/obj/structure/table/wood, +/obj/item/taperecorder{ + pixel_x = 8; + pixel_y = -1 + }, +/turf/open/floor/iron/grimy, +/area/deathmatch) +"Ma" = ( +/obj/effect/turf_decal/tile/red{ + dir = 8 + }, +/obj/effect/turf_decal/tile/red, +/turf/open/indestructible, +/area/deathmatch) +"Mb" = ( +/obj/structure/sign/warning/vacuum/external{ + pixel_y = 32 + }, +/obj/machinery/light/small/directional/north, +/turf/open/indestructible, +/area/deathmatch) +"Mk" = ( +/obj/item/phone{ + desc = "Supposedly a direct line to Nanotrasen Central Command. It's not even plugged in."; + pixel_x = -3; + pixel_y = 3 + }, +/obj/item/cigbutt/cigarbutt{ + pixel_x = 5; + pixel_y = -1 + }, +/obj/structure/table/wood, +/turf/open/floor/iron/grimy, +/area/deathmatch) +"Mx" = ( +/obj/structure/table, +/obj/item/clothing/mask/gas/sechailer{ + pixel_x = 3; + pixel_y = -3 + }, +/obj/item/clothing/mask/gas/sechailer{ + pixel_x = -6; + pixel_y = 4 + }, +/turf/open/indestructible/dark, +/area/deathmatch) +"MG" = ( +/obj/effect/turf_decal/tile/neutral{ + dir = 1 + }, +/obj/effect/turf_decal/tile/neutral, +/obj/effect/turf_decal/tile/neutral{ + dir = 4 + }, +/obj/effect/turf_decal/tile/neutral{ + dir = 8 + }, +/turf/open/indestructible/dark, +/area/deathmatch) +"MN" = ( +/obj/structure/table, +/obj/item/folder/red{ + pixel_x = -5 + }, +/obj/item/storage/fancy/cigarettes/cigpack_syndicate, +/turf/open/indestructible/dark, +/area/deathmatch) +"MP" = ( +/obj/structure/rack, +/obj/effect/turf_decal/tile/blue, +/obj/effect/turf_decal/tile/blue{ + dir = 4 + }, +/turf/open/indestructible/dark, +/area/deathmatch) +"MS" = ( +/obj/structure/table, +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 1 + }, +/turf/open/floor/iron/white, +/area/deathmatch) +"MV" = ( +/obj/machinery/light/small/directional/south, +/obj/effect/turf_decal/tile/neutral{ + dir = 1 + }, +/obj/effect/turf_decal/tile/neutral, +/obj/effect/turf_decal/tile/neutral{ + dir = 4 + }, +/obj/effect/turf_decal/tile/neutral{ + dir = 8 + }, +/obj/structure/cable, +/turf/open/indestructible/dark, +/area/deathmatch) +"MX" = ( +/obj/structure/table, +/obj/item/folder/blue{ + pixel_x = -18; + pixel_y = 3 + }, +/obj/item/paper_bin{ + pixel_x = 3; + pixel_y = 7 + }, +/obj/item/pen{ + pixel_x = 3; + pixel_y = 8 + }, +/turf/open/indestructible/dark, +/area/deathmatch) +"Ni" = ( +/obj/effect/turf_decal/tile/red, +/obj/structure/cable, +/turf/open/indestructible, +/area/deathmatch) +"Nw" = ( +/obj/structure/disposalpipe/segment, +/obj/effect/turf_decal/trimline/red/filled/line{ + dir = 1 + }, +/obj/structure/cable, +/turf/open/indestructible, +/area/deathmatch) +"ND" = ( +/obj/structure/cable, +/obj/effect/turf_decal/trimline/red/filled/line{ + dir = 8 + }, +/turf/open/indestructible, +/area/deathmatch) +"NW" = ( +/obj/effect/turf_decal/trimline/brown/filled/line{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/red/filled/warning{ + dir = 8 + }, +/obj/machinery/computer{ + dir = 8 + }, +/turf/open/indestructible, +/area/deathmatch) +"NZ" = ( +/turf/open/floor/iron/white, +/area/deathmatch) +"Oi" = ( +/obj/structure/closet{ + name = "Evidence Closet 3" + }, +/obj/effect/turf_decal/tile/neutral{ + dir = 1 + }, +/obj/effect/turf_decal/tile/neutral, +/obj/effect/turf_decal/tile/neutral{ + dir = 4 + }, +/obj/effect/turf_decal/tile/neutral{ + dir = 8 + }, +/obj/effect/turf_decal/tile/red{ + dir = 4 + }, +/obj/effect/turf_decal/tile/red, +/turf/open/indestructible/dark, +/area/deathmatch) +"Os" = ( +/obj/effect/turf_decal/trimline/red/filled/line{ + dir = 4 + }, +/turf/open/indestructible, +/area/deathmatch) +"Ox" = ( +/obj/effect/decal/cleanable/dirt, +/obj/structure/closet/secure_closet/brig{ + id = "Cell 2"; + name = "Cell 2 Locker" + }, +/obj/structure/cable, +/turf/open/indestructible, +/area/deathmatch) +"Oy" = ( +/obj/effect/decal/cleanable/blood/gibs/torso, +/turf/open/indestructible, +/area/deathmatch) +"Oz" = ( +/obj/structure/cable, +/obj/structure/disposalpipe/segment, +/turf/open/indestructible/dark, +/area/deathmatch) +"OF" = ( +/obj/effect/turf_decal/tile/blue, +/obj/effect/turf_decal/tile/blue{ + dir = 4 + }, +/turf/open/indestructible/dark, +/area/deathmatch) +"OJ" = ( +/obj/item/target/syndicate, +/obj/structure/training_machine, +/turf/open/indestructible, +/area/deathmatch) +"OK" = ( +/obj/structure/chair/office, +/obj/structure/cable, +/obj/effect/turf_decal/trimline/red/filled/line, +/turf/open/indestructible, +/area/deathmatch) +"OU" = ( +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock/security/glass{ + name = "Security Airlock" + }, +/turf/open/floor/iron/grimy, +/area/deathmatch) +"Pj" = ( +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock/security/glass{ + name = "Secure Gear Storage" + }, +/obj/effect/turf_decal/delivery, +/obj/structure/cable, +/obj/effect/mapping_helpers/airlock/locked, +/turf/open/indestructible/dark, +/area/deathmatch) +"Pn" = ( +/obj/structure/table/wood, +/obj/effect/turf_decal/siding/wood{ + dir = 4 + }, +/obj/item/reagent_containers/cup/glass/drinkingglass{ + pixel_x = 4; + pixel_y = 4 + }, +/obj/item/reagent_containers/cup/glass/drinkingglass{ + pixel_x = -2; + pixel_y = -3 + }, +/obj/item/reagent_containers/cup/glass/bottle/amaretto{ + pixel_x = -10; + pixel_y = 10 + }, +/turf/open/indestructible/hotelwood, +/area/deathmatch) +"Pt" = ( +/turf/open/floor/iron/grimy, +/area/deathmatch) +"PM" = ( +/obj/effect/turf_decal/trimline/red/filled/line, +/obj/structure/cable, +/obj/structure/disposalpipe/junction{ + dir = 4 + }, +/turf/open/indestructible, +/area/deathmatch) +"PO" = ( +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock/security/glass{ + name = "Prison Wing" + }, +/obj/effect/turf_decal/tile/red, +/obj/effect/turf_decal/tile/red{ + dir = 8 + }, +/obj/effect/mapping_helpers/airlock/locked, +/turf/open/indestructible, +/area/deathmatch) +"PT" = ( +/obj/effect/turf_decal/trimline/red/filled/line, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/structure/cable, +/turf/open/indestructible, +/area/deathmatch) +"PV" = ( +/obj/machinery/computer/security/telescreen{ + desc = "Used for watching Prison Wing holding areas."; + dir = 1; + name = "Prison Monitor"; + network = list("prison"); + pixel_y = -30 + }, +/obj/structure/cable, +/obj/effect/turf_decal/tile/red{ + dir = 8 + }, +/turf/open/indestructible, +/area/deathmatch) +"Qd" = ( +/obj/structure/table, +/obj/item/clothing/glasses/sunglasses{ + pixel_x = 3; + pixel_y = -3 + }, +/obj/item/clothing/ears/earmuffs{ + pixel_y = 7 + }, +/obj/machinery/light/small/directional/south, +/obj/effect/turf_decal/tile/neutral, +/obj/effect/turf_decal/tile/neutral{ + dir = 4 + }, +/obj/effect/turf_decal/tile/neutral{ + dir = 8 + }, +/turf/open/indestructible/dark, +/area/deathmatch) +"Qe" = ( +/obj/structure/table, +/obj/effect/decal/cleanable/blood, +/turf/open/indestructible/dark, +/area/deathmatch) +"Qp" = ( +/obj/effect/turf_decal/trimline/brown/filled/line{ + dir = 10 + }, +/obj/effect/turf_decal/trimline/red/filled/warning{ + dir = 10 + }, +/obj/machinery/computer{ + dir = 8 + }, +/turf/open/indestructible, +/area/deathmatch) +"Qt" = ( +/obj/machinery/light/small/directional/west, +/obj/structure/disposalpipe/trunk{ + dir = 4 + }, +/obj/machinery/disposal/delivery_chute{ + dir = 4 + }, +/turf/open/floor/iron/grimy, +/area/deathmatch) +"Qz" = ( +/obj/effect/spawner/structure/window/reinforced, +/obj/machinery/door/poddoor/preopen{ + id = "dm10"; + name = "Brig Shutters" + }, +/obj/structure/cable, +/turf/open/floor/plating, +/area/deathmatch) +"QG" = ( +/obj/machinery/door/window/left/directional/north, +/turf/open/floor/iron/grimy, +/area/deathmatch) +"Rd" = ( +/obj/structure/cable, +/obj/structure/disposalpipe/segment{ + dir = 10 + }, +/turf/open/indestructible, +/area/deathmatch) +"Rp" = ( +/obj/structure/disposalpipe/segment, +/obj/structure/cable, +/obj/effect/turf_decal/trimline/red/filled/line{ + dir = 4 + }, +/turf/open/indestructible, +/area/deathmatch) +"Rq" = ( +/obj/structure/cable, +/turf/closed/indestructible/reinforced, +/area/deathmatch) +"Rv" = ( +/obj/effect/turf_decal/trimline/red/filled/corner{ + dir = 1 + }, +/turf/open/indestructible, +/area/deathmatch) +"Rx" = ( +/obj/structure/disposalpipe/segment, +/turf/closed/wall/r_wall, +/area/deathmatch) +"Ry" = ( +/obj/structure/rack, +/obj/effect/turf_decal/tile/red{ + dir = 4 + }, +/obj/effect/turf_decal/tile/red{ + dir = 1 + }, +/obj/structure/cable, +/obj/item/crowbar, +/turf/open/indestructible, +/area/deathmatch) +"RL" = ( +/obj/machinery/light_switch/directional/south, +/obj/structure/cable, +/turf/open/floor/carpet, +/area/deathmatch) +"RR" = ( +/obj/structure/cable, +/obj/machinery/door/poddoor/preopen{ + id = "dm5"; + name = "Space Shutters" + }, +/turf/closed/indestructible/fakeglass, +/area/deathmatch) +"RY" = ( +/obj/effect/turf_decal/trimline/red/filled/line{ + dir = 8 + }, +/obj/structure/disposalpipe/segment{ + dir = 1 + }, +/obj/effect/decal/cleanable/blood/footprints{ + dir = 1 + }, +/turf/open/indestructible, +/area/deathmatch) +"Se" = ( +/obj/effect/decal/cleanable/blood/gibs, +/turf/open/indestructible, +/area/deathmatch) +"Sg" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/structure/cable, +/turf/open/indestructible, +/area/deathmatch) +"St" = ( +/obj/effect/turf_decal/delivery, +/turf/open/indestructible, +/area/deathmatch) +"Sz" = ( +/obj/effect/turf_decal/tile/red{ + dir = 1 + }, +/obj/effect/turf_decal/tile/red{ + dir = 8 + }, +/obj/machinery/photocopier{ + pixel_y = 3 + }, +/turf/open/indestructible/dark, +/area/deathmatch) +"SA" = ( +/obj/effect/turf_decal/trimline/red/filled/corner{ + dir = 8 + }, +/obj/structure/cable, +/obj/structure/disposalpipe/segment{ + dir = 10 + }, +/obj/effect/decal/cleanable/blood/footprints{ + dir = 1 + }, +/turf/open/indestructible, +/area/deathmatch) +"SB" = ( +/obj/structure/bed, +/obj/item/bedsheet, +/obj/machinery/iv_drip, +/obj/effect/turf_decal/tile/red{ + dir = 8 + }, +/obj/structure/cable, +/obj/effect/turf_decal/trimline/blue/filled/line, +/turf/open/floor/iron/white, +/area/deathmatch) +"SF" = ( +/obj/structure/extinguisher_cabinet/directional/north, +/obj/machinery/light/directional/north, +/obj/effect/decal/cleanable/blood/splatter, +/turf/open/indestructible, +/area/deathmatch) +"SG" = ( +/obj/effect/turf_decal/tile/red, +/obj/machinery/computer/old{ + dir = 8 + }, +/turf/open/indestructible, +/area/deathmatch) +"SI" = ( +/obj/effect/turf_decal/trimline/red/filled/corner{ + dir = 1 + }, +/obj/machinery/light/directional/north, +/turf/open/indestructible, +/area/deathmatch) +"SO" = ( +/obj/structure/cable, +/obj/effect/mapping_helpers/airlock/cyclelink_helper{ + dir = 1 + }, +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock/security/glass{ + name = "Security Airlock" + }, +/turf/open/indestructible, +/area/deathmatch) +"SR" = ( +/obj/structure/cable, +/turf/open/indestructible/dark, +/area/deathmatch) +"Tx" = ( +/obj/machinery/status_display/evac/directional/north, +/obj/machinery/light/directional/north, +/obj/structure/cable, +/turf/open/floor/carpet, +/area/deathmatch) +"TK" = ( +/obj/structure/cable, +/obj/effect/decal/cleanable/blood, +/turf/open/indestructible, +/area/deathmatch) +"TY" = ( +/obj/effect/turf_decal/trimline/neutral/filled/corner{ + dir = 4 + }, +/turf/open/indestructible/dark, +/area/deathmatch) +"Ub" = ( +/obj/effect/spawner/structure/window/reinforced, +/obj/structure/cable, +/obj/machinery/door/poddoor/preopen{ + id = "dm11"; + name = "Brig Shutters" + }, +/turf/open/floor/plating, +/area/deathmatch) +"Uc" = ( +/obj/machinery/door/firedoor, +/obj/structure/cable, +/obj/machinery/door/airlock/security/glass{ + name = "Security Airlock" + }, +/obj/structure/disposalpipe/segment, +/turf/open/indestructible, +/area/deathmatch) +"Ue" = ( +/obj/structure/disposalpipe/segment{ + dir = 6 + }, +/obj/structure/cable, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/red/filled/corner, +/turf/open/indestructible, +/area/deathmatch) +"Ui" = ( +/obj/structure/rack, +/obj/effect/turf_decal/tile/blue, +/obj/effect/turf_decal/tile/blue{ + dir = 4 + }, +/obj/item/storage/toolbox/mechanical/old{ + pixel_x = 3; + pixel_y = -3 + }, +/obj/item/storage/toolbox/mechanical/old, +/obj/item/storage/toolbox/mechanical/old{ + pixel_x = -3; + pixel_y = 3 + }, +/turf/open/indestructible/dark, +/area/deathmatch) +"Ux" = ( +/turf/open/indestructible/dark, +/area/deathmatch) +"Uz" = ( +/obj/structure/table, +/obj/item/folder/red{ + pixel_x = 14 + }, +/obj/item/paper_bin{ + pixel_x = -3; + pixel_y = 7 + }, +/obj/item/pen{ + pixel_x = -3; + pixel_y = 8 + }, +/turf/open/indestructible/dark, +/area/deathmatch) +"UD" = ( +/obj/structure/rack, +/obj/effect/turf_decal/tile/blue, +/obj/effect/turf_decal/tile/blue{ + dir = 4 + }, +/obj/effect/spawner/random/contraband/armory, +/turf/open/indestructible/dark, +/area/deathmatch) +"UQ" = ( +/obj/effect/turf_decal/trimline/red/filled/line{ + dir = 4 + }, +/obj/structure/cable, +/turf/open/indestructible, +/area/deathmatch) +"UU" = ( +/obj/effect/turf_decal/trimline/red/filled/line, +/obj/structure/cable, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/effect/decal/cleanable/blood/footprints{ + dir = 8 + }, +/turf/open/indestructible, +/area/deathmatch) +"Vg" = ( +/obj/effect/turf_decal/trimline/red/filled/corner, +/turf/open/indestructible/dark, +/area/deathmatch) +"Vr" = ( +/obj/structure/disposalpipe/segment, +/obj/effect/turf_decal/trimline/red/filled/line{ + dir = 8 + }, +/turf/open/indestructible, +/area/deathmatch) +"Vu" = ( +/obj/structure/cable, +/obj/effect/landmark/deathmatch_player_spawn, +/turf/open/indestructible/dark, +/area/deathmatch) +"Vv" = ( +/obj/effect/turf_decal/trimline/red/filled/line{ + dir = 4 + }, +/obj/machinery/computer/old{ + dir = 8 + }, +/turf/open/indestructible, +/area/deathmatch) +"VG" = ( +/obj/machinery/light/small/directional/east, +/obj/effect/turf_decal/tile/red{ + dir = 1 + }, +/obj/effect/turf_decal/tile/red{ + dir = 4 + }, +/turf/open/indestructible, +/area/deathmatch) +"VI" = ( +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock/security/glass{ + name = "Labor Camp Shuttle Airlock" + }, +/obj/effect/mapping_helpers/airlock/locked, +/turf/open/indestructible/dark, +/area/deathmatch) +"VL" = ( +/obj/structure/cable, +/obj/effect/spawner/structure/window, +/turf/open/floor/plating, +/area/deathmatch) +"VO" = ( +/obj/effect/turf_decal/tile/red{ + dir = 8 + }, +/obj/structure/cable, +/obj/effect/turf_decal/tile/red, +/turf/open/indestructible, +/area/deathmatch) +"VR" = ( +/obj/structure/cable, +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 10 + }, +/turf/open/floor/iron/white, +/area/deathmatch) +"Wd" = ( +/obj/machinery/door/airlock/command{ + name = "Head of Security's Office" + }, +/obj/structure/cable, +/obj/machinery/door/firedoor, +/obj/effect/turf_decal/siding/wood/corner{ + dir = 4 + }, +/turf/open/indestructible/hotelwood, +/area/deathmatch) +"Wg" = ( +/turf/open/indestructible/hotelwood, +/area/deathmatch) +"Wo" = ( +/obj/structure/cable, +/obj/structure/grille/broken, +/turf/open/floor/plating, +/area/deathmatch) +"Wp" = ( +/obj/effect/decal/cleanable/oil/slippery, +/turf/open/indestructible, +/area/deathmatch) +"Wv" = ( +/obj/effect/turf_decal/tile/red{ + dir = 8 + }, +/turf/open/indestructible, +/area/deathmatch) +"Wz" = ( +/obj/structure/disposalpipe/segment{ + dir = 6 + }, +/obj/structure/sign/warning/vacuum/external{ + pixel_x = -32 + }, +/obj/effect/turf_decal/trimline/red/filled/corner{ + dir = 8 + }, +/turf/open/indestructible, +/area/deathmatch) +"WD" = ( +/obj/machinery/door/firedoor, +/obj/structure/cable, +/obj/machinery/door/airlock/security/glass{ + name = "Security Airlock" + }, +/turf/open/indestructible/dark, +/area/deathmatch) +"WI" = ( +/obj/structure/cable, +/turf/open/indestructible, +/area/deathmatch) +"WO" = ( +/obj/structure/chair/comfy/black{ + dir = 4 + }, +/turf/open/indestructible/hotelwood, +/area/deathmatch) +"WR" = ( +/obj/structure/closet{ + name = "Evidence Closet 1" + }, +/obj/effect/turf_decal/tile/neutral{ + dir = 1 + }, +/obj/effect/turf_decal/tile/neutral, +/obj/effect/turf_decal/tile/neutral{ + dir = 4 + }, +/obj/effect/turf_decal/tile/neutral{ + dir = 8 + }, +/obj/effect/turf_decal/tile/red{ + dir = 8 + }, +/obj/effect/turf_decal/tile/red{ + dir = 4 + }, +/obj/effect/turf_decal/tile/red, +/turf/open/indestructible/dark, +/area/deathmatch) +"WV" = ( +/obj/machinery/door/window/brigdoor/left/directional/south{ + name = "Cell 1" + }, +/obj/effect/turf_decal/tile/red, +/obj/effect/turf_decal/tile/red{ + dir = 8 + }, +/obj/structure/cable, +/turf/open/indestructible, +/area/deathmatch) +"WW" = ( +/obj/structure/disposalpipe/segment, +/obj/structure/table, +/obj/machinery/button/door{ + desc = "Controls the shutters over the cell windows."; + id = "dm10"; + name = "Cell Window Control"; + pixel_x = -6; + pixel_y = 7; + specialfunctions = 4 + }, +/obj/machinery/button/door{ + desc = "Controls the shutters over the brig windows."; + id = "dm11"; + name = "Brig Lockdown Control"; + pixel_x = 6; + pixel_y = 7 + }, +/obj/item/key/security, +/obj/effect/turf_decal/trimline/red/filled/line{ + dir = 8 + }, +/turf/open/indestructible, +/area/deathmatch) +"WX" = ( +/obj/machinery/light/small/directional/south, +/turf/open/indestructible, +/area/deathmatch) +"XA" = ( +/obj/effect/decal/cleanable/dirt, +/obj/structure/cable, +/obj/effect/turf_decal/trimline/red/filled/line{ + dir = 6 + }, +/turf/open/indestructible, +/area/deathmatch) +"XI" = ( +/turf/open/indestructible, +/area/deathmatch) +"XK" = ( +/turf/closed/wall, +/area/deathmatch) +"XL" = ( +/obj/structure/cable, +/obj/effect/decal/cleanable/oil/slippery, +/turf/open/indestructible, +/area/deathmatch) +"XS" = ( +/obj/machinery/light/directional/east, +/obj/structure/table, +/obj/machinery/recharger{ + pixel_x = 6; + pixel_y = 4 + }, +/obj/item/paper_bin{ + pixel_x = -11; + pixel_y = 7 + }, +/obj/item/pen{ + pixel_x = -11; + pixel_y = 7 + }, +/obj/item/hand_labeler{ + pixel_x = -10; + pixel_y = -6 + }, +/obj/effect/turf_decal/trimline/red/filled/line{ + dir = 4 + }, +/turf/open/indestructible, +/area/deathmatch) +"XX" = ( +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 8 + }, +/obj/structure/cable, +/turf/open/indestructible, +/area/deathmatch) +"Yg" = ( +/obj/machinery/door/firedoor, +/obj/effect/mapping_helpers/airlock/cyclelink_helper, +/obj/structure/cable, +/obj/machinery/door/airlock/security/glass{ + name = "Security Airlock" + }, +/turf/open/indestructible, +/area/deathmatch) +"Yh" = ( +/turf/closed/wall/r_wall, +/area/deathmatch) +"Yz" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/indestructible, +/area/deathmatch) +"YI" = ( +/obj/effect/turf_decal/tile/neutral{ + dir = 1 + }, +/obj/effect/turf_decal/tile/neutral, +/obj/effect/turf_decal/tile/neutral{ + dir = 4 + }, +/obj/effect/turf_decal/tile/neutral{ + dir = 8 + }, +/obj/machinery/suit_storage_unit, +/turf/open/indestructible/dark, +/area/deathmatch) +"YN" = ( +/obj/structure/chair/wood{ + dir = 8 + }, +/obj/structure/cable, +/obj/effect/landmark/deathmatch_player_spawn, +/turf/open/floor/carpet, +/area/deathmatch) +"YQ" = ( +/obj/structure/disposalpipe/segment, +/turf/open/floor/carpet, +/area/deathmatch) +"YS" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/structure/cable, +/turf/open/indestructible, +/area/deathmatch) +"YU" = ( +/obj/machinery/door/firedoor, +/obj/effect/turf_decal/tile/neutral{ + dir = 1 + }, +/obj/effect/turf_decal/tile/neutral, +/obj/effect/turf_decal/tile/neutral{ + dir = 4 + }, +/obj/effect/turf_decal/tile/neutral{ + dir = 8 + }, +/obj/machinery/door/airlock/security/glass{ + name = "Security Airlock" + }, +/turf/open/indestructible/dark, +/area/deathmatch) +"YW" = ( +/obj/effect/spawner/structure/window/reinforced, +/obj/structure/cable, +/turf/open/floor/plating, +/area/deathmatch) +"YY" = ( +/obj/structure/rack, +/obj/item/gun/energy/laser/practice{ + pixel_x = 2; + pixel_y = 5 + }, +/obj/item/gun/energy/laser/practice{ + pixel_x = 2; + pixel_y = 1 + }, +/obj/item/gun/energy/laser/practice{ + pixel_x = 2; + pixel_y = -2 + }, +/obj/effect/turf_decal/tile/neutral{ + dir = 1 + }, +/obj/effect/turf_decal/tile/neutral{ + dir = 4 + }, +/obj/structure/cable, +/turf/open/indestructible/dark, +/area/deathmatch) +"YZ" = ( +/obj/structure/window/reinforced/spawner/directional/east, +/obj/structure/rack, +/obj/item/healthanalyzer{ + pixel_y = -2 + }, +/obj/structure/cable, +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 6 + }, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 4 + }, +/turf/open/floor/iron/white, +/area/deathmatch) +"Zj" = ( +/obj/machinery/door/window/brigdoor/security/holding{ + id = "Holding Cell"; + name = "Holding Cell" + }, +/obj/effect/turf_decal/tile/red, +/obj/effect/turf_decal/tile/red{ + dir = 8 + }, +/obj/structure/cable, +/turf/open/indestructible, +/area/deathmatch) +"Zq" = ( +/turf/template_noop, +/area/template_noop) +"Zr" = ( +/obj/effect/decal/cleanable/dirt, +/obj/structure/bed, +/obj/item/bedsheet, +/turf/open/indestructible, +/area/deathmatch) +"Zv" = ( +/obj/effect/spawner/structure/window/reinforced, +/obj/machinery/door/poddoor/shutters/preopen{ + id = "dm7"; + name = "Detective's Office Shutters" + }, +/obj/structure/cable, +/turf/open/floor/plating, +/area/deathmatch) +"Zz" = ( +/obj/structure/table/wood, +/obj/item/taperecorder{ + pixel_x = 3 + }, +/obj/item/storage/box/evidence, +/obj/item/flashlight/seclite, +/turf/open/floor/iron/grimy, +/area/deathmatch) +"ZC" = ( +/obj/structure/chair, +/turf/open/floor/iron/grimy, +/area/deathmatch) +"ZF" = ( +/obj/effect/turf_decal/tile/neutral{ + dir = 1 + }, +/obj/effect/turf_decal/tile/neutral, +/obj/effect/turf_decal/tile/neutral{ + dir = 4 + }, +/obj/effect/turf_decal/tile/neutral{ + dir = 8 + }, +/obj/structure/cable, +/turf/open/indestructible/dark, +/area/deathmatch) +"ZJ" = ( +/obj/structure/closet/l3closet/security, +/obj/effect/turf_decal/tile/red, +/obj/effect/turf_decal/tile/red{ + dir = 4 + }, +/obj/structure/window/reinforced/spawner/directional/west, +/turf/open/indestructible, +/area/deathmatch) +"ZO" = ( +/obj/effect/decal/cleanable/robot_debris/down, +/turf/open/floor/plating, +/area/deathmatch) + +(1,1,1) = {" +Zq +IJ +Yh +Yh +Yh +yN +yN +yN +IJ +IJ +IJ +IJ +du +IJ +Zq +Zq +Zq +Zq +Zq +Zq +Zq +Zq +Zq +Zq +Zq +Zq +"} +(2,1,1) = {" +Zq +IJ +YI +ZF +Yh +aa +pg +Dz +Yh +li +qS +eB +VR +Yh +HK +HK +lf +HK +Zq +HK +lf +HK +IJ +IJ +Kh +Yh +"} +(3,1,1) = {" +Zq +IJ +He +MV +XK +yR +YW +yR +XK +jN +NZ +NZ +bp +Yh +iI +HK +Ux +HK +Zq +XK +zm +VI +JZ +zj +eC +IJ +"} +(4,1,1) = {" +Zq +IJ +fO +ZF +ZO +XI +WI +WX +XK +MS +NZ +vf +SB +XK +oA +XK +VI +XK +XK +Yh +Yh +Yh +XK +Mb +eC +Kh +"} +(5,1,1) = {" +Zq +IJ +XK +iB +XK +YW +YW +jX +XK +hK +ph +ph +YZ +XK +XI +Wz +Vr +Jv +YW +GR +Zr +Qz +kj +Wp +eC +IJ +"} +(6,1,1) = {" +Zq +du +Lp +Ki +PO +GM +ND +GM +bI +Fx +Fx +Fx +XX +sZ +XI +Yz +WI +WI +WV +nI +nI +ua +Ho +XI +ki +IJ +"} +(7,1,1) = {" +Zq +Kh +Ep +Ki +YW +WI +WI +nq +WI +WI +WI +WI +WI +WI +WI +Rd +Ku +zg +XK +YW +Wo +Yh +Ho +XI +eC +IJ +"} +(8,1,1) = {" +Zq +du +Lp +VG +PO +os +EX +Ik +Os +yy +XI +XI +XI +XI +XI +XI +wc +XI +YW +GR +Zr +Qz +kj +XI +eC +IJ +"} +(9,1,1) = {" +Zq +IJ +Yh +Yh +Yh +XK +XK +XK +YU +XK +Et +FQ +IS +An +Sz +IU +Sg +WI +uT +nI +Ox +Qz +Ho +XI +eC +IJ +"} +(10,1,1) = {" +Zq +Zq +Zq +Zq +Yh +Oi +bj +WR +zU +Yh +Yh +YW +Yh +mc +ZJ +YW +Sg +zg +XK +Wo +YW +Yh +Ho +nq +je +IJ +"} +(11,1,1) = {" +Zq +Zq +Zq +Zq +Yh +vZ +aR +MG +zU +YW +vU +SR +Jp +Ho +cN +XI +Sg +XI +YW +GR +Zr +Qz +kj +WI +Wv +IJ +"} +(12,1,1) = {" +vC +vC +vC +vC +Yh +oB +pC +sb +Dd +Yh +JM +SR +Jp +Ho +Ue +Rp +da +UQ +Eb +nI +mn +Qz +Ho +WI +oD +IJ +"} +(13,1,1) = {" +vC +Zq +Zq +Zq +Yh +Yh +DR +Yh +Yh +Yh +nH +mW +Yh +SI +PT +Yh +qd +YW +Yh +Wo +YW +Yh +tR +cs +sA +Kh +"} +(14,1,1) = {" +vC +Zq +Zq +Zq +Yh +Ui +OF +UD +CP +ao +pe +SR +Yh +wn +PM +Rx +kV +eU +WW +Vr +wR +Yh +xD +WI +uI +IJ +"} +(15,1,1) = {" +al +Zq +Zq +Zq +Yh +Ux +Vg +TY +dN +TY +Vg +Gm +Cc +yy +PT +YW +DL +wX +XI +XI +Kz +ma +xD +WI +Wv +Dp +"} +(16,1,1) = {" +vC +Zq +Zq +Zq +Yh +Ux +qE +Dm +qE +Dm +qE +Dm +Ke +Hv +PT +SO +DL +WI +vD +WI +OK +JF +xD +WI +WI +Dp +"} +(17,1,1) = {" +vC +Zq +Zq +Zq +Yh +oN +tH +tH +xi +Am +EP +Ii +Kh +Rv +UU +YW +oY +Vv +XS +ja +EJ +hw +JC +WI +qC +Dp +"} +(18,1,1) = {" +IJ +Kh +Kh +IJ +Yh +Yh +VL +VL +Yh +Yh +Yh +Yh +Yh +oA +UU +Yh +yS +YW +Yh +YW +YW +Yh +Ae +WI +qC +Lz +"} +(19,1,1) = {" +IJ +HV +dq +MP +IJ +vo +yH +uD +xk +Bf +jB +JU +YW +yy +SA +RY +rl +Ls +zu +sr +kf +sR +mR +XI +qC +IJ +"} +(20,1,1) = {" +aw +Ux +SR +SR +Pj +SR +SR +Vu +SR +SR +SR +SR +oQ +Ho +WI +Hd +nq +XI +qd +nx +pY +Ub +DL +XI +qC +IJ +"} +(21,1,1) = {" +IJ +dA +gd +IL +IJ +pa +pM +eT +SR +By +Fj +la +YW +NW +Qp +bh +WI +WI +Yg +jr +XA +nh +sG +EX +SG +IJ +"} +(22,1,1) = {" +IJ +Kh +Kh +IJ +Yh +Yh +Yh +YW +oQ +XK +YW +XK +XK +YW +XK +SF +wT +lT +Yh +YW +Wo +Yh +Rq +Rq +IJ +IJ +"} +(23,1,1) = {" +Yh +sw +sJ +wm +YW +nB +GM +GM +Jb +GM +GM +ku +XK +Jw +XK +Se +TK +Oy +YW +KQ +GR +uQ +Yh +cX +Ux +IJ +"} +(24,1,1) = {" +Kh +YY +Ef +ct +lV +sG +XL +Ni +ob +ob +tQ +mS +yT +Ux +YW +yy +qk +XI +YW +tn +GR +st +Yh +cX +Ux +IJ +"} +(25,1,1) = {" +Yh +Bz +fB +Qd +XK +XK +uF +vl +xm +BM +qy +hY +Iy +Oz +AS +Nw +pc +WI +Zj +xu +bM +nI +Rq +SR +Ux +IJ +"} +(26,1,1) = {" +Yh +cl +bc +KO +XK +pe +Ma +Ux +Ux +Ux +MX +GO +br +Ux +WD +DL +Hz +XI +YW +KQ +EA +st +Yh +vL +Ux +IJ +"} +(27,1,1) = {" +Yh +YS +XI +kU +XK +pe +Ma +by +Qe +CS +aB +GO +VO +Ux +YW +Rv +Hz +XI +YW +KQ +FK +Yh +IJ +IJ +IJ +IJ +"} +(28,1,1) = {" +Yh +YS +XI +kU +XK +pe +Ma +mG +vt +CS +bA +GU +PV +XK +XK +XI +Hz +nf +Yh +Yh +Yh +Yh +Qt +zq +Zz +IJ +"} +(29,1,1) = {" +Kh +YS +OJ +kU +XK +pe +Ma +vJ +lj +Ux +Uz +GO +WI +Dk +qd +XI +Hz +Ik +Zv +ad +oy +Pt +eD +QG +lC +IJ +"} +(30,1,1) = {" +Yh +ew +gf +eZ +XK +XK +AF +Ux +Ux +Ux +MN +GO +XL +Km +qd +XI +Rd +jT +Uc +YQ +YQ +uN +qv +zq +Fr +IJ +"} +(31,1,1) = {" +Yh +Kh +Yh +Kh +Yh +hx +Wv +ue +iy +Mx +Ay +zh +zG +XK +XK +XI +XI +hv +Zv +hG +aH +DD +sg +IJ +IJ +IJ +"} +(32,1,1) = {" +an +Fi +Fi +Fi +Kh +nz +WI +eC +BK +dl +us +aZ +WI +Ry +YW +Ik +Os +mE +Yh +hS +FY +dp +Pt +du +Zq +Zq +"} +(33,1,1) = {" +Yh +Yh +RR +Yh +Yh +Cx +ri +yO +cW +rN +Os +Hp +UQ +fE +Yh +Yh +mi +Yh +Yh +jQ +pV +pV +As +IJ +Zq +Zq +"} +(34,1,1) = {" +Yh +xS +yY +Bt +Yh +pr +Yh +pF +ne +Yh +St +Yh +OU +Yh +Yh +Ux +Ux +Ux +IJ +IJ +IJ +IJ +IJ +IJ +Zq +Zq +"} +(35,1,1) = {" +RR +Wg +Ee +WO +nY +Wg +Yh +Lk +Wg +Yh +mC +Yh +Pt +ZC +th +Ux +Gs +sL +IJ +Zq +Zq +Zq +Zq +Zq +Zq +Zq +"} +(36,1,1) = {" +RR +CM +GY +Pn +tl +Gi +Wd +Ee +Wg +mJ +hi +XK +aI +ZC +LL +Ux +nN +CH +IJ +Zq +Zq +Zq +Zq +Zq +Zq +Zq +"} +(37,1,1) = {" +RR +cf +cf +YN +aE +RL +Yh +Wg +qP +Yh +hi +XK +gI +ZC +LL +Ux +qf +qf +IJ +Zq +Zq +Zq +Zq +Zq +Zq +Zq +"} +(38,1,1) = {" +Yh +Tx +dp +dp +dp +Jo +Yh +Yh +Yh +Yh +du +XK +Mk +LX +XK +Ux +Ux +Ux +IJ +Zq +Zq +Zq +Zq +Zq +Zq +Zq +"} +(39,1,1) = {" +Yh +fL +gC +gE +LU +Yh +Yh +Zq +Zq +Zq +Zq +IJ +IJ +IJ +IJ +IJ +IJ +IJ +IJ +Zq +Zq +Zq +Zq +Zq +Zq +Zq +"} +(40,1,1) = {" +Yh +RR +Yh +Yh +Yh +Yh +Zq +Zq +Zq +Zq +Zq +Zq +Zq +Zq +Zq +Zq +Zq +Zq +Zq +Zq +Zq +Zq +Zq +Zq +Zq +Zq +"} diff --git a/_maps/map_files/Deathmatch/arena.dmm b/_maps/map_files/Deathmatch/arena.dmm new file mode 100644 index 00000000000..d407234f0ab --- /dev/null +++ b/_maps/map_files/Deathmatch/arena.dmm @@ -0,0 +1,1978 @@ +//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE +"aj" = ( +/obj/effect/turf_decal/siding/wideplating/dark{ + dir = 1 + }, +/obj/effect/decal/cleanable/blood/old, +/turf/open/indestructible/vault, +/area/deathmatch) +"ao" = ( +/obj/structure/grille/broken, +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/turf/open/indestructible/plating, +/area/deathmatch) +"aD" = ( +/obj/effect/turf_decal/siding/wideplating/dark{ + dir = 5 + }, +/obj/machinery/light/floor, +/turf/open/indestructible/vault, +/area/deathmatch) +"aI" = ( +/turf/open/chasm/true, +/area/deathmatch) +"bg" = ( +/obj/effect/turf_decal/siding/wideplating/dark/corner{ + dir = 4 + }, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/indestructible/vault, +/area/deathmatch) +"bw" = ( +/obj/item/gun/ballistic/automatic/wt550, +/obj/structure/table/reinforced, +/obj/item/ammo_box/magazine/wt550m9, +/turf/open/indestructible/dark/smooth_large, +/area/deathmatch) +"bC" = ( +/obj/structure/barricade/wooden, +/turf/open/indestructible/dark/smooth_large, +/area/deathmatch) +"cf" = ( +/obj/structure/table/reinforced, +/obj/item/storage/box/donkpockets/donkpocketpizza, +/turf/open/indestructible/dark/smooth_large, +/area/deathmatch) +"cw" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/effect/decal/cleanable/blood/old, +/obj/machinery/light/floor, +/turf/open/indestructible/dark/smooth_large, +/area/deathmatch) +"cM" = ( +/obj/structure/grille/broken, +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/effect/decal/cleanable/blood/old, +/turf/open/indestructible/plating, +/area/deathmatch) +"cY" = ( +/obj/structure/barricade/security/murderdome, +/obj/effect/decal/cleanable/blood/old, +/turf/open/indestructible/dark/smooth_large, +/area/deathmatch) +"dp" = ( +/obj/structure/lattice/catwalk, +/obj/effect/light_emitter{ + set_cap = 2; + light_color = "#DEEFFF"; + set_luminosity = 4 + }, +/obj/effect/landmark/deathmatch_player_spawn, +/turf/open/chasm/true, +/area/deathmatch) +"dN" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/effect/decal/cleanable/blood/old, +/turf/open/indestructible/dark/smooth_large, +/area/deathmatch) +"dU" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/effect/landmark/deathmatch_player_spawn, +/obj/structure/railing{ + dir = 8 + }, +/obj/effect/decal/cleanable/blood/old, +/turf/open/indestructible/dark/smooth_large, +/area/deathmatch) +"ek" = ( +/obj/item/gun/ballistic/shotgun/sc_pump, +/turf/open/indestructible/dark/smooth_large, +/area/deathmatch) +"eC" = ( +/obj/effect/turf_decal/siding/wideplating/dark{ + dir = 4 + }, +/obj/effect/decal/cleanable/blood/old, +/turf/open/indestructible/vault, +/area/deathmatch) +"fp" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/item/storage/medkit/tactical/premium, +/obj/structure/table/reinforced, +/obj/structure/window/spawner/directional/south, +/turf/open/indestructible/dark/smooth_large, +/area/deathmatch) +"fX" = ( +/obj/structure/railing, +/turf/open/indestructible/dark/smooth_large, +/area/deathmatch) +"hb" = ( +/obj/effect/turf_decal/siding/wideplating/dark{ + dir = 4 + }, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/indestructible/vault, +/area/deathmatch) +"hG" = ( +/obj/effect/spawner/structure/window, +/turf/open/indestructible/plating, +/area/deathmatch) +"ir" = ( +/obj/effect/turf_decal/siding/wideplating/dark, +/turf/open/indestructible/vault, +/area/deathmatch) +"jA" = ( +/obj/effect/turf_decal/siding/wideplating/dark/corner{ + dir = 8 + }, +/turf/open/indestructible/vault, +/area/deathmatch) +"kk" = ( +/turf/open/indestructible/vault, +/area/deathmatch) +"lv" = ( +/obj/structure/chair/office/tactical{ + dir = 8 + }, +/obj/effect/decal/cleanable/blood/old, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/indestructible/dark/smooth_large, +/area/deathmatch) +"lQ" = ( +/obj/item/gun/ballistic/revolver/reverse, +/obj/effect/decal/cleanable/blood/old, +/obj/effect/light_emitter{ + set_cap = 2; + light_color = "#DEEFFF"; + set_luminosity = 4 + }, +/turf/open/indestructible/dark/smooth_large, +/area/deathmatch) +"lS" = ( +/obj/structure/table/reinforced, +/obj/item/grenade/frag/mega, +/turf/open/indestructible/dark/smooth_large, +/area/deathmatch) +"lT" = ( +/obj/effect/landmark/deathmatch_player_spawn, +/obj/structure/bed/maint, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/indestructible/dark/smooth_large, +/area/deathmatch) +"mz" = ( +/obj/effect/turf_decal/siding/wideplating/dark{ + dir = 6 + }, +/turf/open/indestructible/vault, +/area/deathmatch) +"mI" = ( +/obj/effect/turf_decal/siding/wideplating/dark{ + dir = 8 + }, +/obj/structure/barricade/security/murderdome, +/turf/open/indestructible/vault, +/area/deathmatch) +"mV" = ( +/obj/structure/grille/broken, +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/effect/decal/cleanable/blood/old, +/turf/open/indestructible/plating, +/area/deathmatch) +"ns" = ( +/obj/structure/railing{ + dir = 4 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/effect/turf_decal/siding/wideplating/dark{ + dir = 8 + }, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/indestructible/vault, +/area/deathmatch) +"nI" = ( +/turf/open/indestructible/dark/smooth_large, +/area/deathmatch) +"nT" = ( +/obj/effect/light_emitter{ + set_cap = 2; + light_color = "#DEEFFF"; + set_luminosity = 4 + }, +/turf/open/indestructible/dark/smooth_large, +/area/deathmatch) +"pt" = ( +/obj/item/clothing/suit/armor/swat, +/obj/item/clothing/head/helmet/swat/nanotrasen, +/obj/effect/decal/cleanable/dirt/dust, +/obj/item/melee/energy/sword, +/obj/effect/light_emitter{ + set_cap = 2; + light_color = "#DEEFFF"; + set_luminosity = 4 + }, +/obj/effect/decal/cleanable/blood/old, +/turf/open/indestructible/plating, +/area/deathmatch) +"pR" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/effect/turf_decal/siding/wideplating/dark{ + dir = 8 + }, +/turf/open/indestructible/vault, +/area/deathmatch) +"qa" = ( +/turf/closed/indestructible/riveted, +/area/deathmatch) +"qH" = ( +/obj/item/food/roast_dinner, +/obj/structure/table/reinforced, +/turf/open/indestructible/dark/smooth_large, +/area/deathmatch) +"qP" = ( +/obj/effect/turf_decal/siding/wideplating/dark{ + dir = 8 + }, +/obj/effect/decal/cleanable/blood/old, +/turf/open/indestructible/vault, +/area/deathmatch) +"rc" = ( +/obj/effect/turf_decal/siding/wideplating/dark, +/obj/effect/turf_decal/siding/wideplating/dark{ + dir = 1 + }, +/turf/open/indestructible/vault, +/area/deathmatch) +"sd" = ( +/obj/effect/turf_decal/siding/wideplating/dark{ + dir = 10 + }, +/turf/open/indestructible/vault, +/area/deathmatch) +"sk" = ( +/obj/item/gun/ballistic/rifle/rebarxbow/syndie, +/turf/open/indestructible/dark/smooth_large, +/area/deathmatch) +"st" = ( +/obj/structure/railing{ + dir = 1 + }, +/obj/structure/table/reinforced, +/obj/item/shield/roman, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/effect/turf_decal/siding/wideplating/dark, +/turf/open/indestructible/vault, +/area/deathmatch) +"sK" = ( +/obj/effect/light_emitter{ + set_cap = 2; + light_color = "#DEEFFF"; + set_luminosity = 4 + }, +/turf/open/indestructible/vault, +/area/deathmatch) +"tc" = ( +/obj/item/stack/rods/ten, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/effect/turf_decal/siding/wideplating/dark, +/turf/open/indestructible/vault, +/area/deathmatch) +"tF" = ( +/obj/structure/mystery_box/tdome, +/turf/open/indestructible/vault, +/area/deathmatch) +"tT" = ( +/obj/structure/barricade/security/murderdome, +/turf/open/indestructible/dark/smooth_large, +/area/deathmatch) +"ud" = ( +/obj/effect/decal/cleanable/blood/old, +/obj/effect/light_emitter{ + set_cap = 2; + light_color = "#DEEFFF"; + set_luminosity = 4 + }, +/turf/open/indestructible/dark/smooth_large, +/area/deathmatch) +"un" = ( +/obj/structure/barricade/security/murderdome, +/obj/effect/decal/cleanable/blood/old, +/obj/effect/decal/cleanable/blood/old, +/turf/open/indestructible/dark/smooth_large, +/area/deathmatch) +"vm" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/machinery/light/floor, +/turf/open/indestructible/dark/smooth_large, +/area/deathmatch) +"vM" = ( +/obj/structure/table/reinforced, +/obj/item/reagent_containers/spray/waterflower/superlube, +/obj/structure/window/plasma/spawner/directional/east, +/obj/structure/window/plasma/spawner/directional/north, +/turf/open/indestructible/dark/smooth_large, +/area/deathmatch) +"vW" = ( +/obj/effect/turf_decal/siding/wideplating/dark{ + dir = 4 + }, +/obj/item/gun/ballistic/automatic/m90/unrestricted, +/turf/open/indestructible/vault, +/area/deathmatch) +"wg" = ( +/obj/structure/table/reinforced, +/obj/item/ammo_casing/shotgun/frag12, +/obj/item/ammo_casing/shotgun/frag12, +/obj/item/ammo_casing/shotgun/frag12, +/turf/open/indestructible/dark/smooth_large, +/area/deathmatch) +"wz" = ( +/obj/effect/spawner/random/contraband/armory, +/obj/item/clothing/suit/armor/bone, +/turf/open/indestructible/vault, +/area/deathmatch) +"xD" = ( +/obj/effect/decal/cleanable/blood/old, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/indestructible/dark/smooth_large, +/area/deathmatch) +"xG" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 2 + }, +/obj/machinery/conveyor/auto, +/turf/open/indestructible/dark/smooth_large, +/area/deathmatch) +"xJ" = ( +/obj/machinery/door/airlock/grunge, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/indestructible/dark/smooth_large, +/area/deathmatch) +"xK" = ( +/obj/effect/spawner/random/contraband/grenades/cluster, +/turf/open/indestructible/dark/smooth_large, +/area/deathmatch) +"yb" = ( +/obj/structure/railing{ + dir = 4 + }, +/obj/effect/turf_decal/siding/wideplating/dark{ + dir = 4 + }, +/obj/effect/decal/cleanable/blood/old, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/indestructible/vault, +/area/deathmatch) +"yA" = ( +/obj/effect/decal/cleanable/blood/old, +/turf/open/indestructible/dark/smooth_large, +/area/deathmatch) +"zd" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/effect/decal/cleanable/blood/tracks{ + dir = 4 + }, +/turf/open/indestructible/dark/smooth_large, +/area/deathmatch) +"zy" = ( +/obj/structure/mystery_box/tdome, +/obj/effect/light_emitter{ + set_cap = 2; + light_color = "#DEEFFF"; + set_luminosity = 4 + }, +/turf/open/indestructible/dark/smooth_large, +/area/deathmatch) +"An" = ( +/obj/structure/table/reinforced, +/obj/item/clothing/suit/armor/vest/alt, +/turf/open/indestructible/dark/smooth_large, +/area/deathmatch) +"As" = ( +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/indestructible/plating, +/area/deathmatch) +"Bl" = ( +/obj/structure/railing{ + dir = 1 + }, +/obj/structure/table/reinforced, +/obj/machinery/microwave, +/obj/item/kitchen/fork, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/effect/turf_decal/siding/wideplating/dark, +/turf/open/indestructible/vault, +/area/deathmatch) +"Br" = ( +/obj/effect/turf_decal/siding/wideplating/dark/corner{ + dir = 4 + }, +/turf/open/indestructible/vault, +/area/deathmatch) +"BH" = ( +/obj/structure/lattice/catwalk, +/obj/effect/landmark/deathmatch_player_spawn, +/turf/open/chasm/true, +/area/deathmatch) +"Db" = ( +/obj/item/gun/ballistic/revolver/nagant, +/obj/effect/turf_decal/siding/wideplating/dark{ + dir = 8 + }, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/indestructible/vault, +/area/deathmatch) +"Dp" = ( +/obj/item/gun/ballistic/automatic/pistol/m1911, +/turf/open/indestructible/dark/smooth_large, +/area/deathmatch) +"DC" = ( +/obj/structure/grille/broken, +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/turf/open/indestructible/plating, +/area/deathmatch) +"DF" = ( +/obj/effect/landmark/deathmatch_player_spawn, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/indestructible/vault, +/area/deathmatch) +"Ef" = ( +/obj/effect/turf_decal/siding/wideplating/dark{ + dir = 5 + }, +/turf/open/indestructible/vault, +/area/deathmatch) +"En" = ( +/turf/cordon, +/area/deathmatch) +"EA" = ( +/obj/effect/landmark/deathmatch_player_spawn, +/turf/open/indestructible/dark/smooth_large, +/area/deathmatch) +"EQ" = ( +/obj/effect/turf_decal/siding/wideplating/dark, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/turf/open/indestructible/vault, +/area/deathmatch) +"Gb" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/machinery/conveyor/auto{ + dir = 4 + }, +/turf/open/indestructible/dark/smooth_large, +/area/deathmatch) +"Go" = ( +/obj/effect/turf_decal/siding/wideplating/dark{ + dir = 1 + }, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/indestructible/vault, +/area/deathmatch) +"Gz" = ( +/obj/item/gun/ballistic/rifle/boltaction/prime, +/obj/structure/table/reinforced, +/turf/open/indestructible/dark/smooth_large, +/area/deathmatch) +"GY" = ( +/obj/structure/table/reinforced, +/obj/item/grenade/mirage, +/obj/item/grenade/mirage, +/turf/open/indestructible/dark/smooth_large, +/area/deathmatch) +"HD" = ( +/obj/lightning_thrower, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/indestructible/plating, +/area/deathmatch) +"Ig" = ( +/obj/effect/turf_decal/siding/wideplating/dark{ + dir = 4 + }, +/turf/open/indestructible/vault, +/area/deathmatch) +"Ih" = ( +/obj/effect/decal/cleanable/blood/old, +/turf/open/indestructible/vault, +/area/deathmatch) +"In" = ( +/obj/structure/mystery_box/tdome, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/indestructible/dark/smooth_large, +/area/deathmatch) +"IJ" = ( +/obj/effect/light_emitter{ + set_cap = 2; + light_color = "#DEEFFF"; + set_luminosity = 2 + }, +/turf/open/indestructible/dark/smooth_large, +/area/deathmatch) +"Jm" = ( +/obj/effect/light_emitter{ + set_cap = 2; + light_color = "#DEEFFF"; + set_luminosity = 4 + }, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/indestructible/dark/smooth_large, +/area/deathmatch) +"Jq" = ( +/obj/structure/lattice/catwalk, +/turf/open/chasm/true, +/area/deathmatch) +"JN" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/structure/railing{ + dir = 8 + }, +/obj/effect/decal/cleanable/blood/old, +/turf/open/indestructible/dark/smooth_large, +/area/deathmatch) +"Kb" = ( +/obj/structure/table/reinforced, +/obj/item/ammo_box/strilka310/surplus, +/turf/open/indestructible/dark/smooth_large, +/area/deathmatch) +"Kr" = ( +/obj/item/stack/rods/ten, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/effect/light_emitter{ + set_cap = 2; + light_color = "#DEEFFF"; + set_luminosity = 4 + }, +/obj/effect/turf_decal/siding/wideplating/dark, +/turf/open/indestructible/vault, +/area/deathmatch) +"KT" = ( +/obj/structure/chair/office/tactical{ + dir = 1 + }, +/turf/open/indestructible/vault, +/area/deathmatch) +"KX" = ( +/obj/effect/turf_decal/siding/wideplating/dark{ + dir = 8 + }, +/obj/machinery/light/floor, +/turf/open/indestructible/vault, +/area/deathmatch) +"Lh" = ( +/obj/item/clothing/suit/armor/vest/russian_coat, +/turf/open/indestructible/dark/smooth_large, +/area/deathmatch) +"LA" = ( +/obj/effect/spawner/random/medical/medkit_rare, +/obj/effect/decal/cleanable/blood/old, +/turf/open/indestructible/vault, +/area/deathmatch) +"Ml" = ( +/obj/effect/turf_decal/siding/wideplating/dark{ + dir = 10 + }, +/obj/structure/barricade/security/murderdome, +/turf/open/indestructible/vault, +/area/deathmatch) +"Mq" = ( +/obj/structure/railing{ + dir = 4 + }, +/obj/effect/turf_decal/siding/wideplating/dark{ + dir = 4 + }, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/indestructible/vault, +/area/deathmatch) +"ML" = ( +/obj/effect/landmark/deathmatch_player_spawn, +/obj/effect/light_emitter{ + set_cap = 2; + light_color = "#DEEFFF"; + set_luminosity = 4 + }, +/turf/open/indestructible/dark/smooth_large, +/area/deathmatch) +"Om" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/decal/remains/human, +/turf/open/indestructible/plating, +/area/deathmatch) +"OK" = ( +/obj/effect/turf_decal/siding/wideplating/dark, +/obj/effect/turf_decal/siding/wideplating/dark{ + dir = 1 + }, +/obj/structure/barricade/security/murderdome, +/turf/open/indestructible/vault, +/area/deathmatch) +"OU" = ( +/obj/effect/decal/cleanable/blood/old, +/obj/effect/decal/cleanable/blood/old, +/turf/open/indestructible/dark/smooth_large, +/area/deathmatch) +"PU" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/effect/spawner/random/contraband/grenades/cluster, +/turf/open/indestructible/dark/smooth_large, +/area/deathmatch) +"Qd" = ( +/obj/structure/table/reinforced, +/obj/item/storage/medkit/tactical/premium, +/turf/open/indestructible/dark/smooth_large, +/area/deathmatch) +"QQ" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/decal/cleanable/blood/old, +/turf/open/indestructible/plating, +/area/deathmatch) +"QY" = ( +/obj/structure/table/reinforced, +/obj/item/gun/ballistic/automatic/pistol/m1911, +/turf/open/indestructible/dark/smooth_large, +/area/deathmatch) +"Rq" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/effect/turf_decal/siding/wideplating/dark{ + dir = 8 + }, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/indestructible/vault, +/area/deathmatch) +"RE" = ( +/obj/effect/light_emitter{ + set_cap = 2; + light_color = "#DEEFFF"; + set_luminosity = 2 + }, +/obj/effect/decal/cleanable/blood/old, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/indestructible/vault, +/area/deathmatch) +"Sy" = ( +/obj/machinery/light/floor, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/indestructible/dark/smooth_large, +/area/deathmatch) +"SZ" = ( +/obj/effect/landmark/deathmatch_player_spawn, +/obj/effect/light_emitter{ + set_cap = 2; + light_color = "#DEEFFF"; + set_luminosity = 2 + }, +/turf/open/indestructible/dark/smooth_large, +/area/deathmatch) +"TC" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/structure/railing/corner/end, +/turf/open/indestructible/dark/smooth_large, +/area/deathmatch) +"TQ" = ( +/obj/effect/decal/cleanable/blood/old, +/obj/machinery/light/floor, +/turf/open/indestructible/dark/smooth_large, +/area/deathmatch) +"Uk" = ( +/obj/structure/lattice/catwalk, +/obj/effect/light_emitter{ + set_cap = 2; + light_color = "#DEEFFF"; + set_luminosity = 4 + }, +/turf/open/chasm/true, +/area/deathmatch) +"Uv" = ( +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/indestructible/dark/smooth_large, +/area/deathmatch) +"UU" = ( +/obj/structure/table/reinforced, +/obj/structure/window/plasma/spawner/directional/north, +/turf/open/indestructible/dark/smooth_large, +/area/deathmatch) +"UV" = ( +/obj/effect/turf_decal/siding/wideplating/dark{ + dir = 5 + }, +/obj/machinery/deployable_turret, +/turf/open/indestructible/vault, +/area/deathmatch) +"Vl" = ( +/obj/structure/mystery_box/tdome, +/turf/open/indestructible/dark/smooth_large, +/area/deathmatch) +"Vx" = ( +/obj/structure/barricade/security/murderdome, +/obj/effect/turf_decal/siding/wideplating/dark, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/indestructible/vault, +/area/deathmatch) +"VA" = ( +/obj/structure/railing{ + dir = 4 + }, +/obj/structure/table/reinforced, +/obj/item/gun/ballistic/revolver/c38, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/effect/turf_decal/siding/wideplating/dark{ + dir = 8 + }, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/indestructible/vault, +/area/deathmatch) +"Wd" = ( +/obj/effect/landmark/deathmatch_player_spawn, +/turf/open/indestructible/vault, +/area/deathmatch) +"We" = ( +/obj/effect/turf_decal/siding/wideplating/dark{ + dir = 8 + }, +/turf/open/indestructible/vault, +/area/deathmatch) +"Ws" = ( +/obj/effect/turf_decal/siding/wideplating/dark/corner{ + dir = 8 + }, +/obj/structure/barricade/security/murderdome, +/turf/open/indestructible/vault, +/area/deathmatch) +"WE" = ( +/obj/structure/railing{ + dir = 1 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/effect/turf_decal/siding/wideplating/dark, +/turf/open/indestructible/vault, +/area/deathmatch) +"WP" = ( +/obj/structure/table/reinforced, +/obj/item/gun/ballistic/revolver/c38, +/turf/open/indestructible/dark/smooth_large, +/area/deathmatch) +"WQ" = ( +/obj/effect/spawner/random/entertainment/drugs, +/obj/effect/spawner/random/entertainment/drugs, +/obj/effect/spawner/random/entertainment/drugs, +/obj/effect/spawner/random/entertainment/drugs, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/indestructible/dark/smooth_large, +/area/deathmatch) +"Xc" = ( +/obj/effect/spawner/random/contraband/armory, +/obj/item/clothing/suit/armor/bone, +/obj/structure/table/reinforced, +/turf/open/indestructible/vault, +/area/deathmatch) +"XG" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/turf/open/indestructible/dark/smooth_large, +/area/deathmatch) +"XP" = ( +/obj/machinery/light/floor, +/turf/open/indestructible/dark/smooth_large, +/area/deathmatch) +"XR" = ( +/obj/effect/turf_decal/siding/wideplating/dark{ + dir = 9 + }, +/turf/open/indestructible/vault, +/area/deathmatch) +"XT" = ( +/obj/structure/railing{ + dir = 4 + }, +/obj/structure/mystery_box/tdome, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/effect/turf_decal/siding/wideplating/dark{ + dir = 8 + }, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/indestructible/vault, +/area/deathmatch) +"Yc" = ( +/obj/effect/turf_decal/siding/wideplating/dark, +/obj/effect/turf_decal/siding/wideplating/dark{ + dir = 1 + }, +/obj/effect/decal/cleanable/blood/old, +/turf/open/indestructible/vault, +/area/deathmatch) +"YI" = ( +/obj/structure/lattice/catwalk, +/obj/item/storage/toolbox/guncase/rocketlauncher{ + weapon_to_spawn = /obj/item/gun/ballistic/rocketlauncher/unrestricted + }, +/obj/effect/light_emitter{ + set_cap = 2; + light_color = "#DEEFFF"; + set_luminosity = 2 + }, +/turf/open/chasm/true, +/area/deathmatch) +"ZO" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/structure/railing/corner/end{ + dir = 8 + }, +/obj/effect/decal/cleanable/blood/old, +/turf/open/indestructible/dark/smooth_large, +/area/deathmatch) +"ZR" = ( +/obj/effect/turf_decal/siding/wideplating/dark{ + dir = 8 + }, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/indestructible/vault, +/area/deathmatch) +"ZZ" = ( +/obj/effect/turf_decal/siding/wideplating/dark{ + dir = 4 + }, +/obj/structure/barricade/security/murderdome, +/turf/open/indestructible/vault, +/area/deathmatch) + +(1,1,1) = {" +En +En +En +En +En +En +En +En +En +En +En +En +En +En +En +En +En +En +En +En +En +En +En +En +En +En +En +En +En +En +En +En +"} +(2,1,1) = {" +En +qa +qa +qa +qa +qa +qa +qa +qa +qa +qa +qa +qa +qa +qa +qa +qa +qa +qa +qa +qa +qa +qa +qa +qa +qa +qa +qa +qa +qa +qa +En +"} +(3,1,1) = {" +En +qa +aI +aI +aI +aI +aI +aI +aI +aI +aI +aI +aI +aI +aI +aI +aI +aI +aI +aI +aI +aI +aI +aI +aI +aI +aI +aI +aI +aI +qa +En +"} +(4,1,1) = {" +En +qa +aI +aI +aI +aI +aI +aI +aI +aI +aI +aI +aI +aI +aI +aI +aI +aI +aI +aI +aI +aI +aI +aI +aI +aI +aI +aI +aI +aI +qa +En +"} +(5,1,1) = {" +En +qa +aI +aI +qa +PU +zd +XG +qa +qa +qa +XG +zd +vm +TC +dU +JN +ZO +cw +dN +zd +qa +qa +qa +XG +zd +qa +qa +aI +aI +qa +En +"} +(6,1,1) = {" +En +qa +aI +aI +EQ +nI +nI +nI +Vl +qa +Vl +nI +nI +yA +nI +nI +nI +yA +yA +yA +yA +Vl +qa +Vl +nI +nI +vM +qa +aI +aI +qa +En +"} +(7,1,1) = {" +En +qa +aI +aI +EQ +nI +XP +nI +nI +qa +nI +nI +nI +qa +qa +hG +hG +qa +qa +nI +nI +nI +qa +nI +XP +XP +yA +qa +aI +aI +qa +En +"} +(8,1,1) = {" +En +qa +aI +aI +EQ +nI +Jq +nI +nI +rc +nI +nI +yA +qa +tF +kk +LA +wz +qa +nI +nI +yA +rc +nI +Jq +Jq +yA +qa +aI +aI +qa +En +"} +(9,1,1) = {" +En +qa +aI +aI +EQ +nI +Uk +nI +nI +OK +nI +ud +nI +aj +kk +Wd +sK +Ih +ir +nI +lQ +yA +OK +yA +Jq +Uk +nI +qa +aI +aI +qa +En +"} +(10,1,1) = {" +En +qa +aI +aI +EQ +nI +BH +nI +nI +rc +nI +nI +nI +qa +Xc +KT +Ih +tF +qa +Uv +nI +nI +rc +nI +Jq +BH +An +qa +aI +aI +qa +En +"} +(11,1,1) = {" +En +qa +aI +aI +qa +nI +XP +nI +WP +qa +Qd +EA +nI +qa +qa +hG +hG +qa +qa +Uv +Uv +nI +qa +nI +XP +XP +bw +qa +aI +aI +qa +En +"} +(12,1,1) = {" +En +qa +aI +aI +qa +nI +nI +nI +An +qa +An +nI +nI +nI +nI +nI +ek +nI +nI +yA +nI +lS +qa +qa +bC +bC +qa +qa +aI +aI +qa +En +"} +(13,1,1) = {" +En +qa +aI +aI +XR +We +We +We +We +mI +We +We +We +KX +sd +yA +nI +nI +TQ +yA +EA +wg +qa +Vl +EA +nI +GY +qa +aI +aI +qa +En +"} +(14,1,1) = {" +En +qa +aI +aI +aI +aI +Jq +aI +aI +aI +aI +Jq +aI +aI +jA +We +We +qP +sd +nI +nI +QY +qa +nI +nI +nT +nI +fX +aI +aI +qa +En +"} +(15,1,1) = {" +En +qa +aI +aI +aI +aI +Uk +aI +aI +aI +aI +Uk +aI +aI +Jq +Jq +Jq +aI +jA +We +We +We +Ml +nI +yA +nI +nI +xK +aI +aI +qa +En +"} +(16,1,1) = {" +En +qa +aI +aI +aI +aI +Jq +aI +aI +aI +aI +Jq +aI +aI +Jq +dp +Jq +aI +aI +aI +aI +aI +Ws +We +We +We +qP +sd +aI +aI +qa +En +"} +(17,1,1) = {" +En +qa +aI +aI +UV +ZZ +Ig +Ig +vW +eC +Ig +eC +Br +aI +Jq +Jq +Jq +aI +aI +YI +aI +aI +aI +aI +aI +Jq +aI +aI +aI +aI +qa +En +"} +(18,1,1) = {" +En +qa +aI +aI +qa +qa +Uv +nI +SZ +nI +nI +nI +Ef +Ig +Ig +Ig +Br +aI +aI +Jq +aI +aI +aI +aI +aI +Uk +aI +aI +aI +aI +qa +En +"} +(19,1,1) = {" +En +qa +aI +aI +qa +fp +Uv +yA +nI +yA +nI +nI +yA +nI +Uv +yA +Ef +Ig +eC +hb +bg +aI +aI +aI +aI +Jq +aI +aI +aI +aI +qa +En +"} +(20,1,1) = {" +En +qa +aI +aI +qa +qa +qa +tT +Uv +nI +tT +tT +nI +Uv +Uv +IJ +nI +nI +nI +Uv +aD +Ig +Ig +Ig +Ig +Ig +Ig +mz +aI +aI +qa +En +"} +(21,1,1) = {" +En +qa +aI +aI +Bl +cf +qa +Jm +Uv +yA +zy +tT +OU +qa +qa +DC +DC +mV +DC +mV +qa +qa +xJ +UU +qa +nT +yA +qa +aI +aI +qa +En +"} +(22,1,1) = {" +En +qa +aI +aI +WE +yA +rc +Uv +Uv +nI +Uv +nI +nI +Kb +qa +As +HD +Om +HD +As +qa +lT +Sy +lv +qa +cY +yA +qa +aI +aI +qa +En +"} +(23,1,1) = {" +En +qa +aI +aI +WE +nI +rc +Dp +nI +Uv +Uv +nI +nI +Gz +qa +As +As +pt +Om +As +qa +WQ +xD +In +qa +nI +nI +qa +aI +aI +qa +En +"} +(24,1,1) = {" +En +qa +aI +aI +Kr +nI +qa +ML +nI +Uv +zy +tT +nI +SZ +qa +Om +HD +As +HD +QQ +qa +qa +qa +qa +qa +nI +cY +qa +aI +aI +qa +En +"} +(25,1,1) = {" +En +qa +aI +aI +tc +yA +qa +qa +bC +bC +tT +tT +nI +nI +qa +ao +cM +ao +ao +ao +qa +Lh +yA +nI +nI +sk +nI +xG +aI +aI +qa +En +"} +(26,1,1) = {" +En +qa +aI +aI +st +nI +qH +qa +ZR +Db +qa +nI +yA +nI +Yc +nI +nI +nI +nI +yA +rc +nT +tT +nI +un +ML +nI +xG +aI +aI +qa +En +"} +(27,1,1) = {" +En +qa +aI +aI +qa +XP +yA +Go +RE +DF +Vx +nI +yA +XP +rc +nI +nI +ML +yA +nI +rc +nI +nI +yA +nI +nI +Vl +qa +aI +aI +qa +En +"} +(28,1,1) = {" +En +qa +aI +aI +qa +qa +pR +qa +Mq +yb +qa +Rq +Rq +qa +qa +qa +VA +ns +XT +qa +qa +qa +Gb +Gb +Gb +Gb +qa +qa +aI +aI +qa +En +"} +(29,1,1) = {" +En +qa +aI +aI +aI +aI +aI +aI +aI +aI +aI +aI +aI +aI +aI +aI +aI +aI +aI +aI +aI +aI +aI +aI +aI +aI +aI +aI +aI +aI +qa +En +"} +(30,1,1) = {" +En +qa +aI +aI +aI +aI +aI +aI +aI +aI +aI +aI +aI +aI +aI +aI +aI +aI +aI +aI +aI +aI +aI +aI +aI +aI +aI +aI +aI +aI +qa +En +"} +(31,1,1) = {" +En +qa +qa +qa +qa +qa +qa +qa +qa +qa +qa +qa +qa +qa +qa +qa +qa +qa +qa +qa +qa +qa +qa +qa +qa +qa +qa +qa +qa +qa +qa +En +"} +(32,1,1) = {" +En +En +En +En +En +En +En +En +En +En +En +En +En +En +En +En +En +En +En +En +En +En +En +En +En +En +En +En +En +En +En +En +"} diff --git a/_maps/map_files/Deathmatch/chinatown.dmm b/_maps/map_files/Deathmatch/chinatown.dmm new file mode 100644 index 00000000000..78cb949235d --- /dev/null +++ b/_maps/map_files/Deathmatch/chinatown.dmm @@ -0,0 +1,1417 @@ +//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE +"bd" = ( +/turf/open/floor/wood/parquet, +/area/deathmatch) +"ce" = ( +/obj/structure/chair/stool/bamboo{ + dir = 4 + }, +/obj/item/spear/bamboospear, +/obj/machinery/light{ + dir = 8 + }, +/turf/open/misc/grass/jungle, +/area/deathmatch) +"ch" = ( +/obj/item/kirbyplants{ + icon_state = "plant-10" + }, +/turf/open/floor/bamboo, +/area/deathmatch) +"cr" = ( +/obj/item/stack/sheet/mineral/bamboo, +/turf/open/misc/grass, +/area/deathmatch) +"dm" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 1 + }, +/obj/item/fishing_rod/bone, +/obj/item/fishing_hook/bone, +/obj/item/fishing_line/sinew, +/obj/structure/fermenting_barrel/gunpowder, +/turf/open/indestructible/hotelwood, +/area/deathmatch) +"dp" = ( +/obj/item/food/grown/wheat{ + pixel_y = 4; + pixel_x = 7 + }, +/obj/item/food/grown/wheat{ + pixel_y = 17; + pixel_x = -12 + }, +/obj/item/reagent_containers/cup/bucket/wooden{ + pixel_y = -1; + pixel_x = -9 + }, +/turf/open/misc/dirt, +/area/deathmatch) +"dr" = ( +/obj/structure/closet/crate/wooden, +/obj/item/throwing_star, +/obj/item/stack/medical/suture, +/obj/machinery/light, +/turf/open/floor/wood/large, +/area/deathmatch) +"dy" = ( +/obj/structure/headpike/bamboo, +/turf/open/misc/grass/jungle, +/area/deathmatch) +"dI" = ( +/obj/machinery/light/floor{ + pixel_x = 16; + pixel_y = -17 + }, +/turf/open/water, +/area/deathmatch) +"el" = ( +/obj/structure/flora/bush/flowers_yw, +/turf/open/misc/grass, +/area/deathmatch) +"fk" = ( +/obj/item/storage/box/matches, +/turf/open/floor/bamboo, +/area/deathmatch) +"fn" = ( +/obj/structure/flora/tree/jungle/style_random, +/turf/open/misc/grass, +/area/deathmatch) +"fs" = ( +/obj/structure/chair/stool/bamboo{ + dir = 4 + }, +/obj/item/gun/syringe/blowgun, +/obj/machinery/light{ + dir = 8 + }, +/turf/open/misc/grass/jungle, +/area/deathmatch) +"fD" = ( +/obj/structure/flora/bush/stalky/style_random, +/turf/open/misc/grass, +/area/deathmatch) +"gH" = ( +/turf/open/floor/engine/cult, +/area/deathmatch) +"ha" = ( +/obj/item/kirbyplants{ + icon_state = "plant-10" + }, +/obj/machinery/light{ + dir = 8 + }, +/turf/open/floor/bamboo/tatami/purple, +/area/deathmatch) +"iq" = ( +/turf/open/floor/carpet/green, +/area/deathmatch) +"iI" = ( +/obj/structure/table/wood, +/obj/item/reagent_containers/cup/mortar, +/obj/item/pestle, +/turf/open/floor/wood/large, +/area/deathmatch) +"iL" = ( +/obj/structure/flora/bush/leavy/style_2, +/turf/open/misc/grass, +/area/deathmatch) +"jc" = ( +/obj/structure/table/wood, +/obj/item/food/fishmeat/carp{ + pixel_y = 8 + }, +/obj/item/food/fishmeat/carp, +/turf/open/floor/stone, +/area/deathmatch) +"kY" = ( +/obj/structure/flora/bush/flowers_br/style_random, +/turf/open/misc/grass, +/area/deathmatch) +"lr" = ( +/obj/machinery/light{ + dir = 4 + }, +/turf/open/floor/wood/large, +/area/deathmatch) +"lA" = ( +/obj/structure/statue/bone/skull, +/obj/item/clothing/suit/hooded/cultrobes/hardened, +/turf/open/floor/engine/cult, +/area/deathmatch) +"lD" = ( +/obj/structure/table/wood, +/obj/item/food/vegetariansushislice{ + pixel_y = 9; + pixel_x = 5 + }, +/obj/item/food/vegetariansushislice{ + pixel_y = 5 + }, +/obj/item/food/vegetariansushislice{ + pixel_x = -5 + }, +/obj/item/throwing_star{ + pixel_x = 8; + pixel_y = -2 + }, +/turf/open/floor/wood/tile, +/area/deathmatch) +"lO" = ( +/obj/structure/flora/bush/generic, +/turf/open/misc/grass, +/area/deathmatch) +"ma" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 1 + }, +/obj/effect/landmark/deathmatch_player_spawn, +/turf/open/indestructible/hotelwood, +/area/deathmatch) +"mb" = ( +/obj/structure/flora/bush/sparsegrass, +/turf/open/misc/grass, +/area/deathmatch) +"mf" = ( +/obj/structure/flora/tree/jungle/style_3, +/turf/open/misc/grass, +/area/deathmatch) +"mt" = ( +/obj/structure/flora/tree/jungle/style_2, +/turf/open/misc/grass, +/area/deathmatch) +"mC" = ( +/obj/structure/table/wood, +/obj/item/food/sashimi, +/turf/open/floor/wood/tile, +/area/deathmatch) +"mT" = ( +/obj/effect/mapping_helpers/broken_floor, +/turf/open/floor/engine/cult, +/area/deathmatch) +"nE" = ( +/obj/effect/landmark/deathmatch_player_spawn, +/turf/open/floor/bamboo/tatami, +/area/deathmatch) +"nU" = ( +/obj/effect/turf_decal/siding/wood, +/obj/structure/barricade/wooden, +/turf/open/floor/wood/large, +/area/deathmatch) +"of" = ( +/obj/structure/flora/rock/pile/jungle, +/turf/open/water, +/area/deathmatch) +"oo" = ( +/obj/effect/decal/cleanable/blood/old, +/turf/open/floor/engine/cult, +/area/deathmatch) +"oy" = ( +/obj/structure/table/wood, +/obj/item/reagent_containers/cup/bottle/potassium{ + pixel_y = 8; + pixel_x = 10 + }, +/obj/item/reagent_containers/cup/bottle/iron{ + pixel_y = 12; + pixel_x = -4 + }, +/obj/item/reagent_containers/cup/bottle/frostoil, +/turf/open/floor/bamboo, +/area/deathmatch) +"oN" = ( +/obj/item/stack/sheet/bone, +/turf/open/floor/bamboo, +/area/deathmatch) +"oR" = ( +/obj/structure/table/bronze, +/obj/item/nullrod/claymore/bostaff, +/obj/structure/window/spawner/directional/south, +/obj/structure/window/spawner/directional/west, +/obj/machinery/light{ + dir = 4 + }, +/turf/open/floor/stone, +/area/deathmatch) +"oX" = ( +/obj/structure/closet/crate/wooden, +/obj/item/stack/medical/bruise_pack{ + pixel_y = 8; + pixel_x = -6 + }, +/obj/item/food/grown/banana, +/turf/open/floor/wood/large, +/area/deathmatch) +"oY" = ( +/obj/item/food/grown/wheat{ + pixel_y = 4; + pixel_x = 7 + }, +/obj/item/food/grown/wheat{ + pixel_x = -8; + pixel_y = 10 + }, +/obj/item/food/grown/wheat{ + pixel_x = -10 + }, +/turf/open/misc/dirt, +/area/deathmatch) +"pG" = ( +/turf/open/floor/wood/large, +/area/deathmatch) +"pV" = ( +/obj/structure/fermenting_barrel/gunpowder, +/turf/open/floor/wood/large, +/area/deathmatch) +"qo" = ( +/obj/machinery/light{ + dir = 1 + }, +/turf/open/misc/grass, +/area/deathmatch) +"qu" = ( +/obj/structure/table/wood, +/obj/item/retractor, +/obj/item/stack/medical/gauze{ + pixel_x = 4; + pixel_y = 1 + }, +/turf/open/floor/wood/large, +/area/deathmatch) +"qI" = ( +/obj/item/knife/ritual, +/turf/open/floor/engine/cult, +/area/deathmatch) +"rl" = ( +/obj/structure/table/wood/fancy, +/obj/item/clothing/head/costume/crown, +/turf/open/floor/carpet, +/area/deathmatch) +"rP" = ( +/obj/structure/table/bronze, +/obj/item/flashlight/lantern{ + light_on = 1 + }, +/obj/machinery/light, +/turf/open/floor/stone, +/area/deathmatch) +"rU" = ( +/obj/item/food/meat/slab/human{ + pixel_x = -7; + pixel_y = -5 + }, +/obj/item/food/meat/slab/gondola, +/obj/structure/bonfire/prelit, +/turf/open/indestructible/necropolis, +/area/deathmatch) +"sa" = ( +/obj/item/clothing/head/costume/rice_hat, +/obj/item/hatchet/wooden, +/obj/structure/bed/maint, +/turf/open/floor/wood/large, +/area/deathmatch) +"so" = ( +/obj/machinery/light, +/turf/open/floor/bamboo, +/area/deathmatch) +"tM" = ( +/obj/structure/flora/bush/flowers_pp/style_random, +/turf/open/misc/grass, +/area/deathmatch) +"tT" = ( +/obj/structure/chair/stool/bamboo{ + dir = 4 + }, +/turf/open/floor/bamboo/tatami, +/area/deathmatch) +"uc" = ( +/obj/structure/flora/bush/leafy, +/turf/open/misc/grass, +/area/deathmatch) +"ui" = ( +/turf/open/floor/bamboo/tatami, +/area/deathmatch) +"ut" = ( +/obj/effect/decal/cleanable/blood/old, +/obj/item/clothing/shoes/cult/alt, +/turf/open/floor/engine/cult, +/area/deathmatch) +"uP" = ( +/mob/living/basic/cow, +/obj/machinery/light, +/turf/open/misc/dirt, +/area/deathmatch) +"vC" = ( +/obj/structure/mineral_door/paperframe, +/turf/open/floor/wood/large, +/area/deathmatch) +"wF" = ( +/obj/structure/flora/bush/flowers_yw/style_2, +/turf/open/misc/grass, +/area/deathmatch) +"xk" = ( +/obj/effect/landmark/deathmatch_player_spawn, +/turf/open/floor/bamboo, +/area/deathmatch) +"xm" = ( +/obj/machinery/light, +/turf/open/water, +/area/deathmatch) +"xz" = ( +/turf/open/lava/smooth, +/area/deathmatch) +"xJ" = ( +/obj/structure/table/wood, +/obj/item/stack/medical/poultice, +/obj/item/stack/medical/poultice{ + pixel_x = 8; + pixel_y = -3 + }, +/obj/item/stack/medical/aloe{ + pixel_x = -9; + pixel_y = 8 + }, +/obj/item/stack/medical/aloe{ + pixel_x = -10; + pixel_y = 12 + }, +/obj/machinery/light{ + dir = 1 + }, +/turf/open/floor/bamboo, +/area/deathmatch) +"yl" = ( +/obj/structure/chair/stool/bamboo{ + dir = 4 + }, +/obj/item/reagent_containers/syringe/crude{ + pixel_y = -1 + }, +/obj/item/reagent_containers/syringe/crude{ + pixel_y = 3 + }, +/obj/item/reagent_containers/syringe/crude{ + pixel_y = -4 + }, +/turf/open/misc/grass/jungle, +/area/deathmatch) +"yz" = ( +/obj/structure/flora/bush/flowers_pp, +/obj/item/food/pie/cream, +/obj/item/clothing/mask/gas/clown_hat, +/turf/open/misc/grass, +/area/deathmatch) +"yA" = ( +/obj/structure/flora/rock/pile/jungle/large, +/obj/machinery/light/floor, +/turf/open/water, +/area/deathmatch) +"yE" = ( +/obj/effect/landmark/deathmatch_player_spawn, +/turf/open/misc/grass/jungle, +/area/deathmatch) +"yI" = ( +/obj/structure/barricade/wooden/crude, +/obj/structure/mineral_door/paperframe, +/turf/open/floor/engine/cult, +/area/deathmatch) +"yL" = ( +/obj/structure/table/bronze, +/obj/item/throwing_star{ + pixel_x = 2 + }, +/obj/structure/window/spawner/directional/east, +/obj/structure/window/spawner/directional/north, +/obj/item/throwing_star{ + pixel_x = -9; + pixel_y = 3 + }, +/obj/machinery/light{ + dir = 8 + }, +/turf/open/floor/stone, +/area/deathmatch) +"zb" = ( +/obj/effect/decal/cleanable/blood/old, +/obj/item/bedsheet/cult, +/turf/open/floor/engine/cult, +/area/deathmatch) +"zu" = ( +/obj/structure/barricade/wooden, +/turf/open/floor/wood/large, +/area/deathmatch) +"zE" = ( +/obj/structure/table/wood, +/obj/item/stack/medical/ointment{ + pixel_y = 6; + pixel_x = 12 + }, +/obj/item/stack/medical/ointment{ + pixel_y = 2; + pixel_x = 12 + }, +/obj/item/stack/medical/suture/medicated, +/obj/item/stack/medical/suture/medicated{ + pixel_y = -4 + }, +/turf/open/floor/bamboo, +/area/deathmatch) +"zG" = ( +/obj/machinery/light{ + dir = 1 + }, +/turf/open/floor/bamboo, +/area/deathmatch) +"zV" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 1 + }, +/turf/open/indestructible/hotelwood, +/area/deathmatch) +"Az" = ( +/obj/structure/flora/bush/reed, +/turf/open/water, +/area/deathmatch) +"Bn" = ( +/obj/structure/mineral_door/paperframe, +/obj/structure/barricade/wooden/crude, +/obj/effect/mapping_helpers/broken_floor, +/turf/open/floor/engine/cult, +/area/deathmatch) +"Cr" = ( +/obj/item/sharpener, +/obj/structure/window/spawner/directional/east, +/obj/structure/window/spawner/directional/north, +/obj/structure/window/spawner/directional/west, +/turf/open/water, +/area/deathmatch) +"DD" = ( +/obj/structure/closet/cabinet, +/obj/item/throwing_star{ + pixel_x = 2 + }, +/obj/item/clothing/suit/hooded/chaplainsuit/monkhabit, +/turf/open/floor/wood/large, +/area/deathmatch) +"Ea" = ( +/obj/structure/table/wood, +/obj/item/knife/butcher, +/turf/open/floor/stone, +/area/deathmatch) +"EJ" = ( +/obj/structure/flora/bush/flowers_br/style_random, +/obj/machinery/light, +/turf/open/misc/grass, +/area/deathmatch) +"Fl" = ( +/obj/structure/window/spawner/directional/east, +/obj/structure/window/spawner/directional/south, +/obj/structure/window/spawner/directional/west, +/turf/open/water, +/area/deathmatch) +"Fu" = ( +/obj/machinery/light{ + dir = 1 + }, +/turf/open/floor/wood/large, +/area/deathmatch) +"FV" = ( +/obj/structure/table/wood, +/obj/item/food/nigiri_sushi{ + pixel_y = 5; + pixel_x = -7 + }, +/obj/item/food/nigiri_sushi, +/turf/open/floor/wood/tile, +/area/deathmatch) +"Gf" = ( +/obj/structure/flora/bush/flowers_pp, +/turf/open/misc/grass, +/area/deathmatch) +"Gv" = ( +/obj/structure/chair/stool/bamboo{ + dir = 4 + }, +/obj/item/clothing/suit/armor/bone, +/obj/item/clothing/accessory/talisman, +/turf/open/misc/grass/jungle, +/area/deathmatch) +"GQ" = ( +/obj/structure/closet/crate/coffin, +/obj/item/toy/plush/lizard_plushie/green, +/obj/structure/window/spawner/directional/east, +/obj/structure/window/spawner/directional/west, +/obj/structure/window/spawner/directional/north, +/turf/open/floor/carpet, +/area/deathmatch) +"GX" = ( +/turf/open/misc/grass/jungle, +/area/deathmatch) +"JP" = ( +/obj/structure/table/bronze, +/obj/item/restraints/legcuffs/bola/tactical, +/obj/structure/window/spawner/directional/north, +/obj/structure/window/spawner/directional/west, +/turf/open/floor/stone, +/area/deathmatch) +"Kd" = ( +/turf/open/floor/bamboo, +/area/deathmatch) +"Kx" = ( +/obj/structure/fermenting_barrel/gunpowder, +/obj/machinery/light{ + dir = 8 + }, +/turf/open/floor/wood/large, +/area/deathmatch) +"KM" = ( +/obj/item/flashlight/lantern{ + light_on = 1 + }, +/obj/structure/table/bronze, +/obj/machinery/light, +/turf/open/floor/stone, +/area/deathmatch) +"KN" = ( +/obj/effect/turf_decal/siding/wood, +/turf/open/indestructible/hotelwood, +/area/deathmatch) +"LN" = ( +/obj/structure/closet/cabinet, +/mob/living/carbon/human/species/monkey/angry, +/obj/item/nullrod/tribal_knife, +/turf/open/floor/wood/large, +/area/deathmatch) +"MN" = ( +/obj/structure/flora/bush/flowers_yw/style_random, +/obj/machinery/light{ + dir = 1 + }, +/turf/open/misc/grass, +/area/deathmatch) +"Na" = ( +/turf/open/misc/dirt, +/area/deathmatch) +"Nn" = ( +/obj/structure/flora/bush/flowers_br/style_random, +/obj/item/cultivator/rake, +/turf/open/misc/grass, +/area/deathmatch) +"No" = ( +/turf/open/water, +/area/deathmatch) +"NJ" = ( +/obj/structure/table/bronze, +/obj/item/clothing/suit/armor/riot/knight, +/obj/item/clothing/head/helmet/knight, +/obj/structure/window/spawner/directional/east, +/obj/structure/window/spawner/directional/south, +/turf/open/floor/stone, +/area/deathmatch) +"Op" = ( +/obj/effect/landmark/deathmatch_player_spawn, +/turf/open/floor/wood/large, +/area/deathmatch) +"OA" = ( +/obj/item/clothing/shoes/cowboy, +/turf/open/misc/dirt, +/area/deathmatch) +"OV" = ( +/obj/structure/chair/stool/bamboo{ + dir = 4 + }, +/obj/effect/landmark/deathmatch_player_spawn, +/turf/open/floor/bamboo/tatami, +/area/deathmatch) +"Pk" = ( +/obj/structure/flora/bush/leavy/style_random, +/turf/open/misc/grass, +/area/deathmatch) +"Py" = ( +/obj/structure/flora/rock/pile/jungle/style_random{ + pixel_x = -12; + pixel_y = 15 + }, +/turf/open/water, +/area/deathmatch) +"PE" = ( +/obj/structure/water_source/puddle, +/turf/open/misc/dirt, +/area/deathmatch) +"PF" = ( +/obj/effect/decal/cleanable/blood/old, +/obj/structure/statue/bone/rib{ + dir = 8 + }, +/obj/machinery/light/floor{ + pixel_y = -8; + pixel_x = -4 + }, +/turf/open/floor/engine/cult, +/area/deathmatch) +"PN" = ( +/obj/effect/mob_spawn/corpse/human, +/obj/structure/bonfire/prelit, +/turf/open/indestructible/necropolis, +/area/deathmatch) +"PP" = ( +/turf/open/misc/grass, +/area/deathmatch) +"Qb" = ( +/turf/open/floor/stone, +/area/deathmatch) +"Qp" = ( +/obj/structure/flora/bush/flowers_yw/style_random, +/turf/open/misc/grass, +/area/deathmatch) +"QC" = ( +/turf/open/floor/wood/tile, +/area/deathmatch) +"QG" = ( +/obj/structure/table/wood, +/obj/item/reagent_containers/cup/glass/bottle/sake{ + pixel_x = -6; + pixel_y = 17 + }, +/obj/item/reagent_containers/cup/glass/drinkingglass/shotglass{ + pixel_y = 3; + pixel_x = 7 + }, +/obj/item/reagent_containers/cup/glass/drinkingglass/shotglass{ + pixel_y = -1; + pixel_x = -3 + }, +/turf/open/floor/wood/tile, +/area/deathmatch) +"RI" = ( +/obj/structure/punji_sticks, +/turf/open/misc/grass/jungle, +/area/deathmatch) +"RR" = ( +/obj/item/stack/sheet/bone, +/turf/open/misc/grass/jungle, +/area/deathmatch) +"Su" = ( +/obj/structure/flora/rock/pile/jungle/style_3, +/obj/machinery/light/floor, +/turf/open/water, +/area/deathmatch) +"SJ" = ( +/obj/item/kirbyplants{ + icon_state = "plant-10" + }, +/obj/machinery/light{ + dir = 4 + }, +/turf/open/floor/bamboo/tatami/purple, +/area/deathmatch) +"SO" = ( +/obj/item/grown/bananapeel, +/turf/open/floor/wood/large, +/area/deathmatch) +"TW" = ( +/obj/structure/table/bronze, +/obj/item/flashlight/lantern{ + light_on = 1 + }, +/obj/machinery/light{ + dir = 1 + }, +/turf/open/floor/stone, +/area/deathmatch) +"Uk" = ( +/obj/structure/closet/crate/coffin, +/obj/item/organ/internal/cyberimp/arm/shard/katana, +/obj/structure/window/spawner/directional/east, +/obj/structure/window/spawner/directional/west, +/obj/structure/window/spawner/directional/south, +/turf/open/floor/carpet, +/area/deathmatch) +"UO" = ( +/turf/open/floor/carpet, +/area/deathmatch) +"UU" = ( +/obj/item/kirbyplants{ + icon_state = "plant-10" + }, +/turf/open/floor/wood/tile, +/area/deathmatch) +"UY" = ( +/obj/structure/flora/bush/leavy, +/turf/open/misc/grass, +/area/deathmatch) +"Vi" = ( +/obj/item/food/grown/wheat{ + pixel_y = 10; + pixel_x = -6 + }, +/obj/item/food/grown/wheat{ + pixel_x = 4 + }, +/obj/item/food/grown/wheat{ + pixel_x = -10 + }, +/turf/open/misc/dirt, +/area/deathmatch) +"Vm" = ( +/obj/structure/table/wood, +/obj/item/food/vegetariansushiroll{ + pixel_y = 2; + pixel_x = 4 + }, +/obj/item/food/vegetariansushiroll, +/turf/open/floor/stone, +/area/deathmatch) +"Vt" = ( +/turf/closed/indestructible/wood, +/area/deathmatch) +"VA" = ( +/obj/structure/table/wood/fancy, +/obj/item/clothing/mask/gas/tiki_mask, +/obj/item/flashlight/flare/torch, +/turf/open/floor/carpet, +/area/deathmatch) +"We" = ( +/obj/structure/statue/bone/rib{ + dir = 8 + }, +/turf/open/floor/engine/cult, +/area/deathmatch) +"Ya" = ( +/obj/structure/table/wood, +/obj/structure/chem_separator, +/turf/open/floor/bamboo, +/area/deathmatch) +"Yo" = ( +/obj/item/kirbyplants{ + icon_state = "plant-10" + }, +/turf/open/floor/stone, +/area/deathmatch) +"Zm" = ( +/obj/item/toy/plush/carpplushie/dehy_carp, +/obj/structure/window/spawner/directional/east, +/obj/structure/window/spawner/directional/west, +/turf/open/water, +/area/deathmatch) +"Zu" = ( +/obj/structure/statue/bone/rib, +/turf/open/floor/engine/cult, +/area/deathmatch) + +(1,1,1) = {" +Vt +Vt +Vt +Vt +Vt +Vt +Vt +Vt +Vt +Vt +Vt +Vt +Vt +Vt +Vt +Vt +Vt +Vt +Vt +Vt +Vt +Vt +Vt +Vt +Vt +Vt +"} +(2,1,1) = {" +Vt +UU +Cr +Zm +Fl +UU +Vt +oX +Kx +Vt +dy +ce +Gv +yl +fs +dy +Vt +Fu +pG +Vt +pG +pG +nU +Na +OA +Vt +"} +(3,1,1) = {" +Vt +QC +QC +QC +QC +QC +vC +pG +pG +bd +RI +Kd +Kd +Kd +oN +yE +bd +pG +pG +vC +pG +pG +nU +Na +uP +Vt +"} +(4,1,1) = {" +Vt +zG +Kd +Kd +Kd +so +Vt +pG +pG +bd +GX +Kd +PN +rU +Kd +GX +bd +pG +pG +Vt +Fu +pG +Vt +Vt +Vt +Vt +"} +(5,1,1) = {" +Vt +Kd +Ea +jc +Vm +Kd +zu +pG +pG +bd +RR +fk +Kd +Kd +Kd +RI +bd +pG +pG +Vt +pG +pG +pG +pG +dr +Vt +"} +(6,1,1) = {" +Vt +Kd +Kd +xk +Kd +Kd +Vt +pG +pG +Vt +dy +GX +GX +GX +GX +dy +Vt +Fu +pG +zu +pG +Op +pG +pV +sa +Vt +"} +(7,1,1) = {" +Vt +QG +FV +QG +lD +mC +Vt +Kd +Kd +Vt +Vt +zu +Vt +Vt +zu +Vt +Vt +Kd +Kd +Vt +vC +Vt +Vt +zu +Vt +Vt +"} +(8,1,1) = {" +Vt +ui +tT +ui +OV +ui +ha +ui +ui +ha +ui +ui +ui +ui +ui +ui +ha +ui +ui +ha +ui +ui +ui +ui +ui +Vt +"} +(9,1,1) = {" +Vt +MN +PP +wF +Gf +PP +tM +PP +PP +PP +PP +Gf +PP +cr +PP +Qp +PP +PP +PP +mb +PP +Nn +Vi +dp +PE +Vt +"} +(10,1,1) = {" +Vt +No +No +PP +tM +fn +fD +zV +KN +mb +Az +No +No +No +No +cr +el +zV +KN +lO +kY +oY +No +No +xm +Vt +"} +(11,1,1) = {" +Vt +No +No +No +No +yz +No +zV +KN +No +No +No +No +of +Su +No +No +ma +KN +No +No +No +No +No +No +Vt +"} +(12,1,1) = {" +Vt +fD +tM +Az +dI +No +No +zV +KN +No +No +kY +No +No +yA +No +No +dm +KN +No +No +No +cr +PP +PP +Vt +"} +(13,1,1) = {" +Vt +el +UY +PP +No +Py +No +zV +KN +PP +Gf +Gf +mt +No +No +No +mb +zV +KN +PP +PP +PP +PP +mf +EJ +Vt +"} +(14,1,1) = {" +Vt +qo +PP +Qp +iL +cr +mb +PP +PP +PP +PP +PP +PP +uc +Pk +PP +kY +PP +PP +PP +PP +PP +PP +kY +PP +Vt +"} +(15,1,1) = {" +Vt +ui +ui +ui +ui +ui +SJ +ui +ui +SJ +ui +ui +nE +ui +ui +ui +SJ +ui +ui +SJ +ui +ui +ui +ui +ui +Vt +"} +(16,1,1) = {" +Vt +Vt +zu +vC +vC +vC +Vt +Kd +Kd +Vt +Vt +zu +Vt +Vt +zu +Vt +Vt +Kd +Kd +Vt +Vt +Vt +Bn +Vt +Vt +Vt +"} +(17,1,1) = {" +Vt +zE +pG +pG +pG +pG +Vt +pG +pG +Vt +TW +Qb +yL +NJ +Yo +KM +Vt +pG +Op +Vt +xz +mT +gH +ut +xz +Vt +"} +(18,1,1) = {" +Vt +xJ +pG +Kd +Kd +pG +Vt +pG +pG +Kd +iq +iq +iq +iq +iq +iq +Kd +pG +pG +Vt +gH +PF +gH +We +gH +Vt +"} +(19,1,1) = {" +Vt +Ya +pG +iI +qu +pG +vC +pG +Op +Kd +UO +VA +GQ +Uk +rl +UO +Kd +pG +pG +yI +gH +gH +qI +gH +gH +Vt +"} +(20,1,1) = {" +Vt +ch +pG +Kd +Kd +pG +Vt +pG +pG +Kd +iq +iq +iq +iq +iq +iq +Kd +SO +pG +Vt +gH +Zu +gH +lA +oo +Vt +"} +(21,1,1) = {" +Vt +oy +pG +lr +pG +pG +zu +lr +pG +Vt +TW +Qb +JP +oR +Qb +rP +Vt +LN +DD +Vt +xz +zb +gH +mT +xz +Vt +"} +(22,1,1) = {" +Vt +Vt +Vt +Vt +Vt +Vt +Vt +Vt +Vt +Vt +Vt +Vt +Vt +Vt +Vt +Vt +Vt +Vt +Vt +Vt +Vt +Vt +Vt +Vt +Vt +Vt +"} diff --git a/_maps/map_files/Deathmatch/instagib.dmm b/_maps/map_files/Deathmatch/instagib.dmm new file mode 100644 index 00000000000..915aa9338da --- /dev/null +++ b/_maps/map_files/Deathmatch/instagib.dmm @@ -0,0 +1,808 @@ +//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE +"a" = ( +/turf/closed/wall/mineral/titanium, +/area/deathmatch/fullbright) +"c" = ( +/turf/open/floor/light/colour_cycle/dancefloor_b, +/area/deathmatch/fullbright) +"e" = ( +/obj/machinery/light{ + dir = 8 + }, +/turf/open/floor/circuit/green, +/area/deathmatch/fullbright) +"q" = ( +/obj/machinery/door/airlock/titanium/glass, +/turf/open/floor/mineral/abductor, +/area/deathmatch/fullbright) +"u" = ( +/turf/template_noop, +/area/template_noop) +"v" = ( +/obj/machinery/light{ + dir = 4 + }, +/turf/open/floor/circuit/green, +/area/deathmatch/fullbright) +"y" = ( +/obj/machinery/light{ + dir = 1 + }, +/turf/open/floor/circuit/green, +/area/deathmatch/fullbright) +"A" = ( +/obj/machinery/light{ + dir = 4 + }, +/turf/open/floor/vault/alien, +/area/deathmatch/fullbright) +"B" = ( +/obj/machinery/light{ + dir = 8 + }, +/turf/open/floor/vault/alien, +/area/deathmatch/fullbright) +"C" = ( +/turf/open/floor/circuit/green, +/area/deathmatch/fullbright) +"D" = ( +/turf/closed/indestructible/alien, +/area/deathmatch/fullbright) +"E" = ( +/obj/machinery/light{ + dir = 1 + }, +/turf/open/floor/vault/alien, +/area/deathmatch/fullbright) +"F" = ( +/obj/effect/landmark/deathmatch_player_spawn, +/obj/machinery/light/floor, +/turf/open/floor/vault/alien, +/area/deathmatch/fullbright) +"H" = ( +/turf/open/floor/vault/alien, +/area/deathmatch/fullbright) +"I" = ( +/obj/machinery/light, +/turf/open/floor/vault/alien, +/area/deathmatch/fullbright) +"L" = ( +/obj/machinery/light, +/turf/open/floor/circuit/green, +/area/deathmatch/fullbright) +"N" = ( +/obj/machinery/door/airlock/titanium/glass, +/turf/open/floor/plating/abductor2, +/area/deathmatch/fullbright) +"Y" = ( +/turf/open/floor/light/colour_cycle/dancefloor_a, +/area/deathmatch/fullbright) + +(1,1,1) = {" +u +u +D +D +D +D +D +D +D +D +D +D +D +D +D +D +D +D +D +D +D +D +D +D +u +u +"} +(2,1,1) = {" +u +D +D +H +H +H +H +H +H +H +N +Y +Y +Y +Y +N +H +H +H +H +H +H +H +D +D +u +"} +(3,1,1) = {" +D +D +H +H +H +H +H +H +H +H +N +Y +Y +Y +Y +N +H +H +H +H +H +H +H +H +D +D +"} +(4,1,1) = {" +D +H +H +F +H +a +a +H +H +I +a +Y +Y +Y +Y +a +E +H +H +a +a +H +F +H +H +D +"} +(5,1,1) = {" +D +H +H +H +H +H +B +H +H +H +H +a +Y +Y +a +H +H +H +H +B +H +H +H +H +H +D +"} +(6,1,1) = {" +D +H +H +a +H +H +H +H +H +H +H +H +a +a +H +H +H +H +H +H +H +H +a +H +H +D +"} +(7,1,1) = {" +D +H +H +a +E +H +H +H +a +H +H +H +H +H +H +H +H +a +H +H +H +I +a +H +H +D +"} +(8,1,1) = {" +D +H +H +H +H +H +H +a +E +H +H +v +C +C +v +H +H +I +a +H +H +H +H +H +H +D +"} +(9,1,1) = {" +D +H +H +H +H +H +a +B +F +C +C +a +q +q +a +C +H +F +B +a +H +H +H +H +H +D +"} +(10,1,1) = {" +D +H +H +A +H +H +H +H +H +C +a +c +c +c +c +a +C +C +H +H +H +H +A +H +H +D +"} +(11,1,1) = {" +D +N +N +a +H +H +H +H +C +a +c +c +c +c +c +c +a +C +H +H +H +H +a +N +N +D +"} +(12,1,1) = {" +D +Y +Y +Y +a +H +H +L +a +c +c +c +c +c +c +c +c +a +y +H +H +a +Y +Y +Y +D +"} +(13,1,1) = {" +D +Y +Y +Y +Y +a +H +C +q +c +c +c +c +c +c +c +c +q +C +H +a +Y +Y +Y +Y +D +"} +(14,1,1) = {" +D +Y +Y +Y +Y +a +H +C +q +c +c +c +c +c +c +c +c +q +C +H +a +Y +Y +Y +Y +D +"} +(15,1,1) = {" +D +Y +Y +Y +a +H +H +L +a +c +c +c +c +c +c +c +c +a +y +H +H +a +Y +Y +Y +D +"} +(16,1,1) = {" +D +N +N +a +H +H +H +H +C +a +c +c +c +c +c +c +a +C +H +H +H +H +a +N +N +D +"} +(17,1,1) = {" +D +H +H +B +H +H +H +H +H +C +a +c +c +c +c +a +C +H +H +H +H +H +B +H +H +D +"} +(18,1,1) = {" +D +H +H +H +H +H +a +A +F +C +C +a +q +q +a +C +C +F +A +a +H +H +H +H +H +D +"} +(19,1,1) = {" +D +H +H +H +H +H +H +a +E +H +H +e +C +C +e +H +H +I +a +H +H +H +H +H +H +D +"} +(20,1,1) = {" +D +H +H +a +E +H +H +H +a +H +H +H +H +H +H +H +H +a +H +H +H +I +a +H +H +D +"} +(21,1,1) = {" +D +H +H +a +H +H +H +H +H +H +H +H +a +a +H +H +H +H +H +H +H +H +a +H +H +D +"} +(22,1,1) = {" +D +H +H +H +H +H +A +H +H +H +H +a +Y +Y +a +H +H +H +H +A +H +H +H +H +H +D +"} +(23,1,1) = {" +D +H +H +F +H +a +a +H +H +I +a +Y +Y +Y +Y +a +E +H +H +a +a +H +F +H +H +D +"} +(24,1,1) = {" +D +D +H +H +H +H +H +H +H +H +N +Y +Y +Y +Y +N +H +H +H +H +H +H +H +H +D +D +"} +(25,1,1) = {" +u +D +D +H +H +H +H +H +H +H +N +Y +Y +Y +Y +N +H +H +H +H +H +H +H +D +D +u +"} +(26,1,1) = {" +u +u +D +D +D +D +D +D +D +D +D +D +D +D +D +D +D +D +D +D +D +D +D +D +u +u +"} diff --git a/_maps/map_files/Deathmatch/meatower.dmm b/_maps/map_files/Deathmatch/meatower.dmm new file mode 100644 index 00000000000..47613f89885 --- /dev/null +++ b/_maps/map_files/Deathmatch/meatower.dmm @@ -0,0 +1,1105 @@ +//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE +"aD" = ( +/obj/machinery/conveyor/auto, +/obj/item/food/meat/slab/human/mutant/skeleton, +/obj/effect/turf_decal/siding/dark{ + dir = 4 + }, +/turf/open/indestructible/kitchen, +/area/deathmatch) +"db" = ( +/obj/machinery/griddle, +/turf/open/indestructible/kitchen, +/area/deathmatch) +"et" = ( +/obj/machinery/conveyor/auto{ + dir = 4 + }, +/obj/item/food/meat/slab/corgi, +/obj/effect/turf_decal/siding/dark{ + dir = 1 + }, +/turf/open/indestructible/kitchen, +/area/deathmatch) +"eB" = ( +/obj/machinery/light{ + dir = 4 + }, +/mob/living/basic/goat/pete, +/turf/open/indestructible/necropolis/air, +/area/deathmatch) +"eH" = ( +/obj/structure/reagent_dispensers/cooking_oil, +/obj/machinery/light{ + dir = 8 + }, +/turf/open/indestructible/necropolis/air, +/area/deathmatch) +"fq" = ( +/obj/structure/table, +/obj/machinery/microwave, +/turf/open/indestructible/kitchen, +/area/deathmatch) +"fU" = ( +/obj/machinery/conveyor/auto{ + dir = 4 + }, +/obj/effect/turf_decal/siding/dark{ + dir = 1 + }, +/turf/open/indestructible/kitchen, +/area/deathmatch) +"gh" = ( +/obj/machinery/deepfryer, +/turf/open/indestructible/kitchen, +/area/deathmatch) +"gk" = ( +/obj/machinery/conveyor/auto{ + dir = 1 + }, +/obj/item/food/pizza/meat, +/obj/effect/landmark/deathmatch_player_spawn, +/obj/effect/turf_decal/siding/dark{ + dir = 8 + }, +/turf/open/indestructible/kitchen, +/area/deathmatch) +"gD" = ( +/obj/structure/table, +/obj/item/reagent_containers/condiment/saltshaker{ + pixel_x = -3 + }, +/obj/item/reagent_containers/condiment/peppermill{ + pixel_x = 3 + }, +/turf/open/indestructible/kitchen, +/area/deathmatch) +"gS" = ( +/turf/open/indestructible/necropolis/air, +/area/deathmatch) +"hz" = ( +/obj/machinery/conveyor/auto{ + dir = 1 + }, +/obj/item/food/meat/slab/human/mutant/skeleton, +/obj/effect/turf_decal/siding/dark{ + dir = 8 + }, +/turf/open/indestructible/kitchen, +/area/deathmatch) +"ip" = ( +/obj/structure/table, +/obj/item/food/pizza/donkpocket, +/turf/open/indestructible/kitchen, +/area/deathmatch) +"iZ" = ( +/obj/item/food/pizza/pineapple, +/turf/open/lava/smooth, +/area/deathmatch) +"jq" = ( +/obj/machinery/conveyor/auto{ + dir = 4 + }, +/obj/item/knife/butcher, +/obj/effect/turf_decal/siding/dark{ + dir = 1 + }, +/turf/open/indestructible/kitchen, +/area/deathmatch) +"jT" = ( +/obj/machinery/gibber, +/obj/machinery/light{ + dir = 8 + }, +/turf/open/indestructible/necropolis/air, +/area/deathmatch) +"jZ" = ( +/obj/structure/sign/poster/contraband/moffuchis_pizza, +/turf/closed/indestructible/necropolis, +/area/deathmatch) +"kn" = ( +/obj/item/food/pizzaslice/sassysage, +/turf/open/indestructible/kitchen, +/area/deathmatch) +"kL" = ( +/obj/machinery/light, +/turf/open/indestructible/kitchen, +/area/deathmatch) +"lu" = ( +/obj/machinery/conveyor/auto{ + dir = 8 + }, +/obj/effect/landmark/deathmatch_player_spawn, +/obj/effect/turf_decal/siding/dark, +/turf/open/indestructible/kitchen, +/area/deathmatch) +"me" = ( +/obj/machinery/conveyor/auto, +/obj/item/pizzabox/bomb, +/obj/effect/turf_decal/siding/dark{ + dir = 4 + }, +/turf/open/indestructible/kitchen, +/area/deathmatch) +"mu" = ( +/obj/item/stack/sheet/pizza/five, +/turf/open/indestructible/necropolis/air, +/area/deathmatch) +"nl" = ( +/obj/machinery/conveyor/auto{ + dir = 1 + }, +/obj/item/pizzabox/mushroom, +/obj/effect/turf_decal/siding/dark{ + dir = 8 + }, +/turf/open/indestructible/kitchen, +/area/deathmatch) +"nr" = ( +/obj/structure/table, +/obj/item/pizzabox/bomb/armed, +/obj/item/knife/butcher, +/turf/open/indestructible/kitchen, +/area/deathmatch) +"nt" = ( +/obj/machinery/conveyor/auto{ + dir = 8 + }, +/obj/item/pizzabox/bomb/armed, +/obj/effect/turf_decal/siding/dark, +/turf/open/indestructible/kitchen, +/area/deathmatch) +"oB" = ( +/obj/machinery/conveyor/auto, +/obj/item/food/meat/slab/human, +/obj/effect/turf_decal/siding/dark{ + dir = 4 + }, +/turf/open/indestructible/kitchen, +/area/deathmatch) +"oH" = ( +/obj/machinery/conveyor/auto{ + dir = 8 + }, +/obj/effect/turf_decal/siding/dark, +/turf/open/indestructible/kitchen, +/area/deathmatch) +"pg" = ( +/obj/machinery/vending/dinnerware, +/obj/machinery/light, +/turf/open/indestructible/kitchen, +/area/deathmatch) +"pE" = ( +/obj/structure/table, +/obj/item/knife/butcher, +/turf/open/indestructible/kitchen, +/area/deathmatch) +"pL" = ( +/obj/machinery/conveyor/auto{ + dir = 4 + }, +/obj/item/pizzabox/margherita/robo, +/obj/effect/turf_decal/siding/dark{ + dir = 1 + }, +/turf/open/indestructible/kitchen, +/area/deathmatch) +"qa" = ( +/obj/structure/table, +/obj/item/stack/sheet/animalhide/corgi, +/turf/open/indestructible/kitchen, +/area/deathmatch) +"qg" = ( +/turf/closed/indestructible/reinforced, +/area/deathmatch) +"qL" = ( +/obj/machinery/conveyor/auto{ + dir = 6 + }, +/obj/effect/turf_decal/siding/dark{ + dir = 5 + }, +/turf/open/indestructible/kitchen, +/area/deathmatch) +"rb" = ( +/obj/structure/table, +/obj/machinery/microwave, +/obj/machinery/light{ + dir = 1 + }, +/turf/open/indestructible/kitchen, +/area/deathmatch) +"sf" = ( +/obj/machinery/conveyor/auto{ + dir = 1 + }, +/obj/effect/turf_decal/siding/dark{ + dir = 8 + }, +/turf/open/indestructible/kitchen, +/area/deathmatch) +"sQ" = ( +/obj/structure/closet/crate/coffin, +/obj/item/gun/magic/hook, +/obj/item/book/manual/wiki/cooking_to_serve_man, +/turf/open/indestructible/necropolis/air, +/area/deathmatch) +"tB" = ( +/turf/open/indestructible/kitchen, +/area/deathmatch) +"uJ" = ( +/obj/item/food/meat/slab/corgi, +/turf/open/indestructible/kitchen, +/area/deathmatch) +"uM" = ( +/obj/item/food/meat/slab/corgi, +/turf/open/indestructible/necropolis/air, +/area/deathmatch) +"uV" = ( +/obj/machinery/conveyor/auto{ + dir = 4 + }, +/obj/effect/landmark/deathmatch_player_spawn, +/obj/effect/turf_decal/siding/dark{ + dir = 1 + }, +/turf/open/indestructible/kitchen, +/area/deathmatch) +"uW" = ( +/obj/structure/reagent_dispensers/cooking_oil, +/turf/open/indestructible/kitchen, +/area/deathmatch) +"wF" = ( +/obj/structure/kitchenspike, +/obj/item/food/pizza/arnold, +/obj/machinery/light{ + dir = 4 + }, +/turf/open/indestructible/necropolis/air, +/area/deathmatch) +"zB" = ( +/obj/item/food/pizzaslice/meat, +/turf/open/indestructible/necropolis/air, +/area/deathmatch) +"zH" = ( +/obj/structure/table, +/obj/item/pizzabox/margherita, +/turf/open/indestructible/kitchen, +/area/deathmatch) +"zR" = ( +/obj/structure/table, +/obj/item/pizzabox/bomb/armed, +/turf/open/indestructible/kitchen, +/area/deathmatch) +"Ce" = ( +/obj/machinery/conveyor/auto{ + dir = 9 + }, +/obj/item/food/meat/slab/human, +/obj/effect/turf_decal/siding/dark{ + dir = 10 + }, +/turf/open/indestructible/kitchen, +/area/deathmatch) +"Ch" = ( +/obj/structure/table, +/obj/item/pizzabox, +/turf/open/indestructible/kitchen, +/area/deathmatch) +"DJ" = ( +/obj/machinery/conveyor/auto{ + dir = 8 + }, +/obj/item/food/meat/slab/human/mutant/slime, +/obj/effect/turf_decal/siding/dark, +/turf/open/indestructible/kitchen, +/area/deathmatch) +"DU" = ( +/obj/machinery/conveyor/auto, +/obj/item/food/meat/slab/corgi, +/obj/effect/turf_decal/siding/dark{ + dir = 4 + }, +/turf/open/indestructible/kitchen, +/area/deathmatch) +"EC" = ( +/obj/machinery/conveyor/auto, +/obj/item/food/pizzaslice/arnold, +/obj/effect/turf_decal/siding/dark{ + dir = 4 + }, +/turf/open/indestructible/kitchen, +/area/deathmatch) +"EU" = ( +/obj/item/food/pizzaslice/moldy/bacteria, +/turf/open/indestructible/kitchen, +/area/deathmatch) +"Fs" = ( +/obj/structure/barricade/wooden/crude, +/obj/structure/barricade/wooden, +/turf/open/indestructible/necropolis/air, +/area/deathmatch) +"FA" = ( +/turf/open/lava/smooth, +/area/deathmatch) +"Ge" = ( +/obj/machinery/conveyor/auto{ + dir = 10 + }, +/obj/item/food/meat/slab/human, +/obj/effect/turf_decal/siding/dark{ + dir = 6 + }, +/turf/open/indestructible/kitchen, +/area/deathmatch) +"GS" = ( +/obj/item/food/pizzaslice/ants, +/turf/open/indestructible/kitchen, +/area/deathmatch) +"Hg" = ( +/obj/machinery/oven, +/turf/open/indestructible/kitchen, +/area/deathmatch) +"Hj" = ( +/obj/machinery/conveyor/auto, +/obj/effect/turf_decal/siding/dark{ + dir = 4 + }, +/turf/open/indestructible/kitchen, +/area/deathmatch) +"Hx" = ( +/obj/structure/table, +/obj/item/food/pizzaslice/mothic_garlic, +/turf/open/indestructible/kitchen, +/area/deathmatch) +"HR" = ( +/obj/machinery/conveyor/auto{ + dir = 8 + }, +/obj/item/food/meat/slab/gorilla, +/obj/effect/turf_decal/siding/dark, +/turf/open/indestructible/kitchen, +/area/deathmatch) +"Io" = ( +/obj/machinery/conveyor/auto{ + dir = 4 + }, +/obj/item/food/meat/slab/gorilla, +/obj/effect/turf_decal/siding/dark{ + dir = 1 + }, +/turf/open/indestructible/kitchen, +/area/deathmatch) +"Jo" = ( +/obj/machinery/light{ + dir = 8 + }, +/turf/open/indestructible/kitchen, +/area/deathmatch) +"KO" = ( +/obj/machinery/vending/dinnerware, +/turf/open/indestructible/kitchen, +/area/deathmatch) +"KP" = ( +/obj/structure/table, +/obj/structure/desk_bell{ + pixel_x = 7 + }, +/turf/open/indestructible/kitchen, +/area/deathmatch) +"KW" = ( +/obj/structure/sign/poster/contraband/pizza_imperator, +/turf/closed/indestructible/necropolis, +/area/deathmatch) +"KZ" = ( +/obj/machinery/griddle, +/obj/machinery/light{ + dir = 1 + }, +/turf/open/indestructible/kitchen, +/area/deathmatch) +"La" = ( +/obj/machinery/conveyor/auto{ + dir = 4 + }, +/obj/item/food/meat/slab/gondola, +/obj/effect/turf_decal/siding/dark{ + dir = 1 + }, +/turf/open/indestructible/kitchen, +/area/deathmatch) +"Lg" = ( +/obj/structure/barricade/wooden, +/obj/structure/barricade/wooden/crude, +/turf/open/indestructible/necropolis/air, +/area/deathmatch) +"Lo" = ( +/obj/machinery/conveyor/auto, +/obj/item/pizzabox/vegetable, +/obj/effect/landmark/deathmatch_player_spawn, +/obj/effect/turf_decal/siding/dark{ + dir = 4 + }, +/turf/open/indestructible/kitchen, +/area/deathmatch) +"Mn" = ( +/obj/machinery/conveyor/auto{ + dir = 5 + }, +/obj/effect/turf_decal/siding/dark{ + dir = 9 + }, +/turf/open/indestructible/kitchen, +/area/deathmatch) +"Mr" = ( +/obj/machinery/deepfryer, +/obj/machinery/light{ + dir = 4 + }, +/turf/open/indestructible/kitchen, +/area/deathmatch) +"NF" = ( +/obj/machinery/conveyor/auto{ + dir = 1 + }, +/obj/item/food/meat/slab/human/mutant/slime, +/obj/effect/turf_decal/siding/dark{ + dir = 8 + }, +/turf/open/indestructible/kitchen, +/area/deathmatch) +"NG" = ( +/obj/machinery/conveyor/auto{ + dir = 4 + }, +/obj/item/pizzabox/bomb/armed, +/obj/effect/turf_decal/siding/dark{ + dir = 1 + }, +/turf/open/indestructible/kitchen, +/area/deathmatch) +"Oq" = ( +/turf/closed/indestructible/necropolis, +/area/deathmatch) +"Tn" = ( +/obj/item/pizzabox/infinite, +/turf/open/indestructible/necropolis/air, +/area/deathmatch) +"Ue" = ( +/obj/item/food/pizzaslice/sassysage, +/turf/open/indestructible/necropolis/air, +/area/deathmatch) +"Up" = ( +/obj/structure/table, +/obj/machinery/reagentgrinder{ + pixel_x = 6; + pixel_y = 6 + }, +/turf/open/indestructible/kitchen, +/area/deathmatch) +"XA" = ( +/obj/structure/table, +/obj/machinery/reagentgrinder{ + pixel_x = 6; + pixel_y = 6 + }, +/obj/item/reagent_containers/condiment/saltshaker{ + pixel_x = -3 + }, +/obj/item/reagent_containers/condiment/peppermill{ + pixel_x = -9 + }, +/turf/open/indestructible/kitchen, +/area/deathmatch) +"XQ" = ( +/obj/machinery/conveyor/auto{ + dir = 4 + }, +/obj/structure/closet/secure_closet/freezer/meat, +/obj/item/toy/plush/lizard_plushie/green, +/obj/effect/turf_decal/siding/dark{ + dir = 1 + }, +/turf/open/indestructible/kitchen, +/area/deathmatch) +"XU" = ( +/obj/effect/landmark/deathmatch_player_spawn, +/obj/machinery/light/floor, +/turf/open/indestructible/kitchen, +/area/deathmatch) + +(1,1,1) = {" +qg +qg +qg +qg +qg +qg +qg +qg +qg +qg +qg +qg +qg +qg +qg +qg +qg +qg +qg +qg +qg +qg +qg +"} +(2,1,1) = {" +qg +FA +FA +FA +FA +FA +FA +FA +FA +FA +FA +FA +FA +FA +FA +FA +FA +FA +FA +FA +FA +iZ +qg +"} +(3,1,1) = {" +qg +FA +Mn +sf +sf +NF +sf +sf +sf +sf +sf +gk +sf +sf +sf +hz +sf +nl +sf +sf +Ce +FA +qg +"} +(4,1,1) = {" +qg +FA +pL +tB +zR +gD +db +tB +uJ +tB +tB +tB +tB +GS +tB +zR +Up +db +tB +uW +oH +FA +qg +"} +(5,1,1) = {" +qg +FA +fU +tB +tB +XU +tB +tB +tB +tB +tB +tB +tB +tB +tB +tB +tB +tB +XU +qa +nt +FA +qg +"} +(6,1,1) = {" +qg +FA +Io +tB +tB +tB +tB +tB +Mr +Up +KP +tB +tB +tB +Mr +tB +tB +tB +tB +zR +oH +FA +qg +"} +(7,1,1) = {" +qg +FA +XQ +gh +tB +tB +tB +tB +Oq +Oq +Oq +gS +Oq +Oq +Oq +Ch +tB +tB +tB +tB +oH +FA +qg +"} +(8,1,1) = {" +qg +FA +fU +fq +tB +GS +pg +Oq +Oq +gS +gS +zB +gS +mu +Oq +Oq +db +tB +EU +tB +oH +FA +qg +"} +(9,1,1) = {" +qg +FA +fU +nr +tB +tB +Oq +Oq +eH +gS +Oq +gS +Oq +gS +jT +Oq +Oq +rb +tB +XA +HR +FA +qg +"} +(10,1,1) = {" +qg +FA +La +db +tB +tB +Oq +mu +gS +gS +gS +gS +gS +gS +gS +gS +Oq +gh +tB +pE +oH +FA +qg +"} +(11,1,1) = {" +qg +FA +fU +tB +tB +tB +Oq +gS +Oq +gS +KW +Lg +Oq +gS +Oq +uM +Oq +tB +tB +tB +oH +FA +qg +"} +(12,1,1) = {" +qg +FA +uV +kn +tB +tB +gS +gS +gS +Tn +Fs +sQ +Fs +gS +gS +gS +gS +tB +tB +tB +lu +FA +qg +"} +(13,1,1) = {" +qg +FA +fU +tB +tB +tB +Oq +gS +Oq +gS +Oq +Lg +jZ +gS +Oq +gS +Oq +Hx +tB +tB +DJ +FA +qg +"} +(14,1,1) = {" +qg +FA +jq +tB +tB +tB +Oq +gS +gS +Ue +gS +gS +gS +gS +gS +gS +Oq +zH +tB +tB +oH +FA +qg +"} +(15,1,1) = {" +qg +FA +fU +tB +tB +kL +Oq +Oq +eB +gS +Oq +gS +Oq +gS +wF +Oq +Oq +KZ +tB +tB +oH +FA +qg +"} +(16,1,1) = {" +qg +FA +NG +tB +tB +tB +gh +Oq +Oq +mu +gS +gS +gS +gS +Oq +Oq +gh +tB +tB +tB +oH +FA +qg +"} +(17,1,1) = {" +qg +FA +fU +tB +fq +tB +tB +Hg +Oq +Oq +Oq +gS +Oq +Oq +Oq +tB +tB +tB +tB +KO +oH +FA +qg +"} +(18,1,1) = {" +qg +FA +et +tB +ip +tB +tB +tB +Jo +tB +tB +tB +tB +GS +Jo +tB +Hg +tB +tB +KP +oH +FA +qg +"} +(19,1,1) = {" +qg +FA +fU +tB +tB +XU +tB +tB +tB +tB +tB +tB +tB +tB +tB +tB +db +tB +XU +pE +oH +FA +qg +"} +(20,1,1) = {" +qg +FA +fU +tB +tB +tB +tB +tB +tB +tB +db +zR +Up +tB +tB +tB +KP +tB +tB +tB +oH +FA +qg +"} +(21,1,1) = {" +qg +FA +qL +Hj +Hj +aD +Hj +EC +Hj +DU +Hj +Lo +Hj +Hj +oB +Hj +Hj +me +Hj +Hj +Ge +FA +qg +"} +(22,1,1) = {" +qg +FA +FA +FA +FA +FA +FA +FA +FA +FA +FA +FA +FA +FA +FA +FA +FA +FA +FA +FA +FA +FA +qg +"} +(23,1,1) = {" +qg +qg +qg +qg +qg +qg +qg +qg +qg +qg +qg +qg +qg +qg +qg +qg +qg +qg +qg +qg +qg +qg +qg +"} diff --git a/_maps/map_files/Deathmatch/mech_madness.dmm b/_maps/map_files/Deathmatch/mech_madness.dmm new file mode 100644 index 00000000000..d36ccfb16cc --- /dev/null +++ b/_maps/map_files/Deathmatch/mech_madness.dmm @@ -0,0 +1,1649 @@ +//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE +"ac" = ( +/turf/closed/indestructible/alien, +/area/deathmatch) +"ad" = ( +/obj/structure/table/reinforced, +/obj/item/mecha_ammo/lmg, +/obj/item/mecha_ammo/lmg{ + pixel_y = 12 + }, +/obj/item/mecha_ammo/scattershot{ + pixel_y = 18 + }, +/obj/item/mecha_ammo/scattershot{ + pixel_y = 24 + }, +/turf/open/floor/carpet/neon/simple/yellow, +/area/deathmatch) +"ae" = ( +/obj/machinery/door/poddoor/shutters{ + id = "dm4" + }, +/turf/open/floor/engine, +/area/deathmatch) +"af" = ( +/obj/machinery/button/door{ + id = "dm3"; + pixel_y = 24 + }, +/turf/open/floor/carpet/neon/simple/teal, +/area/deathmatch) +"aj" = ( +/turf/open/floor/engine, +/area/deathmatch) +"am" = ( +/turf/open/floor/carpet/neon/simple/green, +/area/deathmatch) +"an" = ( +/obj/structure/table/reinforced, +/obj/item/clothing/head/utility/welding, +/obj/machinery/light/directional/west, +/obj/item/inducer, +/obj/item/weldingtool/largetank, +/turf/open/floor/carpet/neon/simple/yellow, +/area/deathmatch) +"ao" = ( +/obj/structure/table/reinforced, +/obj/item/mecha_parts/mecha_equipment/weapon/ballistic/lmg{ + pixel_y = -8 + }, +/obj/item/mecha_parts/mecha_equipment/weapon/ballistic/scattershot{ + pixel_y = 8 + }, +/turf/open/floor/carpet/neon/simple/yellow, +/area/deathmatch) +"as" = ( +/obj/effect/landmark/deathmatch_player_spawn, +/obj/effect/turf_decal/box, +/obj/machinery/button/door{ + id = "dm1"; + pixel_x = 24 + }, +/turf/open/floor/carpet/neon/simple/yellow, +/area/deathmatch) +"at" = ( +/obj/effect/landmark/deathmatch_player_spawn, +/obj/effect/turf_decal/box, +/obj/machinery/button/door{ + id = "dm4"; + pixel_y = 0; + pixel_x = -24 + }, +/turf/open/floor/carpet/neon/simple/green, +/area/deathmatch) +"aw" = ( +/turf/open/floor/carpet/neon/simple/purple, +/area/deathmatch) +"ax" = ( +/turf/closed/wall/mineral/plastitanium, +/area/deathmatch) +"az" = ( +/obj/structure/tank_holder/extinguisher, +/turf/open/floor/carpet/neon/simple/red, +/area/deathmatch) +"aA" = ( +/obj/vehicle/sealed/mecha/gygax, +/turf/open/floor/carpet/neon/simple/yellow, +/area/deathmatch) +"aB" = ( +/obj/effect/turf_decal/trimline/yellow/filled/warning{ + dir = 4; + icon_state = "trimline_warn_fill" + }, +/turf/open/floor/engine, +/area/deathmatch) +"aC" = ( +/obj/effect/spawner/structure/window/reinforced, +/turf/open/floor/engine, +/area/deathmatch) +"aE" = ( +/mob/living/carbon/human/species/monkey/angry, +/turf/open/floor/engine, +/area/deathmatch) +"aG" = ( +/turf/open/lava, +/area/deathmatch) +"aH" = ( +/obj/vehicle/sealed/mecha/gygax, +/turf/open/floor/carpet/neon/simple/green, +/area/deathmatch) +"aI" = ( +/turf/open/floor/carpet/neon/simple/lime, +/area/deathmatch) +"aJ" = ( +/turf/open/floor/carpet/neon/simple/red, +/area/deathmatch) +"aK" = ( +/turf/open/floor/carpet/neon/simple/violet, +/area/deathmatch) +"aL" = ( +/obj/item/chair, +/turf/open/floor/engine, +/area/deathmatch) +"aN" = ( +/obj/structure/table/reinforced, +/obj/item/gun/energy/laser, +/turf/open/floor/engine, +/area/deathmatch) +"aP" = ( +/turf/open/floor/light/colour_cycle/dancefloor_a, +/area/deathmatch) +"aQ" = ( +/obj/machinery/light/directional/west, +/turf/open/floor/engine, +/area/deathmatch) +"aR" = ( +/obj/effect/decal/cleanable/blood/drip, +/turf/open/floor/engine, +/area/deathmatch) +"aS" = ( +/obj/structure/table/reinforced, +/obj/item/mecha_parts/mecha_equipment/weapon/energy/laser/heavy, +/turf/open/floor/engine, +/area/deathmatch) +"aV" = ( +/obj/structure/barricade/security, +/turf/open/floor/carpet/neon/simple/red, +/area/deathmatch) +"aW" = ( +/obj/structure/table, +/turf/open/floor/engine, +/area/deathmatch) +"aY" = ( +/obj/structure/closet/crate/trashcart/filled, +/obj/item/weldingtool, +/turf/open/floor/engine, +/area/deathmatch) +"aZ" = ( +/obj/structure/barricade/wooden, +/turf/open/floor/engine, +/area/deathmatch) +"ba" = ( +/obj/structure/closet/crate/trashcart/filled, +/obj/machinery/light/directional/west, +/turf/open/floor/engine, +/area/deathmatch) +"bb" = ( +/obj/structure/barricade/sandbags, +/turf/open/floor/engine, +/area/deathmatch) +"bc" = ( +/obj/machinery/light/directional/east, +/turf/open/floor/engine, +/area/deathmatch) +"bd" = ( +/obj/item/gun/energy/laser/hellgun, +/obj/structure/closet/crate/trashcart/filled, +/turf/open/floor/engine, +/area/deathmatch) +"be" = ( +/obj/machinery/stasis, +/turf/open/floor/engine, +/area/deathmatch) +"bf" = ( +/obj/machinery/door/airlock/hatch, +/turf/open/floor/carpet/neon/simple/purple, +/area/deathmatch) +"bh" = ( +/turf/open/floor/carpet/neon/simple/orange, +/area/deathmatch) +"bi" = ( +/obj/effect/turf_decal/trimline/yellow/filled/warning{ + dir = 1; + icon_state = "trimline_warn_fill" + }, +/turf/open/floor/engine, +/area/deathmatch) +"bj" = ( +/obj/machinery/sleeper{ + dir = 4; + icon_state = "sleeper" + }, +/turf/open/floor/engine, +/area/deathmatch) +"bk" = ( +/obj/vehicle/ridden/atv, +/obj/item/key/atv, +/turf/open/floor/engine, +/area/deathmatch) +"bl" = ( +/obj/machinery/sleeper{ + dir = 8; + icon_state = "sleeper" + }, +/turf/open/floor/engine, +/area/deathmatch) +"bm" = ( +/obj/machinery/vending/cigarette, +/turf/open/floor/engine, +/area/deathmatch) +"bn" = ( +/obj/machinery/vending/assist, +/turf/open/floor/engine, +/area/deathmatch) +"bo" = ( +/obj/machinery/vending/sustenance, +/turf/open/floor/engine, +/area/deathmatch) +"bp" = ( +/obj/item/grenade/smokebomb, +/turf/open/floor/engine, +/area/deathmatch) +"bq" = ( +/obj/item/mecha_parts/mecha_equipment/armor/antiproj_armor_booster, +/turf/open/floor/engine, +/area/deathmatch) +"br" = ( +/obj/item/mecha_parts/mecha_equipment/armor/anticcw_armor_booster, +/turf/open/floor/engine, +/area/deathmatch) +"bs" = ( +/turf/open/floor/carpet/neon/simple/blue, +/area/deathmatch) +"bt" = ( +/obj/effect/landmark/deathmatch_player_spawn, +/obj/effect/turf_decal/box, +/obj/machinery/button/door{ + id = "dm2"; + pixel_x = 24 + }, +/turf/open/floor/carpet/neon/simple/orange, +/area/deathmatch) +"bu" = ( +/turf/open/floor/carpet/neon/simple/yellow, +/area/deathmatch) +"bv" = ( +/obj/structure/table/reinforced, +/obj/item/clothing/head/utility/welding, +/obj/machinery/light/directional/east, +/obj/item/inducer, +/obj/item/weldingtool/largetank, +/turf/open/floor/carpet/neon/simple/teal, +/area/deathmatch) +"bw" = ( +/obj/machinery/light/directional/south, +/turf/open/floor/carpet/neon/simple/teal, +/area/deathmatch) +"bx" = ( +/obj/machinery/door/poddoor/shutters{ + id = "dm1" + }, +/turf/open/floor/engine, +/area/deathmatch) +"by" = ( +/obj/structure/table/reinforced, +/obj/item/mecha_parts/mecha_equipment/weapon/ballistic/lmg{ + pixel_y = -8 + }, +/obj/item/mecha_parts/mecha_equipment/weapon/ballistic/scattershot{ + pixel_y = 8 + }, +/turf/open/floor/carpet/neon/simple/green, +/area/deathmatch) +"bz" = ( +/obj/machinery/vending/medical, +/turf/open/floor/engine, +/area/deathmatch) +"bB" = ( +/obj/effect/turf_decal/trimline/yellow/filled/warning, +/turf/open/floor/engine, +/area/deathmatch) +"bF" = ( +/obj/effect/turf_decal/trimline/yellow/filled/warning{ + dir = 8; + icon_state = "trimline_warn_fill" + }, +/turf/open/floor/engine, +/area/deathmatch) +"bG" = ( +/obj/structure/table/reinforced, +/obj/item/mecha_ammo/lmg, +/obj/item/mecha_ammo/lmg{ + pixel_y = 12 + }, +/obj/item/mecha_ammo/scattershot{ + pixel_y = 18 + }, +/obj/item/mecha_ammo/scattershot{ + pixel_y = 24 + }, +/turf/open/floor/carpet/neon/simple/green, +/area/deathmatch) +"bH" = ( +/obj/structure/table_frame, +/turf/open/floor/carpet/neon/simple/violet, +/area/deathmatch) +"bJ" = ( +/obj/structure/reagent_dispensers/fueltank, +/turf/open/floor/engine, +/area/deathmatch) +"bL" = ( +/obj/effect/decal/cleanable/blood/gibs, +/turf/open/floor/engine, +/area/deathmatch) +"bM" = ( +/obj/structure/window/fulltile, +/turf/open/floor/engine, +/area/deathmatch) +"bN" = ( +/obj/structure/showcase/horrific_experiment, +/turf/open/floor/engine, +/area/deathmatch) +"bO" = ( +/obj/structure/reagent_dispensers/water_cooler, +/turf/open/floor/engine, +/area/deathmatch) +"bP" = ( +/obj/machinery/door/airlock/hatch, +/turf/open/floor/carpet/neon/simple/teal, +/area/deathmatch) +"bR" = ( +/obj/machinery/light/directional/north, +/turf/open/floor/engine, +/area/deathmatch) +"bS" = ( +/obj/effect/decal/cleanable/blood/splatter, +/turf/open/floor/engine, +/area/deathmatch) +"bT" = ( +/obj/item/shard, +/turf/open/floor/engine, +/area/deathmatch) +"bV" = ( +/turf/open/floor/noslip, +/area/deathmatch) +"bW" = ( +/obj/structure/barricade/wooden, +/turf/open/floor/carpet/neon/simple/green, +/area/deathmatch) +"bY" = ( +/obj/structure/barricade/wooden, +/turf/open/floor/carpet/neon/simple/teal, +/area/deathmatch) +"bZ" = ( +/obj/machinery/recharger, +/obj/structure/table, +/turf/open/floor/engine, +/area/deathmatch) +"ca" = ( +/obj/structure/table, +/obj/item/storage/briefcase, +/turf/open/floor/engine, +/area/deathmatch) +"cc" = ( +/obj/structure/table, +/obj/item/storage/toolbox/mechanical, +/turf/open/floor/engine, +/area/deathmatch) +"cd" = ( +/obj/item/grenade/smokebomb, +/turf/open/floor/carpet/neon/simple/green, +/area/deathmatch) +"ce" = ( +/obj/structure/chair{ + dir = 1; + icon_state = "chair" + }, +/turf/open/floor/engine, +/area/deathmatch) +"cg" = ( +/obj/structure/showcase/machinery/cloning_pod, +/turf/open/floor/engine, +/area/deathmatch) +"ch" = ( +/obj/structure/chair/office, +/turf/open/floor/engine, +/area/deathmatch) +"ci" = ( +/obj/structure/cannon{ + dir = 8; + icon_state = "falconet_patina" + }, +/turf/open/floor/sepia, +/area/deathmatch) +"ck" = ( +/turf/open/floor/sepia, +/area/deathmatch) +"cl" = ( +/obj/item/reagent_containers/syringe, +/turf/open/floor/light/colour_cycle/dancefloor_b, +/area/deathmatch) +"cm" = ( +/obj/item/gun/ballistic/revolver/c38/detective, +/obj/structure/table/wood, +/turf/open/floor/sepia, +/area/deathmatch) +"cn" = ( +/obj/machinery/light/directional/north, +/turf/open/floor/sepia, +/area/deathmatch) +"cp" = ( +/obj/structure/window/spawner/directional/south, +/turf/open/floor/sepia, +/area/deathmatch) +"cq" = ( +/obj/item/gun/ballistic/rifle/boltaction/pipegun, +/obj/structure/table/wood, +/turf/open/floor/sepia, +/area/deathmatch) +"cr" = ( +/obj/item/gun/ballistic/rifle/boltaction, +/obj/structure/table/wood, +/turf/open/floor/sepia, +/area/deathmatch) +"ct" = ( +/obj/structure/window/spawner/directional/west{ + icon_state = "window" + }, +/obj/item/lighter, +/turf/open/floor/sepia, +/area/deathmatch) +"cv" = ( +/obj/item/reagent_containers/cup/bucket/wooden, +/obj/machinery/light/directional/south, +/turf/open/floor/sepia, +/area/deathmatch) +"cw" = ( +/obj/machinery/door/airlock/hatch, +/turf/open/floor/carpet/neon/simple/green, +/area/deathmatch) +"cx" = ( +/obj/structure/fermenting_barrel/gunpowder, +/turf/open/floor/sepia, +/area/deathmatch) +"cy" = ( +/obj/structure/toilet{ + dir = 8; + icon_state = "toilet00" + }, +/turf/open/floor/light, +/area/deathmatch) +"cz" = ( +/obj/item/stack/cannonball/fourteen, +/obj/structure/table/wood, +/turf/open/floor/sepia, +/area/deathmatch) +"cA" = ( +/obj/item/reagent_containers/cup/glass/drinkingglass/filled/nuka_cola, +/turf/open/floor/light/colour_cycle/dancefloor_a, +/area/deathmatch) +"cB" = ( +/obj/item/reagent_containers/pill/stimulant, +/turf/open/floor/light/colour_cycle/dancefloor_b, +/area/deathmatch) +"cC" = ( +/obj/machinery/recharge_station, +/turf/open/floor/engine, +/area/deathmatch) +"cD" = ( +/obj/structure/barricade/security, +/turf/open/floor/engine, +/area/deathmatch) +"cE" = ( +/obj/structure/table, +/turf/open/floor/carpet/neon/simple/violet, +/area/deathmatch) +"cF" = ( +/obj/structure/barricade/security, +/turf/open/floor/carpet/neon/simple/violet, +/area/deathmatch) +"cG" = ( +/obj/structure/table/reinforced, +/obj/item/clothing/head/utility/welding, +/obj/machinery/light/directional/east, +/obj/item/inducer, +/obj/item/weldingtool/largetank, +/turf/open/floor/carpet/neon/simple/green, +/area/deathmatch) +"cH" = ( +/obj/machinery/sheetifier, +/turf/open/floor/engine, +/area/deathmatch) +"cI" = ( +/obj/machinery/door/airlock/hatch, +/turf/open/floor/carpet/neon/simple/lime, +/area/deathmatch) +"cK" = ( +/obj/structure/table, +/obj/item/mecha_parts/mecha_equipment/repair_droid, +/turf/open/floor/engine, +/area/deathmatch) +"cL" = ( +/obj/structure/table, +/obj/item/grenade/smokebomb, +/turf/open/floor/engine, +/area/deathmatch) +"cM" = ( +/obj/item/reagent_containers/pill/happinesspsych, +/turf/open/floor/light/colour_cycle/dancefloor_b, +/area/deathmatch) +"cN" = ( +/obj/item/fireaxe, +/turf/open/floor/light/colour_cycle/dancefloor_a, +/area/deathmatch) +"cO" = ( +/obj/structure/table_frame, +/turf/open/floor/engine, +/area/deathmatch) +"cP" = ( +/obj/structure/urinal{ + pixel_y = 24 + }, +/turf/open/floor/noslip, +/area/deathmatch) +"cQ" = ( +/obj/item/reagent_containers/pill/lsd, +/turf/open/floor/light/colour_cycle/dancefloor_a, +/area/deathmatch) +"cR" = ( +/obj/item/reagent_containers/pill/probital, +/turf/open/floor/light/colour_cycle/dancefloor_b, +/area/deathmatch) +"cS" = ( +/obj/structure/reagent_dispensers/cooking_oil, +/turf/open/floor/engine, +/area/deathmatch) +"cT" = ( +/obj/item/inducer, +/obj/item/weldingtool, +/turf/open/floor/engine, +/area/deathmatch) +"cU" = ( +/obj/machinery/door/poddoor/shutters{ + id = "dm2" + }, +/turf/open/floor/engine, +/area/deathmatch) +"cV" = ( +/obj/item/mecha_ammo/scattershot, +/turf/open/floor/engine, +/area/deathmatch) +"cW" = ( +/obj/machinery/grill, +/turf/open/floor/engine, +/area/deathmatch) +"cX" = ( +/obj/effect/landmark/deathmatch_player_spawn, +/obj/effect/turf_decal/box, +/obj/machinery/button/door{ + id = "dm3"; + pixel_x = -24 + }, +/turf/open/floor/carpet/neon/simple/teal, +/area/deathmatch) +"cY" = ( +/obj/machinery/door/poddoor/shutters{ + id = "dm3" + }, +/turf/open/floor/engine, +/area/deathmatch) +"cZ" = ( +/obj/machinery/sheetifier, +/obj/machinery/light/directional/east, +/turf/open/floor/engine, +/area/deathmatch) +"da" = ( +/obj/machinery/door/airlock/hatch, +/turf/open/floor/engine, +/area/deathmatch) +"db" = ( +/obj/vehicle/sealed/mecha/gygax, +/turf/open/floor/carpet/neon/simple/orange, +/area/deathmatch) +"dc" = ( +/obj/machinery/grill, +/obj/machinery/light/directional/west, +/turf/open/floor/engine, +/area/deathmatch) +"dd" = ( +/obj/structure/table, +/obj/item/food/meat/rawcutlet, +/turf/open/floor/engine, +/area/deathmatch) +"df" = ( +/turf/open/floor/carpet/neon/simple/teal, +/area/deathmatch) +"dg" = ( +/obj/vehicle/sealed/mecha/gygax, +/turf/open/floor/carpet/neon/simple/teal, +/area/deathmatch) +"dh" = ( +/obj/structure/closet/l3closet/janitor, +/turf/open/floor/engine, +/area/deathmatch) +"di" = ( +/obj/structure/table/reinforced, +/obj/item/clothing/head/utility/welding, +/obj/item/weldingtool/largetank, +/obj/machinery/light/directional/west, +/obj/item/inducer, +/turf/open/floor/carpet/neon/simple/orange, +/area/deathmatch) +"dk" = ( +/obj/structure/table, +/obj/item/storage/belt/janitor, +/turf/open/floor/engine, +/area/deathmatch) +"eK" = ( +/obj/structure/table, +/obj/item/food/meat/slab/bear, +/turf/open/floor/engine, +/area/deathmatch) +"gg" = ( +/obj/structure/table, +/obj/item/mop, +/turf/open/floor/engine, +/area/deathmatch) +"go" = ( +/turf/open/floor/carpet/neon/simple/pink, +/area/deathmatch) +"gF" = ( +/obj/structure/table/reinforced, +/obj/item/mecha_ammo/lmg, +/obj/item/mecha_ammo/lmg{ + pixel_y = 12 + }, +/obj/item/mecha_ammo/scattershot{ + pixel_y = 18 + }, +/obj/item/mecha_ammo/scattershot{ + pixel_y = 24 + }, +/turf/open/floor/carpet/neon/simple/teal, +/area/deathmatch) +"nE" = ( +/obj/structure/table/reinforced, +/obj/item/mecha_parts/mecha_equipment/weapon/ballistic/lmg{ + pixel_y = -8 + }, +/obj/item/mecha_parts/mecha_equipment/weapon/ballistic/scattershot{ + pixel_y = 8 + }, +/turf/open/floor/carpet/neon/simple/orange, +/area/deathmatch) +"ot" = ( +/obj/structure/mop_bucket/janitorialcart{ + dir = 4 + }, +/turf/open/floor/engine, +/area/deathmatch) +"pD" = ( +/obj/machinery/button/door{ + id = "dm1"; + pixel_y = -24 + }, +/turf/open/floor/carpet/neon/simple/yellow, +/area/deathmatch) +"sc" = ( +/obj/structure/table/reinforced, +/obj/item/mecha_ammo/lmg, +/obj/item/mecha_ammo/lmg{ + pixel_y = 12 + }, +/obj/item/mecha_ammo/scattershot{ + pixel_y = 18 + }, +/obj/item/mecha_ammo/scattershot{ + pixel_y = 24 + }, +/turf/open/floor/carpet/neon/simple/orange, +/area/deathmatch) +"tY" = ( +/obj/machinery/light/directional/south, +/turf/open/floor/engine, +/area/deathmatch) +"yI" = ( +/obj/structure/reagent_dispensers/watertank, +/obj/machinery/light/directional/south, +/turf/open/floor/engine, +/area/deathmatch) +"Br" = ( +/obj/machinery/button/door{ + id = "dm4"; + pixel_y = -24 + }, +/turf/open/floor/carpet/neon/simple/green, +/area/deathmatch) +"ES" = ( +/obj/item/storage/bag/trash, +/turf/open/floor/engine, +/area/deathmatch) +"Ij" = ( +/obj/structure/table, +/obj/item/reagent_containers/cup/bucket, +/turf/open/floor/engine, +/area/deathmatch) +"Jo" = ( +/obj/machinery/vending/wardrobe/jani_wardrobe, +/turf/open/floor/engine, +/area/deathmatch) +"ME" = ( +/obj/structure/table, +/obj/item/food/meat/slab/pig, +/turf/open/floor/engine, +/area/deathmatch) +"PK" = ( +/obj/item/storage/medkit/regular, +/turf/open/floor/noslip, +/area/deathmatch) +"RN" = ( +/turf/closed/wall/mineral/plastitanium/nodiagonal, +/area/deathmatch) +"XP" = ( +/obj/machinery/button/door{ + id = "dm2"; + pixel_y = 24 + }, +/turf/open/floor/carpet/neon/simple/orange, +/area/deathmatch) +"Zw" = ( +/obj/structure/table/reinforced, +/obj/item/mecha_parts/mecha_equipment/weapon/ballistic/lmg{ + pixel_y = -8 + }, +/obj/item/mecha_parts/mecha_equipment/weapon/ballistic/scattershot{ + pixel_y = 8 + }, +/turf/open/floor/carpet/neon/simple/teal, +/area/deathmatch) + +(1,1,1) = {" +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +"} +(2,1,1) = {" +ac +ad +an +bu +bx +aj +ax +aQ +bM +aj +ax +be +bj +bj +br +ax +aQ +bb +aj +ax +cC +aQ +cU +bh +di +sc +ac +"} +(3,1,1) = {" +ac +ao +aJ +pD +ac +aj +ax +aj +bM +aZ +bP +bY +aj +aj +aj +ax +aj +bb +aj +ax +cC +aj +ac +XP +bs +nE +ac +"} +(4,1,1) = {" +ac +bu +as +aA +ac +aj +da +aj +bM +aj +ax +df +df +df +bw +ax +aj +bb +aj +ax +aj +aj +ac +db +bt +bh +ac +"} +(5,1,1) = {" +ac +bx +ac +ac +ac +aj +ax +aj +bM +aj +ax +bR +aj +aj +bY +cw +bW +am +am +cw +aj +aj +ac +ac +ac +cU +ac +"} +(6,1,1) = {" +ac +aj +aj +aj +aj +aj +ax +aj +bM +aj +ax +aj +bk +aj +aj +ax +aj +cd +aj +ax +aj +aj +aj +aj +aj +aj +ac +"} +(7,1,1) = {" +ac +aj +aj +aj +aj +aj +ax +aj +bM +bc +ax +bZ +bl +bl +bz +ax +aj +am +bc +ax +aj +cH +cH +cZ +aj +aj +ac +"} +(8,1,1) = {" +ac +ax +ax +da +ax +ax +ax +ax +ax +ax +ax +ax +ax +ax +ax +ax +ax +cw +ax +ax +ax +ax +ax +ax +ax +da +ac +"} +(9,1,1) = {" +ac +az +aJ +aJ +aJ +aJ +aJ +aJ +aJ +aJ +az +ax +bm +aj +aQ +bO +aj +aK +aj +aj +aQ +aj +aj +ax +dk +aj +ac +"} +(10,1,1) = {" +ac +aJ +cD +cD +cD +aj +aj +aj +aj +aj +aJ +ax +bn +aj +aK +aK +aK +aK +cD +cD +cE +cK +aj +ax +Ij +aj +ac +"} +(11,1,1) = {" +ac +aJ +aj +aB +aB +aj +aj +aB +aB +aj +aJ +ax +bo +aj +aK +aj +aj +aj +aj +aj +aK +cL +aj +ax +gg +yI +ac +"} +(12,1,1) = {" +ac +aJ +bB +aG +aG +bi +bB +aG +aG +bi +aJ +aC +aj +aj +aK +aj +ca +ce +aj +aj +aK +aj +aj +ax +aj +aj +ac +"} +(13,1,1) = {" +ac +aJ +aj +bF +bF +aj +aj +bF +bF +aj +aJ +bf +aK +aK +aK +ch +aW +ce +aj +aj +aK +aK +aK +bf +aj +aj +ac +"} +(14,1,1) = {" +ac +aJ +aj +aj +aj +aj +aj +aj +aj +cD +aV +aC +aj +cD +aK +aj +cc +ce +aj +aj +aK +aj +aj +ax +ot +aj +ac +"} +(15,1,1) = {" +ac +aV +cD +aj +aJ +aJ +aJ +aJ +aj +aj +aJ +ax +aj +cD +aK +aj +aj +aj +aj +aj +cF +cD +aj +ax +ES +tY +ac +"} +(16,1,1) = {" +ac +aJ +aj +aj +aJ +aN +aS +aJ +aj +aj +aJ +ax +aj +cD +bH +aK +aK +aK +aK +aK +cF +cO +aL +ax +dh +aj +ac +"} +(17,1,1) = {" +ac +aJ +aj +aj +aJ +bJ +aN +aJ +aj +aj +aJ +ax +aj +aL +bc +aj +aj +aK +aj +aj +bc +aj +cV +ax +Jo +aj +ac +"} +(18,1,1) = {" +ac +aJ +aj +aj +aJ +aJ +aJ +aJ +aj +aj +aJ +ax +ax +ax +ax +ax +RN +da +ax +ax +ax +ax +ax +ax +ax +da +ac +"} +(19,1,1) = {" +ac +aJ +aj +aj +aj +aj +aj +aj +aj +aj +aJ +ax +aj +bq +aj +aj +ax +ck +cp +cm +ax +cP +bV +bV +PK +bV +ac +"} +(20,1,1) = {" +ac +aJ +aj +aB +aB +aj +aj +aB +aB +aj +aV +ax +aj +cg +cg +aj +ax +ck +cp +cq +ax +cP +cy +cy +bV +bV +ac +"} +(21,1,1) = {" +ac +aJ +bB +aG +aG +bi +bB +aG +aG +bi +aJ +ax +aj +aj +aj +aE +ax +ck +cp +cr +ax +ax +ax +ax +ax +da +ac +"} +(22,1,1) = {" +ac +aJ +aj +bF +bF +aj +aj +bF +bF +aj +aJ +ax +bp +cg +cg +aj +ax +cn +ck +ct +ax +cS +cW +dc +aj +aj +ac +"} +(23,1,1) = {" +ac +aJ +cD +cD +cD +aj +aj +aj +aj +aj +aJ +cI +aI +aI +aI +aI +cI +ck +ck +ck +da +aj +aj +aj +aj +aj +ac +"} +(24,1,1) = {" +ac +az +aJ +aJ +aJ +aJ +aJ +aJ +aJ +aJ +az +ax +aj +aE +bL +aj +ax +ck +ck +cv +ax +cT +aj +dd +ME +eK +ac +"} +(25,1,1) = {" +ac +ax +ax +da +ax +ax +ax +ax +ax +ax +ax +ax +aj +cg +bN +bS +ax +ci +ck +cx +ax +ax +da +ax +ax +ax +ac +"} +(26,1,1) = {" +ac +aj +aj +aj +aj +aQ +aj +ax +aY +ba +bd +ax +aE +aj +aR +bT +ax +ck +ck +cz +ax +aj +aj +aQ +aj +aj +ac +"} +(27,1,1) = {" +ac +ae +ac +ac +ac +aj +aj +da +aj +aj +aj +ax +aj +cg +cg +aE +ax +ax +da +ax +ax +aj +ac +ac +ac +cY +ac +"} +(28,1,1) = {" +ac +am +at +aH +ac +aj +aj +ax +aj +bb +aj +ax +ax +ax +ax +ax +RN +aP +cl +cA +ax +aj +ac +dg +cX +df +ac +"} +(29,1,1) = {" +ac +by +aw +Br +ac +aj +aj +ax +aj +bb +aj +aj +bb +aj +aj +aj +da +cM +cQ +cB +ax +aj +ac +af +go +Zw +ac +"} +(30,1,1) = {" +ac +bG +cG +am +ae +aj +aj +ax +aj +bb +aj +bc +aj +aj +bb +aj +ax +cN +cR +cQ +da +aj +cY +df +bv +gF +ac +"} +(31,1,1) = {" +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +"} diff --git a/_maps/map_files/Deathmatch/ragecage.dmm b/_maps/map_files/Deathmatch/ragecage.dmm new file mode 100644 index 00000000000..b5871e89c24 --- /dev/null +++ b/_maps/map_files/Deathmatch/ragecage.dmm @@ -0,0 +1,575 @@ +//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE +"a" = ( +/obj/item/melee/baseball_bat, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/indestructible/plating, +/area/deathmatch) +"b" = ( +/obj/effect/landmark/deathmatch_player_spawn, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/indestructible/plating, +/area/deathmatch) +"c" = ( +/obj/item/cardboard_cutout/adaptive{ + starting_cutout = "Private Security Officer" + }, +/obj/effect/decal/cleanable/dirt/dust, +/obj/item/cardboard_cutout/adaptive{ + starting_cutout = "Private Security Officer" + }, +/turf/open/indestructible/plating, +/area/deathmatch) +"d" = ( +/obj/effect/spawner/structure/electrified_grille, +/obj/structure/window/reinforced/spawner/directional/north, +/turf/open/indestructible/plating, +/area/deathmatch) +"f" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/indestructible/plating, +/area/deathmatch) +"g" = ( +/obj/structure/window/reinforced/spawner/directional/south, +/obj/effect/spawner/structure/electrified_grille, +/obj/structure/window/reinforced/spawner/directional/west, +/turf/open/indestructible/plating, +/area/deathmatch) +"i" = ( +/obj/effect/spawner/random/trash/mess, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/indestructible/plating, +/area/deathmatch) +"k" = ( +/obj/effect/decal/cleanable/blood/tracks{ + dir = 4 + }, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/indestructible/plating, +/area/deathmatch) +"l" = ( +/obj/effect/decal/cleanable/blood, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/indestructible/plating, +/area/deathmatch) +"m" = ( +/obj/structure/chair/comfy/shuttle{ + dir = 8 + }, +/obj/effect/decal/cleanable/dirt/dust, +/obj/item/cardboard_cutout/adaptive{ + starting_cutout = "Private Security Officer" + }, +/turf/open/indestructible/plating, +/area/deathmatch) +"o" = ( +/turf/closed/indestructible/grille, +/area/deathmatch) +"p" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/decal/cleanable/dirt/dust, +/obj/machinery/power/rtg/debug{ + power_gen = 50000; + name = "dumb idiot shocker powerer"; + desc = "Dont touch the grilles idiot" + }, +/obj/structure/cable, +/turf/open/indestructible/plating, +/area/deathmatch) +"q" = ( +/turf/closed/indestructible/fakedoor/engineering, +/area/deathmatch) +"t" = ( +/obj/effect/spawner/random/trash/graffiti, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/indestructible/plating, +/area/deathmatch) +"u" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/structure/cable, +/turf/open/indestructible/plating, +/area/deathmatch) +"w" = ( +/obj/effect/decal/cleanable/blood/gibs/limb, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/indestructible/plating, +/area/deathmatch) +"x" = ( +/obj/structure/window/reinforced/spawner/directional/south, +/obj/effect/spawner/structure/electrified_grille, +/turf/open/indestructible/plating, +/area/deathmatch) +"z" = ( +/obj/effect/spawner/structure/electrified_grille, +/obj/structure/window/reinforced/spawner/directional/north, +/obj/structure/window/reinforced/spawner/directional/east, +/turf/open/indestructible/plating, +/area/deathmatch) +"A" = ( +/obj/effect/spawner/structure/electrified_grille, +/obj/structure/window/reinforced/spawner/directional/west, +/turf/open/indestructible/plating, +/area/deathmatch) +"B" = ( +/obj/structure/chair/comfy/shuttle{ + dir = 4 + }, +/obj/effect/decal/cleanable/dirt/dust, +/obj/item/cardboard_cutout/adaptive{ + starting_cutout = "Private Security Officer" + }, +/obj/structure/cable, +/turf/open/indestructible/plating, +/area/deathmatch) +"C" = ( +/obj/effect/decal/cleanable/blood/tracks, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/indestructible/plating, +/area/deathmatch) +"D" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/item/clothing/mask/gas, +/turf/open/indestructible/plating, +/area/deathmatch) +"G" = ( +/turf/closed/indestructible/reinforced, +/area/deathmatch) +"H" = ( +/turf/closed/indestructible/fakedoor/maintenance, +/area/deathmatch) +"I" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/item/spear, +/turf/open/indestructible/plating, +/area/deathmatch) +"K" = ( +/obj/effect/spawner/structure/electrified_grille, +/obj/structure/window/reinforced/spawner/directional/south, +/obj/structure/window/reinforced/spawner/directional/east, +/turf/open/indestructible/plating, +/area/deathmatch) +"L" = ( +/obj/effect/spawner/structure/electrified_grille, +/obj/structure/window/reinforced/spawner/directional/west, +/obj/structure/window/reinforced/spawner/directional/north, +/turf/open/indestructible/plating, +/area/deathmatch) +"M" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/item/flashlight/flare{ + start_on = 1; + icon_state = "flare-on" + }, +/turf/open/indestructible/plating, +/area/deathmatch) +"N" = ( +/obj/effect/decal/cleanable/blood/gibs/down, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/indestructible/plating, +/area/deathmatch) +"P" = ( +/obj/effect/spawner/structure/electrified_grille, +/obj/structure/window/reinforced/spawner/directional/east, +/turf/open/indestructible/plating, +/area/deathmatch) +"Q" = ( +/obj/effect/decal/cleanable/blood/tracks{ + dir = 10 + }, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/indestructible/plating, +/area/deathmatch) +"R" = ( +/obj/effect/spawner/structure/electrified_grille, +/obj/structure/window/reinforced/spawner/directional/south, +/turf/open/indestructible/plating, +/area/deathmatch) +"S" = ( +/obj/effect/decal/cleanable/blood/gibs/torso, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/indestructible/plating, +/area/deathmatch) +"U" = ( +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/indestructible/plating, +/area/deathmatch) +"V" = ( +/obj/structure/chair/comfy/shuttle{ + dir = 4 + }, +/obj/effect/decal/cleanable/dirt/dust, +/obj/item/cardboard_cutout/adaptive{ + starting_cutout = "Private Security Officer" + }, +/turf/open/indestructible/plating, +/area/deathmatch) +"X" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/item/storage/toolbox/mechanical/old, +/turf/open/indestructible/plating, +/area/deathmatch) +"Z" = ( +/turf/cordon, +/area/deathmatch) + +(1,1,1) = {" +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +"} +(2,1,1) = {" +Z +G +G +H +G +o +G +H +G +H +G +o +G +H +G +G +Z +"} +(3,1,1) = {" +Z +G +p +u +U +U +U +D +U +U +U +I +U +U +f +G +Z +"} +(4,1,1) = {" +Z +G +U +B +V +V +V +V +V +V +V +c +V +V +X +G +Z +"} +(5,1,1) = {" +Z +G +U +L +A +A +A +A +A +A +A +A +A +g +U +G +Z +"} +(6,1,1) = {" +Z +G +U +d +U +U +U +l +C +Q +t +U +U +x +U +G +Z +"} +(7,1,1) = {" +Z +G +X +d +U +M +U +U +b +k +U +U +U +x +U +q +Z +"} +(8,1,1) = {" +Z +G +U +d +U +U +t +U +U +k +U +M +U +R +U +G +Z +"} +(9,1,1) = {" +Z +G +U +d +U +U +U +i +a +U +N +U +U +R +U +o +Z +"} +(10,1,1) = {" +Z +G +D +d +U +b +U +a +U +a +U +b +t +R +D +o +Z +"} +(11,1,1) = {" +Z +G +U +d +t +U +S +U +a +U +U +U +U +R +U +o +Z +"} +(12,1,1) = {" +Z +G +I +d +U +U +U +M +U +U +U +U +U +R +U +G +Z +"} +(13,1,1) = {" +Z +G +U +d +U +U +U +U +b +t +U +U +i +R +I +q +Z +"} +(14,1,1) = {" +Z +G +U +d +U +U +w +U +U +U +U +U +M +R +U +G +Z +"} +(15,1,1) = {" +Z +G +U +z +P +P +P +P +P +P +P +P +P +K +U +G +Z +"} +(16,1,1) = {" +Z +G +U +m +m +m +m +m +m +m +m +m +m +m +U +G +Z +"} +(17,1,1) = {" +Z +G +f +U +U +X +U +U +U +U +I +U +U +U +f +G +Z +"} +(18,1,1) = {" +Z +G +G +H +G +o +G +H +G +H +G +o +G +H +G +G +Z +"} +(19,1,1) = {" +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +Z +"} diff --git a/_maps/map_files/Deathmatch/raidthebase.dmm b/_maps/map_files/Deathmatch/raidthebase.dmm new file mode 100644 index 00000000000..99e501a1b3a --- /dev/null +++ b/_maps/map_files/Deathmatch/raidthebase.dmm @@ -0,0 +1,1250 @@ +//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE +"bc" = ( +/obj/machinery/door/poddoor/shutters/indestructible/preopen{ + dir = 1 + }, +/turf/open/indestructible/rockyground, +/area/deathmatch) +"bw" = ( +/obj/machinery/griddle, +/turf/open/indestructible/stone, +/area/deathmatch) +"bR" = ( +/obj/effect/turf_decal/caution, +/turf/open/indestructible/rockyground, +/area/deathmatch) +"cF" = ( +/obj/structure/sign/poster/contraband/donk_co/directional/south, +/turf/open/indestructible/rockyground, +/area/deathmatch) +"cH" = ( +/obj/structure/table, +/obj/item/food/meatball{ + pixel_y = 6; + pixel_x = -5 + }, +/obj/item/food/meatball{ + pixel_y = 1; + pixel_x = 4 + }, +/obj/item/food/meatball{ + pixel_y = 8; + pixel_x = 4 + }, +/obj/item/food/meatball{ + pixel_y = -4; + pixel_x = -6 + }, +/turf/open/indestructible/stone, +/area/deathmatch) +"cP" = ( +/obj/effect/spawner/random/trash/hobo_squat, +/obj/item/clothing/gloves/tackler/offbrand, +/turf/open/indestructible/rockyground, +/area/deathmatch) +"df" = ( +/obj/structure/mystery_box/tdome{ + pixel_y = 0 + }, +/turf/open/indestructible/dark, +/area/deathmatch) +"fu" = ( +/obj/effect/spawner/random/trash/hobo_squat, +/obj/item/claymore, +/turf/open/indestructible/rockyground, +/area/deathmatch) +"fv" = ( +/obj/structure/rack, +/obj/item/grenade/chem_grenade/clf3{ + pixel_y = 6; + pixel_x = -1 + }, +/obj/item/grenade/chem_grenade/clf3{ + pixel_x = 7 + }, +/obj/item/grenade/frag, +/obj/item/grenade/frag{ + pixel_y = 6; + pixel_x = 9 + }, +/turf/open/indestructible/stone, +/area/deathmatch) +"fx" = ( +/obj/structure/closet/crate/trashcart/filled, +/turf/open/indestructible/rockyground, +/area/deathmatch) +"fE" = ( +/obj/machinery/door/poddoor/shutters/indestructible/preopen{ + dir = 1 + }, +/obj/structure/barricade/sandbags, +/turf/open/indestructible/rockyground, +/area/deathmatch) +"fI" = ( +/obj/structure/table, +/obj/item/food/bbqribs{ + pixel_y = 8; + pixel_x = -1 + }, +/obj/item/food/bbqribs{ + pixel_y = 5 + }, +/obj/item/food/bbqribs{ + pixel_y = 2; + pixel_x = -2 + }, +/turf/open/indestructible/stone, +/area/deathmatch) +"fT" = ( +/obj/structure/shipping_container/nakamura, +/turf/open/indestructible/rockyground, +/area/deathmatch) +"fU" = ( +/obj/structure/table, +/turf/open/indestructible/dark, +/area/deathmatch) +"gg" = ( +/obj/structure/closet/crate/cardboard, +/obj/item/storage/toolbox/mechanical, +/obj/item/storage/toolbox/emergency/turret, +/turf/open/indestructible/rockyground, +/area/deathmatch) +"gG" = ( +/obj/structure/barricade/sandbags, +/turf/open/indestructible/stone, +/area/deathmatch) +"hC" = ( +/obj/item/stack/spacecash/c1000, +/turf/open/indestructible/rockyground, +/area/deathmatch) +"hN" = ( +/turf/open/indestructible/stone, +/area/deathmatch) +"im" = ( +/obj/structure/closet/crate/medical, +/obj/item/storage/medkit/advanced, +/turf/open/indestructible/dark, +/area/deathmatch) +"in" = ( +/obj/structure/fence{ + dir = 4 + }, +/obj/structure/sign/departments/med/directional/west, +/turf/open/indestructible/rockyground, +/area/deathmatch) +"iQ" = ( +/obj/structure/barricade/sandbags, +/turf/open/indestructible/rockyground, +/area/deathmatch) +"iS" = ( +/obj/structure/rack, +/obj/item/storage/medkit/advanced, +/turf/open/indestructible/dark, +/area/deathmatch) +"jy" = ( +/obj/structure/sign/poster/contraband/donk_co/directional/north, +/obj/structure/mystery_box/tdome{ + pixel_y = 0 + }, +/turf/open/indestructible/stone, +/area/deathmatch) +"jH" = ( +/turf/open/indestructible/dark, +/area/deathmatch) +"kc" = ( +/obj/effect/spawner/random/trash/hobo_squat, +/turf/open/indestructible/rockyground, +/area/deathmatch) +"kU" = ( +/obj/machinery/light/cold/directional/west, +/turf/open/indestructible/dark, +/area/deathmatch) +"mg" = ( +/obj/machinery/oven, +/turf/open/indestructible/stone, +/area/deathmatch) +"ms" = ( +/obj/effect/spawner/random/trash/hobo_squat, +/obj/item/gun/ballistic/automatic/pistol/m1911, +/obj/item/clothing/suit/armor/vest/alt, +/turf/open/indestructible/rockyground, +/area/deathmatch) +"mB" = ( +/obj/structure/fence/door/opened{ + dir = 4 + }, +/turf/open/indestructible/rockyground, +/area/deathmatch) +"nS" = ( +/obj/structure/table/reinforced, +/obj/item/storage/toolbox/guncase/doublesword, +/obj/structure/window/reinforced/unanchored/spawner/directional/south, +/obj/structure/window/reinforced/unanchored/spawner/directional/east, +/turf/open/indestructible/stone, +/area/deathmatch) +"oU" = ( +/turf/closed/indestructible/fakedoor/maintenance, +/area/deathmatch) +"pc" = ( +/obj/structure/plasticflaps/opaque, +/obj/machinery/conveyor/auto{ + dir = 8 + }, +/turf/open/indestructible/plating, +/area/deathmatch) +"re" = ( +/obj/structure/reagent_dispensers/fueltank, +/turf/open/indestructible/rockyground, +/area/deathmatch) +"sR" = ( +/obj/structure/closet/crate/cardboard, +/obj/item/storage/toolbox/ammobox/strilka310, +/turf/open/indestructible/rockyground, +/area/deathmatch) +"tQ" = ( +/obj/structure/table, +/obj/machinery/microwave{ + pixel_y = 5; + pixel_x = -1 + }, +/turf/open/indestructible/stone, +/area/deathmatch) +"ub" = ( +/obj/structure/barricade/security/murderdome, +/turf/open/indestructible/stone, +/area/deathmatch) +"uB" = ( +/obj/structure/fence/end, +/turf/open/indestructible/rockyground, +/area/deathmatch) +"uW" = ( +/obj/structure/table, +/obj/effect/spawner/random/food_or_drink/donkpockets, +/turf/open/indestructible/stone, +/area/deathmatch) +"uY" = ( +/obj/structure/fence/door{ + dir = 4 + }, +/turf/open/indestructible/rockyground, +/area/deathmatch) +"vV" = ( +/obj/machinery/light/floor, +/turf/open/indestructible/plating, +/area/deathmatch) +"wt" = ( +/obj/structure/fence, +/turf/open/indestructible/rockyground, +/area/deathmatch) +"wR" = ( +/obj/structure/table, +/obj/item/food/bun{ + pixel_y = 8; + pixel_x = -2 + }, +/obj/item/food/bun{ + pixel_y = 5; + pixel_x = 3 + }, +/obj/item/food/bun{ + pixel_y = -1 + }, +/turf/open/indestructible/stone, +/area/deathmatch) +"xi" = ( +/obj/effect/spawner/random/trash/garbage, +/turf/open/indestructible/rockyground, +/area/deathmatch) +"xp" = ( +/obj/structure/table/reinforced, +/obj/machinery/door/poddoor/shutters/window{ + dir = 8; + id = "outskirtshutter" + }, +/turf/open/indestructible/stone, +/area/deathmatch) +"xy" = ( +/obj/effect/spawner/structure/window/hollow/reinforced/middle, +/turf/open/indestructible/plating, +/area/deathmatch) +"zl" = ( +/obj/structure/barricade/security/murderdome, +/turf/open/indestructible/rockyground, +/area/deathmatch) +"zr" = ( +/obj/effect/spawner/random/trash/hobo_squat, +/turf/open/indestructible/stone, +/area/deathmatch) +"zP" = ( +/obj/structure/table, +/obj/item/food/cheese/wheel{ + pixel_y = 4 + }, +/turf/open/indestructible/stone, +/area/deathmatch) +"zQ" = ( +/obj/effect/mine/stun, +/turf/open/indestructible/rockyground, +/area/deathmatch) +"AZ" = ( +/obj/machinery/door/poddoor/shutters/indestructible/preopen{ + dir = 1 + }, +/obj/machinery/light/floor, +/turf/open/indestructible/rockyground, +/area/deathmatch) +"Bf" = ( +/obj/item/clothing/suit/armor/vest/alt, +/obj/item/gun/ballistic/revolver/nagant, +/obj/item/suppressor, +/obj/structure/closet/crate/cardboard, +/turf/open/indestructible/rockyground, +/area/deathmatch) +"BC" = ( +/obj/structure/table, +/obj/item/stack/medical/suture, +/turf/open/indestructible/dark, +/area/deathmatch) +"Cd" = ( +/obj/structure/table, +/obj/item/reagent_containers/cup/glass/coffee{ + pixel_y = 2; + pixel_x = 5 + }, +/obj/item/reagent_containers/cup/glass/coffee{ + pixel_y = 9; + pixel_x = -5 + }, +/obj/machinery/light/directional/east, +/turf/open/indestructible/stone, +/area/deathmatch) +"Ce" = ( +/obj/structure/table, +/obj/item/food/dough{ + pixel_y = 7; + pixel_x = -2 + }, +/obj/item/food/dough{ + pixel_x = 5 + }, +/turf/open/indestructible/stone, +/area/deathmatch) +"CJ" = ( +/obj/effect/turf_decal/delivery, +/obj/effect/replica_spawner{ + obvious_replica = 0; + target_path = /obj/machinery/exoscanner + }, +/turf/open/indestructible/rockyground, +/area/deathmatch) +"CP" = ( +/obj/effect/spawner/random/trash/hobo_squat, +/obj/item/reagent_containers/hypospray/medipen/stimulants, +/obj/item/spear, +/turf/open/indestructible/rockyground, +/area/deathmatch) +"Dq" = ( +/obj/effect/turf_decal/caution{ + dir = 1 + }, +/turf/open/indestructible/rockyground, +/area/deathmatch) +"DJ" = ( +/obj/structure/chair{ + dir = 8 + }, +/turf/open/indestructible/white/textured, +/area/deathmatch) +"Ea" = ( +/obj/structure/chair{ + dir = 1 + }, +/obj/machinery/computer/security/telescreen/entertainment/directional/west, +/turf/open/indestructible/white/textured, +/area/deathmatch) +"Eb" = ( +/obj/structure/mystery_box/tdome{ + pixel_y = 0 + }, +/turf/open/indestructible/stone, +/area/deathmatch) +"Ei" = ( +/obj/effect/landmark/deathmatch_player_spawn, +/obj/effect/light_emitter/fake_outdoors, +/turf/open/indestructible/rockyground, +/area/deathmatch) +"EL" = ( +/obj/structure/rack, +/obj/item/gun/ballistic/shotgun/lethal, +/obj/item/storage/box/lethalshot, +/obj/item/gun/ballistic/shotgun/lethal, +/obj/item/storage/box/lethalshot, +/turf/open/indestructible/stone, +/area/deathmatch) +"EZ" = ( +/obj/effect/landmark/deathmatch_player_spawn, +/turf/open/indestructible/rockyground, +/area/deathmatch) +"FF" = ( +/obj/item/wirecutters/caravan, +/turf/open/indestructible/rockyground, +/area/deathmatch) +"FP" = ( +/obj/effect/turf_decal/arrows{ + dir = 8 + }, +/obj/item/stack/spacecash/c1000{ + pixel_y = 10 + }, +/turf/open/indestructible/rockyground, +/area/deathmatch) +"Ip" = ( +/obj/item/shard{ + pixel_y = -5; + pixel_x = 7 + }, +/obj/item/shard{ + pixel_y = 5; + pixel_x = -4 + }, +/obj/effect/mine/shrapnel, +/turf/open/indestructible/plating, +/area/deathmatch) +"IR" = ( +/obj/structure/mystery_box/tdome{ + pixel_y = 0 + }, +/turf/open/indestructible/rockyground, +/area/deathmatch) +"JD" = ( +/obj/structure/reagent_dispensers/fueltank, +/obj/item/weldingtool, +/turf/open/indestructible/plating, +/area/deathmatch) +"JR" = ( +/obj/machinery/door/airlock/maintenance_hatch, +/obj/effect/mapping_helpers/airlock/welded, +/turf/open/indestructible/stone, +/area/deathmatch) +"Kp" = ( +/obj/structure/chair{ + dir = 8 + }, +/obj/effect/landmark/deathmatch_player_spawn, +/turf/open/indestructible/white/textured, +/area/deathmatch) +"KL" = ( +/obj/structure/barricade/security/murderdome, +/obj/effect/turf_decal/siding/thinplating/light{ + dir = 8 + }, +/turf/open/indestructible/rockyground, +/area/deathmatch) +"Mh" = ( +/obj/structure/shipping_container/gorlex, +/turf/open/indestructible/rockyground, +/area/deathmatch) +"MF" = ( +/mob/living/basic/bot/medbot, +/obj/structure/closet/crate/medical, +/turf/open/indestructible/dark, +/area/deathmatch) +"MJ" = ( +/obj/effect/turf_decal/caution{ + dir = 8 + }, +/turf/open/indestructible/rockyground, +/area/deathmatch) +"Nn" = ( +/turf/open/indestructible/white/textured, +/area/deathmatch) +"NT" = ( +/obj/effect/spawner/random/structure/crate_abandoned, +/turf/open/indestructible/rockyground, +/area/deathmatch) +"NZ" = ( +/obj/structure/fence{ + dir = 4 + }, +/turf/open/indestructible/rockyground, +/area/deathmatch) +"Oc" = ( +/obj/effect/mine/explosive, +/turf/open/indestructible/plating, +/area/deathmatch) +"Ol" = ( +/obj/machinery/light/floor, +/turf/open/indestructible/stone, +/area/deathmatch) +"Oz" = ( +/turf/open/indestructible/rockyground, +/area/deathmatch) +"Pi" = ( +/obj/structure/closet/crate/wooden, +/obj/effect/spawner/random/maintenance/four, +/turf/open/indestructible/rockyground, +/area/deathmatch) +"Ps" = ( +/obj/structure/fence/corner, +/turf/open/indestructible/rockyground, +/area/deathmatch) +"PB" = ( +/obj/structure/fermenting_barrel/gunpowder, +/turf/open/indestructible/stone, +/area/deathmatch) +"PN" = ( +/obj/structure/fence/corner{ + dir = 8 + }, +/turf/open/indestructible/rockyground, +/area/deathmatch) +"PP" = ( +/obj/machinery/light/directional/south, +/turf/open/indestructible/stone, +/area/deathmatch) +"Qa" = ( +/turf/closed/indestructible/riveted, +/area/deathmatch) +"Qb" = ( +/obj/structure/sign/departments/exam_room/directional/south, +/obj/structure/chair{ + dir = 8 + }, +/turf/open/indestructible/white/textured, +/area/deathmatch) +"Re" = ( +/obj/structure/reagent_dispensers/fueltank/large, +/turf/open/indestructible/plating, +/area/deathmatch) +"RE" = ( +/obj/machinery/griddle, +/obj/item/storage/box/syndie_kit/throwing_weapons{ + pixel_y = 7 + }, +/turf/open/indestructible/stone, +/area/deathmatch) +"RX" = ( +/obj/effect/landmark/deathmatch_player_spawn, +/turf/open/indestructible/stone, +/area/deathmatch) +"Sv" = ( +/obj/structure/table, +/obj/item/stack/medical/mesh, +/turf/open/indestructible/dark, +/area/deathmatch) +"SG" = ( +/obj/machinery/button/door/directional/west{ + id = "outskirtshutter" + }, +/turf/open/indestructible/stone, +/area/deathmatch) +"Tr" = ( +/obj/effect/turf_decal/caution{ + dir = 4 + }, +/turf/open/indestructible/rockyground, +/area/deathmatch) +"TE" = ( +/obj/machinery/light/floor, +/obj/effect/turf_decal/siding/thinplating/light{ + dir = 8 + }, +/turf/open/indestructible/rockyground, +/area/deathmatch) +"TK" = ( +/obj/structure/sign/departments/med/directional/west, +/obj/structure/closet/crate/trashcart/filled, +/turf/open/indestructible/rockyground, +/area/deathmatch) +"Vh" = ( +/obj/effect/spawner/random/trash/hobo_squat, +/obj/item/melee/baseball_bat, +/turf/open/indestructible/rockyground, +/area/deathmatch) +"Wa" = ( +/obj/structure/showcase/machinery/tv, +/turf/open/indestructible/rockyground, +/area/deathmatch) +"WB" = ( +/obj/structure/closet/crate/trashcart/filled, +/obj/effect/light_emitter/fake_outdoors, +/turf/open/indestructible/rockyground, +/area/deathmatch) +"XD" = ( +/obj/structure/rack, +/turf/open/indestructible/dark, +/area/deathmatch) +"Yf" = ( +/obj/effect/light_emitter/fake_outdoors, +/turf/open/indestructible/rockyground, +/area/deathmatch) +"Yg" = ( +/obj/structure/sign/poster/contraband/donk_co/directional/north, +/turf/open/indestructible/stone, +/area/deathmatch) +"YU" = ( +/obj/structure/barricade/wooden, +/obj/structure/barricade/wooden/crude, +/turf/open/indestructible/plating, +/area/deathmatch) +"YV" = ( +/obj/structure/closet/secure_closet/freezer/fridge/all_access, +/obj/item/reagent_containers/condiment/bbqsauce, +/obj/item/reagent_containers/condiment/bbqsauce, +/turf/open/indestructible/stone, +/area/deathmatch) +"Ze" = ( +/obj/structure/chair/stool/directional/west, +/turf/open/indestructible/stone, +/area/deathmatch) + +(1,1,1) = {" +Qa +Qa +Qa +Qa +Qa +Qa +Qa +Qa +Qa +Qa +Qa +Qa +Qa +Qa +Qa +Qa +Qa +Qa +Qa +Qa +Qa +Qa +Qa +Qa +"} +(2,1,1) = {" +Qa +jH +jH +jH +jH +kU +jH +im +MF +Qa +fu +Oz +Oz +xi +Oz +iQ +Oz +Oz +Oz +Oz +iQ +Oz +Vh +Qa +"} +(3,1,1) = {" +Qa +jH +jH +iS +XD +jH +jH +jH +jH +Qa +xi +Oz +Yf +Oz +Oz +Oz +Yf +IR +Oz +Oz +Yf +EZ +Oz +Qa +"} +(4,1,1) = {" +Qa +jH +jH +Qa +Qa +BC +Sv +fU +Qa +Qa +fx +xi +Oz +Oz +xi +fx +xi +Oz +Oz +Oz +Wa +Oz +Oz +Qa +"} +(5,1,1) = {" +Qa +jH +jH +Qa +Nn +Nn +Nn +Nn +Ea +Qa +IR +Oz +MJ +Oz +Qa +Qa +Qa +Qa +Qa +Qa +Qa +Qa +Qa +Qa +"} +(6,1,1) = {" +Qa +jH +jH +oU +Nn +DJ +Kp +DJ +Qb +Qa +EZ +Dq +CJ +bR +Oz +Qa +Oz +Oz +Oz +Oz +Yf +xi +Oz +Qa +"} +(7,1,1) = {" +Qa +df +jH +Qa +Nn +Nn +Nn +Nn +DJ +Qa +re +Oz +Tr +Oz +xi +Oz +Yf +Oz +Qa +IR +Oz +iQ +Oz +Qa +"} +(8,1,1) = {" +Qa +Qa +Qa +Qa +Qa +KL +TE +KL +Qa +Qa +Qa +wt +wt +mB +Qa +Qa +pc +Qa +Qa +Qa +Qa +Oz +Oz +Qa +"} +(9,1,1) = {" +Qa +Oz +ms +xi +in +Oz +Oz +Oz +TK +xi +Oz +Oz +zl +Oz +Qa +Re +Oc +Re +Re +Re +Qa +kc +Oz +Qa +"} +(10,1,1) = {" +Qa +Oz +Yf +EZ +NZ +Oz +Oz +Yf +Oz +Oz +zl +Oz +Yf +Oz +Qa +Qa +pc +Qa +Qa +Qa +Qa +Oz +Oz +Qa +"} +(11,1,1) = {" +Qa +Oz +Oz +FF +NZ +Oz +xi +cP +Oz +Oz +Oz +Oz +Oz +Oz +Oz +hC +FP +zl +IR +Oz +Oz +Oz +iQ +Qa +"} +(12,1,1) = {" +Qa +Oz +Oz +Qa +Qa +Qa +Qa +Qa +Qa +Qa +Qa +kc +Oz +Oz +zl +Oz +Yf +Oz +Oz +Oz +Yf +xi +fx +Qa +"} +(13,1,1) = {" +Qa +Oz +xi +Qa +nS +Eb +hN +Qa +EZ +Oz +Oz +Oz +Oz +Oz +Qa +Qa +Qa +Qa +Qa +Qa +Qa +Qa +Qa +Qa +"} +(14,1,1) = {" +Qa +Oz +WB +Qa +hN +Ol +hN +xy +Oz +PN +uY +uB +Mh +Oz +Qa +hN +zr +hN +hN +hN +hN +hN +hN +Qa +"} +(15,1,1) = {" +Qa +Oz +xi +Qa +hN +hN +hN +xy +Oz +NZ +Pi +Oz +Oz +Oz +Qa +hN +hN +hN +fI +wR +hN +YV +PP +Qa +"} +(16,1,1) = {" +Qa +zl +Oz +Qa +oU +Ip +Qa +Qa +Oz +NZ +Bf +Oz +Oz +cF +Qa +jy +hN +RX +hN +hN +hN +hN +hN +Qa +"} +(17,1,1) = {" +Qa +Oz +Oz +iQ +Oz +Oz +kc +iQ +Oz +Ps +fT +Oz +sR +Oz +bc +gG +hN +ub +RE +bw +hN +ub +hN +Qa +"} +(18,1,1) = {" +Qa +Oz +Oz +zQ +Oz +Yf +Oz +zQ +Oz +Oz +Oz +gg +Yf +iQ +AZ +hN +hN +hN +hN +hN +hN +hN +hN +Qa +"} +(19,1,1) = {" +Qa +Oz +zl +Qa +Qa +YU +Qa +Qa +Oz +Oz +Oz +NT +Oz +Oz +AZ +hN +ub +hN +hN +hN +ub +hN +hN +Qa +"} +(20,1,1) = {" +Qa +Oz +Oz +Qa +JD +vV +JD +Qa +Oz +Oz +Oz +Oz +zl +Oz +fE +hN +hN +hN +mg +mg +hN +Eb +hN +Qa +"} +(21,1,1) = {" +Qa +Oz +Oz +Qa +Qa +Qa +Qa +Qa +xp +xp +Qa +Oz +Oz +cF +Qa +Yg +uW +hN +hN +hN +hN +cH +hN +Qa +"} +(22,1,1) = {" +Qa +Oz +Oz +Qa +hN +Eb +hN +SG +Ze +hN +Qa +Oz +Oz +zl +Qa +hN +zP +hN +hN +RX +hN +Ce +PP +Qa +"} +(23,1,1) = {" +Qa +xi +Yf +JR +hN +hN +hN +hN +hN +hN +Qa +CP +Ei +Oz +Qa +hN +hN +hN +tQ +uW +hN +PB +hN +Qa +"} +(24,1,1) = {" +Qa +fx +xi +Qa +hN +hN +Cd +hN +EL +fv +Qa +Oz +Oz +Oz +Qa +hN +hN +hN +hN +hN +hN +hN +hN +Qa +"} +(25,1,1) = {" +Qa +Qa +Qa +Qa +Qa +Qa +Qa +Qa +Qa +Qa +Qa +Qa +Qa +Qa +Qa +Qa +Qa +Qa +Qa +Qa +Qa +Qa +Qa +Qa +"} diff --git a/_maps/map_files/Deathmatch/shooting_range.dmm b/_maps/map_files/Deathmatch/shooting_range.dmm new file mode 100644 index 00000000000..e6d04007ebd --- /dev/null +++ b/_maps/map_files/Deathmatch/shooting_range.dmm @@ -0,0 +1,750 @@ +//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE +"a" = ( +/obj/machinery/light/directional/east, +/turf/open/floor/wood, +/area/deathmatch) +"b" = ( +/obj/structure/chair/office{ + dir = 4 + }, +/obj/effect/landmark/deathmatch_player_spawn, +/turf/open/floor/wood/large, +/area/deathmatch) +"c" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 1 + }, +/obj/effect/spawner/structure/window, +/turf/open/floor/wood/large, +/area/deathmatch) +"d" = ( +/obj/item/ammo_box/magazine/m9mm/ap, +/turf/open/floor/wood, +/area/deathmatch) +"e" = ( +/obj/effect/decal/cleanable/blood/old, +/turf/open/floor/wood, +/area/deathmatch) +"f" = ( +/obj/machinery/light/directional/west, +/obj/structure/barricade/sandbags, +/turf/open/floor/wood, +/area/deathmatch) +"g" = ( +/turf/closed/indestructible/iron, +/area/deathmatch) +"h" = ( +/obj/structure/barricade/wooden, +/obj/effect/turf_decal/siding/wood{ + dir = 4 + }, +/turf/open/floor/wood/tile, +/area/deathmatch) +"i" = ( +/obj/structure/extinguisher_cabinet/directional/east, +/turf/open/floor/wood, +/area/deathmatch) +"j" = ( +/obj/effect/decal/cleanable/blood/old, +/obj/effect/turf_decal/siding/wood{ + dir = 4 + }, +/turf/open/floor/wood/tile, +/area/deathmatch) +"k" = ( +/obj/structure/table/reinforced, +/obj/item/ammo_box/magazine/m9mm/fire, +/turf/open/floor/wood/large, +/area/deathmatch) +"l" = ( +/obj/structure/table/reinforced, +/obj/item/ammo_box/magazine/m9mm, +/obj/item/ammo_box/magazine/m9mm, +/obj/item/ammo_box/magazine/m9mm, +/obj/item/ammo_box/magazine/m9mm, +/obj/item/ammo_box/magazine/m9mm, +/obj/item/ammo_box/magazine/m9mm, +/obj/item/ammo_box/magazine/m9mm, +/obj/item/ammo_box/magazine/m9mm, +/obj/item/ammo_box/magazine/m9mm, +/obj/item/ammo_box/magazine/m9mm, +/obj/item/ammo_box/magazine/m9mm, +/turf/open/floor/wood/large, +/area/deathmatch) +"m" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 1 + }, +/turf/open/floor/wood/tile, +/area/deathmatch) +"n" = ( +/obj/structure/extinguisher_cabinet/directional/west, +/turf/open/floor/wood, +/area/deathmatch) +"o" = ( +/obj/item/ammo_box/magazine/m9mm/ap, +/obj/structure/closet/crate/secure/weapon{ + locked = 0 + }, +/obj/effect/turf_decal/siding/wood/corner{ + dir = 4 + }, +/turf/open/floor/wood/tile, +/area/deathmatch) +"p" = ( +/obj/effect/turf_decal/siding/wood/corner{ + dir = 1 + }, +/turf/open/floor/wood/tile, +/area/deathmatch) +"q" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 4 + }, +/turf/open/floor/wood/tile, +/area/deathmatch) +"r" = ( +/obj/item/flashlight/flare, +/turf/open/floor/wood, +/area/deathmatch) +"s" = ( +/obj/machinery/light/directional/south, +/turf/open/floor/wood, +/area/deathmatch) +"t" = ( +/obj/effect/decal/cleanable/blood/old, +/obj/effect/turf_decal/siding/wood{ + dir = 1 + }, +/turf/open/floor/wood/tile, +/area/deathmatch) +"u" = ( +/obj/structure/barricade/sandbags, +/obj/structure/extinguisher_cabinet/directional/west, +/turf/open/floor/wood, +/area/deathmatch) +"v" = ( +/obj/item/reagent_containers/hypospray/medipen, +/turf/open/floor/wood, +/area/deathmatch) +"x" = ( +/obj/item/ammo_box/magazine/m9mm/fire, +/turf/open/floor/wood, +/area/deathmatch) +"y" = ( +/obj/item/ammo_box/magazine/m9mm/fire, +/obj/structure/closet/crate/secure/weapon{ + locked = 0 + }, +/obj/effect/turf_decal/siding/wood/corner{ + dir = 8 + }, +/turf/open/floor/wood/tile, +/area/deathmatch) +"z" = ( +/turf/open/floor/wood, +/area/deathmatch) +"A" = ( +/obj/effect/landmark/deathmatch_player_spawn, +/obj/effect/turf_decal/siding/wood{ + dir = 8 + }, +/turf/open/floor/wood/tile, +/area/deathmatch) +"B" = ( +/obj/machinery/light/directional/west, +/turf/open/floor/wood, +/area/deathmatch) +"C" = ( +/obj/structure/table/reinforced, +/obj/item/flashlight/lamp, +/turf/open/floor/wood/large, +/area/deathmatch) +"D" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 8 + }, +/turf/open/floor/wood/tile, +/area/deathmatch) +"E" = ( +/obj/effect/turf_decal/siding/wood/corner, +/turf/open/floor/wood/tile, +/area/deathmatch) +"F" = ( +/obj/structure/barricade/wooden, +/obj/effect/turf_decal/siding/wood, +/turf/open/floor/wood/tile, +/area/deathmatch) +"I" = ( +/obj/effect/turf_decal/siding/wood, +/turf/open/floor/wood/tile, +/area/deathmatch) +"K" = ( +/turf/closed/wall, +/area/deathmatch) +"M" = ( +/obj/structure/barricade/sandbags, +/turf/open/floor/wood, +/area/deathmatch) +"O" = ( +/obj/structure/barricade/wooden, +/turf/open/floor/wood, +/area/deathmatch) +"Q" = ( +/obj/item/ammo_box/magazine/m9mm/hp, +/obj/structure/closet/crate/secure/weapon{ + locked = 0 + }, +/obj/effect/turf_decal/siding/wood{ + dir = 4 + }, +/turf/open/floor/wood/tile, +/area/deathmatch) +"T" = ( +/obj/effect/landmark/deathmatch_player_spawn, +/turf/open/floor/wood, +/area/deathmatch) +"U" = ( +/turf/open/floor/wood/large, +/area/deathmatch) +"W" = ( +/obj/machinery/light/directional/north, +/turf/open/floor/wood, +/area/deathmatch) +"X" = ( +/obj/effect/turf_decal/siding/wood, +/turf/open/floor/wood/large, +/area/deathmatch) +"Y" = ( +/obj/structure/extinguisher_cabinet/directional/north, +/turf/open/floor/wood, +/area/deathmatch) + +(1,1,1) = {" +g +g +g +g +g +g +g +g +g +g +g +g +g +g +g +g +g +g +g +g +g +g +"} +(2,1,1) = {" +g +E +j +q +q +h +q +q +q +q +q +q +Q +q +q +q +j +q +q +q +o +g +"} +(3,1,1) = {" +g +I +z +z +T +K +z +z +M +z +z +z +z +z +z +i +z +z +z +z +m +g +"} +(4,1,1) = {" +g +I +z +z +z +K +M +M +M +z +z +z +z +z +O +K +z +z +K +O +m +g +"} +(5,1,1) = {" +g +I +z +a +z +K +z +z +z +z +z +z +e +z +O +z +z +z +z +K +m +g +"} +(6,1,1) = {" +g +F +O +K +z +n +z +z +z +a +z +e +z +z +K +W +e +z +z +z +t +g +"} +(7,1,1) = {" +g +I +z +f +e +z +r +K +K +K +O +O +K +z +K +z +z +T +z +z +m +g +"} +(8,1,1) = {" +g +I +z +M +M +M +z +c +U +U +U +U +X +z +O +z +z +z +z +K +m +g +"} +(9,1,1) = {" +g +I +e +z +v +z +z +K +U +l +b +U +X +z +O +K +K +K +K +O +m +g +"} +(10,1,1) = {" +g +I +z +z +z +z +z +K +U +C +k +U +K +z +z +z +z +M +z +z +m +g +"} +(11,1,1) = {" +g +I +z +z +z +z +z +c +U +U +U +U +O +e +v +z +z +M +x +z +m +g +"} +(12,1,1) = {" +g +I +z +M +M +z +z +K +O +O +K +K +K +z +z +z +z +M +M +z +t +g +"} +(13,1,1) = {" +g +I +z +e +M +z +z +B +z +z +z +u +d +z +z +r +z +z +z +z +m +g +"} +(14,1,1) = {" +g +I +z +z +M +z +z +z +z +M +z +M +z +z +s +K +K +O +O +K +m +g +"} +(15,1,1) = {" +g +I +K +O +O +K +O +z +z +M +z +z +z +z +z +K +T +z +z +K +m +g +"} +(16,1,1) = {" +g +I +z +z +z +z +O +z +K +K +z +K +O +z +z +O +z +z +s +K +m +g +"} +(17,1,1) = {" +g +I +e +z +T +s +K +z +K +z +z +z +O +z +z +O +e +z +z +K +m +g +"} +(18,1,1) = {" +g +I +z +z +z +z +K +Y +K +W +z +z +O +z +z +K +z +z +z +z +m +g +"} +(19,1,1) = {" +g +I +z +z +z +z +K +e +K +z +e +z +K +z +z +K +K +K +K +K +m +g +"} +(20,1,1) = {" +g +I +z +K +K +z +K +z +K +K +z +z +K +e +z +z +z +z +z +z +m +g +"} +(21,1,1) = {" +g +y +D +D +D +D +D +D +D +A +D +D +D +D +D +D +D +D +D +D +p +g +"} +(22,1,1) = {" +g +g +g +g +g +g +g +g +g +g +g +g +g +g +g +g +g +g +g +g +g +g +"} diff --git a/_maps/map_files/Deathmatch/starwars.dmm b/_maps/map_files/Deathmatch/starwars.dmm new file mode 100644 index 00000000000..c1f00546107 --- /dev/null +++ b/_maps/map_files/Deathmatch/starwars.dmm @@ -0,0 +1,2040 @@ +//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE +"ai" = ( +/obj/effect/turf_decal/tile/brown/half, +/obj/item/stack/package_wrap, +/turf/open/indestructible/large, +/area/deathmatch) +"ay" = ( +/obj/structure/chair{ + dir = 1 + }, +/turf/open/indestructible/large, +/area/deathmatch) +"aM" = ( +/obj/effect/landmark/deathmatch_player_spawn, +/turf/open/indestructible/large, +/area/deathmatch) +"aY" = ( +/obj/effect/turf_decal/tile/blue/full, +/obj/item/reagent_containers/syringe, +/turf/open/indestructible/white/smooth_large, +/area/deathmatch) +"bE" = ( +/obj/structure/lattice, +/turf/template_noop, +/area/template_noop) +"bR" = ( +/obj/machinery/computer{ + dir = 4 + }, +/turf/open/indestructible/large, +/area/deathmatch) +"ch" = ( +/obj/effect/turf_decal/bot, +/obj/structure/tank_holder/extinguisher, +/turf/open/indestructible/large, +/area/deathmatch) +"cj" = ( +/obj/effect/turf_decal/tile/red/anticorner{ + dir = 1 + }, +/obj/structure/barricade/security/murderdome, +/turf/open/indestructible/dark/smooth_large, +/area/deathmatch) +"cp" = ( +/obj/effect/turf_decal/tile/red/opposingcorners{ + dir = 8 + }, +/turf/open/indestructible/dark/smooth_large, +/area/deathmatch) +"cs" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/dirt, +/obj/effect/mapping_helpers/broken_floor, +/obj/effect/decal/cleanable/blood/gibs/down, +/turf/open/indestructible/plating, +/area/deathmatch) +"cL" = ( +/obj/machinery/door/poddoor/shutters/indestructible/preopen{ + id = "Starwars" + }, +/turf/open/indestructible/plating, +/area/deathmatch) +"cM" = ( +/obj/effect/turf_decal/bot, +/turf/open/indestructible/large, +/area/deathmatch) +"dc" = ( +/obj/effect/turf_decal/tile/dark_red{ + dir = 1 + }, +/obj/machinery/computer, +/turf/open/indestructible/large, +/area/deathmatch) +"dg" = ( +/obj/effect/turf_decal/tile/brown/half, +/turf/open/indestructible/large, +/area/deathmatch) +"dw" = ( +/obj/structure/closet/crate/cardboard, +/obj/effect/turf_decal/tile/brown/fourcorners, +/obj/item/mail/junkmail, +/obj/item/ammo_casing/a357, +/obj/item/reagent_containers/syringe/plasma, +/turf/open/indestructible, +/area/deathmatch) +"dF" = ( +/obj/effect/turf_decal/tile/brown/fourcorners, +/obj/effect/turf_decal/delivery, +/turf/open/indestructible, +/area/deathmatch) +"dV" = ( +/obj/effect/turf_decal/tile/blue/fourcorners, +/obj/structure/table/glass, +/obj/item/stack/medical/mesh, +/turf/open/indestructible/white, +/area/deathmatch) +"ep" = ( +/obj/effect/turf_decal/tile/dark_red/anticorner{ + dir = 4 + }, +/obj/machinery/computer{ + dir = 4 + }, +/turf/open/indestructible/large, +/area/deathmatch) +"ew" = ( +/obj/effect/decal/cleanable/dirt, +/obj/structure/fluff/fake_scrubber, +/turf/open/indestructible/plating, +/area/deathmatch) +"eH" = ( +/obj/effect/turf_decal/delivery, +/turf/open/indestructible/large, +/area/deathmatch) +"eJ" = ( +/obj/effect/turf_decal/tile/red/full, +/obj/machinery/door/poddoor/shutters/indestructible/preopen{ + id = "Starwars" + }, +/turf/open/indestructible/dark/smooth_large, +/area/deathmatch) +"eV" = ( +/obj/effect/turf_decal/tile/blue/fourcorners, +/obj/structure/table/glass, +/obj/item/reagent_containers/syringe/epinephrine, +/turf/open/indestructible/white, +/area/deathmatch) +"fe" = ( +/obj/effect/turf_decal/tile/red/anticorner{ + dir = 8 + }, +/obj/effect/landmark/deathmatch_player_spawn, +/turf/open/indestructible/dark/smooth_large, +/area/deathmatch) +"fs" = ( +/obj/structure/ore_box, +/turf/open/indestructible/large, +/area/deathmatch) +"fy" = ( +/obj/structure/table/glass, +/obj/item/retractor, +/turf/open/indestructible/white/smooth_large, +/area/deathmatch) +"fD" = ( +/obj/effect/turf_decal/tile/dark_red/half{ + dir = 1 + }, +/obj/machinery/computer, +/turf/open/indestructible/large, +/area/deathmatch) +"fN" = ( +/turf/open/indestructible/dark/smooth_large, +/area/deathmatch) +"fU" = ( +/obj/structure/chair, +/turf/open/indestructible/dark/smooth_large, +/area/deathmatch) +"gf" = ( +/obj/structure/closet/crate/cardboard, +/obj/effect/turf_decal/tile/brown/fourcorners, +/obj/effect/turf_decal/delivery, +/obj/item/mail/junkmail, +/obj/effect/spawner/random/maintenance, +/obj/item/assembly/igniter, +/turf/open/indestructible, +/area/deathmatch) +"gE" = ( +/obj/effect/turf_decal/box, +/turf/open/indestructible/large, +/area/deathmatch) +"gJ" = ( +/obj/effect/mapping_helpers/broken_floor, +/obj/effect/spawner/random/trash/grille_or_waste, +/turf/open/indestructible/plating, +/area/deathmatch) +"gN" = ( +/obj/machinery/button/door{ + id = "Starwars" + }, +/obj/structure/table/reinforced, +/obj/structure/window/spawner/directional/north, +/turf/open/indestructible/dark/smooth_large, +/area/deathmatch) +"gR" = ( +/obj/structure/closet/crate/large, +/obj/effect/turf_decal/tile/brown/fourcorners, +/obj/effect/turf_decal/delivery, +/obj/item/mail/junkmail, +/obj/item/stack/cable_coil, +/turf/open/indestructible, +/area/deathmatch) +"ht" = ( +/obj/effect/turf_decal/tile/brown{ + dir = 4 + }, +/turf/open/indestructible/large, +/area/deathmatch) +"hJ" = ( +/obj/structure/table/reinforced, +/obj/machinery/button/door{ + id = "Starwars" + }, +/obj/structure/window/spawner/directional/south, +/turf/open/indestructible/dark/smooth_large, +/area/deathmatch) +"hV" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/dirt, +/obj/effect/mapping_helpers/broken_floor, +/obj/effect/decal/cleanable/insectguts, +/turf/open/indestructible/plating, +/area/deathmatch) +"il" = ( +/obj/structure/table/glass, +/obj/effect/spawner/random/medical/surgery_tool, +/turf/open/indestructible/white/smooth_large, +/area/deathmatch) +"in" = ( +/obj/effect/turf_decal/tile/red/full, +/obj/effect/turf_decal/bot, +/turf/open/indestructible/dark/smooth_large, +/area/deathmatch) +"iq" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/blood/gibs/core, +/obj/effect/spawner/random/maintenance/two, +/turf/open/indestructible/plating, +/area/deathmatch) +"ir" = ( +/obj/effect/turf_decal/tile/brown/half{ + dir = 8 + }, +/turf/open/indestructible/large, +/area/deathmatch) +"iz" = ( +/obj/structure/rack, +/obj/item/shield/riot, +/turf/open/indestructible/vault, +/area/deathmatch) +"iH" = ( +/obj/effect/turf_decal/tile/blue/full, +/obj/machinery/light/directional/west, +/obj/structure/table/glass, +/obj/item/stack/medical/suture, +/turf/open/indestructible/white, +/area/deathmatch) +"jh" = ( +/obj/machinery/stasis{ + dir = 1 + }, +/obj/effect/turf_decal/tile/blue/full, +/obj/item/reagent_containers/cup/beaker/large, +/turf/open/indestructible/white/smooth_large, +/area/deathmatch) +"jK" = ( +/obj/effect/turf_decal/tile/dark_red/anticorner, +/turf/open/indestructible/large, +/area/deathmatch) +"ks" = ( +/obj/structure/table/glass, +/obj/item/storage/medkit/toxin, +/obj/machinery/light/directional/north, +/turf/open/indestructible/white, +/area/deathmatch) +"kz" = ( +/obj/item/storage/medkit/fire, +/obj/structure/table/glass, +/turf/open/indestructible/white, +/area/deathmatch) +"kA" = ( +/obj/effect/spawner/random/maintenance/three, +/obj/structure/table, +/turf/open/indestructible/plating, +/area/deathmatch) +"kC" = ( +/obj/structure/rack, +/obj/item/gun/energy/e_gun/mini, +/turf/open/indestructible/vault, +/area/deathmatch) +"kD" = ( +/obj/item/reagent_containers/syringe/multiver, +/turf/open/indestructible/white/smooth_large, +/area/deathmatch) +"kF" = ( +/obj/effect/turf_decal/tile/red/full, +/turf/open/indestructible/dark/smooth_large, +/area/deathmatch) +"kG" = ( +/obj/effect/turf_decal/tile/brown{ + dir = 8 + }, +/turf/open/indestructible/large, +/area/deathmatch) +"mu" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/glass, +/turf/open/indestructible/plating, +/area/deathmatch) +"my" = ( +/obj/effect/turf_decal/tile/blue/full, +/obj/structure/table/glass, +/obj/item/reagent_containers/syringe/contraband/krokodil, +/turf/open/indestructible/white, +/area/deathmatch) +"mz" = ( +/obj/effect/turf_decal/tile/blue/fourcorners, +/obj/structure/table/glass, +/obj/item/reagent_containers/syringe/contraband/morphine, +/turf/open/indestructible/white, +/area/deathmatch) +"mK" = ( +/obj/structure/tank_holder/extinguisher, +/turf/open/indestructible/white, +/area/deathmatch) +"nl" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/insectguts, +/turf/open/indestructible/plating, +/area/deathmatch) +"nG" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/spawner/random/trash/grille_or_waste, +/turf/open/indestructible/plating, +/area/deathmatch) +"nT" = ( +/obj/structure/fluff/fake_scrubber, +/turf/open/indestructible/plating, +/area/deathmatch) +"nV" = ( +/obj/effect/decal/cleanable/blood/old, +/obj/effect/spawner/random/trash/bin, +/obj/item/reagent_containers/cup/glass/drinkingglass, +/turf/open/indestructible/plating, +/area/deathmatch) +"oo" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/dirt, +/obj/effect/spawner/random/trash/grille_or_waste, +/turf/open/indestructible/plating, +/area/deathmatch) +"oq" = ( +/obj/effect/turf_decal/tile/blue/anticorner{ + dir = 1 + }, +/obj/structure/table/glass, +/obj/item/reagent_containers/syringe/contraband/space_drugs, +/turf/open/indestructible/white/smooth_large, +/area/deathmatch) +"oC" = ( +/obj/effect/turf_decal/tile/red/anticorner, +/obj/effect/landmark/deathmatch_player_spawn, +/turf/open/indestructible/dark/smooth_large, +/area/deathmatch) +"oL" = ( +/obj/structure/table/glass, +/obj/effect/turf_decal/tile/blue/fourcorners, +/obj/effect/spawner/random/medical/surgery_tool, +/turf/open/indestructible/white, +/area/deathmatch) +"pU" = ( +/obj/effect/turf_decal/tile/blue{ + dir = 4 + }, +/obj/effect/turf_decal/tile/blue{ + dir = 8 + }, +/obj/effect/turf_decal/tile/blue, +/obj/structure/table/glass, +/obj/item/reagent_containers/syringe/multiver, +/turf/open/indestructible/white, +/area/deathmatch) +"pX" = ( +/obj/effect/turf_decal/tile/dark_red{ + dir = 8 + }, +/obj/machinery/computer{ + dir = 4 + }, +/turf/open/indestructible/large, +/area/deathmatch) +"qf" = ( +/obj/effect/turf_decal/tile/brown/half{ + dir = 1 + }, +/turf/open/indestructible/large, +/area/deathmatch) +"qm" = ( +/obj/structure/window/reinforced/spawner/directional/south, +/obj/structure/window/reinforced/spawner/directional/west, +/obj/structure/window/reinforced/spawner/directional/north, +/obj/structure/window/reinforced/spawner/directional/east, +/obj/structure/table/reinforced/plastitaniumglass, +/obj/item/clothing/mask/gas/sechailer/swat, +/obj/machinery/light/floor, +/obj/item/dualsaber/red, +/turf/open/indestructible/dark/smooth_large, +/area/deathmatch) +"qs" = ( +/obj/machinery/computer, +/obj/structure/window/spawner/directional/north, +/obj/structure/window/spawner/directional/west, +/turf/open/indestructible/dark/smooth_large, +/area/deathmatch) +"qR" = ( +/obj/machinery/computer{ + dir = 1 + }, +/obj/structure/window/spawner/directional/south, +/obj/structure/window/spawner/directional/east, +/turf/open/indestructible/dark/smooth_large, +/area/deathmatch) +"qT" = ( +/obj/effect/decal/cleanable/dirt, +/turf/open/indestructible/plating, +/area/deathmatch) +"qU" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/dirt, +/obj/structure/grille, +/obj/effect/mapping_helpers/broken_floor, +/turf/open/indestructible/plating, +/area/deathmatch) +"rc" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/dirt, +/obj/effect/mapping_helpers/broken_floor, +/turf/open/indestructible/plating, +/area/deathmatch) +"rj" = ( +/obj/structure/ore_box, +/obj/effect/turf_decal/tile/brown/fourcorners, +/turf/open/indestructible, +/area/deathmatch) +"rk" = ( +/obj/effect/turf_decal/tile/brown/fourcorners, +/obj/item/knife/kitchen, +/turf/open/indestructible, +/area/deathmatch) +"rw" = ( +/obj/effect/turf_decal/tile/blue{ + dir = 1 + }, +/obj/effect/turf_decal/tile/blue{ + dir = 4 + }, +/obj/effect/turf_decal/tile/blue, +/obj/vehicle/ridden/wheelchair{ + dir = 1 + }, +/turf/open/indestructible/white, +/area/deathmatch) +"rA" = ( +/obj/effect/turf_decal/tile/red/anticorner{ + dir = 4 + }, +/turf/open/indestructible/dark/smooth_large, +/area/deathmatch) +"rO" = ( +/obj/structure/table/glass, +/obj/item/reagent_containers/dropper, +/turf/open/indestructible/white/smooth_large, +/area/deathmatch) +"rR" = ( +/obj/structure/closet/crate/large, +/obj/effect/turf_decal/tile/brown/fourcorners, +/obj/item/mail/junkmail, +/obj/item/mail/junkmail, +/obj/item/stack/medical/mesh, +/turf/open/indestructible, +/area/deathmatch) +"rU" = ( +/obj/item/storage/medkit/brute, +/obj/structure/table/glass, +/obj/machinery/light/directional/west, +/turf/open/indestructible/white, +/area/deathmatch) +"rX" = ( +/obj/structure/table/glass, +/obj/item/reagent_containers/pill/patch/synthflesh, +/turf/open/indestructible/white, +/area/deathmatch) +"sk" = ( +/obj/effect/mapping_helpers/broken_floor, +/obj/effect/decal/cleanable/glass, +/turf/open/indestructible/plating, +/area/deathmatch) +"sl" = ( +/obj/structure/table/glass, +/obj/effect/turf_decal/tile/blue/anticorner{ + dir = 1 + }, +/obj/item/reagent_containers/syringe/contraband/morphine, +/turf/open/indestructible/white/smooth_large, +/area/deathmatch) +"sx" = ( +/obj/effect/turf_decal/tile/red/full, +/obj/machinery/light/directional/west, +/turf/open/indestructible/dark/smooth_large, +/area/deathmatch) +"sM" = ( +/obj/effect/turf_decal/tile/red/anticorner{ + dir = 1 + }, +/turf/open/indestructible/dark/smooth_large, +/area/deathmatch) +"sQ" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/mapping_helpers/broken_floor, +/obj/effect/landmark/deathmatch_player_spawn, +/turf/open/indestructible/plating, +/area/deathmatch) +"sZ" = ( +/turf/open/indestructible/white/smooth_large, +/area/deathmatch) +"tb" = ( +/obj/effect/turf_decal/tile/red/anticorner{ + dir = 8 + }, +/turf/open/indestructible/dark/smooth_large, +/area/deathmatch) +"tl" = ( +/obj/effect/turf_decal/tile/blue/full, +/turf/open/indestructible/white/smooth_large, +/area/deathmatch) +"tm" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/blood/splatter, +/turf/open/indestructible/plating, +/area/deathmatch) +"to" = ( +/obj/effect/turf_decal/tile/brown/fourcorners, +/obj/effect/turf_decal/delivery, +/obj/machinery/light/directional/east, +/turf/open/indestructible, +/area/deathmatch) +"ty" = ( +/obj/structure/reagent_dispensers/fueltank, +/turf/open/indestructible/plating, +/area/deathmatch) +"tS" = ( +/obj/effect/turf_decal/bot, +/obj/machinery/light/directional/east, +/turf/open/indestructible/large, +/area/deathmatch) +"tU" = ( +/obj/effect/turf_decal/tile/red/full, +/turf/closed/indestructible/reinforced, +/area/deathmatch) +"tV" = ( +/turf/template_noop, +/area/template_noop) +"ub" = ( +/obj/effect/turf_decal/tile/blue/full, +/obj/structure/table/glass, +/obj/item/stack/medical/bone_gel, +/turf/open/indestructible/white/smooth_large, +/area/deathmatch) +"ul" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/mapping_helpers/broken_floor, +/turf/open/indestructible/plating, +/area/deathmatch) +"uC" = ( +/obj/machinery/computer{ + dir = 8 + }, +/obj/structure/window/spawner/directional/east, +/turf/open/indestructible/dark/smooth_large, +/area/deathmatch) +"vl" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/heretic_rune/big, +/turf/open/indestructible/plating, +/area/deathmatch) +"vq" = ( +/obj/machinery/computer{ + dir = 4 + }, +/obj/structure/window/spawner/directional/north, +/obj/structure/window/spawner/directional/west, +/turf/open/indestructible/dark/smooth_large, +/area/deathmatch) +"vz" = ( +/obj/structure/table/glass, +/turf/open/indestructible/white, +/area/deathmatch) +"vH" = ( +/obj/effect/turf_decal/tile/dark_red/half{ + dir = 8 + }, +/obj/machinery/computer{ + dir = 4 + }, +/turf/open/indestructible/large, +/area/deathmatch) +"vS" = ( +/obj/effect/turf_decal/tile/blue/full, +/obj/structure/table/glass, +/obj/item/reagent_containers/syringe/contraband/bath_salts, +/turf/open/indestructible/white, +/area/deathmatch) +"wd" = ( +/obj/effect/turf_decal/tile/brown/fourcorners, +/obj/structure/reagent_dispensers/beerkeg, +/turf/open/indestructible, +/area/deathmatch) +"yA" = ( +/obj/effect/decal/cleanable/glass, +/turf/open/indestructible/plating, +/area/deathmatch) +"yH" = ( +/obj/machinery/computer, +/turf/open/indestructible/large, +/area/deathmatch) +"zn" = ( +/obj/effect/turf_decal/delivery, +/obj/machinery/computer{ + dir = 1 + }, +/turf/open/indestructible/large, +/area/deathmatch) +"zp" = ( +/obj/structure/closet/crate/large, +/obj/item/mail/junkmail, +/obj/item/stack/medical/suture, +/obj/item/food/pie/cream, +/turf/open/floor/glass/reinforced/plasma, +/area/deathmatch) +"zB" = ( +/obj/structure/grille/broken, +/obj/effect/decal/cleanable/blood/gibs/up, +/obj/effect/decal/cleanable/blood/splatter, +/turf/open/indestructible/plating, +/area/deathmatch) +"zF" = ( +/obj/effect/turf_decal/bot_red, +/turf/open/indestructible/large, +/area/deathmatch) +"zH" = ( +/obj/effect/turf_decal/tile/red/anticorner{ + dir = 4 + }, +/obj/structure/barricade/security/murderdome, +/turf/open/indestructible/dark/smooth_large, +/area/deathmatch) +"zK" = ( +/obj/effect/turf_decal/tile/blue/fourcorners, +/turf/open/indestructible/white, +/area/deathmatch) +"Ax" = ( +/obj/effect/decal/cleanable/dirt, +/obj/item/trash/can/food, +/turf/open/indestructible/plating, +/area/deathmatch) +"AT" = ( +/turf/open/indestructible/plating, +/area/deathmatch) +"AU" = ( +/obj/machinery/light/directional/north, +/obj/structure/tank_holder/extinguisher, +/turf/open/indestructible/white, +/area/deathmatch) +"Bf" = ( +/obj/effect/turf_decal/bot/left, +/turf/open/indestructible/large, +/area/deathmatch) +"Bg" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/blood/splatter, +/turf/open/indestructible/plating, +/area/deathmatch) +"Bm" = ( +/obj/effect/spawner/random/trash/grille_or_waste, +/turf/open/indestructible/plating, +/area/deathmatch) +"Bp" = ( +/obj/effect/decal/cleanable/dirt, +/obj/item/assembly/igniter, +/turf/open/indestructible/plating, +/area/deathmatch) +"Bt" = ( +/obj/effect/spawner/random/structure/closet_maintenance, +/obj/item/reagent_containers/cup/glass/drinkingglass, +/obj/item/reagent_containers/syringe/plasma, +/turf/open/indestructible/plating, +/area/deathmatch) +"BC" = ( +/turf/open/floor/glass/reinforced/plasma, +/area/deathmatch) +"Cf" = ( +/obj/effect/turf_decal/bot, +/obj/machinery/computer{ + dir = 4 + }, +/turf/open/indestructible/large, +/area/deathmatch) +"Cj" = ( +/obj/effect/turf_decal/tile/dark_red, +/turf/open/indestructible/large, +/area/deathmatch) +"Co" = ( +/obj/effect/turf_decal/tile/blue/anticorner{ + dir = 1 + }, +/turf/open/indestructible/white/smooth_large, +/area/deathmatch) +"Cv" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/light/directional/north, +/turf/open/indestructible/plating, +/area/deathmatch) +"CX" = ( +/obj/effect/turf_decal/tile/blue/fourcorners, +/obj/structure/bed/medical/emergency, +/turf/open/indestructible/white, +/area/deathmatch) +"Df" = ( +/obj/effect/turf_decal/tile/brown/fourcorners, +/turf/open/indestructible, +/area/deathmatch) +"DA" = ( +/obj/effect/turf_decal/tile/dark_red/anticorner{ + dir = 1 + }, +/turf/open/indestructible/large, +/area/deathmatch) +"DD" = ( +/obj/effect/turf_decal/tile/brown/fourcorners, +/obj/effect/turf_decal/delivery, +/obj/machinery/light/directional/south, +/obj/structure/tank_holder/extinguisher, +/turf/open/indestructible, +/area/deathmatch) +"Ef" = ( +/obj/structure/closet/crate/cardboard, +/obj/item/mail/junkmail, +/obj/effect/spawner/random/maintenance, +/turf/open/floor/glass/reinforced/plasma, +/area/deathmatch) +"Et" = ( +/obj/effect/turf_decal/tile/blue/fourcorners, +/obj/effect/landmark/deathmatch_player_spawn, +/turf/open/indestructible/white, +/area/deathmatch) +"Ew" = ( +/obj/effect/turf_decal/tile/dark_red{ + dir = 1 + }, +/obj/machinery/computer{ + dir = 8 + }, +/turf/open/indestructible/large, +/area/deathmatch) +"Ey" = ( +/obj/effect/decal/cleanable/dirt, +/obj/structure/grille, +/turf/open/indestructible/plating, +/area/deathmatch) +"EG" = ( +/obj/effect/turf_decal/tile/dark_red/anticorner{ + dir = 8 + }, +/turf/open/indestructible/large, +/area/deathmatch) +"ES" = ( +/obj/structure/grille/broken, +/obj/effect/decal/cleanable/glass, +/turf/open/indestructible/plating, +/area/deathmatch) +"EZ" = ( +/obj/effect/turf_decal/tile/blue/fourcorners, +/obj/item/reagent_containers/syringe/plasma, +/turf/open/indestructible/white, +/area/deathmatch) +"Fg" = ( +/obj/effect/turf_decal/tile/blue/full, +/obj/structure/table/glass, +/obj/item/circular_saw, +/turf/open/indestructible/white/smooth_large, +/area/deathmatch) +"Gv" = ( +/obj/effect/turf_decal/tile/brown/half{ + dir = 4 + }, +/turf/open/indestructible/large, +/area/deathmatch) +"GT" = ( +/obj/effect/turf_decal/bot, +/obj/effect/turf_decal/bot, +/turf/open/indestructible/large, +/area/deathmatch) +"Hq" = ( +/obj/effect/mapping_helpers/broken_floor, +/obj/structure/closet/crate/trashcart/filled, +/obj/item/reagent_containers/cup/glass/drinkingglass, +/turf/open/indestructible/plating, +/area/deathmatch) +"HE" = ( +/obj/structure/closet/crate/large, +/obj/item/mail/junkmail, +/obj/item/mail/junkmail, +/obj/item/mail/junkmail, +/obj/item/storage/toolbox/ammobox/strilka310, +/turf/open/indestructible/large, +/area/deathmatch) +"HL" = ( +/obj/structure/reagent_dispensers/watertank, +/turf/open/indestructible/plating, +/area/deathmatch) +"Is" = ( +/obj/machinery/light/floor, +/turf/open/indestructible/vault, +/area/deathmatch) +"Iw" = ( +/obj/effect/turf_decal/tile/blue/fourcorners, +/obj/structure/bed/medical/emergency, +/obj/effect/landmark/deathmatch_player_spawn, +/turf/open/indestructible/white, +/area/deathmatch) +"IC" = ( +/obj/effect/spawner/structure/window/reinforced/indestructible, +/turf/open/indestructible/plating, +/area/deathmatch) +"Jc" = ( +/obj/structure/table/glass, +/obj/item/reagent_containers/syringe, +/turf/open/indestructible/white/smooth_large, +/area/deathmatch) +"Js" = ( +/obj/effect/turf_decal/bot_red/left, +/turf/open/indestructible/large, +/area/deathmatch) +"Jv" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/blood/tracks, +/turf/open/indestructible/plating, +/area/deathmatch) +"Jx" = ( +/obj/machinery/computer{ + dir = 8 + }, +/obj/structure/window/spawner/directional/south, +/obj/structure/window/spawner/directional/east, +/turf/open/indestructible/dark/smooth_large, +/area/deathmatch) +"JE" = ( +/obj/effect/turf_decal/delivery, +/obj/machinery/computer{ + dir = 8 + }, +/turf/open/indestructible/large, +/area/deathmatch) +"JF" = ( +/obj/structure/closet/crate/large, +/obj/item/mail/junkmail, +/obj/item/ammo_casing/shotgun/buckshot, +/turf/open/floor/glass/reinforced/plasma, +/area/deathmatch) +"Ke" = ( +/obj/machinery/computer{ + dir = 4 + }, +/obj/structure/window/spawner/directional/west, +/turf/open/indestructible/dark/smooth_large, +/area/deathmatch) +"Ku" = ( +/obj/effect/turf_decal/tile/red/anticorner, +/turf/open/indestructible/dark/smooth_large, +/area/deathmatch) +"Ky" = ( +/obj/structure/table/glass, +/obj/effect/turf_decal/tile/blue/fourcorners, +/obj/item/reagent_containers/syringe/calomel, +/turf/open/indestructible/white, +/area/deathmatch) +"Kz" = ( +/obj/effect/spawner/random/trash/box, +/obj/item/ammo_box/a357, +/turf/open/indestructible/plating, +/area/deathmatch) +"KC" = ( +/obj/structure/closet/crate/cardboard, +/obj/effect/turf_decal/tile/brown/fourcorners, +/obj/item/mail/junkmail, +/obj/item/mail/junkmail, +/obj/effect/spawner/random/maintenance, +/turf/open/indestructible, +/area/deathmatch) +"KJ" = ( +/obj/effect/landmark/deathmatch_player_spawn, +/turf/open/floor/glass/reinforced/plasma, +/area/deathmatch) +"KM" = ( +/obj/effect/turf_decal/tile/blue/full, +/obj/structure/table/glass, +/obj/item/reagent_containers/syringe, +/turf/open/indestructible/white, +/area/deathmatch) +"KS" = ( +/obj/effect/mapping_helpers/broken_floor, +/obj/item/spear/explosive, +/obj/effect/spawner/random/trash/box, +/turf/open/indestructible/plating, +/area/deathmatch) +"KX" = ( +/turf/closed/indestructible/reinforced, +/area/deathmatch) +"LE" = ( +/obj/effect/turf_decal/tile/dark_red{ + dir = 1 + }, +/turf/open/indestructible/large, +/area/deathmatch) +"LM" = ( +/obj/structure/closet/crate/large, +/obj/item/mail/junkmail, +/obj/item/mail/junkmail, +/obj/item/throwing_star, +/turf/open/indestructible/large, +/area/deathmatch) +"LS" = ( +/obj/effect/turf_decal/tile/dark_red{ + dir = 8 + }, +/obj/machinery/computer{ + dir = 1 + }, +/turf/open/indestructible/large, +/area/deathmatch) +"LY" = ( +/obj/structure/closet/secure_closet, +/obj/item/gun/energy/beam_rifle, +/turf/open/indestructible/vault, +/area/deathmatch) +"Mc" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/mapping_helpers/broken_floor, +/obj/effect/decal/cleanable/glass, +/turf/open/indestructible/plating, +/area/deathmatch) +"Me" = ( +/obj/structure/rack, +/obj/item/throwing_star, +/turf/open/indestructible/vault, +/area/deathmatch) +"Mx" = ( +/obj/structure/table/glass, +/obj/item/reagent_containers/syringe/calomel, +/turf/open/indestructible/white/smooth_large, +/area/deathmatch) +"ME" = ( +/obj/effect/spawner/random/trash/soap, +/obj/machinery/door/poddoor/shutters/indestructible/preopen{ + id = "Starwars" + }, +/turf/open/indestructible/plating, +/area/deathmatch) +"MN" = ( +/obj/structure/ore_box, +/obj/effect/turf_decal/tile/brown/fourcorners, +/obj/effect/turf_decal/delivery, +/turf/open/indestructible, +/area/deathmatch) +"MT" = ( +/obj/structure/grille/broken, +/turf/open/indestructible/plating, +/area/deathmatch) +"Nc" = ( +/obj/effect/decal/cleanable/dirt, +/obj/structure/grille/broken, +/obj/item/extinguisher, +/turf/open/indestructible/plating, +/area/deathmatch) +"Nv" = ( +/obj/item/reagent_containers/syringe/syriniver, +/turf/open/indestructible/white/smooth_large, +/area/deathmatch) +"NF" = ( +/obj/effect/turf_decal/bot, +/obj/machinery/light/directional/north, +/obj/machinery/computer, +/turf/open/indestructible/large, +/area/deathmatch) +"NL" = ( +/obj/structure/ore_box, +/obj/effect/turf_decal/box, +/turf/open/indestructible/large, +/area/deathmatch) +"NP" = ( +/obj/effect/turf_decal/bot, +/obj/machinery/light/directional/south, +/obj/machinery/computer{ + dir = 1 + }, +/turf/open/indestructible/large, +/area/deathmatch) +"NV" = ( +/obj/machinery/computer{ + dir = 8 + }, +/turf/open/indestructible/large, +/area/deathmatch) +"Og" = ( +/obj/effect/decal/cleanable/dirt, +/obj/structure/grille/broken, +/obj/effect/decal/cleanable/glass, +/turf/open/indestructible/plating, +/area/deathmatch) +"Ot" = ( +/obj/effect/turf_decal/tile/dark_red{ + dir = 4 + }, +/obj/machinery/computer, +/turf/open/indestructible/large, +/area/deathmatch) +"Pj" = ( +/obj/effect/turf_decal/bot, +/obj/machinery/computer{ + dir = 8 + }, +/turf/open/indestructible/large, +/area/deathmatch) +"Po" = ( +/obj/effect/turf_decal/tile/red/full, +/obj/machinery/light/directional/south, +/turf/open/indestructible/dark/smooth_large, +/area/deathmatch) +"Pp" = ( +/obj/structure/ore_box, +/turf/open/floor/glass/reinforced/plasma, +/area/deathmatch) +"PH" = ( +/obj/machinery/computer{ + dir = 1 + }, +/turf/open/indestructible/large, +/area/deathmatch) +"PK" = ( +/obj/structure/holosign/barrier, +/turf/open/indestructible/vault, +/area/deathmatch) +"PV" = ( +/obj/effect/turf_decal/tile/dark_red/half{ + dir = 4 + }, +/obj/machinery/computer{ + dir = 8 + }, +/turf/open/indestructible/large, +/area/deathmatch) +"Qd" = ( +/turf/open/indestructible/large, +/area/deathmatch) +"Qh" = ( +/obj/structure/grille/broken, +/obj/effect/mapping_helpers/broken_floor, +/turf/open/indestructible/plating, +/area/deathmatch) +"QE" = ( +/obj/effect/turf_decal/bot_red, +/obj/structure/chair{ + dir = 4 + }, +/turf/open/indestructible/large, +/area/deathmatch) +"QF" = ( +/obj/effect/turf_decal/delivery, +/obj/machinery/computer, +/turf/open/indestructible/large, +/area/deathmatch) +"QG" = ( +/obj/effect/decal/cleanable/dirt, +/obj/item/trash/boritos, +/turf/open/indestructible/plating, +/area/deathmatch) +"QO" = ( +/obj/structure/closet, +/obj/item/toy/plush/lizard_plushie/green, +/turf/template_noop, +/area/template_noop) +"QS" = ( +/obj/effect/turf_decal/bot_red, +/turf/open/indestructible/plating, +/area/deathmatch) +"QU" = ( +/obj/effect/turf_decal/bot, +/obj/structure/chair{ + dir = 8 + }, +/turf/open/indestructible/large, +/area/deathmatch) +"Ra" = ( +/obj/effect/mapping_helpers/broken_floor, +/obj/effect/decal/cleanable/glass, +/obj/effect/landmark/deathmatch_player_spawn, +/turf/open/indestructible/plating, +/area/deathmatch) +"Rt" = ( +/obj/effect/decal/cleanable/dirt, +/obj/item/stack/cable_coil, +/turf/open/indestructible/plating, +/area/deathmatch) +"RJ" = ( +/obj/effect/decal/cleanable/greenglow, +/obj/item/stack/medical/suture, +/turf/open/indestructible/plating, +/area/deathmatch) +"Sh" = ( +/obj/effect/turf_decal/tile/dark_red/half, +/obj/machinery/computer{ + dir = 1 + }, +/turf/open/indestructible/large, +/area/deathmatch) +"SI" = ( +/obj/effect/turf_decal/tile/brown/fourcorners, +/obj/structure/closet/crate/mail, +/obj/item/clothing/under/misc/mailman, +/obj/item/clothing/head/costume/mailman, +/turf/open/indestructible, +/area/deathmatch) +"SV" = ( +/obj/structure/closet/crate/cardboard, +/obj/effect/turf_decal/tile/brown/fourcorners, +/obj/item/mail/junkmail, +/obj/effect/spawner/random/maintenance, +/turf/open/indestructible, +/area/deathmatch) +"Tj" = ( +/turf/open/indestructible/white, +/area/deathmatch) +"TB" = ( +/obj/effect/turf_decal/tile/dark_red/anticorner{ + dir = 4 + }, +/turf/open/indestructible/large, +/area/deathmatch) +"UQ" = ( +/obj/effect/turf_decal/tile/dark_red{ + dir = 4 + }, +/turf/open/indestructible/large, +/area/deathmatch) +"US" = ( +/turf/closed/indestructible/reinforced, +/area/deathmatch) +"Ve" = ( +/obj/effect/turf_decal/tile/red/full, +/obj/structure/barricade/security/murderdome, +/turf/open/indestructible/dark/smooth_large, +/area/deathmatch) +"Vz" = ( +/obj/machinery/stasis{ + dir = 4 + }, +/obj/effect/turf_decal/tile/blue/full, +/turf/open/indestructible/white/smooth_large, +/area/deathmatch) +"VG" = ( +/obj/effect/decal/cleanable/dirt, +/obj/structure/grille, +/obj/effect/mapping_helpers/broken_floor, +/turf/open/indestructible/plating, +/area/deathmatch) +"WG" = ( +/obj/structure/table, +/obj/effect/spawner/random/maintenance/four, +/turf/open/indestructible/plating, +/area/deathmatch) +"Xf" = ( +/obj/effect/turf_decal/bot, +/obj/machinery/light/directional/west, +/obj/machinery/computer{ + dir = 4 + }, +/turf/open/indestructible/large, +/area/deathmatch) +"Xk" = ( +/obj/effect/turf_decal/tile/blue/anticorner, +/turf/open/indestructible/white/smooth_large, +/area/deathmatch) +"Xn" = ( +/obj/structure/grille, +/turf/open/indestructible/plating, +/area/deathmatch) +"Xq" = ( +/obj/structure/table/glass, +/obj/item/reagent_containers/cup/beaker/large, +/obj/item/stack/medical/mesh, +/turf/open/indestructible/white, +/area/deathmatch) +"XG" = ( +/obj/effect/spawner/structure/window, +/turf/open/indestructible/plating, +/area/deathmatch) +"XV" = ( +/obj/effect/spawner/random/structure/closet_maintenance, +/obj/item/stack/cable_coil, +/turf/open/indestructible/plating, +/area/deathmatch) +"Ye" = ( +/obj/effect/turf_decal/tile/brown/fourcorners, +/obj/structure/closet/crate/large, +/obj/item/mail/junkmail, +/obj/item/mail/junkmail, +/obj/item/mail/junkmail, +/obj/item/reagent_containers/medigel/synthflesh, +/turf/open/indestructible, +/area/deathmatch) +"Yf" = ( +/obj/effect/turf_decal/tile/red/anticorner, +/obj/structure/barricade/security/murderdome, +/turf/open/indestructible/dark/smooth_large, +/area/deathmatch) +"Yg" = ( +/obj/structure/table/glass, +/obj/effect/turf_decal/tile/blue/full, +/obj/item/reagent_containers/syringe/contraband/saturnx, +/turf/open/indestructible/white/smooth_large, +/area/deathmatch) +"Yk" = ( +/turf/open/indestructible/vault, +/area/deathmatch) +"Ym" = ( +/obj/effect/mapping_helpers/broken_floor, +/obj/effect/decal/cleanable/glass, +/obj/machinery/light/directional/east, +/turf/open/indestructible/plating, +/area/deathmatch) +"Yz" = ( +/obj/effect/mapping_helpers/broken_floor, +/obj/effect/decal/cleanable/blood/tracks, +/obj/structure/fluff/fake_scrubber, +/turf/open/indestructible/plating, +/area/deathmatch) +"Za" = ( +/obj/effect/turf_decal/tile/blue{ + dir = 8 + }, +/obj/effect/turf_decal/tile/blue, +/obj/effect/turf_decal/tile/blue{ + dir = 1 + }, +/obj/vehicle/ridden/wheelchair{ + dir = 8 + }, +/turf/open/indestructible/white, +/area/deathmatch) +"ZC" = ( +/obj/effect/turf_decal/tile/brown/half{ + dir = 1 + }, +/obj/item/stack/package_wrap, +/turf/open/indestructible/large, +/area/deathmatch) + +(1,1,1) = {" +tV +bE +bE +bE +bE +bE +bE +KX +KX +KX +KX +KX +KX +KX +KX +KX +KX +KX +KX +KX +tV +tV +tV +tV +tV +tV +tV +"} +(2,1,1) = {" +bE +QO +bE +tV +tV +IC +KX +KX +vS +iH +mK +vz +mz +KX +Ve +Ve +kF +sx +kF +KX +KX +tV +tV +tV +tV +tV +tV +"} +(3,1,1) = {" +bE +bE +tV +tV +IC +IC +US +Vz +sZ +sZ +sZ +Tj +zK +kF +sM +tb +sM +tb +Ve +kF +tU +KX +KX +tV +tV +tV +tV +"} +(4,1,1) = {" +bE +tV +tV +IC +IC +rU +KX +ub +sZ +Jc +fy +Tj +zK +kF +rA +Ku +zH +cp +tb +Ve +KX +kC +KX +KX +tV +tV +tV +"} +(5,1,1) = {" +bE +tV +IC +IC +kz +Xk +Fg +sl +sZ +sZ +sZ +Tj +Et +KX +kF +cj +tb +rA +Ku +KX +LY +Yk +Is +KX +KX +tV +tV +"} +(6,1,1) = {" +bE +IC +IC +ks +Xk +tl +Co +sZ +sZ +Nv +sZ +Xq +eV +KX +kF +rA +oC +cj +tb +KX +Yk +Yk +Yk +iz +KX +tV +tV +"} +(7,1,1) = {" +bE +KX +KX +KX +aY +Co +sZ +sZ +il +Za +CX +XG +XG +KX +KX +KX +Ve +rA +Ku +kF +PK +Yk +Me +KX +tU +KX +tV +"} +(8,1,1) = {" +KX +KX +jh +Yg +oq +sZ +sZ +sZ +pU +XG +XG +XG +eH +Xf +Cf +KX +KX +kF +sM +tb +kF +KX +KX +kF +kF +KX +KX +"} +(9,1,1) = {" +KX +my +sZ +sZ +sZ +sZ +Jc +rO +XG +XG +QF +eH +Qd +Qd +Qd +bR +bR +in +rA +Ku +sM +tb +cj +tb +Ve +kF +KX +"} +(10,1,1) = {" +KX +KM +kD +Mx +il +sZ +rw +XG +XG +eH +yH +Qd +pX +vH +LE +QU +GT +Js +in +kF +rA +Yf +rA +cp +fe +Ve +KX +"} +(11,1,1) = {" +KX +AU +sZ +sZ +sZ +sZ +Iw +XG +QF +Qd +Cj +jK +BC +BC +BC +ep +UQ +cM +PH +KX +kF +sM +tb +rA +Ku +kF +KX +"} +(12,1,1) = {" +KX +rX +Tj +Tj +Tj +Tj +XG +XG +eH +Qd +jK +BC +vq +Ke +fN +BC +TB +cM +PH +KX +KX +rA +Ku +cj +tb +Po +KX +"} +(13,1,1) = {" +KX +oL +EZ +zK +dV +Ky +XG +QF +ay +Ot +BC +qs +fN +fN +fN +fN +BC +Cj +Qd +ch +KX +kF +Ve +rA +Ku +kF +KX +"} +(14,1,1) = {" +KX +KX +ME +cL +KX +KX +KX +NF +aM +fD +BC +gN +fN +qm +fN +hJ +BC +Sh +aM +NP +KX +KX +KX +eJ +eJ +KX +KX +"} +(15,1,1) = {" +KX +nV +Jv +Yz +Bm +RJ +KX +ch +Qd +dc +BC +fN +fN +fN +fU +qR +BC +LS +Qd +zn +XG +SV +Df +Df +Df +gR +KX +"} +(16,1,1) = {" +KX +ul +mu +Ra +yA +gJ +KX +KX +Qd +zF +EG +BC +fN +uC +Jx +BC +DA +Qd +eH +XG +XG +fs +dg +BC +BC +MN +KX +"} +(17,1,1) = {" +KX +Cv +hV +rc +vl +Ey +ES +KX +yH +zF +pX +EG +BC +BC +BC +DA +Ew +Qd +eH +XG +SI +fs +ai +BC +BC +MN +KX +"} +(18,1,1) = {" +KX +XV +ul +cs +iq +Ey +nT +AT +QS +Bf +QE +zF +Cj +PV +UQ +Qd +Qd +eH +XG +XG +fs +HE +dg +BC +BC +DD +KX +"} +(19,1,1) = {" +KX +ty +Bm +Ey +zB +sk +qT +nl +qT +QS +NV +NV +Qd +Qd +Qd +JE +JE +XG +XG +wd +Qd +Qd +kG +ir +ir +gf +KX +"} +(20,1,1) = {" +KX +KX +MT +Ax +tm +Jv +Jv +Ey +mu +AT +KX +KX +Pj +tS +JE +XG +XG +XG +KC +Qd +gE +BC +KJ +LM +rj +KX +KX +"} +(21,1,1) = {" +tV +KX +Kz +AT +qT +oo +Ey +Bp +Bg +QG +Bm +KX +KX +KX +XG +XG +rR +Qd +Qd +NL +Pp +Ef +BC +fs +rj +KX +tV +"} +(22,1,1) = {" +tV +KX +KX +KS +AT +qT +qT +AT +ew +sQ +VG +kA +AT +KX +Df +fs +fs +Qd +Qd +Pp +Pp +zp +gE +rk +IC +IC +bE +"} +(23,1,1) = {" +tV +tV +KX +KX +AT +Qh +qT +mu +Mc +ul +qU +mu +Nc +KX +Df +Gv +Gv +Gv +ht +BC +BC +gE +Df +IC +IC +tV +bE +"} +(24,1,1) = {" +tV +tV +tV +KX +KX +WG +AT +Xn +nl +qT +Og +ul +ul +AT +Df +BC +KJ +BC +qf +fs +fs +dw +IC +IC +tV +tV +bE +"} +(25,1,1) = {" +tV +tV +tV +tV +KX +KX +HL +Bm +qT +Rt +Ey +ew +rc +AT +Df +JF +Pp +BC +ZC +rj +Ye +IC +IC +tV +bE +tV +bE +"} +(26,1,1) = {" +tV +tV +tV +tV +tV +KX +KX +KX +Bt +Ym +ty +nG +Hq +KX +dF +MN +MN +to +dF +KX +KX +IC +tV +tV +tV +bE +tV +"} +(27,1,1) = {" +tV +tV +tV +tV +tV +tV +tV +KX +KX +KX +KX +KX +KX +KX +KX +KX +KX +KX +KX +KX +tV +bE +bE +bE +bE +tV +tV +"} diff --git a/_maps/map_files/Deltastation/DeltaStation2.dmm b/_maps/map_files/Deltastation/DeltaStation2.dmm index 4ee15701502..28143ce53ea 100644 --- a/_maps/map_files/Deltastation/DeltaStation2.dmm +++ b/_maps/map_files/Deltastation/DeltaStation2.dmm @@ -1408,7 +1408,7 @@ /obj/structure/bed{ dir = 4 }, -/obj/item/bedsheet/dorms{ +/obj/effect/spawner/random/bedsheet{ dir = 1 }, /obj/item/pillow/random, @@ -1453,13 +1453,11 @@ "arr" = ( /obj/structure/table/reinforced, /obj/machinery/door/firedoor, -/obj/machinery/door/window/brigdoor/right/directional/south{ - dir = 8; +/obj/machinery/door/window/brigdoor/right/directional/west{ name = "Security Desk"; req_access = list("security") }, -/obj/machinery/door/window/right/directional/north{ - dir = 4; +/obj/machinery/door/window/right/directional/east{ name = "Security Desk" }, /obj/item/folder/red, @@ -4658,8 +4656,7 @@ /turf/open/floor/iron, /area/station/security/checkpoint/escape) "bgH" = ( -/obj/machinery/door/window/brigdoor{ - dir = 1; +/obj/machinery/door/window/brigdoor/left/directional/north{ name = "Creature Pen"; req_access = list("research") }, @@ -6450,8 +6447,7 @@ /turf/open/floor/plating, /area/station/maintenance/department/crew_quarters/bar) "bDg" = ( -/obj/machinery/door/window{ - dir = 8; +/obj/machinery/door/window/left/directional/west{ name = "Theater Stage" }, /obj/effect/decal/cleanable/dirt, @@ -6520,15 +6516,6 @@ /turf/open/floor/iron/dark, /area/station/service/theater/abandoned) "bEf" = ( -/obj/machinery/door/window{ - base_state = "rightsecure"; - dir = 4; - icon_state = "rightsecure"; - layer = 4.1; - name = "Secondary AI Core Access"; - pixel_x = 4; - req_access = list("ai_upload") - }, /obj/effect/landmark/start/ai/secondary, /obj/item/radio/intercom/directional/north{ freerange = 1; @@ -6556,15 +6543,6 @@ /turf/open/floor/circuit/green, /area/station/ai_monitored/turret_protected/ai) "bEm" = ( -/obj/machinery/door/window{ - base_state = "leftsecure"; - dir = 8; - icon_state = "leftsecure"; - layer = 4.1; - name = "Tertiary AI Core Access"; - pixel_x = -3; - req_access = list("ai_upload") - }, /obj/effect/landmark/start/ai/secondary, /obj/item/radio/intercom/directional/north{ freerange = 1; @@ -6967,8 +6945,7 @@ /turf/open/floor/iron, /area/station/engineering/main) "bIh" = ( -/obj/machinery/door/window/brigdoor{ - dir = 1; +/obj/machinery/door/window/brigdoor/left/directional/north{ name = "Creature Pen"; req_access = list("research") }, @@ -7039,10 +7016,7 @@ pixel_x = 3; pixel_y = -23 }, -/obj/machinery/door/window{ - base_state = "leftsecure"; - dir = 8; - icon_state = "leftsecure"; +/obj/machinery/door/window/brigdoor/left/directional/west{ name = "Primary AI Core Access"; req_access = list("ai_upload") }, @@ -8980,8 +8954,7 @@ /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/door/window/brigdoor{ - dir = 1; +/obj/machinery/door/window/brigdoor/left/directional/north{ id = "engcell"; name = "Engineering Cell"; req_access = list("security") @@ -9962,7 +9935,7 @@ }, /area/station/hallway/primary/port) "csO" = ( -/obj/machinery/door/window/brigdoor{ +/obj/machinery/door/window/brigdoor/left/directional/south{ name = "Creature Pen"; req_access = list("research") }, @@ -11856,13 +11829,6 @@ /obj/machinery/light/small/directional/west, /turf/open/floor/plating, /area/station/maintenance/department/eva/abandoned) -"cRR" = ( -/obj/effect/turf_decal/tile/neutral/fourcorners, -/obj/structure/table, -/obj/item/storage/medkit/regular, -/obj/machinery/light/directional/west, -/turf/open/floor/iron, -/area/station/cargo/miningoffice) "cRT" = ( /turf/open/floor/iron, /area/station/medical/abandoned) @@ -13114,6 +13080,18 @@ "diL" = ( /turf/closed/wall/r_wall, /area/station/command/bridge) +"diV" = ( +/obj/structure/table/reinforced, +/obj/item/gps/mining{ + pixel_x = -8 + }, +/obj/effect/turf_decal/tile/brown/anticorner/contrasted, +/obj/item/storage/medkit/regular{ + pixel_x = 6; + pixel_y = 10 + }, +/turf/open/floor/iron, +/area/station/cargo/miningoffice) "djd" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -14342,8 +14320,7 @@ /area/station/hallway/secondary/service) "dxi" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/door/window{ - dir = 8; +/obj/machinery/door/window/left/directional/west{ name = "Fitness Ring" }, /obj/effect/turf_decal/siding/white{ @@ -22635,6 +22612,16 @@ /obj/machinery/light/small/directional/south, /turf/open/floor/iron/dark, /area/station/hallway/secondary/entry) +"fCd" = ( +/obj/machinery/holopad/secure, +/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/machinery/door/window/brigdoor/right/directional/east{ + name = "Tertiary AI Core Access"; + req_access = list("ai_upload"); + pixel_x = 4 + }, +/turf/open/floor/iron/dark, +/area/station/ai_monitored/turret_protected/ai) "fCf" = ( /obj/machinery/door/poddoor/preopen{ id = "atmoslock"; @@ -24522,8 +24509,7 @@ /turf/open/floor/plating, /area/station/maintenance/department/science/xenobiology) "gbj" = ( -/obj/machinery/door/window/brigdoor{ - dir = 1; +/obj/machinery/door/window/brigdoor/left/directional/north{ name = "Creature Pen"; req_access = list("research") }, @@ -26151,13 +26137,6 @@ /obj/item/toy/cards/deck, /turf/open/floor/iron/grimy, /area/station/service/abandoned_gambling_den) -"gty" = ( -/obj/structure/table/reinforced, -/obj/item/folder/yellow, -/obj/item/gps/mining, -/obj/effect/turf_decal/tile/brown/anticorner/contrasted, -/turf/open/floor/iron, -/area/station/cargo/miningoffice) "gtG" = ( /obj/effect/turf_decal/stripes/line{ dir = 8 @@ -30066,10 +30045,7 @@ location = "QM #1" }, /obj/effect/turf_decal/delivery, -/mob/living/simple_animal/bot/mulebot{ - home_destination = "QM #3"; - suffix = "#3" - }, +/mob/living/simple_animal/bot/mulebot, /turf/open/floor/iron, /area/station/cargo/storage) "htQ" = ( @@ -32224,8 +32200,7 @@ /turf/open/floor/iron, /area/station/science/research/abandoned) "hXQ" = ( -/obj/machinery/door/window/left/directional/west{ - dir = 4; +/obj/machinery/door/window/left/directional/east{ name = "'Monkey Pen"; req_access = list("genetics") }, @@ -34054,8 +34029,7 @@ /obj/structure/window/reinforced/spawner/directional/south, /obj/structure/cable, /obj/structure/table/wood/fancy/red, -/obj/machinery/door/window/brigdoor/left/directional/south{ - dir = 4; +/obj/machinery/door/window/brigdoor/left/directional/east{ name = "High-Risk Modules"; req_access = list("captain") }, @@ -36060,7 +36034,7 @@ /area/station/hallway/secondary/exit/departure_lounge) "iWq" = ( /obj/structure/cable, -/obj/machinery/door/window/brigdoor{ +/obj/machinery/door/window/brigdoor/left/directional/south{ id = "cargocell"; name = "Cargo Cell"; req_access = list("brig_entrance") @@ -36112,8 +36086,7 @@ /turf/open/floor/iron, /area/station/command/heads_quarters/qm) "iWX" = ( -/obj/machinery/door/window/brigdoor{ - dir = 1; +/obj/machinery/door/window/brigdoor/left/directional/north{ name = "Creature Pen"; req_access = list("research") }, @@ -37214,8 +37187,7 @@ /turf/open/space/basic, /area/space) "jjm" = ( -/obj/machinery/door/window/brigdoor{ - dir = 1; +/obj/machinery/door/window/brigdoor/left/directional/north{ name = "Creature Pen"; req_access = list("research") }, @@ -37558,6 +37530,25 @@ }, /turf/open/floor/engine/co2, /area/station/engineering/atmos) +"jmH" = ( +/obj/structure/table/reinforced, +/obj/machinery/door/firedoor, +/obj/item/folder/yellow{ + pixel_x = -6 + }, +/obj/item/pen{ + pixel_x = -6 + }, +/obj/machinery/door/window/left/directional/north{ + req_access = list("cargo"); + name = "Office Desk" + }, +/obj/effect/turf_decal/delivery, +/obj/structure/desk_bell{ + pixel_x = 7 + }, +/turf/open/floor/iron, +/area/station/cargo/office) "jmQ" = ( /obj/structure/table/reinforced, /obj/machinery/cell_charger, @@ -38036,10 +38027,7 @@ dir = 8; id = "garbage" }, -/obj/machinery/door/window/right/directional/east{ - base_state = "left"; - dir = 1; - icon_state = "left"; +/obj/machinery/door/window/left/directional/north{ name = "Danger: Conveyor Access"; req_access = list("maint_tunnels") }, @@ -39531,9 +39519,7 @@ /turf/open/floor/iron/large, /area/station/security/checkpoint/escape) "jMk" = ( -/obj/machinery/door/window/right/directional/east{ - base_state = "left"; - icon_state = "left"; +/obj/machinery/door/window/left/directional/east{ name = "Danger: Conveyor Access"; req_access = list("maint_tunnels") }, @@ -39669,8 +39655,7 @@ /turf/open/floor/iron/dark, /area/station/medical/morgue) "jNZ" = ( -/obj/machinery/door/window{ - dir = 4; +/obj/machinery/door/window/left/directional/east{ name = "Mass Driver"; req_access = list("chapel_office") }, @@ -40650,6 +40635,21 @@ /obj/effect/turf_decal/tile/neutral/fourcorners, /turf/open/floor/iron/dark, /area/station/ai_monitored/turret_protected/aisat_interior) +"kav" = ( +/obj/effect/turf_decal/tile/brown/half/contrasted{ + dir = 4 + }, +/obj/structure/table/reinforced, +/obj/item/flashlight/lamp{ + pixel_x = -7; + pixel_y = 9 + }, +/obj/item/folder/yellow{ + pixel_y = -5; + pixel_x = 5 + }, +/turf/open/floor/iron, +/area/station/cargo/miningoffice) "kax" = ( /obj/structure/chair/office/light{ dir = 4 @@ -41869,8 +41869,7 @@ /area/station/maintenance/department/eva/abandoned) "kpc" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/door/window{ - dir = 4; +/obj/machinery/door/window/left/directional/east{ name = "Fitness Ring" }, /obj/effect/turf_decal/siding/white{ @@ -42754,8 +42753,7 @@ /turf/open/floor/plating, /area/station/science/xenobiology) "kBR" = ( -/obj/machinery/door/window{ - dir = 8; +/obj/machinery/door/window/left/directional/west{ name = "Smoking Room" }, /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ @@ -43673,8 +43671,7 @@ /turf/open/floor/iron, /area/station/hallway/secondary/exit/departure_lounge) "kPD" = ( -/obj/machinery/door/window/brigdoor{ - dir = 4; +/obj/machinery/door/window/brigdoor/left/directional/east{ name = "Secure Creature Pen"; req_access = list("research") }, @@ -44464,26 +44461,6 @@ }, /turf/open/floor/iron, /area/station/commons/dorms) -"lab" = ( -/obj/structure/table/reinforced, -/obj/machinery/door/firedoor, -/obj/item/folder/yellow{ - pixel_x = -6 - }, -/obj/item/pen{ - pixel_x = -6 - }, -/obj/machinery/door/window/left/directional/south{ - dir = 1; - req_access = list("cargo"); - name = "Office Desk" - }, -/obj/effect/turf_decal/delivery, -/obj/structure/desk_bell{ - pixel_x = 7 - }, -/turf/open/floor/iron, -/area/station/cargo/office) "lac" = ( /obj/item/kirbyplants/random, /obj/effect/turf_decal/bot/left, @@ -50878,8 +50855,7 @@ /area/station/maintenance/port/fore) "mFX" = ( /obj/structure/table/reinforced, -/obj/machinery/door/window/brigdoor/right/directional/south{ - dir = 8; +/obj/machinery/door/window/brigdoor/right/directional/west{ name = "Security Desk"; pixel_x = -8; req_one_access = list("hop","security") @@ -53041,7 +53017,7 @@ /turf/open/floor/engine, /area/station/engineering/supermatter/room) "nkj" = ( -/obj/machinery/door/window/brigdoor{ +/obj/machinery/door/window/brigdoor/left/directional/south{ name = "Creature Pen"; req_access = list("research") }, @@ -53951,8 +53927,7 @@ }, /obj/machinery/status_display/ai/directional/north, /obj/structure/table/wood/fancy/red, -/obj/machinery/door/window/brigdoor/left/directional/south{ - dir = 4; +/obj/machinery/door/window/brigdoor/left/directional/east{ name = "High-Risk Modules"; req_access = list("captain") }, @@ -55714,7 +55689,7 @@ /area/station/maintenance/department/science) "nTU" = ( /obj/structure/bed, -/obj/item/bedsheet/dorms, +/obj/effect/spawner/random/bedsheet, /obj/effect/decal/cleanable/dirt, /obj/effect/landmark/start/hangover, /obj/item/pillow/random, @@ -58498,13 +58473,10 @@ /obj/structure/window/reinforced/spawner/directional/south, /obj/structure/window/reinforced/spawner/directional/west, /obj/structure/window/reinforced/spawner/directional/north, -/obj/machinery/door/window{ - base_state = "right"; - dir = 4; - icon_state = "right"; +/obj/effect/turf_decal/delivery, +/obj/machinery/door/window/right/directional/east{ layer = 3 }, -/obj/effect/turf_decal/delivery, /turf/open/floor/iron, /area/station/maintenance/disposal) "oGr" = ( @@ -58820,7 +58792,7 @@ /area/station/maintenance/department/science) "oLO" = ( /obj/structure/bed, -/obj/item/bedsheet/dorms, +/obj/effect/spawner/random/bedsheet, /obj/machinery/status_display/evac/directional/east, /obj/item/pillow/random, /turf/open/floor/wood, @@ -63763,7 +63735,7 @@ /obj/structure/bed{ dir = 4 }, -/obj/item/bedsheet/dorms{ +/obj/effect/spawner/random/bedsheet{ dir = 1 }, /obj/machinery/status_display/evac/directional/north, @@ -67565,14 +67537,6 @@ /obj/effect/decal/cleanable/dirt, /turf/open/floor/plating, /area/station/maintenance/fore) -"qQy" = ( -/obj/effect/turf_decal/tile/brown/half/contrasted{ - dir = 4 - }, -/obj/structure/table/reinforced, -/obj/item/flashlight/lamp, -/turf/open/floor/iron, -/area/station/cargo/miningoffice) "qQE" = ( /obj/effect/turf_decal/delivery, /turf/open/floor/iron, @@ -71885,7 +71849,7 @@ /turf/open/floor/plating, /area/station/science/explab) "rUl" = ( -/obj/machinery/door/window/brigdoor{ +/obj/machinery/door/window/brigdoor/left/directional/south{ name = "Creature Pen"; req_access = list("research") }, @@ -72570,10 +72534,7 @@ /turf/open/floor/plating, /area/station/service/library/abandoned) "scX" = ( -/obj/machinery/door/window{ - base_state = "rightsecure"; - dir = 4; - icon_state = "rightsecure"; +/obj/machinery/door/window/brigdoor/right/directional/east{ name = "Primary AI Core Access"; req_access = list("ai_upload") }, @@ -73193,8 +73154,7 @@ "sle" = ( /obj/structure/table/reinforced, /obj/machinery/door/firedoor, -/obj/machinery/door/window/brigdoor/right/directional/north{ - dir = 4; +/obj/machinery/door/window/brigdoor/right/directional/east{ name = "Warden's Desk"; req_access = list("armory") }, @@ -73872,10 +73832,7 @@ /obj/structure/cable, /obj/structure/table/wood/fancy/blue, /obj/structure/window/reinforced/spawner/directional/south, -/obj/machinery/door/window{ - base_state = "right"; - dir = 8; - icon_state = "right"; +/obj/machinery/door/window/right/directional/west{ name = "Core Modules"; req_access = list("captain") }, @@ -74811,6 +74768,11 @@ "sGJ" = ( /obj/machinery/holopad/secure, /obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/machinery/door/window/brigdoor/left/directional/west{ + name = "Secondary AI Core Access"; + req_access = list("ai_upload"); + pixel_x = -4 + }, /turf/open/floor/iron/dark, /area/station/ai_monitored/turret_protected/ai) "sGQ" = ( @@ -76417,6 +76379,19 @@ /obj/effect/turf_decal/tile/neutral/fourcorners, /turf/open/floor/iron/dark, /area/station/service/chapel) +"taO" = ( +/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/structure/table, +/obj/machinery/light/directional/west, +/obj/item/stack/conveyor/thirty, +/obj/item/boulder_beacon{ + pixel_x = -5 + }, +/obj/item/conveyor_switch_construct{ + pixel_x = 10 + }, +/turf/open/floor/iron, +/area/station/cargo/miningoffice) "tbd" = ( /obj/item/radio/intercom/directional/west, /obj/effect/turf_decal/tile/yellow/half/contrasted{ @@ -79720,19 +79695,6 @@ /mob/living/carbon/human/species/monkey, /turf/open/floor/iron/white, /area/station/medical/virology) -"tRV" = ( -/obj/structure/table/reinforced, -/obj/machinery/door/firedoor, -/obj/machinery/door/window/left/directional/west{ - dir = 4; - name = "Delivery Desk"; - req_access = list("cargo") - }, -/obj/effect/turf_decal/delivery, -/obj/item/paper_bin, -/obj/item/pen, -/turf/open/floor/iron, -/area/station/cargo/lobby) "tSa" = ( /obj/structure/sign/poster/random/directional/south, /obj/effect/turf_decal/tile/red/opposingcorners{ @@ -81565,10 +81527,7 @@ id = "warehouse_shutters"; name = "warehouse shutters control" }, -/mob/living/simple_animal/bot/mulebot{ - home_destination = "QM #1"; - suffix = "#1" - }, +/mob/living/simple_animal/bot/mulebot, /turf/open/floor/iron, /area/station/cargo/storage) "upB" = ( @@ -82728,7 +82687,7 @@ /area/station/tcommsat/server) "uEo" = ( /obj/structure/bed/double, -/obj/item/bedsheet/dorms_double, +/obj/effect/spawner/random/bedsheet/double, /obj/machinery/status_display/evac/directional/east, /obj/effect/landmark/start/hangover, /obj/item/pillow/random, @@ -86916,10 +86875,7 @@ /obj/structure/sign/warning/electric_shock/directional/east, /obj/machinery/status_display/ai/directional/north, /obj/structure/table/wood/fancy/blue, -/obj/machinery/door/window{ - base_state = "right"; - dir = 8; - icon_state = "right"; +/obj/machinery/door/window/right/directional/west{ name = "Core Modules"; req_access = list("captain") }, @@ -87880,8 +87836,7 @@ /obj/effect/turf_decal/stripes/line{ dir = 4 }, -/obj/machinery/door/window/left/directional/west{ - dir = 4; +/obj/machinery/door/window/left/directional/east{ name = "Pharmacy Desk"; req_access = list("pharmacy") }, @@ -90460,6 +90415,18 @@ }, /turf/open/floor/iron/white, /area/station/medical/paramedic) +"wAl" = ( +/obj/structure/table/reinforced, +/obj/machinery/door/firedoor, +/obj/machinery/door/window/left/directional/east{ + name = "Delivery Desk"; + req_access = list("cargo") + }, +/obj/effect/turf_decal/delivery, +/obj/item/paper_bin, +/obj/item/pen, +/turf/open/floor/iron, +/area/station/cargo/lobby) "wAt" = ( /obj/machinery/hydroponics/soil, /obj/item/cultivator, @@ -93220,9 +93187,7 @@ id = "visitation"; name = "Visitation Shutters" }, -/obj/machinery/door/window/right/directional/south{ - dir = 4 - }, +/obj/machinery/door/window/right/directional/east, /turf/open/floor/iron, /area/station/security/prison/visit) "xms" = ( @@ -93261,8 +93226,7 @@ id = "justicechamber"; name = "Justice Chamber Blast Door" }, -/obj/machinery/door/window/brigdoor/right/directional/north{ - dir = 2; +/obj/machinery/door/window/brigdoor/right/directional/south{ name = "Justice Chamber"; req_access = list("armory") }, @@ -93685,7 +93649,7 @@ /area/station/science/genetics) "xso" = ( /obj/structure/bed/double, -/obj/item/bedsheet/random/double, +/obj/effect/spawner/random/bedsheet/any/double, /turf/open/floor/wood, /area/station/maintenance/port/aft) "xsp" = ( @@ -93714,8 +93678,7 @@ /turf/open/space, /area/space/nearstation) "xsH" = ( -/obj/machinery/door/window/brigdoor{ - dir = 8; +/obj/machinery/door/window/brigdoor/left/directional/west{ name = "Secure Creature Pen"; req_access = list("research") }, @@ -96461,7 +96424,7 @@ /turf/open/floor/iron, /area/station/cargo/storage) "ycY" = ( -/obj/machinery/door/window/brigdoor{ +/obj/machinery/door/window/brigdoor/left/directional/south{ name = "Creature Pen"; req_access = list("research") }, @@ -96719,7 +96682,7 @@ /turf/open/floor/iron, /area/station/cargo/lobby) "ygV" = ( -/obj/machinery/door/window/brigdoor{ +/obj/machinery/door/window/brigdoor/left/directional/south{ name = "Creature Pen"; req_access = list("research") }, @@ -106491,7 +106454,7 @@ cQh nkb eLP kXJ -sGJ +fCd kXJ kXJ xMX @@ -138598,7 +138561,7 @@ hqK hLa rve iJr -lab +jmH qQE xjx euK @@ -139114,7 +139077,7 @@ vKl wfK hoC yfI -tRV +wAl kGo vSm xhW @@ -142458,7 +142421,7 @@ aFb sAL occ lDu -cRR +taO eCQ tpZ uoz @@ -143228,8 +143191,8 @@ uMS jyZ azD cTv -qQy -gty +kav +diV tDD rWo aad diff --git a/_maps/map_files/IceBoxStation/IceBoxStation.dmm b/_maps/map_files/IceBoxStation/IceBoxStation.dmm index b55e1fa9a15..dc78c9b621c 100644 --- a/_maps/map_files/IceBoxStation/IceBoxStation.dmm +++ b/_maps/map_files/IceBoxStation/IceBoxStation.dmm @@ -143,6 +143,20 @@ /obj/effect/turf_decal/tile/blue/full, /turf/open/floor/iron/large, /area/station/medical/treatment_center) +"adm" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/machinery/light/small/directional/east, +/obj/machinery/conveyor{ + id = "mining_internal" + }, +/obj/machinery/bouldertech/refinery, +/turf/open/floor/iron, +/area/mine/production) "adq" = ( /obj/machinery/door/airlock/maintenance, /obj/effect/mapping_helpers/airlock/unres{ @@ -231,12 +245,6 @@ /obj/structure/sign/warning, /turf/closed/wall, /area/station/maintenance/port/fore) -"afl" = ( -/obj/effect/turf_decal/delivery, -/obj/machinery/firealarm/directional/north, -/obj/structure/cable, -/turf/open/floor/iron, -/area/mine/production) "afp" = ( /obj/machinery/air_sensor/nitrogen_tank, /turf/open/floor/engine/n2, @@ -1088,7 +1096,6 @@ /turf/open/floor/plating, /area/station/maintenance/port/fore) "asJ" = ( -/obj/machinery/light/directional/east, /obj/effect/turf_decal/trimline/green/filled/line{ dir = 4 }, @@ -1637,10 +1644,7 @@ /obj/structure/desk_bell{ pixel_x = 7 }, -/obj/machinery/door/window/right/directional/east{ - base_state = "left"; - dir = 2; - icon_state = "left"; +/obj/machinery/door/window/left/directional/south{ name = "Robotics Desk"; req_access = list("robotics") }, @@ -1664,8 +1668,7 @@ /obj/structure/window/reinforced/spawner/directional/north, /obj/structure/table/wood/fancy/red, /obj/effect/spawner/random/aimodule/harmful, -/obj/machinery/door/window/brigdoor/left/directional/south{ - dir = 4; +/obj/machinery/door/window/brigdoor/left/directional/east{ name = "High-Risk Modules"; req_access = list("captain") }, @@ -1858,10 +1861,7 @@ /obj/structure/table/wood/fancy/blue, /obj/effect/spawner/random/aimodule/neutral, /obj/structure/window/reinforced/spawner/directional/north, -/obj/machinery/door/window{ - base_state = "right"; - dir = 8; - icon_state = "right"; +/obj/machinery/door/window/right/directional/west{ name = "Core Modules"; req_access = list("captain") }, @@ -1877,10 +1877,10 @@ "aEU" = ( /obj/effect/turf_decal/tile/neutral/diagonal_edge, /obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment{ - dir = 4 + dir = 6 }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/kitchen/diagonal, /area/station/service/kitchen) "aFg" = ( @@ -2015,9 +2015,6 @@ /area/station/command/meeting_room) "aHZ" = ( /obj/effect/turf_decal/tile/neutral/diagonal_edge, -/obj/structure/disposalpipe/segment{ - dir = 6 - }, /obj/effect/landmark/start/cook, /turf/open/floor/iron/kitchen/diagonal, /area/station/service/kitchen) @@ -2062,8 +2059,7 @@ /turf/open/floor/plating, /area/station/maintenance/starboard/fore) "aIN" = ( -/obj/machinery/door/window/brigdoor/security/cell{ - dir = 8; +/obj/machinery/door/window/brigdoor/security/cell/left/directional/west{ id = "Cell 3"; name = "Cell 3" }, @@ -2287,8 +2283,7 @@ /turf/open/floor/engine, /area/station/engineering/supermatter/room) "aMd" = ( -/obj/machinery/door/window/left/directional/east{ - icon_state = "right"; +/obj/machinery/door/window/right/directional/east{ name = "Incoming Mail"; req_access = list("shipping") }, @@ -3819,8 +3814,7 @@ /turf/open/floor/iron/dark/smooth_large, /area/station/security/checkpoint/medical) "bjn" = ( -/obj/machinery/door/window/left/directional/north{ - dir = 4; +/obj/machinery/door/window/left/directional/east{ name = "Containment Pen 11"; req_access = list("xenobiology") }, @@ -3887,8 +3881,7 @@ /turf/open/floor/iron/cafeteria, /area/station/security/prison/work) "bkq" = ( -/obj/machinery/door/window/left/directional/east{ - dir = 8; +/obj/machinery/door/window/left/directional/west{ name = "Graveyard Access"; req_access = list("chapel_office") }, @@ -4026,7 +4019,9 @@ /area/station/service/library) "bmf" = ( /obj/effect/turf_decal/tile/blue/diagonal_edge, -/obj/machinery/vending/dinnerware, +/obj/machinery/computer/order_console/cook{ + dir = 1 + }, /turf/open/floor/iron/kitchen/diagonal, /area/station/service/kitchen) "bml" = ( @@ -4078,8 +4073,7 @@ /turf/open/floor/iron/dark, /area/station/medical/medbay/aft) "bnh" = ( -/obj/machinery/door/window/left/directional/north{ - dir = 4; +/obj/machinery/door/window/left/directional/east{ name = "Containment Pen 7"; req_access = list("xenobiology") }, @@ -4403,6 +4397,19 @@ /obj/effect/decal/cleanable/dirt, /turf/open/floor/plating, /area/station/maintenance/port/greater) +"brX" = ( +/obj/structure/plasticflaps, +/obj/machinery/conveyor{ + dir = 8; + id = "mining_internal" + }, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/effect/turf_decal/stripes/line, +/obj/machinery/light/small/directional/south, +/turf/open/floor/iron, +/area/mine/production) "brY" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ dir = 1 @@ -5161,10 +5168,7 @@ /turf/open/floor/iron/white, /area/station/medical/chemistry) "bCr" = ( -/obj/machinery/door/window/right/directional/east{ - base_state = "left"; - dir = 1; - icon_state = "left"; +/obj/machinery/door/window/left/directional/north{ name = "Pharmacy Desk"; req_access = list("pharmacy") }, @@ -5363,8 +5367,7 @@ /turf/open/floor/iron, /area/station/hallway/secondary/service) "bEq" = ( -/obj/machinery/door/window/right/directional/west{ - dir = 1; +/obj/machinery/door/window/right/directional/north{ name = "Terrarium"; req_access = list("hydroponics") }, @@ -5915,18 +5918,16 @@ /turf/open/floor/iron/dark, /area/station/service/chapel) "bMu" = ( -/obj/structure/table/reinforced, -/obj/machinery/door/window/left/directional/north{ - dir = 8; - name = "Hydroponics Desk"; - req_access = list("hydroponics") +/obj/machinery/door/airlock{ + name = "Service Hall" }, -/obj/machinery/door/firedoor, -/obj/structure/desk_bell{ - pixel_x = 7 +/obj/effect/mapping_helpers/airlock/access/all/service/general, +/obj/effect/mapping_helpers/airlock/unres{ + dir = 1 }, -/turf/open/floor/iron, -/area/station/service/hydroponics) +/obj/machinery/door/firedoor, +/turf/open/floor/iron/dark/textured_half, +/area/station/hallway/secondary/service) "bMz" = ( /obj/docking_port/stationary{ dir = 8; @@ -6429,10 +6430,7 @@ id = "xenobio5"; name = "Xenobio Pen 5 Blast Door" }, -/obj/machinery/door/window/left/directional/north{ - base_state = "right"; - dir = 8; - icon_state = "right"; +/obj/machinery/door/window/right/directional/west{ name = "Containment Pen 5"; req_access = list("xenobiology") }, @@ -6834,8 +6832,7 @@ /turf/open/floor/plating, /area/station/maintenance/port/fore) "caC" = ( -/obj/machinery/door/window/right/directional/south{ - dir = 8; +/obj/machinery/door/window/right/directional/west{ name = "Monkey Pen"; req_access = list("genetics") }, @@ -6940,7 +6937,7 @@ /area/station/engineering/atmos/project) "ccp" = ( /obj/structure/bed, -/obj/item/bedsheet/dorms, +/obj/effect/spawner/random/bedsheet, /obj/effect/landmark/start/hangover, /obj/machinery/button/door/directional/south{ id = "Dorm5"; @@ -7836,6 +7833,12 @@ }, /turf/open/floor/plastic, /area/station/commons/dorms/laundry) +"coY" = ( +/obj/machinery/airalarm/directional/south, +/obj/effect/turf_decal/delivery, +/obj/effect/decal/cleanable/rubble, +/turf/open/floor/iron, +/area/mine/production) "cpe" = ( /obj/machinery/atmospherics/components/tank/air{ dir = 8 @@ -8062,6 +8065,17 @@ }, /turf/open/floor/iron/dark, /area/station/medical/morgue) +"csZ" = ( +/obj/effect/turf_decal/siding/wideplating_new/light{ + dir = 6 + }, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/landmark/start/prisoner, +/obj/machinery/duct, +/turf/open/floor/iron/showroomfloor, +/area/station/security/prison/work) "ctk" = ( /obj/effect/turf_decal/stripes/line{ dir = 8 @@ -8240,17 +8254,6 @@ /obj/structure/closet/emcloset, /turf/open/floor/plating, /area/station/maintenance/starboard/fore) -"cvG" = ( -/obj/effect/turf_decal/siding/wideplating_new/light, -/obj/item/trash/bee, -/obj/machinery/light/directional/west, -/obj/structure/cable, -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ - dir = 4 - }, -/obj/structure/sign/poster/official/moth_piping/directional/west, -/turf/open/floor/iron/showroomfloor, -/area/station/security/prison/work) "cvN" = ( /obj/machinery/atmospherics/pipe/smart/simple/scrubbers/visible{ dir = 4 @@ -8316,8 +8319,7 @@ pixel_y = -3 }, /obj/structure/window/reinforced/spawner/directional/east, -/obj/machinery/door/window/left/directional/north{ - icon_state = "right"; +/obj/machinery/door/window/right/directional/north{ name = "First-Aid Supplies"; red_alert_access = 1; req_access = list("medical") @@ -9346,8 +9348,7 @@ /obj/structure/desk_bell{ pixel_x = 6 }, -/obj/machinery/door/window/left/directional/north{ - dir = 4; +/obj/machinery/door/window/left/directional/east{ name = "Engineering Desk"; req_access = list("engineering") }, @@ -9419,7 +9420,10 @@ /obj/effect/turf_decal/tile/blue/diagonal_edge, /obj/structure/window/reinforced/spawner/directional/east, /obj/machinery/light/directional/south, -/obj/structure/closet/secure_closet/freezer/kitchen, +/obj/structure/disposalpipe/trunk{ + dir = 1 + }, +/obj/machinery/disposal/bin, /turf/open/floor/iron/kitchen/diagonal, /area/station/service/kitchen) "cMv" = ( @@ -10052,7 +10056,7 @@ /area/station/cargo/office) "cXp" = ( /obj/structure/bed/pod, -/obj/item/bedsheet/random, +/obj/effect/spawner/random/bedsheet/any, /obj/effect/mapping_helpers/broken_floor, /turf/open/floor/wood, /area/station/maintenance/port/fore) @@ -10094,10 +10098,7 @@ /turf/open/floor/iron, /area/station/maintenance/disposal/incinerator) "cXX" = ( -/obj/machinery/door/window/left/directional/north{ - base_state = "right"; - dir = 8; - icon_state = "right"; +/obj/machinery/door/window/right/directional/west{ name = "Containment Pen 11"; req_access = list("xenobiology") }, @@ -10418,7 +10419,7 @@ "dcq" = ( /obj/structure/bed, /obj/machinery/airalarm/directional/north, -/obj/item/bedsheet/dorms, +/obj/effect/spawner/random/bedsheet, /obj/machinery/button/door/directional/east{ id = "Dorm3"; name = "Dorm Bolt Control"; @@ -12006,6 +12007,23 @@ /obj/structure/disposalpipe/segment, /turf/open/floor/iron, /area/station/engineering/lobby) +"dAq" = ( +/obj/machinery/conveyor{ + id = "mining_internal" + }, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/machinery/camera{ + c_tag = "Mining Ore Smeltery"; + dir = 6 + }, +/obj/structure/sign/poster/official/random/directional/east, +/turf/open/floor/iron, +/area/mine/production) "dAx" = ( /obj/machinery/hydroponics/soil{ pixel_y = 8 @@ -12014,7 +12032,7 @@ /turf/open/floor/grass, /area/station/maintenance/starboard/aft) "dAB" = ( -/obj/machinery/door/window/brigdoor{ +/obj/machinery/door/window/brigdoor/left/directional/south{ name = "Research Director Observation"; req_access = list("rd") }, @@ -12985,10 +13003,7 @@ /turf/open/floor/plating, /area/station/maintenance/starboard/lesser) "dQZ" = ( -/obj/machinery/door/window/left/directional/north{ - base_state = "right"; - dir = 8; - icon_state = "right"; +/obj/machinery/door/window/right/directional/west{ name = "Containment Pen 9"; req_access = list("xenobiology") }, @@ -13537,20 +13552,6 @@ /obj/structure/cable, /turf/open/floor/carpet/red, /area/station/security/prison/work) -"ear" = ( -/obj/machinery/mineral/processing_unit{ - dir = 1 - }, -/obj/structure/window/reinforced/spawner/directional/west, -/obj/effect/turf_decal/stripes/line{ - dir = 8 - }, -/obj/effect/turf_decal/stripes/line{ - dir = 4 - }, -/obj/machinery/light/small/directional/east, -/turf/open/floor/iron, -/area/mine/production) "eaw" = ( /obj/effect/spawner/random/contraband/prison, /obj/structure/closet/crate, @@ -13663,11 +13664,8 @@ /turf/open/floor/iron, /area/station/hallway/secondary/entry) "ecZ" = ( -/obj/structure/table, /obj/effect/turf_decal/tile/neutral/diagonal_edge, -/obj/machinery/reagentgrinder{ - pixel_y = 9 - }, +/obj/structure/closet/secure_closet/freezer/kitchen, /turf/open/floor/iron/kitchen/diagonal, /area/station/service/kitchen) "edd" = ( @@ -14004,8 +14002,7 @@ /turf/open/floor/iron, /area/station/engineering/engine_smes) "ehO" = ( -/obj/machinery/door/window/brigdoor/right/directional/south{ - dir = 8; +/obj/machinery/door/window/brigdoor/right/directional/west{ name = "Observation Deck"; req_access = list("xenobiology") }, @@ -14144,12 +14141,12 @@ /turf/open/floor/plating, /area/station/security/prison/safe) "eke" = ( -/obj/structure/table, /obj/effect/turf_decal/tile/neutral/diagonal_edge, /obj/structure/closet/mini_fridge{ name = "mini-fridge" }, /obj/item/reagent_containers/condiment/milk, +/obj/structure/table, /turf/open/floor/iron/kitchen/diagonal, /area/station/service/kitchen) "ekh" = ( @@ -14259,8 +14256,7 @@ }, /area/station/command/heads_quarters/rd) "emM" = ( -/obj/machinery/door/window/brigdoor/security/cell{ - dir = 8; +/obj/machinery/door/window/brigdoor/security/cell/left/directional/west{ id = "Cell 1"; name = "Cell 1" }, @@ -14288,14 +14284,13 @@ /turf/open/floor/plating, /area/station/engineering/lobby) "enG" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 4 - }, -/obj/machinery/computer/department_orders/service{ +/obj/effect/turf_decal/tile/neutral/diagonal_edge, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/disposalpipe/segment{ dir = 4 }, -/turf/open/floor/plating, -/area/station/hallway/secondary/service) +/turf/open/floor/iron/kitchen/diagonal, +/area/station/service/kitchen) "enI" = ( /obj/machinery/door/airlock/maintenance{ name = "Tool Storage Maintenance" @@ -14820,18 +14815,15 @@ name = "chemistry lab access" }, /obj/effect/turf_decal/stripes/end, -/obj/machinery/door/window/right/directional/east{ - base_state = "left"; - dir = 2; - icon_state = "left"; - name = "Chemistry Lab Access Hatch"; - req_access = list("plumbing") - }, /obj/structure/sign/departments/chemistry/directional/north, /obj/structure/sign/warning/no_smoking{ pixel_x = -28 }, /obj/effect/turf_decal/tile/yellow/full, +/obj/machinery/door/window/left/directional/south{ + name = "Chemistry Lab Access Hatch"; + req_access = list("plumbing") + }, /turf/open/floor/iron/white/textured_large, /area/station/medical/treatment_center) "euZ" = ( @@ -16244,8 +16236,8 @@ /turf/open/floor/iron/dark, /area/station/service/hydroponics/garden) "eUw" = ( -/obj/structure/table, /obj/effect/turf_decal/tile/neutral/diagonal_edge, +/obj/structure/table, /obj/item/storage/bag/tray, /obj/item/knife/kitchen{ pixel_y = 2 @@ -16432,10 +16424,7 @@ /turf/open/floor/iron, /area/station/command/heads_quarters/hop) "eWh" = ( -/obj/machinery/door/window/left/directional/north{ - base_state = "right"; - dir = 8; - icon_state = "right"; +/obj/machinery/door/window/right/directional/west{ name = "Containment Pen 2"; req_access = list("xenobiology") }, @@ -17160,8 +17149,7 @@ /turf/open/floor/iron, /area/station/hallway/secondary/service) "fjt" = ( -/obj/machinery/door/window/left/directional/north{ - dir = 4; +/obj/machinery/door/window/left/directional/east{ name = "Containment Pen 9"; req_access = list("xenobiology") }, @@ -17248,8 +17236,7 @@ /turf/open/floor/iron/dark, /area/station/science/ordnance) "fkO" = ( -/obj/machinery/door/window/left/directional/west{ - dir = 2; +/obj/machinery/door/window/left/directional/south{ name = "Atmospherics Delivery"; req_access = list("atmospherics") }, @@ -17773,8 +17760,7 @@ name = "Genetics Shutters" }, /obj/machinery/door/firedoor, -/obj/machinery/door/window/right/directional/south{ - dir = 4; +/obj/machinery/door/window/right/directional/east{ name = "Genetics Desk"; req_access = list("genetics") }, @@ -18045,6 +18031,12 @@ }, /turf/open/floor/plating, /area/station/maintenance/starboard/aft) +"fxY" = ( +/obj/effect/turf_decal/bot, +/obj/machinery/light/small/directional/north, +/obj/structure/extinguisher_cabinet/directional/north, +/turf/open/floor/iron, +/area/mine/production) "fyc" = ( /obj/structure/cable, /turf/open/floor/iron/dark, @@ -18052,9 +18044,9 @@ "fyh" = ( /obj/effect/turf_decal/tile/neutral/diagonal_edge, /obj/machinery/airalarm/directional/east, -/obj/structure/sink/kitchen/directional/west, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/light/directional/east, /turf/open/floor/iron/kitchen/diagonal, /area/station/service/kitchen) "fyr" = ( @@ -18504,12 +18496,6 @@ /obj/effect/decal/cleanable/greenglow, /turf/open/floor/iron/dark, /area/station/maintenance/disposal) -"fFI" = ( -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ - dir = 1 - }, -/turf/open/floor/iron, -/area/mine/production) "fFJ" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -18994,6 +18980,7 @@ /obj/effect/turf_decal/tile/neutral/diagonal_edge, /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/disposalpipe/segment, /turf/open/floor/iron/kitchen/diagonal, /area/station/service/kitchen) "fNa" = ( @@ -19460,9 +19447,7 @@ /obj/item/folder/white, /obj/item/pen, /obj/machinery/door/firedoor, -/obj/machinery/door/window/right/directional/east{ - base_state = "left"; - icon_state = "left"; +/obj/machinery/door/window/left/directional/east{ name = "Pharmacy Desk"; req_access = list("pharmacy") }, @@ -19860,24 +19845,6 @@ /obj/structure/sign/warning/secure_area/directional/west, /turf/open/floor/plating/snowed/smoothed/icemoon, /area/icemoon/underground/explored) -"gbH" = ( -/obj/machinery/conveyor{ - id = "mining_internal" - }, -/obj/structure/window/reinforced/spawner/directional/west, -/obj/effect/turf_decal/stripes/line{ - dir = 8 - }, -/obj/effect/turf_decal/stripes/line{ - dir = 4 - }, -/obj/machinery/camera{ - c_tag = "Mining Ore Smeltery"; - dir = 6 - }, -/obj/structure/sign/poster/official/random/directional/east, -/turf/open/floor/iron, -/area/mine/production) "gbJ" = ( /obj/machinery/door/airlock/security/glass{ name = "Armory" @@ -19975,9 +19942,7 @@ "gdz" = ( /obj/structure/window/reinforced/spawner/directional/north, /obj/structure/window/reinforced/spawner/directional/east, -/obj/machinery/door/window/left/directional/north{ - dir = 2; - icon_state = "right"; +/obj/machinery/door/window/right/directional/south{ name = "First-Aid Supplies"; red_alert_access = 1; req_access = list("medical") @@ -20400,6 +20365,18 @@ "gka" = ( /turf/closed/wall/r_wall, /area/station/engineering/supermatter/room) +"gko" = ( +/obj/machinery/conveyor{ + dir = 8; + id = "mining_internal" + }, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/effect/turf_decal/stripes/line, +/obj/machinery/bouldertech/refinery/smelter, +/turf/open/floor/iron, +/area/mine/production) "gks" = ( /obj/effect/spawner/random/structure/closet_maintenance, /turf/open/floor/plating, @@ -21271,9 +21248,6 @@ /obj/effect/turf_decal/tile/green/full, /turf/open/floor/iron/dark/smooth_large, /area/station/medical/virology) -"gzv" = ( -/turf/open/floor/iron, -/area/mine/production) "gzw" = ( /turf/open/openspace, /area/station/hallway/secondary/service) @@ -21381,10 +21355,7 @@ /turf/open/floor/iron, /area/station/cargo/miningdock) "gBb" = ( -/obj/machinery/door/window/left/directional/north{ - base_state = "right"; - dir = 8; - icon_state = "right"; +/obj/machinery/door/window/right/directional/west{ name = "Containment Pen 3"; req_access = list("xenobiology") }, @@ -21637,7 +21608,6 @@ /area/station/service/chapel) "gEL" = ( /obj/structure/table/glass, -/obj/item/hand_labeler, /obj/effect/turf_decal/trimline/green/filled/line{ dir = 6 }, @@ -21647,6 +21617,7 @@ /obj/machinery/camera/directional/east{ c_tag = "Service Botany - Upper North" }, +/obj/item/hand_labeler, /turf/open/floor/iron, /area/station/service/hydroponics) "gER" = ( @@ -22828,10 +22799,7 @@ /turf/open/floor/iron, /area/station/hallway/primary/fore) "gYt" = ( -/obj/machinery/door/window/right/directional/east{ - base_state = "left"; - dir = 8; - icon_state = "left"; +/obj/machinery/door/window/left/directional/west{ name = "Research Division Delivery"; req_access = list("research") }, @@ -23639,8 +23607,7 @@ "hmt" = ( /obj/machinery/door/firedoor, /obj/structure/table/reinforced, -/obj/machinery/door/window/right/directional/west{ - dir = 1; +/obj/machinery/door/window/right/directional/north{ name = "Security Checkpoint"; req_access = list("security") }, @@ -23905,8 +23872,7 @@ /turf/open/floor/iron/dark, /area/station/science/genetics) "hqi" = ( -/obj/machinery/door/window/brigdoor{ - dir = 1; +/obj/machinery/door/window/brigdoor/left/directional/north{ name = "Security Delivery"; req_access = list("brig") }, @@ -25024,8 +24990,7 @@ /turf/open/floor/plating, /area/station/maintenance/fore) "hJi" = ( -/obj/machinery/door/window/left/directional/north{ - dir = 4; +/obj/machinery/door/window/left/directional/east{ name = "Containment Pen 6"; req_access = list("xenobiology") }, @@ -25544,8 +25509,7 @@ /turf/closed/wall, /area/station/medical/psychology) "hRC" = ( -/obj/machinery/door/window/left/directional/south{ - dir = 4; +/obj/machinery/door/window/left/directional/east{ name = "Test Chamber"; req_access = list("xenobiology") }, @@ -25847,6 +25811,13 @@ /obj/machinery/teleport/hub, /turf/open/floor/plating, /area/station/ai_monitored/turret_protected/aisat_interior) +"hWI" = ( +/obj/effect/turf_decal/box, +/obj/effect/spawner/random/structure/closet_empty/crate/with_loot, +/obj/effect/spawner/random/maintenance/six, +/obj/structure/sign/poster/official/wtf_is_co2/directional/north, +/turf/open/floor/iron/dark, +/area/station/maintenance/starboard/aft) "hWP" = ( /obj/machinery/door/firedoor, /obj/machinery/door/airlock/public/glass{ @@ -26196,8 +26167,7 @@ /area/station/service/chapel) "icA" = ( /obj/structure/table/reinforced, -/obj/machinery/door/window/brigdoor/left/directional/north{ - dir = 4; +/obj/machinery/door/window/brigdoor/left/directional/east{ req_access = list("brig_entrance") }, /obj/machinery/door/poddoor/shutters/preopen{ @@ -26343,7 +26313,7 @@ /area/station/service/bar/backroom) "idN" = ( /obj/structure/window/reinforced/spawner/directional/north, -/obj/machinery/door/window/brigdoor{ +/obj/machinery/door/window/brigdoor/left/directional/south{ req_access = list("brig") }, /obj/effect/mapping_helpers/trapdoor_placer, @@ -27631,18 +27601,6 @@ /obj/effect/mapping_helpers/burnt_floor, /turf/open/floor/plating, /area/station/maintenance/starboard/fore) -"izq" = ( -/obj/machinery/conveyor{ - dir = 8; - id = "mining_internal" - }, -/obj/structure/window/reinforced/spawner/directional/north, -/obj/effect/turf_decal/stripes/line{ - dir = 1 - }, -/obj/effect/turf_decal/stripes/line, -/turf/open/floor/iron, -/area/mine/production) "izw" = ( /obj/machinery/door/airlock/external{ name = "Solar Maintenance" @@ -27653,10 +27611,7 @@ /turf/open/floor/plating, /area/station/maintenance/solars/port/fore) "izA" = ( -/obj/machinery/door/window/left/directional/north{ - base_state = "right"; - dir = 8; - icon_state = "right"; +/obj/machinery/door/window/right/directional/west{ name = "Containment Pen 8"; req_access = list("xenobiology") }, @@ -27901,10 +27856,7 @@ /obj/item/folder/white, /obj/item/pen, /obj/machinery/door/firedoor, -/obj/machinery/door/window/right/directional/east{ - base_state = "left"; - dir = 8; - icon_state = "left"; +/obj/machinery/door/window/left/directional/west{ name = "Robotics Desk"; req_access = list("robotics") }, @@ -27978,8 +27930,7 @@ /turf/open/floor/wood, /area/station/security/prison/rec) "iDG" = ( -/obj/machinery/door/window/left/directional/north{ - dir = 4; +/obj/machinery/door/window/left/directional/east{ name = "Containment Pen 3"; req_access = list("xenobiology") }, @@ -28174,8 +28125,7 @@ pixel_x = -3; pixel_y = -3 }, -/obj/machinery/door/window/left/directional/north{ - dir = 4; +/obj/machinery/door/window/left/directional/east{ name = "First-Aid Supplies"; red_alert_access = 1; req_access = list("medical") @@ -28952,18 +28902,6 @@ /obj/machinery/light/small/directional/east, /turf/open/floor/engine/plasma, /area/station/engineering/atmos) -"iUd" = ( -/obj/machinery/conveyor{ - dir = 6; - id = "mining_internal" - }, -/obj/effect/turf_decal/stripes/line{ - dir = 5 - }, -/obj/machinery/power/apc/auto_name/directional/north, -/obj/structure/cable, -/turf/open/floor/iron, -/area/mine/production) "iUm" = ( /obj/effect/mapping_helpers/burnt_floor, /turf/open/floor/plating, @@ -29146,8 +29084,7 @@ /area/station/medical/medbay/aft) "iWS" = ( /obj/effect/decal/cleanable/dirt, -/obj/machinery/door/window/brigdoor{ - dir = 1; +/obj/machinery/door/window/brigdoor/left/directional/north{ req_access = list("brig") }, /obj/structure/cable, @@ -30046,8 +29983,7 @@ /area/station/medical/morgue) "joa" = ( /obj/structure/table/reinforced, -/obj/machinery/door/window/brigdoor/right/directional/north{ - dir = 4; +/obj/machinery/door/window/brigdoor/right/directional/east{ req_access = list("brig_entrance") }, /obj/machinery/door/poddoor/shutters/preopen{ @@ -30252,6 +30188,13 @@ /obj/structure/cable, /turf/open/floor/plating/snowed/icemoon, /area/icemoon/surface/outdoors/nospawn) +"jrQ" = ( +/obj/effect/turf_decal/delivery, +/obj/machinery/firealarm/directional/north, +/obj/structure/cable, +/obj/structure/railing/corner/end/flip, +/turf/open/floor/iron, +/area/mine/production) "jrZ" = ( /obj/effect/turf_decal/stripes/line{ dir = 1 @@ -30633,9 +30576,9 @@ /area/station/hallway/primary/central) "jwv" = ( /obj/effect/turf_decal/tile/neutral/diagonal_edge, -/obj/machinery/disposal/bin, -/obj/structure/disposalpipe/trunk{ - dir = 1 +/obj/structure/table, +/obj/machinery/processor{ + pixel_y = 6 }, /turf/open/floor/iron/kitchen/diagonal, /area/station/service/kitchen) @@ -30814,8 +30757,7 @@ dir = 4 }, /obj/effect/turf_decal/delivery, -/obj/machinery/door/window/left/directional/north{ - dir = 4; +/obj/machinery/door/window/left/directional/east{ name = "Containment Pen 5"; req_access = list("xenobiology") }, @@ -31123,7 +31065,15 @@ /obj/structure/cable, /obj/structure/disposalpipe/segment, /obj/machinery/firealarm/directional/east, -/turf/open/floor/iron, +/obj/machinery/door/airlock{ + name = "Service Hall" + }, +/obj/effect/mapping_helpers/airlock/access/all/service/general, +/obj/effect/mapping_helpers/airlock/unres{ + dir = 1 + }, +/obj/machinery/door/firedoor, +/turf/open/floor/iron/dark/textured_half, /area/station/hallway/secondary/service) "jFJ" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -31521,10 +31471,6 @@ /obj/structure/sign/poster/contraband/random/directional/north, /turf/open/openspace, /area/station/commons/storage/mining) -"jLb" = ( -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/mine/production) "jLf" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/disposalpipe/segment, @@ -31768,9 +31714,8 @@ /obj/effect/turf_decal/stripes/line{ dir = 4 }, -/obj/machinery/modular_computer/preset/cargochat/service{ - dir = 4 - }, +/obj/structure/table, +/obj/item/aquarium_kit, /turf/open/floor/plating, /area/station/hallway/secondary/service) "jPc" = ( @@ -31860,10 +31805,12 @@ /turf/open/floor/plating, /area/station/maintenance/aft/lesser) "jQo" = ( -/obj/effect/turf_decal/tile/neutral/diagonal_edge, -/obj/machinery/grill, -/turf/open/floor/iron/kitchen/diagonal, -/area/station/service/kitchen) +/obj/effect/turf_decal/siding/white{ + dir = 10 + }, +/obj/effect/spawner/random/entertainment/arcade, +/turf/open/floor/iron, +/area/station/hallway/secondary/service) "jQt" = ( /obj/machinery/navbeacon{ codes_txt = "delivery;dir=1"; @@ -32032,6 +31979,14 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/plating, /area/station/engineering/storage/tech) +"jSm" = ( +/obj/effect/turf_decal/tile/neutral/diagonal_edge, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/disposalpipe/segment{ + dir = 6 + }, +/turf/open/floor/iron/kitchen/diagonal, +/area/station/service/kitchen) "jSt" = ( /obj/machinery/door/airlock/external{ name = "Security Yard"; @@ -32069,8 +32024,7 @@ /turf/open/misc/asteroid/snow/icemoon, /area/icemoon/underground/explored) "jST" = ( -/obj/machinery/door/window/right/directional/east{ - dir = 1; +/obj/machinery/door/window/right/directional/north{ name = "Bridge Delivery"; req_access = list("command") }, @@ -32323,6 +32277,17 @@ /obj/machinery/light/directional/north, /turf/open/floor/iron, /area/station/hallway/secondary/service) +"jXH" = ( +/obj/machinery/conveyor{ + dir = 8; + id = "mining_internal" + }, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/effect/turf_decal/stripes/line, +/turf/open/floor/iron, +/area/mine/production) "jXL" = ( /obj/machinery/newscaster/directional/south, /obj/structure/disposalpipe/trunk{ @@ -32425,12 +32390,10 @@ /turf/open/floor/iron, /area/mine/eva) "jZt" = ( -/obj/structure/table, /obj/effect/turf_decal/tile/neutral/diagonal_edge, -/obj/item/plate, -/obj/item/reagent_containers/condiment/enzyme{ - pixel_x = -7; - pixel_y = 6 +/obj/structure/table, +/obj/machinery/reagentgrinder{ + pixel_y = 9 }, /turf/open/floor/iron/kitchen/diagonal, /area/station/service/kitchen) @@ -32732,6 +32695,7 @@ }, /obj/item/radio/intercom/directional/east, /obj/machinery/duct, +/obj/machinery/light/directional/east, /turf/open/floor/iron, /area/station/service/hydroponics) "keu" = ( @@ -34049,12 +34013,17 @@ /turf/open/floor/iron/dark, /area/station/engineering/supermatter/room) "kvs" = ( -/obj/effect/turf_decal/tile/neutral/diagonal_edge, -/obj/structure/disposalpipe/segment{ - dir = 4 +/obj/machinery/door/firedoor, +/obj/structure/table/reinforced, +/obj/machinery/door/window/left/directional/west{ + name = "Hydroponics Desk"; + req_access = list("hydroponics") }, -/turf/open/floor/iron/kitchen/diagonal, -/area/station/service/kitchen) +/obj/structure/desk_bell{ + pixel_x = 7 + }, +/turf/open/floor/iron, +/area/station/service/hydroponics) "kvu" = ( /obj/machinery/door/airlock/security{ id_tag = "IsolationCell"; @@ -34294,7 +34263,7 @@ /area/station/hallway/secondary/service) "kzv" = ( /obj/structure/bed, -/obj/item/bedsheet/random, +/obj/effect/spawner/random/bedsheet/any, /turf/open/floor/plating, /area/station/maintenance/department/medical/morgue) "kzw" = ( @@ -35779,8 +35748,7 @@ pixel_x = 32 }, /obj/structure/window/reinforced/spawner/directional/south, -/obj/machinery/door/window{ - dir = 8; +/obj/machinery/door/window/left/directional/west{ name = "Secure Art Exhibition"; req_access = list("library") }, @@ -36097,10 +36065,10 @@ /turf/closed/wall, /area/mine/production) "kZz" = ( -/obj/machinery/computer/order_console/cook{ +/obj/effect/turf_decal/stripes/line{ dir = 1 }, -/obj/effect/turf_decal/stripes/line{ +/obj/machinery/computer/department_orders/service{ dir = 1 }, /turf/open/floor/plating, @@ -37816,10 +37784,7 @@ /turf/open/floor/plating, /area/station/maintenance/department/medical/central) "lBZ" = ( -/obj/machinery/door/window/left/directional/north{ - base_state = "right"; - dir = 8; - icon_state = "right"; +/obj/machinery/door/window/right/directional/west{ name = "Containment Pen 7"; req_access = list("xenobiology") }, @@ -38005,8 +37970,7 @@ /turf/open/floor/carpet/blue, /area/station/security/prison/work) "lEg" = ( -/obj/machinery/door/window{ - dir = 1; +/obj/machinery/door/window/left/directional/north{ name = "AI Core Door"; req_access = list("ai_upload") }, @@ -39648,20 +39612,6 @@ /obj/machinery/power/apc/auto_name/directional/east, /turf/open/floor/iron/dark, /area/mine/eva/lower) -"mfe" = ( -/obj/structure/plasticflaps, -/obj/machinery/conveyor{ - dir = 8; - id = "mining_internal" - }, -/obj/structure/window/reinforced/spawner/directional/north, -/obj/effect/turf_decal/stripes/line{ - dir = 1 - }, -/obj/effect/turf_decal/stripes/line, -/obj/machinery/light/small/directional/south, -/turf/open/floor/iron, -/area/mine/production) "mfz" = ( /obj/machinery/door/airlock{ name = "Unit B" @@ -40065,19 +40015,16 @@ /turf/open/floor/iron/white, /area/station/medical/medbay/aft) "mnj" = ( -/obj/machinery/door/firedoor, -/obj/machinery/door/airlock{ - name = "Service Hall" - }, /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/all/service/general, -/obj/effect/mapping_helpers/airlock/unres{ +/obj/effect/turf_decal/tile/red/half{ + dir = 4 + }, +/turf/open/floor/iron/half{ dir = 1 }, -/turf/open/floor/iron/textured_half, /area/station/hallway/secondary/service) "mnu" = ( /obj/effect/mapping_helpers/airlock/cyclelink_helper{ @@ -40830,6 +40777,15 @@ }, /turf/open/floor/iron/dark, /area/station/cargo/drone_bay) +"mzs" = ( +/obj/effect/turf_decal/tile/neutral/diagonal_edge, +/obj/machinery/light_switch/directional/east, +/obj/structure/sink/kitchen/directional/west, +/obj/structure/table, +/obj/item/book/manual/chef_recipes, +/obj/item/holosign_creator/robot_seat/restaurant, +/turf/open/floor/iron/kitchen/diagonal, +/area/station/service/kitchen) "mzu" = ( /obj/effect/turf_decal/tile/brown/half/contrasted{ dir = 8 @@ -41152,8 +41108,9 @@ /obj/machinery/camera/directional/south{ c_tag = "Service Hallway - Upper West" }, -/obj/structure/table, -/obj/item/aquarium_kit, +/obj/machinery/modular_computer/preset/cargochat/service{ + dir = 1 + }, /turf/open/floor/plating, /area/station/hallway/secondary/service) "mFj" = ( @@ -41189,8 +41146,7 @@ /area/station/medical/surgery/aft) "mFQ" = ( /obj/machinery/flasher/portable, -/obj/machinery/door/window/brigdoor{ - dir = 1; +/obj/machinery/door/window/brigdoor/left/directional/north{ name = "Flash Storage"; req_access = list("brig") }, @@ -41273,6 +41229,19 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/general/visible, /turf/open/floor/iron/dark, /area/station/science/explab) +"mHe" = ( +/obj/machinery/conveyor{ + dir = 6; + id = "mining_internal" + }, +/obj/effect/turf_decal/stripes/line{ + dir = 5 + }, +/obj/machinery/power/apc/auto_name/directional/north, +/obj/structure/cable, +/obj/machinery/brm, +/turf/open/floor/iron, +/area/mine/production) "mHu" = ( /obj/machinery/atmospherics/components/tank, /turf/open/floor/iron/dark, @@ -41397,7 +41366,7 @@ "mJO" = ( /obj/structure/bed, /obj/machinery/airalarm/directional/north, -/obj/item/bedsheet/dorms, +/obj/effect/spawner/random/bedsheet, /obj/machinery/button/door/directional/east{ id = "Dorm2"; name = "Dorm Bolt Control"; @@ -43000,9 +42969,7 @@ /turf/open/floor/iron, /area/station/service/hydroponics) "njx" = ( -/obj/machinery/door/window/right/directional/east{ - base_state = "left"; - icon_state = "left"; +/obj/machinery/door/window/left/directional/east{ name = "Fitness Ring" }, /obj/structure/window/reinforced/spawner/directional/south, @@ -43821,8 +43788,7 @@ /turf/open/floor/plating, /area/station/ai_monitored/turret_protected/aisat_interior) "ntq" = ( -/obj/machinery/door/window/brigdoor{ - dir = 1; +/obj/machinery/door/window/brigdoor/left/directional/north{ req_access = list("brig") }, /obj/structure/cable, @@ -45265,7 +45231,7 @@ "nOl" = ( /obj/structure/bed, /obj/machinery/airalarm/directional/north, -/obj/item/bedsheet/dorms, +/obj/effect/spawner/random/bedsheet, /obj/effect/landmark/start/hangover, /obj/machinery/button/door/directional/east{ id = "Dorm4"; @@ -45659,6 +45625,18 @@ }, /turf/open/floor/iron/dark/textured_edge, /area/station/security/prison) +"nUV" = ( +/obj/effect/turf_decal/siding/wideplating_new/light, +/obj/item/trash/bee, +/obj/machinery/light/directional/west, +/obj/structure/cable, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 4 + }, +/obj/structure/sign/poster/official/moth_piping/directional/west, +/obj/machinery/duct, +/turf/open/floor/iron/showroomfloor, +/area/station/security/prison/work) "nVc" = ( /obj/structure/cable, /obj/effect/turf_decal/trimline/yellow/filled/corner{ @@ -46052,10 +46030,7 @@ /turf/open/floor/iron, /area/station/hallway/secondary/exit/departure_lounge) "odd" = ( -/obj/machinery/door/window/left/directional/north{ - base_state = "right"; - dir = 8; - icon_state = "right"; +/obj/machinery/door/window/right/directional/west{ name = "Containment Pen 6"; req_access = list("xenobiology") }, @@ -46546,7 +46521,7 @@ /area/station/commons/lounge) "okx" = ( /obj/structure/table/reinforced, -/obj/machinery/door/window/brigdoor{ +/obj/machinery/door/window/brigdoor/left/directional/south{ name = "Warden Desk"; req_access = list("armory") }, @@ -46971,11 +46946,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/plastic, /area/station/commons/dorms/laundry) -"oqy" = ( -/obj/machinery/airalarm/directional/south, -/obj/effect/turf_decal/delivery, -/turf/open/floor/iron, -/area/mine/production) "oqz" = ( /obj/effect/turf_decal/tile/green{ dir = 4 @@ -47512,6 +47482,9 @@ /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/effect/landmark/start/cook, +/obj/structure/disposalpipe/segment{ + dir = 9 + }, /turf/open/floor/iron/kitchen/diagonal, /area/station/service/kitchen) "oyW" = ( @@ -48385,6 +48358,12 @@ /obj/structure/sign/warning/gas_mask, /turf/open/floor/plating, /area/station/maintenance/solars/port/fore) +"oLV" = ( +/obj/machinery/vending/wardrobe/chef_wardrobe{ + pixel_x = -2 + }, +/turf/open/floor/plating/snowed/coldroom, +/area/station/service/kitchen/coldroom) "oLW" = ( /obj/machinery/computer/security/telescreen{ desc = "Used to access the various cameras on the station."; @@ -48922,9 +48901,6 @@ /turf/open/floor/iron/freezer, /area/station/commons/toilet) "oUK" = ( -/obj/structure/chair/office{ - dir = 4 - }, /obj/effect/turf_decal/trimline/green/filled/line{ dir = 4 }, @@ -49344,17 +49320,6 @@ "pbs" = ( /turf/closed/wall, /area/station/ai_monitored/turret_protected/aisat/maint) -"pbv" = ( -/obj/structure/window/reinforced/spawner/directional/north, -/obj/machinery/conveyor_switch/oneway{ - id = "mining_internal"; - name = "mining conveyor"; - pixel_x = 12; - pixel_y = -6 - }, -/obj/structure/chair/stool/directional/south, -/turf/open/floor/iron, -/area/mine/production) "pby" = ( /obj/effect/gibspawner/human, /turf/open/misc/asteroid/snow/icemoon, @@ -49780,9 +49745,7 @@ /area/station/engineering/atmos/hfr_room) "phU" = ( /obj/effect/turf_decal/siding/thinplating/dark, -/obj/machinery/door/window{ - base_state = "right"; - icon_state = "right"; +/obj/machinery/door/window/right/directional/south{ name = "Theater Stage" }, /obj/structure/disposalpipe/segment, @@ -49847,7 +49810,7 @@ /area/station/hallway/primary/central) "piC" = ( /obj/structure/bed, -/obj/item/bedsheet/dorms, +/obj/effect/spawner/random/bedsheet, /obj/machinery/button/door/directional/south{ id = "Dorm6"; name = "Cabin Bolt Control"; @@ -49878,8 +49841,7 @@ /turf/open/floor/iron/white, /area/station/medical/treatment_center) "piL" = ( -/obj/machinery/door/window/brigdoor/security/cell{ - dir = 8; +/obj/machinery/door/window/brigdoor/security/cell/left/directional/west{ id = "Cell 2"; name = "Cell 2" }, @@ -50832,8 +50794,7 @@ /turf/open/floor/plating, /area/station/maintenance/department/chapel) "pxi" = ( -/obj/machinery/door/window{ - dir = 8; +/obj/machinery/door/window/left/directional/west{ name = "Mass Driver"; req_access = list("chapel_office") }, @@ -52558,11 +52519,11 @@ /turf/open/floor/iron, /area/station/service/janitor) "pYI" = ( +/obj/effect/turf_decal/tile/neutral/diagonal_edge, /obj/structure/table, /obj/machinery/microwave{ pixel_y = 5 }, -/obj/effect/turf_decal/tile/neutral/diagonal_edge, /turf/open/floor/iron/kitchen/diagonal, /area/station/service/kitchen) "pYT" = ( @@ -52926,10 +52887,18 @@ }, /area/station/service/chapel) "qfe" = ( -/obj/structure/table, /obj/effect/turf_decal/tile/neutral/diagonal_edge, -/obj/item/book/manual/chef_recipes, -/obj/item/holosign_creator/robot_seat/restaurant, +/obj/structure/table, +/obj/item/reagent_containers/condiment/enzyme{ + pixel_x = -7; + pixel_y = 6 + }, +/obj/item/reagent_containers/condiment/saltshaker{ + pixel_x = -3 + }, +/obj/item/reagent_containers/condiment/peppermill{ + pixel_x = 3 + }, /turf/open/floor/iron/kitchen/diagonal, /area/station/service/kitchen) "qfh" = ( @@ -53223,6 +53192,13 @@ dir = 8 }, /area/station/science/explab) +"qkI" = ( +/obj/effect/decal/cleanable/dirt, +/obj/structure/railing/corner/end{ + dir = 4 + }, +/turf/open/floor/iron, +/area/mine/production) "qkL" = ( /obj/effect/spawner/structure/window/reinforced, /turf/open/floor/plating, @@ -53828,6 +53804,18 @@ /obj/machinery/light/directional/north, /turf/open/misc/asteroid/snow/icemoon, /area/icemoon/underground/explored) +"qud" = ( +/obj/machinery/conveyor_switch/oneway{ + id = "mining_internal"; + name = "mining conveyor"; + pixel_x = 1; + pixel_y = 8 + }, +/obj/structure/railing{ + dir = 4 + }, +/turf/open/floor/iron, +/area/mine/production) "que" = ( /obj/machinery/camera/directional/south{ c_tag = "Chapel South" @@ -54405,16 +54393,11 @@ /turf/open/floor/plating, /area/station/maintenance/port/fore) "qDZ" = ( -/obj/structure/table, /obj/effect/turf_decal/tile/neutral/diagonal_edge, -/obj/item/reagent_containers/condiment/saltshaker{ - pixel_x = -3 - }, -/obj/item/reagent_containers/condiment/peppermill{ - pixel_x = 3 - }, -/obj/effect/spawner/random/food_or_drink/cake_ingredients, +/obj/structure/table, +/obj/item/plate, /obj/item/food/piedough, +/obj/effect/spawner/random/food_or_drink/cake_ingredients, /turf/open/floor/iron/kitchen/diagonal, /area/station/service/kitchen) "qEa" = ( @@ -55006,8 +54989,7 @@ id = "misclab"; name = "Test Chamber Blast Door" }, -/obj/machinery/door/window/left/directional/south{ - dir = 8; +/obj/machinery/door/window/left/directional/west{ name = "Test Chamber"; req_access = list("xenobiology") }, @@ -55657,7 +55639,7 @@ "qVB" = ( /obj/structure/table/reinforced, /obj/machinery/door/firedoor, -/obj/machinery/door/window/brigdoor{ +/obj/machinery/door/window/brigdoor/left/directional/south{ name = "Armory Desk"; req_access = list("armory") }, @@ -55869,6 +55851,9 @@ dir = 4 }, /obj/machinery/duct, +/obj/structure/chair/office{ + dir = 4 + }, /turf/open/floor/iron, /area/station/service/hydroponics) "qYP" = ( @@ -56280,8 +56265,7 @@ /turf/open/floor/iron, /area/station/hallway/primary/starboard) "reT" = ( -/obj/machinery/door/window/left/directional/north{ - dir = 4; +/obj/machinery/door/window/left/directional/east{ name = "Containment Pen 8"; req_access = list("xenobiology") }, @@ -56466,14 +56450,6 @@ /obj/machinery/firealarm/directional/east, /turf/open/floor/iron/dark, /area/station/science/ordnance) -"rid" = ( -/obj/structure/disposalpipe/segment, -/obj/effect/turf_decal/trimline/blue/filled/line{ - dir = 4 - }, -/obj/machinery/firealarm/directional/east, -/turf/open/floor/iron/white, -/area/station/medical/medbay/aft) "rig" = ( /obj/structure/bed, /obj/effect/spawner/random/maintenance, @@ -56789,6 +56765,10 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/plating, /area/station/maintenance/port/aft) +"rnl" = ( +/obj/structure/railing, +/turf/open/floor/iron, +/area/mine/production) "rns" = ( /obj/structure/table/reinforced, /obj/item/aicard{ @@ -56868,8 +56848,7 @@ /turf/open/floor/iron/dark, /area/station/ai_monitored/turret_protected/ai_upload) "roA" = ( -/obj/machinery/door/window/left/directional/north{ - dir = 4; +/obj/machinery/door/window/left/directional/east{ name = "Containment Pen 4"; req_access = list("xenobiology") }, @@ -57269,6 +57248,14 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/mine/laborcamp) +"rvA" = ( +/obj/structure/disposalpipe/segment, +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 4 + }, +/obj/machinery/light/directional/east, +/turf/open/floor/iron/white, +/area/station/medical/medbay/aft) "rvS" = ( /obj/structure/rack, /obj/item/poster/random_contraband, @@ -57384,6 +57371,13 @@ /obj/structure/sign/warning/electric_shock/directional/west, /turf/open/floor/iron/dark, /area/station/hallway/primary/fore) +"rxG" = ( +/obj/structure/ore_vent/starter_resources{ + icon_state = "ore_vent_ice_active"; + icon_state_tapped = "ore_vent_ice_active" + }, +/turf/open/misc/asteroid/snow/icemoon, +/area/icemoon/underground/explored) "rxK" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/effect/landmark/start/hangover, @@ -58155,8 +58149,7 @@ /turf/open/floor/plating, /area/station/engineering/main) "rJe" = ( -/obj/machinery/door/window/left/directional/north{ - dir = 4; +/obj/machinery/door/window/left/directional/east{ name = "Containment Pen 1"; req_access = list("xenobiology") }, @@ -58787,10 +58780,7 @@ }, /obj/effect/turf_decal/bot, /obj/machinery/light/small/directional/east, -/mob/living/simple_animal/bot/mulebot{ - home_destination = "QM #2"; - suffix = "#2" - }, +/mob/living/simple_animal/bot/mulebot, /turf/open/floor/iron, /area/station/cargo/storage) "rUz" = ( @@ -60056,6 +60046,13 @@ }, /turf/open/floor/iron, /area/station/hallway/primary/starboard) +"snL" = ( +/obj/item/pickaxe{ + pixel_x = 12; + desc = "Someone left their pickaxe out here, must not have known about the boulder processing machines inside." + }, +/turf/open/misc/asteroid/snow/icemoon, +/area/icemoon/underground/explored) "snO" = ( /obj/effect/turf_decal/stripes/corner{ dir = 4 @@ -60186,8 +60183,7 @@ /obj/structure/sign/painting/library_secure{ pixel_x = 32 }, -/obj/machinery/door/window{ - dir = 8; +/obj/machinery/door/window/left/directional/west{ name = "Secure Art Exhibition"; req_access = list("library") }, @@ -60300,8 +60296,7 @@ /turf/open/floor/iron, /area/station/hallway/secondary/entry) "srk" = ( -/obj/machinery/door/window/right/directional/north{ - dir = 8; +/obj/machinery/door/window/right/directional/west{ name = "Library Desk Door"; req_access = list("library") }, @@ -60398,13 +60393,6 @@ /obj/structure/sign/warning/secure_area, /turf/closed/wall/r_wall, /area/station/engineering/storage/tech) -"sst" = ( -/obj/effect/turf_decal/box, -/obj/effect/spawner/random/structure/closet_empty/crate/with_loot, -/obj/effect/spawner/random/maintenance/six, -/obj/structure/sign/poster/official/wtf_is_co2/directional/north, -/turf/open/floor/iron/dark, -/area/station/maintenance/starboard/aft) "ssv" = ( /obj/effect/turf_decal/tile/neutral/fourcorners, /obj/effect/turf_decal/siding/thinplating_new/corner, @@ -61342,8 +61330,7 @@ "sGf" = ( /obj/effect/decal/cleanable/dirt, /obj/structure/extinguisher_cabinet/directional/north, -/obj/machinery/door/window/brigdoor/right/directional/north{ - dir = 8; +/obj/machinery/door/window/brigdoor/right/directional/west{ name = "Medbay Access"; req_access = list("medical") }, @@ -61766,16 +61753,6 @@ }, /turf/open/floor/plating, /area/station/maintenance/disposal) -"sMb" = ( -/obj/structure/table, -/obj/effect/turf_decal/tile/neutral/diagonal_edge, -/obj/machinery/processor{ - pixel_y = 6 - }, -/obj/machinery/light/directional/east, -/obj/machinery/light_switch/directional/east, -/turf/open/floor/iron/kitchen/diagonal, -/area/station/service/kitchen) "sMg" = ( /turf/open/floor/engine/air, /area/station/engineering/atmos) @@ -62338,6 +62315,10 @@ /obj/machinery/duct, /turf/open/floor/iron, /area/station/service/theater) +"sWU" = ( +/obj/structure/chair/stool/directional/south, +/turf/open/floor/iron, +/area/mine/production) "sXb" = ( /obj/machinery/status_display/ai/directional/north, /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ @@ -62487,16 +62468,6 @@ }, /turf/open/floor/engine, /area/station/engineering/atmos/hfr_room) -"sZp" = ( -/obj/effect/turf_decal/siding/wideplating_new/light{ - dir = 6 - }, -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/effect/landmark/start/prisoner, -/turf/open/floor/iron/showroomfloor, -/area/station/security/prison/work) "sZD" = ( /obj/structure/disposalpipe/segment{ dir = 4 @@ -63416,15 +63387,9 @@ /area/icemoon/surface/outdoors/nospawn) "tqZ" = ( /obj/machinery/door/firedoor, -/obj/machinery/door/airlock{ - name = "Service Hall" - }, -/obj/effect/mapping_helpers/airlock/access/all/service/general, -/obj/effect/mapping_helpers/airlock/unres{ - dir = 1 - }, -/turf/open/floor/iron/textured_half, -/area/station/hallway/secondary/service) +/obj/machinery/biogenerator, +/turf/open/floor/iron, +/area/station/service/hydroponics) "trb" = ( /obj/structure/table, /obj/machinery/computer/security/telescreen{ @@ -63518,7 +63483,7 @@ /obj/structure/bed{ dir = 1 }, -/obj/item/bedsheet/dorms{ +/obj/effect/spawner/random/bedsheet{ dir = 1 }, /obj/effect/spawner/random/contraband/permabrig_gear, @@ -65206,14 +65171,6 @@ /obj/effect/turf_decal/delivery, /turf/open/floor/iron, /area/station/science/ordnance) -"tUv" = ( -/obj/structure/disposalpipe/segment, -/obj/effect/turf_decal/trimline/blue/filled/line{ - dir = 4 - }, -/obj/machinery/light/directional/east, -/turf/open/floor/iron/white, -/area/station/medical/medbay/aft) "tUx" = ( /obj/effect/spawner/random/trash/moisture_trap, /turf/open/floor/plating, @@ -65702,10 +65659,7 @@ /turf/open/floor/iron/dark, /area/station/science/breakroom) "ucl" = ( -/obj/machinery/door/window/left/directional/north{ - base_state = "right"; - dir = 8; - icon_state = "right"; +/obj/machinery/door/window/right/directional/west{ name = "Containment Pen 4"; req_access = list("xenobiology") }, @@ -66571,10 +66525,8 @@ "uqB" = ( /obj/effect/turf_decal/tile/neutral/diagonal_edge, /obj/effect/turf_decal/tile/blue/diagonal_edge, -/obj/machinery/vending/wardrobe/chef_wardrobe{ - pixel_x = -2 - }, /obj/item/radio/intercom/directional/west, +/obj/machinery/vending/dinnerware, /turf/open/floor/iron/kitchen/diagonal, /area/station/service/kitchen) "uqG" = ( @@ -66683,7 +66635,7 @@ /obj/structure/bed{ dir = 1 }, -/obj/item/bedsheet/dorms{ +/obj/effect/spawner/random/bedsheet{ dir = 1 }, /obj/effect/turf_decal/trimline/red/filled/line{ @@ -68475,6 +68427,12 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron/white, /area/station/medical/medbay/aft) +"uYF" = ( +/obj/structure/railing{ + dir = 6 + }, +/turf/open/floor/iron, +/area/mine/production) "uYH" = ( /obj/machinery/atmospherics/pipe/layer_manifold/dark/visible{ dir = 8 @@ -68739,10 +68697,7 @@ /turf/closed/wall/r_wall, /area/mine/storage) "vco" = ( -/obj/machinery/door/window/right/directional/east{ - base_state = "left"; - dir = 8; - icon_state = "left"; +/obj/machinery/door/window/left/directional/west{ name = "Fitness Ring" }, /obj/structure/window/reinforced/spawner/directional/north, @@ -70794,8 +70749,7 @@ /obj/structure/railing/corner{ dir = 8 }, -/obj/machinery/door/window/brigdoor{ - dir = 8; +/obj/machinery/door/window/brigdoor/left/directional/west{ name = "Research Director Observation"; req_access = list("rd") }, @@ -70939,9 +70893,6 @@ /area/station/service/chapel/office) "vMq" = ( /obj/effect/turf_decal/tile/neutral/diagonal_edge, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, /obj/machinery/holopad, /turf/open/floor/iron/kitchen/diagonal, /area/station/service/kitchen) @@ -71014,13 +70965,6 @@ }, /turf/open/floor/plating/snowed/smoothed/icemoon, /area/icemoon/underground/explored) -"vNT" = ( -/obj/effect/turf_decal/bot, -/obj/structure/closet/crate/preopen, -/obj/machinery/light/small/directional/north, -/obj/structure/extinguisher_cabinet/directional/north, -/turf/open/floor/iron, -/area/mine/production) "vOw" = ( /obj/item/kirbyplants/random, /obj/effect/turf_decal/tile/red{ @@ -71072,10 +71016,7 @@ /turf/open/floor/iron, /area/station/hallway/primary/fore) "vPD" = ( -/obj/machinery/door/window/left/directional/north{ - base_state = "right"; - dir = 8; - icon_state = "right"; +/obj/machinery/door/window/right/directional/west{ name = "Containment Pen 1"; req_access = list("xenobiology") }, @@ -73244,8 +73185,7 @@ /area/station/command/heads_quarters/cmo) "wwn" = ( /obj/structure/table/reinforced, -/obj/machinery/door/window/left/directional/north{ - dir = 8; +/obj/machinery/door/window/left/directional/west{ name = "Reception Window" }, /obj/machinery/door/poddoor/shutters/preopen{ @@ -73256,10 +73196,7 @@ /obj/structure/desk_bell{ pixel_x = 7 }, -/obj/machinery/door/window/brigdoor{ - base_state = "rightsecure"; - dir = 4; - icon_state = "rightsecure"; +/obj/machinery/door/window/brigdoor/right/directional/east{ name = "Head of Personnel's Desk"; req_access = list("hop") }, @@ -74095,10 +74032,10 @@ /area/station/security/checkpoint/medical) "wKm" = ( /obj/effect/turf_decal/tile/neutral/diagonal_edge, -/obj/structure/cable, /obj/structure/disposalpipe/segment{ dir = 4 }, +/obj/structure/cable, /turf/open/floor/iron/kitchen/diagonal, /area/station/service/kitchen) "wKv" = ( @@ -74999,10 +74936,7 @@ /turf/open/floor/iron, /area/station/cargo/office) "wXX" = ( -/obj/machinery/door/window/left/directional/north{ - base_state = "right"; - dir = 8; - icon_state = "right"; +/obj/machinery/door/window/right/directional/west{ name = "Containment Pen 10"; req_access = list("xenobiology") }, @@ -75240,10 +75174,7 @@ location = "QM #1" }, /obj/effect/turf_decal/bot, -/mob/living/simple_animal/bot/mulebot{ - home_destination = "QM #1"; - suffix = "#1" - }, +/mob/living/simple_animal/bot/mulebot, /turf/open/floor/iron, /area/station/cargo/storage) "xaH" = ( @@ -75300,9 +75231,6 @@ /area/station/service/bar/atrium) "xbn" = ( /obj/effect/turf_decal/tile/neutral/diagonal_edge, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, /obj/effect/landmark/event_spawn, /turf/open/floor/iron/kitchen/diagonal, /area/station/service/kitchen) @@ -75757,8 +75685,7 @@ /turf/open/floor/iron/dark, /area/station/commons/storage/primary) "xht" = ( -/obj/machinery/door/window/right/directional/north{ - dir = 8; +/obj/machinery/door/window/right/directional/west{ name = "Shop Counter" }, /obj/effect/turf_decal/siding/red{ @@ -75768,8 +75695,7 @@ /turf/open/floor/iron/white, /area/station/maintenance/port/fore) "xhv" = ( -/obj/machinery/door/window/left/directional/north{ - dir = 4; +/obj/machinery/door/window/left/directional/east{ name = "Containment Pen 2"; req_access = list("xenobiology") }, @@ -75964,8 +75890,7 @@ /turf/open/floor/plating, /area/station/ai_monitored/turret_protected/aisat_interior) "xlh" = ( -/obj/machinery/door/window/left/directional/east{ - dir = 1; +/obj/machinery/door/window/left/directional/north{ name = "Medbay Delivery"; req_access = list("medical") }, @@ -76261,8 +76186,7 @@ /turf/open/floor/catwalk_floor/iron_smooth, /area/station/maintenance/port/greater) "xqu" = ( -/obj/machinery/door/window/left/directional/north{ - dir = 4; +/obj/machinery/door/window/left/directional/east{ name = "Containment Pen 10"; req_access = list("xenobiology") }, @@ -77279,6 +77203,14 @@ /obj/structure/disposalpipe/segment, /turf/open/floor/iron, /area/station/security/brig/upper) +"xFo" = ( +/obj/structure/disposalpipe/segment, +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 4 + }, +/obj/machinery/firealarm/directional/east, +/turf/open/floor/iron/white, +/area/station/medical/medbay/aft) "xFs" = ( /obj/effect/turf_decal/siding/thinplating_new{ dir = 1 @@ -77351,8 +77283,7 @@ /area/station/medical/medbay/lobby) "xGp" = ( /obj/structure/table/reinforced, -/obj/machinery/door/window/left/directional/north{ - dir = 4; +/obj/machinery/door/window/left/directional/east{ name = "Atmospherics Desk"; req_access = list("atmospherics") }, @@ -77623,10 +77554,7 @@ /turf/open/floor/glass/reinforced, /area/station/science/ordnance/office) "xLF" = ( -/obj/machinery/door/window{ - base_state = "right"; - dir = 4; - icon_state = "right"; +/obj/machinery/door/window/right/directional/east{ name = "Captain's Desk Door"; req_access = list("captain") }, @@ -77768,8 +77696,7 @@ /obj/effect/turf_decal/siding/white{ dir = 4 }, -/obj/machinery/door/window/right/directional/west{ - dir = 4; +/obj/machinery/door/window/right/directional/east{ name = "Airlock" }, /turf/open/floor/iron/dark, @@ -77780,11 +77707,6 @@ /obj/machinery/atmospherics/components/unary/portables_connector/visible, /turf/open/floor/plating, /area/station/maintenance/port/aft) -"xOM" = ( -/obj/structure/table, -/obj/machinery/mineral/processing_unit_console, -/turf/open/floor/iron, -/area/mine/production) "xPu" = ( /obj/machinery/light/directional/east, /turf/open/misc/asteroid/snow/icemoon, @@ -77896,6 +77818,13 @@ dir = 1 }, /area/station/security/processing) +"xQK" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 1 + }, +/obj/structure/railing, +/turf/open/floor/iron, +/area/mine/production) "xQT" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply, @@ -163360,7 +163289,7 @@ vpc kZu aYM tDa -gzv +sWU cMk cMk gjq @@ -163615,10 +163544,10 @@ kZu bDC kZu kZu -vNT +fxY pql -jLb -oqy +qkI +coY cMk gjq gjq @@ -163874,8 +163803,8 @@ ajr uQx vQy ngl -fFI -mfe +xQK +brX cMk gjq gjq @@ -164131,8 +164060,8 @@ tDa sWB tDa pql -gzv -izq +rnl +gko uvM gjq gjq @@ -164386,10 +164315,10 @@ pAT xlQ lCA kZu -afl -pbv -xOM -izq +jrQ +qud +uYF +jXH nWH hFL hFL @@ -164643,9 +164572,9 @@ dQd nWH nWH nWH -iUd -gbH -ear +mHe +dAq +adm dTF nWH qeP @@ -167636,7 +167565,7 @@ iDt iDt oqL unm -cvG +nUV ldz fvK cIc @@ -167893,7 +167822,7 @@ iDt iDt oqL bFU -sZp +csZ axX auJ oVy @@ -168487,7 +168416,7 @@ iDt rcY scw iDt -iDt +snL scw scw scw @@ -168744,7 +168673,7 @@ iDt rcY iDt scw -iDt +rxG iDt scw uWE @@ -183373,7 +183302,7 @@ eHW dMS fUn mQk -fwB +oLV fwB fwB fwB @@ -245042,9 +244971,9 @@ tCs exw exw exw -exw +tqZ +kvs glQ -bMu exw exw exw @@ -245298,10 +245227,10 @@ hvr exw exw jPa -enG mdZ vlI nHa +nHa izC hwM aUY @@ -245555,8 +245484,8 @@ xFA aTV rQt tGZ -tGZ -tqZ +bMu +iFc mrF iFc bJA @@ -246070,7 +245999,7 @@ kQX tGZ mEZ mdZ -mdZ +jQo dqd bfZ izC @@ -248901,11 +248830,11 @@ ggD ifg qZB gtw -jQo +xHi vMq eUw jZt -fkk +jSm cMs cpY lkr @@ -249162,7 +249091,7 @@ kpf xbn qDZ eke -fkk +enG bpG oKb uXm @@ -249416,10 +249345,10 @@ iXH qZB oEh kpf -kvs +gtw qfe ecZ -fkk +enG qIv oKb reM @@ -249929,7 +249858,7 @@ bQP llG bzn fyh -sMb +mzs wKm pAp haN @@ -250221,8 +250150,8 @@ sHd jih rkM iYs -rid -tUv +xFo +rvA rkM eHU pko @@ -256919,7 +256848,7 @@ fOl cyL jAI bgx -sst +hWI xxv dOK vzD diff --git a/_maps/map_files/KiloStation2/KiloStation2.dmm b/_maps/map_files/KiloStation2/KiloStation2.dmm index ef44bf9de09..bd6142a8329 100644 --- a/_maps/map_files/KiloStation2/KiloStation2.dmm +++ b/_maps/map_files/KiloStation2/KiloStation2.dmm @@ -1537,8 +1537,7 @@ codes_txt = "delivery;dir=2"; location = "Research Division" }, -/obj/machinery/door/window/left/directional/west{ - dir = 2; +/obj/machinery/door/window/left/directional/south{ name = "Research Division Delivery Access"; req_access = list("research") }, @@ -2309,8 +2308,7 @@ location = "Atmospherics"; name = "navigation beacon (Atmospherics Delivery)" }, -/obj/machinery/door/window/left/directional/south{ - dir = 8; +/obj/machinery/door/window/left/directional/west{ name = "Atmospherics Delivery Access"; req_access = list("atmospherics") }, @@ -2472,8 +2470,7 @@ location = "Engineering"; name = "navigation beacon (Engineering Delivery)" }, -/obj/machinery/door/window/right/directional/north{ - dir = 4; +/obj/machinery/door/window/right/directional/east{ name = "Engineering Delivery Access"; req_access = list("engineering") }, @@ -3875,8 +3872,7 @@ /area/station/maintenance/fore) "boo" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/general/visible, -/obj/machinery/door/window/left/directional/south{ - dir = 1; +/obj/machinery/door/window/left/directional/north{ name = "Maximum Security Test Chamber"; req_access = list("xenobiology") }, @@ -4143,8 +4139,7 @@ /obj/item/storage/box/lights/mixed{ pixel_y = 6 }, -/obj/machinery/door/window/right/directional/west{ - dir = 4; +/obj/machinery/door/window/right/directional/east{ name = "Cargo Desk"; req_access = list("shipping") }, @@ -4689,8 +4684,7 @@ /obj/item/folder/yellow{ pixel_x = 3 }, -/obj/machinery/door/window/left/directional/west{ - dir = 4; +/obj/machinery/door/window/left/directional/east{ name = "Mailroom Desk"; req_access = list("shipping") }, @@ -6388,10 +6382,7 @@ id = "hop"; name = "Privacy Shutters" }, -/obj/machinery/door/window/brigdoor{ - base_state = "rightsecure"; - dir = 1; - icon_state = "rightsecure"; +/obj/machinery/door/window/brigdoor/right/directional/north{ name = "Head of Personnel's Desk"; req_access = list("hop") }, @@ -7224,10 +7215,7 @@ /obj/effect/decal/cleanable/oil, /obj/effect/decal/cleanable/dirt, /obj/structure/sign/poster/contraband/the_griffin/directional/north, -/mob/living/simple_animal/bot/mulebot{ - home_destination = "QM #1"; - suffix = "#1" - }, +/mob/living/simple_animal/bot/mulebot, /obj/effect/turf_decal/tile/neutral/half/contrasted, /turf/open/floor/iron/dark, /area/station/cargo/storage) @@ -7656,7 +7644,7 @@ /obj/effect/decal/cleanable/cobweb/cobweb2, /obj/machinery/airalarm/directional/east, /obj/effect/landmark/start/assistant, -/obj/item/bedsheet/dorms, +/obj/effect/spawner/random/bedsheet, /obj/effect/landmark/start/hangover, /obj/machinery/button/door/directional/north{ id = "Cabin_2"; @@ -8375,8 +8363,7 @@ /obj/machinery/door/firedoor, /obj/item/folder/yellow, /obj/item/pen, -/obj/machinery/door/window/left/directional/west{ - dir = 2; +/obj/machinery/door/window/left/directional/south{ name = "Cargo Desk"; req_access = list("shipping") }, @@ -9768,8 +9755,7 @@ /obj/item/folder/red{ pixel_x = -5 }, -/obj/machinery/door/window/brigdoor/left/directional/south{ - dir = 8; +/obj/machinery/door/window/brigdoor/left/directional/west{ name = "Security Customs Desk"; req_access = list("security") }, @@ -11814,9 +11800,7 @@ /obj/structure/window/reinforced/spawner/directional/east, /obj/structure/window/reinforced/spawner/directional/west, /obj/effect/spawner/random/aimodule/neutral, -/obj/machinery/door/window{ - base_state = "right"; - icon_state = "right"; +/obj/machinery/door/window/right/directional/south{ name = "Core Modules"; req_access = list("captain") }, @@ -17175,8 +17159,7 @@ /obj/effect/turf_decal/delivery, /obj/machinery/door/firedoor, /obj/item/folder/red, -/obj/machinery/door/window/brigdoor/left/directional/north{ - dir = 2; +/obj/machinery/door/window/brigdoor/left/directional/south{ name = "Brig Control Desk"; req_access = list("armory") }, @@ -18553,10 +18536,7 @@ /obj/effect/decal/cleanable/cobweb/cobweb2, /obj/machinery/airalarm/directional/north, /obj/machinery/light/small/directional/north, -/mob/living/simple_animal/bot/mulebot{ - home_destination = "QM #2"; - suffix = "#2" - }, +/mob/living/simple_animal/bot/mulebot, /obj/effect/turf_decal/tile/neutral/half/contrasted, /turf/open/floor/iron/dark, /area/station/cargo/storage) @@ -20649,8 +20629,7 @@ /obj/structure/table/reinforced, /obj/effect/turf_decal/delivery, /obj/machinery/door/firedoor, -/obj/machinery/door/window/left/directional/south{ - dir = 1; +/obj/machinery/door/window/left/directional/north{ name = "Security Desk"; req_access = list("security") }, @@ -21734,8 +21713,7 @@ name = "Creature Cell 4" }, /obj/effect/turf_decal/delivery, -/obj/machinery/door/window/left/directional/north{ - dir = 4; +/obj/machinery/door/window/left/directional/east{ name = "Creature Cell"; req_access = list("xenobiology") }, @@ -21976,7 +21954,7 @@ }, /obj/machinery/airalarm/directional/west, /obj/effect/landmark/start/assistant, -/obj/item/bedsheet/dorms{ +/obj/effect/spawner/random/bedsheet{ dir = 4 }, /obj/effect/landmark/start/hangover, @@ -22384,8 +22362,7 @@ /area/station/ai_monitored/security/armory) "hkW" = ( /obj/structure/plasticflaps/opaque, -/obj/machinery/door/window/left/directional/north{ - dir = 2; +/obj/machinery/door/window/left/directional/south{ name = "Cargo Delivery Access"; req_access = list("shipping") }, @@ -22404,11 +22381,7 @@ pixel_x = 3; pixel_y = 28 }, -/obj/machinery/door/window{ - atom_integrity = 300; - base_state = "leftsecure"; - dir = 8; - icon_state = "leftsecure"; +/obj/machinery/door/window/brigdoor/left/directional/west{ name = "Primary AI Core Access"; req_access = list("ai_upload") }, @@ -22536,8 +22509,7 @@ /turf/open/floor/plating, /area/station/maintenance/fore) "hnl" = ( -/obj/machinery/door/window/left/directional/north{ - dir = 2; +/obj/machinery/door/window/left/directional/south{ name = "Cargo Delivery Access"; req_access = list("shipping") }, @@ -22552,10 +22524,7 @@ name = "Creature Cell 2" }, /obj/effect/turf_decal/delivery, -/obj/machinery/door/window/left/directional/north{ - base_state = "right"; - dir = 8; - icon_state = "right"; +/obj/machinery/door/window/right/directional/west{ name = "Creature Cell"; req_access = list("xenobiology") }, @@ -25422,10 +25391,9 @@ /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/door/window/brigdoor/left/directional/west{ +/obj/machinery/door/window/brigdoor/left/directional/south{ req_access = list("morgue_secure"); - name = "Coroner's Office"; - dir = 2 + name = "Coroner's Office" }, /turf/open/floor/iron/dark, /area/station/medical/morgue) @@ -27728,11 +27696,7 @@ name = "Private Channel"; pixel_x = 8 }, -/obj/machinery/door/window{ - atom_integrity = 300; - base_state = "leftsecure"; - dir = 8; - icon_state = "leftsecure"; +/obj/machinery/door/window/brigdoor/left/directional/west{ layer = 4.1; name = "Tertiary AI Core Access"; pixel_x = -3; @@ -34282,10 +34246,7 @@ name = "Creature Cell 1" }, /obj/effect/turf_decal/delivery, -/obj/machinery/door/window/left/directional/north{ - base_state = "right"; - dir = 8; - icon_state = "right"; +/obj/machinery/door/window/right/directional/west{ name = "Creature Cell"; req_access = list("xenobiology") }, @@ -34681,11 +34642,7 @@ /turf/open/floor/plating, /area/station/maintenance/port/fore) "lcK" = ( -/obj/machinery/door/window{ - atom_integrity = 300; - base_state = "rightsecure"; - dir = 4; - icon_state = "rightsecure"; +/obj/machinery/door/window/brigdoor/right/directional/east{ name = "Primary AI Core Access"; req_access = list("ai_upload") }, @@ -37829,8 +37786,7 @@ codes_txt = "delivery;dir=1"; location = "Research and Development" }, -/obj/machinery/door/window/left/directional/east{ - dir = 1; +/obj/machinery/door/window/left/directional/north{ name = "Research and Development Delivery Access"; req_access = list("science") }, @@ -42604,8 +42560,7 @@ "nGT" = ( /obj/structure/window/reinforced/spawner/directional/north, /obj/structure/window/reinforced/spawner/directional/south, -/obj/machinery/door/window/left/directional/north{ - dir = 4; +/obj/machinery/door/window/left/directional/east{ name = "Inner Pipe Access"; req_access = list("atmospherics") }, @@ -44113,8 +44068,7 @@ }, /area/station/service/chapel/funeral) "okt" = ( -/obj/machinery/door/window/left/directional/north{ - dir = 4; +/obj/machinery/door/window/left/directional/east{ name = "Creature Cell"; req_access = list("xenobiology") }, @@ -44791,9 +44745,7 @@ dir = 1 }, /obj/structure/window/reinforced/spawner/directional/south, -/obj/machinery/door/window/right/directional/east{ - base_state = "left"; - icon_state = "left"; +/obj/machinery/door/window/left/directional/east{ name = "Fitness Ring" }, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -45422,8 +45374,7 @@ /area/station/maintenance/port/lesser) "oJd" = ( /obj/structure/window/reinforced/spawner/directional/south, -/obj/machinery/door/window/right/directional/south{ - dir = 4; +/obj/machinery/door/window/right/directional/east{ name = "Mail Chute"; req_access = list("shipping") }, @@ -46829,9 +46780,7 @@ /obj/effect/turf_decal/stripes/white/line{ dir = 1 }, -/obj/machinery/door/window{ - dir = 4 - }, +/obj/machinery/door/window/left/directional/east, /obj/effect/turf_decal/tile/neutral/anticorner/contrasted{ dir = 8 }, @@ -47781,10 +47730,7 @@ /turf/open/floor/iron/dark, /area/station/command/gateway) "puJ" = ( -/obj/machinery/door/window/left/directional/north{ - base_state = "right"; - dir = 8; - icon_state = "right"; +/obj/machinery/door/window/right/directional/west{ name = "Creature Cell"; req_access = list("xenobiology") }, @@ -48125,8 +48071,7 @@ name = "Creature Cell 3" }, /obj/effect/turf_decal/delivery, -/obj/machinery/door/window/left/directional/north{ - dir = 4; +/obj/machinery/door/window/left/directional/east{ name = "Creature Cell"; req_access = list("xenobiology") }, @@ -49484,8 +49429,7 @@ }, /obj/structure/table/glass, /obj/structure/window/reinforced/spawner/directional/south, -/obj/machinery/door/window/left/directional/east{ - dir = 8; +/obj/machinery/door/window/left/directional/west{ name = "First-Aid Supplies"; req_access = list("medical") }, @@ -53097,8 +53041,7 @@ /obj/structure/table/reinforced, /obj/effect/turf_decal/delivery, /obj/machinery/door/firedoor, -/obj/machinery/door/window/left/directional/west{ - dir = 4; +/obj/machinery/door/window/left/directional/east{ name = "Cargo Desk"; req_access = list("shipping") }, @@ -53346,10 +53289,7 @@ /obj/structure/window/reinforced/spawner/directional/north{ pixel_y = 1 }, -/obj/machinery/door/window/right/directional/east{ - base_state = "left"; - dir = 8; - icon_state = "left"; +/obj/machinery/door/window/left/directional/west{ name = "Fitness Ring" }, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -55197,7 +55137,7 @@ dir = 4 }, /obj/effect/landmark/start/assistant, -/obj/item/bedsheet/dorms{ +/obj/effect/spawner/random/bedsheet{ dir = 4 }, /obj/effect/landmark/start/hangover, @@ -58051,8 +57991,7 @@ "sJI" = ( /obj/structure/window/reinforced/spawner/directional/north, /obj/structure/window/reinforced/spawner/directional/south, -/obj/machinery/door/window/left/directional/north{ - dir = 4; +/obj/machinery/door/window/left/directional/east{ name = "Inner Pipe Access"; req_access = list("atmospherics") }, @@ -61179,7 +61118,7 @@ /obj/structure/window/reinforced/spawner/directional/north, /obj/structure/window/reinforced/spawner/directional/west, /obj/structure/rack/gunrack, -/obj/effect/spawner/armory_spawn/microfusion, +/obj/effect/spawner/armory_spawn/mod_lasers_small, /turf/open/floor/iron/showroomfloor, /area/station/ai_monitored/security/armory) "tGb" = ( @@ -61783,8 +61722,7 @@ input_dir = 4; output_dir = 8 }, -/obj/machinery/door/window/left/directional/east{ - dir = 8; +/obj/machinery/door/window/left/directional/west{ name = "Ore Redemtion Window"; req_access = list("mineral_storeroom") }, @@ -62919,8 +62857,7 @@ name = "Chemistry Lobby Shutters" }, /obj/machinery/door/firedoor/heavy, -/obj/machinery/door/window/left/directional/north{ - dir = 2; +/obj/machinery/door/window/left/directional/south{ name = "Chemistry Desk"; req_access = list("pharmacy") }, @@ -64513,8 +64450,7 @@ /turf/open/floor/iron/dark, /area/station/engineering/supermatter/room) "uJP" = ( -/obj/machinery/door/window/left/directional/north{ - dir = 4; +/obj/machinery/door/window/left/directional/east{ name = "Monkey Pen"; req_access = list("genetics") }, @@ -67104,9 +67040,7 @@ /area/station/hallway/primary/central/fore) "vAa" = ( /obj/structure/table/reinforced, -/obj/machinery/door/window/left/directional/south{ - dir = 1 - }, +/obj/machinery/door/window/left/directional/north, /obj/machinery/door/poddoor/shutters{ dir = 1; id = "visitation"; @@ -72336,7 +72270,7 @@ "xds" = ( /obj/structure/bed, /obj/effect/landmark/start/assistant, -/obj/item/bedsheet/dorms, +/obj/effect/spawner/random/bedsheet, /obj/effect/landmark/start/hangover, /obj/item/pillow/random, /turf/open/floor/wood, @@ -73857,11 +73791,7 @@ name = "Private Channel"; pixel_x = -8 }, -/obj/machinery/door/window{ - atom_integrity = 300; - base_state = "rightsecure"; - dir = 4; - icon_state = "rightsecure"; +/obj/machinery/door/window/brigdoor/right/directional/east{ layer = 4.1; name = "Secondary AI Core Access"; pixel_x = 4; @@ -74559,8 +74489,7 @@ id = "packagereturn"; name = "crate return belt" }, -/obj/machinery/door/window/left/directional/west{ - dir = 1; +/obj/machinery/door/window/left/directional/north{ name = "Crate Return Door"; req_access = list("shipping") }, @@ -75299,8 +75228,7 @@ name = "Chemistry Hall Shutters" }, /obj/machinery/door/firedoor/heavy, -/obj/machinery/door/window/left/directional/north{ - dir = 8; +/obj/machinery/door/window/left/directional/west{ name = "Chemistry Desk"; req_access = list("pharmacy") }, diff --git a/_maps/map_files/MetaStation/MetaStation.dmm b/_maps/map_files/MetaStation/MetaStation.dmm index 27f23bc7776..443f7049dea 100644 --- a/_maps/map_files/MetaStation/MetaStation.dmm +++ b/_maps/map_files/MetaStation/MetaStation.dmm @@ -328,8 +328,7 @@ /area/station/science/cytology) "agQ" = ( /obj/structure/table/reinforced, -/obj/machinery/door/window/left/directional/west{ - dir = 2; +/obj/machinery/door/window/left/directional/south{ name = "Cargo Desk"; req_access = list("shipping") }, @@ -553,10 +552,7 @@ }, /obj/structure/table/wood/fancy/blue, /obj/effect/spawner/random/aimodule/neutral, -/obj/machinery/door/window{ - base_state = "right"; - dir = 4; - icon_state = "right"; +/obj/machinery/door/window/right/directional/east{ name = "Core Modules"; req_access = list("captain") }, @@ -604,8 +600,7 @@ /turf/open/floor/iron/dark, /area/station/security/mechbay) "alI" = ( -/obj/machinery/door/window/left/directional/west{ - dir = 4; +/obj/machinery/door/window/left/directional/east{ name = "Bridge Deliveries"; req_access = list("command") }, @@ -869,12 +864,6 @@ /obj/effect/turf_decal/tile/neutral/fourcorners, /turf/open/floor/iron/dark, /area/station/commons/locker) -"aqx" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/disposalpipe/segment, -/turf/open/floor/iron, -/area/station/cargo/miningoffice) "aqG" = ( /obj/effect/spawner/structure/window, /turf/open/floor/plating, @@ -1002,6 +991,13 @@ }, /turf/open/floor/iron, /area/station/security/office) +"atS" = ( +/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/broken_floor, +/turf/open/floor/plating, +/area/station/maintenance/port/fore) "aub" = ( /obj/effect/spawner/random/structure/grille, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -1128,7 +1124,7 @@ /area/station/maintenance/fore/lesser) "avU" = ( /obj/structure/bed, -/obj/item/bedsheet/dorms, +/obj/effect/spawner/random/bedsheet, /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, /obj/machinery/button/door/directional/east{ id = "Cabin2"; @@ -2264,6 +2260,20 @@ /obj/structure/cable, /turf/open/floor/iron/dark, /area/station/ai_monitored/turret_protected/ai_upload) +"aPx" = ( +/obj/effect/turf_decal/bot, +/obj/effect/spawner/random/structure/closet_empty/crate, +/turf/open/floor/iron, +/area/station/maintenance/port/aft) +"aPH" = ( +/obj/structure/bed/dogbed/runtime, +/obj/item/toy/cattoy, +/obj/effect/turf_decal/tile/blue/anticorner/contrasted{ + dir = 4 + }, +/mob/living/basic/pet/cat/runtime, +/turf/open/floor/iron/white, +/area/station/command/heads_quarters/cmo) "aPX" = ( /obj/machinery/atmospherics/components/unary/thermomachine/freezer/on{ dir = 1 @@ -3469,13 +3479,6 @@ /obj/structure/cable, /turf/open/floor/plating, /area/station/security/warden) -"bkE" = ( -/obj/machinery/light/small/directional/east, -/obj/machinery/firealarm/directional/east, -/obj/effect/turf_decal/tile/blue, -/mob/living/basic/bot/cleanbot, -/turf/open/floor/iron/dark, -/area/station/ai_monitored/turret_protected/aisat_interior) "bkF" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -3995,6 +3998,26 @@ /obj/effect/landmark/event_spawn, /turf/open/floor/iron, /area/station/cargo/storage) +"btn" = ( +/obj/effect/decal/cleanable/dirt, +/obj/item/storage/box/drinkingglasses, +/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 + }, +/obj/effect/spawner/random/structure/closet_empty/crate, +/obj/effect/spawner/random/food_or_drink/donkpockets, +/obj/effect/spawner/random/food_or_drink/cups, +/obj/effect/turf_decal/tile/neutral{ + dir = 4 + }, +/obj/effect/turf_decal/tile/bar{ + dir = 1 + }, +/turf/open/floor/iron, +/area/station/hallway/secondary/service) "btt" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, @@ -4965,6 +4988,12 @@ }, /turf/open/floor/iron, /area/station/hallway/secondary/service) +"bMu" = ( +/obj/effect/mapping_helpers/broken_floor, +/obj/item/food/fortunecookie, +/obj/structure/safe/floor, +/turf/open/floor/plating, +/area/station/maintenance/port/fore) "bMA" = ( /obj/effect/turf_decal/stripes/line{ dir = 4 @@ -5376,15 +5405,6 @@ /obj/effect/turf_decal/tile/bar/opposingcorners, /turf/open/floor/iron, /area/station/service/kitchen) -"bUm" = ( -/obj/structure/closet/crate, -/obj/machinery/light/small/directional/east, -/obj/item/radio/intercom/directional/east, -/obj/effect/turf_decal/stripes/line{ - dir = 1 - }, -/turf/open/floor/iron, -/area/station/cargo/miningoffice) "bUo" = ( /obj/structure/table/reinforced, /obj/item/stack/sheet/plasteel{ @@ -5565,9 +5585,7 @@ /area/station/security/office) "bWS" = ( /obj/machinery/light/small/directional/west, -/obj/machinery/door/window{ - base_state = "right"; - icon_state = "right"; +/obj/machinery/door/window/right/directional/south{ name = "MiniSat Walkway Access" }, /obj/machinery/camera/directional/west{ @@ -5797,14 +5815,6 @@ /obj/structure/disposalpipe/segment, /turf/open/floor/iron/white, /area/station/medical/chemistry) -"cdm" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/spawner/random/structure/closet_empty/crate, -/obj/effect/turf_decal/bot, -/obj/item/electronics/apc, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/turf/open/floor/iron, -/area/station/cargo/warehouse) "cdv" = ( /obj/machinery/door/airlock{ id_tag = "AuxToilet1"; @@ -5940,6 +5950,12 @@ dir = 1 }, /area/station/security/prison) +"cgk" = ( +/obj/structure/cable, +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/turf_decal/stripes/line, +/turf/open/floor/iron, +/area/station/cargo/miningoffice) "cgl" = ( /obj/structure/chair/stool/bar/directional/south, /obj/effect/turf_decal/siding/wood{ @@ -6797,7 +6813,7 @@ /turf/open/floor/iron, /area/station/hallway/primary/central) "cwX" = ( -/obj/machinery/door/window/brigdoor{ +/obj/machinery/door/window/brigdoor/left/directional/south{ name = "Command Desk"; req_access = list("command") }, @@ -7054,6 +7070,10 @@ }, /turf/open/floor/plating, /area/station/science/robotics/mechbay) +"cBZ" = ( +/obj/structure/railing, +/turf/open/floor/iron, +/area/station/cargo/miningoffice) "cCx" = ( /obj/machinery/modular_computer/preset/cargochat/science{ dir = 4 @@ -7703,9 +7723,7 @@ /turf/open/floor/iron, /area/station/engineering/atmos) "cQV" = ( -/obj/machinery/door/window{ - base_state = "right"; - icon_state = "right"; +/obj/machinery/door/window/right/directional/south{ name = "MiniSat Walkway Access" }, /obj/structure/window/reinforced/spawner/directional/north, @@ -8995,8 +9013,7 @@ /obj/item/paper_bin, /obj/item/pen, /obj/structure/disposalpipe/segment, -/obj/machinery/door/window/left/directional/west{ - dir = 1; +/obj/machinery/door/window/left/directional/north{ name = "Robotics Desk"; req_access = list("robotics") }, @@ -9435,6 +9452,16 @@ /obj/effect/landmark/event_spawn, /turf/open/floor/iron, /area/station/cargo/drone_bay) +"dxo" = ( +/obj/structure/railing{ + dir = 6 + }, +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/turf_decal/stripes/corner{ + dir = 4 + }, +/turf/open/floor/iron, +/area/station/cargo/miningoffice) "dxq" = ( /obj/structure/chair{ dir = 8 @@ -9802,11 +9829,6 @@ /obj/machinery/light/small/dim/directional/north, /turf/open/floor/wood, /area/station/commons/vacant_room/office) -"dGT" = ( -/obj/effect/spawner/random/structure/closet_empty/crate, -/obj/item/clothing/gloves/color/fyellow, -/turf/open/floor/plating, -/area/station/maintenance/port/fore) "dGW" = ( /obj/machinery/holopad, /obj/effect/decal/cleanable/dirt, @@ -10881,8 +10903,7 @@ /obj/structure/desk_bell{ pixel_x = 6 }, -/obj/machinery/door/window/left/directional/west{ - dir = 4; +/obj/machinery/door/window/left/directional/east{ name = "Robotics Desk"; req_access = list("robotics") }, @@ -10925,15 +10946,6 @@ /obj/machinery/light/small/directional/south, /turf/open/floor/wood, /area/station/service/library) -"eaq" = ( -/obj/effect/turf_decal/tile/blue/anticorner/contrasted{ - dir = 4 - }, -/mob/living/basic/bot/medbot/autopatrol, -/turf/open/floor/iron/white/corner{ - dir = 8 - }, -/area/station/medical/medbay/lobby) "eau" = ( /obj/effect/turf_decal/trimline/neutral/filled/corner{ dir = 8 @@ -11434,10 +11446,6 @@ }, /turf/open/floor/iron, /area/station/hallway/primary/fore) -"eih" = ( -/mob/living/basic/bot/cleanbot/medbay, -/turf/open/floor/iron/white, -/area/station/medical/storage) "eiO" = ( /obj/structure/table, /obj/item/storage/backpack/duffelbag/sec{ @@ -11601,7 +11609,7 @@ /turf/open/floor/plating, /area/station/maintenance/port/aft) "ekP" = ( -/obj/machinery/door/window/brigdoor/security/cell{ +/obj/machinery/door/window/brigdoor/security/cell/left/directional/south{ id = "Cell 2"; name = "Cell 2" }, @@ -12720,8 +12728,7 @@ /turf/open/floor/iron/dark, /area/station/ai_monitored/aisat/exterior) "eGd" = ( -/obj/machinery/door/window{ - dir = 1; +/obj/machinery/door/window/left/directional/north{ name = "MiniSat Walkway Access" }, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -12944,7 +12951,7 @@ /turf/open/floor/plating, /area/station/maintenance/port/aft) "eLr" = ( -/obj/machinery/door/window{ +/obj/machinery/door/window/left/directional/south{ name = "MiniSat Walkway Access" }, /obj/structure/window/reinforced/spawner/directional/north, @@ -13417,10 +13424,7 @@ /area/station/medical/medbay/central) "eVa" = ( /obj/structure/table/reinforced, -/obj/machinery/door/window/left/directional/west{ - base_state = "right"; - dir = 2; - icon_state = "right"; +/obj/machinery/door/window/right/directional/south{ name = "Reception Window" }, /obj/item/paper, @@ -13431,8 +13435,7 @@ id = "briglockdown"; name = "Warden Desk Shutters" }, -/obj/machinery/door/window/brigdoor{ - dir = 1; +/obj/machinery/door/window/brigdoor/left/directional/north{ name = "Brig Control Desk"; req_access = list("armory") }, @@ -13638,16 +13641,6 @@ dir = 1 }, /area/station/engineering/atmos/pumproom) -"eYy" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/spawner/random/structure/closet_empty/crate, -/obj/effect/turf_decal/bot, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/disposalpipe/segment{ - dir = 9 - }, -/turf/open/floor/iron, -/area/station/cargo/warehouse) "eYz" = ( /obj/machinery/airalarm/directional/east, /obj/machinery/newscaster/directional/north, @@ -14601,6 +14594,11 @@ /obj/effect/landmark/event_spawn, /turf/open/floor/iron, /area/station/command/teleporter) +"fnJ" = ( +/obj/effect/spawner/random/structure/closet_empty/crate, +/obj/item/clothing/gloves/color/fyellow, +/turf/open/floor/plating, +/area/station/maintenance/port/fore) "fnN" = ( /obj/effect/decal/cleanable/dirt, /turf/open/floor/iron, @@ -14666,10 +14664,7 @@ /turf/open/floor/iron/white/smooth_large, /area/station/medical/storage) "fpd" = ( -/obj/machinery/door/window{ - base_state = "right"; - dir = 8; - icon_state = "right"; +/obj/machinery/door/window/right/directional/west{ name = "MiniSat Airlock Access" }, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -15142,8 +15137,7 @@ /turf/open/floor/iron, /area/station/engineering/atmos) "fBo" = ( -/obj/machinery/door/window/left/directional/north{ - dir = 8; +/obj/machinery/door/window/left/directional/west{ name = "Magboot Storage"; pixel_x = -1; req_access = list("eva") @@ -15749,6 +15743,11 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/hallway/primary/central) +"fMr" = ( +/obj/effect/spawner/random/maintenance, +/obj/machinery/recharge_station, +/turf/open/floor/plating, +/area/station/maintenance/port/fore) "fMy" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/cable, @@ -16569,7 +16568,7 @@ /turf/open/floor/iron, /area/station/commons/vacant_room/commissary) "gey" = ( -/obj/machinery/door/window{ +/obj/machinery/door/window/left/directional/south{ name = "MiniSat Walkway Access" }, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -17891,6 +17890,14 @@ }, /turf/open/floor/iron/white, /area/station/medical/medbay/central) +"gDq" = ( +/obj/machinery/atmospherics/pipe/smart/simple/cyan/visible/layer5, +/obj/machinery/atmospherics/pipe/smart/simple/purple/visible, +/obj/effect/spawner/random/structure/closet_empty/crate, +/obj/item/circuitboard/machine/thermomachine, +/obj/machinery/light/small/directional/east, +/turf/open/floor/iron/dark/textured, +/area/station/engineering/atmos) "gDv" = ( /obj/item/kirbyplants, /obj/effect/turf_decal/tile/blue/fourcorners, @@ -19725,8 +19732,7 @@ }, /obj/effect/spawner/random/aimodule/harmful, /obj/structure/table/wood/fancy/red, -/obj/machinery/door/window/brigdoor/left/directional/south{ - dir = 8; +/obj/machinery/door/window/brigdoor/left/directional/west{ name = "High-Risk Modules"; req_access = list("captain") }, @@ -19739,6 +19745,17 @@ "hlD" = ( /turf/open/floor/carpet, /area/station/command/heads_quarters/captain/private) +"hlE" = ( +/obj/effect/turf_decal/tile/brown/half/contrasted{ + dir = 1 + }, +/obj/machinery/conveyor{ + dir = 8; + id = "mining" + }, +/obj/machinery/light/small/directional/south, +/turf/open/floor/iron, +/area/station/cargo/miningoffice) "hlF" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -19843,8 +19860,7 @@ name = "Pharmacy Desk"; req_access = list("pharmacy") }, -/obj/machinery/door/window/right/directional/east{ - dir = 8; +/obj/machinery/door/window/right/directional/west{ name = "Pharmacy Desk"; req_access = list("medical") }, @@ -20215,8 +20231,7 @@ /area/station/medical/morgue) "hwe" = ( /obj/structure/table/reinforced, -/obj/machinery/door/window/right/directional/south{ - dir = 8; +/obj/machinery/door/window/right/directional/west{ name = "First Aid Supplies"; req_access = list("medical") }, @@ -20366,10 +20381,7 @@ /turf/open/floor/plating/airless, /area/station/science/ordnance/bomb) "hxW" = ( -/obj/machinery/door/window/left/directional/west{ - base_state = "right"; - dir = 1; - icon_state = "right"; +/obj/machinery/door/window/right/directional/north{ name = "Gas Ports" }, /obj/machinery/atmospherics/components/binary/pump{ @@ -20452,12 +20464,24 @@ }, /obj/machinery/holopad/secure, /obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/machinery/door/window/brigdoor/right/directional/east{ + name = "Tertiary AI Core Access"; + req_access = list("ai_upload"); + pixel_x = 4 + }, /turf/open/floor/iron/dark, /area/station/ai_monitored/turret_protected/ai) "hza" = ( /obj/vehicle/sealed/mecha/ripley/paddy/preset, /turf/open/floor/iron/recharge_floor, /area/station/security/mechbay) +"hzb" = ( +/obj/effect/turf_decal/tile/brown/half/contrasted, +/obj/effect/decal/cleanable/dirt/dust, +/obj/machinery/light/directional/north, +/obj/effect/landmark/start/shaft_miner, +/turf/open/floor/iron, +/area/station/cargo/miningoffice) "hzt" = ( /obj/structure/transit_tube/curved/flipped, /obj/effect/turf_decal/tile/blue{ @@ -20519,9 +20543,7 @@ id = "visitation"; name = "Visitation Shutters" }, -/obj/machinery/door/window/right/directional/south{ - dir = 4 - }, +/obj/machinery/door/window/right/directional/east, /obj/structure/table, /turf/open/floor/iron, /area/station/security/prison/visit) @@ -20789,6 +20811,13 @@ /obj/effect/turf_decal/tile/yellow/opposingcorners, /turf/open/floor/iron/white, /area/station/medical/chemistry) +"hFM" = ( +/obj/effect/spawner/random/structure/closet_empty/crate, +/obj/effect/turf_decal/stripes/line, +/obj/effect/spawner/random/maintenance/two, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, +/turf/open/floor/plating, +/area/station/maintenance/starboard/lesser) "hGi" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ dir = 8 @@ -21960,12 +21989,11 @@ }, /area/station/service/chapel) "icb" = ( -/obj/machinery/door/window/brigdoor{ +/obj/machinery/door/window/brigdoor/left/directional/south{ name = "Justice Chamber"; req_access = list("armory") }, -/obj/machinery/door/window/brigdoor{ - dir = 1; +/obj/machinery/door/window/brigdoor/left/directional/north{ name = "Justice Chamber"; req_access = list("armory") }, @@ -22307,13 +22335,6 @@ /obj/effect/landmark/navigate_destination, /turf/open/floor/iron, /area/station/command/heads_quarters/rd) -"iip" = ( -/obj/effect/spawner/random/structure/closet_empty/crate, -/obj/effect/turf_decal/stripes/line, -/obj/effect/spawner/random/maintenance/two, -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, -/turf/open/floor/plating, -/area/station/maintenance/starboard/lesser) "iix" = ( /obj/item/flashlight/lamp, /obj/machinery/newscaster/directional/west, @@ -22686,15 +22707,12 @@ /turf/open/floor/iron, /area/station/engineering/atmos) "iom" = ( -/obj/machinery/door/window/left/directional/west{ - base_state = "right"; - dir = 4; - icon_state = "right"; - name = "Infirmary" - }, /obj/effect/turf_decal/trimline/blue/filled/line{ dir = 4 }, +/obj/machinery/door/window/right/directional/east{ + name = "Infirmary" + }, /turf/open/floor/iron/white, /area/station/security/medical) "iov" = ( @@ -22951,10 +22969,7 @@ dir = 8; id = "garbage" }, -/obj/machinery/door/window/right/directional/east{ - base_state = "left"; - dir = 1; - icon_state = "left"; +/obj/machinery/door/window/left/directional/north{ name = "Danger: Conveyor Access"; req_access = list("maint_tunnels") }, @@ -22965,8 +22980,7 @@ /area/station/engineering/atmos) "isX" = ( /obj/structure/table/reinforced, -/obj/machinery/door/window/left/directional/north{ - dir = 4; +/obj/machinery/door/window/left/directional/east{ name = "Engineering Desk"; req_access = list("engineering") }, @@ -23815,6 +23829,13 @@ /obj/structure/window/reinforced/spawner/directional/south, /turf/open/floor/engine, /area/station/science/xenobiology) +"iId" = ( +/obj/machinery/conveyor{ + id = "mining" + }, +/obj/machinery/brm, +/turf/open/floor/iron, +/area/station/cargo/miningoffice) "iIf" = ( /obj/machinery/camera/directional/north{ c_tag = "Locker Room Entrance" @@ -23966,8 +23987,7 @@ /area/station/hallway/primary/central) "iKV" = ( /obj/structure/table/reinforced, -/obj/machinery/door/window/left/directional/north{ - dir = 2; +/obj/machinery/door/window/left/directional/south{ name = "Atmospherics Desk"; req_access = list("atmospherics") }, @@ -24799,13 +24819,9 @@ /turf/open/floor/iron/white, /area/station/science/ordnance/storage) "iWB" = ( -/obj/structure/rack{ - icon = 'icons/obj/fluff/general.dmi'; - icon_state = "minibar"; - name = "skeletal minibar" - }, /obj/item/storage/fancy/candle_box, /obj/machinery/light/small/directional/east, +/obj/structure/rack/skeletal, /turf/open/floor/engine/cult, /area/station/service/library) "iWD" = ( @@ -25018,6 +25034,17 @@ /obj/structure/window/spawner/directional/west, /turf/open/floor/iron/dark, /area/station/medical/storage) +"iZC" = ( +/obj/structure/closet/crate, +/obj/machinery/light/small/directional/east, +/obj/item/radio/intercom/directional/east, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/effect/spawner/random/entertainment/dice, +/obj/item/storage/toolbox/emergency, +/turf/open/floor/iron, +/area/station/cargo/miningoffice) "iZF" = ( /obj/structure/cable, /obj/effect/turf_decal/trimline/blue/filled/line{ @@ -25894,19 +25921,6 @@ /obj/effect/turf_decal/tile/brown/half/contrasted, /turf/open/floor/iron, /area/station/cargo/miningoffice) -"jpI" = ( -/obj/structure/table, -/obj/effect/spawner/random/entertainment/deck, -/obj/effect/spawner/random/entertainment/cigarette_pack{ - pixel_x = -6; - pixel_y = 8 - }, -/obj/effect/turf_decal/tile/brown/anticorner/contrasted{ - dir = 1 - }, -/obj/machinery/light/directional/east, -/turf/open/floor/iron, -/area/station/cargo/miningoffice) "jpO" = ( /obj/machinery/door/airlock/external, /obj/effect/mapping_helpers/airlock/cyclelink_helper, @@ -25980,6 +25994,17 @@ /obj/structure/cable, /turf/open/floor/iron, /area/station/hallway/secondary/command) +"jrx" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/spawner/random/maintenance, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/turf_decal/bot, +/obj/structure/disposalpipe/segment, +/obj/effect/spawner/random/structure/closet_empty/crate, +/obj/effect/spawner/random/maintenance, +/turf/open/floor/iron, +/area/station/cargo/warehouse) "jrL" = ( /obj/structure/disposalpipe/segment{ dir = 4 @@ -26182,15 +26207,6 @@ }, /turf/open/floor/iron, /area/station/engineering/break_room) -"juO" = ( -/obj/structure/bed/dogbed/runtime, -/obj/item/toy/cattoy, -/obj/effect/turf_decal/tile/blue/anticorner/contrasted{ - dir = 4 - }, -/mob/living/basic/pet/cat/runtime, -/turf/open/floor/iron/white, -/area/station/command/heads_quarters/cmo) "juV" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -26563,8 +26579,7 @@ /turf/open/floor/iron/white, /area/station/science/xenobiology) "jzC" = ( -/obj/machinery/door/window/right/directional/north{ - dir = 8; +/obj/machinery/door/window/right/directional/west{ name = "Animal Pen A" }, /turf/open/floor/grass, @@ -26655,6 +26670,14 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/cargo/miningoffice) +"jBp" = ( +/obj/effect/turf_decal/tile/brown/half/contrasted, +/obj/machinery/conveyor_switch/oneway{ + id = "mining"; + dir = 1 + }, +/turf/open/floor/iron, +/area/station/cargo/miningoffice) "jBC" = ( /obj/structure/table, /obj/item/clothing/head/soft/grey{ @@ -26798,6 +26821,11 @@ pixel_y = -26 }, /obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/machinery/door/window/brigdoor/left/directional/west{ + name = "Secondary AI Core Access"; + req_access = list("ai_upload"); + pixel_x = -4 + }, /turf/open/floor/iron/dark, /area/station/ai_monitored/turret_protected/ai) "jEI" = ( @@ -26833,11 +26861,6 @@ }, /turf/open/floor/iron, /area/station/hallway/primary/port) -"jFk" = ( -/obj/effect/spawner/random/maintenance, -/obj/effect/mapping_helpers/broken_floor, -/turf/open/floor/plating, -/area/station/maintenance/port/fore) "jFr" = ( /obj/structure/sign/poster/party_game, /turf/closed/wall, @@ -27110,6 +27133,15 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/security/execution/transfer) +"jJu" = ( +/obj/structure/cable, +/obj/effect/mapping_helpers/airlock/access/any/supply/bit_den, +/obj/machinery/door/airlock/maintenance{ + name = "Mining Dock Maintenance" + }, +/obj/effect/mapping_helpers/airlock/access/any/supply/mining, +/turf/open/floor/plating, +/area/station/cargo/miningoffice) "jJC" = ( /obj/structure/disposalpipe/segment, /obj/structure/lattice/catwalk, @@ -27567,15 +27599,6 @@ /obj/effect/spawner/random/maintenance, /turf/open/floor/plating, /area/station/maintenance/starboard/fore) -"jRC" = ( -/obj/machinery/door/airlock/maintenance{ - name = "Mining Dock Maintenance" - }, -/obj/structure/cable, -/obj/effect/mapping_helpers/airlock/access/any/supply/bit_den, -/obj/effect/mapping_helpers/airlock/access/any/supply/mining, -/turf/open/floor/plating, -/area/station/maintenance/port/fore) "jRD" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/effect/turf_decal/tile/neutral/half/contrasted{ @@ -27792,8 +27815,7 @@ /turf/open/floor/iron/white, /area/station/medical/abandoned) "jUH" = ( -/obj/machinery/door/window/right/directional/east{ - dir = 8; +/obj/machinery/door/window/right/directional/west{ name = "Fitness Ring" }, /obj/structure/window/spawner/directional/north, @@ -27878,13 +27900,10 @@ /area/station/service/chapel/office) "jVZ" = ( /obj/structure/table/reinforced, -/obj/machinery/door/window/left/directional/west{ - base_state = "right"; - icon_state = "right"; +/obj/machinery/door/window/right/directional/west{ name = "Outer Window" }, -/obj/machinery/door/window/brigdoor{ - dir = 4; +/obj/machinery/door/window/brigdoor/left/directional/east{ name = "Security Desk"; req_access = list("security") }, @@ -28185,8 +28204,7 @@ /area/station/service/janitor) "kbR" = ( /obj/structure/sign/poster/official/cleanliness/directional/east, -/obj/machinery/door/window/right/directional/east{ - dir = 1; +/obj/machinery/door/window/right/directional/north{ name = "Hydroponics Delivery"; req_access = list("hydroponics") }, @@ -28473,8 +28491,7 @@ /turf/open/floor/iron, /area/station/security/brig) "kho" = ( -/obj/machinery/door/window{ - dir = 4; +/obj/machinery/door/window/left/directional/east{ name = "Mass Driver"; req_access = list("chapel_office") }, @@ -29224,11 +29241,6 @@ }, /turf/open/floor/iron, /area/station/command/gateway) -"kwq" = ( -/obj/effect/turf_decal/bot, -/obj/effect/spawner/random/structure/closet_empty/crate, -/turf/open/floor/iron, -/area/station/maintenance/port/aft) "kww" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/cyan/visible, /turf/closed/wall/r_wall, @@ -29445,8 +29457,7 @@ /turf/open/floor/iron, /area/station/hallway/primary/aft) "kAp" = ( -/obj/machinery/door/window/left/directional/north{ - dir = 8; +/obj/machinery/door/window/left/directional/west{ name = "Disposals Chute" }, /obj/machinery/disposal/delivery_chute{ @@ -29467,6 +29478,13 @@ /obj/machinery/duct, /turf/open/floor/iron/freezer, /area/station/commons/toilet/restrooms) +"kAI" = ( +/obj/effect/spawner/random/structure/closet_maintenance, +/obj/effect/spawner/random/maintenance, +/obj/effect/spawner/random/maintenance, +/obj/effect/spawner/random/maintenance, +/turf/open/floor/plating, +/area/station/maintenance/port/fore) "kAT" = ( /obj/effect/landmark/start/head_of_security, /obj/structure/chair/comfy/black, @@ -29743,8 +29761,7 @@ /turf/open/floor/plating, /area/station/maintenance/starboard/greater) "kGJ" = ( -/obj/machinery/door/window/right/directional/north{ - dir = 4; +/obj/machinery/door/window/right/directional/east{ name = "Research Delivery"; req_access = list("science") }, @@ -31315,12 +31332,6 @@ /obj/effect/turf_decal/tile/neutral/fourcorners, /turf/open/floor/iron/dark, /area/station/engineering/storage/tech) -"llh" = ( -/obj/effect/spawner/random/structure/closet_maintenance, -/obj/effect/spawner/random/maintenance, -/obj/effect/spawner/random/maintenance, -/turf/open/floor/plating, -/area/station/maintenance/port/fore) "llk" = ( /obj/structure/cable, /obj/machinery/power/solar{ @@ -31785,8 +31796,7 @@ /obj/structure/table/reinforced, /obj/machinery/door/firedoor, /obj/item/paper, -/obj/machinery/door/window/left/directional/east{ - dir = 2; +/obj/machinery/door/window/left/directional/south{ name = "Hydroponics Window"; req_access = list("hydroponics") }, @@ -31880,9 +31890,7 @@ /obj/effect/turf_decal/stripes/line{ dir = 8 }, -/obj/machinery/door/window/left/directional/west{ - base_state = "right"; - icon_state = "right"; +/obj/machinery/door/window/right/directional/west{ name = "Shooting Range" }, /turf/open/floor/iron, @@ -31896,8 +31904,7 @@ /turf/open/floor/plating, /area/station/maintenance/starboard/lesser) "lvu" = ( -/obj/machinery/door/window/left/directional/west{ - dir = 4; +/obj/machinery/door/window/left/directional/east{ name = "Infirmary" }, /obj/effect/turf_decal/trimline/blue/filled/line{ @@ -31975,7 +31982,7 @@ /area/station/medical/virology) "lxf" = ( /obj/structure/bed, -/obj/item/bedsheet/dorms, +/obj/effect/spawner/random/bedsheet, /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, /obj/machinery/button/door/directional/west{ id = "Cabin5"; @@ -32112,8 +32119,7 @@ /turf/open/space/basic, /area/space/nearstation) "lAH" = ( -/obj/machinery/door/window/brigdoor{ - dir = 1; +/obj/machinery/door/window/brigdoor/left/directional/north{ name = "Research Director Observation"; req_access = list("rd") }, @@ -32412,12 +32418,6 @@ }, /turf/open/floor/wood, /area/station/command/heads_quarters/hop) -"lJo" = ( -/obj/structure/closet/emcloset, -/obj/machinery/firealarm/directional/east, -/obj/effect/turf_decal/tile/brown/half/contrasted, -/turf/open/floor/iron, -/area/station/cargo/miningoffice) "lJr" = ( /obj/structure/chair{ dir = 1 @@ -32473,10 +32473,7 @@ /turf/open/floor/engine, /area/station/engineering/supermatter/room) "lLw" = ( -/obj/machinery/door/window/right/directional/east{ - base_state = "left"; - dir = 2; - icon_state = "left"; +/obj/machinery/door/window/left/directional/south{ name = "Shower" }, /obj/machinery/shower/directional/south, @@ -32740,8 +32737,7 @@ /turf/open/floor/iron, /area/station/security/office) "lPt" = ( -/obj/machinery/door/window/left/directional/north{ - dir = 8; +/obj/machinery/door/window/left/directional/west{ name = "Jetpack Storage"; pixel_x = -1; req_access = list("eva") @@ -33545,11 +33541,6 @@ }, /turf/open/floor/iron, /area/station/cargo/miningoffice) -"mdW" = ( -/obj/structure/safe/floor, -/obj/item/food/fortunecookie, -/turf/open/floor/plating, -/area/station/maintenance/port/fore) "mei" = ( /obj/machinery/atmospherics/pipe/smart/simple/cyan/visible, /turf/open/floor/iron, @@ -33619,8 +33610,7 @@ /obj/structure/disposalpipe/trunk{ dir = 8 }, -/obj/machinery/door/window/right/directional/west{ - dir = 4; +/obj/machinery/door/window/right/directional/east{ name = "Crate to Shuttle"; req_access = list("shipping") }, @@ -33895,6 +33885,12 @@ }, /turf/open/floor/engine, /area/station/engineering/supermatter) +"mkz" = ( +/obj/effect/spawner/random/structure/closet_maintenance, +/obj/item/hand_labeler_refill, +/obj/effect/spawner/random/maintenance, +/turf/open/floor/plating, +/area/station/maintenance/port/fore) "mkO" = ( /obj/machinery/door/firedoor, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -35161,17 +35157,6 @@ }, /turf/open/floor/iron/white, /area/station/medical/virology) -"mFw" = ( -/obj/structure/table, -/obj/effect/turf_decal/tile/brown/anticorner/contrasted{ - dir = 1 - }, -/obj/item/storage/box/bandages{ - pixel_x = 4; - pixel_y = 6 - }, -/turf/open/floor/iron, -/area/station/cargo/miningoffice) "mFC" = ( /obj/effect/decal/cleanable/dirt, /obj/structure/reagent_dispensers/beerkeg, @@ -35400,8 +35385,7 @@ id = "rndlab2"; name = "Secondary Research and Development Shutter" }, -/obj/machinery/door/window/left/directional/south{ - dir = 4; +/obj/machinery/door/window/left/directional/east{ name = "Research Lab Desk"; req_access = list("science") }, @@ -35598,14 +35582,10 @@ /area/station/science/xenobiology) "mMM" = ( /obj/structure/table/reinforced, -/obj/machinery/door/window/left/directional/west{ - base_state = "right"; - dir = 4; - icon_state = "right"; +/obj/machinery/door/window/right/directional/east{ name = "Outer Window" }, -/obj/machinery/door/window/brigdoor{ - dir = 8; +/obj/machinery/door/window/brigdoor/left/directional/west{ name = "Brig Control Desk"; req_access = list("armory") }, @@ -35702,8 +35682,7 @@ /turf/open/floor/iron/freezer, /area/station/commons/toilet/restrooms) "mPF" = ( -/obj/machinery/door/window/right/directional/south{ - dir = 8; +/obj/machinery/door/window/right/directional/west{ name = "Surgical Supplies"; req_access = list("surgery") }, @@ -35868,12 +35847,11 @@ /turf/open/floor/iron, /area/station/hallway/secondary/exit/departure_lounge) "mRY" = ( -/obj/machinery/door/window{ - dir = 1; +/obj/machinery/door/window/left/directional/north{ name = "Mass Driver"; req_access = list("maint_tunnels") }, -/obj/machinery/door/window{ +/obj/machinery/door/window/left/directional/south{ name = "Mass Driver"; req_access = list("maint_tunnels") }, @@ -36362,6 +36340,13 @@ /obj/effect/landmark/start/atmospheric_technician, /turf/open/floor/iron, /area/station/engineering/atmos/storage/gas) +"mZW" = ( +/obj/machinery/light/small/directional/east, +/obj/machinery/firealarm/directional/east, +/obj/effect/turf_decal/tile/blue, +/mob/living/basic/bot/cleanbot, +/turf/open/floor/iron/dark, +/area/station/ai_monitored/turret_protected/aisat_interior) "nae" = ( /obj/effect/turf_decal/stripes/line, /obj/effect/turf_decal/caution/stand_clear/red{ @@ -36591,7 +36576,7 @@ /turf/open/floor/plating, /area/station/maintenance/fore) "neO" = ( -/obj/machinery/door/window/brigdoor/security/holding{ +/obj/machinery/door/window/brigdoor/security/holding/left/directional/south{ id = "Holding Cell"; name = "Holding Cell" }, @@ -36838,7 +36823,7 @@ /turf/open/floor/wood, /area/station/commons/vacant_room/office) "njP" = ( -/obj/machinery/door/window{ +/obj/machinery/door/window/left/directional/south{ name = "Captain's Desk"; req_access = list("captain") }, @@ -37374,13 +37359,6 @@ /obj/structure/cable, /turf/open/floor/plating, /area/station/maintenance/port/greater) -"nsM" = ( -/obj/machinery/recharge_station, -/obj/effect/turf_decal/stripes/end{ - dir = 4 - }, -/turf/open/floor/plating, -/area/station/maintenance/port/fore) "nsO" = ( /obj/machinery/computer/records/security, /obj/effect/turf_decal/tile/red/half/contrasted{ @@ -37596,8 +37574,7 @@ /turf/open/floor/plating, /area/station/maintenance/port/fore) "nwl" = ( -/obj/machinery/door/window/right/directional/south{ - dir = 1; +/obj/machinery/door/window/right/directional/north{ name = "Medical Deliveries"; req_access = list("medical") }, @@ -37627,13 +37604,10 @@ /area/station/engineering/atmos/pumproom) "nwL" = ( /obj/machinery/computer/upload/ai, -/obj/machinery/door/window/left/directional/west{ - base_state = "right"; - dir = 2; - icon_state = "right"; - layer = 3.1; +/obj/machinery/door/window/right/directional/south{ name = "Upload Console Window"; - req_access = list("ai_upload") + req_access = list("ai_upload"); + layer = 3.1 }, /obj/structure/window/reinforced/spawner/directional/west, /obj/structure/window/reinforced/spawner/directional/east, @@ -37953,6 +37927,14 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden, /turf/open/floor/iron/white, /area/station/medical/virology) +"nBI" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/spawner/random/structure/closet_empty/crate, +/obj/effect/turf_decal/bot, +/obj/item/electronics/apc, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron, +/area/station/cargo/warehouse) "nCa" = ( /obj/machinery/meter/layer2, /obj/machinery/atmospherics/pipe/smart/manifold/purple/visible/layer2{ @@ -40422,8 +40404,7 @@ /turf/open/floor/plating, /area/station/medical/abandoned) "oxk" = ( -/obj/machinery/door/window/right/directional/south{ - dir = 4; +/obj/machinery/door/window/right/directional/east{ name = "Engineering Deliveries"; req_access = list("engineering") }, @@ -40599,8 +40580,7 @@ "oBM" = ( /obj/structure/table/reinforced, /obj/machinery/door/firedoor, -/obj/machinery/door/window/right/directional/west{ - dir = 4; +/obj/machinery/door/window/right/directional/east{ name = "Hydroponics Desk"; req_access = list("hydroponics") }, @@ -41107,10 +41087,6 @@ /obj/effect/turf_decal/tile/red, /turf/open/floor/iron, /area/station/hallway/primary/fore) -"oKp" = ( -/obj/effect/spawner/random/structure/closet_empty/crate, -/turf/open/floor/iron, -/area/station/maintenance/port/aft) "oKx" = ( /obj/structure/tank_dispenser, /obj/machinery/light/directional/north, @@ -41804,7 +41780,7 @@ "oYv" = ( /obj/effect/decal/cleanable/cobweb, /obj/structure/bed, -/obj/item/bedsheet/dorms, +/obj/effect/spawner/random/bedsheet, /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, /obj/machinery/button/door/directional/west{ id = "Cabin4"; @@ -42609,6 +42585,13 @@ /obj/effect/turf_decal/tile/bar/opposingcorners, /turf/open/floor/iron, /area/station/service/bar) +"poj" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/disposalpipe/segment, +/obj/effect/landmark/start/shaft_miner, +/turf/open/floor/iron, +/area/station/cargo/miningoffice) "pom" = ( /turf/open/floor/iron, /area/station/engineering/storage_shared) @@ -43393,6 +43376,12 @@ /obj/structure/window/reinforced/spawner/directional/north, /turf/open/floor/iron/cafeteria, /area/station/security/prison) +"pCk" = ( +/obj/machinery/airalarm/directional/west, +/obj/effect/mapping_helpers/burnt_floor, +/obj/machinery/power/port_gen/pacman/pre_loaded, +/turf/open/floor/plating, +/area/station/maintenance/port/fore) "pCl" = ( /obj/structure/chair/sofa/corp/left, /obj/effect/turf_decal/tile/neutral/opposingcorners{ @@ -43524,6 +43513,16 @@ }, /turf/open/floor/iron/white, /area/station/science/research) +"pEA" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/spawner/random/structure/closet_empty/crate, +/obj/effect/turf_decal/bot, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/disposalpipe/segment{ + dir = 9 + }, +/turf/open/floor/iron, +/area/station/cargo/warehouse) "pEB" = ( /obj/effect/landmark/start/botanist, /turf/open/floor/iron, @@ -44047,8 +44046,7 @@ /obj/effect/turf_decal/stripes/line{ dir = 4 }, -/obj/machinery/door/window/left/directional/west{ - dir = 2; +/obj/machinery/door/window/left/directional/south{ name = "Crate Security Door"; req_access = list("shipping") }, @@ -44186,9 +44184,7 @@ /turf/open/floor/iron/white, /area/station/science/xenobiology) "pQu" = ( -/obj/machinery/door/window/right/directional/east{ - base_state = "left"; - icon_state = "left"; +/obj/machinery/door/window/left/directional/east{ name = "Danger: Conveyor Access"; req_access = list("maint_tunnels") }, @@ -44485,6 +44481,20 @@ /obj/effect/turf_decal/tile/neutral/fourcorners, /turf/open/floor/iron/dark, /area/station/security/brig) +"pVV" = ( +/obj/effect/turf_decal/tile/brown/half/contrasted, +/obj/effect/spawner/random/entertainment/deck, +/obj/structure/table, +/obj/effect/spawner/random/entertainment/cigarette_pack{ + pixel_x = -6; + pixel_y = 8 + }, +/obj/item/storage/box/bandages{ + pixel_y = 6; + pixel_x = 4 + }, +/turf/open/floor/iron, +/area/station/cargo/miningoffice) "pVZ" = ( /obj/effect/turf_decal/stripes/corner{ dir = 4 @@ -44560,6 +44570,12 @@ }, /turf/open/floor/iron/white, /area/station/medical/virology) +"pWY" = ( +/obj/structure/disposalpipe/segment{ + dir = 5 + }, +/turf/open/floor/plating, +/area/station/maintenance/port/fore) "pXh" = ( /obj/item/radio/intercom/directional/south, /turf/open/floor/iron/dark, @@ -44920,17 +44936,13 @@ pixel_x = 3; pixel_y = -23 }, -/obj/machinery/door/window{ - atom_integrity = 300; - base_state = "leftsecure"; - dir = 8; - icon_state = "leftsecure"; - name = "Primary AI Core Access"; - req_access = list("ai_upload") - }, /obj/structure/cable, /obj/machinery/power/apc/auto_name/directional/north, /obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/machinery/door/window/brigdoor/left/directional/west{ + name = "Primary AI Core Access"; + req_access = list("ai_upload") + }, /turf/open/floor/iron/dark, /area/station/ai_monitored/turret_protected/ai) "qeZ" = ( @@ -45903,7 +45915,7 @@ /turf/open/floor/iron/white, /area/station/medical/medbay/central) "qyt" = ( -/obj/machinery/door/window/brigdoor/security/cell{ +/obj/machinery/door/window/brigdoor/security/cell/left/directional/south{ id = "Cell 3"; name = "Cell 3" }, @@ -46011,6 +46023,15 @@ }, /turf/open/floor/iron, /area/station/hallway/secondary/command) +"qAf" = ( +/obj/effect/turf_decal/tile/blue/anticorner/contrasted{ + dir = 4 + }, +/mob/living/basic/bot/medbot/autopatrol, +/turf/open/floor/iron/white/corner{ + dir = 8 + }, +/area/station/medical/medbay/lobby) "qAA" = ( /obj/machinery/newscaster/directional/east, /obj/machinery/computer/security/mining{ @@ -46025,12 +46046,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron, /area/station/hallway/secondary/entry) -"qAS" = ( -/obj/effect/turf_decal/tile/brown{ - dir = 4 - }, -/turf/open/floor/iron, -/area/station/cargo/miningoffice) "qAX" = ( /obj/effect/turf_decal/trimline/red/filled/line{ dir = 4 @@ -46389,6 +46404,15 @@ /obj/structure/sign/warning/docking, /turf/closed/wall, /area/station/hallway/secondary/entry) +"qHt" = ( +/obj/structure/railing{ + dir = 4 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/turf/open/floor/iron, +/area/station/cargo/miningoffice) "qHK" = ( /obj/effect/spawner/random/structure/grille, /turf/open/floor/plating, @@ -46504,9 +46528,7 @@ id = "visitation"; name = "Visitation Shutters" }, -/obj/machinery/door/window/left/directional/south{ - dir = 4 - }, +/obj/machinery/door/window/left/directional/east, /obj/structure/table, /turf/open/floor/iron, /area/station/security/prison/visit) @@ -46558,8 +46580,7 @@ location = "Disposals" }, /obj/structure/plasticflaps, -/obj/machinery/door/window/right/directional/north{ - dir = 2; +/obj/machinery/door/window/right/directional/south{ name = "Delivery Door"; req_access = list("cargo") }, @@ -47205,6 +47226,19 @@ "qST" = ( /turf/open/floor/iron, /area/station/cargo/drone_bay) +"qTf" = ( +/obj/effect/turf_decal/tile/brown/anticorner/contrasted{ + dir = 1 + }, +/obj/machinery/conveyor{ + dir = 9; + id = "mining" + }, +/obj/structure/railing{ + dir = 8 + }, +/turf/open/floor/iron, +/area/station/cargo/miningoffice) "qTx" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -48326,13 +48360,6 @@ }, /turf/open/floor/iron, /area/station/science/explab) -"ror" = ( -/obj/effect/spawner/random/structure/crate, -/obj/structure/disposalpipe/segment{ - dir = 5 - }, -/turf/open/floor/plating, -/area/station/maintenance/port/fore) "roF" = ( /obj/structure/cable, /obj/machinery/power/apc/auto_name/directional/south, @@ -49206,8 +49233,7 @@ /turf/open/floor/iron, /area/station/command/heads_quarters/ce) "rEg" = ( -/obj/machinery/door/window{ - dir = 1; +/obj/machinery/door/window/left/directional/north{ name = "Captain's Bedroom"; req_access = list("captain") }, @@ -49895,8 +49921,7 @@ id = "rdgene2"; name = "Genetics Lab Shutters" }, -/obj/machinery/door/window/left/directional/west{ - dir = 4; +/obj/machinery/door/window/left/directional/east{ name = "Genetics Desk"; req_access = list("genetics") }, @@ -50104,7 +50129,7 @@ /area/station/commons/locker) "rUo" = ( /obj/structure/bed, -/obj/item/bedsheet/dorms, +/obj/effect/spawner/random/bedsheet, /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ dir = 1 }, @@ -50195,8 +50220,7 @@ /turf/open/floor/iron, /area/station/cargo/lobby) "rVG" = ( -/obj/machinery/door/window/left/directional/east{ - dir = 8; +/obj/machinery/door/window/left/directional/west{ name = "Service Deliveries"; req_access = list("service") }, @@ -50242,7 +50266,7 @@ /turf/open/floor/engine/n2, /area/station/engineering/atmos) "rWH" = ( -/obj/machinery/door/window{ +/obj/machinery/door/window/left/directional/south{ name = "HoP's Desk"; req_access = list("hop") }, @@ -50759,15 +50783,6 @@ /obj/structure/disposalpipe/segment, /turf/open/floor/iron/white, /area/station/medical/cryo) -"sfG" = ( -/obj/structure/table, -/obj/item/storage/toolbox/emergency, -/obj/machinery/airalarm/directional/east, -/obj/effect/turf_decal/tile/brown{ - dir = 1 - }, -/turf/open/floor/iron, -/area/station/cargo/miningoffice) "sfK" = ( /obj/structure/closet{ name = "evidence closet 1" @@ -50947,8 +50962,7 @@ /area/station/medical/storage) "sje" = ( /obj/structure/plasticflaps/opaque, -/obj/machinery/door/window/left/directional/north{ - dir = 8; +/obj/machinery/door/window/left/directional/west{ name = "MuleBot Access"; req_access = list("shipping") }, @@ -51097,9 +51111,7 @@ /area/station/medical/surgery/theatre) "snu" = ( /obj/structure/table/wood, -/obj/machinery/door/window{ - base_state = "right"; - icon_state = "right"; +/obj/machinery/door/window/right/directional/south{ name = "Captain's Desk"; req_access = list("captain") }, @@ -51788,7 +51800,7 @@ "sBa" = ( /obj/structure/bed, /obj/effect/decal/cleanable/cobweb/cobweb2, -/obj/item/bedsheet/dorms, +/obj/effect/spawner/random/bedsheet, /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, /obj/machinery/button/door/directional/east{ id = "Cabin3"; @@ -51997,7 +52009,7 @@ /turf/open/floor/plating, /area/station/security/warden) "sDT" = ( -/obj/machinery/door/window{ +/obj/machinery/door/window/left/directional/south{ name = "Secure Art Exhibition"; req_access = list("library") }, @@ -52410,18 +52422,16 @@ name = "Private Channel"; pixel_x = 8 }, -/obj/machinery/door/window{ - atom_integrity = 300; - base_state = "leftsecure"; - dir = 8; - icon_state = "leftsecure"; - layer = 4.1; - name = "Tertiary AI Core Access"; - pixel_x = -3; - req_access = list("ai_upload") - }, /turf/open/floor/circuit/green, /area/station/ai_monitored/turret_protected/ai) +"sLU" = ( +/obj/effect/turf_decal/tile/brown/half/contrasted{ + dir = 4 + }, +/obj/structure/closet/emcloset, +/obj/machinery/firealarm/directional/east, +/turf/open/floor/iron, +/area/station/cargo/miningoffice) "sMb" = ( /obj/machinery/airalarm/directional/west, /obj/machinery/camera/directional/west{ @@ -52459,7 +52469,7 @@ /turf/open/floor/iron/white, /area/station/medical/virology) "sMB" = ( -/obj/machinery/door/window/brigdoor/security/cell{ +/obj/machinery/door/window/brigdoor/security/cell/left/directional/south{ id = "Cell 1"; name = "Cell 1" }, @@ -53761,6 +53771,15 @@ }, /turf/open/floor/plating, /area/station/maintenance/port) +"tid" = ( +/obj/structure/railing/corner/end, +/obj/effect/turf_decal/delivery, +/obj/effect/decal/cleanable/rubble, +/obj/structure/railing/corner/end{ + dir = 4 + }, +/turf/open/floor/iron, +/area/station/cargo/miningoffice) "tit" = ( /obj/structure/sink/directional/east, /obj/structure/sign/poster/contraband/random/directional/west, @@ -53869,6 +53888,13 @@ /obj/effect/spawner/random/maintenance, /turf/open/floor/iron, /area/station/cargo/sorting) +"tkf" = ( +/obj/structure/extinguisher_cabinet/directional/east, +/obj/machinery/conveyor{ + id = "mining" + }, +/turf/open/floor/iron, +/area/station/cargo/miningoffice) "tkg" = ( /obj/machinery/atmospherics/pipe/smart/simple/supply/visible{ dir = 4 @@ -54185,8 +54211,7 @@ /turf/open/floor/plating, /area/station/maintenance/port) "tqx" = ( -/obj/machinery/door/window/left/directional/south{ - dir = 1; +/obj/machinery/door/window/left/directional/north{ name = "Mass Driver Control Door"; req_access = list("ordnance") }, @@ -54925,14 +54950,6 @@ /obj/structure/cable, /turf/open/floor/iron/white, /area/station/medical/medbay/central) -"tFP" = ( -/obj/machinery/atmospherics/pipe/smart/simple/cyan/visible/layer5, -/obj/machinery/atmospherics/pipe/smart/simple/purple/visible, -/obj/effect/spawner/random/structure/closet_empty/crate, -/obj/item/circuitboard/machine/thermomachine, -/obj/machinery/light/small/directional/east, -/turf/open/floor/iron/dark/textured, -/area/station/engineering/atmos) "tGI" = ( /obj/machinery/light_switch/directional/west, /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ @@ -55052,16 +55069,12 @@ /area/station/medical/virology) "tIv" = ( /obj/structure/table/reinforced, -/obj/machinery/door/window/brigdoor{ - base_state = "rightsecure"; - dir = 1; - icon_state = "rightsecure"; +/obj/machinery/door/window/brigdoor/right/directional/north{ name = "Head of Personnel's Desk"; req_access = list("hop") }, /obj/machinery/door/firedoor, -/obj/machinery/door/window/left/directional/north{ - dir = 2; +/obj/machinery/door/window/left/directional/south{ name = "Reception Window" }, /obj/machinery/door/poddoor/preopen{ @@ -55807,11 +55820,7 @@ /turf/open/floor/iron/dark/telecomms, /area/station/tcommsat/server) "tUF" = ( -/obj/machinery/door/window{ - atom_integrity = 300; - base_state = "rightsecure"; - dir = 4; - icon_state = "rightsecure"; +/obj/machinery/door/window/brigdoor/right/directional/east{ name = "Primary AI Core Access"; req_access = list("ai_upload") }, @@ -55869,12 +55878,6 @@ /obj/machinery/disposal/delivery_chute{ dir = 4 }, -/obj/machinery/door/window{ - base_state = "right"; - dir = 4; - icon_state = "right"; - layer = 3 - }, /obj/structure/disposalpipe/trunk{ dir = 1 }, @@ -55884,6 +55887,9 @@ /obj/structure/window/spawner/directional/south, /obj/structure/window/spawner/directional/north, /obj/structure/window/spawner/directional/west, +/obj/machinery/door/window/right/directional/east{ + layer = 3 + }, /turf/open/floor/plating, /area/station/maintenance/disposal) "tVt" = ( @@ -56627,10 +56633,6 @@ "uhI" = ( /obj/structure/cable, /obj/effect/landmark/event_spawn, -/obj/machinery/requests_console/directional/north{ - department = "Security"; - name = "Security Requests Console" - }, /turf/open/floor/iron, /area/station/security/checkpoint/customs) "uhP" = ( @@ -56653,10 +56655,7 @@ /area/station/command/heads_quarters/rd) "uhW" = ( /obj/structure/cable, -/obj/machinery/door/window{ - base_state = "right"; - dir = 8; - icon_state = "right"; +/obj/machinery/door/window/right/directional/west{ name = "Theater Stage" }, /turf/open/floor/carpet, @@ -57471,15 +57470,6 @@ }, /turf/open/floor/plating, /area/station/maintenance/fore) -"uxd" = ( -/obj/structure/table, -/obj/structure/extinguisher_cabinet/directional/east, -/obj/effect/spawner/random/entertainment/dice, -/obj/effect/turf_decal/tile/brown/half/contrasted{ - dir = 8 - }, -/turf/open/floor/iron, -/area/station/cargo/miningoffice) "uxf" = ( /obj/machinery/conveyor_switch/oneway{ id = "packageSort2"; @@ -57883,9 +57873,14 @@ /obj/effect/turf_decal/tile/red/half/contrasted, /turf/open/floor/iron, /area/station/security/checkpoint/customs) +"uFk" = ( +/obj/structure/cable, +/obj/structure/railing/corner/end/flip, +/obj/effect/turf_decal/stripes/corner, +/turf/open/floor/iron, +/area/station/cargo/miningoffice) "uFq" = ( -/obj/machinery/door/window/left/directional/south{ - dir = 8; +/obj/machinery/door/window/left/directional/west{ name = "Mass Driver Door"; req_access = list("ordnance") }, @@ -58657,8 +58652,7 @@ /turf/open/floor/iron, /area/station/hallway/primary/central) "uRJ" = ( -/obj/machinery/door/window/right/directional/west{ - dir = 1; +/obj/machinery/door/window/right/directional/north{ name = "Atmospherics Access"; req_access = list("atmospherics") }, @@ -58943,8 +58937,7 @@ /area/station/engineering/atmospherics_engine) "uWA" = ( /obj/structure/table/wood/fancy/royalblue, -/obj/machinery/door/window{ - dir = 8; +/obj/machinery/door/window/left/directional/west{ name = "Secure Art Exhibition"; req_access = list("library") }, @@ -59069,8 +59062,7 @@ /area/station/command/heads_quarters/captain/private) "uYm" = ( /obj/machinery/meter, -/obj/machinery/door/window/left/directional/west{ - dir = 1; +/obj/machinery/door/window/left/directional/north{ name = "Gas Ports" }, /obj/machinery/atmospherics/pipe/smart/manifold4w/general/visible, @@ -59334,17 +59326,6 @@ }, /turf/open/floor/iron, /area/station/security/office) -"vdm" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/spawner/random/maintenance, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/turf_decal/bot, -/obj/structure/disposalpipe/segment, -/obj/effect/spawner/random/structure/closet_empty/crate, -/obj/effect/spawner/random/maintenance, -/turf/open/floor/iron, -/area/station/cargo/warehouse) "vdx" = ( /obj/machinery/rnd/experimentor, /turf/open/floor/engine, @@ -59396,8 +59377,7 @@ /turf/open/floor/iron/white/smooth_large, /area/station/medical/treatment_center) "vfh" = ( -/obj/machinery/door/window/right/directional/north{ - dir = 8; +/obj/machinery/door/window/right/directional/west{ name = "Research Test Chamber"; req_access = list("science") }, @@ -59468,8 +59448,7 @@ /turf/open/floor/iron, /area/station/command/gateway) "vgW" = ( -/obj/machinery/door/window{ - dir = 8; +/obj/machinery/door/window/left/directional/west{ name = "MiniSat Airlock Access" }, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -59581,8 +59560,7 @@ /area/station/ai_monitored/command/nuke_storage) "viF" = ( /obj/machinery/computer/upload/borg, -/obj/machinery/door/window/left/directional/west{ - dir = 2; +/obj/machinery/door/window/left/directional/south{ layer = 3.1; name = "Cyborg Upload Console Window"; req_access = list("ai_upload") @@ -60050,6 +60028,10 @@ }, /turf/open/floor/iron, /area/station/security/checkpoint/customs) +"vpv" = ( +/obj/effect/spawner/random/structure/closet_empty/crate, +/turf/open/floor/iron, +/area/station/maintenance/port/aft) "vpM" = ( /obj/structure/sign/map/right{ desc = "A framed picture of the station. Clockwise from security at the top (red), you see engineering (yellow), science (purple), escape (red and white), medbay (green), arrivals (blue and white), and finally cargo (brown)."; @@ -60357,6 +60339,11 @@ /obj/structure/disposalpipe/segment, /turf/open/floor/wood, /area/station/service/lawoffice) +"vud" = ( +/obj/effect/spawner/random/structure/closet_empty/crate, +/obj/effect/spawner/random/maintenance, +/turf/open/floor/plating, +/area/station/maintenance/port/aft) "vun" = ( /turf/closed/wall, /area/station/medical/storage) @@ -60863,8 +60850,7 @@ /area/station/maintenance/port/aft) "vEi" = ( /obj/structure/table/reinforced, -/obj/machinery/door/window/left/directional/east{ - dir = 1; +/obj/machinery/door/window/left/directional/north{ name = "Kitchen Window"; req_access = list("kitchen") }, @@ -61065,7 +61051,7 @@ /turf/open/floor/iron/dark, /area/station/engineering/supermatter/room) "vGx" = ( -/obj/machinery/door/window/brigdoor{ +/obj/machinery/door/window/brigdoor/left/directional/south{ name = "Arrivals Security Checkpoint"; pixel_y = -8; req_access = list("security") @@ -61586,10 +61572,7 @@ /turf/open/floor/plating, /area/station/maintenance/central) "vPX" = ( -/obj/machinery/door/window/right/directional/east{ - base_state = "left"; - dir = 8; - icon_state = "left"; +/obj/machinery/door/window/left/directional/west{ name = "Security Delivery"; req_access = list("security") }, @@ -62387,13 +62370,10 @@ /turf/open/floor/plating, /area/station/maintenance/starboard/fore) "wcL" = ( -/obj/machinery/door/window/right/directional/north{ - base_state = "left"; - dir = 8; - icon_state = "left"; +/obj/machinery/door/window/left/directional/west{ name = "Library Desk Door"; - pixel_x = 3; - req_access = list("library") + req_access = list("library"); + pixel_x = 3 }, /turf/open/floor/wood, /area/station/service/library) @@ -62405,26 +62385,6 @@ }, /turf/open/floor/iron, /area/station/hallway/primary/central) -"wcZ" = ( -/obj/effect/decal/cleanable/dirt, -/obj/item/storage/box/drinkingglasses, -/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 - }, -/obj/effect/spawner/random/structure/closet_empty/crate, -/obj/effect/spawner/random/food_or_drink/donkpockets, -/obj/effect/spawner/random/food_or_drink/cups, -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, -/obj/effect/turf_decal/tile/bar{ - dir = 1 - }, -/turf/open/floor/iron, -/area/station/hallway/secondary/service) "wde" = ( /obj/effect/turf_decal/trimline/red/filled/line{ dir = 9 @@ -62791,11 +62751,6 @@ }, /turf/open/floor/iron/dark, /area/station/command/heads_quarters/rd) -"wjH" = ( -/obj/effect/spawner/random/maintenance, -/obj/structure/rack, -/turf/open/floor/plating, -/area/station/maintenance/port/fore) "wjK" = ( /obj/item/clothing/head/hats/tophat, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -62975,7 +62930,7 @@ /area/station/engineering/atmos/storage/gas) "wnT" = ( /obj/machinery/light/small/directional/east, -/obj/machinery/door/window{ +/obj/machinery/door/window/left/directional/south{ name = "MiniSat Walkway Access" }, /obj/machinery/camera/directional/east{ @@ -63045,9 +63000,7 @@ /turf/open/floor/iron, /area/station/engineering/main) "woV" = ( -/obj/machinery/door/window{ - dir = 1 - }, +/obj/machinery/door/window/left/directional/north, /turf/open/floor/iron/grimy, /area/station/security/detectives_office) "woY" = ( @@ -63612,6 +63565,17 @@ /obj/effect/spawner/random/structure/crate, /turf/open/floor/plating, /area/station/maintenance/starboard/fore) +"wyP" = ( +/obj/effect/turf_decal/tile/brown/half/contrasted{ + dir = 1 + }, +/obj/machinery/conveyor{ + dir = 8; + id = "mining" + }, +/obj/machinery/bouldertech/refinery/smelter, +/turf/open/floor/iron, +/area/station/cargo/miningoffice) "wzd" = ( /obj/item/radio/intercom/directional/west, /obj/structure/table, @@ -64227,7 +64191,7 @@ "wNp" = ( /obj/structure/bed, /obj/effect/decal/cleanable/cobweb, -/obj/item/bedsheet/dorms, +/obj/effect/spawner/random/bedsheet, /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, /obj/effect/landmark/start/hangover, /obj/machinery/button/door/directional/west{ @@ -64626,8 +64590,7 @@ "wSI" = ( /obj/structure/table/reinforced, /obj/machinery/door/firedoor, -/obj/machinery/door/window/left/directional/west{ - dir = 4; +/obj/machinery/door/window/left/directional/east{ name = "Hydroponics Desk"; req_access = list("hydroponics") }, @@ -64651,8 +64614,7 @@ /area/station/cargo/storage) "wTp" = ( /obj/structure/table/reinforced, -/obj/machinery/door/window/brigdoor{ - dir = 1; +/obj/machinery/door/window/brigdoor/left/directional/north{ name = "Weapon Distribution"; req_access = list("armory") }, @@ -64673,6 +64635,11 @@ /obj/structure/reagent_dispensers/fueltank/large, /turf/open/floor/iron, /area/station/engineering/atmos) +"wTu" = ( +/obj/structure/cable, +/obj/effect/spawner/random/structure/crate, +/turf/open/floor/plating, +/area/station/maintenance/port/fore) "wTF" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -64693,14 +64660,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/freezer, /area/station/security/prison/shower) -"wUq" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/effect/turf_decal/tile/neutral, -/mob/living/basic/bot/cleanbot/autopatrol, -/turf/open/floor/iron, -/area/station/hallway/primary/central) "wUt" = ( /obj/effect/spawner/random/engineering/atmospherics_portable, /turf/open/floor/plating, @@ -64916,8 +64875,7 @@ /turf/open/floor/iron, /area/station/hallway/primary/central) "wYi" = ( -/obj/machinery/door/window/right/directional/south{ - dir = 1; +/obj/machinery/door/window/right/directional/north{ name = "First Aid Supplies"; req_access = list("medical") }, @@ -64998,6 +64956,18 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/wood, /area/station/maintenance/port/aft) +"wZo" = ( +/obj/machinery/airalarm/directional/east, +/obj/effect/turf_decal/tile/brown/half/contrasted{ + dir = 1 + }, +/obj/machinery/conveyor{ + dir = 10; + id = "mining" + }, +/obj/machinery/bouldertech/refinery, +/turf/open/floor/iron, +/area/station/cargo/miningoffice) "wZw" = ( /obj/effect/turf_decal/stripes/line{ dir = 1 @@ -65278,11 +65248,6 @@ /obj/effect/mapping_helpers/airlock/access/all/science/xenobio, /turf/open/floor/engine, /area/station/science/cytology) -"xfB" = ( -/obj/effect/spawner/random/structure/closet_empty/crate, -/obj/effect/spawner/random/maintenance, -/turf/open/floor/plating, -/area/station/maintenance/port/aft) "xfD" = ( /obj/effect/turf_decal/trimline/red/filled/line{ dir = 1 @@ -65510,18 +65475,12 @@ name = "Private Channel"; pixel_x = -8 }, -/obj/machinery/door/window{ - atom_integrity = 300; - base_state = "rightsecure"; - dir = 4; - icon_state = "rightsecure"; - layer = 4.1; - name = "Secondary AI Core Access"; - pixel_x = 4; - req_access = list("ai_upload") - }, /turf/open/floor/circuit/green, /area/station/ai_monitored/turret_protected/ai) +"xjg" = ( +/mob/living/basic/bot/cleanbot/medbay, +/turf/open/floor/iron/white, +/area/station/medical/storage) "xjh" = ( /turf/closed/wall, /area/station/security/checkpoint/customs) @@ -65565,12 +65524,6 @@ }, /turf/open/floor/wood/parquet, /area/station/medical/psychology) -"xkb" = ( -/obj/item/hand_labeler_refill, -/obj/structure/rack, -/obj/machinery/light/small/dim/directional/west, -/turf/open/floor/plating, -/area/station/maintenance/port/fore) "xko" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ @@ -66218,8 +66171,7 @@ /turf/open/floor/iron, /area/station/service/hydroponics) "xwS" = ( -/obj/machinery/door/window/left/directional/west{ - dir = 1; +/obj/machinery/door/window/left/directional/north{ name = "Monkey Pen"; req_access = list("genetics") }, @@ -66294,11 +66246,6 @@ /obj/effect/turf_decal/tile/neutral/fourcorners, /turf/open/floor/iron/dark, /area/station/command/teleporter) -"xxp" = ( -/obj/machinery/airalarm/directional/west, -/obj/effect/mapping_helpers/burnt_floor, -/turf/open/floor/plating, -/area/station/maintenance/port/fore) "xxF" = ( /obj/effect/turf_decal/stripes/line{ dir = 4 @@ -66396,8 +66343,7 @@ /turf/open/floor/iron/white, /area/station/medical/chemistry) "xyI" = ( -/obj/machinery/door/window/left/directional/south{ - dir = 8; +/obj/machinery/door/window/left/directional/west{ name = "Animal Pen B" }, /turf/open/floor/grass, @@ -66504,10 +66450,7 @@ /turf/open/floor/iron, /area/station/science/lab) "xAt" = ( -/obj/machinery/door/window/right/directional/east{ - base_state = "left"; - dir = 8; - icon_state = "left"; +/obj/machinery/door/window/left/directional/west{ name = "Fitness Ring" }, /obj/structure/window/spawner/directional/south, @@ -67042,11 +66985,6 @@ }, /turf/open/floor/iron/white, /area/station/science/ordnance/testlab) -"xJV" = ( -/obj/effect/landmark/start/shaft_miner, -/obj/structure/cable, -/turf/open/floor/iron, -/area/station/cargo/miningoffice) "xKk" = ( /obj/machinery/photocopier, /turf/open/floor/iron/white, @@ -67164,6 +67102,14 @@ }, /turf/open/floor/plating, /area/station/maintenance/starboard/fore) +"xNF" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/effect/turf_decal/tile/neutral, +/mob/living/basic/bot/cleanbot/autopatrol, +/turf/open/floor/iron, +/area/station/hallway/primary/central) "xNG" = ( /obj/structure/disposalpipe/segment, /obj/structure/cable, @@ -68325,8 +68271,7 @@ /obj/effect/turf_decal/stripes/line{ dir = 4 }, -/obj/machinery/door/window/left/directional/west{ - dir = 4; +/obj/machinery/door/window/left/directional/east{ name = "Crate Security Door"; req_access = list("shipping") }, @@ -68460,8 +68405,7 @@ /area/station/maintenance/port/fore) "ykR" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/door/window/right/directional/south{ - dir = 8; +/obj/machinery/door/window/right/directional/west{ name = "Jim Norton's Quebecois Coffee"; req_one_access = list("service","maint_tunnels") }, @@ -68484,8 +68428,7 @@ /area/station/hallway/primary/central) "ylf" = ( /obj/structure/table/reinforced, -/obj/machinery/door/window/right/directional/south{ - dir = 8; +/obj/machinery/door/window/right/directional/west{ name = "First Aid Supplies"; req_access = list("medical") }, @@ -84639,11 +84582,11 @@ riW cBc dqN dqN -kwq +aPx dqN sMS dqN -kwq +aPx jUb jUb njr @@ -84834,7 +84777,7 @@ paD paD paD hKg -bUm +iZC kRe qRa pnI @@ -84895,10 +84838,10 @@ lCb jUb bZW dqN -oKp +vpv bOH fkr -kwq +aPx cNS dqN jUb @@ -85928,7 +85871,7 @@ vJy njc ctq hnv -xfB +vud qCK syh fRU @@ -86379,7 +86322,7 @@ nNk xyz kdC btt -aqx +poj shx uKZ fiC @@ -86630,13 +86573,13 @@ tiK qvl jXu beo -cSP +sLU aZj -qAS +cSP cLj kRe -aFd -mFw +tid +qTf oor oor hDX @@ -86888,12 +86831,12 @@ bSm jXu jXu jXu -jXu -lJo -xJV -jpI -uxd -sfG +hKg +hzb +cLj +kRe +cBZ +wyP oor jqr wfU @@ -87138,19 +87081,19 @@ hZQ ybi twr gQg -xxp +pCk twr -sxn +sHu xkX -ror +pWY twr fhn -jXu -jXu -jRC -jXu -jXu -jXu +hKg +jBp +uFk +qHt +dxo +hlE jXu tBU kOX @@ -87400,14 +87343,14 @@ fUr fUr fUr aps -xgB -jZW -jXu -xkb -xgB -nsM -twr -mdW +wTu +fMr +hKg +pVV +cgk +iId +tkf +wZo jXu hvo cHN @@ -87658,13 +87601,13 @@ cVL jXu uur xgB -jXu -jXu -jFk -xgB -sHu -twr twr +hKg +hKg +jJu +hKg +hKg +hKg jXu jmR xap @@ -88173,10 +88116,10 @@ jXu bSm sHu bPM -sxn -uUu +sHu +mkz jXu -rNP +atS rNP mgv mWE @@ -88438,7 +88381,7 @@ jXu jXu jXu jXu -llh +kAI vEk jXu vmm @@ -88952,12 +88895,12 @@ rlU rlU aaf jXu -wjH +sxn mgv cUD cfv -vdm -eYy +jrx +pEA pQI puD vQs @@ -89213,7 +89156,7 @@ jXu lJR jXu wtQ -cdm +nBI fDo xIZ bNU @@ -89453,7 +89396,7 @@ jXu fTT sOP twr -dGT +fnJ jXu xVc fsQ @@ -89529,7 +89472,7 @@ jGG agZ rvb mhm -eih +xjg foP sRm rjy @@ -89710,7 +89653,7 @@ jXu uUu dEH pOi -bPM +bMu jXu loQ fsQ @@ -92050,7 +91993,7 @@ ipy bdP buj htd -wUq +xNF oIa gja wvo @@ -92863,7 +92806,7 @@ gQG tFr tar cOR -juO +aPH uyw pcM cNk @@ -94140,7 +94083,7 @@ ceM axW xEX hYr -eaq +qAf lrR qwI xJI @@ -103382,7 +103325,7 @@ ttF sRY wDh uIs -wcZ +btn gsr pUA wFM @@ -105453,7 +105396,7 @@ wqA ksT rAp tUn -iip +hFM ehG lYH cpU @@ -112889,7 +112832,7 @@ nwK fFC uVf kRc -tFP +gDq ich jnQ tBM @@ -123926,7 +123869,7 @@ bjQ kxq rNs tSP -bkE +mZW giA eBz hoY diff --git a/_maps/map_files/Mining/Lavaland.dmm b/_maps/map_files/Mining/Lavaland.dmm index e26ac494a0f..5059b1f5af2 100644 --- a/_maps/map_files/Mining/Lavaland.dmm +++ b/_maps/map_files/Mining/Lavaland.dmm @@ -183,13 +183,6 @@ }, /turf/open/floor/iron/edge, /area/mine/lounge) -"bx" = ( -/obj/machinery/airalarm/directional/north, -/obj/effect/turf_decal/trimline/brown/filled/line{ - dir = 9 - }, -/turf/open/floor/iron/dark, -/area/mine/production) "by" = ( /obj/effect/decal/cleanable/dirt, /obj/effect/turf_decal/siding/wideplating_new{ @@ -609,6 +602,19 @@ }, /turf/open/floor/iron/dark/smooth_edge, /area/mine/production) +"dV" = ( +/obj/structure/railing/corner{ + dir = 4 + }, +/obj/structure/railing/corner, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/effect/turf_decal/stripes/white/line{ + dir = 8 + }, +/turf/open/misc/asteroid/basalt/lava_land_surface, +/area/lavaland/surface/outdoors) "ee" = ( /obj/machinery/shower/directional/south, /obj/machinery/door/window/right/directional/south, @@ -795,6 +801,16 @@ }, /turf/open/floor/iron/checker, /area/mine/cafeteria) +"fx" = ( +/obj/structure/railing, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/effect/turf_decal/stripes/white/line{ + dir = 1 + }, +/turf/open/misc/asteroid/basalt/lava_land_surface, +/area/lavaland/surface/outdoors) "fA" = ( /obj/machinery/computer/shuttle/mining{ dir = 1 @@ -865,13 +881,6 @@ dir = 1 }, /area/mine/laborcamp/security) -"fT" = ( -/obj/effect/turf_decal/loading_area, -/obj/effect/turf_decal/trimline/brown/filled/line{ - dir = 5 - }, -/turf/open/floor/iron/dark, -/area/mine/production) "fU" = ( /obj/machinery/portable_atmospherics/canister/oxygen, /turf/open/floor/plating, @@ -1011,6 +1020,14 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/carpet, /area/mine/living_quarters) +"gA" = ( +/obj/structure/lattice/catwalk/mining, +/obj/structure/railing, +/obj/structure/railing{ + dir = 1 + }, +/turf/open/lava/smooth/lava_land_surface, +/area/lavaland/surface/outdoors) "gB" = ( /obj/structure/lattice/catwalk, /obj/structure/disposalpipe/segment{ @@ -1105,6 +1122,14 @@ /obj/effect/turf_decal/sand/plating/volcanic, /turf/open/floor/plating/lavaland_atmos, /area/mine/maintenance/service/disposals) +"gW" = ( +/obj/machinery/airalarm/directional/north, +/obj/effect/turf_decal/trimline/brown/filled/line{ + dir = 9 + }, +/obj/structure/ore_box, +/turf/open/floor/iron/dark, +/area/mine/production) "gZ" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ dir = 1 @@ -1508,13 +1533,6 @@ /obj/effect/mapping_helpers/airlock/access/any/engineering/maintenance, /turf/open/floor/plating, /area/mine/maintenance/public/north) -"jk" = ( -/obj/structure/table, -/obj/item/storage/box/bandages{ - pixel_y = 6 - }, -/turf/open/floor/iron/white, -/area/mine/laborcamp/production) "jm" = ( /obj/machinery/door/airlock/public/glass{ name = "Showers" @@ -1548,6 +1566,16 @@ /obj/structure/extinguisher_cabinet/directional/north, /turf/open/floor/iron/edge, /area/mine/living_quarters) +"js" = ( +/obj/structure/lattice/catwalk/mining, +/obj/structure/railing/corner{ + dir = 8 + }, +/obj/structure/railing/corner{ + dir = 1 + }, +/turf/open/lava/smooth/lava_land_surface, +/area/lavaland/surface/outdoors) "jw" = ( /obj/structure/disposalpipe/segment{ dir = 9 @@ -1692,13 +1720,6 @@ /obj/structure/cable, /turf/open/floor/plating, /area/mine/maintenance/living/north) -"kx" = ( -/obj/machinery/computer/order_console/mining, -/obj/effect/turf_decal/trimline/brown/filled/line, -/turf/open/floor/iron/dark/smooth_edge{ - dir = 1 - }, -/area/mine/production) "kB" = ( /obj/structure/stone_tile/surrounding_tile, /obj/structure/stone_tile/surrounding_tile{ @@ -1742,6 +1763,15 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply, /turf/open/floor/plating, /area/mine/maintenance/service) +"kG" = ( +/obj/structure/railing{ + dir = 5 + }, +/obj/effect/turf_decal/stripes/corner{ + dir = 8 + }, +/turf/open/misc/asteroid/basalt/lava_land_surface, +/area/lavaland/surface/outdoors) "kH" = ( /obj/structure/stone_tile/surrounding_tile{ dir = 1 @@ -1939,17 +1969,6 @@ }, /turf/open/lava/smooth/lava_land_surface, /area/lavaland/surface/outdoors) -"lA" = ( -/obj/machinery/recycler{ - dir = 8 - }, -/obj/machinery/conveyor{ - dir = 4; - id = "mining_disposals" - }, -/obj/effect/turf_decal/sand/plating/volcanic, -/turf/open/floor/plating/lavaland_atmos, -/area/mine/maintenance/service/disposals) "lC" = ( /obj/structure/stone_tile/block/cracked{ dir = 1 @@ -2485,13 +2504,6 @@ /obj/effect/decal/cleanable/dirt, /turf/open/floor/plating, /area/mine/laborcamp) -"nt" = ( -/obj/structure/table, -/obj/effect/turf_decal/trimline/brown/filled/line{ - dir = 6 - }, -/turf/open/floor/iron/dark, -/area/mine/production) "nv" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ dir = 8 @@ -2686,6 +2698,13 @@ /obj/effect/turf_decal/trimline/brown/filled/line, /turf/open/floor/iron/dark/textured_large, /area/mine/production) +"oy" = ( +/obj/structure/lattice/catwalk/mining, +/obj/structure/railing{ + dir = 8 + }, +/turf/open/lava/smooth/lava_land_surface, +/area/lavaland/surface/outdoors) "oA" = ( /turf/closed/wall, /area/mine/storage) @@ -3259,6 +3278,23 @@ }, /turf/open/misc/asteroid/basalt/lava_land_surface, /area/lavaland/surface/outdoors) +"so" = ( +/obj/structure/table, +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 10 + }, +/obj/item/storage/box/bandages{ + pixel_y = 6; + pixel_x = 4 + }, +/obj/item/storage/pill_bottle/epinephrine{ + pixel_x = -6; + pixel_y = 4 + }, +/turf/open/floor/iron/white/smooth_corner{ + dir = 8 + }, +/area/mine/medical) "st" = ( /obj/structure/chair/stool/directional/north, /obj/effect/decal/cleanable/dirt, @@ -3480,16 +3516,6 @@ /obj/effect/decal/cleanable/dirt, /turf/open/floor/plating, /area/mine/storage) -"tO" = ( -/obj/structure/table, -/obj/item/paper/fluff/stations/lavaland/orm_notice, -/obj/machinery/power/apc/auto_name/directional/south, -/obj/structure/cable, -/obj/effect/turf_decal/trimline/brown/filled/line, -/turf/open/floor/iron/dark/smooth_edge{ - dir = 1 - }, -/area/mine/production) "tV" = ( /obj/effect/decal/cleanable/dirt, /turf/open/floor/plating, @@ -4383,6 +4409,14 @@ /obj/effect/decal/cleanable/dirt, /turf/open/floor/plating, /area/mine/maintenance/living/north) +"zD" = ( +/obj/effect/turf_decal/loading_area{ + dir = 1 + }, +/obj/structure/barricade/wooden/crude, +/obj/structure/barricade/wooden, +/turf/open/floor/iron/dark, +/area/mine/production) "zF" = ( /obj/item/kirbyplants/random, /obj/effect/turf_decal/trimline/blue/filled/line{ @@ -4415,6 +4449,18 @@ /obj/effect/mapping_helpers/airlock/access/any/engineering/maintenance/departmental, /turf/open/floor/plating, /area/mine/maintenance/service) +"zO" = ( +/obj/structure/railing{ + dir = 8 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/effect/turf_decal/stripes/white/line{ + dir = 4 + }, +/turf/open/misc/asteroid/basalt/lava_land_surface, +/area/lavaland/surface/outdoors) "zQ" = ( /obj/effect/decal/cleanable/dirt, /turf/open/floor/iron/smooth_edge, @@ -4435,14 +4481,6 @@ /obj/structure/cable, /turf/open/misc/asteroid/basalt/lava_land_surface, /area/lavaland/surface/outdoors) -"Ac" = ( -/obj/effect/turf_decal/bot, -/obj/structure/ore_box, -/obj/effect/turf_decal/trimline/brown/filled/line{ - dir = 10 - }, -/turf/open/floor/iron/dark, -/area/mine/production) "Ae" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -4944,6 +4982,14 @@ /obj/effect/turf_decal/sand/plating/volcanic, /turf/open/floor/plating/lavaland_atmos, /area/mine/maintenance/service/disposals) +"Ep" = ( +/obj/structure/railing{ + dir = 1 + }, +/obj/effect/turf_decal/stripes/line, +/obj/effect/turf_decal/stripes/white/line, +/turf/open/misc/asteroid/basalt/lava_land_surface, +/area/lavaland/surface/outdoors) "Eq" = ( /obj/machinery/door/airlock/security/glass{ name = "Labor Camp Monitoring" @@ -5712,6 +5758,13 @@ /obj/machinery/light/small/directional/south, /turf/open/floor/plating, /area/mine/laborcamp/production) +"Jz" = ( +/obj/structure/lattice/catwalk/mining, +/obj/structure/railing{ + dir = 10 + }, +/turf/open/lava/smooth/lava_land_surface, +/area/lavaland/surface/outdoors) "JA" = ( /obj/machinery/computer/shuttle/mining/common, /obj/structure/sign/directions/evac/directional/east{ @@ -5810,23 +5863,6 @@ dir = 1 }, /area/mine/living_quarters) -"JQ" = ( -/obj/structure/table, -/obj/effect/turf_decal/trimline/blue/filled/line{ - dir = 10 - }, -/obj/item/storage/box/bandages{ - pixel_y = 6; - pixel_x = 4 - }, -/obj/item/storage/pill_bottle/epinephrine{ - pixel_x = -6; - pixel_y = 4 - }, -/turf/open/floor/iron/white/smooth_corner{ - dir = 8 - }, -/area/mine/medical) "JR" = ( /obj/structure/stone_tile, /obj/structure/stone_tile{ @@ -6202,6 +6238,13 @@ dir = 4 }, /area/mine/lounge) +"LO" = ( +/obj/structure/table, +/obj/item/storage/box/bandages{ + pixel_y = 6 + }, +/turf/open/floor/iron/white, +/area/mine/laborcamp/production) "LR" = ( /obj/effect/decal/cleanable/dirt, /obj/structure/cable, @@ -6488,6 +6531,14 @@ /obj/effect/turf_decal/tile/blue/fourcorners, /turf/open/floor/iron, /area/mine/living_quarters) +"NG" = ( +/obj/effect/turf_decal/bot, +/obj/effect/turf_decal/trimline/brown/filled/line{ + dir = 10 + }, +/obj/machinery/computer/order_console/mining, +/turf/open/floor/iron/dark, +/area/mine/production) "NL" = ( /obj/structure/railing, /obj/structure/lattice/catwalk/mining, @@ -6790,6 +6841,17 @@ }, /turf/open/floor/plating, /area/mine/production) +"PL" = ( +/obj/machinery/recycler{ + dir = 8 + }, +/obj/machinery/conveyor{ + dir = 4; + id = "mining_disposals" + }, +/obj/effect/turf_decal/sand/plating/volcanic, +/turf/open/floor/plating/lavaland_atmos, +/area/mine/maintenance/service/disposals) "PR" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/carpet/executive, @@ -6871,6 +6933,12 @@ }, /turf/open/floor/iron/dark, /area/mine/mechbay) +"Qq" = ( +/obj/structure/ore_vent/starter_resources{ + icon_state = "ore_vent_active" + }, +/turf/open/misc/asteroid/basalt/lava_land_surface, +/area/lavaland/surface/outdoors) "Qw" = ( /obj/structure/stone_tile/cracked, /obj/structure/stone_tile{ @@ -6958,6 +7026,16 @@ dir = 4 }, /area/mine/production) +"QV" = ( +/obj/structure/railing{ + dir = 6 + }, +/obj/effect/turf_decal/stripes/corner{ + dir = 1 + }, +/obj/machinery/light/directional/south, +/turf/open/misc/asteroid/basalt/lava_land_surface, +/area/lavaland/surface/outdoors) "QX" = ( /turf/closed/wall, /area/mine/mechbay) @@ -7002,6 +7080,14 @@ }, /turf/open/floor/iron/dark, /area/mine/production) +"Ro" = ( +/obj/effect/turf_decal/loading_area, +/obj/effect/turf_decal/trimline/brown/filled/line{ + dir = 5 + }, +/obj/structure/closet/crate/bin, +/turf/open/floor/iron/dark, +/area/mine/production) "Rs" = ( /obj/machinery/conveyor{ dir = 6; @@ -7078,13 +7164,6 @@ /obj/structure/lattice/catwalk, /turf/open/misc/asteroid/basalt/lava_land_surface, /area/lavaland/surface/outdoors) -"RS" = ( -/obj/effect/turf_decal/loading_area{ - dir = 1 - }, -/obj/structure/barricade/wooden/crude, -/turf/open/floor/iron/dark, -/area/mine/production) "RV" = ( /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ dir = 4 @@ -7286,6 +7365,14 @@ }, /turf/open/floor/iron/dark/smooth_edge, /area/mine/eva) +"Ti" = ( +/obj/effect/turf_decal/trimline/brown/filled/line, +/obj/structure/table, +/obj/item/paper/fluff/stations/lavaland/orm_notice, +/turf/open/floor/iron/dark/smooth_edge{ + dir = 1 + }, +/area/mine/production) "To" = ( /obj/structure/table, /obj/machinery/reagentgrinder, @@ -7333,6 +7420,13 @@ /obj/effect/decal/cleanable/dirt, /turf/open/floor/plating, /area/mine/maintenance/living/north) +"TD" = ( +/obj/effect/turf_decal/trimline/brown/filled/line{ + dir = 1 + }, +/obj/structure/ore_box, +/turf/open/floor/iron/dark/smooth_edge, +/area/mine/production) "TF" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -7561,12 +7655,6 @@ /obj/structure/disposalpipe/segment, /turf/open/floor/plating, /area/mine/laborcamp/security/maintenance) -"UW" = ( -/obj/effect/turf_decal/trimline/brown/filled/line{ - dir = 1 - }, -/turf/open/floor/iron/dark/smooth_edge, -/area/mine/production) "UZ" = ( /obj/structure/chair/stool/directional/west, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -7747,6 +7835,15 @@ }, /turf/open/floor/iron/dark/textured_large, /area/mine/laborcamp) +"VZ" = ( +/obj/machinery/power/apc/auto_name/directional/south, +/obj/structure/cable, +/obj/effect/turf_decal/trimline/brown/filled/line, +/obj/structure/table, +/turf/open/floor/iron/dark/smooth_edge{ + dir = 1 + }, +/area/mine/production) "Wb" = ( /obj/structure/cable, /turf/open/floor/iron/dark/textured_large, @@ -7794,6 +7891,13 @@ }, /turf/open/floor/carpet/neon/simple/red/nodots, /area/mine/cafeteria) +"Wy" = ( +/obj/structure/lattice/catwalk/mining, +/obj/structure/railing{ + dir = 9 + }, +/turf/open/lava/smooth/lava_land_surface, +/area/lavaland/surface/outdoors) "WB" = ( /obj/machinery/disposal/bin, /obj/structure/disposalpipe/trunk, @@ -21444,7 +21548,7 @@ uU uU uU uU -uU +pU uU uU uU @@ -21700,8 +21804,8 @@ uU uU uU uU -uU -uU +pU +pU pU uU uU @@ -21955,7 +22059,7 @@ uU uU uU uU -pU +uU pU pU pU @@ -23751,7 +23855,7 @@ aj aj eR Kw -jk +LO ff mU Fv @@ -36328,7 +36432,7 @@ pU mA su xG -lA +PL Sd pU aj @@ -39446,7 +39550,7 @@ yp yp Dz LG -JQ +so It Xp Ss @@ -45841,9 +45945,9 @@ pU aj aj aj -aj -aj -aj +Wy +zO +Jz aj oA Lu @@ -46098,9 +46202,9 @@ aj aj aj aj -aj -aj -aj +Ep +Qq +fx aj oA Lz @@ -46355,9 +46459,9 @@ pU pU aj aj -aj -aj -aj +kG +dV +QV NU NU NU @@ -46613,7 +46717,7 @@ pU pU aj aj -aj +gA aj Le Lh @@ -46869,8 +46973,8 @@ pU pU AQ ZM -ZM -ZM +oy +js ZM Ki Uq @@ -47648,10 +47752,10 @@ NU NU NU NU -bx +gW Xj QT -Ac +NG pK No Hp @@ -47904,11 +48008,11 @@ pU pU NU PI -RS -UW +zD +TD Vw wl -kx +Ti pK lg se @@ -48165,7 +48269,7 @@ zJ oi Ts Wb -tO +VZ pK Tf Jp @@ -48422,7 +48526,7 @@ RY RY dQ Cg -nt +lb pK Ob IL @@ -48677,7 +48781,7 @@ NU Rs rP JG -fT +Ro op NU pK diff --git a/_maps/map_files/NSSJourney/NSSJourney.dmm b/_maps/map_files/NSSJourney/NSSJourney.dmm index b912e42e097..fffdc892162 100644 --- a/_maps/map_files/NSSJourney/NSSJourney.dmm +++ b/_maps/map_files/NSSJourney/NSSJourney.dmm @@ -155,11 +155,10 @@ /turf/open/floor/iron, /area/station/command/heads_quarters/qm) "abu" = ( -/obj/machinery/door/window{ +/obj/machinery/door/window/left/directional/south{ req_access = list("armory") }, -/obj/machinery/door/window{ - dir = 1; +/obj/machinery/door/window/left/directional/north{ req_access = list("armory") }, /obj/effect/turf_decal/stripes/line, @@ -1059,10 +1058,7 @@ /area/station/security/mechbay) "aic" = ( /obj/structure/disposalpipe/segment, -/obj/machinery/door/window/right/directional/east{ - base_state = "left"; - dir = 1; - icon_state = "left"; +/obj/machinery/door/window/left/directional/north{ name = "Security Delivery"; req_access = list("brig") }, @@ -2296,7 +2292,7 @@ /area/station/maintenance/solars/starboard/fore) "apC" = ( /obj/structure/bed/pod, -/obj/item/bedsheet/random, +/obj/effect/spawner/random/bedsheet/any, /obj/effect/mapping_helpers/broken_floor, /turf/open/floor/wood, /area/station/maintenance/port/fore) @@ -2415,7 +2411,7 @@ /area/station/security/execution/education) "aqn" = ( /obj/structure/bed, -/obj/item/bedsheet/dorms, +/obj/effect/spawner/random/bedsheet, /obj/effect/landmark/start/hangover, /obj/machinery/button/door{ id = "Dorm3"; @@ -2906,7 +2902,7 @@ /area/station/commons/fitness) "ast" = ( /obj/structure/bed, -/obj/item/bedsheet/dorms, +/obj/effect/spawner/random/bedsheet, /turf/open/floor/carpet, /area/station/commons/dorms) "asu" = ( @@ -3326,9 +3322,7 @@ /turf/open/floor/iron, /area/station/maintenance/port/fore) "atU" = ( -/obj/machinery/door/window{ - dir = 1 - }, +/obj/machinery/door/window/left/directional/north, /obj/effect/decal/cleanable/dirt, /obj/effect/turf_decal/siding/wood{ dir = 1 @@ -3448,7 +3442,7 @@ /area/station/security/checkpoint/customs) "auw" = ( /obj/structure/bed, -/obj/item/bedsheet/dorms, +/obj/effect/spawner/random/bedsheet, /obj/machinery/button/door{ id = "Dorm2"; name = "Dorm Bolt Control"; @@ -3932,9 +3926,7 @@ /turf/open/floor/iron, /area/station/maintenance/port/fore) "avW" = ( -/obj/machinery/door/window{ - dir = 1 - }, +/obj/machinery/door/window/left/directional/north, /turf/open/floor/plating, /area/station/maintenance/port/fore) "avX" = ( @@ -4783,7 +4775,7 @@ /area/station/ai_monitored/command/storage/eva) "ayV" = ( /obj/structure/bed, -/obj/item/bedsheet/dorms, +/obj/effect/spawner/random/bedsheet, /obj/machinery/button/door{ id = "Dorm1"; name = "Dorm Bolt Control"; @@ -6825,8 +6817,7 @@ /obj/machinery/door/firedoor, /obj/structure/table/reinforced, /obj/item/paper, -/obj/machinery/door/window/right/directional/west{ - dir = 1; +/obj/machinery/door/window/right/directional/north{ name = "Security Checkpoint"; req_access = list("brig") }, @@ -6964,7 +6955,7 @@ /area/station/commons/dorms) "aHG" = ( /obj/structure/bed, -/obj/item/bedsheet/dorms, +/obj/effect/spawner/random/bedsheet, /obj/effect/landmark/start/hangover, /obj/machinery/button/door{ id = "Dorm4"; @@ -7074,7 +7065,7 @@ /area/station/commons/dorms) "aHU" = ( /obj/structure/bed, -/obj/item/bedsheet/dorms, +/obj/effect/spawner/random/bedsheet, /obj/machinery/button/door{ id = "Dorm5"; name = "Cabin Bolt Control"; @@ -10850,8 +10841,7 @@ /turf/open/floor/plating, /area/station/security/execution/education) "aWC" = ( -/obj/machinery/door/window{ - dir = 1; +/obj/machinery/door/window/left/directional/north{ name = "Containment Cell"; req_access = list("xenobiology") }, @@ -12988,10 +12978,7 @@ /turf/open/floor/wood, /area/station/command/heads_quarters/captain) "bdj" = ( -/obj/machinery/door/window{ - base_state = "right"; - dir = 4; - icon_state = "right"; +/obj/machinery/door/window/right/directional/east{ name = "Captain's Desk Door"; req_access = list("captain") }, @@ -13078,7 +13065,7 @@ /area/station/hallway/secondary/exit) "bdB" = ( /obj/effect/turf_decal/stripes/line, -/obj/machinery/door/window{ +/obj/machinery/door/window/left/directional/south{ name = "Containment Cell"; req_access = list("xenobiology") }, @@ -13217,10 +13204,7 @@ /area/station/maintenance/port) "beb" = ( /obj/structure/table, -/obj/machinery/door/window{ - base_state = "right"; - dir = 4; - icon_state = "right"; +/obj/machinery/door/window/right/directional/east{ name = "Core Modules"; req_access = list("captain") }, @@ -13254,8 +13238,7 @@ /area/station/ai_monitored/turret_protected/ai_upload) "beg" = ( /obj/structure/table, -/obj/machinery/door/window{ - dir = 8; +/obj/machinery/door/window/left/directional/west{ name = "High-Risk Modules"; req_access = list("captain") }, @@ -14251,10 +14234,7 @@ /obj/structure/window/reinforced/spawner/directional/south, /obj/structure/window/reinforced/spawner/directional/west, /obj/structure/window/reinforced/spawner/directional/north, -/obj/machinery/door/window{ - base_state = "right"; - dir = 4; - icon_state = "right"; +/obj/machinery/door/window/right/directional/east{ layer = 3 }, /obj/effect/turf_decal/stripes/line{ @@ -14897,10 +14877,9 @@ "bkb" = ( /obj/effect/decal/cleanable/blood/old, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/door/window/brigdoor/left/directional/west{ +/obj/machinery/door/window/brigdoor/left/directional/south{ req_access = list("morgue_secure"); - name = "Coroner's Office"; - dir = 2 + name = "Coroner's Office" }, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2{ dir = 8 @@ -17169,10 +17148,7 @@ location = "QM #1" }, /obj/effect/turf_decal/bot, -/mob/living/simple_animal/bot/mulebot{ - home_destination = "QM #1"; - suffix = "#1" - }, +/mob/living/simple_animal/bot/mulebot, /turf/open/floor/iron/dark/textured_large, /area/station/cargo/storage) "brO" = ( @@ -17754,10 +17730,7 @@ location = "QM #2" }, /obj/effect/turf_decal/bot, -/mob/living/simple_animal/bot/mulebot{ - home_destination = "QM #2"; - suffix = "#2" - }, +/mob/living/simple_animal/bot/mulebot, /turf/open/floor/iron/dark/textured_large, /area/station/cargo/storage) "btt" = ( @@ -28537,7 +28510,7 @@ /turf/open/floor/iron/smooth_large, /area/station/engineering/main) "coh" = ( -/obj/machinery/door/window/brigdoor/security/cell{ +/obj/machinery/door/window/brigdoor/security/cell/left/directional/south{ id = "Cell 3"; name = "Cell 3" }, @@ -29271,7 +29244,7 @@ /turf/open/floor/engine, /area/station/engineering/main) "csT" = ( -/obj/machinery/door/window/brigdoor{ +/obj/machinery/door/window/brigdoor/left/directional/south{ req_access = list("brig") }, /turf/open/floor/iron/dark/side, @@ -30941,8 +30914,7 @@ /turf/open/floor/iron/smooth_large, /area/station/engineering/gravity_generator) "cAR" = ( -/obj/machinery/door/window{ - dir = 1; +/obj/machinery/door/window/left/directional/north{ name = "AI Core Door"; req_access = list("ai_upload") }, @@ -34354,7 +34326,7 @@ "dZT" = ( /obj/machinery/airalarm/directional/north, /obj/structure/rack/gunrack, -/obj/effect/spawner/armory_spawn/microfusion, +/obj/effect/spawner/armory_spawn/mod_lasers_small, /obj/effect/turf_decal/delivery/red, /turf/open/floor/iron/smooth, /area/station/ai_monitored/security/armory) @@ -35184,8 +35156,7 @@ /area/station/security/prison/visit) "eJI" = ( /obj/effect/turf_decal/delivery, -/obj/machinery/door/window{ - dir = 8; +/obj/machinery/door/window/left/directional/west{ name = "Containment Cell"; req_access = list("xenobiology") }, @@ -36469,8 +36440,7 @@ id = "xenobiomain"; name = "Containment Blast Door" }, -/obj/machinery/door/window{ - dir = 8; +/obj/machinery/door/window/left/directional/west{ name = "Containment Cell"; req_access = list("xenobiology") }, @@ -36490,8 +36460,7 @@ /area/station/maintenance/department/electrical) "fMj" = ( /obj/structure/table/glass, -/obj/machinery/door/window/left/directional/north{ - dir = 4; +/obj/machinery/door/window/left/directional/east{ name = "First-Aid Supplies"; red_alert_access = 1; req_access = list("medical") @@ -36933,8 +36902,7 @@ /area/station/maintenance/abandon_cafeteria) "gbS" = ( /obj/effect/turf_decal/delivery, -/obj/machinery/door/window{ - dir = 4; +/obj/machinery/door/window/left/directional/east{ name = "Containment Cell"; req_access = list("xenobiology") }, @@ -37240,14 +37208,10 @@ /area/station/service/hydroponics) "gpz" = ( /obj/structure/table/reinforced, -/obj/machinery/door/window/left/directional/north{ - dir = 8; +/obj/machinery/door/window/left/directional/west{ name = "Reception Window" }, -/obj/machinery/door/window/brigdoor{ - base_state = "rightsecure"; - dir = 4; - icon_state = "rightsecure"; +/obj/machinery/door/window/brigdoor/right/directional/east{ name = "Head of Personnel's Desk"; req_access = list("hop") }, @@ -37440,8 +37404,7 @@ /turf/open/floor/iron/dark, /area/station/security/brig) "gzK" = ( -/obj/machinery/door/window{ - dir = 4; +/obj/machinery/door/window/left/directional/east{ name = "Containment Cell"; req_access = list("xenobiology") }, @@ -37689,8 +37652,7 @@ /turf/open/floor/iron, /area/station/medical/virology) "gIC" = ( -/obj/machinery/door/window{ - dir = 8; +/obj/machinery/door/window/left/directional/west{ name = "Mass Driver"; req_access = list("chapel_office") }, @@ -37946,8 +37908,7 @@ /area/station/command/heads_quarters/cmo) "gVj" = ( /obj/structure/closet/crate/coffin, -/obj/machinery/door/window/left/directional/east{ - dir = 8; +/obj/machinery/door/window/left/directional/west{ name = "Coffin Storage"; req_access = list("chapel_office") }, @@ -38289,8 +38250,7 @@ /turf/open/floor/wood, /area/station/security/prison) "hhp" = ( -/obj/machinery/door/window/right/directional/north{ - dir = 8; +/obj/machinery/door/window/right/directional/west{ name = "Library Desk Door"; req_access = list("library") }, @@ -38686,8 +38646,7 @@ /turf/open/floor/iron/dark/textured, /area/station/science/breakroom) "hwY" = ( -/obj/machinery/door/window/left/directional/south{ - dir = 4; +/obj/machinery/door/window/left/directional/east{ name = "Shooting Range" }, /turf/open/floor/iron/dark, @@ -40316,8 +40275,7 @@ "iJU" = ( /obj/structure/table/reinforced, /obj/machinery/door/firedoor/heavy, -/obj/machinery/door/window/left/directional/north{ - dir = 4; +/obj/machinery/door/window/left/directional/east{ name = "Atmospherics Desk"; req_access = list("atmospherics") }, @@ -41226,9 +41184,7 @@ /area/station/ai_monitored/turret_protected/aisat_interior) "jpM" = ( /obj/machinery/door/firedoor, -/obj/machinery/door/window/left/directional/south{ - base_state = "right"; - icon_state = "right"; +/obj/machinery/door/window/right/directional/south{ name = "Armory"; req_access = list("armory") }, @@ -41392,8 +41348,7 @@ /turf/open/floor/iron, /area/station/service/bar) "jvM" = ( -/obj/machinery/door/window/left/directional/west{ - dir = 4; +/obj/machinery/door/window/left/directional/east{ name = "Brig Infirmary" }, /obj/effect/turf_decal/tile/dark_blue{ @@ -42994,8 +42949,7 @@ }, /obj/structure/table/reinforced, /obj/machinery/door/firedoor, -/obj/machinery/door/window/right/directional/east{ - dir = 8; +/obj/machinery/door/window/right/directional/west{ name = "Chemistry Desk"; req_access = list("plumbing") }, @@ -43844,8 +43798,7 @@ id = "xenobiomain"; name = "Containment Blast Door" }, -/obj/machinery/door/window{ - dir = 4; +/obj/machinery/door/window/left/directional/east{ name = "Containment Cell"; req_access = list("xenobiology") }, @@ -45074,8 +45027,7 @@ /turf/open/floor/vault/rock, /area/station/security/prison) "moA" = ( -/obj/machinery/door/window/right/directional/east{ - dir = 1; +/obj/machinery/door/window/right/directional/north{ name = "Bridge Delivery"; req_access = list("command") }, @@ -45643,8 +45595,7 @@ /turf/open/floor/plating, /area/station/science/breakroom) "mOX" = ( -/obj/machinery/door/window{ - dir = 8; +/obj/machinery/door/window/left/directional/west{ name = "Containment Cell"; req_access = list("xenobiology") }, @@ -46145,10 +46096,7 @@ /area/station/maintenance/starboard/aft) "nko" = ( /obj/structure/table/reinforced, -/obj/machinery/door/window/right/directional/east{ - base_state = "left"; - dir = 2; - icon_state = "left"; +/obj/machinery/door/window/left/directional/south{ name = "Robotics Desk"; req_access = list("robotics") }, @@ -46811,10 +46759,7 @@ /area/station/cargo/bitrunning/den) "nNp" = ( /obj/structure/window/reinforced/spawner/directional/north, -/obj/machinery/door/window/right/directional/east{ - base_state = "left"; - dir = 8; - icon_state = "left"; +/obj/machinery/door/window/left/directional/west{ name = "Research Division Delivery"; req_access = list("research") }, @@ -47205,8 +47150,7 @@ /turf/open/floor/carpet, /area/station/command/heads_quarters/hos) "nZP" = ( -/obj/machinery/door/window{ - dir = 4; +/obj/machinery/door/window/left/directional/east{ name = "Containment Cell"; req_access = list("science") }, @@ -47456,7 +47400,7 @@ /turf/open/floor/iron/dark/textured, /area/station/science/genetics) "ooJ" = ( -/obj/machinery/door/window/brigdoor/security/holding{ +/obj/machinery/door/window/brigdoor/security/holding/left/directional/south{ id = "Holding Cell"; name = "Holding Cell" }, @@ -48252,8 +48196,7 @@ /turf/open/floor/iron/smooth_large, /area/station/service/hydroponics) "oWR" = ( -/obj/machinery/door/window/right/directional/south{ - dir = 8; +/obj/machinery/door/window/right/directional/west{ name = "Monkey Pen"; req_access = list("genetics") }, @@ -49732,9 +49675,7 @@ /area/station/hallway/primary/central) "qaV" = ( /obj/structure/table/glass, -/obj/machinery/door/window/left/directional/north{ - dir = 8; - icon_state = "right"; +/obj/machinery/door/window/right/directional/west{ name = "First-Aid Supplies"; red_alert_access = 1; req_access = list("medical") @@ -50170,8 +50111,7 @@ }, /obj/structure/table/reinforced, /obj/machinery/door/firedoor, -/obj/machinery/door/window/right/directional/east{ - dir = 8; +/obj/machinery/door/window/right/directional/west{ name = "Pharmacy Desk"; req_access = list("pharmacy") }, @@ -51517,10 +51457,7 @@ }, /obj/structure/table/reinforced, /obj/machinery/door/firedoor, -/obj/machinery/door/window/right/directional/east{ - base_state = "left"; - dir = 1; - icon_state = "left"; +/obj/machinery/door/window/left/directional/north{ name = "Pharmacy Desk"; req_access = list("pharmacy") }, @@ -52309,10 +52246,7 @@ /turf/open/floor/eighties, /area/station/maintenance/abandon_arcade) "sas" = ( -/obj/machinery/door/window/left/directional/west{ - base_state = "right"; - dir = 4; - icon_state = "right"; +/obj/machinery/door/window/right/directional/east{ name = "Brig Infirmary" }, /obj/effect/turf_decal/tile/dark_blue{ @@ -52685,9 +52619,7 @@ id = "briggate"; name = "Security Shutters" }, -/obj/machinery/door/window/left/directional/south{ - base_state = "right"; - icon_state = "right"; +/obj/machinery/door/window/right/directional/south{ name = "Brig Desk"; req_access = list("brig") }, @@ -53765,7 +53697,7 @@ /turf/open/floor/iron/dark, /area/station/security/checkpoint/customs) "tkk" = ( -/obj/machinery/door/window/brigdoor/security/cell{ +/obj/machinery/door/window/brigdoor/security/cell/left/directional/south{ id = "Cell 2"; name = "Cell 2" }, @@ -55151,7 +55083,7 @@ /turf/open/floor/iron/smooth_large, /area/station/engineering/gravity_generator) "uvZ" = ( -/obj/machinery/door/window/brigdoor/security/cell{ +/obj/machinery/door/window/brigdoor/security/cell/left/directional/south{ id = "Cell 1"; name = "Cell 1" }, @@ -55477,8 +55409,7 @@ /turf/open/floor/iron/dark, /area/station/security/processing) "uKZ" = ( -/obj/machinery/door/window/left/directional/east{ - icon_state = "right"; +/obj/machinery/door/window/right/directional/east{ name = "Incoming Mail"; req_access = list("cargo") }, @@ -56102,8 +56033,7 @@ /turf/open/floor/iron/dark, /area/station/security/execution/transfer) "viw" = ( -/obj/machinery/door/window/left/directional/north{ - dir = 2; +/obj/machinery/door/window/left/directional/south{ name = "Jetpack Storage"; pixel_x = -1; req_access = list("eva") @@ -56138,8 +56068,7 @@ /area/station/science/genetics) "viy" = ( /obj/structure/table/reinforced, -/obj/machinery/door/window/brigdoor{ - dir = 1; +/obj/machinery/door/window/brigdoor/left/directional/north{ name = "Armory Desk"; req_access = list("armory") }, @@ -58403,8 +58332,7 @@ /area/station/security/checkpoint/supply) "wTR" = ( /obj/structure/table/reinforced, -/obj/machinery/door/window/right/directional/south{ - dir = 4; +/obj/machinery/door/window/right/directional/east{ name = "Genetics Desk"; req_access = list("genetics") }, @@ -58801,8 +58729,7 @@ "xgU" = ( /obj/machinery/door/firedoor, /obj/structure/table/reinforced, -/obj/machinery/door/window/right/directional/west{ - dir = 1; +/obj/machinery/door/window/right/directional/north{ name = "Security Checkpoint"; req_access = list("brig") }, @@ -58936,10 +58863,7 @@ /area/station/security/office) "xme" = ( /obj/structure/table/reinforced, -/obj/machinery/door/window/right/directional/east{ - base_state = "left"; - dir = 8; - icon_state = "left"; +/obj/machinery/door/window/left/directional/west{ name = "Robotics Desk"; req_access = list("robotics") }, @@ -59619,8 +59543,7 @@ /obj/item/clothing/shoes/magboots, /obj/item/clothing/shoes/magboots, /obj/item/clothing/shoes/magboots, -/obj/machinery/door/window/left/directional/north{ - dir = 2; +/obj/machinery/door/window/left/directional/south{ name = "Magboot Storage"; pixel_x = -1; req_access = list("eva") @@ -60049,8 +59972,7 @@ "ycY" = ( /obj/structure/table/reinforced, /obj/machinery/door/firedoor, -/obj/machinery/door/window/right/directional/west{ - dir = 1; +/obj/machinery/door/window/right/directional/north{ name = "Hydroponics Desk"; req_access = list("hydroponics") }, diff --git a/_maps/map_files/NSVBlueshift/Blueshift.dmm b/_maps/map_files/NSVBlueshift/Blueshift.dmm index 58a9722f5f9..53d41a0e648 100644 --- a/_maps/map_files/NSVBlueshift/Blueshift.dmm +++ b/_maps/map_files/NSVBlueshift/Blueshift.dmm @@ -272,28 +272,6 @@ /obj/structure/sink/directional/east, /turf/open/floor/iron/cafeteria, /area/station/commons/locker) -"adO" = ( -/obj/effect/turf_decal/stripes{ - dir = 8 - }, -/obj/effect/turf_decal/stripes/white/line{ - dir = 8 - }, -/obj/machinery/button/elevator{ - id = "publicElevator"; - pixel_y = 32 - }, -/obj/machinery/lift_indicator/directional/north{ - linked_elevator_id = "publicElevator" - }, -/obj/machinery/light/directional/north, -/obj/machinery/door/window/elevator/right/directional/east{ - dir = 8; - elevator_mode = 1; - transport_linked_id = "publicElevator" - }, -/turf/open/floor/iron/dark, -/area/station/hallway/primary/central) "adQ" = ( /obj/effect/turf_decal/siding/wood, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -564,7 +542,7 @@ /obj/structure/bed{ dir = 1 }, -/obj/item/bedsheet/dorms{ +/obj/effect/spawner/random/bedsheet{ dir = 1 }, /obj/machinery/light_switch/directional/west, @@ -686,6 +664,17 @@ /obj/effect/turf_decal/bot, /turf/open/floor/iron, /area/station/security/prison/upper) +"ahd" = ( +/obj/effect/turf_decal/delivery/blue, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/door/window/brigdoor/security/holding/right/directional/south{ + name = "Holding Cell"; + req_access = list("security") + }, +/turf/open/floor/iron/dark, +/area/station/security/brig) "ahg" = ( /obj/effect/turf_decal/tile/neutral, /obj/structure/cable, @@ -706,22 +695,6 @@ /obj/effect/spawner/structure/window/reinforced, /turf/open/floor/plating, /area/station/science/robotics) -"ahB" = ( -/obj/machinery/door/window/brigdoor{ - dir = 1; - name = "Creature Pen"; - req_access = list("research") - }, -/obj/effect/turf_decal/delivery, -/obj/effect/turf_decal/stripes{ - dir = 1 - }, -/obj/machinery/door/poddoor/preopen{ - id = "xeno6"; - name = "Creature Cell #6" - }, -/turf/open/floor/engine, -/area/station/science/xenobiology) "ahP" = ( /obj/structure/flora/grass/jungle, /obj/structure/flora/bush/grassy, @@ -1455,6 +1428,27 @@ /obj/effect/turf_decal/bot, /turf/open/floor/plating, /area/station/maintenance/department/engineering/engine_aft_port) +"aoz" = ( +/obj/structure/table/reinforced, +/obj/item/storage/medkit/fire{ + pixel_x = 6; + pixel_y = 6 + }, +/obj/item/storage/medkit/fire{ + pixel_x = 3; + pixel_y = 3 + }, +/obj/item/storage/medkit/regular, +/obj/item/storage/medkit/fire{ + pixel_x = -3; + pixel_y = -3 + }, +/obj/machinery/door/window/left/directional/south{ + name = "First-Aid Supplies"; + req_access = list("medical") + }, +/turf/open/floor/iron, +/area/station/medical/storage) "aoD" = ( /obj/effect/turf_decal/trimline/blue/filled/corner, /turf/open/floor/iron/dark/side{ @@ -1978,18 +1972,6 @@ "atX" = ( /turf/closed/wall, /area/station/medical/treatment_center) -"atZ" = ( -/obj/structure/table/wood/fancy, -/obj/structure/sign/painting/library_secure{ - pixel_y = 32 - }, -/obj/machinery/door/window{ - name = "Secure Art Exhibition"; - req_access = list("library") - }, -/obj/effect/turf_decal/siding/wood, -/turf/open/floor/carpet, -/area/station/service/library) "aua" = ( /obj/item/target, /obj/item/target, @@ -3405,28 +3387,6 @@ /obj/structure/cable, /turf/open/floor/iron, /area/station/maintenance/department/science/xenobiology) -"aIz" = ( -/obj/machinery/door/firedoor, -/obj/structure/table/reinforced, -/obj/machinery/door/window/left{ - name = "Chemistry Desk"; - req_access = list("pharmacy") - }, -/obj/machinery/door/window/left{ - dir = 1; - name = "Chemistry Desk" - }, -/obj/machinery/door/poddoor/shutters/preopen{ - id = "chemisttop"; - name = "Chemistry Lobby Shutters" - }, -/obj/item/folder/white, -/obj/item/reagent_containers/cup/bottle/multiver{ - pixel_x = -7; - pixel_y = 1 - }, -/turf/open/floor/iron/dark, -/area/station/medical/pharmacy) "aIA" = ( /obj/effect/landmark/start/virologist, /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, @@ -3503,21 +3463,6 @@ "aJr" = ( /turf/closed/wall, /area/station/maintenance/abandon_holding_cell) -"aJt" = ( -/obj/machinery/door/firedoor, -/obj/structure/table/reinforced, -/obj/machinery/door/window/left{ - dir = 8; - req_access = list("psychology") - }, -/obj/item/folder/white, -/obj/machinery/door/poddoor/shutters/preopen{ - id = "Psychward4"; - name = "Control Room Shutters" - }, -/obj/structure/cable, -/turf/open/floor/iron/dark, -/area/station/medical/psychology) "aJv" = ( /obj/structure/cable, /obj/machinery/power/apc/auto_name/directional/south, @@ -4927,15 +4872,28 @@ /obj/machinery/duct, /turf/open/floor/plating, /area/station/maintenance/department/medical) -"aYq" = ( -/obj/effect/turf_decal/bot, -/obj/machinery/hydroponics/constructable, -/obj/structure/window/spawner/directional/south, -/obj/effect/turf_decal/trimline/green/filled/line{ - dir = 9 +"aYl" = ( +/obj/structure/table/reinforced, +/obj/machinery/door/firedoor, +/obj/machinery/recharger{ + pixel_x = 8 + }, +/obj/item/folder/red{ + pixel_x = -5 + }, +/obj/item/pen{ + pixel_x = -5 + }, +/obj/structure/cable, +/obj/machinery/door/window/left/directional/south{ + name = "Warden's Desk" + }, +/obj/machinery/door/window/brigdoor/right/directional/north{ + name = "Warden's Desk"; + req_access = list("armory") }, /turf/open/floor/iron/dark, -/area/station/service/hydroponics) +/area/station/security/warden) "aYz" = ( /obj/machinery/light/small/directional/south, /turf/open/floor/engine, @@ -5437,22 +5395,6 @@ /obj/machinery/duct, /turf/open/floor/iron, /area/station/engineering/supermatter/room) -"bcX" = ( -/obj/structure/table/reinforced, -/obj/machinery/door/firedoor, -/obj/item/folder/white, -/obj/item/pen, -/obj/machinery/door/poddoor/shutters/preopen{ - id = "rdgene2"; - name = "Genetics Lab Shutters" - }, -/obj/machinery/door/window/left{ - dir = 4; - name = "Genetics Desk"; - req_access = list("genetics") - }, -/turf/open/floor/iron/dark, -/area/station/science/genetics) "bcY" = ( /obj/structure/window/spawner/directional/east, /obj/structure/flora/bush/grassy, @@ -5548,6 +5490,23 @@ /obj/machinery/atmospherics/pipe/smart/simple/brown/visible/layer2, /turf/open/floor/plating, /area/station/engineering/supermatter/room) +"bdM" = ( +/obj/machinery/door/firedoor, +/obj/structure/table/reinforced, +/obj/machinery/door/poddoor/shutters/preopen{ + id = "chemistbot"; + name = "Chemistry Side Shutters" + }, +/obj/item/folder/white, +/obj/machinery/door/window/left/directional/west{ + name = "Chemistry Desk"; + req_access = list("pharmacy") + }, +/obj/machinery/door/window/left/directional/east{ + name = "Chemistry Desk" + }, +/turf/open/floor/iron/dark, +/area/station/medical/pharmacy) "bdO" = ( /obj/item/kirbyplants/random, /obj/effect/turf_decal/trimline/purple/filled, @@ -6197,13 +6156,6 @@ /obj/structure/cable, /turf/open/floor/iron/dark, /area/station/common/laser_tag) -"bld" = ( -/obj/structure/decorative/shelf/crates1, -/obj/machinery/light/directional/north, -/turf/open/floor/iron/smooth_edge{ - dir = 1 - }, -/area/station/cargo/miningdock) "blr" = ( /obj/effect/turf_decal/trimline/green/filled/line{ dir = 4 @@ -6636,6 +6588,23 @@ /obj/item/taperecorder, /turf/open/floor/wood, /area/station/service/lawoffice) +"boG" = ( +/obj/effect/turf_decal/stripes{ + dir = 4 + }, +/obj/machinery/disposal/delivery_chute{ + dir = 4 + }, +/obj/structure/plasticflaps, +/obj/structure/disposalpipe/trunk{ + dir = 8 + }, +/obj/machinery/door/window/right/directional/east{ + req_access = list("cargo"); + name = "Engineering Deliveries" + }, +/turf/open/floor/iron/dark, +/area/station/cargo/sorting) "boH" = ( /obj/structure/disposalpipe/segment{ dir = 4 @@ -6665,6 +6634,17 @@ /obj/effect/landmark/start/assistant, /turf/open/floor/wood, /area/station/service/cafeteria) +"boP" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/turf_decal/vg_decals/numbers/two, +/obj/machinery/door/window/brigdoor/security/cell/right/directional/west{ + name = "Cell 2" + }, +/turf/open/floor/iron/dark/side{ + dir = 8 + }, +/area/station/security/brig) "boQ" = ( /obj/structure/closet/cardboard, /obj/effect/spawner/random/maintenance/two, @@ -6702,6 +6682,17 @@ /obj/machinery/defibrillator_mount/directional/south, /turf/open/floor/iron/white, /area/station/medical/treatment_center) +"bpn" = ( +/obj/structure/railing{ + dir = 8 + }, +/obj/machinery/light/directional/east, +/obj/machinery/door/window/brigdoor/right/directional/north{ + name = "Command Chair"; + req_access = list("command") + }, +/turf/open/floor/iron/stairs, +/area/station/command/secure_bunker) "bpo" = ( /obj/effect/decal/cleanable/dirt{ icon_state = "dirt-flat-1" @@ -6719,15 +6710,6 @@ /obj/machinery/holopad/secure, /turf/open/floor/iron/dark, /area/station/security/office) -"bpw" = ( -/obj/effect/decal/cleanable/dirt{ - icon_state = "dirt-flat-1" - }, -/obj/item/clothing/head/helmet/space/hev_suit, -/obj/structure/alien/weeds/xen, -/obj/structure/flora/lunar_plant/style_3, -/turf/open/misc/asteroid/airless, -/area/space/nearstation) "bpA" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, @@ -7200,6 +7182,14 @@ "btu" = ( /turf/closed/wall, /area/station/maintenance/solars/port/fore) +"btO" = ( +/obj/structure/railing{ + dir = 4 + }, +/turf/open/floor/iron/smooth_edge{ + dir = 4 + }, +/area/station/cargo/miningdock) "btP" = ( /obj/structure/disposalpipe/segment{ dir = 4 @@ -7733,29 +7723,6 @@ }, /turf/open/floor/iron, /area/station/hallway/primary/upper) -"byV" = ( -/obj/structure/table/reinforced, -/obj/machinery/door/firedoor, -/obj/machinery/door/window/brigdoor/right{ - dir = 1; - name = "Warden's Desk"; - req_access = list("armory") - }, -/obj/machinery/door/window/left{ - name = "Warden's Desk" - }, -/obj/machinery/recharger{ - pixel_x = 8 - }, -/obj/item/folder/red{ - pixel_x = -5 - }, -/obj/item/pen{ - pixel_x = -5 - }, -/obj/structure/cable, -/turf/open/floor/iron/dark, -/area/station/security/warden) "bzj" = ( /obj/structure/rack, /obj/effect/turf_decal/bot, @@ -8139,12 +8106,6 @@ "bDA" = ( /turf/closed/wall, /area/station/security/checkpoint/customs) -"bDB" = ( -/obj/machinery/door/window/right{ - dir = 1 - }, -/turf/open/floor/iron/dark, -/area/station/security/execution/transfer) "bDD" = ( /obj/effect/turf_decal/tile/yellow/half/contrasted, /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ @@ -8186,17 +8147,6 @@ /obj/effect/spawner/structure/window, /turf/open/floor/plating, /area/station/maintenance/rus_gambling) -"bDR" = ( -/obj/structure/table, -/obj/machinery/door/poddoor/shutters{ - id = "visitation"; - name = "Visitation Shutters" - }, -/obj/machinery/door/window/right{ - dir = 8 - }, -/turf/open/floor/iron/dark, -/area/station/security/prison/visit) "bDS" = ( /obj/structure/shipping_container/nthi, /turf/open/floor/iron/dark/small, @@ -8534,6 +8484,19 @@ }, /turf/open/floor/iron, /area/station/security/prison/mess) +"bIa" = ( +/obj/effect/turf_decal/stripes{ + dir = 8 + }, +/obj/effect/turf_decal/loading_area{ + dir = 8 + }, +/obj/effect/turf_decal/caution{ + dir = 4; + pixel_x = 7 + }, +/turf/open/floor/iron/smooth_edge, +/area/station/cargo/miningdock) "bIk" = ( /obj/machinery/status_display/ai/directional/north, /obj/effect/spawner/random/vending/snackvend, @@ -8548,17 +8511,6 @@ }, /turf/open/floor/plating, /area/station/maintenance/department/security/greater) -"bIv" = ( -/obj/structure/railing{ - dir = 8 - }, -/obj/machinery/door/window{ - name = "Fitness Ring" - }, -/turf/open/floor/iron/stairs{ - dir = 1 - }, -/area/station/commons/fitness) "bIw" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -8799,20 +8751,6 @@ /obj/item/clothing/head/utility/welding, /turf/open/floor/iron/dark, /area/station/maintenance/department/engineering/atmos_aux_port) -"bKw" = ( -/obj/structure/table, -/obj/structure/window/reinforced/spawner/directional/west, -/obj/structure/window/reinforced/spawner/directional/south, -/obj/machinery/door/window{ - base_state = "right"; - dir = 4; - icon_state = "right"; - name = "Core Modules"; - req_access = list("ai_upload") - }, -/obj/effect/spawner/random/aimodule/harmless, -/turf/open/floor/iron, -/area/station/ai_monitored/turret_protected/ai_upload) "bKy" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -8822,6 +8760,15 @@ }, /turf/open/floor/iron, /area/station/common/laser_tag) +"bKD" = ( +/obj/machinery/door/airlock{ + name = "Forge" + }, +/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/dark, +/area/station/service/forge) "bKE" = ( /obj/machinery/atmospherics/components/unary/portables_connector/visible{ dir = 8 @@ -9263,6 +9210,21 @@ }, /turf/open/floor/iron/dark, /area/station/ai_monitored/turret_protected/aisat_interior) +"bOx" = ( +/obj/item/radio/intercom/directional/south, +/obj/structure/secure_safe/caps_spare{ + pixel_x = 5; + pixel_y = -37 + }, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/door/window/brigdoor/right/directional/east{ + name = "Command Chair"; + req_access = list("command") + }, +/turf/open/floor/iron, +/area/station/command/bridge) "bOC" = ( /obj/effect/turf_decal/bot, /obj/machinery/portable_atmospherics/canister/plasma, @@ -9899,17 +9861,6 @@ }, /turf/open/floor/iron, /area/station/maintenance/aft/upper) -"bTX" = ( -/obj/machinery/door/window/brigdoor/right{ - dir = 8; - name = "Command Chair"; - req_access = list("command") - }, -/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/command/bridge) "bUc" = ( /obj/structure/cable, /obj/effect/decal/cleanable/dirt{ @@ -9992,15 +9943,6 @@ /obj/structure/table/glass, /turf/open/floor/wood, /area/station/hallway/primary/port) -"bUG" = ( -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, -/obj/item/radio/intercom/directional/north, -/obj/machinery/door/window/brigdoor/right{ - name = "Cargo Deliveries"; - req_access = list("security") - }, -/turf/open/floor/iron/dark, -/area/station/security/brig) "bVc" = ( /obj/structure/window/spawner/directional/south, /obj/structure/filingcabinet/chestdrawer, @@ -10304,15 +10246,6 @@ }, /turf/open/floor/iron/dark, /area/station/escapepodbay) -"bXS" = ( -/obj/effect/turf_decal/siding/wood{ - dir = 4 - }, -/obj/machinery/door/window/right{ - dir = 4 - }, -/turf/open/floor/wood, -/area/station/command/heads_quarters/captain) "bXX" = ( /obj/effect/spawner/structure/window, /turf/open/floor/plating, @@ -10600,25 +10533,6 @@ /obj/effect/spawner/random/trash/garbage, /turf/open/floor/plating, /area/station/maintenance/department/security/greater) -"cbc" = ( -/obj/structure/window/reinforced/spawner/directional/south, -/obj/machinery/disposal/delivery_chute{ - dir = 4 - }, -/obj/structure/plasticflaps, -/obj/machinery/door/window/right{ - dir = 4; - name = "Medbay Deliveries"; - req_access = list("cargo") - }, -/obj/structure/disposalpipe/trunk{ - dir = 4 - }, -/obj/effect/turf_decal/stripes{ - dir = 4 - }, -/turf/open/floor/iron/dark, -/area/station/cargo/sorting) "cbl" = ( /obj/structure/window/reinforced/spawner/directional/north, /obj/structure/window/reinforced/spawner/directional/west, @@ -10724,6 +10638,20 @@ }, /turf/open/floor/iron, /area/station/security/prison/workout) +"cbL" = ( +/obj/effect/turf_decal/delivery, +/obj/machinery/disposal/delivery_chute, +/obj/structure/disposalpipe/trunk{ + dir = 1 + }, +/obj/structure/window/reinforced/spawner/directional/north, +/obj/machinery/light/directional/east, +/obj/machinery/door/window/left/directional/south{ + req_access = list("cargo"); + name = "Deliveries" + }, +/turf/open/floor/iron/dark, +/area/station/cargo/office) "cbZ" = ( /turf/open/floor/iron, /area/station/commons/locker) @@ -11114,6 +11042,16 @@ /obj/item/camera_film, /turf/open/floor/wood, /area/station/maintenance/abandon_art_studio) +"cfS" = ( +/obj/machinery/conveyor/inverted{ + dir = 9; + id = "garbage" + }, +/obj/machinery/door/window/right/directional/west{ + name = "Danger: Conveyor Access" + }, +/turf/open/floor/plating, +/area/station/maintenance/disposal) "cfV" = ( /obj/effect/turf_decal/siding/wood, /obj/effect/decal/cleanable/dirt{ @@ -11656,22 +11594,6 @@ initial_gas_mix = "TEMP=2.7" }, /area/space/nearstation) -"clj" = ( -/obj/structure/table, -/obj/structure/window/reinforced/spawner/directional/east, -/obj/structure/window/reinforced/spawner/directional/south, -/obj/machinery/door/window{ - dir = 8; - name = "High-Risk Modules"; - req_access = list("ai_upload") - }, -/obj/item/ai_module/supplied/protect_station, -/obj/item/ai_module/reset/purge{ - pixel_x = -3; - pixel_y = -3 - }, -/turf/open/floor/iron, -/area/station/ai_monitored/turret_protected/ai_upload) "clo" = ( /obj/structure/table, /obj/item/storage/box/zipties{ @@ -12118,6 +12040,7 @@ name = "engineering camera" }, /obj/machinery/light_switch/directional/south, +/obj/item/airlock_painter, /turf/open/floor/iron/dark, /area/station/engineering/main) "cpl" = ( @@ -12182,13 +12105,6 @@ /obj/effect/turf_decal/tile/blue/fourcorners, /turf/open/floor/iron/white, /area/station/medical/medbay/central) -"cpO" = ( -/obj/machinery/door/window/right{ - dir = 1 - }, -/obj/machinery/airalarm/directional/east, -/turf/open/floor/wood, -/area/station/service/theater) "cpY" = ( /obj/structure/rack/shelf, /obj/item/weldingtool, @@ -13036,6 +12952,12 @@ /obj/item/radio/intercom/directional/south, /turf/open/floor/iron, /area/station/hallway/primary/starboard) +"cwE" = ( +/obj/structure/cable, +/obj/item/radio/intercom/directional/north, +/obj/machinery/door/window/brigdoor/right/directional/west, +/turf/open/floor/iron, +/area/station/security/checkpoint/escape) "cwF" = ( /obj/effect/spawner/structure/window/reinforced, /turf/open/floor/plating, @@ -13114,28 +13036,6 @@ }, /turf/open/floor/iron, /area/station/security/lockers) -"cxx" = ( -/obj/structure/table/reinforced, -/obj/machinery/door/window/left{ - name = "First-Aid Supplies"; - red_alert_access = 1; - req_access = list("medical") - }, -/obj/item/storage/medkit/fire{ - pixel_x = 6; - pixel_y = 6 - }, -/obj/item/storage/medkit/fire{ - pixel_x = 3; - pixel_y = 3 - }, -/obj/item/storage/medkit/regular, -/obj/item/storage/medkit/fire{ - pixel_x = -3; - pixel_y = -3 - }, -/turf/open/floor/iron, -/area/station/medical/storage) "cxL" = ( /obj/effect/turf_decal/trimline/blue/line{ dir = 1 @@ -13143,6 +13043,36 @@ /obj/structure/cable, /turf/open/floor/iron, /area/station/security/prison/workout) +"cxW" = ( +/obj/structure/window/reinforced/spawner/directional/south, +/obj/structure/rack, +/obj/item/tank/jetpack/carbondioxide{ + pixel_x = 4; + pixel_y = -1 + }, +/obj/item/tank/jetpack/carbondioxide, +/obj/item/tank/jetpack/carbondioxide{ + pixel_x = -4; + pixel_y = 1 + }, +/obj/effect/turf_decal/tile/neutral{ + dir = 1 + }, +/obj/effect/turf_decal/tile/neutral, +/obj/effect/turf_decal/tile/neutral{ + dir = 4 + }, +/obj/effect/turf_decal/tile/neutral{ + dir = 8 + }, +/obj/effect/turf_decal/stripes{ + dir = 4 + }, +/obj/machinery/door/window/left/directional/east{ + req_access = list("eva") + }, +/turf/open/floor/iron/dark, +/area/station/ai_monitored/command/storage/eva) "cxZ" = ( /obj/structure/grille, /obj/structure/window/reinforced/spawner/directional/east, @@ -13229,6 +13159,13 @@ /obj/effect/mapping_helpers/burnt_floor, /turf/open/floor/plating/airless, /area/space/nearstation) +"cyK" = ( +/obj/machinery/door/window/brigdoor/right/directional/east{ + name = "Cargo Deliveries"; + req_access = list("security") + }, +/turf/open/floor/iron/dark, +/area/station/security/brig) "cyL" = ( /obj/machinery/light/directional/south, /obj/machinery/light_switch/directional/south, @@ -13973,6 +13910,18 @@ /obj/machinery/duct, /turf/open/floor/plating, /area/station/maintenance/department/eva) +"cER" = ( +/obj/effect/turf_decal/delivery, +/obj/machinery/door/poddoor/preopen{ + id = "xeno7"; + name = "Creature Cell #7" + }, +/obj/machinery/door/window/brigdoor/left/directional/north{ + name = "Creature Pen"; + req_access = list("research") + }, +/turf/open/floor/engine, +/area/station/science/xenobiology) "cEW" = ( /obj/structure/fans/tiny/forcefield, /obj/machinery/light/directional/west, @@ -14469,6 +14418,15 @@ }, /turf/open/floor/plating, /area/station/science/genetics) +"cIA" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/door/window/brigdoor/left/directional/south{ + name = "Court Cell"; + req_access = list("brig") + }, +/turf/open/floor/iron/dark, +/area/station/security/courtroom) "cIB" = ( /obj/machinery/power/port_gen/pacman/pre_loaded, /obj/effect/turf_decal/bot, @@ -14555,19 +14513,6 @@ /obj/machinery/light_switch/directional/east, /turf/open/floor/iron/dark, /area/station/security/checkpoint/supply) -"cJl" = ( -/obj/machinery/door/window/brigdoor{ - dir = 1; - name = "Creature Pen"; - req_access = list("research") - }, -/obj/effect/turf_decal/stripes{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/smart/simple/dark/visible, -/obj/structure/disposalpipe/segment, -/turf/open/floor/engine, -/area/station/science/xenobiology) "cJv" = ( /obj/structure/flora/rock/pile/jungle, /obj/structure/window/reinforced/spawner/directional/south, @@ -14726,15 +14671,6 @@ /obj/effect/landmark/blobstart, /turf/open/floor/iron, /area/station/science/explab) -"cLb" = ( -/obj/structure/railing{ - dir = 4 - }, -/obj/structure/rack/shelf, -/turf/open/floor/iron/smooth_edge{ - dir = 4 - }, -/area/station/cargo/miningdock) "cLc" = ( /obj/structure/chair/office{ dir = 1 @@ -14762,6 +14698,20 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron, /area/station/engineering/transit_tube) +"cLr" = ( +/obj/effect/turf_decal/delivery, +/obj/effect/turf_decal/stripes{ + dir = 8 + }, +/obj/machinery/computer/pod/old/mass_driver_controller/ordnancedriver/longrange{ + pixel_y = 28 + }, +/obj/machinery/door/window/left/directional/east{ + name = "Mass Driver Door"; + req_access = list("ordnance") + }, +/turf/open/floor/iron/dark, +/area/station/science/ordnance/testlab) "cLt" = ( /obj/effect/spawner/structure/window, /turf/open/floor/plating, @@ -15463,6 +15413,18 @@ /obj/machinery/door/airlock/maintenance, /turf/open/floor/plating, /area/station/maintenance/port/upper) +"cSp" = ( +/obj/effect/turf_decal/bot, +/obj/machinery/hydroponics/constructable, +/obj/structure/window/spawner/directional/north, +/obj/effect/turf_decal/trimline/green/filled/line{ + dir = 10 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/iron/dark, +/area/station/service/hydroponics) "cSF" = ( /obj/machinery/door/airlock/research/glass/incinerator/ordmix_exterior, /obj/effect/mapping_helpers/airlock/locked, @@ -15730,25 +15692,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/maintenance/department/engineering/atmos_aux_port) -"cVx" = ( -/obj/machinery/door/firedoor, -/obj/structure/table/reinforced, -/obj/item/folder/blue, -/obj/machinery/door/window/brigdoor/left{ - dir = 8; - name = "Access Desk"; - req_access = list("hop") - }, -/obj/machinery/door/window/right{ - dir = 4; - name = "Access Queue" - }, -/obj/machinery/door/poddoor/preopen{ - id = "hopblast"; - name = "HoP Blast Door" - }, -/turf/open/floor/iron/dark, -/area/station/command/heads_quarters/hop) "cVz" = ( /turf/closed/wall, /area/station/cargo/lobby) @@ -16165,6 +16108,14 @@ /obj/effect/spawner/random/trash/garbage, /turf/open/floor/plating, /area/station/maintenance/port/fore) +"cZL" = ( +/obj/effect/turf_decal/delivery, +/obj/machinery/door/window/brigdoor/left/directional/east{ + name = "Xenobiology Deliveries"; + req_access = list("research") + }, +/turf/open/floor/iron/dark, +/area/station/science/xenobiology/control) "cZQ" = ( /obj/effect/decal/cleanable/dirt{ icon_state = "dirt-flat-1" @@ -16507,17 +16458,6 @@ /obj/effect/spawner/random/trash/moisture_trap, /turf/open/floor/plating, /area/station/maintenance/fore/upper) -"dea" = ( -/obj/machinery/door/window{ - dir = 1; - name = "Interior Door"; - req_access = list("lawyer") - }, -/obj/effect/turf_decal/siding/wood{ - dir = 9 - }, -/turf/open/floor/carpet/blue, -/area/station/service/lawoffice) "deb" = ( /obj/effect/turf_decal/stripes/end{ dir = 4 @@ -16788,8 +16728,7 @@ /obj/machinery/power/apc/auto_name/directional/west, /obj/structure/table, /obj/machinery/chem_dispenser/drinks/beer{ - dir = 4; - pixel_y = 0 + dir = 4 }, /obj/effect/turf_decal/tile/bar/opposingcorners, /turf/open/floor/iron, @@ -16923,6 +16862,19 @@ /obj/structure/cable, /turf/open/floor/iron/dark, /area/station/science/robotics/mechbay) +"dhO" = ( +/obj/effect/turf_decal/delivery, +/obj/effect/turf_decal/stripes, +/obj/machinery/door/poddoor/preopen{ + id = "xeno3"; + name = "Creature Cell #3" + }, +/obj/machinery/door/window/brigdoor/left/directional/south{ + name = "Creature Pen"; + req_access = list("research") + }, +/turf/open/floor/engine, +/area/station/science/xenobiology) "dhP" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ dir = 4 @@ -17057,6 +17009,20 @@ }, /turf/open/floor/iron/dark, /area/station/science/genetics) +"diE" = ( +/obj/machinery/door/firedoor, +/obj/structure/table/reinforced, +/obj/item/folder/white, +/obj/machinery/door/poddoor/shutters/preopen{ + id = "Psychward4"; + name = "Control Room Shutters" + }, +/obj/structure/cable, +/obj/machinery/door/window/left/directional/east{ + req_access = list("psychology") + }, +/turf/open/floor/iron/dark, +/area/station/medical/psychology) "diF" = ( /obj/structure/cable, /obj/structure/disposalpipe/segment, @@ -17414,6 +17380,21 @@ /obj/machinery/power/energy_accumulator/grounding_rod, /turf/open/floor/plating, /area/station/engineering/supermatter/room) +"dmz" = ( +/obj/structure/window/reinforced/spawner/directional/north, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/turf_decal/vg_decals/numbers/one, +/obj/effect/turf_decal/tile/red/half/contrasted{ + dir = 8 + }, +/obj/machinery/door/window/brigdoor/security/cell/right/directional/west{ + name = "Cell 1" + }, +/turf/open/floor/iron/dark/side{ + dir = 8 + }, +/area/station/security/brig) "dmA" = ( /obj/structure/railing{ dir = 6 @@ -17913,6 +17894,14 @@ /obj/structure/barricade/wooden, /turf/open/floor/plating, /area/station/service/hydroponics/garden/abandoned) +"dsh" = ( +/obj/structure/flora/bush/grassy, +/obj/structure/flora/bush/flowers_br, +/obj/machinery/door/window/left/directional/east{ + name = "Soothing Nature Exhibit" + }, +/turf/open/floor/grass, +/area/station/medical/aslyum) "dsi" = ( /obj/effect/turf_decal/bot, /obj/structure/reagent_dispensers/watertank, @@ -18022,15 +18011,6 @@ /obj/machinery/duct, /turf/open/floor/plating, /area/station/maintenance/starboard/fore) -"dsU" = ( -/obj/structure/reagent_forge, -/obj/machinery/door/firedoor, -/obj/machinery/door/window/left{ - dir = 4 - }, -/obj/item/stack/sheet/mineral/coal/five, -/turf/open/floor/iron/dark, -/area/station/service/forge) "dsW" = ( /obj/structure/table/wood/fancy/red, /obj/effect/turf_decal/siding/wood{ @@ -18326,6 +18306,14 @@ dir = 8 }, /area/station/common/locker_room_shower) +"dwq" = ( +/obj/structure/table/reinforced, +/obj/machinery/door/firedoor, +/obj/item/forging/tongs, +/obj/item/forging/hammer, +/obj/machinery/door/window/right/directional/east, +/turf/open/floor/iron/dark, +/area/station/service/forge) "dwx" = ( /obj/machinery/door/airlock/public/glass{ name = "Fitness Courtyard" @@ -18356,7 +18344,7 @@ /obj/item/clothing/suit/jacket/letterman_syndie, /obj/item/clothing/suit/jacket/miljacket, /obj/item/clothing/suit/jacket/leather, -/obj/item/clothing/suit/croptop, +/obj/item/clothing/suit/jacket/croptop, /turf/open/floor/iron/dark, /area/station/common/tailoring) "dwK" = ( @@ -18453,21 +18441,6 @@ /obj/machinery/light/small/directional/west, /turf/open/floor/iron/cafeteria, /area/station/commons/toilet/auxiliary) -"dxT" = ( -/obj/machinery/door/firedoor/border_only{ - dir = 4 - }, -/obj/effect/turf_decal/box, -/obj/machinery/atmospherics/components/unary/portables_connector/visible/layer4{ - dir = 1 - }, -/obj/machinery/door/window/right/directional/west{ - dir = 4; - name = "Ordnance Freezer Chamber Access" - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/turf/open/floor/iron/dark, -/area/station/science/ordnance) "dyh" = ( /obj/effect/decal/cleanable/dirt{ icon_state = "dirt-flat-1" @@ -18619,22 +18592,6 @@ }, /turf/open/floor/plating/airless, /area/station/maintenance/port/upper) -"dzF" = ( -/obj/machinery/door/window/left{ - dir = 4; - name = "Medical Delivery"; - req_access = list("medical") - }, -/obj/effect/turf_decal/delivery, -/obj/machinery/navbeacon{ - codes_txt = "delivery;dir=8"; - location = "Medbay" - }, -/obj/structure/disposalpipe/segment{ - dir = 10 - }, -/turf/open/floor/iron/dark, -/area/station/medical/medbay/central) "dzO" = ( /obj/effect/turf_decal/siding/thinplating/dark/corner{ dir = 8 @@ -18675,12 +18632,6 @@ /obj/effect/spawner/random/maintenance, /turf/open/floor/plating, /area/station/maintenance/department/eva) -"dAd" = ( -/obj/item/weldingtool, -/obj/structure/lattice, -/obj/structure/spacevine/xen, -/turf/open/space/basic, -/area/space/nearstation) "dAg" = ( /obj/effect/decal/cleanable/dirt{ icon_state = "dirt-flat-1" @@ -19139,22 +19090,6 @@ /obj/structure/disposalpipe/segment, /turf/open/floor/iron, /area/station/hallway/primary/upper) -"dEC" = ( -/obj/machinery/door/firedoor, -/obj/structure/table/reinforced, -/obj/machinery/door/poddoor/shutters/preopen{ - id = "roboticsprivacy"; - name = "Robotics Shutters" - }, -/obj/item/folder, -/obj/item/pen, -/obj/machinery/door/window/left{ - dir = 4; - name = "Robotics Desk"; - req_access = list("robotics") - }, -/turf/open/floor/iron/dark, -/area/station/science/robotics/lab) "dEF" = ( /obj/machinery/atmospherics/pipe/smart/simple/supply/visible/layer4{ dir = 5 @@ -19785,6 +19720,13 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/security/prison/shower) +"dJV" = ( +/obj/structure/railing{ + pixel_y = -5 + }, +/obj/effect/turf_decal/stripes, +/turf/open/floor/iron/smooth, +/area/station/cargo/miningdock) "dJW" = ( /obj/effect/spawner/structure/window/reinforced, /turf/open/floor/plating, @@ -20216,23 +20158,6 @@ dir = 4 }, /area/station/security/prison/workout) -"dOL" = ( -/obj/machinery/door/window/brigdoor{ - id = "cargocell"; - name = "Cargo Cell"; - req_access = list("security") - }, -/obj/machinery/light/directional/north, -/turf/open/floor/iron, -/area/station/security/checkpoint/supply) -"dOT" = ( -/obj/effect/decal/cleanable/dirt{ - icon_state = "dirt-flat-1" - }, -/obj/structure/alien/weeds/xen, -/obj/structure/flora/lunar_plant/style_2, -/turf/open/misc/asteroid/airless, -/area/space/nearstation) "dOX" = ( /obj/structure/disposalpipe/trunk/multiz{ dir = 1 @@ -20525,7 +20450,6 @@ }, /area/station/ai_monitored/command/storage/eva) "dSK" = ( -/obj/item/kirbyplants/random, /obj/machinery/light/small/directional/west, /obj/structure/disposalpipe/segment{ dir = 5 @@ -20535,6 +20459,7 @@ /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ dir = 4 }, +/obj/item/banner/engineering/mundane, /turf/open/floor/iron, /area/station/engineering/lobby) "dSL" = ( @@ -20773,20 +20698,6 @@ dir = 1 }, /area/station/hallway/primary/central/aft) -"dUi" = ( -/obj/effect/turf_decal/stripes{ - dir = 4 - }, -/obj/effect/turf_decal/stripes/red/line{ - dir = 4 - }, -/obj/machinery/door/window/left{ - dir = 4; - name = "Mech Bay"; - req_access = list("robotics") - }, -/turf/open/floor/mineral/plastitanium/red, -/area/station/science/robotics/lab) "dUl" = ( /obj/effect/turf_decal/stripes{ dir = 6 @@ -21144,6 +21055,24 @@ }, /turf/open/floor/iron/dark, /area/station/engineering/break_room) +"dYd" = ( +/obj/structure/table/reinforced, +/obj/machinery/door/firedoor, +/obj/machinery/door/poddoor/shutters/preopen{ + id = "lawyerprivacy"; + name = "Lawyer's Privacy Shutter" + }, +/obj/item/folder{ + pixel_x = 2; + pixel_y = 2 + }, +/obj/item/folder, +/obj/machinery/door/window/left/directional/west{ + name = "Law Desk"; + req_access = list("lawyer") + }, +/turf/open/floor/iron/dark, +/area/station/service/lawoffice) "dYe" = ( /obj/effect/turf_decal/siding/wood, /obj/structure/table, @@ -21164,6 +21093,17 @@ /obj/machinery/duct, /turf/open/floor/iron/checker, /area/station/service/janitor) +"dYp" = ( +/obj/machinery/power/apc/auto_name/directional/west, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/door/window/left/directional/south{ + name = "Library Desk"; + req_access = list("library") + }, +/turf/open/floor/wood, +/area/station/service/library) "dYr" = ( /obj/item/weldingtool/largetank, /turf/open/floor/engine, @@ -21409,6 +21349,29 @@ }, /turf/open/floor/iron, /area/station/hallway/primary/port) +"ebp" = ( +/obj/effect/turf_decal/tile/neutral{ + dir = 1 + }, +/obj/effect/turf_decal/tile/neutral, +/obj/effect/turf_decal/tile/neutral{ + dir = 4 + }, +/obj/effect/turf_decal/tile/neutral{ + dir = 8 + }, +/obj/machinery/holopad/secure, +/obj/machinery/flasher/directional/west{ + id = "AI"; + pixel_y = -26 + }, +/obj/structure/cable, +/obj/machinery/door/window/brigdoor/left/directional/east{ + name = "Secondary AI Core Acces Door"; + req_access = list("ai_upload") + }, +/turf/open/floor/iron/dark, +/area/station/ai_monitored/turret_protected/ai) "ebv" = ( /obj/structure/table/wood, /obj/item/statuebust, @@ -21525,20 +21488,6 @@ /obj/machinery/newscaster/directional/south, /turf/open/floor/iron, /area/station/medical/virology) -"edo" = ( -/obj/machinery/door/window/brigdoor/right{ - dir = 4; - id = "Cell 6"; - name = "Cell 6"; - req_access = list("security") - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/effect/turf_decal/vg_decals/numbers/six, -/turf/open/floor/iron/dark/side{ - dir = 4 - }, -/area/station/security/brig) "edv" = ( /obj/effect/spawner/structure/window/reinforced, /obj/structure/cable, @@ -21606,14 +21555,6 @@ dir = 1 }, /area/station/hallway/primary/port) -"eeB" = ( -/obj/machinery/door/window/brigdoor/right{ - dir = 4; - name = "Cargo Deliveries"; - req_access = list("security") - }, -/turf/open/floor/iron/dark, -/area/station/security/brig) "eeD" = ( /obj/item/beacon, /obj/structure/cable, @@ -21772,22 +21713,6 @@ }, /turf/open/space/basic, /area/space/nearstation) -"efG" = ( -/obj/machinery/door/firedoor, -/obj/structure/table/reinforced, -/obj/machinery/door/window/right{ - dir = 4; - name = "Atmospherics Desk"; - req_access = list("atmospherics") - }, -/obj/machinery/door/poddoor/preopen{ - id = "atmoslock"; - name = "Atmospherics Lockdown Blast Door" - }, -/obj/item/paper_bin, -/obj/item/pen, -/turf/open/floor/iron/dark, -/area/station/engineering/atmos/office) "efJ" = ( /turf/closed/wall, /area/station/service/library/lounge) @@ -21848,6 +21773,13 @@ /obj/machinery/duct, /turf/open/floor/plating, /area/station/maintenance/department/science/central) +"egv" = ( +/obj/effect/decal/cleanable/dirt{ + icon_state = "dirt-flat-1" + }, +/obj/item/food/grown/mushroom/glowshroom, +/turf/open/misc/asteroid/airless, +/area/space/nearstation) "egB" = ( /obj/structure/cable, /obj/effect/spawner/structure/window/reinforced, @@ -22303,6 +22235,13 @@ }, /turf/open/floor/iron/white, /area/station/science/research) +"ekR" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 4 + }, +/obj/machinery/door/window/right/directional/east, +/turf/open/floor/wood, +/area/station/command/heads_quarters/captain) "elb" = ( /turf/open/floor/engine, /area/station/science/ordnance/burnchamber) @@ -23375,20 +23314,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/white, /area/station/science/research) -"evl" = ( -/obj/machinery/door/window{ - dir = 4; - name = "Deliveries"; - req_access = list("cargo") - }, -/obj/effect/turf_decal/delivery, -/obj/effect/turf_decal/tile/brown/anticorner/contrasted, -/obj/structure/cable, -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ - dir = 8 - }, -/turf/open/floor/iron, -/area/station/cargo/office) "evn" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -23433,6 +23358,15 @@ /obj/machinery/porta_turret/ai, /turf/open/floor/iron/dark, /area/station/ai_monitored/turret_protected/aisat_interior) +"evG" = ( +/obj/structure/flora/bush/sparsegrass, +/obj/effect/turf_decal/siding/thinplating/light, +/obj/machinery/door/window/left/directional/south{ + name = "Monkey Pen"; + req_access = list("virology") + }, +/turf/open/floor/grass, +/area/station/medical/virology/isolation) "evJ" = ( /obj/item/kirbyplants/random, /turf/open/floor/iron/dark/side{ @@ -23490,6 +23424,13 @@ /obj/structure/ore_box, /turf/open/floor/iron/dark, /area/station/cargo/miningoffice) +"ewv" = ( +/obj/machinery/light/directional/north, +/obj/structure/rack/shelf, +/turf/open/floor/iron/smooth_edge{ + dir = 1 + }, +/area/station/cargo/miningdock) "ewx" = ( /obj/effect/turf_decal/bot, /obj/structure/reagent_dispensers/fueltank, @@ -23837,6 +23778,15 @@ }, /turf/open/floor/iron, /area/station/maintenance/aux_eva) +"ezF" = ( +/obj/structure/window/reinforced/spawner/directional/east, +/obj/structure/cable, +/obj/machinery/door/window/right/directional/north{ + name = "Robotics Deliveries"; + req_access = list("robotics") + }, +/turf/open/floor/mineral/plastitanium/red, +/area/station/science/robotics/lab) "ezM" = ( /obj/effect/turf_decal/stripes{ dir = 10 @@ -24043,10 +23993,41 @@ /obj/machinery/newscaster/directional/north, /turf/open/floor/wood, /area/station/medical/psychology) +"eBt" = ( +/obj/effect/turf_decal/delivery, +/obj/effect/turf_decal/trimline/blue/filled/warning{ + 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/blue{ + dir = 1 + }, +/obj/effect/turf_decal/tile/blue{ + dir = 8 + }, +/obj/machinery/door/window/brigdoor/left/directional/east{ + name = "Medical Cell"; + req_access = list("security") + }, +/turf/open/floor/iron/white/side{ + dir = 4 + }, +/area/station/security/checkpoint/medical) "eBw" = ( /obj/machinery/duct, /turf/open/floor/plating, /area/station/maintenance/port/fore) +"eBx" = ( +/obj/structure/table, +/obj/machinery/door/poddoor/shutters{ + id = "visitation"; + name = "Visitation Shutters" + }, +/obj/machinery/door/window/right/directional/west, +/turf/open/floor/iron/dark, +/area/station/security/prison/visit) "eBy" = ( /obj/machinery/duct, /turf/open/floor/plating, @@ -24065,6 +24046,17 @@ /obj/item/kirbyplants/random, /turf/open/floor/wood, /area/station/command/meeting_room/council) +"eBP" = ( +/obj/machinery/conveyor_switch/oneway{ + id = "mining"; + dir = 1 + }, +/obj/structure/railing{ + pixel_y = -5 + }, +/obj/effect/turf_decal/stripes, +/turf/open/floor/iron/smooth, +/area/station/cargo/miningdock) "eBW" = ( /obj/machinery/door/firedoor, /obj/effect/mapping_helpers/airlock/cyclelink_helper, @@ -24289,6 +24281,15 @@ "eDJ" = ( /turf/closed/wall/rust, /area/station/maintenance/department/eva) +"eDK" = ( +/obj/effect/turf_decal/bot, +/obj/machinery/hydroponics/constructable, +/obj/structure/window/spawner/directional/south, +/obj/effect/turf_decal/trimline/green/filled/line{ + dir = 5 + }, +/turf/open/floor/iron/dark, +/area/station/service/hydroponics) "eDQ" = ( /obj/structure/chair/pew/right{ dir = 8 @@ -25098,22 +25099,6 @@ /obj/machinery/light/small/directional/west, /turf/open/floor/iron/freezer, /area/station/command/heads_quarters/blueshield) -"eLq" = ( -/obj/effect/turf_decal/bot, -/obj/machinery/hydroponics/constructable, -/obj/structure/window/spawner/directional/north, -/obj/machinery/door/window/left{ - dir = 4; - pixel_x = 4 - }, -/obj/effect/turf_decal/trimline/green/filled/line{ - dir = 10 - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/open/floor/iron/dark, -/area/station/service/hydroponics) "eLv" = ( /obj/machinery/computer/mech_bay_power_console{ dir = 1 @@ -25297,6 +25282,21 @@ /obj/item/clothing/under/shorts/nova, /turf/open/floor/wood, /area/station/hallway/primary/central) +"eMR" = ( +/obj/effect/turf_decal/delivery, +/obj/effect/turf_decal/stripes{ + dir = 1 + }, +/obj/machinery/door/poddoor/preopen{ + id = "xeno5"; + name = "Creature Cell #5" + }, +/obj/machinery/door/window/brigdoor/left/directional/north{ + name = "Creature Pen"; + req_access = list("research") + }, +/turf/open/floor/engine, +/area/station/science/xenobiology) "eMT" = ( /obj/machinery/atmospherics/components/binary/pump{ dir = 8 @@ -25429,34 +25429,6 @@ dir = 10 }, /area/station/engineering/storage) -"eOf" = ( -/obj/machinery/camera/directional/north{ - c_tag = "AI Chamber - Core"; - network = list("aicore") - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/obj/effect/turf_decal/tile/neutral, -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, -/obj/machinery/requests_console/directional/north{ - department = "AI"; - name = "AI Requests Console" - }, -/obj/effect/mapping_helpers/requests_console/information, -/obj/effect/mapping_helpers/requests_console/assistance, -/obj/machinery/door/window/brigdoor{ - dir = 4; - name = "Primary AI Core Acces Door"; - req_access = list("ai_upload") - }, -/turf/open/floor/iron/dark, -/area/station/ai_monitored/turret_protected/ai) "eOg" = ( /obj/structure/closet/crate/bin, /turf/open/floor/wood, @@ -25724,22 +25696,6 @@ initial_gas_mix = "TEMP=2.7" }, /area/station/science/ordnance/bomb) -"eQk" = ( -/obj/machinery/door/window/brigdoor{ - dir = 1; - name = "Creature Pen"; - req_access = list("research") - }, -/obj/effect/turf_decal/delivery, -/obj/effect/turf_decal/stripes{ - dir = 1 - }, -/obj/machinery/door/poddoor/preopen{ - id = "xeno5"; - name = "Creature Cell #5" - }, -/turf/open/floor/engine, -/area/station/science/xenobiology) "eQp" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/disposalpipe/segment, @@ -25993,7 +25949,7 @@ /obj/effect/turf_decal/delivery, /obj/structure/rack/gunrack, /obj/machinery/airalarm/directional/south, -/obj/effect/spawner/armory_spawn/shotguns, +/obj/effect/spawner/armory_spawn/mod_lasers_small, /turf/open/floor/iron, /area/station/ai_monitored/security/armory) "eTk" = ( @@ -26117,19 +26073,6 @@ dir = 8 }, /area/station/commons/fitness/recreation) -"eUl" = ( -/obj/effect/turf_decal/bot, -/obj/machinery/hydroponics/constructable, -/obj/structure/window/spawner/directional/south, -/obj/machinery/door/window/left{ - dir = 8; - pixel_x = -3 - }, -/obj/effect/turf_decal/trimline/green/filled/line{ - dir = 1 - }, -/turf/open/floor/iron/dark, -/area/station/service/hydroponics) "eUo" = ( /obj/effect/turf_decal/trimline/blue/filled/line, /obj/effect/turf_decal/trimline/blue/corner{ @@ -27057,16 +27000,6 @@ }, /turf/open/floor/iron/dark, /area/station/security/execution/education) -"fcO" = ( -/obj/machinery/door/window{ - dir = 1 - }, -/obj/effect/turf_decal/siding/wood{ - dir = 1 - }, -/obj/machinery/airalarm/directional/west, -/turf/open/floor/wood/parquet, -/area/station/common/arcade) "fcP" = ( /turf/open/floor/carpet, /area/station/security/courtroom) @@ -27247,6 +27180,28 @@ /obj/structure/cable, /turf/open/floor/wood, /area/station/hallway/primary/port) +"feu" = ( +/obj/structure/rack/wooden, +/obj/machinery/light/directional/east, +/obj/machinery/status_display/evac/directional/east, +/obj/item/clothing/suit/koreacoat{ + pixel_x = 6; + pixel_y = 8 + }, +/obj/item/clothing/suit/modern_winter{ + pixel_y = -3; + pixel_x = 7 + }, +/obj/item/clothing/suit/jacket/delta{ + pixel_x = -6; + pixel_y = 6 + }, +/obj/item/clothing/suit/jacket/puffer{ + pixel_x = -3; + pixel_y = -6 + }, +/turf/open/floor/wood/parquet, +/area/station/common/tailoring) "fey" = ( /obj/structure/window/reinforced/spawner/directional/east, /obj/effect/turf_decal/bot, @@ -27661,17 +27616,6 @@ initial_gas_mix = "TEMP=2.7" }, /area/station/science/ordnance/bomb) -"fik" = ( -/obj/machinery/door/firedoor, -/obj/structure/table/reinforced, -/obj/machinery/door/window/left{ - name = "Engineering Desk"; - req_access = list("engineering","atmospherics") - }, -/obj/item/folder/yellow, -/obj/item/pen, -/turf/open/floor/iron/dark, -/area/station/engineering/lobby) "fil" = ( /obj/effect/turf_decal/stripes{ dir = 4 @@ -28111,21 +28055,6 @@ /obj/structure/cable, /turf/open/floor/iron, /area/station/ai_monitored/command/storage/eva/upper) -"fnJ" = ( -/obj/machinery/door/firedoor, -/obj/structure/table/reinforced, -/obj/machinery/door/window/left{ - dir = 4; - name = "Hydroponics Desk"; - req_access = list("hydroponics") - }, -/obj/item/folder, -/obj/item/food/grown/apple, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/open/floor/iron/dark, -/area/station/service/hydroponics) "fnL" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -29086,30 +29015,6 @@ dir = 4 }, /area/station/hallway/secondary/command) -"fxv" = ( -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/obj/effect/turf_decal/tile/neutral, -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, -/obj/machinery/holopad/secure, -/obj/machinery/flasher/directional/west{ - id = "AI"; - pixel_y = -26 - }, -/obj/structure/cable, -/obj/machinery/door/window/brigdoor{ - dir = 4; - name = "Secondary AI Core Acces Door"; - req_access = list("ai_upload") - }, -/turf/open/floor/iron/dark, -/area/station/ai_monitored/turret_protected/ai) "fxw" = ( /obj/machinery/button/door/directional/south{ id = "gatewayshutters"; @@ -29581,20 +29486,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/plating, /area/station/science/ordnance/freezerchamber) -"fCT" = ( -/obj/structure/table, -/obj/structure/window/reinforced/spawner/directional/west, -/obj/structure/window/reinforced/spawner/directional/north, -/obj/machinery/door/window{ - base_state = "right"; - dir = 4; - icon_state = "right"; - name = "Core Modules"; - req_access = list("ai_upload") - }, -/obj/effect/spawner/random/aimodule/neutral, -/turf/open/floor/iron, -/area/station/ai_monitored/turret_protected/ai_upload) "fCU" = ( /turf/open/floor/carpet, /area/station/service/lawoffice) @@ -30847,6 +30738,21 @@ }, /turf/open/floor/iron, /area/station/security/checkpoint) +"fPB" = ( +/obj/machinery/door/firedoor, +/obj/structure/table/reinforced, +/obj/machinery/door/poddoor/shutters/preopen{ + id = "roboticsprivacy"; + name = "Robotics Shutters" + }, +/obj/item/folder, +/obj/item/pen, +/obj/machinery/door/window/left/directional/east{ + name = "Robotics Desk"; + req_access = list("robotics") + }, +/turf/open/floor/iron/dark, +/area/station/science/robotics/lab) "fQc" = ( /obj/effect/turf_decal/bot, /obj/structure/rack, @@ -31385,6 +31291,21 @@ "fWi" = ( /turf/open/floor/iron, /area/station/security/office) +"fWk" = ( +/obj/effect/turf_decal/delivery, +/obj/machinery/navbeacon{ + codes_txt = "delivery;dir=8"; + location = "Medbay" + }, +/obj/structure/disposalpipe/segment{ + dir = 10 + }, +/obj/machinery/door/window/left/directional/east{ + req_access = list("medical"); + name = "Medical Delivery" + }, +/turf/open/floor/iron/dark, +/area/station/medical/medbay/central) "fWn" = ( /obj/machinery/light/small/directional/east, /turf/open/floor/plating, @@ -31405,17 +31326,6 @@ }, /turf/open/floor/iron/dark, /area/station/security/warden) -"fWu" = ( -/obj/effect/turf_decal/delivery, -/obj/machinery/door/window/left{ - name = "Service Deliveries"; - req_access = list("service") - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/open/floor/iron/dark, -/area/station/hallway/secondary/service) "fWA" = ( /obj/machinery/door/airlock/maintenance, /obj/effect/mapping_helpers/airlock/access/all/engineering/maintenance, @@ -31568,6 +31478,21 @@ /obj/structure/cable, /turf/open/floor/wood, /area/station/commons/dorms/room7) +"fYj" = ( +/obj/machinery/door/firedoor, +/obj/structure/table/reinforced, +/obj/item/folder, +/obj/item/pen, +/obj/machinery/door/poddoor/shutters/preopen{ + id = "rnd"; + name = "Research Lab Shutters" + }, +/obj/machinery/door/window/left/directional/south{ + req_access = list("science"); + name = "Research Lab Desk" + }, +/turf/open/floor/iron/dark, +/area/station/science/lab) "fYm" = ( /turf/closed/wall, /area/station/science/auxlab/firing_range) @@ -32051,6 +31976,13 @@ }, /turf/open/floor/plating, /area/station/maintenance/department/science/lower) +"gcr" = ( +/obj/machinery/airalarm/directional/north, +/obj/machinery/newscaster/directional/east, +/obj/machinery/light/directional/north, +/obj/machinery/smartfridge/organ, +/turf/open/floor/iron/dark/small, +/area/station/medical/morgue) "gcs" = ( /obj/structure/table/reinforced, /obj/item/clipboard, @@ -32383,16 +32315,6 @@ /obj/structure/cable, /turf/open/floor/plating/airless, /area/space/nearstation) -"gga" = ( -/obj/machinery/door/firedoor/border_only{ - dir = 1 - }, -/obj/machinery/door/window/right/directional/west{ - dir = 1; - name = "Ordnance Freezer Chamber Access" - }, -/turf/open/floor/iron/dark, -/area/station/science/ordnance) "ggh" = ( /obj/effect/turf_decal/stripes{ dir = 4 @@ -33053,12 +32975,6 @@ }, /turf/open/floor/engine, /area/station/science/ordnance/freezerchamber) -"gmM" = ( -/obj/structure/decorative/shelf, -/turf/open/floor/iron/smooth_edge{ - dir = 1 - }, -/area/station/cargo/miningdock) "gmN" = ( /obj/structure/chair/sofa/bench/left, /obj/machinery/light/small/directional/north, @@ -33469,21 +33385,6 @@ "gqr" = ( /turf/open/floor/glass/reinforced/airless, /area/station/hallway/secondary/exit) -"gqu" = ( -/obj/machinery/door/firedoor, -/obj/structure/table/reinforced, -/obj/machinery/door/window/left{ - name = "Research Lab Desk"; - req_access = list("science") - }, -/obj/item/folder, -/obj/item/pen, -/obj/machinery/door/poddoor/shutters/preopen{ - id = "rnd"; - name = "Research Lab Shutters" - }, -/turf/open/floor/iron/dark, -/area/station/science/lab) "gqy" = ( /obj/structure/table/reinforced, /obj/item/stock_parts/servo/nano, @@ -33552,6 +33453,20 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/plating, /area/station/maintenance/central) +"gqZ" = ( +/obj/structure/table, +/obj/structure/window/reinforced/spawner/directional/east, +/obj/structure/window/reinforced/spawner/directional/north, +/obj/item/ai_module/supplied/oxygen{ + pixel_x = -3; + pixel_y = -3 + }, +/obj/machinery/door/window/brigdoor/right/directional/west{ + id = list("ai_upload"); + name = "High-Risk Modules" + }, +/turf/open/floor/iron, +/area/station/ai_monitored/turret_protected/ai_upload) "grb" = ( /obj/structure/railing, /obj/machinery/door/firedoor/border_only, @@ -33595,23 +33510,6 @@ }, /turf/open/floor/iron/dark, /area/station/security/courtroom) -"gry" = ( -/obj/structure/railing/corner{ - dir = 8 - }, -/obj/effect/turf_decal/stripes{ - dir = 4 - }, -/obj/effect/turf_decal/vg_decals/numbers/one, -/obj/effect/turf_decal/stripes/white/line{ - dir = 4 - }, -/obj/machinery/door/window/elevator/right/directional/east{ - elevator_mode = 1; - transport_linked_id = "publicElevator" - }, -/turf/open/floor/iron/dark, -/area/station/hallway/primary/central) "grA" = ( /obj/effect/decal/cleanable/dirt{ icon_state = "dirt-flat-1" @@ -33684,6 +33582,20 @@ dir = 8 }, /area/station/cargo/miningdock) +"gsF" = ( +/obj/machinery/door/firedoor/border_only{ + dir = 4 + }, +/obj/effect/turf_decal/box, +/obj/machinery/atmospherics/components/unary/portables_connector/visible/layer4{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/door/window/right/directional/east{ + name = "Ordnance Freezer Chamber Access" + }, +/turf/open/floor/iron/dark, +/area/station/science/ordnance) "gsG" = ( /obj/structure/rack/shelf, /obj/effect/turf_decal/bot, @@ -34021,6 +33933,17 @@ /obj/effect/mapping_helpers/broken_floor, /turf/open/floor/wood, /area/station/maintenance/abandon_art_studio) +"gvR" = ( +/obj/structure/disposalpipe/segment{ + dir = 9 + }, +/obj/effect/turf_decal/delivery, +/obj/machinery/door/window/left/directional/south{ + name = "Service Deliveries"; + req_access = list("service") + }, +/turf/open/floor/iron, +/area/station/hallway/secondary/service) "gwb" = ( /obj/structure/table, /obj/effect/turf_decal/tile/yellow, @@ -34438,13 +34361,6 @@ /obj/machinery/duct, /turf/open/floor/iron/white, /area/station/medical/medbay/central) -"gzV" = ( -/obj/machinery/door/window/left{ - dir = 1; - name = "Terrace" - }, -/turf/open/floor/wood, -/area/station/hallway/primary/central) "gAc" = ( /obj/effect/turf_decal/stripes{ dir = 1 @@ -34953,6 +34869,23 @@ }, /turf/open/floor/iron, /area/station/command/captain_dining) +"gFK" = ( +/obj/effect/turf_decal/stripes{ + dir = 4 + }, +/obj/machinery/disposal/delivery_chute{ + dir = 4 + }, +/obj/structure/plasticflaps, +/obj/structure/disposalpipe/trunk{ + dir = 8 + }, +/obj/machinery/door/window/right/directional/east{ + req_access = list("cargo"); + name = "Science Deliveries" + }, +/turf/open/floor/iron/dark, +/area/station/cargo/sorting) "gFM" = ( /obj/effect/turf_decal/caution, /obj/structure/cable, @@ -35112,29 +35045,6 @@ /obj/effect/spawner/random/maintenance, /turf/open/floor/plating, /area/station/maintenance/fore/upper) -"gHC" = ( -/obj/machinery/flasher/directional/east{ - id = "AI"; - pixel_y = 26 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/obj/effect/turf_decal/tile/neutral, -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, -/obj/machinery/holopad/secure, -/obj/machinery/door/window/brigdoor{ - dir = 8; - name = "Tertiary AI Core Acces Door"; - req_access = list("ai_upload") - }, -/turf/open/floor/iron/dark, -/area/station/ai_monitored/turret_protected/ai) "gHH" = ( /obj/structure/table/wood, /obj/item/reagent_containers/cup/bottle/syrup_bottle/liqueur{ @@ -35394,8 +35304,8 @@ }, /area/station/maintenance/solars/port/fore) "gKc" = ( -/obj/item/kirbyplants/random, /obj/structure/extinguisher_cabinet/directional/east, +/obj/item/kirbyplants/random, /turf/open/floor/iron, /area/station/engineering/break_room) "gKk" = ( @@ -35554,23 +35464,6 @@ dir = 8 }, /area/station/service/hydroponics) -"gLX" = ( -/obj/machinery/conveyor{ - dir = 4; - id = "garbage" - }, -/obj/machinery/door/window/right{ - base_state = "left"; - dir = 1; - icon_state = "left"; - name = "Danger: Conveyor Access"; - req_access = list("maint_tunnels") - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/open/floor/plating, -/area/station/maintenance/disposal) "gLY" = ( /obj/structure/mirror{ pixel_y = 32 @@ -35933,6 +35826,15 @@ }, /turf/open/space/basic, /area/space/nearstation) +"gPv" = ( +/obj/machinery/door/window/brigdoor/left/directional/east{ + id = "scicell"; + name = "RnD Cell"; + req_access = list("security") + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron/dark, +/area/station/security/checkpoint/science/research) "gPC" = ( /obj/effect/decal/cleanable/dirt{ icon_state = "dirt-flat-1" @@ -36240,6 +36142,55 @@ /obj/machinery/camera/autoname/directional/west, /turf/open/floor/iron/dark, /area/station/cargo/office) +"gSB" = ( +/obj/structure/table/reinforced, +/obj/machinery/door/firedoor, +/obj/item/kitchen/fork{ + pixel_x = -12; + pixel_y = 2 + }, +/obj/item/kitchen/spoon{ + pixel_x = 10; + pixel_y = 2 + }, +/obj/item/kitchen/fork{ + pixel_x = -12; + pixel_y = 2 + }, +/obj/item/kitchen/fork{ + pixel_x = -12; + pixel_y = 2 + }, +/obj/item/kitchen/fork{ + pixel_x = -12; + pixel_y = 2 + }, +/obj/item/kitchen/spoon{ + pixel_x = 10; + pixel_y = 2 + }, +/obj/item/kitchen/spoon{ + pixel_x = 10; + pixel_y = 2 + }, +/obj/item/kitchen/spoon{ + pixel_x = 10; + pixel_y = 2 + }, +/obj/item/plate, +/obj/item/plate{ + pixel_y = 2 + }, +/obj/item/plate{ + pixel_y = 4 + }, +/obj/item/plate{ + pixel_y = 6 + }, +/obj/machinery/duct, +/obj/machinery/door/window/right/directional/south, +/turf/open/floor/iron/dark, +/area/station/command/heads_quarters/nt_rep) "gSE" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -36556,19 +36507,6 @@ }, /turf/open/floor/plating, /area/station/maintenance/starboard/fore) -"gVW" = ( -/obj/machinery/door/firedoor, -/obj/structure/table/reinforced, -/obj/machinery/door/window/brigdoor/right{ - dir = 1; - name = "Security Desk"; - req_access = list("security") - }, -/obj/item/folder/red, -/obj/item/pen, -/obj/structure/disposalpipe/segment, -/turf/open/floor/iron/dark, -/area/station/security/checkpoint/escape) "gWc" = ( /obj/effect/turf_decal/stripes{ dir = 8 @@ -37379,6 +37317,16 @@ /obj/item/organ/internal/eyes, /turf/open/floor/material/meat, /area/station/maintenance/department/science/xenobiology) +"hfl" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/door/window/left/directional/south{ + req_access = list("morgue"); + name = "Coroner's Office" + }, +/turf/open/floor/iron/dark, +/area/station/medical/morgue) "hfm" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -37589,6 +37537,24 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/plating, /area/station/maintenance/central) +"hhw" = ( +/obj/structure/window/reinforced/spawner/directional/north, +/obj/effect/turf_decal/stripes{ + dir = 4 + }, +/obj/machinery/disposal/delivery_chute{ + dir = 4 + }, +/obj/structure/plasticflaps, +/obj/structure/disposalpipe/trunk{ + dir = 4 + }, +/obj/machinery/door/window/right/directional/east{ + name = "Security Deliveries"; + req_access = list("cargo") + }, +/turf/open/floor/iron/dark, +/area/station/cargo/sorting) "hhx" = ( /obj/machinery/door/firedoor, /obj/machinery/flasher{ @@ -37988,14 +37954,6 @@ /obj/effect/mapping_helpers/airlock/access/all/security/entrance, /turf/open/floor/iron/dark, /area/station/security/brig) -"hlr" = ( -/obj/effect/decal/cleanable/dirt{ - icon_state = "dirt-flat-1" - }, -/obj/structure/alien/weeds/xen, -/obj/effect/spawner/random/bioluminescent_plant, -/turf/open/misc/asteroid/airless, -/area/space/nearstation) "hls" = ( /obj/effect/turf_decal/stripes{ dir = 9 @@ -38033,21 +37991,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/checker, /area/station/service/janitor) -"hlP" = ( -/obj/structure/railing/corner, -/obj/effect/turf_decal/stripes{ - dir = 8 - }, -/obj/effect/turf_decal/vg_decals/numbers/one, -/obj/effect/turf_decal/stripes/white/line{ - dir = 8 - }, -/obj/machinery/door/window/elevator/left/directional/west{ - elevator_mode = 1; - transport_linked_id = "publicElevator" - }, -/turf/open/floor/iron/dark, -/area/station/hallway/primary/central) "hlQ" = ( /obj/machinery/power/smes{ charge = 5e+006 @@ -38552,6 +38495,16 @@ }, /turf/open/floor/iron, /area/station/security/checkpoint/escape) +"hrr" = ( +/obj/effect/turf_decal/bot, +/obj/machinery/hydroponics/constructable, +/obj/structure/window/spawner/directional/north, +/obj/effect/turf_decal/trimline/green/filled/line, +/obj/machinery/door/window/left/directional/west{ + pixel_x = -3 + }, +/turf/open/floor/iron/dark, +/area/station/service/hydroponics) "hrs" = ( /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ dir = 8 @@ -38658,15 +38611,6 @@ }, /turf/open/floor/carpet/purple, /area/station/common/night_club/back_stage) -"hsJ" = ( -/obj/effect/turf_decal/delivery, -/obj/machinery/door/window/left{ - dir = 1; - name = "Bar Delivery"; - req_access = list("bar") - }, -/turf/open/floor/iron/dark, -/area/station/hallway/secondary/service) "hsN" = ( /obj/structure/railing/corner{ dir = 1 @@ -38709,31 +38653,6 @@ /obj/structure/sink/directional/south, /turf/open/floor/iron/freezer, /area/station/science/breakroom) -"hth" = ( -/obj/structure/rack/wooden, -/obj/machinery/light/directional/east, -/obj/machinery/status_display/evac/directional/east, -/obj/item/clothing/suit/koreacoat{ - pixel_x = 6; - pixel_y = 8 - }, -/obj/item/clothing/suit/modern_winter{ - pixel_y = 7 - }, -/obj/item/clothing/suit/jacket/delta{ - pixel_x = -6; - pixel_y = 6 - }, -/obj/item/clothing/suit/jacket/puffer{ - pixel_x = -3; - pixel_y = -6 - }, -/obj/item/clothing/suit/jacket/cherno{ - pixel_x = 6; - pixel_y = -7 - }, -/turf/open/floor/wood/parquet, -/area/station/common/tailoring) "htq" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -38783,16 +38702,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/smooth_corner, /area/station/cargo/miningdock) -"htI" = ( -/obj/effect/turf_decal/stripes/white/line{ - dir = 5 - }, -/obj/machinery/light/directional/west, -/obj/structure/closet/crate, -/obj/machinery/power/apc/auto_name/directional/south, -/obj/structure/cable, -/turf/open/floor/iron/dark/small, -/area/station/cargo/miningdock) "htK" = ( /obj/structure/railing{ dir = 4 @@ -38889,6 +38798,17 @@ dir = 1 }, /area/station/hallway/primary/port) +"hvm" = ( +/obj/machinery/door/firedoor, +/obj/structure/table/reinforced, +/obj/item/folder/yellow, +/obj/item/pen, +/obj/machinery/door/window/left/directional/south{ + req_access = list("engineering","atmospherics"); + name = "Engineering Desk" + }, +/turf/open/floor/iron/dark, +/area/station/engineering/lobby) "hvn" = ( /obj/machinery/disposal/bin, /obj/effect/turf_decal/tile/yellow/half/contrasted{ @@ -39177,20 +39097,6 @@ /obj/item/folder/red, /turf/open/floor/plating, /area/station/maintenance/abandon_holding_cell) -"hym" = ( -/obj/structure/table/reinforced, -/obj/machinery/door/window/left{ - dir = 1; - name = "Hydroponics Desk"; - req_access = list("hydroponics") - }, -/obj/machinery/door/window/left{ - name = "Kitchen Desk"; - req_access = list("kitchen") - }, -/obj/machinery/door/firedoor, -/turf/open/floor/iron/dark, -/area/station/service/hydroponics) "hyp" = ( /obj/machinery/portable_atmospherics/pump, /turf/open/floor/plating, @@ -39748,6 +39654,12 @@ /obj/item/pipe_dispenser, /turf/open/floor/iron/dark, /area/station/engineering/main) +"hDW" = ( +/obj/effect/decal/cleanable/dirt{ + icon_state = "dirt-flat-1" + }, +/turf/open/misc/asteroid/airless, +/area/space/nearstation) "hDY" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/water_source/puddle, @@ -39843,6 +39755,24 @@ /obj/effect/mapping_helpers/airlock/access/all/engineering/maintenance, /turf/open/floor/plating, /area/station/maintenance/port/central) +"hEP" = ( +/obj/effect/turf_decal/stripes{ + dir = 8 + }, +/obj/effect/turf_decal/stripes/white/line{ + dir = 8 + }, +/obj/machinery/button/elevator{ + id = "publicElevator"; + pixel_y = 32 + }, +/obj/machinery/lift_indicator/directional/north{ + linked_elevator_id = "publicElevator" + }, +/obj/machinery/light/directional/north, +/obj/machinery/door/window/elevator/left/directional/west, +/turf/open/floor/iron/dark, +/area/station/hallway/primary/central) "hES" = ( /obj/effect/decal/cleanable/dirt{ icon_state = "dirt-flat-1" @@ -40035,55 +39965,6 @@ /obj/machinery/duct, /turf/open/floor/catwalk_floor/iron_smooth, /area/station/maintenance/disposal/incinerator) -"hHa" = ( -/obj/structure/table/reinforced, -/obj/machinery/door/firedoor, -/obj/machinery/door/window/right, -/obj/item/kitchen/fork{ - pixel_x = -12; - pixel_y = 2 - }, -/obj/item/kitchen/spoon{ - pixel_x = 10; - pixel_y = 2 - }, -/obj/item/kitchen/fork{ - pixel_x = -12; - pixel_y = 2 - }, -/obj/item/kitchen/fork{ - pixel_x = -12; - pixel_y = 2 - }, -/obj/item/kitchen/fork{ - pixel_x = -12; - pixel_y = 2 - }, -/obj/item/kitchen/spoon{ - pixel_x = 10; - pixel_y = 2 - }, -/obj/item/kitchen/spoon{ - pixel_x = 10; - pixel_y = 2 - }, -/obj/item/kitchen/spoon{ - pixel_x = 10; - pixel_y = 2 - }, -/obj/item/plate, -/obj/item/plate{ - pixel_y = 2 - }, -/obj/item/plate{ - pixel_y = 4 - }, -/obj/item/plate{ - pixel_y = 6 - }, -/obj/machinery/duct, -/turf/open/floor/iron/dark, -/area/station/command/heads_quarters/nt_rep) "hHe" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -40641,6 +40522,17 @@ /obj/structure/closet/crate/bin, /turf/open/floor/iron/white, /area/station/medical/aslyum) +"hMB" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/turf_decal/vg_decals/numbers/three, +/obj/machinery/door/window/brigdoor/security/cell/right/directional/west{ + name = "Cell 3" + }, +/turf/open/floor/iron/dark/side{ + dir = 8 + }, +/area/station/security/brig) "hMF" = ( /turf/open/floor/plating, /area/space/nearstation) @@ -40742,28 +40634,6 @@ /obj/machinery/shower/directional/west, /turf/open/floor/iron/freezer, /area/station/commons/toilet/restrooms) -"hNA" = ( -/obj/machinery/light/directional/north, -/obj/effect/turf_decal/stripes{ - dir = 8 - }, -/obj/effect/turf_decal/stripes/white/line{ - dir = 8 - }, -/obj/machinery/button/elevator{ - id = "publicElevator"; - pixel_y = 32 - }, -/obj/machinery/lift_indicator/directional/north{ - linked_elevator_id = "publicElevator" - }, -/obj/machinery/door/window/elevator/right/directional/east{ - dir = 8; - elevator_mode = 1; - transport_linked_id = "publicElevator" - }, -/turf/open/floor/iron/dark, -/area/station/hallway/primary/upper) "hNB" = ( /obj/machinery/duct, /turf/open/floor/iron, @@ -41716,6 +41586,16 @@ /obj/machinery/duct, /turf/open/floor/iron/white, /area/station/medical/aslyum) +"hWG" = ( +/obj/machinery/atmospherics/components/binary/pump{ + dir = 4; + name = "justice gas pump" + }, +/obj/machinery/door/window/left/directional/east{ + name = "Gas Ports" + }, +/turf/open/floor/iron/dark, +/area/station/security/execution/education) "hWI" = ( /obj/effect/turf_decal/tile/yellow{ dir = 8 @@ -41732,6 +41612,18 @@ /obj/effect/spawner/random/contraband/prison, /turf/open/floor/iron/dark, /area/station/security/prison/workout) +"hWT" = ( +/obj/effect/turf_decal/stripes{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/smart/simple/dark/visible, +/obj/structure/disposalpipe/segment, +/obj/machinery/door/window/brigdoor/left/directional/north{ + name = "Creature Pen"; + req_access = list("research") + }, +/turf/open/floor/engine, +/area/station/science/xenobiology) "hWZ" = ( /obj/structure/table, /obj/item/pai_card, @@ -42115,21 +42007,6 @@ /obj/effect/spawner/random/trash/graffiti, /turf/closed/wall, /area/station/maintenance/department/security/greater) -"ibj" = ( -/obj/structure/table/reinforced, -/obj/machinery/door/firedoor, -/obj/machinery/door/window/left{ - dir = 4; - name = "Armoury Desk"; - req_access = list("armory") - }, -/obj/machinery/door/window/left{ - dir = 8; - name = "Armoury Desk"; - req_access = list("security") - }, -/turf/open/floor/iron/dark, -/area/station/ai_monitored/security/armory) "ibk" = ( /obj/effect/turf_decal/tile/neutral, /obj/effect/turf_decal/tile/neutral{ @@ -42236,13 +42113,6 @@ /obj/machinery/camera/autoname/directional/south, /turf/open/floor/iron/smooth_edge, /area/station/cargo/miningdock) -"icj" = ( -/obj/structure/decorative/shelf, -/obj/effect/spawner/random/maintenance/two, -/turf/open/floor/iron/smooth_edge{ - dir = 1 - }, -/area/station/cargo/miningdock) "icm" = ( /turf/open/floor/iron, /area/station/hallway/primary/central) @@ -43058,6 +42928,15 @@ /obj/machinery/duct, /turf/open/floor/iron/white, /area/station/medical/break_room) +"ike" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, +/obj/item/radio/intercom/directional/north, +/obj/machinery/door/window/brigdoor/right/directional/south{ + name = "Cargo Deliveries"; + req_access = list("security") + }, +/turf/open/floor/iron/dark, +/area/station/security/brig) "iki" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ dir = 4 @@ -43162,30 +43041,6 @@ /obj/structure/extinguisher_cabinet/directional/east, /turf/open/floor/iron, /area/station/commons/dorms) -"ils" = ( -/obj/structure/table/reinforced, -/obj/machinery/door/firedoor, -/obj/machinery/door/window/left{ - dir = 8; - name = "Robotics Desk"; - req_access = list("robotics") - }, -/obj/machinery/door/window/left{ - dir = 4 - }, -/obj/machinery/door/poddoor/shutters/preopen{ - id = "roboticsprivacy"; - name = "Robotics Shutters" - }, -/obj/item/folder, -/obj/item/folder, -/obj/item/folder, -/obj/item/pen, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/open/floor/iron/dark, -/area/station/science/robotics) "ilB" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -43790,15 +43645,6 @@ /obj/effect/landmark/start/hangover, /turf/open/floor/wood, /area/station/hallway/primary/port) -"irB" = ( -/obj/structure/chair/office{ - dir = 1 - }, -/obj/machinery/door/window/left{ - dir = 8 - }, -/turf/open/floor/iron/dark, -/area/station/security/execution/education) "irC" = ( /obj/structure/closet/firecloset, /turf/open/floor/plating, @@ -44628,12 +44474,6 @@ }, /turf/open/floor/iron/dark, /area/station/security/brig) -"iAk" = ( -/obj/machinery/door/window/left{ - dir = 1 - }, -/turf/open/floor/iron/dark, -/area/station/science/xenobiology) "iAl" = ( /obj/structure/closet/cardboard, /obj/effect/spawner/random/maintenance/two, @@ -44948,17 +44788,6 @@ }, /turf/open/floor/iron, /area/station/hallway/primary/central) -"iDh" = ( -/obj/machinery/door/window{ - name = "Library Desk"; - req_access = list("library") - }, -/obj/machinery/power/apc/auto_name/directional/west, -/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/service/library) "iDw" = ( /obj/machinery/door/airlock/maintenance, /obj/effect/decal/cleanable/dirt{ @@ -45112,6 +44941,28 @@ /obj/machinery/digital_clock/directional/south, /turf/open/floor/carpet, /area/station/commons/dorms/room7) +"iEO" = ( +/obj/machinery/flasher/directional/east{ + id = "AI"; + pixel_y = 26 + }, +/obj/effect/turf_decal/tile/neutral{ + dir = 1 + }, +/obj/effect/turf_decal/tile/neutral, +/obj/effect/turf_decal/tile/neutral{ + dir = 4 + }, +/obj/effect/turf_decal/tile/neutral{ + dir = 8 + }, +/obj/machinery/holopad/secure, +/obj/machinery/door/window/brigdoor/left/directional/west{ + name = "Tertiary AI Core Acces Door"; + req_access = list("ai_upload") + }, +/turf/open/floor/iron/dark, +/area/station/ai_monitored/turret_protected/ai) "iER" = ( /obj/machinery/deepfryer, /obj/machinery/power/apc/auto_name/directional/north, @@ -45608,6 +45459,9 @@ /obj/effect/spawner/random/trash/graffiti, /turf/closed/wall, /area/station/maintenance/central) +"iKs" = ( +/turf/closed/mineral/asteroid, +/area/space/nearstation) "iKw" = ( /obj/structure/closet, /obj/effect/turf_decal/delivery, @@ -45906,15 +45760,6 @@ dir = 1 }, /area/station/hallway/secondary/exit) -"iNe" = ( -/obj/effect/turf_decal/delivery, -/obj/machinery/door/window/right{ - dir = 1; - name = "Hydroponics Delivery"; - req_access = list("hydroponics") - }, -/turf/open/floor/iron/dark, -/area/station/service/hydroponics) "iNf" = ( /obj/structure/disposalpipe/segment{ dir = 5 @@ -46152,22 +45997,6 @@ /obj/effect/mapping_helpers/airlock/access/all/engineering/maintenance, /turf/open/floor/plating, /area/station/maintenance/abandon_exam/cat) -"iQM" = ( -/obj/machinery/door/window/brigdoor{ - dir = 1; - name = "Creature Pen"; - req_access = list("research") - }, -/obj/effect/turf_decal/delivery, -/obj/effect/turf_decal/stripes{ - dir = 1 - }, -/obj/machinery/door/poddoor/preopen{ - id = "xeno9"; - name = "Creature Cell #9" - }, -/turf/open/floor/engine, -/area/station/science/xenobiology) "iQN" = ( /obj/structure/chair/office/light{ dir = 1 @@ -46218,6 +46047,19 @@ }, /turf/open/floor/iron/dark, /area/station/commons/storage/primary) +"iRa" = ( +/obj/effect/turf_decal/delivery, +/obj/effect/turf_decal/stripes, +/obj/machinery/door/poddoor/preopen{ + id = "xeno2"; + name = "Creature Cell #2" + }, +/obj/machinery/door/window/brigdoor/left/directional/south{ + name = "Creature Pen"; + req_access = list("research") + }, +/turf/open/floor/engine, +/area/station/science/xenobiology) "iRb" = ( /obj/item/kirbyplants/random, /obj/machinery/airalarm/directional/west, @@ -46385,21 +46227,6 @@ /obj/effect/mapping_helpers/burnt_floor, /turf/open/floor/plating/airless, /area/space/nearstation) -"iTD" = ( -/obj/structure/table/wood, -/obj/item/coin/adamantine{ - pixel_x = -4; - pixel_y = 4 - }, -/obj/item/hand_tele, -/obj/item/melee/chainofcommand, -/obj/machinery/door/window/brigdoor/left{ - dir = 8; - name = "Captain's Desk"; - req_access = list("captain") - }, -/turf/open/floor/carpet/blue, -/area/station/command/heads_quarters/captain/private) "iTI" = ( /obj/machinery/suit_storage_unit/open, /turf/open/floor/iron/dark, @@ -48551,6 +48378,17 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/ai_monitored/turret_protected/ai_upload_foyer) +"jnU" = ( +/obj/effect/turf_decal/stripes{ + dir = 1 + }, +/obj/machinery/brm, +/obj/machinery/conveyor{ + dir = 8; + id = "mining" + }, +/turf/open/floor/plating, +/area/station/cargo/miningdock) "jnW" = ( /obj/effect/spawner/structure/window/reinforced, /obj/structure/cable, @@ -48968,24 +48806,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/circuit, /area/station/command/gateway) -"jrJ" = ( -/obj/structure/window/reinforced/spawner/directional/north, -/obj/machinery/door/window/brigdoor/right{ - dir = 8; - id = "Cell 1"; - name = "Cell 1"; - req_access = list("security") - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/effect/turf_decal/vg_decals/numbers/one, -/obj/effect/turf_decal/tile/red/half/contrasted{ - dir = 8 - }, -/turf/open/floor/iron/dark/side{ - dir = 8 - }, -/area/station/security/brig) "jrL" = ( /obj/effect/turf_decal/stripes{ dir = 6 @@ -49839,10 +49659,6 @@ /obj/machinery/firealarm/directional/north, /turf/open/floor/wood, /area/station/security/courtroom) -"jAo" = ( -/obj/structure/reagent_anvil, -/turf/open/space/basic, -/area/space) "jAp" = ( /obj/structure/cable, /obj/effect/decal/cleanable/dirt{ @@ -50164,15 +49980,6 @@ /obj/machinery/atmospherics/pipe/smart/simple/scrubbers/visible, /turf/open/floor/iron, /area/station/engineering/atmos) -"jDk" = ( -/obj/machinery/door/window/left{ - dir = 1; - name = "Kitchen Delivery"; - req_access = list("kitchen") - }, -/obj/effect/turf_decal/delivery, -/turf/open/floor/iron/freezer, -/area/station/service/kitchen/coldroom) "jDp" = ( /obj/machinery/atmospherics/pipe/layer_manifold/brown/visible, /obj/effect/spawner/structure/window/reinforced/plasma, @@ -50981,6 +50788,13 @@ /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, /turf/open/floor/iron/dark, /area/station/security/execution/transfer) +"jLo" = ( +/obj/effect/decal/cleanable/dirt{ + icon_state = "dirt-flat-1" + }, +/obj/item/seeds/liberty, +/turf/open/misc/asteroid/airless, +/area/space/nearstation) "jLp" = ( /obj/structure/barricade/wooden/crude, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -51358,6 +51172,19 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/plating, /area/station/service/theater/abandoned) +"jOu" = ( +/obj/structure/table/reinforced, +/obj/machinery/door/firedoor, +/obj/machinery/door/window/left/directional/north{ + name = "Hydroponics Desk"; + req_access = list("hydroponics") + }, +/obj/machinery/door/window/left/directional/south{ + name = "Kitchen Desk"; + req_access = list("kitchen") + }, +/turf/open/floor/iron/dark, +/area/station/service/hydroponics) "jOx" = ( /obj/effect/turf_decal/siding/thinplating{ dir = 4 @@ -51916,24 +51743,6 @@ /obj/machinery/duct, /turf/open/floor/iron, /area/station/commons/fitness) -"jTG" = ( -/obj/structure/window/reinforced/spawner/directional/north, -/obj/machinery/door/window/brigdoor/right{ - dir = 4; - id = "Cell 4"; - name = "Cell 4"; - req_access = list("security") - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/effect/turf_decal/vg_decals/numbers/four, -/obj/effect/turf_decal/tile/red/half/contrasted{ - dir = 4 - }, -/turf/open/floor/iron/dark/side{ - dir = 4 - }, -/area/station/security/brig) "jTH" = ( /obj/effect/turf_decal/bot, /obj/structure/closet/firecloset, @@ -52030,16 +51839,6 @@ /obj/machinery/airalarm/directional/west, /turf/open/floor/plating, /area/station/service/abandoned_gambling_den) -"jUu" = ( -/obj/effect/turf_decal/stripes/white/line{ - dir = 6 - }, -/obj/structure/chair/plastic{ - dir = 4 - }, -/obj/structure/cable, -/turf/open/floor/iron/dark/small, -/area/station/cargo/miningdock) "jUx" = ( /obj/item/hemostat, /obj/effect/decal/cleanable/blood/old, @@ -52128,6 +51927,10 @@ /obj/item/rack_parts, /turf/open/floor/plating, /area/station/maintenance/fore/upper) +"jUX" = ( +/obj/machinery/door/window/left/directional/north, +/turf/open/floor/iron/dark, +/area/station/science/xenobiology) "jVd" = ( /obj/structure/rack, /obj/effect/turf_decal/bot, @@ -52271,12 +52074,6 @@ /obj/machinery/meter, /turf/open/floor/engine, /area/station/engineering/supermatter/room) -"jVZ" = ( -/obj/item/stack/ore/glass, -/obj/effect/mapping_helpers/burnt_floor, -/obj/structure/spacevine/xen, -/turf/open/floor/plating/airless, -/area/space/nearstation) "jWd" = ( /obj/item/tank/jetpack/carbondioxide{ pixel_x = 3; @@ -53402,6 +53199,19 @@ /obj/effect/landmark/start/hangover, /turf/open/floor/eighties/red, /area/station/common/arcade) +"kgD" = ( +/obj/effect/turf_decal/tile/yellow/opposingcorners{ + dir = 8 + }, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 8 + }, +/obj/machinery/door/window/left/directional/north{ + name = "Engineering Deliveries"; + req_access = list("engineering") + }, +/turf/open/floor/iron/checker, +/area/station/engineering/lobby) "kgE" = ( /obj/structure/railing{ dir = 8 @@ -54334,6 +54144,23 @@ }, /turf/open/floor/grass, /area/station/security/prison/garden) +"kpq" = ( +/obj/effect/turf_decal/stripes{ + dir = 4 + }, +/obj/machinery/disposal/delivery_chute{ + dir = 4 + }, +/obj/structure/plasticflaps, +/obj/structure/disposalpipe/trunk{ + dir = 8 + }, +/obj/machinery/door/window/right/directional/east{ + req_access = list("cargo"); + name = "Service Deliveries" + }, +/turf/open/floor/iron/dark, +/area/station/cargo/sorting) "kpz" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -54684,40 +54511,12 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/engine, /area/station/ai_monitored/turret_protected/aisat/hallway) -"ksx" = ( -/obj/effect/turf_decal/stripes{ - dir = 4 - }, -/obj/machinery/disposal/delivery_chute{ - dir = 4 - }, -/obj/structure/plasticflaps, -/obj/machinery/door/window/right{ - dir = 4; - name = "Service Deliveries"; - req_access = list("cargo") - }, -/obj/structure/disposalpipe/trunk{ - dir = 8 - }, -/turf/open/floor/iron/dark, -/area/station/cargo/sorting) "ksJ" = ( /obj/effect/turf_decal/trimline/blue/filled/line{ dir = 9 }, /turf/open/floor/iron/white, /area/station/medical/medbay/central) -"ksK" = ( -/obj/machinery/door/airlock{ - id_tag = "commissarydoor"; - name = "Forge" - }, -/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/dark, -/area/station/service/forge) "ksM" = ( /obj/structure/lattice/catwalk, /obj/structure/railing{ @@ -55142,6 +54941,23 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/maintenance/department/medical/central) +"kwG" = ( +/obj/machinery/door/firedoor, +/obj/structure/table/reinforced, +/obj/item/folder/blue, +/obj/machinery/door/poddoor/preopen{ + id = "hopblast"; + name = "HoP Blast Door" + }, +/obj/machinery/door/window/brigdoor/left/directional/west{ + name = "Access Desk"; + req_access = list("hop") + }, +/obj/machinery/door/window/right/directional/east{ + name = "Access Desk" + }, +/turf/open/floor/iron/dark, +/area/station/command/heads_quarters/hop) "kwM" = ( /obj/structure/table/reinforced/rglass, /obj/machinery/cell_charger, @@ -55197,6 +55013,16 @@ }, /turf/open/floor/iron, /area/station/hallway/secondary/command) +"kxo" = ( +/obj/structure/cable, +/obj/effect/turf_decal/caution/stand_clear{ + dir = 1 + }, +/obj/effect/turf_decal/stripes, +/turf/open/floor/iron/smooth_edge{ + dir = 8 + }, +/area/station/cargo/miningdock) "kxq" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -55338,6 +55164,27 @@ /obj/item/food/pie/cream, /turf/open/floor/wood/large, /area/station/service/theater/abandoned) +"kyI" = ( +/obj/structure/table/reinforced, +/obj/machinery/door/firedoor, +/obj/machinery/door/poddoor/shutters/preopen{ + id = "roboticsprivacy"; + name = "Robotics Shutters" + }, +/obj/item/folder, +/obj/item/folder, +/obj/item/folder, +/obj/item/pen, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/door/window/left/directional/east, +/obj/machinery/door/window/left/directional/west{ + name = "Robotics Desk"; + req_access = list("robotics") + }, +/turf/open/floor/iron/dark, +/area/station/science/robotics) "kyS" = ( /obj/structure/cable, /obj/machinery/door/airlock/medical/glass{ @@ -55549,17 +55396,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron/dark, /area/station/security/office) -"kAn" = ( -/obj/machinery/door/window/brigdoor/right{ - dir = 4; - name = "Security Desk"; - req_access = list("security") - }, -/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/security/checkpoint/escape) "kAp" = ( /obj/structure/showcase/machinery/cloning_pod{ desc = "An old prototype cloning pod, permanently decommissioned following the incident."; @@ -55672,15 +55508,6 @@ }, /turf/open/floor/wood, /area/station/service/abandoned_gambling_den) -"kBE" = ( -/obj/effect/turf_decal/delivery, -/obj/machinery/door/window/brigdoor{ - dir = 4; - name = "Xenobiology Deliveries"; - req_access = list("research") - }, -/turf/open/floor/iron/dark, -/area/station/science/xenobiology/control) "kBG" = ( /obj/structure/fans/tiny/forcefield, /obj/machinery/light/directional/east, @@ -56039,21 +55866,6 @@ /obj/machinery/light_switch/directional/east, /turf/open/floor/carpet/blue, /area/station/command/heads_quarters/cmo) -"kFy" = ( -/obj/machinery/door/firedoor, -/obj/structure/table/reinforced, -/obj/machinery/door/window/brigdoor/right{ - dir = 8; - name = "Security Customs"; - req_access = list("security") - }, -/obj/machinery/door/window/right{ - dir = 4 - }, -/obj/item/folder/red, -/obj/item/pen, -/turf/open/floor/iron/dark, -/area/station/security/checkpoint) "kFL" = ( /obj/structure/railing{ dir = 10 @@ -56262,6 +56074,17 @@ }, /turf/open/floor/iron/dark, /area/station/security/brig) +"kHO" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/turf_decal/vg_decals/numbers/five, +/obj/machinery/door/window/brigdoor/security/cell/right/directional/east{ + name = "Cell 5" + }, +/turf/open/floor/iron/dark/side{ + dir = 4 + }, +/area/station/security/brig) "kHP" = ( /obj/machinery/power/terminal, /obj/structure/cable, @@ -56933,16 +56756,6 @@ "kPg" = ( /turf/open/floor/iron/dark/small, /area/station/cargo/storage) -"kPl" = ( -/obj/machinery/door/window/left{ - dir = 4; - name = "Soothing Nature Exhibit"; - req_access = list("psychology") - }, -/obj/structure/flora/bush/grassy, -/obj/structure/flora/bush/flowers_br, -/turf/open/floor/grass, -/area/station/medical/aslyum) "kPo" = ( /obj/structure/cable, /obj/item/kirbyplants/random, @@ -57346,14 +57159,6 @@ /obj/structure/sign/departments/medbay/alt/directional/north, /turf/open/floor/iron/dark, /area/station/security/brig) -"kTL" = ( -/obj/effect/decal/cleanable/dirt{ - icon_state = "dirt-flat-1" - }, -/obj/structure/alien/weeds/xen, -/obj/item/storage/box/hecu_rations, -/turf/open/misc/asteroid/airless, -/area/space/nearstation) "kTV" = ( /turf/closed/wall, /area/station/common/cryopods) @@ -57373,17 +57178,6 @@ }, /turf/open/floor/iron, /area/station/science/ordnance) -"kUv" = ( -/obj/machinery/airalarm/directional/north, -/obj/machinery/newscaster/directional/east, -/obj/machinery/light/directional/north, -/obj/machinery/smartfridge/organ, -/obj/machinery/door/window/left{ - name = "Organ Storage"; - req_access = list("morgue") - }, -/turf/open/floor/iron/dark/small, -/area/station/medical/morgue) "kUx" = ( /obj/effect/turf_decal/siding/wood/corner{ dir = 4 @@ -57536,16 +57330,6 @@ /obj/effect/spawner/random/maintenance/two, /turf/open/floor/plating, /area/station/maintenance/department/medical) -"kWY" = ( -/obj/structure/table/reinforced, -/obj/machinery/door/firedoor, -/obj/machinery/door/window/right{ - dir = 4 - }, -/obj/item/forging/tongs, -/obj/item/forging/hammer, -/turf/open/floor/iron/dark, -/area/station/service/forge) "kXe" = ( /obj/machinery/door/airlock/security{ name = "Armory" @@ -57566,6 +57350,15 @@ /obj/effect/spawner/random/techstorage/service_all, /turf/open/floor/iron/dark, /area/station/engineering/storage/tech) +"kXo" = ( +/obj/machinery/door/firedoor/border_only{ + dir = 1 + }, +/obj/machinery/door/window/right/directional/north{ + name = "Ordnance Freezer Chamber Access" + }, +/turf/open/floor/iron/dark, +/area/station/science/ordnance) "kXs" = ( /obj/structure/rack, /obj/effect/turf_decal/bot, @@ -57618,30 +57411,6 @@ /obj/structure/cable, /turf/open/floor/carpet/purple, /area/station/science/breakroom) -"kYa" = ( -/obj/machinery/door/window/brigdoor{ - dir = 4; - id = "medcell"; - name = "Medical Cell"; - req_access = list("security") - }, -/obj/effect/turf_decal/delivery, -/obj/effect/turf_decal/trimline/blue/filled/warning{ - 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/blue{ - dir = 1 - }, -/obj/effect/turf_decal/tile/blue{ - dir = 8 - }, -/turf/open/floor/iron/white/side{ - dir = 4 - }, -/area/station/security/checkpoint/medical) "kYe" = ( /obj/effect/turf_decal/stripes{ dir = 10 @@ -57949,10 +57718,6 @@ }, /turf/open/floor/plating/airless, /area/space/nearstation) -"laQ" = ( -/obj/structure/spacevine/xen, -/turf/closed/mineral/random/high_chance, -/area/space/nearstation) "laT" = ( /obj/machinery/door/airlock/maintenance_hatch{ name = "Ward Maintenance" @@ -57986,6 +57751,11 @@ dir = 5 }, /obj/structure/extinguisher_cabinet/directional/east, +/obj/item/storage/toolbox/mechanical{ + pixel_y = 5; + pixel_x = 5 + }, +/obj/item/storage/toolbox/mechanical, /turf/open/floor/iron/white, /area/station/science/lab) "lbm" = ( @@ -58365,6 +58135,19 @@ }, /turf/open/floor/iron/dark, /area/station/science/xenobiology) +"lef" = ( +/obj/effect/turf_decal/delivery, +/obj/effect/turf_decal/tile/brown/anticorner/contrasted, +/obj/structure/cable, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 8 + }, +/obj/machinery/door/window/right/directional/east{ + name = "Deliveries"; + req_access = list("cargo") + }, +/turf/open/floor/iron, +/area/station/cargo/office) "leg" = ( /obj/structure/disposalpipe/segment, /obj/machinery/light/directional/east, @@ -58557,6 +58340,24 @@ /obj/effect/landmark/start/assistant, /turf/open/floor/iron/dark, /area/station/service/library) +"lga" = ( +/obj/structure/table/reinforced, +/obj/machinery/camera/directional/east{ + c_tag = "Engineering - Secure tech storage"; + name = "engineering camera" + }, +/obj/structure/cable, +/obj/item/ai_module/reset{ + pixel_y = 8 + }, +/obj/item/ai_module/core/full/custom{ + pixel_y = -4 + }, +/obj/machinery/door/window/brigdoor/left/directional/west{ + name = "Secure Tech Cabinet" + }, +/turf/open/floor/iron/dark, +/area/station/engineering/storage/tech) "lgb" = ( /obj/effect/turf_decal/delivery, /obj/structure/closet/emcloset, @@ -58700,13 +58501,6 @@ }, /turf/open/floor/plating, /area/station/maintenance/department/security/upper) -"lhM" = ( -/obj/machinery/door/window/brigdoor{ - name = "Creature Pen"; - req_access = list("research") - }, -/turf/open/floor/engine, -/area/station/science/xenobiology) "lhN" = ( /obj/effect/turf_decal/bot, /obj/effect/turf_decal/tile/brown{ @@ -58723,10 +58517,6 @@ }, /turf/open/floor/iron, /area/station/cargo/lobby) -"lhO" = ( -/obj/effect/turf_decal/siding/wood, -/turf/open/floor/iron/dark/side, -/area/station/hallway/primary/central) "lhQ" = ( /obj/effect/spawner/random/structure/closet_maintenance, /obj/machinery/light/small/directional/west, @@ -59159,14 +58949,6 @@ /obj/machinery/light/directional/east, /turf/open/floor/iron, /area/station/cargo/lobby) -"lmu" = ( -/obj/effect/decal/cleanable/dirt{ - icon_state = "dirt-flat-1" - }, -/mob/living/simple_animal/hostile/blackmesa/xen/bullsquid, -/obj/structure/alien/weeds/xen, -/turf/open/misc/asteroid/airless, -/area/space/nearstation) "lmz" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -60098,20 +59880,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/hallway/primary/aft) -"lwm" = ( -/obj/machinery/conveyor/inverted{ - dir = 9; - id = "garbage" - }, -/obj/machinery/door/window/right{ - base_state = "left"; - dir = 8; - icon_state = "left"; - name = "Danger: Conveyor Access"; - req_access = list("maint_tunnels") - }, -/turf/open/floor/plating, -/area/station/maintenance/disposal) "lwo" = ( /obj/effect/turf_decal/trimline/blue/line{ dir = 8; @@ -60213,20 +59981,6 @@ }, /turf/open/floor/iron, /area/station/hallway/primary/port) -"lxB" = ( -/obj/machinery/door/window/left{ - dir = 1 - }, -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/structure/disposalpipe/segment, -/obj/machinery/door/firedoor/border_only{ - dir = 1 - }, -/obj/effect/landmark/start/hangover, -/turf/open/floor/wood, -/area/station/service/cafeteria) "lxF" = ( /obj/machinery/power/apc/auto_name/directional/south, /obj/structure/cable, @@ -60729,20 +60483,6 @@ "lCL" = ( /turf/open/floor/iron/large, /area/station/ai_monitored/turret_protected/ai_upload) -"lCP" = ( -/obj/effect/turf_decal/bot, -/obj/machinery/hydroponics/constructable, -/obj/structure/window/spawner/directional/north, -/obj/machinery/door/window/left{ - dir = 4; - pixel_x = 4 - }, -/obj/effect/turf_decal/trimline/green/filled/line, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/open/floor/iron/dark, -/area/station/service/hydroponics) "lCR" = ( /obj/effect/turf_decal/tile/red, /obj/machinery/newscaster/directional/east, @@ -60831,13 +60571,6 @@ }, /turf/open/floor/engine, /area/station/science/ordnance) -"lDy" = ( -/obj/effect/decal/cleanable/dirt{ - icon_state = "dirt-flat-1" - }, -/obj/structure/alien/weeds/xen, -/turf/open/misc/asteroid/airless, -/area/space/nearstation) "lDB" = ( /obj/machinery/navbeacon{ codes_txt = "delivery;dir=2"; @@ -61458,19 +61191,6 @@ /obj/effect/mapping_helpers/airlock/access/all/engineering/external, /turf/open/floor/plating, /area/station/maintenance/port/upper) -"lJF" = ( -/obj/effect/turf_decal/bot, -/obj/machinery/hydroponics/constructable, -/obj/structure/window/spawner/directional/south, -/obj/effect/turf_decal/trimline/green/filled/line{ - dir = 5 - }, -/obj/machinery/door/window/left{ - dir = 8; - pixel_x = -3 - }, -/turf/open/floor/iron/dark, -/area/station/service/hydroponics) "lJJ" = ( /obj/structure/cable, /turf/open/floor/circuit, @@ -61671,14 +61391,6 @@ }, /turf/open/floor/iron/white, /area/station/medical/virology/isolation) -"lLv" = ( -/obj/machinery/door/window/brigdoor{ - dir = 1; - name = "Creature Pen"; - req_access = list("research") - }, -/turf/open/floor/engine, -/area/station/science/xenobiology) "lLC" = ( /obj/structure/table/wood, /obj/item/folder{ @@ -61751,15 +61463,6 @@ /obj/structure/cable, /turf/open/floor/iron/dark, /area/station/command/bridge) -"lMu" = ( -/obj/machinery/door/window/right{ - base_state = "left"; - dir = 1; - icon_state = "left"; - name = "Danger: Driver Access" - }, -/turf/open/floor/plating, -/area/station/maintenance/disposal) "lMx" = ( /obj/effect/turf_decal/stripes, /obj/structure/table/reinforced, @@ -62219,6 +61922,15 @@ }, /turf/open/floor/plating, /area/station/maintenance/department/crew_quarters/bar) +"lRj" = ( +/obj/effect/turf_decal/bot, +/obj/machinery/hydroponics/constructable, +/obj/structure/window/spawner/directional/north, +/obj/effect/turf_decal/trimline/green/filled/line{ + dir = 10 + }, +/turf/open/floor/iron/dark, +/area/station/service/hydroponics) "lRk" = ( /obj/structure/rack/wooden, /obj/item/clothing/under/color/grey{ @@ -62353,16 +62065,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron, /area/station/maintenance/aft/upper) -"lRZ" = ( -/obj/machinery/door/window/brigdoor/security/holding/right{ - name = "Holding Cell" - }, -/obj/effect/turf_decal/delivery/blue, -/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/dark, -/area/station/security/brig) "lSb" = ( /obj/structure/table, /obj/item/clothing/gloves/color/blue{ @@ -62455,6 +62157,21 @@ }, /turf/open/floor/glass/reinforced, /area/station/science) +"lSY" = ( +/obj/effect/turf_decal/bot, +/obj/machinery/hydroponics/constructable, +/obj/structure/window/spawner/directional/north, +/obj/effect/turf_decal/trimline/green/filled/line{ + dir = 6 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/door/window/left/directional/west{ + pixel_x = -3 + }, +/turf/open/floor/iron/dark, +/area/station/service/hydroponics) "lTb" = ( /obj/effect/turf_decal/trimline/blue/line{ dir = 1 @@ -62826,19 +62543,6 @@ /obj/effect/mapping_helpers/airlock/access/all/command/ai_upload, /turf/open/floor/iron/dark, /area/station/ai_monitored/turret_protected/ai) -"lXc" = ( -/obj/structure/closet/crate/engineering{ - name = "Turbine Board Crate" - }, -/obj/item/circuitboard/computer/turbine_computer, -/obj/item/circuitboard/machine/turbine_rotor, -/obj/effect/turf_decal/tile/yellow/half/contrasted{ - dir = 8 - }, -/turf/open/floor/iron/dark/side{ - dir = 4 - }, -/area/station/engineering/storage) "lXd" = ( /obj/machinery/atmospherics/components/tank/oxygen, /obj/effect/turf_decal/stripes{ @@ -63008,6 +62712,14 @@ dir = 8 }, /area/station/command/gateway) +"lYy" = ( +/obj/effect/turf_decal/delivery, +/obj/machinery/door/window/left/directional/north{ + name = "Kitchen Delivery"; + req_access = list("kitchen") + }, +/turf/open/floor/iron/freezer, +/area/station/service/kitchen/coldroom) "lYA" = ( /obj/effect/turf_decal/delivery, /obj/effect/turf_decal/stripes{ @@ -63078,6 +62790,35 @@ /obj/machinery/duct, /turf/open/floor/iron, /area/station/commons/dorms) +"lYQ" = ( +/obj/structure/table, +/obj/item/ai_module/supplied/quarantine{ + pixel_x = 3; + pixel_y = 3 + }, +/obj/item/ai_module/supplied/freeform, +/obj/item/ai_module/reset{ + pixel_x = -3; + pixel_y = -3 + }, +/obj/machinery/power/apc/auto_name/directional/north, +/obj/structure/cable, +/obj/item/ai_module/core/full/armadyne_safeguard, +/turf/open/floor/iron, +/area/station/ai_monitored/turret_protected/ai_upload) +"lYV" = ( +/obj/structure/railing{ + dir = 8 + }, +/obj/machinery/light/directional/east, +/obj/machinery/door/window/brigdoor/right/directional/south{ + name = "Command Chair"; + req_access = list("command") + }, +/turf/open/floor/iron/stairs{ + dir = 1 + }, +/area/station/command/secure_bunker) "lYW" = ( /obj/effect/spawner/structure/window, /obj/machinery/door/poddoor/shutters/preopen{ @@ -63162,10 +62903,6 @@ /obj/effect/decal/cleanable/blood/old, /turf/open/floor/plating, /area/station/maintenance/rus_surgery) -"lZP" = ( -/obj/structure/reagent_crafting_bench, -/turf/open/space/basic, -/area/space) "lZU" = ( /obj/structure/table_frame, /obj/effect/spawner/random/trash/mess, @@ -63269,25 +63006,6 @@ /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, /turf/open/floor/iron/freezer, /area/station/maintenance/abandon_kitchen_upper) -"mbb" = ( -/obj/structure/window/reinforced/spawner/directional/north, -/obj/effect/turf_decal/stripes{ - dir = 4 - }, -/obj/machinery/disposal/delivery_chute{ - dir = 4 - }, -/obj/structure/plasticflaps, -/obj/machinery/door/window/right{ - dir = 4; - name = "Security Deliveries"; - req_access = list("cargo") - }, -/obj/structure/disposalpipe/trunk{ - dir = 4 - }, -/turf/open/floor/iron/dark, -/area/station/cargo/sorting) "mbg" = ( /obj/machinery/light/directional/north, /turf/open/floor/carpet/red, @@ -63721,25 +63439,6 @@ /obj/machinery/newscaster/directional/west, /turf/open/floor/iron/dark, /area/station/science/server) -"mfp" = ( -/obj/structure/table/reinforced, -/obj/machinery/door/window{ - dir = 8; - name = "Secure Tech Cabinet" - }, -/obj/machinery/camera/directional/east{ - c_tag = "Engineering - Secure tech storage"; - name = "engineering camera" - }, -/obj/structure/cable, -/obj/item/ai_module/reset{ - pixel_y = 8 - }, -/obj/item/ai_module/core/full/custom{ - pixel_y = -4 - }, -/turf/open/floor/iron/dark, -/area/station/engineering/storage/tech) "mfw" = ( /obj/machinery/flasher/portable, /turf/open/floor/iron/dark/side{ @@ -64253,6 +63952,24 @@ }, /turf/open/floor/plating, /area/station/maintenance/port/upper) +"mlr" = ( +/obj/machinery/door/window/brigdoor/left/directional/north{ + name = "Creature Pen"; + req_access = list("research") + }, +/turf/open/floor/engine, +/area/station/science/xenobiology) +"mls" = ( +/obj/effect/turf_decal/stripes{ + dir = 1 + }, +/obj/machinery/bouldertech/refinery/smelter, +/obj/machinery/conveyor{ + dir = 8; + id = "mining" + }, +/turf/open/floor/plating, +/area/station/cargo/miningdock) "mlw" = ( /obj/effect/turf_decal/loading_area/white{ dir = 4 @@ -64270,6 +63987,19 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/carpet, /area/station/service/chapel) +"mlz" = ( +/obj/effect/turf_decal/delivery, +/obj/effect/turf_decal/stripes, +/obj/machinery/door/poddoor/preopen{ + id = "xeno4"; + name = "Creature Cell #4" + }, +/obj/machinery/door/window/brigdoor/left/directional/south{ + name = "Creature Pen"; + req_access = list("research") + }, +/turf/open/floor/engine, +/area/station/science/xenobiology) "mlB" = ( /obj/machinery/door/poddoor/massdriver_trash, /obj/structure/fans/tiny, @@ -64432,15 +64162,6 @@ /obj/machinery/light/directional/east, /turf/open/floor/iron/freezer, /area/station/science/xenobiology) -"mnv" = ( -/obj/effect/turf_decal/bot, -/obj/machinery/hydroponics/constructable, -/obj/structure/window/spawner/directional/north, -/obj/effect/turf_decal/trimline/green/filled/line{ - dir = 6 - }, -/turf/open/floor/iron/dark, -/area/station/service/hydroponics) "mnw" = ( /obj/effect/turf_decal/bot, /obj/machinery/atmospherics/components/binary/pump{ @@ -64542,6 +64263,34 @@ /obj/machinery/suit_storage_unit/standard_unit, /turf/open/floor/iron/dark, /area/station/command/heads_quarters/hop) +"moK" = ( +/obj/machinery/turretid{ + icon_state = "control_stun"; + name = "AI Chamber turret control"; + pixel_x = 3; + pixel_y = -23 + }, +/obj/effect/turf_decal/tile/neutral{ + dir = 1 + }, +/obj/effect/turf_decal/tile/neutral, +/obj/effect/turf_decal/tile/neutral{ + dir = 4 + }, +/obj/effect/turf_decal/tile/neutral{ + dir = 8 + }, +/obj/machinery/power/apc/auto_name/directional/north, +/obj/structure/cable, +/obj/machinery/airalarm/directional/north{ + pixel_y = 33 + }, +/obj/machinery/door/window/brigdoor/left/directional/west{ + name = "Primary AI Core Acces Door"; + req_access = list("ai_upload") + }, +/turf/open/floor/iron/dark, +/area/station/ai_monitored/turret_protected/ai) "moM" = ( /obj/machinery/shower/directional/east, /obj/machinery/light/small/directional/north, @@ -64576,6 +64325,7 @@ /obj/structure/window/reinforced/spawner/directional/east, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/reagent_dispensers/fueltank, /turf/open/floor/mineral/plastitanium/red, /area/station/science/robotics/lab) "mpg" = ( @@ -64605,21 +64355,6 @@ dir = 8 }, /area/station/escapepodbay) -"mpE" = ( -/obj/machinery/door/firedoor, -/obj/structure/table/reinforced, -/obj/machinery/door/window/left{ - dir = 4; - req_access = list("psychology") - }, -/obj/item/folder/white, -/obj/machinery/door/poddoor/shutters/preopen{ - id = "Psychward4"; - name = "Control Room Shutters" - }, -/obj/structure/cable, -/turf/open/floor/iron/dark, -/area/station/medical/psychology) "mpJ" = ( /obj/effect/turf_decal/delivery, /obj/effect/spawner/random/structure/crate, @@ -65075,6 +64810,23 @@ }, /turf/open/floor/engine, /area/station/engineering/supermatter/room) +"muW" = ( +/obj/structure/railing/corner{ + dir = 8 + }, +/obj/effect/turf_decal/stripes{ + dir = 4 + }, +/obj/effect/turf_decal/vg_decals/numbers/one, +/obj/effect/turf_decal/stripes/white/line{ + dir = 4 + }, +/obj/machinery/door/window/elevator/left/directional/east{ + elevator_mode = 1; + transport_linked_id = "publicElevator" + }, +/turf/open/floor/iron/dark, +/area/station/hallway/primary/central) "muY" = ( /obj/machinery/bookbinder, /obj/structure/cable, @@ -66323,6 +66075,16 @@ /obj/structure/cable, /turf/open/floor/plating, /area/station/security/execution/transfer) +"mHg" = ( +/obj/structure/chair/stool{ + pixel_y = 3 + }, +/obj/machinery/door/window/brigdoor/right/directional/south{ + name = "Security Customs"; + req_access = list("security") + }, +/turf/open/floor/iron/dark/side, +/area/station/security/checkpoint) "mHn" = ( /obj/effect/turf_decal/trimline/blue/filled/warning{ dir = 4 @@ -67064,6 +66826,15 @@ /obj/structure/closet/secure_closet/brig, /turf/open/floor/iron/dark, /area/station/security/courtroom) +"mOI" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/door/window/brigdoor/security/holding/right/directional/south{ + req_access = list("brig"); + name = "Holding Cell" + }, +/turf/open/floor/iron, +/area/station/security/checkpoint/escape) "mOJ" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ dir = 1 @@ -67530,10 +67301,6 @@ }, /turf/open/floor/iron/kitchen, /area/station/service/kitchen/diner) -"mSV" = ( -/obj/structure/spacevine/xen/thick, -/turf/closed/mineral/random/high_chance, -/area/space/nearstation) "mSZ" = ( /obj/effect/turf_decal/bot_blue, /obj/structure/rack, @@ -68142,15 +67909,6 @@ dir = 8 }, /area/station/hallway/primary/central) -"mYU" = ( -/obj/structure/flora/bush/sparsegrass, -/obj/machinery/door/window{ - name = "Monkey Pen"; - req_access = list("virology") - }, -/obj/effect/turf_decal/siding/thinplating/light, -/turf/open/floor/grass, -/area/station/medical/virology/isolation) "mYV" = ( /obj/item/stack/sheet/cardboard, /obj/structure/cable, @@ -68329,13 +68087,6 @@ /obj/machinery/light/directional/north, /turf/open/floor/engine, /area/station/command/secure_bunker) -"naT" = ( -/obj/structure/decorative/shelf, -/obj/effect/spawner/random/maintenance/three, -/turf/open/floor/iron/smooth_edge{ - dir = 1 - }, -/area/station/cargo/miningdock) "nba" = ( /turf/closed/wall, /area/station/science/breakroom) @@ -68497,19 +68248,6 @@ /obj/effect/decal/cleanable/oil, /turf/open/floor/plating, /area/station/maintenance/fore/upper) -"ncE" = ( -/obj/machinery/door/window/brigdoor{ - name = "Creature Pen"; - req_access = list("research") - }, -/obj/effect/turf_decal/delivery, -/obj/effect/turf_decal/stripes, -/obj/machinery/door/poddoor/preopen{ - id = "xeno4"; - name = "Creature Cell #4" - }, -/turf/open/floor/engine, -/area/station/science/xenobiology) "ncH" = ( /obj/effect/turf_decal/stripes{ dir = 8 @@ -68577,6 +68315,15 @@ /obj/effect/spawner/structure/window/reinforced, /turf/open/floor/plating, /area/station/tcommsat/computer) +"ndw" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 9 + }, +/obj/machinery/door/window/left/directional/north{ + req_access = list("lawyer") + }, +/turf/open/floor/carpet/blue, +/area/station/service/lawoffice) "ndB" = ( /obj/effect/turf_decal/tile/neutral{ dir = 4 @@ -68653,17 +68400,6 @@ /obj/structure/cable, /turf/open/floor/plating, /area/station/security/corrections_officer) -"net" = ( -/obj/machinery/atmospherics/components/binary/pump{ - dir = 4; - name = "justice gas pump" - }, -/obj/machinery/door/window/left{ - dir = 4; - name = "Gas Ports" - }, -/turf/open/floor/iron/dark, -/area/station/security/execution/education) "neu" = ( /obj/structure/table_frame, /obj/effect/decal/cleanable/dirt{ @@ -69059,19 +68795,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/science/ordnance/storage) -"nid" = ( -/obj/machinery/door/window/brigdoor{ - name = "Creature Pen"; - req_access = list("research") - }, -/obj/effect/turf_decal/delivery, -/obj/effect/turf_decal/stripes, -/obj/machinery/door/poddoor/preopen{ - id = "xeno3"; - name = "Creature Cell #3" - }, -/turf/open/floor/engine, -/area/station/science/xenobiology) "nih" = ( /obj/effect/turf_decal/stripes{ dir = 8 @@ -69881,27 +69604,6 @@ }, /turf/open/floor/iron/dark, /area/station/medical/power_station) -"nrY" = ( -/obj/effect/turf_decal/stripes{ - dir = 4 - }, -/obj/effect/turf_decal/stripes/white/line{ - dir = 4 - }, -/obj/machinery/door/window/elevator/left/directional/east{ - elevator_mode = 1; - transport_linked_id = "publicElevator" - }, -/obj/machinery/button/elevator{ - id = "publicElevator"; - pixel_y = 32 - }, -/obj/machinery/lift_indicator/directional/north{ - linked_elevator_id = "publicElevator" - }, -/obj/machinery/light/directional/north, -/turf/open/floor/iron/dark, -/area/station/hallway/primary/central) "nsb" = ( /obj/effect/turf_decal/tile/neutral{ dir = 1 @@ -70291,6 +69993,19 @@ }, /turf/open/floor/iron/white, /area/station/science/xenobiology/control) +"nwm" = ( +/obj/effect/turf_decal/bot, +/obj/machinery/hydroponics/constructable, +/obj/structure/window/spawner/directional/north, +/obj/effect/turf_decal/trimline/green/filled/line, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/door/window/left/directional/west{ + pixel_x = -3 + }, +/turf/open/floor/iron/dark, +/area/station/service/hydroponics) "nwo" = ( /obj/effect/turf_decal/weather/sand, /obj/structure/flora/bush/fullgrass, @@ -70717,19 +70432,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/plating, /area/station/maintenance/central) -"nAb" = ( -/obj/machinery/door/window/right{ - dir = 8; - name = "Research Delivery"; - req_access = list("research") - }, -/obj/effect/turf_decal/delivery, -/obj/structure/cable, -/obj/structure/disposalpipe/segment{ - dir = 5 - }, -/turf/open/floor/iron/dark, -/area/station/science/research) "nAl" = ( /obj/machinery/airalarm/directional/south, /obj/machinery/light/directional/south, @@ -70831,10 +70533,10 @@ /turf/open/floor/iron, /area/station/commons/vacant_room/commissary) "nBm" = ( -/obj/structure/closet/radiation, -/obj/effect/turf_decal/delivery, -/obj/machinery/light/small/directional/east, /obj/structure/sign/warning/vacuum/external/directional/east, +/obj/machinery/light/small/directional/east, +/obj/effect/turf_decal/delivery, +/obj/structure/closet/radiation, /turf/open/floor/plating, /area/station/engineering/atmos) "nBp" = ( @@ -70937,9 +70639,7 @@ /turf/open/floor/iron, /area/station/command/teleporter) "nCn" = ( -/obj/structure/musician/piano{ - icon_state = "piano" - }, +/obj/structure/musician/piano, /turf/open/floor/wood, /area/station/service/bar/atrium) "nCq" = ( @@ -71179,11 +70879,11 @@ /turf/open/floor/iron/grimy, /area/station/security/detectives_office/private_investigators_office) "nEN" = ( -/obj/item/banner/engineering/mundane, /obj/effect/turf_decal/tile/yellow/anticorner/contrasted{ dir = 8 }, /obj/structure/disposalpipe/segment, +/obj/machinery/recharge_station, /turf/open/floor/iron, /area/station/hallway/primary/aft) "nEW" = ( @@ -71376,6 +71076,13 @@ /obj/effect/turf_decal/stripes/box, /turf/open/floor/catwalk_floor, /area/station/science/ordnance/testlab) +"nGs" = ( +/obj/effect/decal/cleanable/dirt{ + icon_state = "dirt-flat-1" + }, +/obj/item/seeds/ambrosia/deus, +/turf/open/misc/asteroid/airless, +/area/space/nearstation) "nGu" = ( /turf/closed/wall/r_wall, /area/station/maintenance/gamer_lair) @@ -71650,20 +71357,6 @@ /obj/effect/mapping_helpers/airlock/access/all/security/general, /turf/open/floor/iron, /area/station/security/execution/transfer) -"nJg" = ( -/obj/machinery/door/window/left{ - dir = 1; - name = "Engineering Deliveries"; - req_access = list("engineering") - }, -/obj/effect/turf_decal/tile/yellow/opposingcorners{ - dir = 8 - }, -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ - dir = 8 - }, -/turf/open/floor/iron/checker, -/area/station/engineering/lobby) "nJh" = ( /obj/structure/chair/sofa/corp{ dir = 1 @@ -71784,9 +71477,7 @@ /turf/open/floor/plating, /area/station/hallway/secondary/exit/departure_lounge) "nKr" = ( -/obj/structure/musician/piano{ - icon_state = "piano" - }, +/obj/structure/musician/piano, /turf/open/floor/wood, /area/station/service/theater) "nKs" = ( @@ -71892,19 +71583,6 @@ }, /turf/open/floor/iron/dark, /area/station/engineering/atmos/pumproom) -"nLk" = ( -/obj/effect/turf_decal/bot, -/obj/machinery/hydroponics/constructable, -/obj/structure/window/spawner/directional/south, -/obj/machinery/door/window/left{ - dir = 8; - pixel_x = -3 - }, -/obj/effect/turf_decal/trimline/green/filled/line{ - dir = 5 - }, -/turf/open/floor/iron/dark, -/area/station/service/hydroponics) "nLl" = ( /obj/structure/girder/displaced, /obj/structure/grille/broken, @@ -72090,6 +71768,10 @@ /obj/structure/cable, /turf/open/floor/iron/white, /area/station/medical/medbay/central) +"nND" = ( +/obj/structure/window/reinforced/spawner/directional/north, +/turf/open/floor/wood, +/area/station/hallway/primary/central) "nNI" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -72188,18 +71870,6 @@ /obj/item/clothing/accessory/medal/gold/ordom, /turf/open/floor/carpet/green, /area/station/command/heads_quarters/nt_rep) -"nOD" = ( -/obj/effect/turf_decal/bot, -/obj/machinery/hydroponics/constructable, -/obj/structure/window/spawner/directional/north, -/obj/effect/turf_decal/trimline/green/filled/line{ - dir = 6 - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/open/floor/iron/dark, -/area/station/service/hydroponics) "nOE" = ( /obj/structure/barricade/security, /obj/effect/turf_decal/stripes, @@ -72565,16 +72235,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/carpet, /area/station/service/chapel) -"nSl" = ( -/obj/machinery/door/window/brigdoor/right{ - name = "Security Customs"; - req_access = list("security") - }, -/obj/structure/chair/stool{ - pixel_y = 3 - }, -/turf/open/floor/iron/dark/side, -/area/station/security/checkpoint) "nSm" = ( /obj/effect/decal/cleanable/dirt{ icon_state = "dirt-flat-1" @@ -72611,15 +72271,6 @@ /obj/effect/landmark/start/hangover, /turf/open/floor/plating, /area/station/maintenance/department/science/upper) -"nSH" = ( -/obj/effect/turf_decal/stripes/white/line{ - dir = 1 - }, -/obj/structure/chair/plastic{ - dir = 8 - }, -/turf/open/floor/iron/dark/small, -/area/station/cargo/miningdock) "nSL" = ( /obj/structure/chair/sofa/left/brown{ dir = 1 @@ -73299,10 +72950,9 @@ /turf/open/floor/iron, /area/station/commons/storage/primary) "nZg" = ( -/obj/structure/table/reinforced, /obj/effect/turf_decal/bot, -/obj/item/airlock_painter, /obj/machinery/status_display/evac/directional/north, +/obj/machinery/recharge_station, /turf/open/floor/iron/dark, /area/station/engineering/main) "nZh" = ( @@ -73748,14 +73398,6 @@ /obj/effect/spawner/random/entertainment/gambling, /turf/open/floor/wood, /area/station/service/abandoned_gambling_den) -"odJ" = ( -/obj/structure/cable, -/obj/item/radio/intercom/directional/north, -/obj/machinery/door/window/brigdoor/right{ - dir = 8 - }, -/turf/open/floor/iron, -/area/station/security/checkpoint/escape) "odL" = ( /obj/structure/cable, /turf/open/floor/iron/dark/side{ @@ -74382,16 +74024,6 @@ /obj/docking_port/stationary/escape_pod, /turf/open/space/basic, /area/space) -"oiv" = ( -/obj/machinery/door/window/brigdoor{ - dir = 4; - id = "scicell"; - name = "RnD Cell"; - req_access = list("security") - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/turf/open/floor/iron/dark, -/area/station/security/checkpoint/science/research) "oiz" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/wood, @@ -74476,6 +74108,15 @@ /obj/item/circuitboard/machine/chem_dispenser/mutagensaltpeter, /turf/open/floor/plating, /area/station/maintenance/starboard/fore) +"ojn" = ( +/obj/structure/table, +/obj/machinery/door/poddoor/shutters{ + id = "visitation"; + name = "Visitation Shutters" + }, +/obj/machinery/door/window/left/directional/west, +/turf/open/floor/iron/dark, +/area/station/security/prison/visit) "ojp" = ( /obj/machinery/power/apc/auto_name/directional/west, /obj/structure/cable, @@ -74568,6 +74209,15 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron, /area/station/security/checkpoint/customs/auxiliary) +"okt" = ( +/obj/machinery/atmospherics/pipe/smart/simple/general/visible{ + dir = 10 + }, +/obj/machinery/door/window/right/directional/east{ + name = "Gas Ports" + }, +/turf/open/floor/iron/dark, +/area/station/security/execution/education) "oky" = ( /obj/machinery/atmospherics/pipe/smart/simple/violet/visible, /turf/open/floor/iron, @@ -74844,6 +74494,21 @@ /obj/machinery/power/apc/auto_name/directional/east, /turf/open/floor/iron/white, /area/station/medical/treatment_center) +"omJ" = ( +/obj/structure/window/reinforced/spawner/directional/north, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/turf_decal/vg_decals/numbers/four, +/obj/effect/turf_decal/tile/red/half/contrasted{ + dir = 4 + }, +/obj/machinery/door/window/brigdoor/security/cell/right/directional/east{ + name = "Cell 4" + }, +/turf/open/floor/iron/dark/side{ + dir = 4 + }, +/area/station/security/brig) "omM" = ( /obj/item/stack/sheet/cardboard, /obj/structure/cable, @@ -74946,6 +74611,21 @@ }, /turf/open/floor/iron/dark, /area/station/security/office) +"onD" = ( +/obj/effect/turf_decal/delivery, +/obj/effect/turf_decal/stripes{ + dir = 1 + }, +/obj/machinery/door/poddoor/preopen{ + id = "xeno8"; + name = "Creature Cell #8" + }, +/obj/machinery/door/window/brigdoor/left/directional/north{ + name = "Creature Pen"; + req_access = list("research") + }, +/turf/open/floor/engine, +/area/station/science/xenobiology) "onF" = ( /obj/machinery/portable_atmospherics/canister/air, /turf/open/floor/iron/dark, @@ -75153,41 +74833,6 @@ /obj/structure/curtain/bounty/start_closed, /turf/open/floor/iron/dark/herringbone, /area/station/cargo/bitrunning/den) -"opw" = ( -/obj/machinery/door/window/left{ - dir = 4; - name = "Magboot Storage"; - pixel_x = -1; - req_access = list("eva") - }, -/obj/structure/window/reinforced/spawner/directional/north{ - pixel_y = 1 - }, -/obj/structure/rack, -/obj/item/clothing/shoes/magboots{ - pixel_x = -4; - pixel_y = 3 - }, -/obj/item/clothing/shoes/magboots, -/obj/item/clothing/shoes/magboots{ - pixel_x = 4; - pixel_y = -3 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/obj/effect/turf_decal/tile/neutral, -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, -/obj/effect/turf_decal/stripes{ - dir = 4 - }, -/turf/open/floor/iron/dark, -/area/station/ai_monitored/command/storage/eva) "opJ" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/dark/side{ @@ -75591,25 +75236,6 @@ /obj/effect/decal/cleanable/blood/old, /turf/open/floor/mineral/plastitanium, /area/station/maintenance/cult_chapel_maint) -"otE" = ( -/obj/structure/table/reinforced, -/obj/machinery/door/firedoor, -/obj/machinery/door/window{ - dir = 8; - name = "Law Desk"; - req_access = list("lawyer") - }, -/obj/machinery/door/poddoor/shutters/preopen{ - id = "lawyerprivacy"; - name = "Lawyer's Privacy Shutter" - }, -/obj/item/folder{ - pixel_x = 2; - pixel_y = 2 - }, -/obj/item/folder, -/turf/open/floor/iron/dark, -/area/station/service/lawoffice) "otN" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -75656,6 +75282,13 @@ }, /turf/open/floor/grass, /area/station/hallway/primary/central) +"oub" = ( +/obj/structure/reagent_forge, +/obj/machinery/door/firedoor, +/obj/item/stack/sheet/mineral/coal/five, +/obj/machinery/door/window/left/directional/east, +/turf/open/floor/iron/dark, +/area/station/service/forge) "oug" = ( /obj/structure/chair/pew{ dir = 8 @@ -75869,6 +75502,16 @@ }, /turf/open/floor/iron/white, /area/station/medical/medbay/lobby) +"oww" = ( +/obj/effect/turf_decal/stripes{ + dir = 1 + }, +/obj/machinery/conveyor{ + dir = 8; + id = "mining" + }, +/turf/open/floor/plating, +/area/station/cargo/miningdock) "owA" = ( /obj/effect/decal/cleanable/dirt{ icon_state = "dirt-flat-1" @@ -76144,15 +75787,6 @@ dir = 4 }, /area/station/security/checkpoint/escape) -"oyX" = ( -/obj/machinery/door/window/brigdoor/right{ - name = "Holding Cell"; - req_access = list("brig") - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/turf/open/floor/iron, -/area/station/security/checkpoint/escape) "ozb" = ( /obj/effect/turf_decal/siding/wood{ dir = 4 @@ -76447,6 +76081,10 @@ }, /turf/open/floor/engine, /area/station/engineering/supermatter/room) +"oBL" = ( +/obj/machinery/door/window/right/directional/north, +/turf/open/floor/iron/dark, +/area/station/security/execution/transfer) "oBO" = ( /obj/machinery/conveyor{ dir = 8; @@ -76875,6 +76513,8 @@ /obj/item/melee/baton/security/loaded, /obj/structure/cable, /obj/effect/spawner/random/armory/riot_shield, +/obj/item/gun/energy/e_gun/dragnet, +/obj/item/gun/energy/e_gun/dragnet, /turf/open/floor/iron, /area/station/ai_monitored/security/armory) "oGG" = ( @@ -77000,6 +76640,18 @@ }, /turf/open/floor/iron/white, /area/station/medical/medbay/central) +"oHB" = ( +/obj/machinery/door/firedoor, +/obj/structure/table/reinforced, +/obj/item/folder/red, +/obj/item/pen, +/obj/structure/disposalpipe/segment, +/obj/machinery/door/window/brigdoor/right/directional/north{ + name = "Security Desk"; + req_access = list("security") + }, +/turf/open/floor/iron/dark, +/area/station/security/checkpoint/escape) "oHD" = ( /obj/structure/cable, /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ @@ -77224,6 +76876,14 @@ /obj/structure/falsewall/reinforced, /turf/open/floor/plating, /area/station/command/secure_bunker) +"oKf" = ( +/obj/structure/railing{ + dir = 5 + }, +/turf/open/floor/iron/smooth_corner{ + dir = 8 + }, +/area/station/cargo/miningdock) "oKi" = ( /obj/effect/turf_decal/tile/yellow/anticorner/contrasted{ dir = 8 @@ -77356,6 +77016,14 @@ dir = 4 }, /area/station/service/hydroponics) +"oKY" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 1 + }, +/obj/machinery/airalarm/directional/west, +/obj/machinery/door/window/left/directional/north, +/turf/open/floor/wood/parquet, +/area/station/common/arcade) "oLa" = ( /obj/effect/turf_decal/vg_decals/numbers/two, /turf/open/floor/iron, @@ -77573,14 +77241,6 @@ }, /turf/open/floor/iron/dark, /area/station/command/heads_quarters/hos) -"oMV" = ( -/obj/effect/decal/cleanable/dirt{ - icon_state = "dirt-flat-1" - }, -/obj/structure/alien/weeds/xen, -/mob/living/simple_animal/hostile/blackmesa/xen/houndeye, -/turf/open/misc/asteroid/airless, -/area/space/nearstation) "oMZ" = ( /obj/structure/disposalpipe/segment, /obj/structure/cable, @@ -78495,21 +78155,6 @@ /obj/item/radio/intercom/directional/west, /turf/open/floor/iron/dark, /area/station/command/gateway) -"oWl" = ( -/obj/structure/table, -/obj/item/ai_module/supplied/quarantine{ - pixel_x = 3; - pixel_y = 3 - }, -/obj/item/ai_module/supplied/freeform, -/obj/item/ai_module/reset{ - pixel_x = -3; - pixel_y = -3 - }, -/obj/machinery/power/apc/auto_name/directional/north, -/obj/structure/cable, -/turf/open/floor/iron, -/area/station/ai_monitored/turret_protected/ai_upload) "oWx" = ( /obj/effect/turf_decal/tile/yellow/half/contrasted, /obj/structure/cable, @@ -78908,10 +78553,6 @@ }, /turf/open/floor/plating, /area/station/maintenance/department/crew_quarters/dorms) -"pav" = ( -/obj/structure/spacevine/xen, -/turf/closed/wall/r_wall, -/area/space/nearstation) "pax" = ( /obj/structure/chair/sofa/bench, /obj/machinery/newscaster/directional/north, @@ -78933,6 +78574,19 @@ "paH" = ( /turf/open/floor/iron/solarpanel/airless, /area/station/solars/starboard/aft) +"paJ" = ( +/obj/effect/turf_decal/stripes{ + dir = 1 + }, +/obj/effect/turf_decal/siding/thinplating/dark{ + dir = 1 + }, +/obj/machinery/door/window/brigdoor/left/directional/north{ + name = "Research Director Observation"; + req_access = list("rd") + }, +/turf/open/floor/engine, +/area/station/command/heads_quarters/rd) "paL" = ( /obj/machinery/door/firedoor/border_only{ dir = 4 @@ -79153,14 +78807,6 @@ }, /turf/open/floor/iron/dark, /area/station/medical/power_station) -"pdF" = ( -/obj/effect/decal/cleanable/dirt{ - icon_state = "dirt-flat-1" - }, -/obj/structure/xen_crystal, -/obj/structure/alien/weeds/xen, -/turf/open/misc/asteroid/airless, -/area/space/nearstation) "pdH" = ( /obj/effect/spawner/structure/window/reinforced, /obj/machinery/atmospherics/pipe/layer_manifold/brown/visible, @@ -79231,14 +78877,6 @@ /obj/item/storage/crayons, /turf/open/floor/iron, /area/station/commons/fitness/recreation) -"pey" = ( -/obj/machinery/door/window/left{ - dir = 1 - }, -/obj/structure/cable, -/obj/machinery/power/apc/auto_name/directional/west, -/turf/open/floor/wood, -/area/station/service/theater) "peD" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/effect/turf_decal/tile/bar/opposingcorners, @@ -79251,6 +78889,17 @@ /obj/machinery/light_switch/directional/west, /turf/open/floor/iron/dark, /area/station/security/checkpoint) +"peH" = ( +/obj/structure/cable, +/obj/machinery/status_display/ai/directional/south, +/obj/machinery/light/directional/south, +/obj/machinery/door/window/left/directional/west{ + req_access = list("eva") + }, +/turf/open/floor/iron/stairs{ + dir = 4 + }, +/area/station/ai_monitored/command/storage/eva/upper) "peJ" = ( /obj/effect/turf_decal/siding/wood{ dir = 4 @@ -80118,10 +79767,6 @@ dir = 1 }, /area/station/science/research) -"pnq" = ( -/obj/structure/reagent_water_basin, -/turf/open/space/basic, -/area/space) "pnv" = ( /obj/effect/turf_decal/bot, /obj/structure/rack, @@ -80751,19 +80396,6 @@ /obj/structure/cable, /turf/open/floor/plating, /area/station/maintenance/fore/upper) -"pux" = ( -/obj/machinery/door/poddoor/preopen{ - id = "xenosecure"; - name = "Secure Pen Shutters" - }, -/obj/machinery/door/window/brigdoor{ - name = "Creature Pen"; - req_access = list("research") - }, -/obj/machinery/atmospherics/pipe/smart/simple/dark/visible, -/obj/structure/disposalpipe/segment, -/turf/open/floor/engine, -/area/station/science/xenobiology) "puy" = ( /obj/item/radio/intercom/directional/east, /turf/open/floor/iron/dark/side{ @@ -81140,6 +80772,17 @@ }, /turf/open/floor/iron, /area/station/maintenance/starboard/fore) +"pxn" = ( +/obj/structure/table, +/obj/structure/window/reinforced/spawner/directional/west, +/obj/structure/window/reinforced/spawner/directional/north, +/obj/effect/spawner/random/aimodule/neutral, +/obj/machinery/door/window/right/directional/east{ + name = "Core Modules"; + req_access = list("ai_upload") + }, +/turf/open/floor/iron, +/area/station/ai_monitored/turret_protected/ai_upload) "pxt" = ( /obj/effect/decal/cleanable/dirt{ icon_state = "dirt-flat-1" @@ -81251,6 +80894,21 @@ /obj/effect/spawner/random/trash/garbage, /turf/open/floor/plating, /area/station/maintenance/department/security/greater) +"pyq" = ( +/obj/structure/table, +/obj/structure/window/reinforced/spawner/directional/east, +/obj/structure/window/reinforced/spawner/directional/south, +/obj/item/ai_module/supplied/protect_station, +/obj/item/ai_module/reset/purge{ + pixel_x = -3; + pixel_y = -3 + }, +/obj/machinery/door/window/brigdoor/left/directional/west{ + id = list("ai_upload"); + name = "High-Risk Modules" + }, +/turf/open/floor/iron, +/area/station/ai_monitored/turret_protected/ai_upload) "pyr" = ( /obj/structure/trash_pile, /obj/machinery/light/small/broken/directional/west, @@ -81466,16 +81124,6 @@ /obj/structure/extinguisher_cabinet/directional/west, /turf/open/floor/iron/white, /area/station/science) -"pAI" = ( -/obj/machinery/door/window{ - name = "Law Office Front Desk" - }, -/obj/machinery/camera/directional/west{ - c_tag = "Law Lobby"; - dir = 10 - }, -/turf/open/floor/wood, -/area/station/service/lawoffice) "pAO" = ( /obj/structure/chair/office{ dir = 8 @@ -81550,6 +81198,33 @@ /obj/structure/fireplace, /turf/open/floor/iron/dark, /area/station/command/meeting_room/council) +"pBV" = ( +/obj/machinery/camera/directional/north{ + c_tag = "AI Chamber - Core"; + network = list("aicore") + }, +/obj/effect/turf_decal/tile/neutral{ + dir = 1 + }, +/obj/effect/turf_decal/tile/neutral, +/obj/effect/turf_decal/tile/neutral{ + dir = 4 + }, +/obj/effect/turf_decal/tile/neutral{ + dir = 8 + }, +/obj/machinery/requests_console/directional/north{ + department = "AI"; + name = "AI Requests Console" + }, +/obj/effect/mapping_helpers/requests_console/information, +/obj/effect/mapping_helpers/requests_console/assistance, +/obj/machinery/door/window/brigdoor/left/directional/east{ + name = "Primary AI Core Acces Door"; + req_access = list("ai_upload") + }, +/turf/open/floor/iron/dark, +/area/station/ai_monitored/turret_protected/ai) "pCj" = ( /obj/machinery/button/door/directional/west{ id = "Dorm5"; @@ -81620,6 +81295,13 @@ "pCR" = ( /turf/closed/wall, /area/station/common/arcade) +"pCS" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 4 + }, +/obj/machinery/door/window/left/directional/east, +/turf/open/floor/wood, +/area/station/command/heads_quarters/captain) "pDq" = ( /turf/open/floor/engine/vacuum, /area/station/maintenance/disposal/incinerator) @@ -81655,6 +81337,20 @@ }, /turf/open/floor/iron/dark, /area/station/ai_monitored/turret_protected/aisat/hallway) +"pDD" = ( +/obj/machinery/door/firedoor, +/obj/structure/table/reinforced, +/obj/item/folder/white, +/obj/machinery/door/poddoor/shutters/preopen{ + id = "Psychward4"; + name = "Control Room Shutters" + }, +/obj/structure/cable, +/obj/machinery/door/window/left/directional/west{ + req_access = list("psychology") + }, +/turf/open/floor/iron/dark, +/area/station/medical/psychology) "pDK" = ( /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ dir = 4 @@ -81724,20 +81420,6 @@ /obj/effect/spawner/structure/window/reinforced, /turf/open/floor/plating, /area/station/common/night_club/back_stage) -"pEJ" = ( -/obj/effect/turf_decal/stripes{ - dir = 1 - }, -/obj/effect/turf_decal/siding/thinplating/dark{ - dir = 1 - }, -/obj/machinery/door/window/brigdoor{ - dir = 1; - name = "Research Director Observation"; - req_access = list("rd") - }, -/turf/open/floor/engine, -/area/station/command/heads_quarters/rd) "pEL" = ( /obj/structure/window/reinforced/spawner/directional/north, /obj/structure/window/reinforced/spawner/directional/west, @@ -81971,6 +81653,39 @@ /obj/effect/landmark/start/orderly, /turf/open/floor/iron, /area/station/security/checkpoint/medical) +"pHk" = ( +/obj/structure/window/reinforced/spawner/directional/north{ + pixel_y = 1 + }, +/obj/structure/rack, +/obj/item/clothing/shoes/magboots{ + pixel_x = -4; + pixel_y = 3 + }, +/obj/item/clothing/shoes/magboots, +/obj/item/clothing/shoes/magboots{ + pixel_x = 4; + pixel_y = -3 + }, +/obj/effect/turf_decal/tile/neutral{ + dir = 1 + }, +/obj/effect/turf_decal/tile/neutral, +/obj/effect/turf_decal/tile/neutral{ + dir = 4 + }, +/obj/effect/turf_decal/tile/neutral{ + dir = 8 + }, +/obj/effect/turf_decal/stripes{ + dir = 4 + }, +/obj/machinery/door/window/left/directional/east{ + name = "Magboot Storage"; + req_access = list("eva") + }, +/turf/open/floor/iron/dark, +/area/station/ai_monitored/command/storage/eva) "pHs" = ( /obj/effect/turf_decal/trimline/purple/filled/line{ dir = 4 @@ -82123,6 +81838,17 @@ }, /turf/open/floor/iron/shuttle/evac/airless, /area/space/nearstation) +"pJf" = ( +/obj/structure/table, +/obj/structure/window/reinforced/spawner/directional/west, +/obj/structure/window/reinforced/spawner/directional/south, +/obj/effect/spawner/random/aimodule/harmless, +/obj/machinery/door/window/right/directional/east{ + name = "Core Modules"; + req_access = list("ai_upload") + }, +/turf/open/floor/iron, +/area/station/ai_monitored/turret_protected/ai_upload) "pJq" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -82841,15 +82567,6 @@ /obj/effect/turf_decal/tile/bar/opposingcorners, /turf/open/floor/iron, /area/station/service/bar/atrium) -"pPz" = ( -/obj/effect/turf_decal/siding/wood{ - dir = 4 - }, -/obj/machinery/door/window/left{ - dir = 4 - }, -/turf/open/floor/wood, -/area/station/command/heads_quarters/captain) "pPD" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -82974,22 +82691,6 @@ /obj/machinery/shower/directional/south, /turf/open/floor/iron/freezer, /area/station/commons/dorms/vacantroom) -"pQX" = ( -/obj/machinery/door/window/brigdoor/right{ - dir = 4; - name = "Command Chair"; - req_access = list("command") - }, -/obj/item/radio/intercom/directional/south, -/obj/structure/secure_safe/caps_spare{ - pixel_x = 5; - pixel_y = -37 - }, -/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/command/bridge) "pQZ" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -83224,19 +82925,6 @@ /obj/structure/bookcase/random/reference, /turf/open/floor/wood, /area/station/security/prison/rec) -"pTS" = ( -/obj/machinery/door/window/brigdoor{ - dir = 1; - name = "Creature Pen"; - req_access = list("research") - }, -/obj/effect/turf_decal/delivery, -/obj/machinery/door/poddoor/preopen{ - id = "xeno7"; - name = "Creature Cell #7" - }, -/turf/open/floor/engine, -/area/station/science/xenobiology) "pTW" = ( /obj/effect/turf_decal/tile/neutral{ dir = 8 @@ -83624,14 +83312,6 @@ dir = 1 }, /area/station/security/prison/upper) -"pWI" = ( -/obj/effect/decal/cleanable/dirt{ - icon_state = "dirt-flat-1" - }, -/obj/effect/mapping_helpers/burnt_floor, -/obj/structure/spacevine/xen, -/turf/open/floor/plating/airless, -/area/space/nearstation) "pWK" = ( /obj/effect/turf_decal/stripes/line, /obj/effect/turf_decal/stripes/line{ @@ -83699,6 +83379,13 @@ /obj/structure/flora/bush/sparsegrass, /turf/open/floor/grass, /area/station/service/chapel) +"pXm" = ( +/obj/effect/decal/cleanable/dirt{ + icon_state = "dirt-flat-1" + }, +/obj/item/reagent_containers/cup/bowl/soup/hotchili, +/turf/open/misc/asteroid/airless, +/area/space/nearstation) "pXp" = ( /obj/structure/bed/maint, /obj/item/bedsheet/grey{ @@ -84057,6 +83744,18 @@ }, /turf/open/floor/iron/dark, /area/station/engineering/main) +"qbb" = ( +/obj/effect/turf_decal/bot, +/obj/machinery/hydroponics/constructable, +/obj/structure/window/spawner/directional/south, +/obj/effect/turf_decal/trimline/green/filled/line{ + dir = 1 + }, +/obj/machinery/door/window/left/directional/east{ + pixel_x = 4 + }, +/turf/open/floor/iron/dark, +/area/station/service/hydroponics) "qbd" = ( /obj/structure/table, /obj/item/storage/box/drinkingglasses{ @@ -84093,19 +83792,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/wood, /area/station/service/electronic_marketing_den) -"qbu" = ( -/obj/effect/turf_decal/bot, -/obj/machinery/hydroponics/constructable, -/obj/structure/window/spawner/directional/north, -/obj/machinery/door/window/left{ - dir = 4; - pixel_x = 4 - }, -/obj/effect/turf_decal/trimline/green/filled/line{ - dir = 10 - }, -/turf/open/floor/iron/dark, -/area/station/service/hydroponics) "qby" = ( /obj/item/radio/intercom/directional/east, /obj/structure/cable, @@ -84912,6 +84598,21 @@ "qjx" = ( /turf/open/misc/beach/sand, /area/station/hallway/primary/central) +"qjE" = ( +/obj/effect/turf_decal/stripes{ + dir = 4 + }, +/obj/effect/turf_decal/stripes/red/line{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/door/window/right/directional/east{ + name = "Mech Bay"; + req_access = list("robotics") + }, +/turf/open/floor/mineral/plastitanium/red, +/area/station/science/robotics/lab) "qjF" = ( /obj/structure/table/reinforced, /obj/item/storage/box/bodybags{ @@ -85137,63 +84838,6 @@ "qlU" = ( /turf/open/floor/circuit, /area/station/tcommsat/computer) -"qlV" = ( -/obj/machinery/door/window/left{ - dir = 4; - name = "Jetpack Storage"; - pixel_x = -1; - req_access = list("eva") - }, -/obj/structure/window/reinforced/spawner/directional/south, -/obj/structure/rack, -/obj/item/tank/jetpack/carbondioxide{ - pixel_x = 4; - pixel_y = -1 - }, -/obj/item/tank/jetpack/carbondioxide, -/obj/item/tank/jetpack/carbondioxide{ - pixel_x = -4; - pixel_y = 1 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/obj/effect/turf_decal/tile/neutral, -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, -/obj/effect/turf_decal/stripes{ - dir = 4 - }, -/turf/open/floor/iron/dark, -/area/station/ai_monitored/command/storage/eva) -"qlX" = ( -/obj/structure/table/reinforced, -/obj/machinery/door/window/left{ - dir = 1; - name = "First-Aid Supplies"; - red_alert_access = 1; - req_access = list("medical") - }, -/obj/item/storage/medkit/toxin{ - pixel_x = 6; - pixel_y = 6 - }, -/obj/item/storage/medkit/toxin{ - pixel_x = 3; - pixel_y = 3 - }, -/obj/item/storage/medkit/regular, -/obj/item/storage/medkit/toxin{ - pixel_x = -3; - pixel_y = -3 - }, -/obj/machinery/newscaster/directional/south, -/turf/open/floor/iron, -/area/station/medical/storage) "qlY" = ( /turf/closed/wall, /area/station/service/library/private) @@ -85764,11 +85408,6 @@ /obj/structure/grille, /turf/open/floor/plating, /area/station/maintenance/fore/upper) -"qrp" = ( -/obj/structure/closet/crate, -/obj/effect/spawner/random/maintenance/three, -/turf/open/floor/iron/dark/small, -/area/station/cargo/miningdock) "qru" = ( /obj/structure/rack, /obj/item/stack/cable_coil{ @@ -86850,20 +86489,6 @@ /obj/structure/disposalpipe/segment, /turf/open/floor/iron, /area/station/service/hydroponics) -"qAC" = ( -/obj/machinery/door/window/brigdoor/right{ - dir = 8; - id = "Cell 3"; - name = "Cell 3"; - req_access = list("security") - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/effect/turf_decal/vg_decals/numbers/three, -/turf/open/floor/iron/dark/side{ - dir = 8 - }, -/area/station/security/brig) "qAE" = ( /turf/open/floor/iron/dark/side{ dir = 9 @@ -87429,6 +87054,35 @@ /obj/machinery/duct, /turf/open/floor/wood/parquet, /area/station/command/heads_quarters/nt_rep) +"qFL" = ( +/obj/machinery/door/firedoor, +/obj/structure/table/reinforced, +/obj/machinery/door/poddoor/preopen{ + id = "brigwindows"; + name = "Brig Front Blast Door" + }, +/obj/item/folder/red, +/obj/item/pen, +/obj/effect/turf_decal/tile/red{ + dir = 1 + }, +/obj/effect/turf_decal/tile/red, +/obj/effect/turf_decal/tile/red{ + dir = 4 + }, +/obj/effect/turf_decal/tile/red{ + dir = 8 + }, +/obj/structure/cable, +/obj/machinery/door/window/brigdoor/right/directional/north{ + name = "Security Desk"; + req_access = list("security") + }, +/obj/machinery/door/window/right/directional/south{ + name = "Security Desk" + }, +/turf/open/floor/iron, +/area/station/security/brig) "qFQ" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -87516,11 +87170,6 @@ dir = 1 }, /area/station/service/chapel) -"qGK" = ( -/obj/effect/mapping_helpers/burnt_floor, -/obj/structure/spacevine/xen, -/turf/open/floor/plating/airless, -/area/space/nearstation) "qGL" = ( /obj/effect/spawner/structure/window/reinforced, /turf/open/floor/plating, @@ -87883,10 +87532,6 @@ }, /turf/open/floor/wood, /area/station/command/heads_quarters/nt_rep) -"qJR" = ( -/obj/structure/reagent_forge, -/turf/open/space/basic, -/area/space) "qJV" = ( /obj/effect/turf_decal/tile/neutral{ dir = 4 @@ -87933,6 +87578,12 @@ }, /turf/open/floor/iron/white, /area/station/command/gateway) +"qKz" = ( +/obj/structure/cable, +/obj/machinery/power/apc/auto_name/directional/west, +/obj/machinery/door/window/left/directional/north, +/turf/open/floor/wood, +/area/station/service/theater) "qKA" = ( /obj/machinery/power/terminal, /obj/structure/cable, @@ -88095,28 +87746,6 @@ }, /turf/open/floor/iron, /area/station/hallway/primary/central) -"qMO" = ( -/obj/machinery/door/window/brigdoor/right{ - dir = 8; - name = "Prisoner Transfer"; - req_access = list("security") - }, -/obj/machinery/firealarm/directional/south, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/turf/open/floor/iron, -/area/station/security/checkpoint/escape) -"qMV" = ( -/obj/structure/railing{ - dir = 8 - }, -/obj/machinery/door/window/brigdoor/right{ - dir = 1; - name = "Command Chair"; - req_access = list("command") - }, -/obj/machinery/light/directional/east, -/turf/open/floor/iron/stairs, -/area/station/command/secure_bunker) "qMW" = ( /obj/structure/cable, /obj/effect/turf_decal/tile/neutral{ @@ -88206,19 +87835,6 @@ }, /turf/open/floor/iron, /area/station/science/research/abandoned) -"qNP" = ( -/obj/structure/railing{ - dir = 8 - }, -/obj/machinery/door/window/brigdoor/right{ - name = "Command Chair"; - req_access = list("command") - }, -/obj/machinery/light/directional/east, -/turf/open/floor/iron/stairs{ - dir = 1 - }, -/area/station/command/secure_bunker) "qNR" = ( /obj/effect/turf_decal/siding/thinplating/light{ dir = 4 @@ -88299,6 +87915,18 @@ }, /turf/open/floor/wood, /area/station/maintenance/abandon_art_studio) +"qON" = ( +/obj/structure/railing/corner, +/obj/effect/turf_decal/stripes{ + dir = 8 + }, +/obj/effect/turf_decal/vg_decals/numbers/one, +/obj/effect/turf_decal/stripes/white/line{ + dir = 8 + }, +/obj/machinery/door/window/elevator/right/directional/west, +/turf/open/floor/iron/dark, +/area/station/hallway/primary/central) "qOZ" = ( /obj/effect/turf_decal/siding/wood, /obj/structure/table/wood, @@ -88518,6 +88146,22 @@ /obj/structure/window/spawner/directional/west, /turf/open/floor/plating, /area/station/maintenance/department/security/greater) +"qQW" = ( +/obj/machinery/door/firedoor, +/obj/structure/table/reinforced, +/obj/item/folder/blue, +/obj/item/folder/blue, +/obj/item/folder/blue, +/obj/item/pen, +/obj/machinery/door/window/right/directional/east{ + name = "Customs Desk" + }, +/obj/machinery/door/window/brigdoor/right/directional/west{ + name = "Customs Desk"; + req_access = list("command") + }, +/turf/open/floor/iron/dark, +/area/station/security/checkpoint/customs) "qQZ" = ( /obj/structure/chair{ dir = 1 @@ -89300,6 +88944,13 @@ "qYv" = ( /turf/open/floor/iron, /area/station/hallway/primary/port) +"qYy" = ( +/obj/effect/decal/cleanable/dirt{ + icon_state = "dirt-flat-1" + }, +/mob/living/basic/mining/goliath/ancient, +/turf/open/misc/asteroid/airless, +/area/space/nearstation) "qYC" = ( /obj/structure/chair/office{ dir = 1 @@ -89465,6 +89116,21 @@ /obj/item/stamp/head/rd, /turf/open/floor/iron, /area/station/command/heads_quarters/rd) +"rah" = ( +/obj/structure/flora/bush/lavendergrass, +/obj/effect/turf_decal/siding/thinplating/light{ + dir = 4 + }, +/obj/machinery/door/poddoor/shutters/preopen{ + id = "rdgene"; + name = "Genetics Lab Shutters" + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/door/window/left/directional/east{ + name = "'Monkey Pen" + }, +/turf/open/floor/grass, +/area/station/science/genetics) "raj" = ( /obj/structure/mirror{ pixel_y = 32 @@ -89788,6 +89454,19 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/grass, /area/station/service/chapel) +"rdt" = ( +/obj/machinery/light/directional/west, +/obj/machinery/power/apc/auto_name/directional/south, +/obj/structure/cable, +/obj/effect/turf_decal/stripes{ + dir = 1 + }, +/obj/machinery/conveyor{ + dir = 9; + id = "mining" + }, +/turf/open/floor/plating, +/area/station/cargo/miningdock) "rdz" = ( /obj/structure/table, /obj/item/folder/red, @@ -90899,11 +90578,6 @@ }, /turf/open/floor/carpet, /area/station/service/theater) -"ron" = ( -/obj/item/stack/ore/iron, -/obj/structure/spacevine/xen, -/turf/open/floor/plating/airless, -/area/space/nearstation) "roA" = ( /obj/structure/flora/tree/jungle/small{ pixel_x = -30 @@ -90930,6 +90604,14 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/cargo/lobby) +"roO" = ( +/obj/machinery/light/directional/north, +/obj/machinery/door/window/brigdoor/left/directional/south{ + name = "Cargo Cell"; + req_access = list("security") + }, +/turf/open/floor/iron, +/area/station/security/checkpoint/supply) "roU" = ( /obj/structure/hedge, /obj/structure/railing{ @@ -91031,14 +90713,6 @@ /obj/effect/turf_decal/bot/left, /turf/open/floor/iron/dark, /area/station/security/brig) -"rpC" = ( -/obj/effect/decal/cleanable/dirt{ - icon_state = "dirt-flat-1" - }, -/obj/structure/alien/weeds/xen, -/mob/living/simple_animal/hostile/blackmesa/xen/headcrab, -/turf/open/misc/asteroid/airless, -/area/space/nearstation) "rpJ" = ( /obj/effect/decal/cleanable/dirt{ icon_state = "dirt-flat-1" @@ -91853,6 +91527,18 @@ /obj/machinery/light/directional/west, /turf/open/floor/iron/white, /area/station/medical/medbay/central) +"rxl" = ( +/obj/structure/table/wood/fancy, +/obj/structure/sign/painting/library_secure{ + pixel_y = 32 + }, +/obj/effect/turf_decal/siding/wood, +/obj/machinery/door/window/left/directional/south{ + name = "Secure Art Exhibition"; + req_access = list("library") + }, +/turf/open/floor/carpet, +/area/station/service/library) "rxm" = ( /obj/effect/spawner/structure/window/reinforced, /obj/machinery/door/poddoor/shutters/preopen{ @@ -91953,6 +91639,18 @@ }, /turf/open/floor/engine, /area/station/engineering/supermatter/room) +"rye" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/disposalpipe/segment, +/obj/machinery/door/firedoor/border_only{ + dir = 1 + }, +/obj/effect/landmark/start/hangover, +/obj/machinery/door/window/left/directional/north, +/turf/open/floor/wood, +/area/station/service/cafeteria) "ryf" = ( /obj/machinery/door/airlock{ id_tag = "Toilet5"; @@ -92426,6 +92124,18 @@ dir = 8 }, /area/station/hallway/primary/upper) +"rDq" = ( +/obj/effect/turf_decal/bot, +/obj/machinery/hydroponics/constructable, +/obj/structure/window/spawner/directional/south, +/obj/effect/turf_decal/trimline/green/filled/line{ + dir = 9 + }, +/obj/machinery/door/window/left/directional/east{ + pixel_x = 4 + }, +/turf/open/floor/iron/dark, +/area/station/service/hydroponics) "rDv" = ( /obj/structure/chair{ dir = 4 @@ -92788,6 +92498,19 @@ /obj/machinery/vending/wardrobe/robo_wardrobe, /turf/open/floor/iron/dark, /area/station/science/robotics) +"rGs" = ( +/obj/machinery/conveyor{ + dir = 4; + id = "garbage" + }, +/obj/machinery/door/window/right/directional/north{ + name = "Danger: Conveyor Access" + }, +/obj/machinery/door/window/right/directional/south{ + name = "Danger: Conveyor Access" + }, +/turf/open/floor/plating, +/area/station/maintenance/disposal) "rGt" = ( /obj/structure/chair/office, /turf/open/floor/carpet/green, @@ -92830,17 +92553,6 @@ /obj/machinery/light/small/directional/south, /turf/open/floor/vault/rock, /area/station/security/prison/safe) -"rGN" = ( -/obj/structure/table, -/obj/item/reagent_containers/cup/glass/bottle/beer{ - pixel_x = 6; - pixel_y = 16 - }, -/obj/item/clothing/mask/cigarette{ - pixel_y = 4 - }, -/turf/open/floor/iron/dark/small, -/area/station/cargo/miningdock) "rGQ" = ( /obj/effect/spawner/random/trash/cigbutt, /turf/open/floor/plating, @@ -93183,6 +92895,18 @@ /obj/structure/window/spawner/directional/west, /turf/open/floor/plating, /area/station/maintenance/abandon_wrestle) +"rKJ" = ( +/obj/effect/turf_decal/delivery, +/obj/structure/cable, +/obj/structure/disposalpipe/segment{ + dir = 5 + }, +/obj/machinery/door/window/right/directional/west{ + name = "Research Delivery"; + req_access = list("research") + }, +/turf/open/floor/iron/dark, +/area/station/science/research) "rKN" = ( /obj/effect/spawner/structure/window/reinforced, /turf/open/floor/plating, @@ -93836,19 +93560,6 @@ /obj/structure/sign/poster/contraband/icebox_moment/directional/west, /turf/open/floor/iron, /area/station/maintenance/starboard/fore) -"rSx" = ( -/obj/machinery/door/window/brigdoor{ - name = "Creature Pen"; - req_access = list("research") - }, -/obj/effect/turf_decal/delivery, -/obj/effect/turf_decal/stripes, -/obj/machinery/door/poddoor/preopen{ - id = "xeno1"; - name = "Creature Cell #1" - }, -/turf/open/floor/engine, -/area/station/science/xenobiology) "rSz" = ( /obj/machinery/conveyor{ dir = 8; @@ -93933,23 +93644,6 @@ /obj/effect/mapping_helpers/airlock/access/all/security/general, /turf/open/floor/iron/dark, /area/station/security/office) -"rTs" = ( -/obj/structure/flora/bush/lavendergrass, -/obj/machinery/door/window/left{ - dir = 4; - name = "'Monkey Pen"; - req_access = list("genetics") - }, -/obj/effect/turf_decal/siding/thinplating/light{ - dir = 4 - }, -/obj/machinery/door/poddoor/shutters/preopen{ - id = "rdgene"; - name = "Genetics Lab Shutters" - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/turf/open/floor/grass, -/area/station/science/genetics) "rTv" = ( /obj/structure/table/reinforced, /obj/structure/window/reinforced/spawner/directional/west, @@ -95025,10 +94719,8 @@ /turf/open/misc/beach/sand, /area/station/hallway/primary/aft) "sdV" = ( -/obj/structure/grille, -/obj/structure/window/reinforced/spawner/directional/south, -/obj/structure/window/reinforced/spawner/directional/north, -/obj/structure/window/reinforced/spawner/directional/east, +/obj/structure/closet/radiation, +/obj/effect/turf_decal/delivery, /turf/open/floor/plating, /area/station/engineering/atmos) "sdZ" = ( @@ -95463,25 +95155,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/engine, /area/station/command/secure_bunker) -"siQ" = ( -/obj/machinery/door/firedoor, -/obj/structure/table/reinforced, -/obj/machinery/door/window/left{ - dir = 8; - name = "Chemistry Desk"; - req_access = list("pharmacy") - }, -/obj/machinery/door/window/left{ - dir = 4; - name = "Chemistry Desk" - }, -/obj/machinery/door/poddoor/shutters/preopen{ - id = "chemistbot"; - name = "Chemistry Side Shutters" - }, -/obj/item/folder/white, -/turf/open/floor/iron/dark, -/area/station/medical/pharmacy) "siV" = ( /obj/effect/landmark/event_spawn, /obj/machinery/camera/directional/south{ @@ -95623,22 +95296,6 @@ /obj/machinery/digital_clock/directional/west, /turf/open/floor/iron/dark, /area/station/command/heads_quarters/hop) -"skg" = ( -/obj/structure/table, -/obj/structure/window/reinforced/spawner/directional/east, -/obj/structure/window/reinforced/spawner/directional/north, -/obj/machinery/door/window{ - dir = 8; - name = "High-Risk Modules"; - req_access = list("ai_upload") - }, -/obj/item/ai_module/zeroth/onehuman, -/obj/item/ai_module/supplied/oxygen{ - pixel_x = -3; - pixel_y = -3 - }, -/turf/open/floor/iron, -/area/station/ai_monitored/turret_protected/ai_upload) "skh" = ( /obj/machinery/door/airlock/maintenance, /turf/open/floor/plating, @@ -95648,6 +95305,19 @@ /obj/machinery/light/directional/west, /turf/open/floor/iron/dark, /area/station/security/execution/transfer) +"skq" = ( +/obj/machinery/door/poddoor/preopen{ + id = "xenosecure"; + name = "Secure Pen Shutters" + }, +/obj/machinery/atmospherics/pipe/smart/simple/dark/visible, +/obj/structure/disposalpipe/segment, +/obj/machinery/door/window/brigdoor/left/directional/south{ + name = "Creature Pen"; + req_access = list("research") + }, +/turf/open/floor/engine, +/area/station/science/xenobiology) "skx" = ( /obj/effect/turf_decal/bot, /obj/effect/turf_decal/stripes{ @@ -95929,23 +95599,6 @@ /obj/effect/decal/remains/human, /turf/open/floor/plating, /area/station/maintenance/abandon_holding_cell) -"snt" = ( -/obj/machinery/door/firedoor, -/obj/structure/table/reinforced, -/obj/machinery/door/window/brigdoor/right{ - dir = 8; - name = "Customs Desk"; - req_access = list("command") - }, -/obj/item/folder/blue, -/obj/item/folder/blue, -/obj/item/folder/blue, -/obj/item/pen, -/obj/machinery/door/window/right{ - dir = 4 - }, -/turf/open/floor/iron/dark, -/area/station/security/checkpoint/customs) "snu" = ( /turf/closed/wall, /area/station/service/library/printer) @@ -96136,15 +95789,6 @@ /obj/machinery/light/small/directional/west, /turf/open/floor/iron, /area/station/medical/virology) -"spB" = ( -/obj/machinery/door/window/left{ - name = "Court Cell"; - req_access = list("brig") - }, -/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/security/courtroom) "spD" = ( /obj/effect/decal/cleanable/oil, /turf/open/floor/plating/airless, @@ -96171,6 +95815,13 @@ "spO" = ( /turf/open/floor/iron/white, /area/station/science/genetics) +"spR" = ( +/obj/machinery/door/window/brigdoor/right/directional/east{ + name = "Crematorium"; + req_access = list("security") + }, +/turf/open/floor/iron/dark, +/area/station/security/prison) "spS" = ( /obj/structure/disposalpipe/segment, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -96945,14 +96596,6 @@ /obj/effect/spawner/random/decoration/glowstick, /turf/open/floor/iron, /area/station/maintenance/department/medical/central) -"sxj" = ( -/obj/machinery/door/window/brigdoor/right{ - dir = 1; - name = "Shooting Range"; - req_access = list("security") - }, -/turf/open/floor/iron/dark, -/area/station/security/range) "sxk" = ( /obj/effect/turf_decal/bot, /obj/structure/training_machine, @@ -97475,6 +97118,27 @@ }, /turf/open/floor/iron/white, /area/station/command/heads_quarters/rd) +"sCu" = ( +/obj/structure/rack/shelf, +/turf/open/floor/iron/smooth_edge{ + dir = 1 + }, +/area/station/cargo/miningdock) +"sCA" = ( +/obj/machinery/door/firedoor, +/obj/structure/table/reinforced, +/obj/machinery/door/poddoor/preopen{ + id = "atmoslock"; + name = "Atmospherics Lockdown Blast Door" + }, +/obj/item/paper_bin, +/obj/item/pen, +/obj/machinery/door/window/right/directional/east{ + name = "Atmospherics Desk"; + req_access = list("atmospherics") + }, +/turf/open/floor/iron/dark, +/area/station/engineering/atmos/office) "sCB" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -97876,6 +97540,12 @@ /obj/effect/turf_decal/delivery, /turf/open/floor/plating, /area/station/maintenance/department/medical/central) +"sGz" = ( +/obj/machinery/door/window/right/directional/north{ + name = "Danger: Conveyor Access" + }, +/turf/open/floor/plating, +/area/station/maintenance/disposal) "sGD" = ( /obj/effect/turf_decal/tile/neutral{ dir = 4 @@ -98589,6 +98259,19 @@ }, /turf/open/floor/iron, /area/station/commons/vacant_room/commissary) +"sMX" = ( +/obj/machinery/conveyor{ + dir = 4; + id = "garbage" + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/door/window/left/directional/north{ + name = "Danger: Conveyor Access" + }, +/turf/open/floor/plating, +/area/station/maintenance/disposal) "sMY" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -98740,6 +98423,17 @@ }, /turf/open/floor/carpet/lone, /area/station/command/meeting_room/council) +"sOu" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 4 + }, +/obj/machinery/door/window/left/directional/west{ + name = "Security Mech Recharge Dock"; + req_access = list("security") + }, +/turf/open/floor/iron, +/area/station/ai_monitored/security/armory) "sOy" = ( /obj/structure/table, /obj/item/wrench{ @@ -98956,22 +98650,6 @@ /obj/structure/grille/broken, /turf/open/floor/plating, /area/station/maintenance/aft/upper) -"sQJ" = ( -/obj/machinery/door/window/brigdoor{ - dir = 1; - name = "Creature Pen"; - req_access = list("research") - }, -/obj/effect/turf_decal/delivery, -/obj/effect/turf_decal/stripes{ - dir = 1 - }, -/obj/machinery/door/poddoor/preopen{ - id = "xeno8"; - name = "Creature Cell #8" - }, -/turf/open/floor/engine, -/area/station/science/xenobiology) "sQO" = ( /obj/effect/spawner/structure/window/reinforced, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -99143,6 +98821,27 @@ }, /turf/open/floor/iron, /area/station/security/prison/mess) +"sSK" = ( +/obj/effect/turf_decal/tile/yellow/half/contrasted{ + dir = 8 + }, +/obj/structure/closet/crate/secure/engineering{ + name = "surplus equipment crate" + }, +/obj/item/flatpacked_machine/co2_cracker, +/obj/item/flatpacked_machine/fuel_generator, +/obj/item/flatpacked_machine/large_station_battery, +/obj/item/flatpacked_machine/recycler, +/obj/item/flatpacked_machine/rtg, +/obj/item/flatpacked_machine/stirling_generator, +/obj/item/flatpacked_machine/thermomachine, +/obj/item/circuitboard/machine/circulator, +/obj/item/circuitboard/machine/circulator, +/obj/item/circuitboard/machine/thermoelectric_generator, +/turf/open/floor/iron/dark/side{ + dir = 4 + }, +/area/station/engineering/storage) "sSP" = ( /turf/open/floor/iron, /area/station/security/prison/mess) @@ -99686,14 +99385,6 @@ }, /turf/open/space/basic, /area/space) -"sXO" = ( -/obj/effect/decal/cleanable/dirt{ - icon_state = "dirt-flat-1" - }, -/obj/structure/alien/weeds/xen, -/obj/structure/xen_crystal, -/turf/open/misc/asteroid/airless, -/area/space/nearstation) "sXR" = ( /obj/machinery/door/airlock{ name = "Backstage" @@ -100630,6 +100321,19 @@ }, /turf/open/floor/iron/white, /area/station/medical/pharmacy) +"tft" = ( +/obj/effect/turf_decal/delivery, +/obj/effect/turf_decal/stripes, +/obj/machinery/door/poddoor/preopen{ + id = "xeno1"; + name = "Creature Cell #1" + }, +/obj/machinery/door/window/brigdoor/left/directional/south{ + name = "Creature Pen"; + req_access = list("research") + }, +/turf/open/floor/engine, +/area/station/science/xenobiology) "tfC" = ( /obj/machinery/firealarm/directional/south{ pixel_y = -20 @@ -100818,16 +100522,6 @@ /obj/machinery/smartfridge, /turf/open/floor/plating, /area/station/maintenance/abandon_kitchen_upper) -"thx" = ( -/obj/structure/window/reinforced/spawner/directional/east, -/obj/structure/cable, -/obj/machinery/door/window/right{ - dir = 1; - name = "Robotics Deliveries"; - req_access = list("robotics") - }, -/turf/open/floor/mineral/plastitanium/red, -/area/station/science/robotics/lab) "thz" = ( /obj/structure/window/reinforced/spawner/directional/south, /obj/structure/window/reinforced/spawner/directional/west, @@ -101227,8 +100921,8 @@ /obj/item/stack/rods/fifty, /obj/item/stack/rods/fifty, /obj/item/stack/rods/fifty, -/obj/item/storage/belt, -/obj/item/storage/belt, +/obj/item/storage/belt/utility, +/obj/item/storage/belt/utility, /obj/item/hand_labeler{ pixel_x = -4; pixel_y = -4 @@ -101241,17 +100935,6 @@ }, /turf/open/floor/iron, /area/station/engineering/atmos/pumproom) -"tmq" = ( -/obj/structure/disposalpipe/segment{ - dir = 9 - }, -/obj/machinery/door/window/left{ - name = "Service Deliveries"; - req_access = list("service") - }, -/obj/effect/turf_decal/delivery, -/turf/open/floor/iron, -/area/station/hallway/secondary/service) "tmr" = ( /obj/structure/table, /obj/machinery/reagentgrinder{ @@ -101413,15 +101096,6 @@ }, /turf/open/floor/wood, /area/station/service/library/private) -"tnT" = ( -/obj/structure/railing{ - dir = 5 - }, -/obj/structure/rack/shelf, -/turf/open/floor/iron/smooth_corner{ - dir = 8 - }, -/area/station/cargo/miningdock) "tnW" = ( /obj/structure/cable, /obj/effect/landmark/event_spawn, @@ -101482,6 +101156,33 @@ /obj/machinery/duct, /turf/open/floor/iron, /area/station/hallway/secondary/service) +"toE" = ( +/obj/structure/table/wood, +/obj/item/folder/blue{ + pixel_x = 3; + pixel_y = 3 + }, +/obj/item/folder/blue, +/obj/item/stamp/denied{ + pixel_x = -6; + pixel_y = 4 + }, +/obj/item/stamp/head/captain{ + pixel_x = 5; + pixel_y = 2 + }, +/obj/item/stamp{ + pixel_x = -6 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/door/window/brigdoor/right/directional/west{ + name = "Captain's Desk"; + req_access = list("captain") + }, +/turf/open/floor/carpet/blue, +/area/station/command/heads_quarters/captain/private) "toI" = ( /obj/effect/spawner/random/trash/mess, /obj/effect/decal/cleanable/dirt{ @@ -101811,20 +101512,6 @@ }, /turf/open/floor/plating, /area/station/maintenance/department/medical/central) -"tsu" = ( -/obj/machinery/door/window{ - name = "Deliveries"; - req_access = list("cargo") - }, -/obj/effect/turf_decal/delivery, -/obj/machinery/disposal/delivery_chute, -/obj/structure/disposalpipe/trunk{ - dir = 1 - }, -/obj/structure/window/reinforced/spawner/directional/north, -/obj/machinery/light/directional/east, -/turf/open/floor/iron/dark, -/area/station/cargo/office) "tsB" = ( /obj/effect/spawner/structure/window/reinforced, /obj/machinery/door/poddoor/shutters/preopen{ @@ -102323,6 +102010,17 @@ /obj/structure/window/reinforced/spawner/directional/south, /turf/open/floor/plating, /area/station/cargo/storage) +"txJ" = ( +/obj/machinery/conveyor{ + dir = 4; + id = "packageSort2" + }, +/obj/machinery/door/window/right/directional/east{ + name = "Crate Security Door"; + req_access = list("cargo") + }, +/turf/open/floor/iron/dark, +/area/station/cargo/sorting) "txP" = ( /obj/machinery/duct, /turf/open/floor/carpet/purple, @@ -102436,6 +102134,17 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/command/bridge) +"tyO" = ( +/obj/machinery/camera{ + c_tag = "Recreation - Barbershop Lower"; + dir = 5; + name = "hallway camera" + }, +/obj/structure/chair/comfy/barber_chair{ + dir = 8 + }, +/turf/open/floor/wood/tile, +/area/station/service/barber) "tyT" = ( /obj/structure/window/reinforced/spawner/directional/west, /obj/structure/window/reinforced/spawner/directional/east, @@ -103232,24 +102941,6 @@ }, /turf/open/floor/iron/freezer, /area/station/service/kitchen/coldroom) -"tFP" = ( -/obj/effect/turf_decal/stripes{ - dir = 4 - }, -/obj/machinery/disposal/delivery_chute{ - dir = 4 - }, -/obj/structure/plasticflaps, -/obj/machinery/door/window/right{ - dir = 4; - name = "Science Deliveries"; - req_access = list("cargo") - }, -/obj/structure/disposalpipe/trunk{ - dir = 8 - }, -/turf/open/floor/iron/dark, -/area/station/cargo/sorting) "tFQ" = ( /obj/structure/bed, /obj/effect/landmark/start/hangover, @@ -103409,6 +103100,24 @@ }, /turf/open/floor/iron, /area/station/hallway/primary/central) +"tHM" = ( +/obj/machinery/door/firedoor, +/obj/structure/table/reinforced, +/obj/machinery/door/poddoor/shutters/preopen{ + id = "chemisttop"; + name = "Chemistry Lobby Shutters" + }, +/obj/item/folder/white, +/obj/item/reagent_containers/cup/bottle/multiver{ + pixel_x = -7; + pixel_y = 1 + }, +/obj/machinery/door/window/left/directional/south{ + name = "Chemistry Desk"; + req_access = list("pharmacy") + }, +/turf/open/floor/iron/dark, +/area/station/medical/pharmacy) "tHQ" = ( /obj/structure/sink/directional/north, /turf/open/floor/iron/dark/side{ @@ -103785,7 +103494,7 @@ /obj/structure/bed{ dir = 1 }, -/obj/item/bedsheet/dorms{ +/obj/effect/spawner/random/bedsheet{ dir = 1 }, /obj/effect/landmark/start/hangover, @@ -103970,6 +103679,13 @@ /obj/structure/disposalpipe/segment, /turf/open/floor/wood, /area/station/security/detectives_office) +"tNu" = ( +/obj/effect/decal/cleanable/dirt{ + icon_state = "dirt-flat-1" + }, +/mob/living/basic/mining/basilisk, +/turf/open/misc/asteroid/airless, +/area/space/nearstation) "tNx" = ( /obj/effect/turf_decal/siding/thinplating/corner{ dir = 4 @@ -104017,12 +103733,6 @@ /obj/effect/spawner/random/maintenance, /turf/open/floor/plating, /area/station/maintenance/port/fore) -"tNO" = ( -/obj/effect/turf_decal/siding/purple/end{ - dir = 1 - }, -/turf/open/floor/glass/reinforced, -/area/station/science) "tNU" = ( /obj/effect/turf_decal/tile/blue{ dir = 1 @@ -104974,24 +104684,6 @@ /obj/structure/disposalpipe/segment, /turf/open/floor/plating, /area/station/security/brig) -"tWY" = ( -/obj/effect/turf_decal/stripes{ - dir = 4 - }, -/obj/machinery/disposal/delivery_chute{ - dir = 4 - }, -/obj/structure/plasticflaps, -/obj/machinery/door/window/right{ - dir = 4; - name = "Engineering Deliveries"; - req_access = list("cargo") - }, -/obj/structure/disposalpipe/trunk{ - dir = 8 - }, -/turf/open/floor/iron/dark, -/area/station/cargo/sorting) "tXj" = ( /obj/effect/turf_decal/stripes{ dir = 8 @@ -105338,14 +105030,6 @@ /obj/structure/reagent_dispensers/beerkeg, /turf/open/floor/plating, /area/station/maintenance/aft/upper) -"ubt" = ( -/obj/effect/turf_decal/bot, -/obj/machinery/hydroponics/constructable, -/obj/machinery/door/window/left{ - dir = 1 - }, -/turf/open/floor/iron/dark, -/area/station/service/hydroponics) "ubC" = ( /obj/effect/decal/cleanable/dirt{ icon_state = "dirt-flat-1" @@ -105468,6 +105152,11 @@ dir = 1 }, /area/station/service/hydroponics) +"ucW" = ( +/obj/machinery/airalarm/directional/east, +/obj/machinery/door/window/right/directional/north, +/turf/open/floor/wood, +/area/station/service/theater) "uda" = ( /obj/structure/chair/sofa/bench/left{ dir = 4; @@ -105671,6 +105360,20 @@ /obj/structure/cable, /turf/open/floor/iron, /area/station/security/office) +"uer" = ( +/obj/machinery/door/firedoor, +/obj/structure/table/reinforced, +/obj/item/folder, +/obj/item/food/grown/apple, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/door/window/left/directional/east{ + name = "Hydroponics Desk"; + req_access = list("hydroponics") + }, +/turf/open/floor/iron/dark, +/area/station/service/hydroponics) "uex" = ( /obj/structure/table, /obj/item/clothing/head/helmet/skull, @@ -105851,6 +105554,11 @@ /obj/structure/table/reinforced, /obj/item/circuit_component/soundemitter, /obj/item/circuit_component/clock, +/obj/item/storage/toolbox/electrical{ + pixel_y = 5 + }, +/obj/item/integrated_circuit/loaded/hello_world, +/obj/item/integrated_circuit/loaded/hello_world, /turf/open/floor/iron/dark/side, /area/station/science/circuits) "ufO" = ( @@ -105868,6 +105576,27 @@ /obj/item/fur_dyer, /turf/open/floor/iron/white, /area/station/service/barber) +"ugc" = ( +/obj/machinery/light/directional/north, +/obj/effect/turf_decal/stripes{ + dir = 8 + }, +/obj/effect/turf_decal/stripes/white/line{ + dir = 8 + }, +/obj/machinery/button/elevator{ + id = "publicElevator"; + pixel_y = 32 + }, +/obj/machinery/lift_indicator/directional/north{ + linked_elevator_id = "publicElevator" + }, +/obj/machinery/door/window/elevator/right/directional/west{ + elevator_mode = 1; + transport_linked_id = "publicElevator" + }, +/turf/open/floor/iron/dark, +/area/station/hallway/primary/upper) "ugd" = ( /obj/machinery/atmospherics/pipe/smart/simple/green/visible, /obj/structure/lattice, @@ -105899,6 +105628,14 @@ /obj/structure/railing, /turf/open/floor/wood, /area/station/service/cafeteria) +"ugB" = ( +/obj/effect/turf_decal/delivery, +/obj/machinery/door/window/left/directional/north{ + name = "Hydroponics Delivery"; + req_access = list("hydroponics") + }, +/turf/open/floor/iron/dark, +/area/station/service/hydroponics) "ugH" = ( /obj/machinery/atmospherics/components/unary/vent_pump/siphon/on{ dir = 8 @@ -106605,6 +106342,14 @@ /obj/structure/cable, /turf/open/floor/plating, /area/station/maintenance/port/aft) +"umm" = ( +/obj/effect/turf_decal/delivery, +/obj/machinery/door/window/left/directional/north{ + name = "Bar Delivery"; + req_access = list("bar") + }, +/turf/open/floor/iron/dark, +/area/station/hallway/secondary/service) "umn" = ( /obj/effect/spawner/structure/window/reinforced, /turf/open/floor/plating, @@ -106741,17 +106486,6 @@ /obj/structure/chair/sofa/left/brown, /turf/open/floor/carpet, /area/station/hallway/primary/port) -"unM" = ( -/obj/machinery/door/firedoor, -/obj/machinery/door/window/brigdoor/right{ - name = "Customs Desk"; - req_access = list("command") - }, -/obj/effect/turf_decal/bot, -/obj/effect/turf_decal/loading_area, -/obj/structure/cable, -/turf/open/floor/iron/dark/side, -/area/station/security/checkpoint/customs/auxiliary) "unT" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -106970,6 +106704,11 @@ "upX" = ( /turf/closed/wall, /area/station/service/barber) +"uqb" = ( +/obj/item/weldingtool, +/obj/structure/lattice, +/turf/open/space/basic, +/area/space/nearstation) "uqr" = ( /obj/structure/chair, /obj/effect/landmark/start/assistant, @@ -106996,6 +106735,19 @@ /obj/effect/mapping_helpers/airlock/access/all/science/xenobio, /turf/open/floor/iron/white, /area/station/science/xenobiology/control) +"uqt" = ( +/obj/effect/turf_decal/stripes{ + dir = 4 + }, +/obj/effect/turf_decal/stripes/red/line{ + dir = 4 + }, +/obj/machinery/door/window/left/directional/east{ + name = "Mech Bay"; + req_access = list("robotics") + }, +/turf/open/floor/mineral/plastitanium/red, +/area/station/science/robotics/lab) "uqE" = ( /obj/effect/turf_decal/bot, /obj/effect/turf_decal/tile/yellow{ @@ -107319,19 +107071,6 @@ /obj/structure/extinguisher_cabinet/directional/east, /turf/open/floor/iron/white, /area/station/science/research) -"uth" = ( -/obj/structure/table/reinforced, -/obj/item/folder, -/obj/item/folder/yellow, -/obj/item/pen, -/obj/machinery/door/firedoor, -/obj/machinery/door/window/right{ - dir = 1; - name = "Cargo Desk"; - req_access = list("cargo") - }, -/turf/open/floor/iron/dark, -/area/station/cargo/office) "utj" = ( /turf/open/floor/iron/shuttle/evac/airless, /area/station/maintenance/department/medical) @@ -107391,6 +107130,28 @@ /obj/machinery/holopad/secure, /turf/open/floor/wood, /area/station/command/heads_quarters/blueshield) +"utV" = ( +/obj/structure/table/reinforced, +/obj/item/storage/medkit/toxin{ + pixel_x = 6; + pixel_y = 6 + }, +/obj/item/storage/medkit/toxin{ + pixel_x = 3; + pixel_y = 3 + }, +/obj/item/storage/medkit/regular, +/obj/item/storage/medkit/toxin{ + pixel_x = -3; + pixel_y = -3 + }, +/obj/machinery/newscaster/directional/south, +/obj/machinery/door/window/left/directional/north{ + req_access = list("medical"); + name = "First-Aid Supplies" + }, +/turf/open/floor/iron, +/area/station/medical/storage) "utX" = ( /obj/effect/turf_decal/siding/wood/corner{ dir = 8 @@ -107555,6 +107316,34 @@ /obj/machinery/light/directional/south, /turf/open/floor/grass, /area/station/command/heads_quarters/captain) +"uvY" = ( +/obj/structure/table/wood, +/obj/item/coin/adamantine{ + pixel_x = -4; + pixel_y = 4 + }, +/obj/item/hand_tele, +/obj/item/melee/chainofcommand, +/obj/machinery/door/window/brigdoor/left/directional/west{ + name = "Captain's Desk"; + req_access = list("captain") + }, +/turf/open/floor/carpet/blue, +/area/station/command/heads_quarters/captain/private) +"uwd" = ( +/obj/machinery/door/firedoor, +/obj/structure/table/reinforced, +/obj/item/folder/red, +/obj/item/pen, +/obj/machinery/door/window/right/directional/east{ + name = "Security Customs" + }, +/obj/machinery/door/window/brigdoor/right/directional/west{ + name = "Security Customs"; + req_access = list("security") + }, +/turf/open/floor/iron/dark, +/area/station/security/checkpoint) "uwh" = ( /obj/structure/table, /obj/machinery/computer/records/medical/laptop{ @@ -108035,6 +107824,19 @@ "uAV" = ( /turf/open/floor/iron, /area/station/commons/vacant_room/commissary) +"uBa" = ( +/obj/structure/table/reinforced, +/obj/machinery/door/firedoor, +/obj/machinery/door/window/brigdoor/left/directional/west{ + name = "Armoury Desk"; + req_access = list("armory") + }, +/obj/machinery/door/window/brigdoor/left/directional/east{ + name = "Armoury Desk"; + req_access = list("armory") + }, +/turf/open/floor/iron/dark, +/area/station/ai_monitored/security/armory) "uBf" = ( /obj/effect/decal/cleanable/dirt{ icon_state = "dirt-flat-1" @@ -108127,6 +107929,13 @@ /obj/machinery/duct, /turf/open/floor/iron/stairs, /area/station/command/heads_quarters/hos) +"uBP" = ( +/obj/effect/turf_decal/siding/purple/end{ + dir = 1 + }, +/obj/machinery/door/window/left/directional/west, +/turf/open/floor/glass/reinforced, +/area/station/science) "uBR" = ( /obj/machinery/power/terminal{ dir = 1 @@ -108244,17 +108053,6 @@ /obj/structure/lattice/catwalk, /turf/open/openspace, /area/station/maintenance/fore/upper) -"uCL" = ( -/obj/effect/turf_decal/bot, -/obj/machinery/hydroponics/constructable, -/obj/structure/window/spawner/directional/north, -/obj/machinery/door/window/left{ - dir = 4; - pixel_x = 4 - }, -/obj/effect/turf_decal/trimline/green/filled/line, -/turf/open/floor/iron/dark, -/area/station/service/hydroponics) "uCP" = ( /obj/machinery/oven/range, /turf/open/floor/iron/cafeteria, @@ -108656,10 +108454,6 @@ }, /turf/open/floor/iron, /area/station/hallway/primary/upper) -"uGt" = ( -/obj/structure/closet/crate/secure/loot, -/turf/open/floor/iron/dark/small, -/area/station/cargo/miningdock) "uGz" = ( /obj/item/stack/sheet/cardboard, /obj/item/storage/box/lights, @@ -108891,8 +108685,8 @@ "uJv" = ( /obj/structure/window/reinforced/spawner/directional/west, /obj/structure/table/reinforced, -/obj/item/storage/belt, -/obj/item/storage/belt, +/obj/item/storage/belt/utility, +/obj/item/storage/belt/utility, /obj/item/weldingtool, /obj/item/weldingtool, /obj/item/clothing/head/utility/welding, @@ -109049,45 +108843,15 @@ /turf/closed/wall/r_wall, /area/station/maintenance/rus_gambling) "uKW" = ( -/obj/structure/table/reinforced, -/obj/item/gun/energy/e_gun/dragnet, -/obj/item/gun/energy/e_gun/dragnet, /obj/machinery/camera/directional/south{ c_tag = "Armory - Interior" }, /obj/machinery/light/directional/south, +/obj/structure/rack/gunrack, +/obj/effect/turf_decal/delivery, +/obj/effect/spawner/armory_spawn/mod_lasers_big, /turf/open/floor/iron/dark, /area/station/ai_monitored/security/armory) -"uLb" = ( -/obj/machinery/door/firedoor, -/obj/structure/table/reinforced, -/obj/machinery/door/poddoor/preopen{ - id = "brigwindows"; - name = "Brig Front Blast Door" - }, -/obj/item/folder/red, -/obj/item/pen, -/obj/machinery/door/window/brigdoor/right{ - dir = 1; - name = "Security Desk"; - req_access = list("security") - }, -/obj/machinery/door/window/right{ - name = "Security Desk" - }, -/obj/effect/turf_decal/tile/red{ - dir = 1 - }, -/obj/effect/turf_decal/tile/red, -/obj/effect/turf_decal/tile/red{ - dir = 4 - }, -/obj/effect/turf_decal/tile/red{ - dir = 8 - }, -/obj/structure/cable, -/turf/open/floor/iron, -/area/station/security/brig) "uLe" = ( /obj/structure/chair{ dir = 1 @@ -109104,6 +108868,17 @@ /mob/living/basic/spider/growing/spiderling, /turf/open/floor/plating, /area/station/maintenance/department/medical/central) +"uLj" = ( +/obj/effect/turf_decal/stripes{ + dir = 1 + }, +/obj/machinery/bouldertech/refinery, +/obj/machinery/conveyor{ + dir = 8; + id = "mining" + }, +/turf/open/floor/plating, +/area/station/cargo/miningdock) "uLp" = ( /obj/effect/turf_decal/weather/sand{ dir = 8 @@ -109399,6 +109174,16 @@ }, /turf/open/floor/grass, /area/station/command/heads_quarters/cmo) +"uOS" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/door/window/brigdoor/right/directional/west{ + name = "Command Chair"; + req_access = list("command") + }, +/turf/open/floor/iron, +/area/station/command/bridge) "uOU" = ( /obj/machinery/power/terminal{ dir = 8 @@ -109493,6 +109278,24 @@ }, /turf/open/floor/iron/white, /area/station/medical/medbay/central) +"uQj" = ( +/obj/effect/turf_decal/stripes{ + dir = 4 + }, +/obj/effect/turf_decal/stripes/white/line{ + dir = 4 + }, +/obj/machinery/button/elevator{ + id = "publicElevator"; + pixel_y = 32 + }, +/obj/machinery/lift_indicator/directional/north{ + linked_elevator_id = "publicElevator" + }, +/obj/machinery/light/directional/north, +/obj/machinery/door/window/elevator/right/directional/east, +/turf/open/floor/iron/dark, +/area/station/hallway/primary/central) "uQl" = ( /obj/structure/chair/wood{ dir = 4 @@ -109591,6 +109394,21 @@ }, /turf/open/floor/iron, /area/station/science/research) +"uQW" = ( +/obj/effect/turf_decal/delivery, +/obj/effect/turf_decal/stripes{ + dir = 1 + }, +/obj/machinery/door/poddoor/preopen{ + id = "xeno9"; + name = "Creature Cell #9" + }, +/obj/machinery/door/window/brigdoor/left/directional/north{ + name = "Creature Pen"; + req_access = list("research") + }, +/turf/open/floor/engine, +/area/station/science/xenobiology) "uQZ" = ( /obj/structure/chair/stool/directional/west, /obj/effect/landmark/start/hangover, @@ -109681,15 +109499,6 @@ /obj/effect/turf_decal/stripes/end, /turf/open/floor/plating/airless, /area/station/engineering/atmos/upper) -"uRV" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 6 - }, -/obj/machinery/door/window/left{ - name = "Drone Launchsite" - }, -/turf/open/floor/plating, -/area/station/cargo/drone_bay) "uSe" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -110257,6 +110066,18 @@ }, /turf/open/floor/iron/dark, /area/station/service/kitchen) +"uXo" = ( +/obj/effect/turf_decal/bot, +/obj/machinery/hydroponics/constructable, +/obj/structure/window/spawner/directional/north, +/obj/effect/turf_decal/trimline/green/filled/line{ + dir = 6 + }, +/obj/machinery/door/window/left/directional/west{ + pixel_x = -3 + }, +/turf/open/floor/iron/dark, +/area/station/service/hydroponics) "uXu" = ( /obj/structure/table, /obj/item/stack/sheet/bone, @@ -110349,6 +110170,21 @@ /obj/machinery/portable_atmospherics/canister/carbon_dioxide, /turf/open/floor/iron/dark, /area/station/security/execution/education) +"uYB" = ( +/obj/structure/table/reinforced, +/obj/machinery/door/firedoor, +/obj/item/folder/white, +/obj/item/pen, +/obj/machinery/door/poddoor/shutters/preopen{ + id = "rdgene2"; + name = "Genetics Lab Shutters" + }, +/obj/machinery/door/window/left/directional/east{ + name = "Genetics Desk"; + req_access = list("genetics") + }, +/turf/open/floor/iron/dark, +/area/station/science/genetics) "uYD" = ( /obj/structure/window/reinforced/fulltile, /obj/structure/flora/grass/jungle, @@ -110726,6 +110562,17 @@ }, /turf/open/floor/cult, /area/station/maintenance/cult_chapel_maint) +"vdh" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/turf_decal/vg_decals/numbers/six, +/obj/machinery/door/window/brigdoor/security/cell/right/directional/east{ + name = "Cell 6" + }, +/turf/open/floor/iron/dark/side{ + dir = 4 + }, +/area/station/security/brig) "vdq" = ( /obj/machinery/airalarm/directional/east, /obj/effect/landmark/start/hangover, @@ -111045,18 +110892,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron/dark, /area/station/security/brig) -"vgE" = ( -/obj/machinery/door/window/left{ - dir = 8; - req_access = list("eva") - }, -/obj/structure/cable, -/obj/machinery/status_display/ai/directional/south, -/obj/machinery/light/directional/south, -/turf/open/floor/iron/stairs{ - dir = 4 - }, -/area/station/ai_monitored/command/storage/eva/upper) "vgG" = ( /obj/structure/trash_pile, /obj/effect/decal/cleanable/dirt{ @@ -111575,34 +111410,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron/white, /area/station/science/research) -"vlf" = ( -/obj/structure/table/wood, -/obj/item/folder/blue{ - pixel_x = 3; - pixel_y = 3 - }, -/obj/item/folder/blue, -/obj/item/stamp/denied{ - pixel_x = -6; - pixel_y = 4 - }, -/obj/item/stamp/head/captain{ - pixel_x = 5; - pixel_y = 2 - }, -/obj/item/stamp{ - pixel_x = -6 - }, -/obj/machinery/door/window/brigdoor/right{ - dir = 8; - name = "Captain's Desk"; - req_access = list("captain") - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/open/floor/carpet/blue, -/area/station/command/heads_quarters/captain/private) "vlo" = ( /obj/structure/table, /turf/open/floor/iron/dark, @@ -112793,20 +112600,6 @@ /obj/effect/landmark/start/hangover, /turf/open/floor/iron, /area/station/hallway/primary/upper) -"vww" = ( -/obj/machinery/door/window/brigdoor/right{ - dir = 4; - id = "Cell 5"; - name = "Cell 5"; - req_access = list("security") - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/effect/turf_decal/vg_decals/numbers/five, -/turf/open/floor/iron/dark/side{ - dir = 4 - }, -/area/station/security/brig) "vwE" = ( /obj/structure/cable, /obj/machinery/firealarm/directional/west, @@ -112876,6 +112669,15 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/white, /area/station/science) +"vxf" = ( +/obj/machinery/firealarm/directional/south, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/door/window/brigdoor/left/directional/west{ + name = "Prisoner Transfer"; + req_access = list("security") + }, +/turf/open/floor/iron, +/area/station/security/checkpoint/escape) "vxi" = ( /obj/machinery/door/firedoor, /obj/effect/turf_decal/tile/neutral{ @@ -113782,17 +113584,20 @@ }, /turf/open/floor/iron/dark, /area/station/hallway/secondary/entry) -"vFh" = ( -/obj/structure/table, -/obj/machinery/door/poddoor/shutters{ - id = "visitation"; - name = "Visitation Shutters" +"vFg" = ( +/obj/machinery/status_display/evac/directional/north, +/obj/machinery/light/directional/north, +/obj/machinery/camera/directional/north{ + c_tag = "Bridge - E.V.A. Fore"; + name = "command camera" }, -/obj/machinery/door/window/left{ - dir = 8 +/obj/machinery/door/window/right/directional/west{ + req_access = list("eva") }, -/turf/open/floor/iron/dark, -/area/station/security/prison/visit) +/turf/open/floor/iron/stairs{ + dir = 4 + }, +/area/station/ai_monitored/command/storage/eva/upper) "vFi" = ( /turf/open/floor/plating, /area/station/maintenance/department/security/lesser) @@ -113986,6 +113791,21 @@ /obj/effect/turf_decal/tile/blue/half/contrasted, /turf/open/floor/iron/dark/side, /area/station/command/bridge) +"vHj" = ( +/obj/effect/turf_decal/delivery, +/obj/effect/turf_decal/stripes{ + dir = 1 + }, +/obj/machinery/door/poddoor/preopen{ + id = "xeno6"; + name = "Creature Cell #6" + }, +/obj/machinery/door/window/brigdoor/left/directional/north{ + name = "Creature Pen"; + req_access = list("research") + }, +/turf/open/floor/engine, +/area/station/science/xenobiology) "vHk" = ( /obj/effect/turf_decal/trimline/blue/filled/warning{ dir = 6 @@ -115071,6 +114891,25 @@ /obj/structure/cable, /turf/open/floor/plating, /area/station/maintenance/department/medical/central) +"vRw" = ( +/obj/structure/window/reinforced/spawner/directional/west, +/obj/structure/window/reinforced/spawner/directional/east, +/obj/machinery/door/firedoor, +/obj/effect/turf_decal/delivery, +/obj/machinery/door/poddoor/preopen{ + id = "executionfireblast" + }, +/obj/machinery/atmospherics/pipe/smart/simple/general/visible, +/obj/machinery/door/window/brigdoor/left/directional/north{ + name = "Justice Chamber"; + req_access = list("armory") + }, +/obj/machinery/door/window/brigdoor/left/directional/south{ + name = "Justice Chamber"; + req_access = list("armory") + }, +/turf/open/floor/iron/dark, +/area/station/security/execution/education) "vRE" = ( /obj/effect/turf_decal/tile/neutral{ dir = 1 @@ -115703,6 +115542,16 @@ /obj/effect/spawner/structure/window/reinforced, /turf/open/floor/plating, /area/station/security/corrections_officer) +"vYJ" = ( +/obj/machinery/camera/directional/west{ + c_tag = "Law Lobby"; + dir = 10 + }, +/obj/machinery/door/window/left/directional/south{ + name = "Law Office Front Desk" + }, +/turf/open/floor/wood, +/area/station/service/lawoffice) "vYS" = ( /obj/machinery/duct, /turf/open/floor/iron/freezer, @@ -115919,35 +115768,6 @@ /obj/structure/cable, /turf/open/floor/plating, /area/station/security/prison/visit) -"wbd" = ( -/obj/machinery/turretid{ - icon_state = "control_stun"; - name = "AI Chamber turret control"; - pixel_x = 3; - pixel_y = -23 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/obj/effect/turf_decal/tile/neutral, -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, -/obj/machinery/power/apc/auto_name/directional/north, -/obj/structure/cable, -/obj/machinery/airalarm/directional/north{ - pixel_y = 33 - }, -/obj/machinery/door/window/brigdoor{ - dir = 8; - name = "Primary AI Core Acces Door"; - req_access = list("ai_upload") - }, -/turf/open/floor/iron/dark, -/area/station/ai_monitored/turret_protected/ai) "wbe" = ( /obj/machinery/conveyor{ dir = 8; @@ -116116,18 +115936,6 @@ }, /turf/open/floor/plating, /area/station/maintenance/department/science/lower) -"wcy" = ( -/obj/machinery/conveyor{ - dir = 4; - id = "packageSort2" - }, -/obj/machinery/door/window/left{ - dir = 4; - name = "Crate Security Door"; - req_access = list("cargo") - }, -/turf/open/floor/iron/dark, -/area/station/cargo/sorting) "wcz" = ( /obj/effect/landmark/start/hangover, /turf/open/floor/iron, @@ -116776,6 +116584,13 @@ /obj/structure/cable, /turf/open/floor/plating, /area/station/maintenance/department/science/upper) +"whx" = ( +/obj/effect/decal/cleanable/dirt{ + icon_state = "dirt-flat-1" + }, +/mob/living/basic/mining/hivelord, +/turf/open/misc/asteroid/airless, +/area/space/nearstation) "whz" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -117344,19 +117159,6 @@ /obj/structure/table/glass, /turf/open/floor/wood, /area/station/hallway/primary/central) -"wmZ" = ( -/obj/machinery/door/window/brigdoor{ - name = "Creature Pen"; - req_access = list("research") - }, -/obj/effect/turf_decal/delivery, -/obj/effect/turf_decal/stripes, -/obj/machinery/door/poddoor/preopen{ - id = "xeno2"; - name = "Creature Cell #2" - }, -/turf/open/floor/engine, -/area/station/science/xenobiology) "wna" = ( /obj/structure/table/reinforced, /obj/machinery/door/firedoor, @@ -117374,7 +117176,7 @@ /obj/effect/turf_decal/delivery, /obj/structure/rack/gunrack, /obj/machinery/firealarm/directional/south, -/obj/effect/spawner/armory_spawn/microfusion, +/obj/effect/spawner/armory_spawn/shotguns, /turf/open/floor/iron/dark/corner{ dir = 8 }, @@ -117551,6 +117353,15 @@ dir = 8 }, /area/station/common/wrestling/arena) +"wpi" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/door/window/brigdoor/left/directional/north{ + name = "Creature Pen"; + req_access = list("research") + }, +/turf/open/floor/iron, +/area/station/science/xenobiology) "wpl" = ( /obj/effect/turf_decal/siding/thinplating{ dir = 1 @@ -118067,6 +117878,17 @@ }, /turf/open/floor/plating, /area/station/maintenance/department/security/prison_upper) +"wtZ" = ( +/obj/machinery/door/firedoor, +/obj/effect/turf_decal/bot, +/obj/effect/turf_decal/loading_area, +/obj/structure/cable, +/obj/machinery/door/window/brigdoor/right/directional/south{ + name = "Customs Desk"; + req_access = list("command") + }, +/turf/open/floor/iron/dark/side, +/area/station/security/checkpoint/customs/auxiliary) "wub" = ( /obj/effect/turf_decal/trimline/brown/filled/line{ dir = 6 @@ -118155,6 +117977,13 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/plating, /area/station/security/prison/upper) +"wuF" = ( +/obj/effect/decal/cleanable/dirt{ + icon_state = "dirt-flat-1" + }, +/obj/item/clothing/under/rank/cargo/miner, +/turf/open/misc/asteroid/airless, +/area/space/nearstation) "wuI" = ( /obj/structure/table/glass, /obj/item/petri_dish{ @@ -118249,18 +118078,6 @@ /obj/item/reagent_containers/cup/bucket, /turf/open/floor/iron, /area/station/maintenance/fore/upper) -"wvA" = ( -/obj/machinery/camera{ - c_tag = "Recreation - Barbershop Lower"; - dir = 5; - name = "hallway camera" - }, -/obj/structure/chair/comfy/barber_chair{ - dir = 8 - }, -/obj/structure/reagent_anvil, -/turf/open/floor/wood/tile, -/area/station/service/barber) "wvB" = ( /obj/effect/turf_decal/tile/red, /obj/structure/disposalpipe/segment{ @@ -118327,16 +118144,6 @@ "www" = ( /turf/closed/wall, /area/station/maintenance/department/security/lesser) -"wwx" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/door/window/left{ - name = "Coroner's Office"; - req_access = list("morgue") - }, -/turf/open/floor/iron/dark, -/area/station/medical/morgue) "wwD" = ( /obj/structure/disposalpipe/segment, /turf/open/floor/iron/smooth_large, @@ -118687,6 +118494,15 @@ }, /turf/open/floor/iron/dark/side, /area/station/ai_monitored/command/storage/eva) +"wzI" = ( +/obj/structure/railing/corner{ + dir = 4 + }, +/obj/effect/turf_decal/stripes/corner{ + dir = 8 + }, +/turf/open/floor/iron/smooth, +/area/station/cargo/miningdock) "wzP" = ( /obj/item/kirbyplants/random, /turf/open/floor/iron, @@ -119386,6 +119202,15 @@ /obj/machinery/light/no_nightlight/directional/south, /turf/open/floor/plating, /area/station/security/checkpoint/customs) +"wGa" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 6 + }, +/obj/machinery/door/window/left/directional/south{ + name = "Drone Bay" + }, +/turf/open/floor/plating, +/area/station/cargo/drone_bay) "wGe" = ( /obj/structure/closet/toolcloset, /obj/effect/turf_decal/bot, @@ -120022,6 +119847,16 @@ dir = 4 }, /area/station/hallway/primary/central/aft) +"wMO" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/door/window/brigdoor/right/directional/east{ + name = "Security Desk"; + req_access = list("security") + }, +/turf/open/floor/iron, +/area/station/security/checkpoint/escape) "wMT" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron/kitchen, @@ -120132,6 +119967,10 @@ /obj/structure/disposalpipe/segment{ dir = 4 }, +/obj/machinery/cell_charger, +/obj/item/stock_parts/cell/high, +/obj/item/stock_parts/cell/high, +/obj/item/stock_parts/cell/high, /turf/open/floor/iron/dark, /area/station/science/circuits) "wOl" = ( @@ -120805,22 +120644,6 @@ /obj/item/storage/box/mousetraps, /turf/open/floor/iron/dark/side, /area/station/hallway/primary/port) -"wVc" = ( -/obj/effect/turf_decal/stripes{ - dir = 4 - }, -/obj/effect/turf_decal/stripes/red/line{ - dir = 4 - }, -/obj/machinery/door/window/right{ - dir = 4; - name = "Mech Bay"; - req_access = list("robotics") - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/turf/open/floor/mineral/plastitanium/red, -/area/station/science/robotics/lab) "wVe" = ( /obj/effect/turf_decal/weather/sand{ dir = 4 @@ -120917,12 +120740,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/white, /area/station/medical/medbay/lobby) -"wWq" = ( -/obj/structure/railing/corner{ - dir = 4 - }, -/turf/open/floor/iron/smooth, -/area/station/cargo/miningdock) "wWy" = ( /obj/structure/cable, /obj/structure/disposalpipe/segment, @@ -121013,21 +120830,6 @@ /obj/effect/landmark/start/coroner, /turf/open/floor/iron/dark/small, /area/station/medical/morgue) -"wXt" = ( -/obj/machinery/door/window/left{ - dir = 4; - name = "Mass Driver Door"; - req_access = list("ordnance") - }, -/obj/effect/turf_decal/delivery, -/obj/effect/turf_decal/stripes{ - dir = 8 - }, -/obj/machinery/computer/pod/old/mass_driver_controller/ordnancedriver/longrange{ - pixel_y = 28 - }, -/turf/open/floor/iron/dark, -/area/station/science/ordnance/testlab) "wXw" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -121191,6 +120993,17 @@ /obj/structure/table/optable, /turf/open/floor/iron, /area/station/medical/surgery/theatre) +"wYZ" = ( +/obj/structure/railing{ + dir = 8 + }, +/obj/machinery/door/window/left/directional/south{ + name = "Fitness Ring" + }, +/turf/open/floor/iron/stairs{ + dir = 1 + }, +/area/station/commons/fitness) "wZc" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -121392,10 +121205,12 @@ /turf/open/floor/plating, /area/station/maintenance/port/fore) "xaN" = ( -/obj/structure/decorative/shelf/crates, -/turf/open/floor/iron/smooth_edge{ +/obj/machinery/conveyor_switch/oneway{ + id = "mining"; dir = 1 }, +/obj/effect/turf_decal/bot, +/turf/open/floor/iron/smooth, /area/station/cargo/miningdock) "xaU" = ( /obj/effect/landmark/event_spawn, @@ -121710,26 +121525,6 @@ /obj/item/radio/intercom/directional/south, /turf/open/floor/circuit, /area/station/command/gateway) -"xez" = ( -/obj/machinery/door/window/brigdoor{ - name = "Justice Chamber"; - req_access = list("armory") - }, -/obj/structure/window/reinforced/spawner/directional/west, -/obj/structure/window/reinforced/spawner/directional/east, -/obj/machinery/door/window/brigdoor{ - dir = 1; - name = "Justice Chamber"; - req_access = list("armory") - }, -/obj/machinery/door/firedoor, -/obj/effect/turf_decal/delivery, -/obj/machinery/door/poddoor/preopen{ - id = "executionfireblast" - }, -/obj/machinery/atmospherics/pipe/smart/simple/general/visible, -/turf/open/floor/iron/dark, -/area/station/security/execution/education) "xeE" = ( /obj/item/trash/syndi_cakes, /obj/structure/cable, @@ -121834,14 +121629,6 @@ }, /turf/open/floor/iron/dark, /area/station/maintenance/department/security/prison_upper) -"xfF" = ( -/obj/effect/decal/cleanable/dirt{ - icon_state = "dirt-flat-1" - }, -/obj/structure/xen_pylon, -/obj/structure/alien/weeds/xen, -/turf/open/misc/asteroid/airless, -/area/space/nearstation) "xfK" = ( /obj/item/kirbyplants/random, /obj/structure/extinguisher_cabinet/directional/north, @@ -122080,6 +121867,13 @@ /obj/machinery/portable_atmospherics/canister/oxygen, /turf/open/floor/iron/dark, /area/station/science/ordnance/storage) +"xih" = ( +/obj/structure/chair/office{ + dir = 1 + }, +/obj/machinery/door/window/left/directional/west, +/turf/open/floor/iron/dark, +/area/station/security/execution/education) "xii" = ( /obj/item/trash/energybar, /obj/effect/decal/cleanable/dirt{ @@ -122147,20 +121941,6 @@ /obj/machinery/atmospherics/pipe/smart/simple/scrubbers/visible, /turf/open/floor/plating, /area/station/engineering/atmos/hfr_room) -"xiJ" = ( -/obj/machinery/door/window/brigdoor/right{ - dir = 8; - id = "Cell 2"; - name = "Cell 2"; - req_access = list("security") - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/effect/turf_decal/vg_decals/numbers/two, -/turf/open/floor/iron/dark/side{ - dir = 8 - }, -/area/station/security/brig) "xiN" = ( /obj/structure/chair/sofa/right/brown, /turf/open/floor/carpet, @@ -122809,26 +122589,6 @@ }, /turf/open/floor/iron, /area/station/science/explab) -"xpC" = ( -/obj/machinery/conveyor{ - dir = 4; - id = "garbage" - }, -/obj/machinery/door/window/right{ - base_state = "left"; - icon_state = "left"; - name = "Danger: Conveyor Access"; - req_access = list("maint_tunnels") - }, -/obj/machinery/door/window/right{ - base_state = "left"; - dir = 1; - icon_state = "left"; - name = "Danger: Conveyor Access"; - req_access = list("maint_tunnels") - }, -/turf/open/floor/plating, -/area/station/maintenance/disposal) "xpM" = ( /obj/structure/cable, /obj/structure/disposalpipe/segment{ @@ -123096,6 +122856,24 @@ /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, /turf/open/floor/iron, /area/station/cargo/sorting) +"xsu" = ( +/obj/structure/window/reinforced/spawner/directional/south, +/obj/machinery/disposal/delivery_chute{ + dir = 4 + }, +/obj/structure/plasticflaps, +/obj/structure/disposalpipe/trunk{ + dir = 4 + }, +/obj/effect/turf_decal/stripes{ + dir = 4 + }, +/obj/machinery/door/window/right/directional/east{ + req_access = list("cargo"); + name = "Medbay Deliveries" + }, +/turf/open/floor/iron/dark, +/area/station/cargo/sorting) "xsC" = ( /obj/item/stack/ore/iron, /turf/open/floor/plating/airless, @@ -123422,21 +123200,6 @@ }, /turf/open/floor/iron, /area/station/hallway/primary/upper) -"xvb" = ( -/obj/machinery/door/window/right{ - dir = 8; - req_access = list("eva") - }, -/obj/machinery/status_display/evac/directional/north, -/obj/machinery/light/directional/north, -/obj/machinery/camera/directional/north{ - c_tag = "Bridge - E.V.A. Fore"; - name = "command camera" - }, -/turf/open/floor/iron/stairs{ - dir = 4 - }, -/area/station/ai_monitored/command/storage/eva/upper) "xvc" = ( /obj/effect/spawner/random/trash/moisture_trap, /turf/open/floor/plating, @@ -123582,6 +123345,13 @@ /obj/effect/spawner/structure/window/reinforced, /turf/open/floor/plating, /area/station/security/checkpoint/customs) +"xwM" = ( +/obj/machinery/door/window/brigdoor/right/directional/north{ + name = "Shooting Range"; + req_access = list("security") + }, +/turf/open/floor/iron/dark, +/area/station/security/range) "xwP" = ( /obj/structure/chair, /turf/open/floor/iron/dark, @@ -123917,11 +123687,6 @@ dir = 8 }, /area/station/security/prison) -"xAS" = ( -/obj/effect/mapping_helpers/broken_floor, -/obj/structure/spacevine/xen, -/turf/open/floor/plating/airless, -/area/space/nearstation) "xAU" = ( /obj/effect/turf_decal/stripes, /obj/machinery/light/directional/south, @@ -125080,18 +124845,6 @@ /obj/effect/decal/cleanable/blood, /turf/open/floor/plating, /area/station/maintenance/department/science/xenobiology) -"xMz" = ( -/obj/machinery/atmospherics/pipe/smart/simple/general/visible{ - dir = 10 - }, -/obj/machinery/door/window/left{ - base_state = "right"; - dir = 4; - icon_state = "right"; - name = "Gas Ports" - }, -/turf/open/floor/iron/dark, -/area/station/security/execution/education) "xME" = ( /obj/machinery/power/port_gen/pacman/pre_loaded, /turf/open/floor/plating, @@ -125392,6 +125145,18 @@ /obj/structure/cable, /turf/open/floor/iron, /area/station/maintenance/starboard/fore) +"xPl" = ( +/obj/structure/table/reinforced, +/obj/item/folder, +/obj/item/folder/yellow, +/obj/item/pen, +/obj/machinery/door/firedoor, +/obj/machinery/door/window/right/directional/north{ + name = "Cargo Desk"; + req_access = list("cargo") + }, +/turf/open/floor/iron/dark, +/area/station/cargo/office) "xPn" = ( /obj/effect/turf_decal/delivery, /obj/machinery/computer/cargo/request{ @@ -125522,6 +125287,13 @@ /obj/structure/cable, /turf/open/floor/plating, /area/station/command/gateway) +"xRi" = ( +/obj/machinery/door/window/brigdoor/left/directional/south{ + name = "Creature Pen"; + req_access = list("research") + }, +/turf/open/floor/engine, +/area/station/science/xenobiology) "xRw" = ( /obj/effect/turf_decal/bot, /obj/structure/reagent_dispensers/wall/peppertank/directional/north, @@ -125695,18 +125467,6 @@ }, /turf/open/floor/iron/dark, /area/station/security/office) -"xTz" = ( -/obj/machinery/door/window/left{ - dir = 8; - name = "Security Mech Recharge Dock"; - req_access = list("security") - }, -/obj/structure/cable, -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ - dir = 4 - }, -/turf/open/floor/iron, -/area/station/ai_monitored/security/armory) "xTA" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -126441,13 +126201,6 @@ /obj/machinery/airalarm/directional/south, /turf/open/floor/iron/dark, /area/station/ai_monitored/turret_protected/aisat_interior) -"yar" = ( -/obj/effect/decal/cleanable/dirt{ - icon_state = "dirt-flat-1" - }, -/obj/structure/spacevine/xen, -/turf/open/floor/plating/airless, -/area/space/nearstation) "yat" = ( /obj/machinery/atmospherics/pipe/smart/simple/orange/hidden{ dir = 9 @@ -126875,14 +126628,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/plating, /area/station/maintenance/department/medical) -"ydI" = ( -/obj/effect/decal/cleanable/dirt{ - icon_state = "dirt-flat-1" - }, -/obj/structure/alien/weeds/xen, -/obj/structure/flora/ocean/coral, -/turf/open/misc/asteroid/airless, -/area/space/nearstation) "ydK" = ( /obj/effect/turf_decal/stripes/white/line{ dir = 8 @@ -127396,6 +127141,17 @@ }, /turf/open/floor/iron/white, /area/station/medical/surgery) +"yif" = ( +/obj/effect/turf_decal/delivery, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/door/window/left/directional/south{ + name = "Service Deliveries"; + req_access = list("service") + }, +/turf/open/floor/iron/dark, +/area/station/hallway/secondary/service) "yig" = ( /obj/effect/decal/cleanable/oil, /obj/effect/decal/cleanable/dirt{ @@ -127552,6 +127308,12 @@ "yjE" = ( /turf/closed/wall, /area/station/maintenance/thruster_room/central) +"yjL" = ( +/obj/effect/turf_decal/bot, +/obj/machinery/hydroponics/constructable, +/obj/machinery/door/window/right/directional/north, +/turf/open/floor/iron/dark, +/area/station/service/hydroponics) "yjN" = ( /obj/effect/turf_decal/tile/dark_blue/half/contrasted{ dir = 1 @@ -127571,14 +127333,6 @@ /obj/effect/spawner/random/trash/grille_or_waste, /turf/open/floor/plating, /area/station/maintenance/department/medical/central) -"yjZ" = ( -/obj/machinery/door/window/brigdoor/right{ - dir = 4; - name = "Crematorium"; - req_access = list("security") - }, -/turf/open/floor/iron/dark, -/area/station/security/prison) "ykd" = ( /obj/structure/cable, /obj/structure/disposalpipe/segment{ @@ -140515,7 +140269,7 @@ fZI fZI fZI fZI -lZP +fZI fZI fZI fZI @@ -141029,7 +140783,7 @@ fZI fZI fZI fZI -qJR +fZI fZI fZI fZI @@ -141543,7 +141297,7 @@ fZI fZI fZI fZI -pnq +fZI fZI fZI fZI @@ -142057,7 +141811,7 @@ fZI fZI fZI fZI -jAo +fZI fZI fZI fZI @@ -146420,10 +146174,10 @@ kuh cFU cFU cFU -odJ +cwE hro oGo -qMO +vxf cFU cFU use @@ -146933,7 +146687,7 @@ gXE eAV cFU knN -oyX +mOI rNY hCU nFN @@ -147089,8 +146843,8 @@ fZI fZI fZI fZI -pav -pav +bsG +bsG qfL exN bsG @@ -147155,7 +146909,7 @@ uVc ewE xoK uEt -fcO +oKY iKV mWh pCR @@ -147344,11 +147098,11 @@ fZI fZI fZI fZI -laQ -laQ -laQ -laQ -yar +iKs +iKs +iKs +iKs +tYr cyE ojX ojX @@ -147450,7 +147204,7 @@ cFU cFU tIo nZM -kAn +wMO nZM cFU cFU @@ -147600,14 +147354,14 @@ fZI fZI fZI fZI -laQ -laQ -kTL -lDy -laQ -laQ -ron -xAS +iKs +iKs +pXm +egv +iKs +iKs +xsC +sJq fZI fZI svq @@ -147721,7 +147475,7 @@ wBy jMZ aau oeS -unM +wtZ deY exJ fws @@ -147856,14 +147610,14 @@ fZI fZI fZI fZI -mSV -laQ -hlr -pdF -lmu -ydI -laQ -dAd +iKs +iKs +pXm +pXm +tNu +hDW +iKs +uqb brq hfg xUe @@ -147966,7 +147720,7 @@ cLd vCP lpe mLd -gVW +oHB wPU hKt kfF @@ -148113,13 +147867,13 @@ fZI fZI fZI fZI -laQ -oMV -lDy -xfF -lDy -lDy -laQ +iKs +egv +hDW +qYy +jLo +egv +iKs fVE sJq wGn @@ -148370,15 +148124,15 @@ fZI fZI fZI fZI -laQ -ydI -rpC -lDy -sXO -dOT -laQ -jVZ -pWI +iKs +hDW +whx +hDW +wuF +nGs +iKs +vAF +xUe xsC tYr tkf @@ -148447,7 +148201,7 @@ pCR wTv pBo mDo -bIv +wYZ uDU uDU uDU @@ -148627,13 +148381,13 @@ fZI fZI fZI fZI -laQ -hlr -lDy -bpw -laQ -laQ -laQ +iKs +hDW +hDW +egv +iKs +iKs +iKs mjE mjE mjE @@ -148884,13 +148638,13 @@ fZI fZI fZI fZI -laQ -laQ -laQ -laQ -laQ +iKs +iKs +iKs +iKs +iKs fZI -qGK +exN mjE bba hLH @@ -148991,7 +148745,7 @@ xMr oyh gJC kvS -wvA +tyO qCy lGU oDK @@ -149144,10 +148898,10 @@ fZI fZI fZI fZI -pav -pav +bsG +bsG fZI -xAS +sJq mjE euE inc @@ -149402,7 +149156,7 @@ fZI fZI fZI fZI -pav +bsG bsG mjE mjE @@ -149509,7 +149263,7 @@ fwh qCy qhK wlw -ksK +bKD huQ dSg oXz @@ -149764,8 +149518,8 @@ mUu mUu mUu qCy -dsU -kWY +oub +dwq oDw irJ phI @@ -151538,7 +151292,7 @@ hcn oyE aJl tUC -hth +feu bnk aZG wYH @@ -153054,7 +152808,7 @@ dhS vGI pPO dhS -spB +cIA uQp arQ ocx @@ -153331,7 +153085,7 @@ jwJ kro mUP bWr -dea +ndw fHr fHr rJj @@ -154043,7 +153797,7 @@ hZI osb hZI pPF -bDB +oBL hxO tMz mjE @@ -154615,7 +154369,7 @@ qku cST lAZ lAZ -otE +dYd lAZ sXk jgg @@ -154873,12 +154627,12 @@ ofm lAZ tiZ uNw -pAI +vYJ qUR nRk eNd uuF -atZ +rxl sMu iFl xLo @@ -155082,7 +154836,7 @@ hGf mZP hGf piO -eeB +cyK hGf bii bii @@ -155400,7 +155154,7 @@ kty kqE uND lkV -iDh +dYp sHp uSe hpb @@ -156096,7 +155850,7 @@ lJt lJt lJt vcQ -sxj +xwM sjd lJt lJt @@ -156471,7 +156225,7 @@ ujB qnR hHI wEZ -fik +hvm lVP hxd iLS @@ -157147,7 +156901,7 @@ lBJ ljh pvr qmI -lRZ +ahd vqv pvj hGf @@ -158015,7 +157769,7 @@ oqz nFl mze nPr -nJg +kgD oeA maz gKc @@ -158268,7 +158022,7 @@ wHI wHI uzo gnI -efG +sCA gnI uzo uzo @@ -158742,8 +158496,8 @@ twB aMQ sYL cYn -nrY -gry +uQj +muW yhm yhm sCX @@ -159206,7 +158960,7 @@ nJA xXo oSe aqM -uLb +qFL iXf bkP fPl @@ -159225,7 +158979,7 @@ rig kbZ nRo tpd -lxB +rye wup wup jKx @@ -159709,7 +159463,7 @@ lHi dlN gkm gkm -ibj +uBa gkm gkm abJ @@ -159770,8 +159524,8 @@ qjx aMQ lDp cYn -adO -hlP +hEP +qON yhm yhm sCX @@ -159823,7 +159577,7 @@ hMm gji mjw gbf -lXc +sSK oLA lsQ tUT @@ -160314,7 +160068,7 @@ liN xJH dvB dvB -mfp +lga dvB dvB xJH @@ -160737,7 +160491,7 @@ gkm gkm gkm ntH -xTz +sOu wne gkm eIM @@ -161030,7 +160784,7 @@ inQ qDH mHE kAG -fnJ +uer lCe gSl lRu @@ -161277,8 +161031,8 @@ ggP vIU mHE kDi -ubt -ubt +yjL +yjL anb uuw dqZ @@ -161520,7 +161274,7 @@ ykW ykW qsl vPn -jrJ +dmz vPo tNE ykG @@ -161551,8 +161305,8 @@ fsx vdr kCk onf -lhO -gzV +aqj +nND rNa rNa rNa @@ -161779,9 +161533,9 @@ qak cVu qak iEG -xiJ +boP vPo -qAC +hMB vPo hGf sXE @@ -162031,7 +161785,7 @@ fWt ksn pSY ljt -byV +aYl qak qak qak @@ -162048,17 +161802,17 @@ hDp dVy ucQ qpu -aYq -qbu +rDq +lRj qBg -aYq -qbu +rDq +lRj wba -aYq -qbu +rDq +lRj hdb -aYq -eLq +rDq +cSp ntA mHE mHE @@ -162293,9 +162047,9 @@ wvo cVu qak rcC -vww +kHO vPo -edo +vdh vPo hGf gBM @@ -162305,17 +162059,17 @@ ocl dVy qxf okI -eUl -uCL +qbb +hrr eOU -eUl -uCL +qbb +hrr eNn -eUl -uCL +qbb +hrr cfN -eUl -lCP +qbb +nwm xrD jYG kxD @@ -162548,7 +162302,7 @@ ykW ykW dKZ nuj -jTG +omJ vPo rVq kHM @@ -162562,21 +162316,21 @@ xxl dVy sFi okI -lJF -mnv +eDK +uXo qBg -nLk -mnv +eDK +uXo wba -nLk -mnv +eDK +uXo hdb -nLk -nOD +eDK +lSY nAE jyy uOJ -hym +jOu gom gWE gWE @@ -163313,7 +163067,7 @@ gkm sak tif iLK -bUG +ike oaq wvo qak @@ -163604,7 +163358,7 @@ qPh alt laX okJ -iNe +ugB mHE lGz tFN @@ -163638,7 +163392,7 @@ wUv xnG bLF hmV -dOL +roO sNu lDc lFy @@ -163812,8 +163566,8 @@ cLU cLU cLU cLU -net -xMz +hWG +okt chB cLU cLU @@ -164068,7 +163822,7 @@ uJO gHt mcE nQK -xez +vRw jsH usE qeT @@ -164078,7 +163832,7 @@ nJY pQr uCY rZC -yjZ +spR mzV vxj ssh @@ -164379,7 +164133,7 @@ vpn pdU hAL vdy -jDk +lYy wZQ kzi ord @@ -164627,7 +164381,7 @@ lZC bma afi dVy -fWu +yif ouH ouH wXw @@ -164706,8 +164460,8 @@ cLk bLI swy eGd -nuU -sdV +sBt +sBt akL vLv fZH @@ -164841,7 +164595,7 @@ cLU cLU cLU jPr -irB +xih rRU cLU cLU @@ -164908,7 +164662,7 @@ tOE tAE kNq hZB -tmq +gvR eGI kVb aky @@ -164963,8 +164717,8 @@ pWL qug sBt jvL -sBt -sBt +urM +dLw wSf oCM gzG @@ -165172,11 +164926,11 @@ wlh hvw odz smr -mbb -ksx -tWY -tFP -cbc +hhw +kpq +boG +gFK +xsu suZ xti sut @@ -165220,8 +164974,8 @@ sBt sBt sBt wYy -urM -dLw +maA +iox wSf gkT puX @@ -165441,7 +165195,7 @@ lNl mcl usq uvM -uth +xPl iVl wgo afC @@ -165478,7 +165232,7 @@ nuU xJH wYy maA -iox +sdV uFl jzt sLj @@ -165615,11 +165369,11 @@ caC xJH xJH eKU -bDR +eBx jTO keD sHg -vFh +ojn eKU fBz fBz @@ -165668,7 +165422,7 @@ qIW ooc tqh kqf -hsJ +umm lDB wQt xqh @@ -165941,7 +165695,7 @@ tAt jVo uTJ xti -wcy +txJ sFt wLn qKF @@ -165953,7 +165707,7 @@ kgd teT dyJ voV -evl +lef hHv rqC bSf @@ -166209,7 +165963,7 @@ nxW czQ qvv iYm -tsu +cbL mTQ mTQ nup @@ -166701,7 +166455,7 @@ pdU uAs cmQ cvR -uRV +wGa wAE dbr jdz @@ -168243,7 +167997,7 @@ sWA xIy jUp nPo -xpC +rGs lyW xlq nsi @@ -168266,7 +168020,7 @@ wwD fkA asX ilS -xaN +sdF mgL gXZ auv @@ -168502,7 +168256,7 @@ jUp vEx apo xga -lwm +cfS ycA eFn sIq @@ -168523,7 +168277,7 @@ fVT oTl uSr kGC -naT +sdF mgL ktY ktY @@ -168760,7 +168514,7 @@ jSY kSC trl sMx -gLX +sMX eFn weW vaL @@ -168780,9 +168534,9 @@ txz oTl tpI kGC -icj +sCu lVQ -ktY +xaN sHB cve ktY @@ -168792,8 +168546,8 @@ iBc mvD cve cNn -jUu -htI +kxo +rdt sZm kyD pEc @@ -169037,7 +168791,7 @@ kGC sej kGC ilS -bld +ewv lVQ ktY bDS @@ -169049,8 +168803,8 @@ ktY wTQ pXg txY -rGN -djJ +dJV +mls leG kyD pEc @@ -169294,7 +169048,7 @@ mpJ qht wWH xAg -gmM +sCu lVQ ktY ryA @@ -169306,8 +169060,8 @@ ktY ryA mYd txY -nSH -jvp +dJV +oww bti kyD pEc @@ -169563,8 +169317,8 @@ ktY djJ djJ txY -qrp -uGt +dJV +uLj kgv kyD pEc @@ -169820,8 +169574,8 @@ ktY vHy bvN txY -vHy -bvN +dJV +oww sZm wYj pEc @@ -170045,7 +169799,7 @@ pxb tWP vMy dyT -lMu +sGz nfx pxb pxb @@ -170077,8 +169831,8 @@ ouO ouO bZm txY -ktY -mMw +eBP +jnU sZm kyD pEc @@ -170096,7 +169850,7 @@ iij cWd xKf xKf -nSl +mHg uFN aCz tJP @@ -170334,8 +170088,8 @@ gyg gvD qFW kOB -ktY -mMw +dJV +oww bti kyD pEc @@ -170589,10 +170343,10 @@ iKI mtw jVB jVB -tnT -cLb -wWq -mMw +oKf +btO +wzI +bIa kgv kyD pEc @@ -170602,11 +170356,11 @@ bDA feL bDA xwK -snt +qQW xwK bDA awV -kFy +uwd awV juF jLb @@ -214017,7 +213771,7 @@ ksm eLU eLU eLU -oiv +gPv bHt mjp eLU @@ -217815,7 +217569,7 @@ mNM ePv cEl lvS -hHa +gSB iVh hEi ami @@ -218139,7 +217893,7 @@ cAp iYk gNW bfo -pEJ +paJ uJA aOH pzS @@ -218890,7 +218644,7 @@ qvX qvX qvX gOY -dEC +fPB gOY eAQ uor @@ -219371,9 +219125,9 @@ tml uyR frb jmH -opw +pHk pJT -qlV +cxW bSS fRy cRb @@ -219650,7 +219404,7 @@ ooa jCN ooa uUk -pey +qKz nKr sTk qjg @@ -220678,7 +220432,7 @@ qvs fCd exn mzM -cpO +ucW dGB sTk lIZ @@ -221201,10 +220955,10 @@ niB wAk quF dkX -thx -dUi +ezF +uqt scI -wVc +qjE mpe gCg hbU @@ -221727,7 +221481,7 @@ bDH uor hJR dfN -nAb +rKJ eIC hJR uJL @@ -222022,8 +221776,8 @@ fDT mBc mOS oEB -cJl -pux +hWT +skq mzy qaH lXo @@ -222272,7 +222026,7 @@ uTg cmJ kpH cWg -iAk +jUX rYe bSd fDT @@ -222750,7 +222504,7 @@ xKX nrx lir sXt -ils +kyI sXt lir lir @@ -223289,7 +223043,7 @@ soz soz jYw irI -kBE +cZL rJT byl nsB @@ -223302,12 +223056,12 @@ omW gDN hog euU -lhM -rSx +xRi +tft bOU -mya -eQk -lLv +wpi +eMR +mlr euU pCC fDT @@ -223521,7 +223275,7 @@ ort oPZ qsc mia -tNO +uBP lSX lSX lSX @@ -223728,7 +223482,7 @@ miE lGo xai xai -cVx +kwG jYP xai jYP @@ -223968,9 +223722,9 @@ syx wFN iig jiu -fCT +pxn eNV -bKw +pJf jiu jiu soz @@ -224073,12 +223827,12 @@ xAB gDN jQV euU -lhM -wmZ +xRi +iRa bOU mya -ahB -lLv +vHj +mlr euU aYz fDT @@ -224119,7 +223873,7 @@ dFU psD cKf hOo -fxv +ebp nxU ivJ oOq @@ -224222,7 +223976,7 @@ kzz dep xIf wzY -bTX +uOS jiu jiu lCL @@ -224632,7 +224386,7 @@ gEo tYH qNB dFU -wbd +moK dFU dFU dFU @@ -224738,7 +224492,7 @@ tVq kJQ qDo jiu -oWl +lYQ lGW dKT fMS @@ -224812,7 +224566,7 @@ oXN qcP hYi tGH -gqu +fYj kKB taU swp @@ -224848,8 +224602,8 @@ nsB nsB qii lhr -pTS -lLv +cER +mlr euU aYz fDT @@ -225146,7 +224900,7 @@ svu heN wYe dFU -eOf +pBV dFU dFU dFU @@ -225250,7 +225004,7 @@ jmZ dep nLV gmt -pQX +bOx jiu jiu lCL @@ -225306,7 +225060,7 @@ mMJ xtV eUH pKz -hNA +ugc uol lcX mCP @@ -225510,9 +225264,9 @@ fwu wFN uPf jiu -skg +gqZ bSa -clj +pyq jiu jiu soz @@ -225615,12 +225369,12 @@ cZU gDN hog euU -lhM -nid +xRi +dhO eUV kzI -iQM -lLv +uQW +mlr euU pCC fDT @@ -225661,7 +225415,7 @@ dFU vJL scw bsA -gHC +iEO ogx aFk oOq @@ -226386,12 +226140,12 @@ bWW gDN jQV euU -lhM -ncE +xRi +mlz eUV kzI -sQJ -lLv +onD +mlr euU aYz fDT @@ -226613,7 +226367,7 @@ wae xKN lqk cIt -rTs +rah xFq xFq xFq @@ -226866,7 +226620,7 @@ aMt whu lqk pYm -bcX +uYB pYm lqk oEx @@ -227612,7 +227366,7 @@ pyI qYp vqm xMH -aIz +tHM evg vUe spp @@ -228106,7 +227860,7 @@ eib njQ eib jNv -wwx +hfl imQ vOu pzK @@ -228621,7 +228375,7 @@ vHK kAM cjD vHK -kUv +gcr fhS gxq vHK @@ -228646,7 +228400,7 @@ dnN nRp cra eFU -siQ +bdM uTU cra aMt @@ -228844,11 +228598,11 @@ loJ soz kaj kaj -xvb +vFg kcj oeq tsb -vgE +peH kaj kaj hIx @@ -229120,8 +228874,8 @@ jOx vtt oNL vtt -pPz -bXS +pCS +ekR vtt rRM gfL @@ -229437,7 +229191,7 @@ jHY jHY aQc xWZ -kPl +dsh jHY jHY jHY @@ -229716,7 +229470,7 @@ wsk evv yjD kUp -gga +kXo dEY uiY ofB @@ -229900,7 +229654,7 @@ vnC isF isF tCr -kYa +eBt tCr isF uzK @@ -229930,10 +229684,10 @@ oiF omQ qdq ggp -cxx +aoz uGK xAA -qlX +utV pLB crS tYD @@ -229975,7 +229729,7 @@ yjD hJE lrX leC -dxT +gsF xbd xDl iZs @@ -231176,8 +230930,8 @@ fUa gTZ gTZ aOC -vlf -iTD +toE +uvY iZC gTZ gTZ @@ -231235,7 +230989,7 @@ eEJ uwy aQY jsj -mpE +diE jsj aQY xIX @@ -231481,7 +231235,7 @@ dBC sZB pVw aEa -dzF +fWk iUQ kfe tlC @@ -232263,7 +232017,7 @@ jrg oXE aQY jsj -aJt +pDD jsj aQY aBK @@ -233061,7 +232815,7 @@ ulx ulx ulx lLn -wXt +cLr eQK lLn lLn @@ -234241,11 +233995,11 @@ qrm uhZ bjE uQC -qNP +lYV iUS jNU cab -qMV +bpn rXy xbB mTZ @@ -237875,7 +237629,7 @@ lGd lkh sPm ele -mYU +evG qoY viC viC diff --git a/_maps/map_files/NorthStar/north_star.dmm b/_maps/map_files/NorthStar/north_star.dmm index 8252794b3db..63a8be2d8cf 100644 --- a/_maps/map_files/NorthStar/north_star.dmm +++ b/_maps/map_files/NorthStar/north_star.dmm @@ -1435,15 +1435,6 @@ dir = 4 }, /area/station/hallway/secondary/exit) -"asu" = ( -/obj/machinery/camera/autoname/directional/north, -/obj/structure/sign/warning/vacuum{ - pixel_y = 32 - }, -/turf/open/floor/iron/dark/side{ - dir = 1 - }, -/area/station/hallway/floor1/aft) "asw" = ( /obj/machinery/telecomms/server/presets/science, /turf/open/floor/circuit/telecomms, @@ -2890,8 +2881,7 @@ }, /area/station/hallway/floor3/aft) "aMo" = ( -/obj/machinery/door/window/right/directional/west{ - dir = 2; +/obj/machinery/door/window/right/directional/south{ name = "Gateway Access"; req_access = list("gateway") }, @@ -4211,6 +4201,15 @@ /obj/machinery/newscaster/directional/south, /turf/open/floor/wood/parquet, /area/station/commons/dorms/room2) +"bdo" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/sign/poster/contraband/random/directional/east, +/obj/machinery/microwave{ + pixel_y = 6 + }, +/obj/structure/table, +/turf/open/floor/catwalk_floor/iron, +/area/station/cargo/miningdock) "bdx" = ( /obj/structure/railing/corner, /obj/structure/chair/stool/bar/directional/east, @@ -4488,6 +4487,12 @@ /obj/machinery/light/floor, /turf/open/floor/iron/dark/textured, /area/station/command/heads_quarters/ce) +"bgw" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/reagentgrinder, +/obj/structure/table, +/turf/open/floor/catwalk_floor/iron, +/area/station/cargo/miningdock) "bgz" = ( /obj/machinery/mech_bay_recharge_port{ dir = 1 @@ -6593,15 +6598,6 @@ /obj/structure/cable, /turf/open/floor/iron/dark/side, /area/station/command/bridge) -"bEp" = ( -/obj/effect/turf_decal/tile/bar/opposingcorners{ - dir = 1 - }, -/obj/structure/table, -/obj/item/storage/box/donkpockets, -/obj/machinery/light/directional/east, -/turf/open/floor/iron/checker, -/area/station/cargo/miningdock) "bED" = ( /obj/structure/table/reinforced, /obj/item/storage/toolbox/mechanical{ @@ -6743,9 +6739,7 @@ }, /area/station/ai_monitored/command/storage/eva) "bGV" = ( -/obj/machinery/door/window/brigdoor{ - dir = 1 - }, +/obj/machinery/door/window/brigdoor/left/directional/north, /mob/living/basic/pet/fox, /turf/open/floor/noslip, /area/station/maintenance/floor1/port) @@ -10252,6 +10246,13 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron/textured_large, /area/station/hallway/secondary/exit/departure_lounge) +"cCC" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/chair{ + dir = 8 + }, +/turf/open/floor/iron, +/area/station/cargo/miningdock) "cCE" = ( /obj/effect/turf_decal/trimline/brown/warning{ dir = 8 @@ -10480,6 +10481,14 @@ /obj/item/pen/fountain, /turf/open/floor/carpet/blue, /area/station/command/heads_quarters/hop) +"cGM" = ( +/obj/structure/cable, +/obj/machinery/conveyor{ + dir = 5; + id = "mining" + }, +/turf/open/floor/iron/checker, +/area/station/cargo/miningdock) "cGQ" = ( /obj/machinery/modular_computer/preset/civilian{ dir = 4 @@ -10608,13 +10617,10 @@ /area/station/service/hydroponics/garden) "cIo" = ( /obj/structure/table/reinforced, -/obj/machinery/door/window/left/directional/west{ - base_state = "right"; - icon_state = "right"; +/obj/machinery/door/window/right/directional/west{ name = "Outer Window" }, -/obj/machinery/door/window/brigdoor{ - dir = 4; +/obj/machinery/door/window/brigdoor/left/directional/east{ name = "Security Desk"; req_access = list("security") }, @@ -10627,6 +10633,14 @@ /obj/structure/chair/stool/bar/directional/east, /turf/open/floor/wood, /area/station/service/bar/atrium) +"cIt" = ( +/obj/machinery/firealarm/directional/south, +/obj/effect/turf_decal/stripes/line, +/obj/effect/turf_decal/tile/brown/opposingcorners{ + dir = 1 + }, +/turf/open/floor/iron/checker, +/area/station/cargo/miningdock) "cIE" = ( /obj/effect/turf_decal/stripes/line{ dir = 4 @@ -11253,19 +11267,6 @@ /obj/machinery/status_display/ai/directional/north, /turf/open/floor/iron/dark, /area/station/command/bridge) -"cRk" = ( -/obj/effect/turf_decal/tile/bar/opposingcorners{ - dir = 1 - }, -/obj/structure/chair{ - dir = 8 - }, -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ - dir = 1 - }, -/obj/structure/cable, -/turf/open/floor/iron/checker, -/area/station/cargo/miningdock) "cRs" = ( /obj/machinery/power/apc/auto_name/directional/east, /obj/structure/cable, @@ -13181,20 +13182,6 @@ /obj/machinery/light/small/directional/east, /turf/open/floor/iron/dark/telecomms, /area/station/tcommsat/server) -"dsJ" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 8 - }, -/obj/structure/chair/plastic{ - dir = 8 - }, -/obj/item/toy/plush/lizard_plushie/space/green{ - name = "Warns-The-Fool"; - pixel_x = -3; - pixel_y = 2 - }, -/turf/open/floor/iron/dark/airless, -/area/station/hallway/floor1/aft) "dtb" = ( /obj/machinery/door/airlock/science/glass{ name = "Break Room" @@ -14643,6 +14630,12 @@ }, /turf/open/floor/iron/smooth_large, /area/station/hallway/secondary/entry) +"dMO" = ( +/obj/structure/sign/warning/chem_diamond/directional/north, +/turf/open/floor/iron/dark/side{ + dir = 1 + }, +/area/station/hallway/floor1/aft) "dMV" = ( /obj/effect/turf_decal/trimline/green/warning{ dir = 9 @@ -16708,9 +16701,7 @@ /turf/open/floor/iron, /area/station/hallway/floor2/fore) "enB" = ( -/obj/machinery/door/window/brigdoor{ - dir = 1 - }, +/obj/machinery/door/window/brigdoor/left/directional/north, /mob/living/basic/mothroach, /turf/open/floor/noslip, /area/station/maintenance/floor1/port) @@ -17709,6 +17700,16 @@ }, /turf/open/floor/iron/dark/small, /area/station/science/xenobiology) +"eCD" = ( +/obj/machinery/airalarm/directional/east, +/obj/structure/railing/corner{ + dir = 8 + }, +/obj/effect/turf_decal/tile/brown/opposingcorners{ + dir = 1 + }, +/turf/open/floor/iron/checker, +/area/station/cargo/miningdock) "eCJ" = ( /obj/structure/railing, /obj/structure/table, @@ -20647,13 +20648,6 @@ /obj/structure/sign/departments/cargo/directional/west, /turf/open/floor/iron/dark/smooth_large, /area/station/hallway/floor1/aft) -"fvS" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 1 - }, -/obj/effect/turf_decal/stripes/line, -/turf/open/floor/plating/airless, -/area/station/hallway/floor1/aft) "fvV" = ( /obj/effect/turf_decal/tile/red/half/contrasted{ dir = 1 @@ -21299,6 +21293,12 @@ /obj/machinery/firealarm/directional/south, /turf/open/floor/carpet/orange, /area/station/command/heads_quarters/qm) +"fFT" = ( +/obj/machinery/camera/autoname/directional/north, +/turf/open/floor/iron/dark/side{ + dir = 1 + }, +/area/station/hallway/floor1/aft) "fFY" = ( /obj/effect/spawner/structure/window/reinforced, /obj/structure/cable, @@ -23323,11 +23323,6 @@ /obj/effect/spawner/random/structure/crate_abandoned, /turf/open/floor/pod/light, /area/station/maintenance/floor1/port/aft) -"gha" = ( -/obj/effect/spawner/structure/window/reinforced, -/obj/structure/cable, -/turf/open/floor/plating, -/area/station/cargo/miningdock) "ghg" = ( /obj/effect/turf_decal/trimline/yellow/warning{ dir = 10 @@ -24257,11 +24252,6 @@ }, /turf/open/floor/iron/dark/smooth_large, /area/station/service/kitchen/abandoned) -"gun" = ( -/obj/effect/turf_decal/bot, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/textured_large, -/area/station/cargo/storage) "gup" = ( /obj/structure/frame/machine{ anchored = 1 @@ -24487,14 +24477,6 @@ /obj/structure/sign/poster/official/random/directional/south, /turf/open/floor/iron/dark/side, /area/station/hallway/floor2/fore) -"gxB" = ( -/obj/effect/turf_decal/tile/bar/opposingcorners{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/cable, -/turf/open/floor/iron/checker, -/area/station/cargo/miningdock) "gxH" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -25215,14 +25197,6 @@ }, /turf/open/floor/wood/tile, /area/station/command/heads_quarters/captain) -"gGP" = ( -/obj/effect/turf_decal/tile/bar/opposingcorners{ - dir = 1 - }, -/obj/machinery/computer/security/telescreen/entertainment/directional/north, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/checker, -/area/station/cargo/miningdock) "gHi" = ( /obj/structure/table/wood, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -27003,7 +26977,7 @@ /area/station/medical/pharmacy) "heS" = ( /obj/structure/bed/double, -/obj/item/bedsheet/dorms_double, +/obj/effect/spawner/random/bedsheet/double, /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ dir = 8 }, @@ -27045,7 +27019,7 @@ /area/station/maintenance/floor1/starboard/aft) "hfy" = ( /obj/structure/bed/double, -/obj/item/bedsheet/dorms_double, +/obj/effect/spawner/random/bedsheet/double, /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ dir = 8 }, @@ -29044,14 +29018,6 @@ /obj/effect/spawner/random/maintenance, /turf/open/floor/iron/dark, /area/station/maintenance/floor2/starboard/aft) -"hGT" = ( -/obj/effect/turf_decal/tile/bar/opposingcorners{ - dir = 1 - }, -/obj/structure/chair, -/obj/item/radio/intercom/directional/west, -/turf/open/floor/iron/checker, -/area/station/cargo/miningdock) "hGW" = ( /obj/structure/disposalpipe/segment{ dir = 4 @@ -30331,13 +30297,6 @@ }, /turf/open/floor/carpet/green, /area/station/service/abandoned_gambling_den) -"hXO" = ( -/obj/effect/turf_decal/tile/bar/opposingcorners{ - dir = 1 - }, -/obj/structure/table, -/turf/open/floor/iron/checker, -/area/station/cargo/miningdock) "hXQ" = ( /obj/machinery/atmospherics/pipe/smart/simple/scrubbers/visible, /turf/closed/wall/r_wall, @@ -32253,17 +32212,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron/textured_large, /area/station/cargo/storage) -"iyY" = ( -/obj/effect/turf_decal/tile/bar/opposingcorners{ - dir = 1 - }, -/obj/structure/table, -/obj/machinery/microwave{ - pixel_y = 6 - }, -/obj/machinery/airalarm/directional/east, -/turf/open/floor/iron/checker, -/area/station/cargo/miningdock) "iyZ" = ( /obj/structure/flora/bush/snow/style_random, /turf/open/misc/snow/actually_safe{ @@ -32689,13 +32637,6 @@ /obj/machinery/firealarm/directional/east, /turf/open/floor/catwalk_floor, /area/station/maintenance/floor3/starboard/fore) -"iDz" = ( -/obj/machinery/atmospherics/components/trinary/filter/critical{ - dir = 4 - }, -/obj/machinery/status_display/evac/directional/north, -/turf/open/floor/engine, -/area/station/engineering/supermatter/room) "iDP" = ( /obj/structure/cable/multilayer/multiz, /turf/open/floor/plating, @@ -33428,14 +33369,6 @@ /obj/structure/window/reinforced/spawner/directional/north, /obj/structure/window/reinforced/spawner/directional/east, /obj/structure/window/reinforced/spawner/directional/west, -/obj/machinery/door/window/left/directional/west{ - base_state = "right"; - dir = 2; - icon_state = "right"; - layer = 3.1; - name = "Upload Console Window"; - req_access = list("ai_upload") - }, /obj/effect/turf_decal/tile/blue/half/contrasted{ dir = 1 }, @@ -33443,6 +33376,11 @@ c_tag = "AI Upload Chamber - Fore"; network = list("aiupload") }, +/obj/machinery/door/window/right/directional/south{ + name = "Upload Console Window"; + req_access = list("ai_upload"); + layer = 3 + }, /turf/open/floor/iron/dark, /area/station/ai_monitored/turret_protected/ai_upload) "iOE" = ( @@ -33803,7 +33741,7 @@ /area/station/maintenance/floor1/starboard/fore) "iTn" = ( /obj/structure/bed, -/obj/item/bedsheet/dorms, +/obj/effect/spawner/random/bedsheet, /turf/open/floor/carpet/black, /area/station/hallway/secondary/service) "iTu" = ( @@ -34015,7 +33953,7 @@ /turf/open/floor/iron/dark, /area/station/hallway/floor1/fore) "iWQ" = ( -/obj/machinery/door/window{ +/obj/machinery/door/window/left/directional/south{ name = "Mass Driver"; req_access = list("chapel_office") }, @@ -35475,6 +35413,14 @@ /obj/machinery/newscaster/directional/west, /turf/open/floor/circuit, /area/station/science/xenobiology) +"jqV" = ( +/obj/item/radio/intercom/directional/west, +/obj/structure/railing/corner, +/obj/effect/turf_decal/tile/brown/opposingcorners{ + dir = 1 + }, +/turf/open/floor/iron/checker, +/area/station/cargo/miningdock) "jrl" = ( /obj/effect/mapping_helpers/airlock/access/any/engineering/maintenance, /obj/structure/cable, @@ -35829,6 +35775,11 @@ dir = 1 }, /area/station/hallway/floor3/fore) +"jwr" = ( +/obj/effect/spawner/structure/window/reinforced, +/obj/structure/cable, +/turf/open/floor/plating, +/area/station/hallway/floor1/aft) "jwu" = ( /obj/effect/turf_decal/trimline/green/filled/line{ dir = 5 @@ -37918,6 +37869,14 @@ }, /turf/open/floor/iron/dark, /area/station/security/checkpoint/third) +"jXW" = ( +/obj/effect/turf_decal/stripes/line, +/obj/structure/cable, +/obj/effect/turf_decal/tile/brown/opposingcorners{ + dir = 1 + }, +/turf/open/floor/iron/checker, +/area/station/cargo/miningdock) "jXX" = ( /obj/machinery/camera/directional/north{ c_tag = "Holodeck - Fore"; @@ -39584,16 +39543,6 @@ /obj/machinery/light/small/directional/north, /turf/open/floor/iron/white, /area/station/medical/medbay/aft) -"ksD" = ( -/obj/effect/turf_decal/tile/bar/opposingcorners{ - dir = 1 - }, -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ - dir = 1 - }, -/obj/structure/cable, -/turf/open/floor/iron/checker, -/area/station/cargo/miningdock) "ksH" = ( /obj/structure/closet/crate/freezer/blood, /obj/effect/turf_decal/tile/blue/fourcorners, @@ -44102,13 +44051,6 @@ /obj/machinery/duct, /turf/open/floor/iron/dark/side, /area/station/security/office) -"lAq" = ( -/obj/effect/turf_decal/tile/bar/opposingcorners{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/turf/open/floor/iron/checker, -/area/station/cargo/miningdock) "lAD" = ( /obj/effect/turf_decal/trimline/green/filled/arrow_cw{ dir = 10 @@ -45532,8 +45474,7 @@ /obj/structure/window/reinforced/spawner/directional/north, /obj/structure/window/reinforced/spawner/directional/east, /obj/structure/window/reinforced/spawner/directional/west, -/obj/machinery/door/window/left/directional/west{ - dir = 2; +/obj/machinery/door/window/left/directional/south{ layer = 3.1; name = "Cyborg Upload Console Window"; req_access = list("ai_upload") @@ -47418,14 +47359,6 @@ }, /turf/open/floor/engine/hull, /area/space/nearstation) -"mqn" = ( -/obj/effect/turf_decal/tile/bar/opposingcorners{ - dir = 1 - }, -/obj/structure/cable, -/obj/item/ammo_casing/spent, -/turf/open/floor/iron/checker, -/area/station/cargo/miningdock) "mqt" = ( /obj/effect/turf_decal/bot, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -48013,6 +47946,12 @@ dir = 4 }, /area/station/hallway/secondary/exit/departure_lounge) +"myd" = ( +/obj/machinery/conveyor_switch/oneway{ + id = "mining" + }, +/turf/open/floor/iron, +/area/station/cargo/miningdock) "myp" = ( /obj/effect/turf_decal/tile/red/anticorner, /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ @@ -48276,6 +48215,14 @@ /obj/machinery/light_switch/directional/west, /turf/open/floor/iron/dark, /area/station/command/gateway) +"mBF" = ( +/obj/structure/sign/poster/random/directional/east, +/obj/machinery/light/directional/east, +/obj/effect/turf_decal/tile/brown/opposingcorners{ + dir = 1 + }, +/turf/open/floor/iron/checker, +/area/station/cargo/miningdock) "mBM" = ( /obj/effect/turf_decal/trimline/neutral/warning{ dir = 4 @@ -49706,6 +49653,18 @@ dir = 1 }, /area/station/hallway/floor3/fore) +"mUw" = ( +/obj/effect/turf_decal/stripes/line, +/obj/machinery/camera/autoname/directional/south, +/obj/item/ammo_casing/spent, +/obj/structure/railing/corner{ + dir = 1 + }, +/obj/effect/turf_decal/tile/brown/opposingcorners{ + dir = 1 + }, +/turf/open/floor/iron/checker, +/area/station/cargo/miningdock) "mUA" = ( /turf/open/floor/plating, /area/station/maintenance/floor3/port) @@ -50476,11 +50435,6 @@ /obj/effect/mapping_helpers/broken_floor, /turf/open/floor/iron, /area/station/cargo/storage) -"ney" = ( -/obj/effect/turf_decal/delivery, -/obj/effect/spawner/random/structure/crate, -/turf/open/floor/iron/textured_large, -/area/station/cargo/storage) "neB" = ( /obj/effect/decal/cleanable/dirt, /obj/machinery/button/door/directional/south{ @@ -51622,13 +51576,6 @@ /obj/machinery/door/firedoor, /turf/open/floor/iron, /area/station/cargo/lobby) -"nsr" = ( -/obj/effect/turf_decal/tile/bar/opposingcorners{ - dir = 1 - }, -/obj/structure/cable, -/turf/open/floor/iron/checker, -/area/station/cargo/miningdock) "nss" = ( /obj/structure/chair/comfy/shuttle, /obj/effect/turf_decal/trimline/red/filled/line{ @@ -53038,6 +52985,13 @@ /mob/living/basic/cow, /turf/open/floor/grass, /area/station/service/hydroponics) +"nKc" = ( +/obj/structure/cable, +/obj/machinery/conveyor/inverted{ + dir = 10 + }, +/turf/open/floor/iron/checker, +/area/station/cargo/miningdock) "nKn" = ( /obj/structure/sign/directions/dorms/directional/east, /obj/structure/sign/directions/evac/directional/east{ @@ -53775,6 +53729,14 @@ "nVq" = ( /turf/open/openspace, /area/station/maintenance/floor3/starboard/fore) +"nVs" = ( +/obj/effect/turf_decal/stripes/line, +/obj/structure/extinguisher_cabinet/directional/south, +/obj/effect/turf_decal/tile/brown/opposingcorners{ + dir = 1 + }, +/turf/open/floor/iron/checker, +/area/station/cargo/miningdock) "nVw" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/dark/side{ @@ -54041,9 +54003,6 @@ /obj/machinery/light/small/directional/south, /turf/open/floor/pod/light, /area/station/maintenance/floor4/port/fore) -"nYw" = ( -/turf/open/floor/iron, -/area/station/cargo/miningdock) "nYE" = ( /obj/effect/turf_decal/siding/wood, /turf/open/floor/carpet/royalblack, @@ -57212,12 +57171,6 @@ }, /turf/open/floor/engine/vacuum, /area/station/science/ordnance/freezerchamber) -"oRi" = ( -/obj/effect/turf_decal/bot, -/obj/effect/spawner/random/structure/crate, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/turf/open/floor/iron/textured_large, -/area/station/cargo/storage) "oRq" = ( /obj/machinery/door/window/left/directional/north{ name = "Pen 3"; @@ -58210,15 +58163,6 @@ /obj/effect/spawner/random/structure/crate_abandoned, /turf/open/floor/pod/light, /area/station/maintenance/floor1/port) -"pfO" = ( -/obj/effect/turf_decal/tile/bar/opposingcorners{ - dir = 1 - }, -/obj/machinery/newscaster/directional/west, -/obj/structure/table, -/obj/machinery/firealarm/directional/south, -/turf/open/floor/iron/checker, -/area/station/cargo/miningdock) "pfX" = ( /obj/effect/turf_decal/tile/neutral/half/contrasted, /obj/machinery/firealarm/directional/north, @@ -60439,6 +60383,15 @@ /obj/machinery/shower/directional/west, /turf/open/floor/iron/freezer, /area/station/hallway/secondary/service) +"pLI" = ( +/obj/structure/railing/corner/end{ + dir = 1 + }, +/obj/effect/turf_decal/tile/brown/opposingcorners{ + dir = 1 + }, +/turf/open/floor/iron/checker, +/area/station/cargo/miningdock) "pLJ" = ( /obj/effect/turf_decal/siding/thinplating_new{ dir = 8 @@ -61493,6 +61446,17 @@ /obj/effect/spawner/structure/window/reinforced, /turf/open/floor/plating, /area/station/service/hydroponics/garden) +"qas" = ( +/obj/effect/turf_decal/stripes/line, +/obj/structure/cable, +/obj/structure/railing/corner/end/flip{ + dir = 4 + }, +/obj/effect/turf_decal/tile/brown/opposingcorners{ + dir = 1 + }, +/turf/open/floor/iron/checker, +/area/station/cargo/miningdock) "qat" = ( /obj/machinery/airalarm/directional/west, /turf/open/floor/iron/checker, @@ -63276,14 +63240,6 @@ }, /turf/open/floor/iron/white, /area/station/medical/medbay/aft) -"qyG" = ( -/obj/effect/turf_decal/tile/bar/opposingcorners{ - dir = 1 - }, -/obj/effect/decal/cleanable/dirt, -/obj/structure/extinguisher_cabinet/directional/south, -/turf/open/floor/iron/checker, -/area/station/cargo/miningdock) "qyH" = ( /obj/machinery/atmospherics/components/binary/pump/off/general, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden, @@ -63541,7 +63497,7 @@ /area/station/science/genetics) "qBh" = ( /obj/structure/bed/double, -/obj/item/bedsheet/dorms_double, +/obj/effect/spawner/random/bedsheet/double, /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ dir = 8 }, @@ -63597,7 +63553,7 @@ /area/station/commons/fitness) "qCn" = ( /obj/structure/bed, -/obj/item/bedsheet/random, +/obj/effect/spawner/random/bedsheet/any, /turf/open/floor/wood, /area/station/medical/psychology) "qCo" = ( @@ -64183,6 +64139,12 @@ /obj/effect/turf_decal/tile/bar/opposingcorners, /turf/open/floor/iron/checker, /area/station/service/bar) +"qJe" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/item/storage/box/donkpockets, +/obj/structure/table, +/turf/open/floor/iron, +/area/station/cargo/miningdock) "qJj" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -64975,6 +64937,13 @@ /obj/structure/cable, /turf/open/floor/plating/airless, /area/station/solars/starboard/aft) +"qUW" = ( +/obj/machinery/newscaster/directional/west, +/obj/effect/turf_decal/tile/brown/opposingcorners{ + dir = 1 + }, +/turf/open/floor/iron/checker, +/area/station/cargo/miningdock) "qVa" = ( /obj/structure/cable, /obj/structure/disposalpipe/segment{ @@ -65268,6 +65237,13 @@ }, /turf/open/floor/plating, /area/station/security/eva) +"qYA" = ( +/obj/structure/railing/corner/end, +/obj/effect/turf_decal/tile/brown/opposingcorners{ + dir = 1 + }, +/turf/open/floor/iron/checker, +/area/station/cargo/miningdock) "qYJ" = ( /obj/item/kirbyplants/organic/plant21, /obj/effect/turf_decal/trimline/purple/line{ @@ -70851,6 +70827,19 @@ /obj/structure/sink/directional/west, /turf/open/floor/iron/dark/textured, /area/station/medical/surgery/aft) +"sBK" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 1 + }, +/obj/structure/cable, +/obj/structure/railing/corner/end{ + dir = 4 + }, +/obj/effect/turf_decal/tile/brown/opposingcorners{ + dir = 1 + }, +/turf/open/floor/iron/checker, +/area/station/cargo/miningdock) "sBN" = ( /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ dir = 1 @@ -71951,6 +71940,15 @@ /obj/structure/sign/directions/evac/directional/west, /turf/open/floor/iron, /area/station/hallway/floor3/aft) +"sQH" = ( +/obj/machinery/computer/security/telescreen/entertainment/directional/north, +/obj/effect/decal/cleanable/dirt, +/obj/structure/cable, +/obj/effect/turf_decal/tile/brown/opposingcorners{ + dir = 1 + }, +/turf/open/floor/iron/checker, +/area/station/cargo/miningdock) "sQT" = ( /obj/effect/turf_decal/stripes, /obj/effect/decal/cleanable/dirt, @@ -72142,6 +72140,15 @@ /obj/structure/cable, /turf/open/floor/catwalk_floor, /area/station/maintenance/floor2/starboard) +"sUp" = ( +/obj/structure/railing/corner/end/flip{ + dir = 1 + }, +/obj/effect/turf_decal/tile/brown/opposingcorners{ + dir = 1 + }, +/turf/open/floor/iron/checker, +/area/station/cargo/miningdock) "sUt" = ( /obj/effect/turf_decal/stripes/line{ dir = 4 @@ -72815,6 +72822,14 @@ /obj/machinery/light/red/dim/directional/north, /turf/open/floor/catwalk_floor, /area/station/maintenance/floor3/port) +"tbt" = ( +/obj/structure/cable, +/obj/machinery/bouldertech/refinery/smelter, +/obj/machinery/conveyor/inverted{ + dir = 10 + }, +/turf/open/floor/iron/checker, +/area/station/cargo/miningdock) "tbu" = ( /obj/effect/spawner/random/trash/hobo_squat, /obj/effect/decal/cleanable/dirt, @@ -73276,6 +73291,15 @@ /obj/effect/turf_decal/tile/red/fourcorners, /turf/open/floor/iron/dark, /area/station/security/detectives_office/private_investigators_office) +"thH" = ( +/obj/structure/cable, +/obj/machinery/brm, +/obj/machinery/conveyor{ + dir = 4; + id = "mining" + }, +/turf/open/floor/iron/checker, +/area/station/cargo/miningdock) "thM" = ( /obj/structure/railing{ dir = 1 @@ -73493,6 +73517,13 @@ }, /turf/open/floor/catwalk_floor, /area/station/maintenance/floor4/port/aft) +"tkZ" = ( +/obj/structure/cable, +/obj/machinery/conveyor/inverted{ + dir = 6 + }, +/turf/open/floor/iron/checker, +/area/station/cargo/miningdock) "tlb" = ( /mob/living/simple_animal/slime, /turf/open/floor/engine{ @@ -73957,10 +73988,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/pod/light, /area/station/maintenance/floor1/port) -"tqo" = ( -/obj/effect/spawner/structure/window/reinforced, -/turf/open/floor/plating, -/area/station/hallway/floor1/aft) "tqr" = ( /obj/machinery/door/firedoor/border_only{ dir = 4 @@ -76016,6 +76043,13 @@ }, /turf/open/floor/iron/dark, /area/station/commons/storage/tools) +"tTv" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/chair{ + dir = 8 + }, +/turf/open/floor/catwalk_floor/iron, +/area/station/cargo/miningdock) "tTw" = ( /obj/effect/turf_decal/trimline/purple/warning{ dir = 8 @@ -77315,11 +77349,13 @@ }, /area/station/service/chapel) "ulv" = ( -/obj/effect/mapping_helpers/airlock/access/all/supply/mining, -/obj/machinery/door/airlock/mining{ - name = "Mining Decontamination" - }, /obj/machinery/door/firedoor, +/obj/machinery/door/airlock/mining/glass{ + name = "Mail Sorting" + }, +/obj/effect/mapping_helpers/airlock/access/any/supply/general, +/obj/effect/mapping_helpers/airlock/access/any/supply/mining, +/obj/effect/mapping_helpers/airlock/access/any/supply/bit_den, /turf/open/floor/iron/textured_large, /area/station/cargo/storage) "ulB" = ( @@ -77529,6 +77565,13 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/wood/tile, /area/station/service/library/printer) +"upc" = ( +/obj/machinery/atmospherics/components/trinary/filter/critical{ + dir = 4 + }, +/obj/machinery/status_display/evac/directional/north, +/turf/open/floor/engine, +/area/station/engineering/supermatter/room) "uph" = ( /obj/machinery/door/airlock/hatch{ name = "Elevator Shaft Access" @@ -78722,8 +78765,7 @@ /area/station/hallway/secondary/exit/escape_pod) "uGO" = ( /obj/structure/table/reinforced, -/obj/machinery/door/window/right/directional/west{ - dir = 2; +/obj/machinery/door/window/right/directional/south{ name = "Access Queue" }, /obj/machinery/door/poddoor/preopen{ @@ -78859,6 +78901,12 @@ /obj/machinery/light/floor, /turf/open/floor/iron/dark, /area/station/science/cytology) +"uIh" = ( +/obj/effect/turf_decal/bot, +/obj/effect/decal/cleanable/dirt, +/obj/effect/spawner/random/structure/crate, +/turf/open/floor/iron/textured_large, +/area/station/cargo/storage) "uIi" = ( /obj/effect/turf_decal/bot, /obj/machinery/portable_atmospherics/pump, @@ -79768,6 +79816,15 @@ /obj/structure/cable, /turf/open/floor/iron, /area/station/hallway/floor3/fore) +"uSC" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/bouldertech/refinery, +/obj/machinery/conveyor{ + dir = 8; + id = "mining" + }, +/turf/open/floor/iron/checker, +/area/station/cargo/miningdock) "uSN" = ( /obj/structure/railing, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -80899,6 +80956,19 @@ }, /turf/open/floor/iron/dark/small, /area/station/service/chapel/office) +"viG" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 1 + }, +/obj/structure/railing/corner/end/flip{ + dir = 8 + }, +/obj/effect/turf_decal/tile/brown/opposingcorners{ + dir = 1 + }, +/turf/open/floor/iron/checker, +/area/station/cargo/miningdock) "viL" = ( /obj/effect/turf_decal/trimline/purple/line{ dir = 5 @@ -81178,16 +81248,6 @@ "vmr" = ( /turf/closed/wall, /area/station/engineering/atmos/hfr_room) -"vmu" = ( -/obj/effect/turf_decal/tile/bar/opposingcorners{ - dir = 1 - }, -/obj/structure/cable, -/obj/structure/chair{ - dir = 8 - }, -/turf/open/floor/iron/checker, -/area/station/cargo/miningdock) "vmA" = ( /obj/effect/turf_decal/trimline/green/line{ dir = 6 @@ -82809,6 +82869,13 @@ }, /turf/open/floor/pod/light, /area/station/maintenance/floor3/port/fore) +"vHa" = ( +/obj/machinery/conveyor{ + dir = 4; + id = "mining" + }, +/turf/open/floor/iron/checker, +/area/station/cargo/miningdock) "vHd" = ( /obj/effect/turf_decal/siding/wood{ dir = 10 @@ -82901,11 +82968,6 @@ }, /turf/open/floor/iron/smooth_large, /area/station/hallway/secondary/entry) -"vIe" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/structure/sign/poster/contraband/random/directional/east, -/turf/open/floor/catwalk_floor/iron, -/area/station/cargo/miningdock) "vIh" = ( /obj/effect/turf_decal/siding/wood{ dir = 4 @@ -83932,6 +83994,12 @@ dir = 1 }, /area/station/security/prison) +"vWp" = ( +/obj/effect/turf_decal/tile/brown/opposingcorners{ + dir = 1 + }, +/turf/open/floor/iron/checker, +/area/station/cargo/miningdock) "vWw" = ( /turf/closed/wall/r_wall, /area/station/security/office) @@ -84763,6 +84831,14 @@ /obj/machinery/power/apc/auto_name/directional/north, /turf/open/floor/iron/dark/smooth_half, /area/station/engineering/storage/tech) +"wgu" = ( +/obj/structure/cable, +/obj/machinery/conveyor{ + dir = 9; + id = "mining" + }, +/turf/open/floor/iron/checker, +/area/station/cargo/miningdock) "wgO" = ( /obj/effect/spawner/structure/window/reinforced, /obj/structure/cable, @@ -84799,7 +84875,7 @@ /turf/open/floor/iron, /area/station/hallway/floor2/fore) "whj" = ( -/obj/machinery/door/window/brigdoor, +/obj/machinery/door/window/brigdoor/left/directional/south, /turf/open/misc/sandy_dirt, /area/station/maintenance/floor1/starboard) "whw" = ( @@ -86656,6 +86732,8 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/door/firedoor, /obj/effect/mapping_helpers/airlock/access/any/supply/general, +/obj/effect/mapping_helpers/airlock/access/any/supply/mining, +/obj/effect/mapping_helpers/airlock/access/any/supply/bit_den, /turf/open/floor/iron/smooth, /area/station/cargo/storage) "wEQ" = ( @@ -89234,16 +89312,6 @@ /obj/machinery/light/directional/north, /turf/open/floor/carpet/red, /area/station/service/theater) -"xkE" = ( -/obj/effect/turf_decal/tile/bar/opposingcorners{ - dir = 1 - }, -/obj/machinery/camera/autoname/directional/south, -/obj/machinery/reagentgrinder, -/obj/structure/table, -/obj/structure/sign/poster/random/directional/east, -/turf/open/floor/iron/checker, -/area/station/cargo/miningdock) "xkN" = ( /obj/structure/flora/bush/sparsegrass/style_random, /obj/item/hatchet, @@ -91820,6 +91888,18 @@ dir = 5 }, /area/station/hallway/floor4/fore) +"xUS" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/chair/plastic{ + dir = 8 + }, +/obj/item/toy/plush/lizard_plushie/space/green{ + name = "Warns-The-Fool"; + pixel_x = -3; + pixel_y = 2 + }, +/turf/open/floor/catwalk_floor/iron, +/area/station/cargo/miningdock) "xUU" = ( /obj/effect/turf_decal/tile/neutral{ dir = 8 @@ -93016,12 +93096,6 @@ }, /turf/open/floor/iron/white, /area/station/medical/storage) -"ylD" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 4 - }, -/turf/open/floor/iron/dark/airless, -/area/station/hallway/floor1/aft) "ylE" = ( /obj/structure/disposalpipe/segment{ dir = 4 @@ -119903,11 +119977,11 @@ dOs dOs oCK bZr -gun +uIh tHL nAm hLP -rbT +nAm tHL tHL cUL @@ -120164,7 +120238,7 @@ hBw bcZ hBw hLP -ney +hBw tHL kOS hDf @@ -120417,7 +120491,7 @@ dOs dOs oCK bZr -rbT +nAm nTZ iyU aat @@ -120931,7 +121005,7 @@ dOs dOs oCK mjQ -nAm +rbT ijL rbT hLP @@ -121447,7 +121521,7 @@ gcE fXm mqt uKO -oRi +mqt aat ydt oYn @@ -125053,11 +125127,11 @@ mRt bAL vOx yiw -hGT -hXO -pfO -dpH -ylD +jqV +pLI +qUW +vWp +cIt rjD cax cKC @@ -125310,12 +125384,12 @@ bLt qeW rim njk -gxB -cRk -vmu -gha -fvS -tqo +viG +cGM +wgu +thH +jXW +jwr sAK cKC bfC @@ -125565,15 +125639,15 @@ kLn ehG apM quB -nYw +myd ehG -gGP -nsr -qyG -dpH -fvS +sQH +vHa +uSC +vHa +nVs rjD -asu +fFT cKC mkO xgH @@ -125824,12 +125898,12 @@ oCf quB mRt dAc -lAq -ksD -mqn -gha -fvS -tqo +sBK +tbt +tkZ +nKc +qas +jwr cax cKC kSN @@ -126081,13 +126155,13 @@ bBV wBB xxx yiw -iyY -bEp -xkE -dpH -dsJ +eCD +sUp +mBF +qYA +mUw rjD -cax +dMO cqY kSN xgH @@ -126321,13 +126395,13 @@ dpH ehG tFc yim -yim -mRt -yim -vIe +bgw +cCC +tTv +bdo vyN -mRt -yim +qJe +xUS qcW tIn bMD @@ -140228,7 +140302,7 @@ uyD uyD uyD uyD -iDz +upc kfo mvg dEc diff --git a/_maps/map_files/VoidRaptor/VoidRaptor.dmm b/_maps/map_files/VoidRaptor/VoidRaptor.dmm index cdfb7b64f86..bfc1ddf0022 100644 --- a/_maps/map_files/VoidRaptor/VoidRaptor.dmm +++ b/_maps/map_files/VoidRaptor/VoidRaptor.dmm @@ -53,6 +53,16 @@ /obj/machinery/telecomms/processor/preset_one, /turf/open/floor/circuit/telecomms/server, /area/station/tcommsat/server) +"aaY" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/effect/turf_decal/tile/green/diagonal_centre, +/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/diagonal, +/area/station/hallway/secondary/service) "abt" = ( /obj/machinery/shower/directional/west, /obj/structure/drain, @@ -158,6 +168,12 @@ dir = 1 }, /area/station/engineering/main) +"acT" = ( +/obj/structure/railing/corner, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/turf_decal/siding/dark/corner, +/turf/open/floor/iron/kitchen, +/area/station/service/kitchen) "acW" = ( /obj/effect/turf_decal/trimline/blue/filled/warning{ dir = 8 @@ -292,6 +308,14 @@ /obj/effect/decal/cleanable/dirt, /turf/open/floor/iron/kitchen, /area/station/service/kitchen/abandoned) +"aeH" = ( +/obj/structure/chair/sofa/corp/right{ + color = "#DE3A3A"; + dir = 4 + }, +/obj/structure/window/spawner/directional/west, +/turf/open/floor/iron/cafeteria, +/area/station/service/cafeteria) "aeL" = ( /obj/machinery/status_display/evac, /turf/closed/wall/r_wall, @@ -343,16 +367,6 @@ /obj/effect/turf_decal/tile/red/diagonal_centre, /turf/open/floor/iron/dark/diagonal, /area/station/security/office) -"afo" = ( -/obj/effect/turf_decal/trimline/brown/filled/line{ - dir = 6 - }, -/obj/structure/closet/wardrobe/miner, -/obj/effect/turf_decal/bot, -/turf/open/floor/iron/smooth_corner{ - dir = 1 - }, -/area/station/cargo/miningdock) "aft" = ( /obj/effect/landmark/start/chaplain, /turf/open/floor/carpet/stellar, @@ -698,16 +712,6 @@ }, /turf/open/floor/iron/smooth, /area/station/maintenance/department/science/xenobiology) -"ajR" = ( -/obj/structure/cable, -/obj/machinery/power/apc/auto_name/directional/east, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/sink/directional/west, -/obj/structure/disposalpipe/segment, -/obj/effect/turf_decal/tile/green/diagonal_centre, -/turf/open/floor/iron/diagonal, -/area/station/hallway/secondary/service) "ajT" = ( /obj/effect/turf_decal/trimline/blue/filled/warning{ dir = 4 @@ -727,6 +731,28 @@ /obj/structure/cable, /turf/open/floor/iron/solarpanel/airless, /area/station/solars/starboard/fore) +"aka" = ( +/obj/machinery/conveyor{ + dir = 4; + id = "mining" + }, +/obj/structure/railing{ + dir = 1 + }, +/turf/open/floor/iron/smooth_large, +/area/station/cargo/miningfoundry) +"akj" = ( +/obj/machinery/hydroponics/constructable, +/obj/effect/turf_decal/tile/dark/half, +/obj/effect/turf_decal/trimline/green/line{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/green/mid_joiner{ + dir = 1 + }, +/obj/machinery/door/window/survival_pod/left/directional/north, +/turf/open/floor/iron/half, +/area/station/service/hydroponics) "akq" = ( /obj/machinery/computer/scan_consolenew{ dir = 4 @@ -918,13 +944,6 @@ /obj/machinery/holopad, /turf/open/floor/wood, /area/station/commons/vacant_room/office) -"anI" = ( -/obj/structure/chair/sofa/corp/right{ - color = "#DE3A3A"; - dir = 4 - }, -/turf/open/floor/iron/cafeteria, -/area/station/service/cafeteria) "anM" = ( /obj/machinery/door/airlock/cmo{ name = "Chief Medical Officer's Quarters" @@ -945,11 +964,6 @@ /obj/machinery/door/firedoor, /turf/open/floor/wood/large, /area/station/command/heads_quarters/cmo) -"anP" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/deepfryer, -/turf/open/floor/iron/kitchen, -/area/station/service/kitchen) "anW" = ( /obj/effect/decal/cleanable/dirt, /obj/structure/closet, @@ -1526,6 +1540,15 @@ }, /turf/open/floor/iron/small, /area/station/commons/dorms) +"awr" = ( +/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/trimline/brown/filled/line{ + dir = 4 + }, +/turf/open/floor/iron/smooth_large, +/area/station/cargo/miningdock) "awv" = ( /obj/effect/decal/cleanable/dirt, /obj/structure/trash_pile, @@ -2216,6 +2239,10 @@ "aFY" = ( /turf/closed/wall, /area/station/engineering/atmos/storage/gas) +"aGg" = ( +/obj/machinery/griddle, +/turf/open/floor/iron/kitchen, +/area/station/service/kitchen) "aGq" = ( /obj/effect/turf_decal/bot, /obj/structure/rack, @@ -2314,10 +2341,6 @@ /obj/structure/disposalpipe/segment, /turf/open/floor/carpet, /area/station/medical/psychology) -"aJs" = ( -/obj/effect/spawner/structure/window/reinforced, -/turf/open/floor/plating/airless, -/area/station/cargo/storage) "aJH" = ( /obj/effect/turf_decal/trimline/brown/filled/corner, /obj/structure/disposalpipe/segment{ @@ -2457,6 +2480,19 @@ /obj/machinery/holopad/secure, /turf/open/floor/carpet, /area/station/security/courtroom) +"aLz" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/chem_master/condimaster, +/obj/structure/railing{ + dir = 6 + }, +/obj/effect/turf_decal/siding/dark{ + dir = 4 + }, +/turf/open/floor/iron/kitchen, +/area/station/service/kitchen) "aLB" = ( /obj/structure/chair/sofa/corp/right, /obj/effect/turf_decal/tile/dark/opposingcorners{ @@ -3014,6 +3050,17 @@ "aSS" = ( /turf/closed/wall/r_wall, /area/station/engineering/power_room) +"aTk" = ( +/obj/effect/turf_decal/trimline/brown/filled/line{ + dir = 4 + }, +/obj/effect/landmark/start/bitrunner, +/obj/machinery/light/floor, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/iron/dark/textured_edge{ + dir = 8 + }, +/area/station/cargo/bitrunning/den) "aTo" = ( /obj/effect/decal/cleanable/dirt, /obj/structure/closet/emcloset, @@ -3400,17 +3447,6 @@ /obj/structure/disposalpipe/segment, /turf/open/floor/plating, /area/station/maintenance/starboard/greater) -"aXm" = ( -/obj/machinery/door/firedoor, -/obj/effect/mapping_helpers/airlock/access/all/service/general, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/machinery/door/airlock/service/glass{ - name = "Service Hall" - }, -/turf/open/floor/iron/large, -/area/station/hallway/secondary/service) "aXr" = ( /obj/structure/table/wood, /obj/item/paper_bin/carbon{ @@ -3906,16 +3942,6 @@ /obj/effect/turf_decal/bot, /turf/open/floor/wood/large, /area/station/commons/fitness/recreation) -"bdX" = ( -/obj/machinery/disposal/bin, -/obj/effect/turf_decal/box, -/obj/item/radio/intercom/directional/south, -/obj/structure/disposalpipe/trunk{ - dir = 8 - }, -/obj/effect/turf_decal/tile/green/diagonal_centre, -/turf/open/floor/iron/diagonal, -/area/station/hallway/secondary/service) "beb" = ( /obj/machinery/door/firedoor, /obj/machinery/door/airlock{ @@ -3976,6 +4002,18 @@ /obj/effect/landmark/start/cargo_technician, /turf/open/floor/iron/smooth, /area/station/cargo/sorting) +"beU" = ( +/obj/effect/turf_decal/tile/green/diagonal_centre, +/obj/machinery/light_switch/directional/west, +/obj/machinery/light/directional/west, +/obj/structure/table, +/obj/machinery/fax{ + fax_name = "Service Hallway"; + name = "Service Fax Machine"; + pixel_y = 3 + }, +/turf/open/floor/iron/diagonal, +/area/station/hallway/secondary/service) "beY" = ( /obj/effect/landmark/start/cargo_technician, /obj/effect/turf_decal/trimline/brown/filled/warning, @@ -4177,6 +4215,12 @@ /obj/effect/turf_decal/tile/bar/opposingcorners, /turf/open/floor/iron, /area/station/service/bar) +"bjI" = ( +/obj/machinery/camera/directional/north, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/firealarm/directional/north, +/turf/open/floor/iron/dark/textured_large, +/area/station/cargo/bitrunning/den) "bjJ" = ( /obj/effect/turf_decal/trimline/blue/filled/line{ dir = 8 @@ -4208,11 +4252,6 @@ /obj/structure/cable, /turf/open/floor/plating, /area/station/security/warden) -"bkq" = ( -/obj/effect/landmark/start/cook, -/obj/effect/turf_decal/tile/green/diagonal_centre, -/turf/open/floor/iron/diagonal, -/area/station/hallway/secondary/service) "bkr" = ( /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, /obj/effect/landmark/start/bartender, @@ -4234,16 +4273,6 @@ /obj/machinery/vending/drugs, /turf/open/floor/iron/white/smooth_large, /area/station/medical/medbay/central) -"bkF" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/cable, -/obj/effect/turf_decal/trimline/brown/filled/warning{ - dir = 9 - }, -/turf/open/floor/iron/smooth_edge{ - dir = 4 - }, -/area/station/cargo/miningdock) "bkY" = ( /obj/structure/table/reinforced, /obj/item/storage/toolbox/mechanical{ @@ -4318,13 +4347,6 @@ }, /turf/open/floor/carpet/black, /area/station/command/heads_quarters/qm) -"bmk" = ( -/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/green/diagonal_centre, -/turf/open/floor/iron/diagonal, -/area/station/hallway/secondary/service) "bmt" = ( /obj/effect/turf_decal/trimline/purple/filled/line{ dir = 1 @@ -4707,6 +4729,11 @@ }, /turf/open/floor/glass/reinforced, /area/station/security/execution/transfer) +"bsF" = ( +/obj/effect/turf_decal/weather/snow, +/obj/structure/kitchenspike, +/turf/open/floor/iron/kitchen_coldroom/freezerfloor, +/area/station/service/kitchen/coldroom) "bsI" = ( /turf/closed/wall/r_wall, /area/station/science/auxlab) @@ -4759,14 +4786,6 @@ dir = 4 }, /area/station/hallway/primary/central) -"btx" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/effect/turf_decal/tile/green/diagonal_centre, -/turf/open/floor/iron/diagonal, -/area/station/hallway/secondary/service) "btY" = ( /obj/structure/table/glass, /obj/item/folder/white{ @@ -4841,6 +4860,16 @@ }, /turf/open/floor/wood, /area/station/service/lawoffice) +"bux" = ( +/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/green/diagonal_centre, +/obj/structure/disposalpipe/segment{ + dir = 6 + }, +/turf/open/floor/iron/diagonal, +/area/station/hallway/secondary/service) "buz" = ( /obj/effect/turf_decal/trimline/yellow/filled/line, /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ @@ -5336,7 +5365,7 @@ /area/station/science/ordnance/bomb) "bBE" = ( /obj/machinery/newscaster/directional/east, -/obj/item/bedsheet/random, +/obj/effect/spawner/random/bedsheet/any, /obj/structure/bed, /obj/effect/turf_decal/siding/wood{ dir = 4 @@ -5880,14 +5909,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/catwalk_floor/iron_smooth, /area/station/maintenance/department/science/xenobiology) -"bMB" = ( -/obj/structure/cable, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/effect/landmark/start/hangover, -/turf/open/floor/iron/cafeteria, -/area/station/service/cafeteria) "bMJ" = ( /obj/effect/turf_decal/siding/wood{ dir = 6 @@ -6006,6 +6027,21 @@ /obj/machinery/duct, /turf/open/floor/iron/white, /area/station/science/lab) +"bNV" = ( +/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 = 4 + }, +/obj/machinery/holopad, +/obj/effect/turf_decal/bot, +/obj/effect/turf_decal/tile/green/diagonal_centre, +/obj/structure/disposalpipe/segment{ + dir = 9 + }, +/turf/open/floor/iron/diagonal, +/area/station/hallway/secondary/service) "bNZ" = ( /obj/machinery/door/airlock/external{ name = "External Solar Access" @@ -6075,11 +6111,6 @@ }, /turf/open/floor/iron/smooth_large, /area/station/construction/mining/aux_base) -"bOI" = ( -/obj/effect/landmark/start/hangover, -/obj/structure/chair/stool/directional/north, -/turf/open/floor/iron/cafeteria, -/area/station/service/cafeteria) "bOJ" = ( /obj/structure/cable, /turf/open/floor/catwalk_floor/iron_smooth, @@ -6127,11 +6158,6 @@ /obj/machinery/airalarm/directional/north, /turf/open/floor/iron/grimy, /area/station/security/detectives_office) -"bPG" = ( -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, -/obj/effect/turf_decal/tile/green/diagonal_centre, -/turf/open/floor/iron/diagonal, -/area/station/hallway/secondary/service) "bPI" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -6263,20 +6289,6 @@ dir = 4 }, /area/station/engineering/atmos) -"bRS" = ( -/obj/machinery/requests_console/directional/west{ - department = "Kitchen"; - name = "Kitchen Requests Console" - }, -/obj/structure/table, -/obj/machinery/door/firedoor, -/obj/machinery/door/poddoor/shutters/preopen{ - dir = 8; - id = "kitchen_counter"; - name = "Kitchen Counter Shutters" - }, -/turf/open/floor/iron/kitchen, -/area/station/service/kitchen) "bSd" = ( /obj/machinery/atmospherics/pipe/layer_manifold/supply/hidden{ dir = 8 @@ -6663,6 +6675,16 @@ }, /turf/open/floor/iron/smooth_edge, /area/station/engineering/atmos/storage) +"bYX" = ( +/obj/structure/table, +/obj/item/storage/bag/tray{ + pixel_y = 3 + }, +/obj/item/food/dough{ + pixel_y = 5 + }, +/turf/open/floor/iron/kitchen, +/area/station/service/kitchen) "bZi" = ( /turf/closed/wall/r_wall, /area/station/engineering/supermatter) @@ -6822,10 +6844,6 @@ }, /turf/open/floor/iron/smooth_large, /area/station/security/checkpoint/engineering) -"cbP" = ( -/obj/effect/spawner/structure/window/reinforced, -/turf/open/floor/plating/airless, -/area/station/cargo/miningdock) "cbV" = ( /obj/effect/landmark/start/hangover, /obj/machinery/camera/directional/west{ @@ -7605,23 +7623,6 @@ /obj/structure/extinguisher_cabinet/directional/west, /turf/open/floor/iron/dark, /area/station/security/office) -"coC" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/structure/sink/kitchen/directional/east{ - pixel_x = -19 - }, -/turf/open/floor/iron/kitchen, -/area/station/service/kitchen) -"coJ" = ( -/obj/structure/disposalpipe/segment, -/obj/machinery/chem_master/condimaster{ - name = "CondiMaster Neo"; - pixel_x = 7 - }, -/turf/open/floor/iron/kitchen, -/area/station/service/kitchen) "coN" = ( /obj/structure/table, /obj/item/reagent_containers/cup/glass/mug/britcup{ @@ -8071,11 +8072,6 @@ /obj/effect/mapping_helpers/mail_sorting/science/experimentor_lab, /turf/open/floor/iron/white/diagonal, /area/station/science/research) -"cvp" = ( -/obj/effect/turf_decal/delivery, -/obj/structure/closet/crate, -/turf/open/floor/iron/smooth_large, -/area/station/cargo/miningdock) "cvG" = ( /obj/structure/sign/warning/biohazard/directional/east, /turf/open/space/basic, @@ -8188,6 +8184,14 @@ }, /turf/open/floor/iron/smooth, /area/station/maintenance/starboard/fore) +"cxP" = ( +/obj/effect/turf_decal/weather/snow, +/obj/effect/landmark/event_spawn, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 8 + }, +/turf/open/floor/iron/kitchen_coldroom/freezerfloor, +/area/station/service/kitchen/coldroom) "cxR" = ( /obj/effect/landmark/start/hangover, /obj/structure/cable, @@ -8271,6 +8275,13 @@ /obj/structure/chair/wood, /turf/open/floor/carpet/stellar, /area/station/service/chapel/funeral) +"cyI" = ( +/obj/effect/turf_decal/tile/neutral{ + dir = 4 + }, +/obj/effect/turf_decal/tile/green/diagonal_centre, +/turf/open/floor/iron/diagonal, +/area/station/hallway/secondary/service) "cyL" = ( /obj/effect/decal/cleanable/dirt, /obj/structure/sign/poster/random/directional/north, @@ -8601,6 +8612,13 @@ }, /turf/open/floor/catwalk_floor/iron_smooth, /area/station/maintenance/department/medical/central) +"cEq" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 1 + }, +/obj/effect/turf_decal/tile/green/diagonal_centre, +/turf/open/floor/iron/diagonal, +/area/station/hallway/secondary/service) "cEx" = ( /obj/machinery/power/tracker, /obj/structure/cable, @@ -9001,18 +9019,6 @@ /obj/effect/turf_decal/box, /turf/open/floor/carpet/executive, /area/station/command/heads_quarters/hop) -"cIT" = ( -/obj/effect/turf_decal/trimline/green/filled/warning{ - dir = 9 - }, -/obj/machinery/firealarm/directional/north{ - pixel_x = -6 - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/open/floor/iron, -/area/station/service/hydroponics) "cIZ" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -9849,10 +9855,34 @@ /obj/structure/disposalpipe/segment, /turf/closed/wall, /area/station/maintenance/aft/upper) +"cXP" = ( +/obj/effect/turf_decal/trimline/brown/filled/line{ + dir = 6 + }, +/obj/structure/trash_pile, +/obj/machinery/camera/autoname/directional/east, +/turf/open/floor/iron/dark/textured, +/area/station/cargo/bitrunning/den) "cXX" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, /turf/open/floor/iron/dark/smooth_large, /area/station/security/lockers) +"cYc" = ( +/obj/effect/decal/cleanable/dirt, +/obj/structure/closet, +/obj/item/clothing/ears/earmuffs{ + pixel_y = 7 + }, +/obj/item/clothing/ears/earmuffs{ + pixel_x = -3; + pixel_y = -2 + }, +/obj/item/clothing/ears/earmuffs{ + pixel_x = 6; + pixel_y = 3 + }, +/turf/open/floor/iron/smooth_large, +/area/station/cargo/miningfoundry) "cYk" = ( /obj/structure/table, /obj/effect/decal/cleanable/dirt, @@ -10340,6 +10370,13 @@ /obj/machinery/door/poddoor/incinerator_ordmix, /turf/open/floor/engine/vacuum, /area/station/science/ordnance/burnchamber) +"dea" = ( +/obj/effect/turf_decal/trimline/brown/filled/line{ + dir = 4 + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/iron/smooth_large, +/area/station/cargo/miningdock) "dec" = ( /obj/structure/weightmachine, /obj/effect/turf_decal/trimline/brown/filled/line{ @@ -10365,12 +10402,6 @@ /obj/effect/turf_decal/bot, /turf/open/floor/iron/smooth_large, /area/station/engineering/atmos/pumproom) -"deu" = ( -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ - dir = 1 - }, -/turf/open/floor/iron/dark/textured_large, -/area/station/cargo/bitrunning/den) "dex" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, /turf/open/floor/carpet, @@ -10454,6 +10485,14 @@ "dfF" = ( /turf/closed/wall, /area/station/medical/medbay/lobby) +"dfG" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/railing/corner, +/obj/effect/turf_decal/siding/dark, +/turf/open/floor/iron/kitchen, +/area/station/service/kitchen) "dfM" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/engine, @@ -10648,6 +10687,13 @@ /obj/effect/landmark/start/captain, /turf/open/floor/wood/large, /area/station/command/heads_quarters/captain) +"din" = ( +/obj/effect/turf_decal/weather/snow, +/obj/machinery/airalarm/directional/north, +/obj/effect/mapping_helpers/airalarm/tlv_cold_room, +/obj/structure/kitchenspike, +/turf/open/floor/iron/kitchen_coldroom/freezerfloor, +/area/station/service/kitchen/coldroom) "dir" = ( /obj/structure/sign/departments/evac, /turf/closed/wall/r_wall, @@ -11134,14 +11180,6 @@ }, /turf/open/floor/engine/vacuum, /area/station/science/ordnance/freezerchamber) -"dpw" = ( -/obj/effect/turf_decal/trimline/brown/filled/line{ - dir = 1 - }, -/obj/structure/closet/secure_closet/miner, -/obj/effect/turf_decal/delivery, -/turf/open/floor/iron/smooth_edge, -/area/station/cargo/miningdock) "dpx" = ( /obj/structure/table/wood, /obj/item/storage/crayons, @@ -11787,16 +11825,6 @@ /mob/living/basic/pet/cat/cak, /turf/open/floor/iron/smooth_large, /area/station/maintenance/starboard/greater) -"dzq" = ( -/obj/structure/window/reinforced/survival_pod/spawner/directional/south, -/obj/machinery/door/window/survival_pod{ - dir = 4; - name = "Fitness Ring" - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/light/floor, -/turf/open/floor/iron/dark/smooth_large, -/area/station/commons/fitness/recreation/entertainment) "dzx" = ( /obj/effect/turf_decal/siding/wood{ dir = 4 @@ -11869,13 +11897,6 @@ /obj/effect/mapping_helpers/airlock/access/any/service/crematorium, /turf/open/floor/catwalk_floor/iron_dark, /area/station/service/chapel/office) -"dAy" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/effect/turf_decal/tile/green/diagonal_centre, -/turf/open/floor/iron/diagonal, -/area/station/hallway/secondary/service) "dAz" = ( /obj/machinery/door/firedoor, /obj/structure/table/reinforced, @@ -11946,14 +11967,6 @@ }, /turf/open/floor/plating, /area/station/science/genetics) -"dAV" = ( -/obj/effect/turf_decal/trimline/brown/filled/line{ - dir = 9 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/landmark/start/bitrunner, -/turf/open/floor/iron/dark/textured, -/area/station/cargo/bitrunning/den) "dAX" = ( /obj/effect/spawner/structure/window/reinforced, /turf/open/floor/plating, @@ -12521,7 +12534,7 @@ /area/station/medical/treatment_center) "dIL" = ( /obj/structure/bed/double, -/obj/item/bedsheet/random/double, +/obj/effect/spawner/random/bedsheet/any/double, /obj/effect/turf_decal/siding/wood, /turf/open/floor/wood, /area/station/maintenance/department/science/xenobiology) @@ -12830,6 +12843,10 @@ }, /turf/open/floor/engine, /area/station/ai_monitored/security/armory) +"dMh" = ( +/obj/effect/spawner/structure/window/reinforced, +/turf/open/floor/plating, +/area/station/cargo/office) "dMl" = ( /obj/structure/chair/sofa/left/brown{ dir = 8 @@ -13378,14 +13395,17 @@ /obj/effect/turf_decal/bot, /turf/open/floor/iron/dark/smooth_large, /area/station/command/bridge) -"dTO" = ( -/obj/machinery/power/apc/auto_name/directional/east, -/obj/structure/cable, +"dUa" = ( +/obj/effect/turf_decal/loading_area{ + dir = 1 + }, +/obj/effect/landmark/start/shaft_miner, +/obj/effect/decal/cleanable/dirt, /obj/effect/turf_decal/trimline/brown/filled/warning{ - dir = 5 + dir = 1 }, -/turf/open/floor/iron/smooth_edge, -/area/station/cargo/drone_bay) +/turf/open/floor/iron/smooth_large, +/area/station/cargo/miningdock) "dUf" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -13947,34 +13967,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/pod, /area/station/service/chapel/funeral) -"ebp" = ( -/obj/structure/table/reinforced, -/obj/machinery/door/firedoor, -/obj/item/reagent_containers/cup/bottle/morphine, -/obj/item/reagent_containers/cup/bottle/toxin{ - pixel_x = 5; - pixel_y = 4 - }, -/obj/item/reagent_containers/cup/bottle/epinephrine{ - pixel_x = 8 - }, -/obj/item/reagent_containers/cup/bottle/multiver{ - pixel_x = -5 - }, -/obj/item/reagent_containers/syringe/epinephrine, -/obj/effect/turf_decal/tile/yellow/fourcorners, -/obj/machinery/door/poddoor/shutters/preopen{ - id = "chemistry_shutters"; - name = "Pharmacy Shutters" - }, -/obj/machinery/door/window/right/directional/east{ - name = "Pharmacy Desk"; - req_access = list("pharmacy"); - safe = 4; - dir = 8 - }, -/turf/open/floor/iron/white/smooth_large, -/area/station/medical/pharmacy) "ebz" = ( /obj/structure/table/wood, /obj/item/flashlight/lamp/green{ @@ -13999,6 +13991,19 @@ /obj/effect/landmark/event_spawn, /turf/open/floor/iron/smooth_large, /area/station/engineering/atmos) +"ecl" = ( +/obj/structure/table, +/obj/machinery/requests_console/directional/west{ + department = "Kitchen"; + name = "Kitchen Requests Console" + }, +/obj/machinery/microwave{ + desc = "Cooks and boils stuff, somehow."; + pixel_x = -2; + pixel_y = 5 + }, +/turf/open/floor/iron/kitchen, +/area/station/service/kitchen) "ecq" = ( /obj/effect/spawner/structure/window/reinforced/plasma, /obj/machinery/door/poddoor/shutters/radiation/preopen{ @@ -14211,13 +14216,6 @@ }, /turf/open/floor/iron/large, /area/station/hallway/primary/fore) -"eeS" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/structure/disposalpipe/segment{ - dir = 5 - }, -/turf/open/floor/iron/kitchen, -/area/station/service/kitchen) "eeX" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ dir = 4 @@ -14516,11 +14514,6 @@ /obj/item/radio/intercom/directional/east, /turf/open/floor/pod/dark, /area/station/service/chapel) -"eil" = ( -/obj/effect/turf_decal/trimline/yellow/filled/corner, -/obj/machinery/chem_mass_spec, -/turf/open/floor/iron/freezer, -/area/station/medical/pharmacy) "ein" = ( /obj/structure/displaycase/forsale/kitchen{ pixel_y = 8 @@ -14700,12 +14693,6 @@ }, /turf/open/floor/iron/dark/smooth_large, /area/station/command/bridge) -"ekG" = ( -/obj/structure/table, -/obj/item/plate, -/obj/item/food/sausage, -/turf/open/floor/iron/cafeteria, -/area/station/service/cafeteria) "ekQ" = ( /obj/structure/disposalpipe/segment{ dir = 9 @@ -14779,15 +14766,6 @@ /obj/structure/cable/layer3, /turf/open/floor/circuit/green, /area/station/ai_monitored/turret_protected/ai) -"ely" = ( -/obj/machinery/gibber, -/obj/effect/turf_decal/stripes/end{ - dir = 8 - }, -/obj/item/radio/intercom/directional/east, -/obj/machinery/light/cold/directional/east, -/turf/open/floor/iron/kitchen_coldroom/freezerfloor, -/area/station/service/kitchen/coldroom) "elB" = ( /obj/effect/turf_decal/tile/dark/opposingcorners{ dir = 1 @@ -14884,20 +14862,6 @@ }, /turf/open/floor/grass, /area/station/hallway/primary/central/fore) -"emO" = ( -/obj/structure/rack, -/obj/item/circuitboard/machine/exoscanner{ - pixel_y = 3 - }, -/obj/item/circuitboard/machine/exoscanner, -/obj/item/circuitboard/machine/exoscanner{ - pixel_y = -3 - }, -/obj/machinery/requests_console/auto_name/directional/north, -/obj/structure/window/spawner/directional/west, -/obj/effect/turf_decal/trimline/brown/filled, -/turf/open/floor/iron/smooth, -/area/station/cargo/drone_bay) "enl" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -14923,9 +14887,21 @@ /obj/machinery/light/cold/directional/west, /turf/open/floor/iron/freezer, /area/station/medical/treatment_center) +"enw" = ( +/obj/machinery/brm, +/obj/machinery/conveyor{ + dir = 4; + id = "mining" + }, +/obj/structure/railing{ + dir = 1 + }, +/obj/machinery/light_switch/directional/west, +/turf/open/floor/iron/smooth_large, +/area/station/cargo/miningfoundry) "enC" = ( /obj/structure/bed/double, -/obj/item/bedsheet/random/double, +/obj/effect/spawner/random/bedsheet/any/double, /obj/item/radio/intercom/directional/east, /turf/open/floor/carpet, /area/station/commons/dorms) @@ -15171,6 +15147,11 @@ }, /turf/open/floor/iron/large, /area/station/service/hydroponics) +"ern" = ( +/obj/effect/turf_decal/weather/snow, +/obj/structure/closet/secure_closet/freezer/meat, +/turf/open/floor/iron/kitchen_coldroom/freezerfloor, +/area/station/service/kitchen/coldroom) "err" = ( /obj/effect/decal/cleanable/dirt, /obj/effect/decal/cleanable/dirt, @@ -15268,13 +15249,6 @@ /obj/effect/turf_decal/tile/dark_blue/anticorner, /turf/open/floor/iron/dark/smooth_large, /area/station/command/bridge) -"esZ" = ( -/obj/structure/cable, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/open/floor/iron/cafeteria, -/area/station/service/cafeteria) "etd" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -15902,6 +15876,11 @@ }, /turf/open/floor/iron/smooth_large, /area/station/engineering/power_room) +"eCV" = ( +/obj/structure/railing/corner, +/obj/structure/sink/kitchen/directional/west, +/turf/open/floor/iron/kitchen, +/area/station/service/kitchen) "eDh" = ( /obj/structure/rack, /obj/item/clothing/suit/hazardvest, @@ -15929,11 +15908,6 @@ "eDt" = ( /turf/closed/wall/r_wall, /area/station/science/research) -"eDx" = ( -/obj/effect/spawner/structure/window/reinforced, -/obj/structure/cable, -/turf/open/floor/plating/airless, -/area/station/security/checkpoint/supply) "eDF" = ( /obj/structure/chair/stool/directional/west, /obj/machinery/power/apc/auto_name/directional/south, @@ -15979,14 +15953,6 @@ /obj/effect/turf_decal/tile/neutral/diagonal_centre, /turf/open/floor/iron/dark/diagonal, /area/station/security/execution/transfer) -"eEd" = ( -/obj/machinery/modular_computer/preset/cargochat/service, -/obj/structure/sign/poster/random/directional/north, -/obj/effect/turf_decal/trimline/brown/filled/line, -/obj/effect/turf_decal/trimline/brown/filled/mid_joiner, -/obj/effect/turf_decal/bot, -/turf/open/floor/iron/smooth_large, -/area/station/hallway/secondary/service) "eEi" = ( /obj/effect/turf_decal/tile/dark_red/anticorner, /obj/structure/sign/poster/official/twelve_gauge/directional/east, @@ -16270,39 +16236,6 @@ }, /turf/open/floor/iron/smooth_edge, /area/station/cargo/storage) -"eGy" = ( -/obj/structure/table/reinforced, -/obj/machinery/door/firedoor, -/obj/effect/turf_decal/delivery, -/obj/structure/window/spawner/directional/east, -/obj/machinery/door/window/left/directional/north{ - name = "Kitchen Window"; - req_access = list("kitchen") - }, -/obj/machinery/door/poddoor/shutters/preopen{ - id = "kitchen_service"; - name = "Service Shutter" - }, -/obj/item/paper_bin{ - pixel_y = 4 - }, -/obj/item/pen{ - pixel_y = 4 - }, -/turf/open/floor/iron/large, -/area/station/service/kitchen) -"eGT" = ( -/obj/effect/turf_decal/weather/snow, -/obj/machinery/atmospherics/pipe/heat_exchanging/simple{ - dir = 6 - }, -/obj/machinery/firealarm/directional/north, -/obj/machinery/light_switch/directional/west{ - pixel_x = -24 - }, -/obj/structure/closet/secure_closet/freezer/meat, -/turf/open/floor/iron/kitchen_coldroom/freezerfloor, -/area/station/service/kitchen/coldroom) "eGZ" = ( /obj/structure/hedge, /obj/effect/turf_decal/trimline/green/arrow_cw{ @@ -16657,6 +16590,14 @@ }, /turf/open/floor/iron/small, /area/station/commons/dorms) +"eMf" = ( +/obj/machinery/door/window/left/directional/west{ + req_access = list("morgue") + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron/dark/smooth_large, +/area/station/medical/morgue) "eMr" = ( /obj/effect/spawner/structure/window/reinforced, /obj/structure/cable, @@ -16708,6 +16649,19 @@ dir = 1 }, /area/station/engineering/atmos/storage) +"eNr" = ( +/obj/structure/cable, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/structure/railing{ + dir = 4 + }, +/obj/structure/fake_stairs/directional/north, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron/kitchen, +/area/station/service/kitchen) "eNs" = ( /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ dir = 1 @@ -16734,6 +16688,19 @@ icon = 'modular_nova/modules/advanced_shuttles/icons/evac_shuttle.dmi' }, /area/space/nearstation) +"eNJ" = ( +/obj/machinery/airalarm/directional/north, +/obj/machinery/camera/directional/north{ + c_tag = "Service - Service Hall"; + dir = 9; + name = "service camera" + }, +/obj/effect/turf_decal/trimline/brown/filled/line, +/obj/effect/turf_decal/trimline/brown/filled/mid_joiner, +/obj/machinery/modular_computer/preset/cargochat/service, +/obj/effect/turf_decal/bot, +/turf/open/floor/iron/smooth_large, +/area/station/hallway/secondary/service) "eNR" = ( /obj/effect/turf_decal/trimline/green/filled/warning, /obj/structure/cable, @@ -16787,6 +16754,21 @@ /obj/effect/landmark/start/blueshield, /turf/open/floor/carpet/cyan, /area/station/command/heads_quarters/blueshield) +"ePd" = ( +/obj/machinery/disposal/bin, +/obj/structure/disposalpipe/trunk{ + dir = 8 + }, +/obj/effect/turf_decal/box, +/obj/structure/railing{ + dir = 10 + }, +/obj/effect/landmark/event_spawn, +/obj/effect/turf_decal/siding/dark{ + dir = 8 + }, +/turf/open/floor/iron/kitchen, +/area/station/service/kitchen) "ePm" = ( /obj/machinery/holopad, /obj/effect/turf_decal/box, @@ -16897,6 +16879,10 @@ dir = 4 }, /area/station/engineering/power_room) +"eQw" = ( +/obj/machinery/quantum_server, +/turf/open/floor/catwalk_floor/iron_dark, +/area/station/cargo/bitrunning/den) "eQx" = ( /obj/effect/turf_decal/trimline/blue/filled/corner{ dir = 4 @@ -16996,15 +16982,6 @@ }, /turf/open/floor/iron/dark/smooth_large, /area/station/command/bridge) -"eSB" = ( -/obj/machinery/door/window{ - dir = 8; - req_access = list("morgue") - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/turf/open/floor/iron/dark/smooth_large, -/area/station/medical/morgue) "eSD" = ( /obj/effect/spawner/random/structure/crate, /obj/effect/spawner/random/engineering/vending_restock, @@ -17127,6 +17104,41 @@ /obj/effect/landmark/navigate_destination/dockescpod3, /turf/open/floor/catwalk_floor, /area/station/security/execution/transfer) +"eUE" = ( +/obj/structure/table/reinforced, +/obj/item/folder/white{ + pixel_x = -5; + pixel_y = 4 + }, +/obj/item/pen{ + pixel_x = -5; + pixel_y = 4 + }, +/obj/effect/turf_decal/tile/yellow{ + dir = 1 + }, +/obj/effect/turf_decal/tile/yellow, +/obj/effect/turf_decal/tile/yellow{ + dir = 4 + }, +/obj/effect/turf_decal/tile/yellow{ + dir = 8 + }, +/obj/machinery/door/firedoor, +/obj/structure/desk_bell{ + pixel_x = 7; + pixel_y = 6 + }, +/obj/machinery/door/poddoor/shutters/preopen{ + id = "chemistry_shutters"; + name = "Pharmacy Shutters" + }, +/obj/machinery/door/window/left/directional/north{ + name = "Pharmacy Desk"; + req_access = list("pharmacy") + }, +/turf/open/floor/iron/white/smooth_large, +/area/station/medical/pharmacy) "eUH" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ dir = 8 @@ -17288,16 +17300,6 @@ }, /turf/open/floor/iron/smooth_edge, /area/station/science/ordnance/testlab) -"eWX" = ( -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ - dir = 1 - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/effect/turf_decal/tile/green/diagonal_centre, -/turf/open/floor/iron/diagonal, -/area/station/hallway/secondary/service) "eXd" = ( /obj/effect/turf_decal/trimline/green/filled/warning, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -17460,17 +17462,6 @@ /obj/structure/railing/corner, /turf/open/floor/iron/smooth, /area/station/command/cc_dock) -"eYX" = ( -/obj/structure/chair/sofa/corp/right{ - color = "#DE3A3A"; - dir = 8 - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/effect/landmark/start/assistant, -/turf/open/floor/iron/cafeteria, -/area/station/service/cafeteria) "eYY" = ( /obj/machinery/disposal/bin, /obj/structure/disposalpipe/trunk{ @@ -17736,6 +17727,11 @@ /obj/machinery/light/small/directional/north, /turf/open/floor/iron/smooth, /area/station/maintenance/department/engine/atmos) +"fdZ" = ( +/obj/machinery/light/directional/north, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/iron/smooth_large, +/area/station/cargo/miningfoundry) "feh" = ( /obj/effect/turf_decal/trimline/brown/filled/line{ dir = 1 @@ -18346,20 +18342,6 @@ /obj/structure/cable, /turf/open/floor/iron/dark/telecomms, /area/station/tcommsat/server) -"foi" = ( -/obj/structure/chair/sofa/corp/corner{ - color = "#DE3A3A"; - dir = 8 - }, -/obj/machinery/status_display/ai/directional/east, -/obj/item/radio/intercom/directional/south{ - pixel_x = 4 - }, -/obj/machinery/light_switch/directional/south{ - pixel_x = -9 - }, -/turf/open/floor/iron/cafeteria, -/area/station/service/cafeteria) "fok" = ( /obj/effect/turf_decal/trimline/purple/filled/corner{ dir = 8 @@ -18675,7 +18657,7 @@ }, /area/station/hallway/primary/aft) "fsk" = ( -/obj/item/bedsheet/random/double, +/obj/effect/spawner/random/bedsheet/any/double, /obj/machinery/newscaster/directional/east, /obj/structure/bed/double/pod, /turf/open/floor/carpet/cyan, @@ -18805,15 +18787,6 @@ /obj/machinery/door/airlock/maintenance_hatch, /turf/open/floor/catwalk_floor/iron_smooth, /area/station/maintenance/department/crew_quarters/bar) -"fva" = ( -/obj/structure/table, -/obj/machinery/microwave{ - desc = "Cooks and boils stuff, somehow."; - pixel_x = -2; - pixel_y = 5 - }, -/turf/open/floor/iron/kitchen, -/area/station/service/kitchen) "fve" = ( /obj/effect/turf_decal/trimline/blue/filled/corner{ dir = 8 @@ -18866,6 +18839,18 @@ /obj/machinery/vending/wardrobe/chem_wardrobe, /turf/open/floor/iron/freezer, /area/station/medical/chemistry) +"fvY" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/railing/corner{ + dir = 8 + }, +/obj/effect/turf_decal/siding/dark/corner{ + dir = 8 + }, +/turf/open/floor/iron/kitchen, +/area/station/service/kitchen) "fwc" = ( /obj/structure/table, /obj/effect/turf_decal/trimline/blue/filled/line{ @@ -18962,11 +18947,6 @@ /obj/item/toy/cards/deck/tarot, /turf/open/floor/iron/grimy, /area/station/commons/lounge) -"fxo" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/chair/stool/directional/east, -/turf/open/floor/iron/cafeteria, -/area/station/service/cafeteria) "fxD" = ( /obj/structure/sign/warning/chem_diamond/directional/north, /obj/structure/rack/shelf, @@ -19013,10 +18993,6 @@ /obj/structure/window/reinforced/spawner/directional/north, /turf/open/floor/carpet/stellar, /area/station/service/chapel/funeral) -"fye" = ( -/obj/effect/spawner/structure/window/reinforced, -/turf/open/floor/plating/airless, -/area/station/cargo/office) "fys" = ( /obj/effect/turf_decal/trimline/purple/filled/warning{ dir = 1 @@ -19680,12 +19656,6 @@ /obj/structure/chair/stool/directional/south, /turf/open/floor/wood/large, /area/station/hallway/secondary/exit/departure_lounge) -"fJV" = ( -/obj/machinery/door/window{ - dir = 8 - }, -/turf/open/floor/carpet/purple, -/area/station/common/night_club) "fKb" = ( /turf/open/floor/iron/smooth, /area/station/command/cc_dock) @@ -19790,6 +19760,7 @@ /obj/structure/disposalpipe/segment, /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/freezer, /area/station/medical/pharmacy) "fLX" = ( @@ -19825,19 +19796,6 @@ dir = 4 }, /area/station/cargo/storage) -"fMm" = ( -/obj/structure/table, -/obj/structure/displaycase/forsale/kitchen{ - pixel_y = 8 - }, -/obj/machinery/door/firedoor, -/obj/machinery/door/poddoor/shutters/preopen{ - dir = 8; - id = "kitchen_counter"; - name = "Kitchen Counter Shutters" - }, -/turf/open/floor/iron/large, -/area/station/service/kitchen) "fMy" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -19859,6 +19817,18 @@ /obj/effect/decal/cleanable/dirt, /turf/open/floor/plating, /area/station/maintenance/starboard/greater) +"fNg" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/effect/turf_decal/siding/wood/corner{ + 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/cafeteria, +/area/station/service/cafeteria) "fNt" = ( /obj/effect/decal/cleanable/dirt, /obj/item/paper/crumpled/fluff{ @@ -19879,6 +19849,12 @@ /obj/effect/turf_decal/tile/blue/diagonal_centre, /turf/open/floor/iron/diagonal, /area/station/hallway/secondary/exit/departure_lounge) +"fNI" = ( +/obj/machinery/netpod, +/obj/machinery/light/small/blacklight/directional/west, +/obj/item/radio/intercom/directional/west, +/turf/open/floor/catwalk_floor/iron_dark, +/area/station/cargo/bitrunning/den) "fNL" = ( /obj/effect/turf_decal/stripes/line, /obj/machinery/vending/hydroseeds, @@ -19912,11 +19888,6 @@ }, /turf/open/floor/wood/large, /area/station/security/courtroom) -"fNX" = ( -/obj/structure/ore_box, -/obj/effect/turf_decal/delivery, -/turf/open/floor/iron/smooth_corner, -/area/station/cargo/miningdock) "fNY" = ( /obj/structure/closet/l3closet/virology, /obj/effect/turf_decal/trimline/dark_green/filled/line{ @@ -20043,6 +20014,11 @@ /obj/effect/landmark/event_spawn, /turf/open/floor/grass, /area/station/service/chapel) +"fPB" = ( +/obj/structure/cable, +/obj/effect/landmark/start/bitrunner, +/turf/open/floor/catwalk_floor/iron_dark, +/area/station/cargo/bitrunning/den) "fPE" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -20260,6 +20236,11 @@ dir = 1 }, /area/station/engineering/atmos) +"fUb" = ( +/obj/structure/disposalpipe/segment, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron/kitchen, +/area/station/service/kitchen) "fUc" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -20573,6 +20554,19 @@ /obj/structure/lattice/catwalk, /turf/open/space/basic, /area/space/nearstation) +"fYn" = ( +/obj/structure/disposalpipe/segment, +/obj/machinery/biogenerator, +/obj/machinery/door/poddoor/shutters/preopen{ + dir = 1; + id = "hydroponics_counter"; + name = "Hydroponics Counter Shutters" + }, +/obj/machinery/door/firedoor, +/obj/structure/window/spawner/directional/east, +/obj/effect/turf_decal/bot, +/turf/open/floor/iron/large, +/area/station/service/hydroponics) "fYs" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/wood, @@ -20598,13 +20592,6 @@ /obj/structure/cable, /turf/open/floor/iron/smooth, /area/station/maintenance/department/electrical) -"fZg" = ( -/obj/effect/turf_decal/loading_area{ - dir = 4 - }, -/obj/effect/turf_decal/tile/green/diagonal_centre, -/turf/open/floor/iron/diagonal, -/area/station/hallway/secondary/service) "fZo" = ( /obj/effect/turf_decal/trimline/yellow/filled/warning{ dir = 6 @@ -20840,6 +20827,15 @@ }, /turf/open/floor/iron/grimy, /area/station/commons/lounge) +"gcp" = ( +/obj/effect/turf_decal/stripes/end{ + dir = 8 + }, +/obj/item/radio/intercom/directional/east, +/obj/machinery/light/cold/directional/east, +/obj/machinery/gibber, +/turf/open/floor/iron/kitchen_coldroom/freezerfloor, +/area/station/service/kitchen/coldroom) "gcr" = ( /obj/structure/disposalpipe/segment{ dir = 9 @@ -21721,17 +21717,6 @@ /obj/structure/sign/poster/official/wtf_is_co2, /turf/closed/wall, /area/station/engineering/atmos) -"goP" = ( -/obj/effect/turf_decal/trimline/brown/filled/line{ - dir = 8 - }, -/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_edge{ - dir = 4 - }, -/area/station/cargo/bitrunning/den) "goS" = ( /turf/open/floor/iron/freezer, /area/station/medical/chemistry) @@ -21868,11 +21853,11 @@ /area/station/medical/medbay/central) "gra" = ( /obj/structure/rack/gunrack, -/obj/effect/spawner/armory_spawn/microfusion, /obj/effect/turf_decal/tile/dark_red/half{ dir = 1 }, /obj/effect/turf_decal/delivery, +/obj/effect/spawner/armory_spawn/shotguns, /turf/open/floor/engine, /area/station/ai_monitored/security/armory) "grg" = ( @@ -21961,22 +21946,20 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron/small, /area/station/hallway/secondary/exit/departure_lounge) -"gsb" = ( -/obj/machinery/airalarm/directional/west, -/obj/effect/turf_decal/trimline/brown/filled/line{ - dir = 8 - }, -/obj/structure/table, -/obj/item/paper_bin{ - pixel_y = 4 - }, -/obj/item/pen{ - pixel_y = 4 +"gsl" = ( +/obj/effect/turf_decal/trimline/green/filled/warning{ + dir = 9 }, -/turf/open/floor/iron/smooth_edge{ +/obj/structure/disposalpipe/segment{ dir = 4 }, -/area/station/cargo/drone_bay) +/obj/machinery/power/apc/auto_name/directional/north, +/obj/machinery/light_switch/directional/north{ + pixel_x = 14 + }, +/obj/structure/cable, +/turf/open/floor/iron, +/area/station/service/hydroponics) "gsL" = ( /obj/structure/showcase/cyborg/old{ dir = 8; @@ -21995,6 +21978,9 @@ "gsU" = ( /turf/closed/wall, /area/station/maintenance/disposal) +"gsZ" = ( +/turf/open/floor/iron/smooth_large, +/area/station/cargo/miningfoundry) "gta" = ( /obj/structure/sign/poster/official/periodic_table/directional/north, /turf/open/floor/iron/white/smooth_large, @@ -22078,18 +22064,6 @@ /obj/effect/turf_decal/trimline/dark_red/arrow_ccw, /turf/open/floor/iron/small, /area/station/hallway/secondary/exit/departure_lounge) -"gtJ" = ( -/obj/effect/turf_decal/trimline/brown/filled/line{ - dir = 10 - }, -/obj/effect/turf_decal/trimline/brown/filled/mid_joiner, -/obj/effect/turf_decal/trimline/brown/filled/mid_joiner{ - dir = 8 - }, -/obj/effect/turf_decal/bot, -/obj/machinery/computer/order_console/cook, -/turf/open/floor/iron/smooth_large, -/area/station/hallway/secondary/service) "gtM" = ( /obj/effect/turf_decal/trimline/purple/filled/line, /obj/structure/closet/secure_closet/cytology, @@ -22239,6 +22213,14 @@ /obj/machinery/duct, /turf/open/floor/iron/white/smooth_large, /area/station/medical/storage) +"gvO" = ( +/obj/structure/railing/corner{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/turf_decal/siding/dark, +/turf/open/floor/iron/kitchen, +/area/station/service/kitchen) "gwc" = ( /obj/effect/turf_decal/trimline/yellow/filled/line{ dir = 8 @@ -22437,14 +22419,6 @@ /obj/structure/window/reinforced/plasma/spawner/directional/east, /turf/open/floor/iron/smooth, /area/station/engineering/atmos) -"gyK" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/open/floor/iron/cafeteria, -/area/station/service/cafeteria) "gzn" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -22909,18 +22883,6 @@ /obj/structure/window/spawner/directional/south, /turf/open/floor/carpet, /area/station/service/library) -"gFG" = ( -/obj/machinery/atmospherics/pipe/heat_exchanging/manifold{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/mob/living/basic/goat/pete{ - name = "Pete" - }, -/obj/effect/turf_decal/weather/snow, -/turf/open/floor/iron/kitchen_coldroom/freezerfloor, -/area/station/service/kitchen/coldroom) "gFW" = ( /obj/effect/turf_decal/trimline/dark/filled/line{ dir = 1 @@ -23036,6 +22998,16 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/dark/hidden, /turf/open/floor/catwalk_floor/iron_smooth, /area/station/maintenance/department/medical/central) +"gHS" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/turf_decal/weather/snow, +/obj/machinery/light_switch/directional/west{ + pixel_x = -24 + }, +/obj/structure/cable, +/obj/structure/closet/secure_closet/freezer/kitchen, +/turf/open/floor/iron/kitchen_coldroom/freezerfloor, +/area/station/service/kitchen/coldroom) "gHW" = ( /obj/structure/table/optable{ desc = "A cold, hard place for your final rest."; @@ -23125,15 +23097,6 @@ /obj/effect/landmark/start/security_officer, /turf/open/floor/iron/dark/smooth_large, /area/station/security/brig) -"gIO" = ( -/obj/effect/turf_decal/weather/snow, -/obj/machinery/atmospherics/pipe/heat_exchanging/junction{ - dir = 1 - }, -/obj/effect/landmark/event_spawn, -/obj/structure/cable, -/turf/open/floor/iron/kitchen_coldroom/freezerfloor, -/area/station/service/kitchen/coldroom) "gIT" = ( /obj/structure/table/reinforced, /obj/item/book/manual/wiki/barman_recipes, @@ -23189,6 +23152,12 @@ /obj/structure/chair/office, /turf/open/floor/iron/smooth_large, /area/station/cargo/drone_bay) +"gJt" = ( +/obj/structure/cable, +/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/cargo/bitrunning/den) "gJw" = ( /obj/structure/chair/stool/directional/west, /turf/open/floor/wood/large, @@ -23247,23 +23216,24 @@ /obj/effect/landmark/start/atmospheric_technician, /turf/open/floor/iron/dark/smooth_large, /area/station/engineering/atmos/hfr_room) +"gKa" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/effect/turf_decal/siding/wood{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron/cafeteria, +/area/station/service/cafeteria) "gKl" = ( /obj/structure/chair/wood{ dir = 8 }, /turf/open/floor/carpet/black, /area/station/service/chapel/office) -"gKB" = ( -/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, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/effect/turf_decal/tile/green/diagonal_centre, -/turf/open/floor/iron/diagonal, -/area/station/hallway/secondary/service) "gKO" = ( /turf/open/floor/catwalk_floor/iron_smooth, /area/station/hallway/primary/aft) @@ -23523,17 +23493,6 @@ /obj/machinery/duct, /turf/open/floor/catwalk_floor/iron_smooth, /area/station/maintenance/department/engine/atmos) -"gOj" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/door/airlock/freezer{ - critical_machine = 1; - name = "Coldroom" - }, -/obj/effect/mapping_helpers/airlock/access/all/service/kitchen, -/obj/structure/fans/tiny, -/turf/open/floor/iron/freezer, -/area/station/service/kitchen/coldroom) "gOn" = ( /obj/effect/turf_decal/siding/wood{ dir = 4 @@ -23688,6 +23647,17 @@ }, /turf/open/floor/iron/dark/smooth_large, /area/station/medical/pharmacy) +"gQp" = ( +/obj/machinery/bouldertech/refinery, +/obj/machinery/conveyor{ + dir = 4; + id = "mining" + }, +/obj/structure/railing{ + dir = 1 + }, +/turf/open/floor/iron/smooth_large, +/area/station/cargo/miningfoundry) "gQq" = ( /obj/machinery/power/turbine/core_rotor{ mapping_id = "main_turbine" @@ -24136,13 +24106,6 @@ /obj/structure/disposalpipe/segment, /turf/open/floor/iron/freezer, /area/station/medical/chemistry) -"gWT" = ( -/obj/machinery/computer/quantum_console{ - dir = 8 - }, -/obj/machinery/light/small/red/directional/east, -/turf/open/floor/catwalk_floor/iron_dark, -/area/station/cargo/bitrunning/den) "gWV" = ( /obj/effect/turf_decal/trimline/yellow/filled/warning{ dir = 4 @@ -24333,6 +24296,13 @@ /obj/machinery/oven/range, /turf/open/floor/iron/kitchen, /area/station/service/kitchen) +"gZV" = ( +/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/green/diagonal_centre, +/turf/open/floor/iron/diagonal, +/area/station/hallway/secondary/service) "gZX" = ( /obj/structure/trash_pile, /turf/open/floor/iron/smooth, @@ -24411,10 +24381,6 @@ /obj/structure/disposalpipe/segment, /turf/open/floor/wood/large, /area/station/hallway/primary/central/fore) -"haV" = ( -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, -/turf/open/floor/iron/smooth_large, -/area/station/cargo/miningoffice) "hbb" = ( /obj/effect/decal/cleanable/dirt, /obj/effect/decal/cleanable/dirt, @@ -24460,17 +24426,6 @@ /obj/machinery/portable_atmospherics/canister/anesthetic_mix, /turf/open/floor/iron/showroomfloor, /area/station/medical/coldroom) -"hbG" = ( -/obj/effect/turf_decal/siding/wood{ - dir = 4 - }, -/obj/machinery/door/window/right/directional/south{ - dir = 1; - name = "Jim Norton's Quebecois Coffee"; - req_one_access = list("service","maint_tunnels") - }, -/turf/open/floor/wood, -/area/station/hallway/secondary/entry) "hbJ" = ( /obj/effect/spawner/structure/window/reinforced, /turf/open/floor/plating, @@ -25027,15 +24982,6 @@ /obj/structure/window/spawner/directional/east, /turf/open/misc/beach/sand, /area/station/science/research) -"hjg" = ( -/obj/machinery/power/apc/auto_name/directional/north, -/obj/structure/table, -/obj/item/plate, -/obj/effect/spawner/random/trash/food_packaging, -/obj/structure/cable, -/obj/machinery/camera/autoname/directional/north, -/turf/open/floor/iron/smooth_edge, -/area/station/cargo/bitrunning/den) "hji" = ( /obj/effect/turf_decal/trimline/red/filled/line{ dir = 1 @@ -25159,6 +25105,18 @@ dir = 1 }, /area/station/cargo/miningdock) +"hkU" = ( +/obj/structure/table, +/obj/machinery/door/firedoor, +/obj/machinery/door/poddoor/shutters/preopen{ + dir = 8; + id = "kitchen_counter"; + name = "Kitchen Counter Shutters" + }, +/obj/item/plate, +/obj/item/holosign_creator/robot_seat/restaurant, +/turf/open/floor/iron/large, +/area/station/service/kitchen) "hkX" = ( /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ dir = 1 @@ -25418,10 +25376,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/plating, /area/station/maintenance/starboard/greater) -"hqe" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/turf/open/floor/iron/kitchen, -/area/station/service/kitchen) "hqf" = ( /obj/machinery/digital_clock, /turf/closed/wall/r_wall, @@ -25439,6 +25393,15 @@ dir = 8 }, /area/station/engineering/atmos/pumproom) +"hqp" = ( +/obj/structure/window/reinforced/survival_pod/spawner/directional/south, +/obj/machinery/door/window/survival_pod/left/directional/east{ + name = "Fitness Ring" + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/light/floor, +/turf/open/floor/iron/dark/smooth_large, +/area/station/commons/fitness/recreation/entertainment) "hqu" = ( /obj/machinery/atmospherics/pipe/smart/simple/cyan/visible{ dir = 4 @@ -25817,6 +25780,18 @@ /obj/structure/sign/departments/science/directional/north, /turf/open/floor/iron/white/smooth_edge, /area/station/hallway/primary/fore) +"hwE" = ( +/obj/structure/cable, +/obj/effect/turf_decal/trimline/green/filled/line{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/light/directional/north, +/turf/open/floor/iron/edge, +/area/station/service/hydroponics) "hwG" = ( /obj/structure/bed/double, /obj/item/bedsheet/cmo/double, @@ -25997,6 +25972,16 @@ }, /turf/open/floor/carpet/blue, /area/station/command/bridge) +"hyw" = ( +/obj/structure/chair/stool/directional/west{ + dir = 4 + }, +/obj/effect/turf_decal/tile/yellow/opposingcorners, +/obj/effect/turf_decal/tile/red/opposingcorners{ + dir = 1 + }, +/turf/open/floor/iron, +/area/station/commons/lounge) "hyx" = ( /obj/machinery/dna_scannernew, /obj/effect/turf_decal/delivery, @@ -26278,9 +26263,6 @@ }, /turf/open/floor/carpet/executive, /area/station/command/heads_quarters/hop) -"hBP" = ( -/turf/closed/wall, -/area/station/hallway/secondary/service) "hBQ" = ( /obj/structure/lattice/catwalk, /obj/structure/cable, @@ -26353,6 +26335,23 @@ }, /turf/open/floor/engine, /area/station/engineering/supermatter) +"hCJ" = ( +/obj/machinery/door/firedoor, +/obj/effect/mapping_helpers/airlock/access/all/service/general, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/door/airlock/service/glass{ + name = "Service Hall" + }, +/obj/effect/turf_decal/siding/wood/corner{ + dir = 1 + }, +/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/large, +/area/station/service/cafeteria) "hCL" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -26544,10 +26543,6 @@ /obj/machinery/newscaster/directional/north, /turf/closed/wall/r_wall, /area/station/maintenance/starboard/aft) -"hEN" = ( -/obj/effect/landmark/start/bouncer, -/turf/open/floor/iron/cafeteria, -/area/station/service/cafeteria) "hER" = ( /obj/machinery/door/firedoor, /obj/effect/turf_decal/trimline/blue/filled/line{ @@ -26583,16 +26578,6 @@ /obj/effect/landmark/start/hangover, /turf/open/floor/glass/reinforced, /area/station/hallway/secondary/exit/departure_lounge) -"hFu" = ( -/obj/effect/turf_decal/bot, -/obj/machinery/airalarm/directional/north, -/obj/machinery/camera/directional/north{ - c_tag = "Service - Service Hall"; - dir = 9; - name = "service camera" - }, -/turf/open/floor/iron/large, -/area/station/hallway/secondary/service) "hFA" = ( /obj/machinery/atmospherics/pipe/smart/simple/cyan/visible{ dir = 10 @@ -26663,6 +26648,30 @@ /obj/structure/window/spawner/directional/south, /turf/open/floor/iron/smooth_large, /area/station/maintenance/disposal) +"hGX" = ( +/obj/structure/table/reinforced, +/obj/machinery/door/firedoor, +/obj/item/paper_bin{ + pixel_y = 4 + }, +/obj/item/pen{ + pixel_y = 4 + }, +/obj/structure/disposalpipe/segment, +/obj/machinery/door/window/left/directional/south{ + name = "Hydroponics Desk"; + req_access = list("hydroponics") + }, +/obj/machinery/door/poddoor/shutters/preopen{ + dir = 1; + id = "hydroponics_counter"; + name = "Hydroponics Counter Shutters" + }, +/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/large, +/area/station/service/hydroponics) "hHg" = ( /obj/structure/table, /obj/item/tank/internals/emergency_oxygen{ @@ -26758,6 +26767,14 @@ }, /turf/open/floor/iron/smooth, /area/station/science/ordnance/storage) +"hIw" = ( +/obj/machinery/firealarm/directional/east, +/obj/machinery/vending/dinnerware, +/obj/item/toy/figure/chef{ + pixel_y = 16 + }, +/turf/open/floor/iron/kitchen, +/area/station/service/kitchen) "hIA" = ( /turf/closed/wall/r_wall, /area/station/command/heads_quarters/captain) @@ -26765,15 +26782,6 @@ /obj/effect/landmark/event_spawn, /turf/open/floor/pod/dark, /area/station/service/chapel) -"hJg" = ( -/obj/structure/table, -/obj/item/modular_computer/laptop/preset/civilian{ - pixel_y = 5; - pixel_x = 2 - }, -/obj/structure/cable, -/turf/open/floor/iron/smooth_large, -/area/station/cargo/bitrunning/den) "hJx" = ( /obj/machinery/atmospherics/components/unary/outlet_injector/monitored/ordnance_burn_chamber_input{ dir = 4 @@ -26844,18 +26852,6 @@ dir = 8 }, /area/station/engineering/atmos) -"hKK" = ( -/obj/structure/chair/plastic{ - dir = 8 - }, -/obj/effect/turf_decal/trimline/brown/filled/line{ - dir = 5 - }, -/obj/machinery/computer/security/telescreen/entertainment/directional/east, -/obj/structure/sign/poster/contraband/random/directional/north, -/obj/effect/landmark/start/bitrunner, -/turf/open/floor/iron/smooth, -/area/station/cargo/bitrunning/den) "hKP" = ( /obj/item/reagent_containers/cup/bucket, /obj/effect/decal/cleanable/cobweb/cobweb2, @@ -27011,6 +27007,13 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/dark/smooth_large, /area/station/service/theater) +"hNB" = ( +/obj/effect/turf_decal/weather/snow, +/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/kitchen_coldroom/freezerfloor, +/area/station/service/kitchen/coldroom) "hND" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -27309,13 +27312,6 @@ }, /turf/open/floor/iron/white, /area/station/hallway/primary/fore) -"hSf" = ( -/obj/effect/landmark/start/shaft_miner, -/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_large, -/area/station/cargo/miningdock) "hSn" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ dir = 4 @@ -27548,12 +27544,6 @@ dir = 1 }, /area/station/engineering/atmos) -"hUv" = ( -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ - dir = 4 - }, -/turf/open/floor/iron/cafeteria, -/area/station/service/cafeteria) "hUD" = ( /obj/machinery/atmospherics/components/unary/thermomachine/heater/on{ dir = 8 @@ -28016,6 +28006,11 @@ /obj/effect/landmark/event_spawn, /turf/open/floor/iron/grimy, /area/station/service/library) +"ibR" = ( +/obj/structure/cable, +/obj/machinery/airalarm/directional/east, +/turf/open/floor/catwalk_floor/iron_dark, +/area/station/cargo/bitrunning/den) "ibV" = ( /obj/structure/table/reinforced, /obj/machinery/door/firedoor, @@ -28205,6 +28200,20 @@ }, /turf/open/floor/iron/white/small, /area/station/common/pool) +"ige" = ( +/obj/structure/table, +/obj/machinery/door/firedoor, +/obj/machinery/door/poddoor/shutters/preopen{ + dir = 8; + id = "kitchen_counter"; + name = "Kitchen Counter Shutters" + }, +/obj/structure/desk_bell{ + pixel_x = 7; + pixel_y = 10 + }, +/turf/open/floor/iron/cafeteria, +/area/station/service/kitchen) "igk" = ( /obj/structure/window/reinforced/spawner/directional/south, /obj/effect/landmark/start/chaplain, @@ -28293,12 +28302,6 @@ dir = 4 }, /area/station/medical/virology) -"ihS" = ( -/obj/effect/turf_decal/delivery, -/obj/structure/ore_box, -/obj/machinery/light/directional/north, -/turf/open/floor/iron/smooth_edge, -/area/station/cargo/miningdock) "ihT" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -28750,21 +28753,6 @@ /obj/effect/mapping_helpers/airlock/access/all/command/hop, /turf/open/floor/catwalk_floor/iron_smooth, /area/station/maintenance/starboard/fore) -"iog" = ( -/obj/structure/table, -/obj/effect/spawner/random/food_or_drink/cake_ingredients, -/obj/item/reagent_containers/condiment/enzyme{ - pixel_x = -10; - pixel_y = 18 - }, -/obj/item/kitchen/rollingpin{ - pixel_x = 4 - }, -/obj/item/reagent_containers/cup/beaker{ - pixel_x = 5 - }, -/turf/open/floor/iron/kitchen, -/area/station/service/kitchen) "iom" = ( /obj/effect/turf_decal/trimline/brown/filled/line{ dir = 9 @@ -28847,6 +28835,17 @@ /obj/effect/turf_decal/trimline/neutral/mid_joiner, /turf/open/floor/iron/smooth_large, /area/station/cargo/sorting) +"ioX" = ( +/obj/machinery/camera/directional/south{ + c_tag = "Service - Cafeteria Aft"; + name = "service camera" + }, +/obj/structure/chair/sofa/corp/left{ + color = "#DE3A3A"; + dir = 8 + }, +/turf/open/floor/iron/cafeteria, +/area/station/service/cafeteria) "ioZ" = ( /obj/effect/turf_decal/stripes/end{ dir = 4 @@ -29145,6 +29144,20 @@ }, /turf/open/floor/iron/dark/smooth_large, /area/station/security/prison) +"isq" = ( +/obj/machinery/door/firedoor, +/obj/machinery/door/poddoor/shutters/preopen{ + dir = 8; + id = "kitchen_counter"; + name = "Kitchen Counter Shutters" + }, +/obj/machinery/pollution_scrubber{ + pixel_x = -7; + pixel_y = 1 + }, +/obj/structure/table, +/turf/open/floor/iron/large, +/area/station/service/kitchen) "isr" = ( /obj/effect/decal/cleanable/dirt, /obj/structure/trash_pile, @@ -29220,20 +29233,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron/white, /area/station/medical/medbay/central) -"itf" = ( -/obj/machinery/computer/department_orders/service, -/obj/effect/turf_decal/trimline/brown/filled/line{ - dir = 6 - }, -/obj/effect/turf_decal/trimline/brown/filled/mid_joiner, -/obj/effect/turf_decal/trimline/brown/filled/mid_joiner{ - dir = 4 - }, -/obj/structure/noticeboard/directional/north, -/obj/machinery/light_switch/directional/east, -/obj/effect/turf_decal/bot, -/turf/open/floor/iron/smooth_large, -/area/station/hallway/secondary/service) "iti" = ( /obj/structure/table/wood, /obj/machinery/fax{ @@ -29392,6 +29391,14 @@ /obj/structure/disposalpipe/segment, /turf/open/floor/iron/smooth_large, /area/station/cargo/lobby) +"iva" = ( +/obj/structure/extinguisher_cabinet/directional/east, +/obj/machinery/computer/quantum_console{ + dir = 8 + }, +/obj/structure/cable, +/turf/open/floor/catwalk_floor/iron_dark, +/area/station/cargo/bitrunning/den) "ivb" = ( /obj/structure/disposalpipe/segment{ dir = 4 @@ -29432,6 +29439,18 @@ /obj/effect/spawner/random/structure/tank_holder, /turf/open/floor/catwalk_floor/iron_smooth, /area/station/medical/virology) +"ivQ" = ( +/obj/machinery/computer/order_console/cook, +/obj/effect/turf_decal/trimline/brown/filled/line{ + dir = 10 + }, +/obj/effect/turf_decal/trimline/brown/filled/mid_joiner{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/brown/filled/mid_joiner, +/obj/effect/turf_decal/bot, +/turf/open/floor/iron/smooth_large, +/area/station/hallway/secondary/service) "ivR" = ( /obj/structure/cable, /obj/effect/spawner/structure/window/reinforced, @@ -29461,36 +29480,6 @@ /obj/structure/cable, /turf/open/floor/grass, /area/station/command/heads_quarters/hos) -"ivZ" = ( -/obj/structure/table, -/obj/item/storage/box/donkpockets{ - pixel_x = 5; - pixel_y = 3 - }, -/obj/item/storage/box/donkpockets/donkpocketpizza{ - pixel_x = 5; - pixel_y = 6 - }, -/obj/item/storage/box/donkpockets/donkpocketteriyaki{ - pixel_x = 5; - pixel_y = 9 - }, -/obj/item/reagent_containers/condiment/saltshaker{ - desc = "Salt. From space oceans, presumably. A staple of modern medicine."; - pixel_x = -8; - pixel_y = 12 - }, -/obj/item/reagent_containers/condiment/peppermill{ - desc = "Often used to flavor food or make people sneeze. Fashionably moved to the left side of the table."; - pixel_x = -8; - pixel_y = 2 - }, -/obj/item/knife/kitchen{ - pixel_x = -13; - pixel_y = 3 - }, -/turf/open/floor/iron/kitchen, -/area/station/service/kitchen) "iwe" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -29954,10 +29943,6 @@ /obj/machinery/light/cold/directional/east, /turf/open/floor/iron/dark, /area/station/engineering/supermatter/room) -"iCW" = ( -/obj/effect/spawner/structure/window/reinforced, -/turf/open/floor/plating/airless, -/area/station/command/heads_quarters/qm) "iCZ" = ( /obj/machinery/computer/communications, /obj/machinery/keycard_auth{ @@ -30048,6 +30033,15 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron/smooth_large, /area/station/hallway/secondary/entry) +"iEJ" = ( +/obj/effect/turf_decal/weather/snow, +/obj/machinery/camera/directional/west{ + c_tag = "Service - Kitchen Coldroom"; + dir = 5; + name = "service camera" + }, +/turf/open/floor/iron/kitchen_coldroom/freezerfloor, +/area/station/service/kitchen/coldroom) "iEL" = ( /obj/effect/mapping_helpers/airlock/cyclelink_helper, /obj/machinery/door/airlock/external/glass{ @@ -30100,17 +30094,6 @@ }, /turf/open/floor/iron/dark/smooth_large, /area/station/hallway/primary/fore) -"iFV" = ( -/obj/effect/turf_decal/bot, -/obj/machinery/computer/security/mining, -/obj/effect/turf_decal/trimline/brown/filled/line{ - dir = 9 - }, -/obj/structure/window/spawner/directional/west{ - pixel_x = -4 - }, -/turf/open/floor/iron/smooth_edge, -/area/station/cargo/miningdock) "iFY" = ( /obj/structure/cable, /obj/machinery/holopad, @@ -30334,12 +30317,6 @@ dir = 1 }, /area/station/security/prison) -"iIG" = ( -/obj/item/radio/intercom/directional/east, -/obj/effect/turf_decal/box, -/obj/structure/closet/secure_closet/freezer/kitchen, -/turf/open/floor/iron/kitchen, -/area/station/service/kitchen) "iJg" = ( /obj/effect/turf_decal/tile/neutral/anticorner/contrasted{ dir = 1 @@ -30381,18 +30358,6 @@ dir = 8 }, /area/station/engineering/atmos) -"iJt" = ( -/obj/machinery/light_switch/directional/south{ - pixel_x = -15 - }, -/obj/machinery/firealarm/directional/east, -/obj/structure/extinguisher_cabinet/directional/south, -/obj/item/toy/figure/chef{ - pixel_y = 16 - }, -/obj/machinery/vending/dinnerware, -/turf/open/floor/iron/kitchen, -/area/station/service/kitchen) "iJB" = ( /obj/structure/closet/secure_closet/security/sec, /obj/effect/turf_decal/trimline/red/filled/line{ @@ -30444,6 +30409,12 @@ /obj/effect/turf_decal/siding/wood, /turf/open/floor/iron/dark/smooth_large, /area/station/cargo/storage) +"iKe" = ( +/obj/structure/sign/warning/vacuum/directional/north, +/obj/structure/closet/secure_closet/miner, +/obj/effect/turf_decal/delivery, +/turf/open/floor/iron/smooth_large, +/area/station/cargo/miningdock) "iKs" = ( /obj/structure/table, /obj/item/stack/sheet/cardboard{ @@ -30476,13 +30447,6 @@ dir = 8 }, /area/station/engineering/atmos/hfr_room) -"iLb" = ( -/obj/effect/turf_decal/trimline/brown/filled/line{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/turf/open/floor/iron/dark/textured_edge, -/area/station/cargo/bitrunning/den) "iLH" = ( /obj/effect/turf_decal/trimline/purple/filled/warning{ dir = 4 @@ -30604,17 +30568,16 @@ dir = 1 }, /area/station/hallway/secondary/command) -"iNa" = ( -/obj/effect/turf_decal/delivery, -/obj/machinery/camera/directional/west{ - c_tag = "Cargo - Mining" - }, -/obj/machinery/power/apc/auto_name/directional/west, -/obj/structure/cable, -/turf/open/floor/iron/smooth_edge{ +"iNb" = ( +/obj/effect/turf_decal/tile/green/diagonal_centre, +/obj/structure/disposalpipe/segment{ dir = 4 }, -/area/station/cargo/miningdock) +/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/diagonal, +/area/station/hallway/secondary/service) "iNk" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -30831,6 +30794,12 @@ /obj/machinery/meter, /turf/open/floor/iron/smooth_large, /area/station/science/ordnance) +"iRi" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/disposalpipe/segment, +/obj/effect/landmark/start/cook, +/turf/open/floor/iron/kitchen, +/area/station/service/kitchen) "iRn" = ( /obj/effect/turf_decal/trimline/green/filled/line{ dir = 8 @@ -31061,19 +31030,6 @@ /obj/effect/landmark/start/assistant, /turf/open/floor/iron/grimy, /area/station/commons/lounge) -"iUy" = ( -/obj/structure/disposalpipe/trunk{ - dir = 8 - }, -/obj/effect/turf_decal/delivery, -/obj/structure/disposaloutlet{ - dir = 4; - name = "Cargo Deliveries" - }, -/obj/structure/window/spawner/directional/west, -/obj/structure/window/spawner/directional/south, -/turf/open/floor/iron/large, -/area/station/hallway/secondary/service) "iUz" = ( /obj/effect/turf_decal/siding/wood{ dir = 9 @@ -31459,6 +31415,17 @@ }, /turf/open/floor/iron/dark, /area/station/security/prison) +"iYT" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/turf_decal/tile/green/diagonal_centre, +/obj/machinery/status_display/ai/directional/north, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron/diagonal, +/area/station/hallway/secondary/service) "iYV" = ( /obj/structure/chair/comfy/brown{ color = "#D381C9"; @@ -31575,6 +31542,11 @@ /obj/structure/disposalpipe/segment, /turf/open/floor/wood/large, /area/station/hallway/primary/central/fore) +"iZW" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/turf_decal/stripes/line, +/turf/open/floor/catwalk_floor/iron_smooth, +/area/station/cargo/miningfoundry) "jay" = ( /obj/structure/chair/sofa/right/brown{ dir = 8 @@ -31592,6 +31564,33 @@ /obj/effect/turf_decal/bot, /turf/open/floor/iron/dark/smooth_large, /area/station/engineering/atmos/hfr_room) +"jaG" = ( +/obj/structure/disposalpipe/segment, +/obj/structure/table, +/obj/item/reagent_containers/condiment/saltshaker{ + desc = "Salt. From space oceans, presumably. A staple of modern medicine."; + pixel_x = -8; + pixel_y = 12 + }, +/obj/item/reagent_containers/condiment/peppermill{ + desc = "Often used to flavor food or make people sneeze. Fashionably moved to the left side of the table."; + pixel_x = -8; + pixel_y = 2 + }, +/obj/item/storage/box/donkpockets{ + pixel_x = 5; + pixel_y = 3 + }, +/obj/item/storage/box/donkpockets/donkpocketpizza{ + pixel_x = 5; + pixel_y = 6 + }, +/obj/item/storage/box/donkpockets/donkpocketteriyaki{ + pixel_x = 5; + pixel_y = 9 + }, +/turf/open/floor/iron/kitchen, +/area/station/service/kitchen) "jbe" = ( /obj/structure/table/wood/fancy/royalblack, /obj/machinery/computer/records/medical/laptop, @@ -31761,15 +31760,6 @@ /obj/machinery/door/airlock/external, /turf/open/floor/catwalk_floor, /area/station/engineering/main) -"jdH" = ( -/obj/machinery/power/apc/auto_name/directional/north, -/obj/structure/cable, -/obj/machinery/griddle{ - pixel_x = 4 - }, -/obj/machinery/light/directional/north, -/turf/open/floor/iron/kitchen, -/area/station/service/kitchen) "jdN" = ( /obj/effect/decal/cleanable/dirt, /obj/effect/landmark/generic_maintenance_landmark, @@ -31868,6 +31858,13 @@ /obj/effect/turf_decal/bot, /turf/open/floor/iron/dark/smooth_large, /area/station/command/bridge) +"jfx" = ( +/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/stripes/line, +/turf/open/floor/catwalk_floor/iron_smooth, +/area/station/cargo/miningfoundry) "jfH" = ( /obj/effect/turf_decal/plaque{ icon_state = "L12" @@ -32060,20 +32057,6 @@ /obj/effect/landmark/start/hangover, /turf/open/floor/iron/smooth_edge, /area/station/hallway/primary/aft) -"jio" = ( -/obj/machinery/hydroponics/constructable, -/obj/effect/turf_decal/tile/dark/half, -/obj/effect/turf_decal/trimline/green/line{ - dir = 1 - }, -/obj/effect/turf_decal/trimline/green/mid_joiner{ - dir = 1 - }, -/obj/machinery/door/window/survival_pod{ - dir = 1 - }, -/turf/open/floor/iron/half, -/area/station/service/hydroponics) "jir" = ( /obj/effect/turf_decal/trimline/yellow/filled/line{ dir = 6 @@ -32388,6 +32371,23 @@ }, /turf/open/floor/plating/airless, /area/space/nearstation) +"jnu" = ( +/obj/effect/turf_decal/trimline/brown/filled/line{ + dir = 8 + }, +/obj/structure/table, +/obj/item/paper_bin{ + pixel_y = 4 + }, +/obj/item/pen{ + pixel_y = 4 + }, +/obj/machinery/power/apc/auto_name/directional/west, +/obj/structure/cable, +/turf/open/floor/iron/smooth_edge{ + dir = 4 + }, +/area/station/cargo/drone_bay) "jnF" = ( /obj/structure/railing{ dir = 8 @@ -32960,6 +32960,21 @@ }, /turf/open/floor/wood, /area/station/commons/dorms) +"juG" = ( +/obj/structure/rack, +/obj/item/circuitboard/machine/exoscanner{ + pixel_y = 3 + }, +/obj/item/circuitboard/machine/exoscanner, +/obj/item/circuitboard/machine/exoscanner{ + pixel_y = -3 + }, +/obj/machinery/requests_console/auto_name/directional/north, +/obj/structure/window/spawner/directional/west, +/obj/effect/turf_decal/trimline/brown/filled, +/obj/machinery/airalarm/directional/east, +/turf/open/floor/iron/smooth, +/area/station/cargo/drone_bay) "juO" = ( /obj/effect/spawner/random/maintenance/two, /obj/item/clothing/head/cone, @@ -33060,15 +33075,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/edge, /area/station/hallway/primary/central) -"jvw" = ( -/obj/effect/turf_decal/trimline/brown/filled/line{ - dir = 4 - }, -/obj/effect/landmark/start/bitrunner, -/turf/open/floor/iron/dark/textured_edge{ - dir = 8 - }, -/area/station/cargo/bitrunning/den) "jvx" = ( /obj/structure/table/wood, /obj/item/food/breadslice/plain, @@ -33097,6 +33103,18 @@ /obj/structure/cable, /turf/open/floor/catwalk_floor/iron_smooth, /area/station/maintenance/starboard/fore) +"jvC" = ( +/obj/effect/turf_decal/trimline/brown/filled/line{ + dir = 6 + }, +/obj/effect/turf_decal/trimline/brown/filled/mid_joiner{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/brown/filled/mid_joiner, +/obj/machinery/computer/department_orders/service, +/obj/effect/turf_decal/bot, +/turf/open/floor/iron/smooth_large, +/area/station/hallway/secondary/service) "jvJ" = ( /obj/effect/turf_decal/trimline/purple/filled/line{ dir = 4 @@ -33398,9 +33416,6 @@ /obj/effect/spawner/random/structure/crate, /turf/open/floor/iron/smooth, /area/station/maintenance/port/aft) -"jAS" = ( -/turf/open/floor/iron/smooth_large, -/area/station/cargo/miningdock) "jBm" = ( /obj/effect/turf_decal/trimline/yellow/filled/line{ dir = 8 @@ -33687,24 +33702,17 @@ }, /turf/open/floor/iron/dark, /area/station/ai_monitored/command/storage/eva) +"jDI" = ( +/obj/structure/chair/sofa/corp/left{ + color = "#DE3A3A"; + dir = 4 + }, +/turf/open/floor/iron/cafeteria, +/area/station/service/cafeteria) "jDS" = ( /obj/effect/spawner/random/trash/caution_sign, /turf/open/floor/iron/smooth, /area/station/maintenance/starboard/greater) -"jDX" = ( -/obj/effect/turf_decal/delivery, -/obj/effect/turf_decal/weather/snow, -/obj/machinery/door/window/right/directional/west{ - name = "Kitchen Deliveries"; - req_access = list("kitchen") - }, -/obj/structure/window/reinforced/spawner/directional/north, -/obj/machinery/atmospherics/components/binary/pump/on{ - dir = 8 - }, -/obj/structure/cable, -/turf/open/floor/iron/kitchen_coldroom/freezerfloor, -/area/station/service/kitchen/coldroom) "jDY" = ( /obj/item/radio/intercom/directional/north, /obj/machinery/suit_storage_unit/ce, @@ -33793,6 +33801,13 @@ /obj/structure/closet/radiation, /turf/open/floor/iron/smooth, /area/station/engineering/atmos) +"jEP" = ( +/obj/effect/turf_decal/weather/snow, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 8 + }, +/turf/open/floor/iron/kitchen_coldroom/freezerfloor, +/area/station/service/kitchen/coldroom) "jET" = ( /obj/structure/table/reinforced, /obj/machinery/camera/directional/west{ @@ -34838,23 +34853,6 @@ dir = 8 }, /area/station/command/gateway) -"jUL" = ( -/obj/structure/chair/sofa/corp/left{ - color = "#DE3A3A" - }, -/obj/machinery/light/warm/directional/north, -/obj/machinery/camera/directional/north{ - c_tag = "Service - Cafeteria Fore"; - name = "service camera" - }, -/obj/machinery/firealarm/directional/north{ - pixel_x = 8 - }, -/obj/item/radio/intercom/directional/north{ - pixel_x = -6 - }, -/turf/open/floor/iron/cafeteria, -/area/station/service/cafeteria) "jUZ" = ( /obj/structure/disposalpipe/segment, /obj/effect/turf_decal/trimline/red/filled/line{ @@ -34916,6 +34914,10 @@ /obj/effect/turf_decal/bot, /turf/open/floor/iron/dark/smooth_large, /area/station/command/heads_quarters/qm) +"jVW" = ( +/obj/structure/table, +/turf/open/floor/iron/cafeteria, +/area/station/service/cafeteria) "jWg" = ( /obj/effect/turf_decal/trimline/yellow/filled/warning{ dir = 6 @@ -35158,6 +35160,10 @@ /obj/effect/turf_decal/bot/left, /turf/open/floor/iron/dark/smooth_large, /area/station/engineering/atmos/hfr_room) +"jZq" = ( +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/iron/smooth_large, +/area/station/cargo/miningfoundry) "jZS" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -35267,13 +35273,6 @@ dir = 4 }, /area/station/engineering/storage) -"kbi" = ( -/obj/structure/cable, -/obj/effect/turf_decal/trimline/brown/filled/warning{ - dir = 1 - }, -/turf/open/floor/iron/smooth_edge, -/area/station/cargo/drone_bay) "kbj" = ( /obj/effect/turf_decal/trimline/yellow/filled/line{ dir = 4 @@ -35440,14 +35439,6 @@ }, /turf/open/floor/iron/dark/smooth_large, /area/station/security/warden) -"kdS" = ( -/obj/effect/turf_decal/trimline/brown/filled/line{ - dir = 10 - }, -/obj/machinery/light_switch/directional/west, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/turf/open/floor/iron/smooth, -/area/station/cargo/bitrunning/den) "kek" = ( /obj/effect/turf_decal/trimline/neutral/filled/warning{ dir = 1 @@ -35829,6 +35820,11 @@ /obj/effect/spawner/random/engineering/tracking_beacon, /turf/open/floor/iron/small, /area/station/hallway/secondary/exit/departure_lounge) +"kjt" = ( +/obj/effect/landmark/start/shaft_miner, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/iron/smooth_large, +/area/station/cargo/miningdock) "kjz" = ( /obj/structure/table/reinforced, /obj/item/hfr_box/corner, @@ -35849,7 +35845,6 @@ /area/station/commons/lounge) "kjG" = ( /obj/structure/rack/gunrack, -/obj/effect/spawner/armory_spawn/shotguns, /obj/effect/turf_decal/tile/dark_red/half{ dir = 1 }, @@ -35858,6 +35853,7 @@ /obj/machinery/digital_clock/directional/north{ pixel_y = 37 }, +/obj/effect/spawner/armory_spawn/mod_lasers_big, /turf/open/floor/engine, /area/station/ai_monitored/security/armory) "kjL" = ( @@ -35957,15 +35953,6 @@ }, /turf/open/floor/pod/dark, /area/station/service/chapel/funeral) -"kkC" = ( -/obj/effect/turf_decal/trimline/brown/filled/line{ - dir = 1 - }, -/obj/structure/extinguisher_cabinet/directional/north, -/obj/structure/closet/secure_closet/miner, -/obj/effect/turf_decal/delivery, -/turf/open/floor/iron/smooth_edge, -/area/station/cargo/miningdock) "kkI" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ @@ -36251,10 +36238,24 @@ }, /turf/open/space/basic, /area/space/nearstation) -"koZ" = ( -/obj/structure/chair/stool/directional/east, -/turf/open/floor/iron/cafeteria, -/area/station/service/cafeteria) +"kpe" = ( +/obj/item/radio/intercom/directional/south, +/obj/effect/turf_decal/tile/green/diagonal_centre, +/obj/structure/disposalpipe/segment{ + dir = 9 + }, +/obj/effect/turf_decal/bot, +/obj/structure/rack, +/obj/item/cultivator, +/obj/item/reagent_containers/cup/glass/shaker, +/obj/item/clothing/mask/gas, +/obj/item/clothing/head/utility/chefhat, +/obj/effect/spawner/random/maintenance, +/obj/effect/spawner/random/food_or_drink/donkpockets, +/obj/item/storage/box/drinkingglasses, +/obj/item/storage/box/lights/mixed, +/turf/open/floor/iron/diagonal, +/area/station/hallway/secondary/service) "kpg" = ( /obj/effect/mapping_helpers/airlock/access/any/supply/shipping, /obj/structure/disposalpipe/segment{ @@ -36366,15 +36367,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron/smooth_large, /area/station/hallway/secondary/construction) -"krz" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/turf_decal/trimline/brown/filled/corner{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/structure/cable, -/turf/open/floor/iron/smooth_large, -/area/station/cargo/miningdock) "krA" = ( /obj/effect/turf_decal/trimline/brown/filled/corner{ dir = 1 @@ -37514,15 +37506,6 @@ }, /turf/open/floor/iron/white, /area/station/medical/medbay/central) -"kFL" = ( -/obj/effect/spawner/random/trash/grime, -/obj/effect/turf_decal/trimline/brown/filled/corner{ - dir = 4 - }, -/turf/open/floor/iron/smooth_corner{ - dir = 4 - }, -/area/station/cargo/bitrunning/den) "kFS" = ( /obj/effect/mapping_helpers/airlock/access/all/science/rd, /obj/machinery/door/airlock/rd/glass{ @@ -37761,6 +37744,18 @@ /obj/effect/decal/cleanable/dirt, /turf/open/floor/iron/smooth, /area/station/maintenance/department/crew_quarters/bar) +"kIg" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/door/airlock/freezer{ + critical_machine = 1; + name = "Coldroom" + }, +/obj/effect/mapping_helpers/airlock/access/all/service/kitchen, +/obj/structure/fans/tiny, +/obj/structure/cable, +/turf/open/floor/iron/freezer, +/area/station/service/kitchen/coldroom) "kIi" = ( /obj/machinery/atmospherics/components/binary/pump{ dir = 4; @@ -37905,26 +37900,17 @@ dir = 8 }, /area/station/science/xenobiology) -"kKA" = ( -/obj/structure/table, -/obj/machinery/door/firedoor, -/obj/structure/desk_bell{ - pixel_x = -7; - pixel_y = 9 - }, -/obj/machinery/door/poddoor/shutters/preopen{ - dir = 8; - id = "kitchen_counter"; - name = "Kitchen Counter Shutters" - }, -/obj/item/reagent_containers/condiment/saltshaker{ - pixel_x = -3 - }, -/obj/item/reagent_containers/condiment/peppermill{ - pixel_x = 3 +"kKa" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/turf_decal/trimline/yellow/filled/line{ + dir = 1 }, -/turf/open/floor/iron/large, -/area/station/service/kitchen) +/obj/structure/closet/secure_closet/chemical, +/obj/item/storage/box/syringes, +/obj/item/storage/box/beakers, +/obj/effect/turf_decal/bot, +/turf/open/floor/iron/freezer, +/area/station/medical/pharmacy) "kKC" = ( /obj/effect/turf_decal/delivery, /obj/structure/closet/crate/freezer{ @@ -38629,6 +38615,18 @@ dir = 1 }, /area/station/engineering/main) +"kVv" = ( +/obj/machinery/light/small/blacklight/directional/south, +/obj/machinery/conveyor{ + dir = 4; + id = "mining" + }, +/obj/structure/railing{ + dir = 1 + }, +/obj/machinery/firealarm/directional/south, +/turf/open/floor/iron/smooth_large, +/area/station/cargo/miningfoundry) "kVy" = ( /obj/effect/turf_decal/trimline/red/filled/line{ dir = 4 @@ -39021,6 +39019,14 @@ /obj/effect/spawner/structure/window/reinforced, /turf/open/floor/plating, /area/station/hallway/primary/aft) +"laf" = ( +/obj/effect/turf_decal/bot, +/obj/effect/decal/cleanable/dirt, +/obj/effect/turf_decal/trimline/brown/filled/line{ + dir = 9 + }, +/turf/open/floor/iron/smooth_edge, +/area/station/cargo/miningdock) "lai" = ( /obj/structure/cable, /obj/machinery/power/apc/auto_name/directional/east, @@ -39204,6 +39210,16 @@ dir = 4 }, /area/station/engineering/power_room) +"lcZ" = ( +/obj/structure/railing, +/obj/structure/table, +/obj/item/modular_computer/laptop/preset/civilian{ + pixel_y = 5; + pixel_x = 2 + }, +/obj/effect/turf_decal/tile/brown/fourcorners, +/turf/open/floor/iron/dark/textured_large, +/area/station/cargo/bitrunning/den) "ldf" = ( /obj/effect/turf_decal/trimline/blue/filled/line, /obj/structure/cable, @@ -39286,11 +39302,6 @@ }, /turf/open/floor/iron/smooth_large, /area/station/engineering/power_room) -"ldU" = ( -/obj/machinery/netpod, -/obj/machinery/light/small/blacklight/directional/west, -/turf/open/floor/catwalk_floor/iron_dark, -/area/station/cargo/bitrunning/den) "leb" = ( /obj/structure/cable, /turf/open/floor/iron/smooth_large, @@ -39313,11 +39324,6 @@ }, /turf/open/floor/catwalk_floor/iron_smooth, /area/station/maintenance/department/crew_quarters/bar) -"leF" = ( -/obj/machinery/quantum_server, -/obj/structure/extinguisher_cabinet/directional/east, -/turf/open/floor/catwalk_floor/iron_dark, -/area/station/cargo/bitrunning/den) "leI" = ( /obj/effect/turf_decal/trimline/yellow/filled/line{ dir = 5 @@ -39607,13 +39613,6 @@ /obj/machinery/duct, /turf/open/floor/iron/white/smooth_large, /area/station/medical/storage) -"liO" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/effect/landmark/start/cook, -/turf/open/floor/iron/kitchen, -/area/station/service/kitchen) "liS" = ( /obj/item/kirbyplants/random, /obj/structure/cable, @@ -39722,13 +39721,6 @@ /obj/item/radio/intercom/directional/east, /turf/open/floor/pod/dark, /area/station/service/chapel/funeral) -"lkz" = ( -/obj/structure/chair/sofa/corp/left{ - color = "#DE3A3A"; - dir = 8 - }, -/turf/open/floor/iron/cafeteria, -/area/station/service/cafeteria) "lkG" = ( /obj/effect/turf_decal/trimline/green/filled/line, /obj/structure/disposalpipe/segment, @@ -39739,10 +39731,6 @@ "lkJ" = ( /turf/open/floor/wood, /area/station/commons/vacant_room/office) -"lkM" = ( -/obj/effect/spawner/structure/window/reinforced, -/turf/open/floor/plating/airless, -/area/station/cargo/sorting) "lkR" = ( /obj/effect/spawner/random/structure/table_fancy, /obj/item/flashlight/lamp/green{ @@ -39770,12 +39758,6 @@ /obj/structure/cable, /turf/open/floor/plating, /area/station/security/office) -"llf" = ( -/obj/effect/turf_decal/trimline/brown/filled/line, -/turf/open/floor/iron/smooth_edge{ - dir = 1 - }, -/area/station/cargo/miningdock) "llk" = ( /obj/structure/table, /obj/item/stack/medical/gauze, @@ -39799,6 +39781,12 @@ }, /turf/open/floor/iron/large, /area/station/service/hydroponics) +"llM" = ( +/obj/effect/turf_decal/trimline/brown/filled/corner{ + dir = 1 + }, +/turf/open/floor/iron/smooth_large, +/area/station/cargo/miningdock) "llR" = ( /obj/effect/turf_decal/stripes/line{ dir = 8 @@ -39877,15 +39865,6 @@ dir = 1 }, /area/station/hallway/secondary/entry) -"lmY" = ( -/obj/effect/turf_decal/trimline/brown/filled/line{ - dir = 8 - }, -/obj/structure/window/spawner/directional/west{ - pixel_x = -4 - }, -/turf/open/floor/iron/smooth_large, -/area/station/cargo/miningdock) "lnc" = ( /obj/effect/turf_decal/trimline/purple/filled/corner{ dir = 8 @@ -40005,6 +39984,17 @@ }, /turf/open/floor/iron/grimy, /area/station/commons/lounge) +"lnT" = ( +/obj/effect/turf_decal/delivery, +/obj/structure/plasticflaps/opaque{ + name = "Kitchen Deliveries" + }, +/obj/machinery/navbeacon{ + codes_txt = "delivery;dir=8"; + location = "Kitchen" + }, +/turf/open/floor/iron/large, +/area/station/maintenance/starboard/greater) "lnU" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -40300,6 +40290,14 @@ /obj/machinery/light/cold/directional/east, /turf/open/floor/iron/dark, /area/station/security/prison/mess) +"lsG" = ( +/obj/structure/chair/sofa/corp/right{ + color = "#DE3A3A"; + dir = 8 + }, +/obj/effect/landmark/start/assistant, +/turf/open/floor/iron/cafeteria, +/area/station/service/cafeteria) "lsQ" = ( /obj/machinery/duct, /obj/effect/turf_decal/trimline/blue/filled/warning{ @@ -40909,13 +40907,6 @@ /obj/effect/turf_decal/bot, /turf/open/floor/iron/dark, /area/station/security/lockers) -"lBF" = ( -/obj/structure/chair/sofa/right/brown{ - dir = 4 - }, -/obj/machinery/firealarm/directional/south, -/turf/open/floor/iron/smooth_large, -/area/station/cargo/miningoffice) "lBP" = ( /obj/structure/cable, /obj/effect/turf_decal/trimline/purple/filled/line, @@ -41185,6 +41176,15 @@ /obj/effect/decal/cleanable/dirt, /turf/open/floor/plating, /area/station/maintenance/department/science/ordnance_maint) +"lFv" = ( +/obj/effect/turf_decal/trimline/brown/filled/warning{ + dir = 1 + }, +/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_edge, +/area/station/cargo/drone_bay) "lFE" = ( /obj/structure/lattice/catwalk, /obj/machinery/atmospherics/pipe/heat_exchanging/simple{ @@ -41358,16 +41358,6 @@ /obj/machinery/light/cold/directional/east, /turf/open/floor/iron/dark/smooth_large, /area/station/medical/morgue) -"lHd" = ( -/obj/structure/chair/sofa/corp/right{ - color = "#DE3A3A"; - dir = 8 - }, -/obj/machinery/power/apc/auto_name/directional/east, -/obj/structure/cable, -/obj/effect/landmark/start/assistant, -/turf/open/floor/iron/cafeteria, -/area/station/service/cafeteria) "lHf" = ( /obj/effect/turf_decal/trimline/blue/corner{ dir = 1 @@ -41722,6 +41712,12 @@ /obj/effect/turf_decal/tile/bar/opposingcorners, /turf/open/floor/iron, /area/station/service/bar) +"lMt" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/cable, +/obj/effect/landmark/start/cook, +/turf/open/floor/iron/kitchen, +/area/station/service/kitchen) "lMx" = ( /obj/machinery/door/airlock/maintenance{ critical_machine = 1; @@ -41873,6 +41869,13 @@ /obj/machinery/power/smes, /turf/open/floor/catwalk_floor/iron_smooth, /area/station/maintenance/solars/starboard/aft) +"lOC" = ( +/obj/effect/turf_decal/tile/green/diagonal_centre, +/obj/structure/disposalpipe/segment{ + dir = 10 + }, +/turf/open/floor/iron/diagonal, +/area/station/hallway/secondary/service) "lOV" = ( /obj/structure/table/reinforced, /obj/effect/turf_decal/delivery, @@ -42058,6 +42061,10 @@ /obj/machinery/door/firedoor, /turf/open/floor/iron/dark/smooth_large, /area/station/security/lockers) +"lQG" = ( +/obj/structure/sign/poster/contraband/mothic_rations, +/turf/closed/wall, +/area/station/service/kitchen) "lQK" = ( /obj/structure/railing, /obj/structure/bed, @@ -42566,17 +42573,6 @@ /obj/structure/window/spawner/directional/north, /turf/open/floor/grass, /area/station/hallway/secondary/exit/departure_lounge) -"lWH" = ( -/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 = 4 - }, -/obj/structure/disposalpipe/segment, -/obj/effect/turf_decal/tile/green/diagonal_centre, -/turf/open/floor/iron/diagonal, -/area/station/hallway/secondary/service) "lWL" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/grimy, @@ -43001,6 +42997,16 @@ /obj/effect/turf_decal/bot, /turf/open/floor/iron/dark/smooth_large, /area/station/command/bridge) +"mdF" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 4 + }, +/obj/machinery/door/window/right/directional/north{ + name = "Jim Norton's Quebecois Coffee"; + req_one_access = list("service","maint_tunnels") + }, +/turf/open/floor/wood, +/area/station/hallway/secondary/entry) "mdG" = ( /obj/structure/window/spawner/directional/north, /mob/living/basic/lizard/tegu/gus, @@ -43404,6 +43410,15 @@ dir = 8 }, /area/station/security/prison) +"mjC" = ( +/obj/structure/window/reinforced/survival_pod/spawner/directional/north, +/obj/machinery/door/window/survival_pod/left/directional/west{ + name = "Fitness Ring" + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/light/floor, +/turf/open/floor/iron/dark/smooth_large, +/area/station/commons/fitness/recreation/entertainment) "mjG" = ( /obj/item/folder/blue{ pixel_y = 4 @@ -43544,22 +43559,6 @@ }, /turf/open/floor/iron/smooth_edge, /area/station/hallway/primary/aft) -"mkD" = ( -/obj/structure/cable, -/obj/effect/turf_decal/trimline/green/filled/line{ - dir = 1 - }, -/obj/machinery/power/apc/auto_name/directional/north, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/light_switch/directional/north{ - pixel_x = -14 - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/machinery/light/directional/north, -/turf/open/floor/iron/edge, -/area/station/service/hydroponics) "mkK" = ( /obj/effect/turf_decal/trimline/dark_red/filled/corner{ dir = 8 @@ -43588,6 +43587,14 @@ "mlv" = ( /turf/open/floor/plating, /area/station/maintenance/department/crew_quarters/bar) +"mlz" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, +/obj/effect/turf_decal/tile/green/diagonal_centre, +/obj/structure/disposalpipe/segment{ + dir = 1 + }, +/turf/open/floor/iron/diagonal, +/area/station/hallway/secondary/service) "mlP" = ( /obj/structure/disposalpipe/segment{ dir = 9 @@ -44829,12 +44836,6 @@ /obj/structure/sign/poster/contraband/communist_state/directional/east, /turf/open/floor/wood, /area/station/maintenance/rus_gambling) -"mFX" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/effect/landmark/start/cook, -/turf/open/floor/iron/kitchen, -/area/station/service/kitchen) "mGv" = ( /obj/structure/cable, /obj/machinery/power/apc/auto_name/directional/east, @@ -44844,6 +44845,11 @@ }, /turf/open/floor/catwalk_floor/iron_smooth, /area/station/maintenance/solars/port/aft) +"mGz" = ( +/obj/structure/closet/secure_closet/miner, +/obj/effect/turf_decal/delivery, +/turf/open/floor/iron/smooth_large, +/area/station/cargo/miningdock) "mGE" = ( /obj/effect/turf_decal/trimline/purple/filled/warning{ dir = 10 @@ -44901,6 +44907,11 @@ /obj/structure/extinguisher_cabinet/directional/east, /turf/open/floor/grass, /area/station/service/chapel) +"mHC" = ( +/obj/structure/cable, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/iron/smooth_large, +/area/station/cargo/miningfoundry) "mHR" = ( /obj/machinery/portable_atmospherics/scrubber, /obj/effect/turf_decal/delivery, @@ -45393,6 +45404,17 @@ /obj/effect/mapping_helpers/airlock/access/all/service/general, /turf/open/floor/catwalk_floor/iron_smooth, /area/station/maintenance/starboard/greater) +"mNK" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/structure/railing{ + dir = 8 + }, +/obj/structure/fake_stairs/directional/north, +/obj/effect/landmark/start/cook, +/turf/open/floor/iron/kitchen, +/area/station/service/kitchen) "mNO" = ( /obj/effect/turf_decal/bot, /obj/machinery/portable_atmospherics/canister/air, @@ -45407,6 +45429,14 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/pod, /area/station/service/chapel/office) +"mNX" = ( +/obj/machinery/netpod, +/obj/structure/railing{ + dir = 1 + }, +/obj/machinery/light_switch/directional/west, +/turf/open/floor/catwalk_floor/iron_dark, +/area/station/cargo/bitrunning/den) "mNY" = ( /obj/machinery/light/small/directional/west, /obj/machinery/light_switch/directional/west, @@ -45502,6 +45532,19 @@ /obj/item/radio/intercom/prison/directional/north, /turf/open/floor/iron/dark/smooth_edge, /area/station/security/prison) +"mPf" = ( +/obj/structure/table, +/obj/machinery/door/firedoor, +/obj/machinery/door/poddoor/shutters/preopen{ + dir = 8; + id = "kitchen_counter"; + name = "Kitchen Counter Shutters" + }, +/obj/structure/displaycase/forsale/kitchen{ + pixel_y = 8 + }, +/turf/open/floor/iron/cafeteria, +/area/station/service/kitchen) "mPl" = ( /obj/item/radio/intercom/directional/south, /obj/structure/chair/comfy/brown{ @@ -45827,12 +45870,6 @@ /obj/effect/turf_decal/box, /turf/open/floor/plating/airless, /area/space/nearstation) -"mTY" = ( -/obj/effect/turf_decal/trimline/brown/filled/line{ - dir = 5 - }, -/turf/open/floor/iron/dark/textured, -/area/station/cargo/bitrunning/den) "mUp" = ( /obj/effect/decal/cleanable/dirt, /obj/effect/spawner/random/trash/mess, @@ -45938,17 +45975,6 @@ /obj/structure/disposalpipe/segment, /turf/open/floor/iron/smooth_large, /area/station/engineering/atmos) -"mVt" = ( -/obj/effect/turf_decal/weather/snow, -/obj/machinery/atmospherics/components/unary/thermomachine/freezer/on/coldroom{ - dir = 4 - }, -/obj/item/wrench{ - pixel_x = -3; - pixel_y = -3 - }, -/turf/open/floor/iron/kitchen_coldroom/freezerfloor, -/area/station/service/kitchen/coldroom) "mVv" = ( /obj/effect/turf_decal/trimline/purple/filled/line{ dir = 5 @@ -46577,6 +46603,19 @@ /obj/effect/decal/cleanable/cobweb/cobweb2, /turf/open/floor/iron/smooth, /area/station/maintenance/aft) +"neg" = ( +/obj/structure/cable, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/effect/landmark/start/hangover, +/obj/effect/turf_decal/siding/wood{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron/cafeteria, +/area/station/service/cafeteria) "nel" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/effect/landmark/start/hangover, @@ -46615,6 +46654,12 @@ /obj/structure/disposalpipe/segment, /turf/open/floor/catwalk_floor/iron_smooth, /area/station/maintenance/department/medical) +"neT" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/catwalk_floor/iron_smooth, +/area/station/cargo/miningfoundry) "nfr" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -46833,6 +46878,27 @@ dir = 8 }, /area/station/security/checkpoint/customs) +"nja" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 1 + }, +/obj/structure/table, +/obj/item/serviette_pack{ + pixel_x = 4; + pixel_y = 4 + }, +/obj/item/reagent_containers/condiment/saltshaker{ + desc = "Salt. From space oceans, presumably. A staple of modern medicine."; + pixel_x = -8; + pixel_y = 12 + }, +/obj/item/reagent_containers/condiment/peppermill{ + desc = "Often used to flavor food or make people sneeze. Fashionably moved to the left side of the table."; + pixel_x = -8; + pixel_y = 2 + }, +/turf/open/floor/iron/cafeteria, +/area/station/service/cafeteria) "njb" = ( /obj/structure/cable, /obj/structure/chair/stool/directional/east, @@ -46914,42 +46980,6 @@ /obj/effect/turf_decal/bot, /turf/open/floor/iron/dark/smooth_edge, /area/station/security/interrogation) -"njQ" = ( -/obj/machinery/door/firedoor, -/obj/structure/table/reinforced, -/obj/structure/desk_bell{ - pixel_x = 7; - pixel_y = 6 - }, -/obj/item/folder/white{ - pixel_x = -4; - pixel_y = 4 - }, -/obj/item/pen{ - pixel_x = -4; - pixel_y = 4 - }, -/obj/effect/turf_decal/tile/yellow{ - dir = 4 - }, -/obj/effect/turf_decal/tile/yellow{ - dir = 1 - }, -/obj/effect/turf_decal/tile/yellow, -/obj/effect/turf_decal/tile/yellow{ - dir = 8 - }, -/obj/machinery/door/poddoor/shutters/preopen{ - id = "chemistry_shutters_south"; - name = "Pharmacy Shutters" - }, -/obj/machinery/door/window/right/directional/west{ - name = "Pharmacy Desk"; - req_access = list("pharmacy"); - dir = 4 - }, -/turf/open/floor/iron/white/smooth_large, -/area/station/medical/pharmacy) "njV" = ( /obj/effect/turf_decal/trimline/dark_green/filled/line{ dir = 5 @@ -47456,15 +47486,6 @@ }, /turf/open/floor/wood/large, /area/station/hallway/primary/fore) -"nqU" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/turf_decal/trimline/brown/filled/warning{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/structure/cable, -/turf/open/floor/iron/smooth_large, -/area/station/cargo/miningdock) "nrb" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -48013,10 +48034,6 @@ /obj/effect/spawner/random/trash/moisture_trap, /turf/open/floor/iron/smooth, /area/station/maintenance/starboard/greater) -"nyf" = ( -/obj/effect/spawner/structure/window/reinforced, -/turf/open/floor/plating/airless, -/area/station/cargo/miningoffice) "nyh" = ( /obj/structure/window/reinforced/spawner/directional/west{ layer = 2.9 @@ -48072,11 +48089,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/smooth_edge, /area/station/engineering/atmos) -"nzv" = ( -/obj/structure/cable, -/obj/machinery/griddle, -/turf/open/floor/iron/kitchen, -/area/station/service/kitchen) "nzw" = ( /obj/structure/rack, /obj/item/poster/random_contraband, @@ -48226,17 +48238,6 @@ }, /turf/closed/wall/r_wall, /area/station/science/ordnance/burnchamber) -"nBO" = ( -/obj/effect/turf_decal/trimline/brown/filled/line{ - 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_edge{ - dir = 8 - }, -/area/station/cargo/miningdock) "nCl" = ( /obj/structure/chair/office/light{ dir = 4 @@ -48368,6 +48369,22 @@ }, /turf/open/floor/iron/smooth_large, /area/station/engineering/atmos) +"nFa" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/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/all/supply/mining, +/obj/machinery/door/airlock/mining{ + name = "Mining Foundry" + }, +/turf/open/floor/catwalk_floor/iron_smooth, +/area/station/cargo/miningfoundry) "nFg" = ( /obj/effect/decal/cleanable/dirt, /obj/effect/spawner/random/trash/grille_or_waste, @@ -48512,19 +48529,6 @@ /obj/effect/spawner/random/trash/grille_or_waste, /turf/open/floor/catwalk_floor/iron_smooth, /area/station/science/research/abandoned) -"nGR" = ( -/obj/structure/chair/sofa/corp/right{ - dir = 4 - }, -/obj/effect/turf_decal/trimline/brown/filled/line{ - dir = 8 - }, -/obj/machinery/light/small/directional/west, -/obj/effect/landmark/start/bitrunner, -/turf/open/floor/iron/smooth_edge{ - dir = 4 - }, -/area/station/cargo/bitrunning/den) "nGX" = ( /obj/structure/chair/sofa/right/brown{ dir = 8 @@ -48851,14 +48855,6 @@ /obj/effect/spawner/random/maintenance/eight, /turf/open/floor/iron/smooth_large, /area/station/cargo/warehouse) -"nMk" = ( -/obj/structure/table, -/obj/machinery/reagentgrinder{ - pixel_x = 8; - pixel_y = 6 - }, -/turf/open/floor/iron/kitchen, -/area/station/service/kitchen) "nMr" = ( /turf/open/floor/catwalk_floor/iron_smooth, /area/station/maintenance/starboard/aft) @@ -48972,11 +48968,6 @@ /obj/structure/cable, /turf/open/floor/iron/smooth_large, /area/station/cargo/drone_bay) -"nNS" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/effect/landmark/start/cook, -/turf/open/floor/iron/kitchen, -/area/station/service/kitchen) "nOq" = ( /obj/machinery/light/directional/south, /turf/open/floor/engine, @@ -49189,7 +49180,7 @@ /area/station/maintenance/department/crew_quarters/bar) "nQh" = ( /obj/structure/bed/double, -/obj/item/bedsheet/random/double, +/obj/effect/spawner/random/bedsheet/any/double, /obj/machinery/newscaster/directional/east, /turf/open/floor/carpet/black, /area/station/commons/dorms) @@ -49294,17 +49285,11 @@ }, /area/station/science/xenobiology) "nRy" = ( -/obj/effect/turf_decal/weather/snow, -/obj/machinery/icecream_vat, -/obj/machinery/power/apc/auto_name/directional/west, -/obj/structure/cable, -/obj/machinery/camera/directional/west{ - c_tag = "Service - Kitchen Coldroom"; - dir = 10; - name = "service camera" - }, -/turf/open/floor/iron/kitchen_coldroom/freezerfloor, -/area/station/service/kitchen/coldroom) +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, +/obj/structure/table, +/obj/machinery/microwave, +/turf/open/floor/iron/smooth_large, +/area/station/cargo/miningoffice) "nRz" = ( /obj/effect/turf_decal/trimline/yellow/filled/line{ dir = 8 @@ -49370,6 +49355,22 @@ dir = 4 }, /area/station/science/xenobiology) +"nRS" = ( +/obj/structure/table, +/obj/machinery/reagentgrinder{ + pixel_x = 4; + pixel_y = 18 + }, +/obj/item/reagent_containers/cup/beaker{ + pixel_x = -8; + pixel_y = 12 + }, +/obj/item/reagent_containers/cup/beaker{ + pixel_x = -8; + pixel_y = 4 + }, +/turf/open/floor/iron/kitchen, +/area/station/service/kitchen) "nRV" = ( /obj/structure/closet/secure_closet{ name = "contraband locker"; @@ -49525,24 +49526,6 @@ /obj/structure/window/reinforced/survival_pod/spawner/directional/south, /turf/open/floor/iron/dark/smooth_large, /area/station/commons/fitness/recreation/entertainment) -"nTI" = ( -/obj/structure/table, -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, -/obj/machinery/light_switch/directional/west, -/obj/structure/disposalpipe/segment{ - dir = 6 - }, -/obj/machinery/fax{ - fax_name = "Service Hallway"; - name = "Service Fax Machine"; - pixel_y = 3 - }, -/obj/effect/turf_decal/tile/green/diagonal_centre, -/obj/machinery/light/directional/west, -/turf/open/floor/iron/diagonal, -/area/station/hallway/secondary/service) "nTS" = ( /obj/structure/disposalpipe/segment{ dir = 4 @@ -49623,16 +49606,6 @@ /obj/structure/lattice/catwalk, /turf/open/space/basic, /area/space/nearstation) -"nUo" = ( -/obj/structure/chair/sofa/corp/left{ - color = "#DE3A3A"; - dir = 4 - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/open/floor/iron/cafeteria, -/area/station/service/cafeteria) "nUy" = ( /obj/effect/turf_decal/trimline/green/filled/warning, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -49956,10 +49929,6 @@ /obj/machinery/light/cold/directional/south, /turf/open/floor/engine, /area/station/engineering/supermatter/room) -"nYG" = ( -/obj/effect/turf_decal/bot, -/turf/open/floor/iron/large, -/area/station/hallway/secondary/service) "nYI" = ( /obj/effect/landmark/secequipment, /obj/structure/sign/poster/official/random/directional/north, @@ -50014,6 +49983,16 @@ /obj/structure/cable, /turf/open/floor/wood/large, /area/station/command/heads_quarters/captain) +"nZU" = ( +/obj/effect/turf_decal/tile/green/diagonal_centre, +/obj/machinery/status_display/ai/directional/west, +/obj/effect/turf_decal/box, +/obj/structure/disposalpipe/trunk{ + dir = 4 + }, +/obj/machinery/disposal/bin, +/turf/open/floor/iron/diagonal, +/area/station/hallway/secondary/service) "nZW" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -50095,15 +50074,6 @@ /obj/effect/landmark/start/hangover, /turf/open/floor/wood/large, /area/station/hallway/secondary/entry) -"obz" = ( -/obj/effect/turf_decal/trimline/green/filled/line{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/structure/sink/directional/south, -/obj/effect/turf_decal/siding/green, -/turf/open/floor/iron/edge, -/area/station/service/hydroponics) "ocb" = ( /obj/effect/decal/cleanable/dirt, /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, @@ -50174,12 +50144,6 @@ dir = 4 }, /area/station/medical/surgery) -"ocK" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/effect/turf_decal/box, -/obj/machinery/holopad, -/turf/open/floor/iron/kitchen, -/area/station/service/kitchen) "ocV" = ( /obj/effect/turf_decal/stripes/line{ dir = 6 @@ -50459,6 +50423,15 @@ /obj/structure/extinguisher_cabinet/directional/west, /turf/open/floor/wood/large, /area/station/commons/dorms) +"ogM" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/brown/filled/line{ + dir = 5 + }, +/turf/open/floor/iron/dark/textured, +/area/station/cargo/bitrunning/den) "ohd" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -50763,13 +50736,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron/smooth, /area/station/maintenance/port/greater) -"olm" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/landmark/event_spawn, -/turf/open/floor/iron/cafeteria, -/area/station/service/cafeteria) "olo" = ( /obj/structure/chair/office{ dir = 8 @@ -50801,12 +50767,6 @@ /obj/effect/turf_decal/siding/wood, /turf/open/floor/wood/parquet, /area/station/common/night_club) -"olG" = ( -/obj/machinery/status_display/ai/directional/west, -/obj/structure/disposalpipe/segment, -/obj/effect/turf_decal/tile/green/diagonal_centre, -/turf/open/floor/iron/diagonal, -/area/station/hallway/secondary/service) "olS" = ( /obj/structure/bodycontainer/crematorium{ id = "crematoriumChapel" @@ -51278,6 +51238,11 @@ dir = 8 }, /area/station/hallway/primary/fore) +"osx" = ( +/obj/structure/lattice, +/obj/machinery/firealarm/directional/west, +/turf/open/space/basic, +/area/space/nearstation) "osJ" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/effect/turf_decal/tile/bar/opposingcorners, @@ -51582,6 +51547,11 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron/smooth, /area/station/maintenance/department/engine) +"owG" = ( +/obj/structure/disposalpipe/segment, +/obj/effect/spawner/structure/window/reinforced, +/turf/open/floor/plating, +/area/station/cargo/sorting) "owP" = ( /obj/machinery/atmospherics/pipe/smart/manifold/green/visible, /obj/effect/turf_decal/trimline/yellow/filled/line, @@ -51938,21 +51908,22 @@ "oCl" = ( /turf/closed/wall/r_wall, /area/station/engineering/supermatter/room) -"oCm" = ( -/obj/effect/turf_decal/bot, -/obj/structure/sign/warning/vacuum/directional/north, -/obj/machinery/computer/shuttle/mining, -/obj/effect/turf_decal/trimline/brown/filled/line{ - dir = 1 - }, -/turf/open/floor/iron/smooth_edge, -/area/station/cargo/miningdock) "oCo" = ( /obj/structure/railing/corner{ dir = 4 }, /turf/open/floor/iron/smooth, /area/station/command/cc_dock) +"oCs" = ( +/obj/effect/turf_decal/trimline/brown/filled/line{ + dir = 6 + }, +/obj/structure/closet/wardrobe/miner, +/obj/effect/turf_decal/bot, +/turf/open/floor/iron/smooth_edge{ + dir = 1 + }, +/area/station/cargo/miningdock) "oCM" = ( /obj/effect/decal/cleanable/dirt, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -52286,16 +52257,6 @@ /obj/machinery/light/cold/directional/west, /turf/open/floor/iron/dark/small, /area/station/security/prison/garden) -"oGX" = ( -/obj/structure/table, -/obj/machinery/microwave, -/obj/effect/turf_decal/trimline/brown/filled/line{ - dir = 5 - }, -/obj/machinery/light/small/directional/east, -/obj/structure/sign/poster/contraband/random/directional/east, -/turf/open/floor/iron/smooth, -/area/station/cargo/bitrunning/den) "oHc" = ( /obj/machinery/atmospherics/pipe/smart/simple/cyan/visible, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -52698,6 +52659,17 @@ /obj/machinery/light/warm/directional/east, /turf/open/floor/wood/large, /area/station/hallway/secondary/exit/departure_lounge) +"oNA" = ( +/obj/structure/extinguisher_cabinet/directional/north, +/obj/machinery/computer/security/mining, +/obj/effect/turf_decal/bot, +/obj/effect/turf_decal/trimline/brown/filled/line{ + dir = 5 + }, +/turf/open/floor/iron/smooth_corner{ + dir = 8 + }, +/area/station/cargo/miningdock) "oNB" = ( /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ dir = 1 @@ -53009,6 +52981,16 @@ /obj/structure/cable, /turf/open/floor/iron/smooth, /area/station/science/research/abandoned) +"oSm" = ( +/obj/machinery/power/apc/auto_name/directional/east, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/sink/directional/west, +/obj/structure/disposalpipe/segment, +/obj/effect/turf_decal/tile/green/diagonal_centre, +/obj/structure/cable, +/turf/open/floor/iron/diagonal, +/area/station/hallway/secondary/service) "oSr" = ( /obj/effect/turf_decal/siding/thinplating{ dir = 4 @@ -53152,11 +53134,6 @@ /obj/machinery/firealarm/directional/east, /turf/open/floor/circuit/green, /area/station/ai_monitored/command/nuke_storage) -"oUb" = ( -/obj/machinery/firealarm/directional/west, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/turf/open/floor/iron/stairs, -/area/station/cargo/bitrunning/den) "oUl" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -53931,6 +53908,21 @@ /obj/machinery/incident_display/delam, /turf/closed/wall/r_wall, /area/station/security/checkpoint/engineering) +"pdo" = ( +/obj/machinery/button/door/directional/south{ + id = "kitchen_counter"; + name = "Counter Shutters Control" + }, +/obj/structure/table, +/obj/structure/disposalpipe/segment{ + dir = 5 + }, +/obj/machinery/processor{ + pixel_y = 12 + }, +/obj/structure/railing, +/turf/open/floor/iron/kitchen, +/area/station/service/kitchen) "pdt" = ( /obj/machinery/disposal/bin, /obj/effect/turf_decal/box, @@ -53990,20 +53982,6 @@ /obj/item/folder/white, /turf/open/floor/iron/dark/smooth_large, /area/station/medical/morgue) -"pei" = ( -/obj/structure/table, -/obj/machinery/door/firedoor, -/obj/machinery/door/poddoor/shutters/preopen{ - dir = 8; - id = "kitchen_counter"; - name = "Kitchen Counter Shutters" - }, -/obj/item/storage/box/papersack{ - icon_state = "paperbag_NanotrasenStandard_closed"; - pixel_y = 4 - }, -/turf/open/floor/iron/large, -/area/station/service/kitchen) "pep" = ( /obj/structure/table/glass, /obj/item/paper_bin{ @@ -54679,17 +54657,6 @@ /obj/machinery/light_switch/directional/north, /turf/open/floor/iron/grimy, /area/station/service/library) -"pmM" = ( -/obj/effect/turf_decal/trimline/brown/filled/line, -/obj/machinery/disposal/bin, -/obj/effect/turf_decal/box, -/obj/structure/disposalpipe/trunk{ - dir = 8 - }, -/turf/open/floor/iron/smooth_edge{ - dir = 1 - }, -/area/station/cargo/miningdock) "pmS" = ( /obj/machinery/light/floor, /turf/open/floor/engine/plasma, @@ -54848,6 +54815,10 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron/kitchen, /area/station/service/kitchen) +"poE" = ( +/obj/machinery/door/window/left/directional/west, +/turf/open/floor/carpet/purple, +/area/station/common/night_club) "poP" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -54915,6 +54886,14 @@ /obj/machinery/door/airlock/maintenance/external/glass, /turf/open/floor/iron/dark/textured_large, /area/station/service/kitchen/abandoned) +"ppC" = ( +/obj/machinery/conveyor/inverted{ + dir = 10; + id = "mining" + }, +/obj/machinery/bouldertech/refinery/smelter, +/turf/open/floor/iron/smooth_large, +/area/station/cargo/miningfoundry) "ppT" = ( /obj/effect/turf_decal/trimline/purple/filled/line{ dir = 1 @@ -54939,19 +54918,6 @@ "pqh" = ( /turf/closed/wall, /area/station/cargo/warehouse) -"pqk" = ( -/obj/structure/chair/sofa/corp/left{ - desc = "Looks like someone threw it out. Covered in donut crumbs."; - dir = 4; - name = "couch" - }, -/obj/effect/turf_decal/trimline/brown/filled/line{ - dir = 9 - }, -/obj/structure/sign/poster/contraband/random/directional/west, -/obj/effect/landmark/start/bitrunner, -/turf/open/floor/iron/smooth, -/area/station/cargo/bitrunning/den) "pql" = ( /obj/machinery/power/apc/auto_name/directional/east, /obj/structure/cable, @@ -55066,6 +55032,11 @@ /obj/effect/turf_decal/bot, /turf/open/floor/iron/large, /area/station/commons/fitness/recreation) +"psR" = ( +/obj/structure/sign/poster/contraband/random/directional/east, +/obj/structure/table, +/turf/open/floor/catwalk_floor/iron_dark, +/area/station/cargo/bitrunning/den) "psS" = ( /obj/machinery/computer/cryopod/directional/east, /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ @@ -55309,6 +55280,13 @@ }, /turf/open/floor/iron/dark, /area/station/hallway/secondary/exit/departure_lounge) +"pvB" = ( +/obj/structure/table, +/obj/item/stack/conveyor/thirty, +/obj/machinery/power/apc/auto_name/directional/north, +/obj/structure/cable, +/turf/open/floor/iron/smooth_large, +/area/station/cargo/miningfoundry) "pvF" = ( /obj/machinery/atmospherics/components/unary/outlet_injector/monitored/nitrous_input{ dir = 4 @@ -55346,13 +55324,6 @@ /obj/machinery/atmospherics/pipe/layer_manifold/supply/hidden, /turf/closed/wall/r_wall, /area/station/maintenance/disposal/incinerator) -"pws" = ( -/obj/effect/landmark/start/shaft_miner, -/obj/effect/turf_decal/loading_area{ - dir = 1 - }, -/turf/open/floor/iron/smooth_large, -/area/station/cargo/miningdock) "pwB" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/item/radio{ @@ -55833,6 +55804,23 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/smooth_edge, /area/station/engineering/atmos/pumproom) +"pDj" = ( +/obj/machinery/light/warm/directional/north, +/obj/machinery/camera/directional/north{ + c_tag = "Service - Cafeteria Fore"; + name = "service camera" + }, +/obj/machinery/firealarm/directional/north{ + pixel_x = 8 + }, +/obj/item/radio/intercom/directional/north{ + pixel_x = -6 + }, +/obj/structure/table, +/obj/item/plate, +/obj/item/food/sausage, +/turf/open/floor/iron/cafeteria, +/area/station/service/cafeteria) "pDk" = ( /obj/structure/table/reinforced, /obj/item/clothing/suit/utility/radiation, @@ -55972,15 +55960,6 @@ /obj/machinery/light_switch/directional/east, /turf/open/floor/iron/smooth, /area/station/engineering/atmos/storage/gas) -"pFJ" = ( -/obj/item/storage/cans/sixsoda, -/obj/effect/turf_decal/trimline/brown/filled/line{ - dir = 6 - }, -/obj/structure/railing, -/obj/item/radio/intercom/directional/east, -/turf/open/floor/iron/smooth, -/area/station/cargo/bitrunning/den) "pGh" = ( /turf/open/floor/iron/white/smooth_large, /area/station/hallway/primary/fore) @@ -56491,6 +56470,18 @@ dir = 1 }, /area/station/medical/medbay/lobby) +"pNs" = ( +/obj/effect/turf_decal/trimline/green/filled/line{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/sink/directional/south, +/obj/effect/turf_decal/siding/green, +/obj/machinery/firealarm/directional/north{ + pixel_x = -6 + }, +/turf/open/floor/iron/edge, +/area/station/service/hydroponics) "pNw" = ( /obj/structure/table/glass, /obj/item/reagent_containers/cup/beaker{ @@ -56505,6 +56496,13 @@ /obj/machinery/light/small/directional/east, /turf/open/floor/iron/white/herringbone, /area/station/medical/virology) +"pNx" = ( +/obj/effect/landmark/start/bitrunner, +/obj/effect/turf_decal/trimline/brown/filled/line{ + dir = 9 + }, +/turf/open/floor/iron/dark/textured, +/area/station/cargo/bitrunning/den) "pNy" = ( /obj/structure/reagent_dispensers/watertank, /obj/effect/turf_decal/bot, @@ -56914,27 +56912,6 @@ /obj/effect/turf_decal/bot, /turf/open/floor/wood/large, /area/station/commons/fitness/recreation) -"pUt" = ( -/obj/structure/table, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/item/serviette_pack{ - pixel_x = 4; - pixel_y = 4 - }, -/obj/item/reagent_containers/condiment/saltshaker{ - desc = "Salt. From space oceans, presumably. A staple of modern medicine."; - pixel_x = -8; - pixel_y = 12 - }, -/obj/item/reagent_containers/condiment/peppermill{ - desc = "Often used to flavor food or make people sneeze. Fashionably moved to the left side of the table."; - pixel_x = -8; - pixel_y = 2 - }, -/turf/open/floor/iron/cafeteria, -/area/station/service/cafeteria) "pUu" = ( /obj/structure/disposalpipe/segment{ dir = 4 @@ -56946,6 +56923,14 @@ /obj/machinery/iv_drip, /turf/open/floor/iron/white/smooth_large, /area/station/medical/medbay/lobby) +"pUM" = ( +/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/stairs{ + dir = 4 + }, +/area/station/cargo/bitrunning/den) "pVi" = ( /obj/structure/chair/stool/directional/east, /obj/effect/turf_decal/siding/wood{ @@ -57017,6 +57002,14 @@ /obj/structure/table/reinforced/rglass, /turf/open/floor/wood/large, /area/station/command/heads_quarters/rd) +"pWe" = ( +/obj/structure/sign/poster/random/directional/north, +/obj/effect/turf_decal/bot, +/obj/structure/disposalpipe/segment{ + dir = 10 + }, +/turf/open/floor/iron/large, +/area/station/hallway/secondary/service) "pWf" = ( /obj/structure/table, /obj/item/paper_bin{ @@ -58073,13 +58066,6 @@ "qgT" = ( /turf/open/floor/iron/white, /area/station/hallway/primary/fore) -"qgY" = ( -/obj/effect/turf_decal/trimline/brown/filled/line, -/obj/structure/railing, -/turf/open/floor/iron/smooth_edge{ - dir = 1 - }, -/area/station/cargo/bitrunning/den) "qhe" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -58405,6 +58391,11 @@ "qlN" = ( /turf/closed/wall/r_wall, /area/station/science/robotics/lab) +"qlR" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/iron/smooth_large, +/area/station/cargo/miningfoundry) "qlS" = ( /obj/machinery/door/airlock/research{ name = "Circuit Testing Lab" @@ -58581,20 +58572,6 @@ }, /turf/open/floor/catwalk_floor/iron_smooth, /area/station/maintenance/starboard/lesser) -"qor" = ( -/obj/structure/table, -/obj/machinery/door/firedoor, -/obj/machinery/door/poddoor/shutters/preopen{ - dir = 8; - id = "kitchen_counter"; - name = "Kitchen Counter Shutters" - }, -/obj/machinery/pollution_scrubber{ - pixel_x = -7; - pixel_y = -4 - }, -/turf/open/floor/iron/large, -/area/station/service/kitchen) "qoE" = ( /obj/machinery/digital_clock{ pixel_y = 5 @@ -58768,12 +58745,6 @@ }, /turf/open/floor/iron/dark/smooth_large, /area/station/medical/morgue) -"qpX" = ( -/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/smooth_large, -/area/station/cargo/miningdock) "qqa" = ( /obj/effect/spawner/random/structure/barricade, /turf/open/floor/iron/smooth, @@ -58946,12 +58917,6 @@ /obj/effect/turf_decal/bot_red, /turf/open/floor/iron/dark/smooth_large, /area/station/security/execution/education) -"qtr" = ( -/obj/effect/turf_decal/trimline/brown/filled/line{ - dir = 1 - }, -/turf/open/floor/iron/smooth_edge, -/area/station/cargo/miningdock) "qts" = ( /obj/effect/turf_decal/trimline/purple/filled/line, /obj/item/kirbyplants/random, @@ -59119,11 +59084,6 @@ }, /turf/open/floor/wood/parquet, /area/station/common/night_club) -"qwy" = ( -/obj/machinery/holopad, -/obj/effect/turf_decal/bot, -/turf/open/floor/iron/cafeteria, -/area/station/service/cafeteria) "qwH" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -59409,16 +59369,6 @@ }, /turf/open/floor/iron/dark/smooth_large, /area/station/hallway/primary/fore) -"qAn" = ( -/obj/machinery/atmospherics/pipe/heat_exchanging/simple{ - dir = 9 - }, -/obj/effect/turf_decal/weather/snow, -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ - dir = 8 - }, -/turf/open/floor/iron/kitchen_coldroom/freezerfloor, -/area/station/service/kitchen/coldroom) "qAt" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/cable, @@ -59596,6 +59546,15 @@ "qDk" = ( /turf/closed/wall/r_wall, /area/station/maintenance/department/medical/morgue) +"qDl" = ( +/obj/effect/turf_decal/delivery, +/obj/machinery/door/window/right/directional/west{ + name = "Kitchen Deliveries"; + req_access = list("kitchen") + }, +/obj/structure/window/reinforced/spawner/directional/north, +/turf/open/floor/iron/kitchen_coldroom/freezerfloor, +/area/station/service/kitchen/coldroom) "qDp" = ( /obj/structure/chair/office/light, /obj/effect/turf_decal/trimline/neutral/filled/warning, @@ -60162,18 +60121,6 @@ }, /area/station/science/ordnance/testlab) "qKP" = ( -/obj/structure/table/reinforced, -/obj/item/clothing/suit/armor/vest/alt/sec{ - pixel_y = 2 - }, -/obj/item/clothing/suit/armor/vest/alt/sec{ - pixel_x = -4; - pixel_y = -6 - }, -/obj/item/clothing/suit/armor/vest/alt/sec{ - pixel_x = 4; - pixel_y = -6 - }, /obj/structure/window/reinforced/spawner/directional/north{ pixel_y = 1 }, @@ -60187,6 +60134,8 @@ pixel_x = 32 }, /obj/effect/turf_decal/delivery, +/obj/structure/rack, +/obj/effect/spawner/random/armory/disablers, /turf/open/floor/engine, /area/station/ai_monitored/security/armory) "qLf" = ( @@ -60241,6 +60190,11 @@ }, /turf/open/floor/iron/small, /area/station/commons/dorms) +"qLC" = ( +/obj/structure/disposalpipe/segment, +/obj/effect/spawner/structure/window/reinforced, +/turf/open/floor/plating, +/area/station/cargo/office) "qLI" = ( /obj/structure/table/reinforced/rglass, /obj/machinery/recharger, @@ -60486,6 +60440,29 @@ /obj/effect/landmark/start/hangover, /turf/open/floor/wood/large, /area/station/hallway/primary/central/fore) +"qQn" = ( +/obj/item/kitchen/rollingpin{ + pixel_y = 4 + }, +/obj/item/reagent_containers/cup/rag{ + pixel_y = 4 + }, +/obj/machinery/requests_console/directional/south{ + department = "Service Hall"; + name = "Service Hall Requests Console" + }, +/obj/effect/mapping_helpers/requests_console/supplies, +/obj/item/radio/headset/headset_srv{ + pixel_x = -11; + pixel_y = 4 + }, +/obj/effect/turf_decal/tile/green/diagonal_centre, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/structure/table, +/turf/open/floor/iron/diagonal, +/area/station/hallway/secondary/service) "qQu" = ( /obj/structure/cable, /obj/structure/disposalpipe/segment, @@ -60613,6 +60590,23 @@ dir = 8 }, /area/station/commons/fitness/recreation) +"qSs" = ( +/obj/structure/table, +/obj/item/plate/large, +/obj/item/plate, +/obj/item/plate/small{ + pixel_y = 1 + }, +/obj/structure/extinguisher_cabinet/directional/east, +/obj/item/reagent_containers/condiment/enzyme{ + pixel_x = 10; + pixel_y = 18 + }, +/obj/item/knife/butcher{ + pixel_x = 5 + }, +/turf/open/floor/iron/kitchen, +/area/station/service/kitchen) "qSu" = ( /turf/open/floor/iron/large, /area/station/hallway/primary/fore) @@ -60787,16 +60781,6 @@ dir = 1 }, /area/station/engineering/atmos) -"qTS" = ( -/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/trimline/brown/filled/line{ - dir = 1 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/smooth_edge, -/area/station/cargo/drone_bay) "qUl" = ( /obj/effect/turf_decal/trimline/yellow/filled/line{ dir = 8 @@ -61036,6 +61020,10 @@ /obj/machinery/light/small/directional/north, /turf/open/floor/iron/smooth, /area/station/maintenance/department/engine) +"qXo" = ( +/obj/effect/spawner/structure/window/reinforced, +/turf/open/floor/plating, +/area/station/command/heads_quarters/qm) "qXq" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -61962,6 +61950,18 @@ }, /turf/open/floor/iron/smooth_large, /area/station/maintenance/disposal) +"rla" = ( +/obj/effect/turf_decal/bot, +/obj/structure/disposaloutlet{ + dir = 4; + name = "Cargo Deliveries" + }, +/obj/structure/window/spawner/directional/south, +/obj/structure/disposalpipe/trunk{ + dir = 4 + }, +/turf/open/floor/iron/large, +/area/station/hallway/secondary/service) "rli" = ( /turf/closed/wall, /area/station/cargo/office) @@ -62087,15 +62087,6 @@ }, /turf/open/floor/iron/dark/smooth_large, /area/station/security/prison) -"rnb" = ( -/obj/effect/turf_decal/trimline/brown/filled/line{ - dir = 6 - }, -/obj/structure/trash_pile, -/obj/structure/sign/poster/contraband/random/directional/east, -/obj/machinery/camera/autoname/directional/east, -/turf/open/floor/iron/dark/textured, -/area/station/cargo/bitrunning/den) "rne" = ( /obj/structure/cable, /obj/machinery/power/apc/auto_name/directional/north, @@ -62514,6 +62505,13 @@ /obj/effect/turf_decal/bot, /turf/open/floor/iron/dark/smooth_large, /area/station/command/bridge) +"rtG" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/effect/spawner/structure/window/reinforced, +/turf/open/floor/plating, +/area/station/cargo/sorting) "rtS" = ( /obj/structure/disposalpipe/segment{ dir = 4 @@ -62657,18 +62655,6 @@ /obj/machinery/duct, /turf/open/floor/catwalk_floor/iron_smooth, /area/station/maintenance/department/medical) -"rvS" = ( -/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 = 4 - }, -/obj/machinery/holopad, -/obj/effect/turf_decal/bot, -/obj/effect/turf_decal/tile/green/diagonal_centre, -/turf/open/floor/iron/diagonal, -/area/station/hallway/secondary/service) "rvY" = ( /obj/machinery/atmospherics/components/binary/pump{ dir = 1; @@ -63360,13 +63346,6 @@ }, /turf/open/floor/iron/freezer, /area/station/command/heads_quarters/captain/private) -"rGx" = ( -/obj/machinery/button/door/directional/south{ - id = "kitchen_counter"; - name = "Counter Shutters Control" - }, -/turf/open/floor/iron/kitchen, -/area/station/service/kitchen) "rGH" = ( /obj/effect/turf_decal/trimline/blue/filled/line, /obj/structure/cable, @@ -63555,6 +63534,15 @@ /obj/effect/landmark/start/hangover, /turf/open/floor/wood/large, /area/station/hallway/primary/central/fore) +"rJo" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/turf_decal/trimline/brown/filled/line{ + dir = 1 + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/iron/dark/textured_edge, +/area/station/cargo/bitrunning/den) "rJK" = ( /obj/structure/flora/ocean/longseaweed, /obj/effect/spawner/liquids_spawner{ @@ -63613,6 +63601,14 @@ dir = 1 }, /area/station/hallway/primary/aft) +"rKL" = ( +/obj/structure/chair/sofa/corp/right{ + color = "#DE3A3A"; + dir = 4 + }, +/obj/effect/landmark/start/assistant, +/turf/open/floor/iron/cafeteria, +/area/station/service/cafeteria) "rKM" = ( /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ dir = 1 @@ -63758,6 +63754,16 @@ /obj/machinery/duct, /turf/open/floor/iron/freezer, /area/station/medical/treatment_center) +"rMv" = ( +/obj/machinery/conveyor_switch/oneway{ + id = "mining"; + dir = 1 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 6 + }, +/turf/open/floor/catwalk_floor/iron_smooth, +/area/station/cargo/miningfoundry) "rMB" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -64125,11 +64131,24 @@ /obj/effect/decal/cleanable/dirt, /turf/open/floor/plating, /area/station/maintenance/port) -"rSO" = ( +"rSX" = ( /obj/structure/table, -/obj/item/plate, -/turf/open/floor/iron/cafeteria, -/area/station/service/cafeteria) +/obj/item/reagent_containers/condiment/saltshaker{ + desc = "Salt. From space oceans, presumably. A staple of modern medicine."; + pixel_x = 8; + pixel_y = 12 + }, +/obj/item/reagent_containers/condiment/peppermill{ + desc = "Often used to flavor food or make people sneeze. Fashionably moved to the left side of the table."; + pixel_x = 8; + pixel_y = 2 + }, +/obj/effect/spawner/random/food_or_drink/cake_ingredients, +/obj/item/kitchen/rollingpin{ + pixel_x = -4 + }, +/turf/open/floor/iron/kitchen, +/area/station/service/kitchen) "rSZ" = ( /obj/item/kirbyplants/random, /obj/item/radio/intercom/directional/west, @@ -64384,6 +64403,41 @@ dir = 8 }, /area/station/commons/storage/primary) +"rVm" = ( +/obj/structure/table/reinforced, +/obj/item/folder/white{ + pixel_x = -5; + pixel_y = 4 + }, +/obj/item/pen{ + pixel_x = -5; + pixel_y = 4 + }, +/obj/effect/turf_decal/tile/yellow{ + dir = 1 + }, +/obj/effect/turf_decal/tile/yellow, +/obj/effect/turf_decal/tile/yellow{ + dir = 4 + }, +/obj/effect/turf_decal/tile/yellow{ + dir = 8 + }, +/obj/machinery/door/firedoor, +/obj/structure/desk_bell{ + pixel_x = 7; + pixel_y = 6 + }, +/obj/machinery/door/poddoor/shutters/preopen{ + id = "chemistry_shutters_south"; + name = "Pharmacy Shutters" + }, +/obj/machinery/door/window/left/directional/east{ + name = "Pharmacy Desk"; + req_access = list("pharmacy") + }, +/turf/open/floor/iron/white/smooth_large, +/area/station/medical/pharmacy) "rVq" = ( /obj/effect/turf_decal/plaque{ icon_state = "L2" @@ -64598,6 +64652,10 @@ /obj/structure/cable, /turf/open/floor/iron/smooth_large, /area/station/engineering/power_room) +"rZz" = ( +/obj/machinery/camera/directional/east, +/turf/open/floor/iron/smooth_large, +/area/station/cargo/miningfoundry) "rZI" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -64686,18 +64744,6 @@ }, /turf/open/floor/iron, /area/station/commons/lounge) -"sbx" = ( -/obj/machinery/airalarm/directional/north, -/obj/structure/chair/sofa/corp/corner{ - color = "#DE3A3A"; - dir = 4 - }, -/obj/effect/landmark/start/assistant, -/obj/machinery/light_switch/directional/north{ - pixel_x = 13 - }, -/turf/open/floor/iron/cafeteria, -/area/station/service/cafeteria) "sbH" = ( /obj/effect/turf_decal/nova_decals/enclave/bottom/middle{ color = "#52B4E9" @@ -64816,6 +64862,10 @@ }, /turf/open/floor/plating/airless, /area/station/science/ordnance/bomb) +"sdl" = ( +/obj/effect/landmark/start/cook, +/turf/open/floor/iron/kitchen, +/area/station/service/kitchen) "sdt" = ( /obj/docking_port/stationary/laborcamp_home{ dir = 8 @@ -65001,6 +65051,10 @@ /obj/effect/spawner/random/maintenance/three, /turf/open/floor/plating, /area/station/maintenance/port/greater) +"sgl" = ( +/obj/effect/spawner/structure/window/reinforced, +/turf/open/floor/plating, +/area/station/cargo/miningoffice) "sgn" = ( /obj/effect/spawner/structure/window/reinforced, /obj/machinery/door/poddoor/shutters/preopen{ @@ -65066,12 +65120,6 @@ /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, /turf/open/floor/iron/white/smooth_edge, /area/station/science/research) -"sha" = ( -/obj/machinery/light/warm/directional/east, -/obj/machinery/status_display/evac/directional/east, -/obj/structure/chair/stool/directional/north, -/turf/open/floor/iron/cafeteria, -/area/station/service/cafeteria) "shd" = ( /obj/structure/chair/office/light{ dir = 1 @@ -65121,10 +65169,25 @@ }, /turf/open/floor/iron/white/smooth_edge, /area/station/medical/medbay/central) +"shC" = ( +/obj/structure/cable, +/obj/effect/spawner/structure/window/reinforced, +/turf/open/floor/plating, +/area/station/security/checkpoint/supply) "shE" = ( /obj/effect/mapping_helpers/broken_floor, /turf/open/floor/plating, /area/station/maintenance/aft/lesser) +"shJ" = ( +/obj/machinery/door/airlock/mining{ + name = "Bitrunning Den" + }, +/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/supply/bit_den, +/turf/open/floor/iron/smooth, +/area/station/cargo/drone_bay) "shM" = ( /obj/structure/closet/crate/bin, /turf/open/floor/vault, @@ -65707,18 +65770,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/catwalk_floor/iron_smooth, /area/station/maintenance/department/engine/atmos) -"sqL" = ( -/obj/effect/turf_decal/trimline/brown/filled/line{ - dir = 4 - }, -/obj/machinery/light/directional/east, -/obj/effect/turf_decal/loading_area{ - dir = 1 - }, -/turf/open/floor/iron/smooth_edge{ - dir = 8 - }, -/area/station/cargo/miningdock) "sqQ" = ( /obj/machinery/power/solar{ id = "aftport"; @@ -65736,6 +65787,32 @@ }, /turf/open/floor/iron/dark/smooth_edge, /area/station/hallway/secondary/command) +"sre" = ( +/obj/structure/table/reinforced, +/obj/item/reagent_containers/cup/bottle/morphine, +/obj/item/reagent_containers/cup/bottle/toxin{ + pixel_x = 5; + pixel_y = 4 + }, +/obj/item/reagent_containers/cup/bottle/epinephrine{ + pixel_x = 8 + }, +/obj/item/reagent_containers/cup/bottle/multiver{ + pixel_x = -5 + }, +/obj/item/reagent_containers/syringe/epinephrine, +/obj/effect/turf_decal/tile/yellow/fourcorners, +/obj/machinery/door/firedoor, +/obj/machinery/door/poddoor/shutters/preopen{ + id = "chemistry_shutters"; + name = "Pharmacy Shutters" + }, +/obj/machinery/door/window/right/directional/west{ + name = "Pharmacy Desk"; + req_access = list("pharmacy") + }, +/turf/open/floor/iron/white/smooth_large, +/area/station/medical/pharmacy) "srk" = ( /obj/effect/landmark/start/prisoner, /turf/open/floor/iron/dark/small, @@ -65812,18 +65889,6 @@ /obj/effect/landmark/navigate_destination/research, /turf/open/floor/iron/white/smooth_large, /area/station/science/research) -"ssw" = ( -/obj/machinery/biogenerator, -/obj/machinery/door/firedoor, -/obj/structure/window/spawner/directional/east, -/obj/machinery/door/poddoor/shutters/preopen{ - dir = 1; - id = "hydroponics_counter"; - name = "Hydroponics Counter Shutters" - }, -/obj/effect/turf_decal/bot, -/turf/open/floor/iron/large, -/area/station/service/hydroponics) "ssL" = ( /obj/effect/turf_decal/stripes/line{ dir = 8 @@ -66279,6 +66344,10 @@ dir = 8 }, /area/station/engineering/power_room) +"sAi" = ( +/obj/structure/extinguisher_cabinet/directional/north, +/turf/open/floor/iron/smooth_large, +/area/station/cargo/miningfoundry) "sAk" = ( /obj/machinery/light/small/directional/west, /obj/structure/extinguisher_cabinet/directional/west, @@ -66433,42 +66502,6 @@ /obj/effect/decal/cleanable/dirt, /turf/open/floor/plating, /area/station/maintenance/department/security/brig) -"sCO" = ( -/obj/structure/table/reinforced, -/obj/item/folder/white{ - pixel_x = -5; - pixel_y = 4 - }, -/obj/item/pen{ - pixel_x = -5; - pixel_y = 4 - }, -/obj/effect/turf_decal/tile/yellow{ - dir = 1 - }, -/obj/effect/turf_decal/tile/yellow, -/obj/effect/turf_decal/tile/yellow{ - dir = 4 - }, -/obj/effect/turf_decal/tile/yellow{ - dir = 8 - }, -/obj/machinery/door/firedoor, -/obj/structure/desk_bell{ - pixel_x = 7; - pixel_y = 6 - }, -/obj/machinery/door/poddoor/shutters/preopen{ - id = "chemistry_shutters"; - name = "Pharmacy Shutters" - }, -/obj/machinery/door/window/left/directional/south{ - name = "Pharmacy Desk"; - req_access = list("pharmacy"); - dir = 1 - }, -/turf/open/floor/iron/white/smooth_large, -/area/station/medical/pharmacy) "sCQ" = ( /obj/structure/cable, /obj/effect/turf_decal/stripes/line{ @@ -67080,16 +67113,6 @@ /obj/structure/disposalpipe/segment, /turf/open/floor/iron/large, /area/station/hallway/primary/fore) -"sJb" = ( -/obj/structure/kitchenspike, -/obj/effect/turf_decal/weather/snow, -/obj/machinery/atmospherics/pipe/heat_exchanging/simple{ - dir = 4 - }, -/obj/machinery/airalarm/directional/north, -/obj/effect/mapping_helpers/airalarm/tlv_cold_room, -/turf/open/floor/iron/kitchen_coldroom/freezerfloor, -/area/station/service/kitchen/coldroom) "sJd" = ( /turf/closed/wall, /area/station/commons/vacant_room/office) @@ -67174,6 +67197,21 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/smooth_edge, /area/station/engineering/main) +"sJR" = ( +/obj/item/storage/bag/plants{ + pixel_y = 2 + }, +/obj/item/reagent_containers/cup/watering_can{ + pixel_y = 3 + }, +/obj/machinery/newscaster/directional/south, +/obj/effect/turf_decal/tile/green/diagonal_centre, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/structure/table, +/turf/open/floor/iron/diagonal, +/area/station/hallway/secondary/service) "sKs" = ( /obj/effect/spawner/random/structure/steam_vent, /turf/open/floor/catwalk_floor/iron_smooth, @@ -67429,6 +67467,22 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron/dark/smooth_large, /area/station/ai_monitored/command/nuke_storage) +"sMD" = ( +/obj/structure/table, +/obj/effect/spawner/random/entertainment/deck, +/obj/item/food/ready_donk/donkhiladas{ + pixel_y = 11; + pixel_x = 1 + }, +/obj/item/food/ready_donk/nachos_grandes{ + pixel_y = 7 + }, +/obj/item/food/ready_donk/mac_n_cheese{ + pixel_y = 3; + pixel_x = 2 + }, +/turf/open/floor/iron/smooth_large, +/area/station/cargo/miningoffice) "sMN" = ( /obj/structure/chair/sofa/bench/right{ dir = 4 @@ -67742,6 +67796,9 @@ /obj/item/radio/intercom/directional/south, /turf/open/floor/iron/small, /area/station/hallway/secondary/exit/departure_lounge) +"sQJ" = ( +/turf/closed/wall, +/area/station/cargo/miningfoundry) "sQO" = ( /obj/structure/bookcase/random/religion, /obj/effect/turf_decal/siding/wood/corner{ @@ -67815,6 +67872,16 @@ }, /turf/open/floor/iron/smooth, /area/station/service/hydroponics/garden/abandoned) +"sSd" = ( +/obj/machinery/power/apc/auto_name/directional/north, +/obj/structure/cable, +/obj/machinery/light/directional/north, +/obj/structure/table, +/obj/machinery/light_switch/directional/north{ + pixel_x = 13 + }, +/turf/open/floor/iron/kitchen, +/area/station/service/kitchen) "sSf" = ( /obj/effect/turf_decal/trimline/red/filled/corner{ dir = 8 @@ -67837,6 +67904,11 @@ /obj/structure/transit_tube/crossing, /turf/open/space/basic, /area/space/nearstation) +"sSm" = ( +/obj/structure/flora/bush/jungle/a/style_3, +/obj/structure/window/fulltile, +/turf/open/floor/grass, +/area/station/service/kitchen) "sSn" = ( /obj/effect/turf_decal/trimline/brown/filled/line, /obj/structure/table, @@ -68522,10 +68594,28 @@ dir = 8 }, /area/station/hallway/primary/fore) +"tbm" = ( +/obj/effect/turf_decal/trimline/brown/filled/line, +/obj/machinery/disposal/bin, +/obj/effect/turf_decal/box, +/obj/structure/disposalpipe/trunk{ + dir = 8 + }, +/obj/machinery/light_switch/directional/south, +/turf/open/floor/iron/smooth_edge{ + dir = 1 + }, +/area/station/cargo/miningdock) "tbn" = ( /obj/structure/girder, /turf/open/floor/iron/smooth, /area/station/maintenance/department/crew_quarters/bar) +"tbp" = ( +/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/smooth_large, +/area/station/cargo/miningdock) "tbq" = ( /obj/structure/chair/pew/right, /obj/effect/turf_decal/siding/wood{ @@ -68680,6 +68770,18 @@ dir = 8 }, /area/station/medical/virology) +"tdG" = ( +/obj/structure/chair/stool/directional/west{ + dir = 4 + }, +/obj/effect/turf_decal/siding/wood{ + 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/cafeteria, +/area/station/service/cafeteria) "tdL" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/cable, @@ -68687,18 +68789,6 @@ /obj/effect/spawner/random/trash/garbage, /turf/open/floor/plating, /area/station/maintenance/port) -"tdO" = ( -/obj/machinery/door/firedoor, -/obj/machinery/door/airlock/hydroponics/glass{ - name = "Hydroponics" - }, -/obj/effect/mapping_helpers/airlock/access/all/service/hydroponics, -/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, -/turf/open/floor/iron/large, -/area/station/service/hydroponics) "tdY" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -69068,28 +69158,6 @@ dir = 8 }, /area/station/hallway/primary/central/aft) -"tiJ" = ( -/obj/structure/table/reinforced, -/obj/machinery/door/firedoor, -/obj/item/paper_bin{ - pixel_y = 4 - }, -/obj/item/pen{ - pixel_y = 4 - }, -/obj/structure/window/spawner/directional/east, -/obj/structure/disposalpipe/segment, -/obj/machinery/door/window/left/directional/south{ - name = "Hydroponics Desk"; - req_access = list("hydroponics") - }, -/obj/machinery/door/poddoor/shutters/preopen{ - dir = 1; - id = "hydroponics_counter"; - name = "Hydroponics Counter Shutters" - }, -/turf/open/floor/iron/large, -/area/station/service/hydroponics) "tiL" = ( /obj/structure/cable, /obj/machinery/power/apc/auto_name/directional/east, @@ -69129,17 +69197,6 @@ }, /turf/open/floor/iron/large, /area/station/commons/fitness/recreation) -"tja" = ( -/obj/machinery/atmospherics/pipe/heat_exchanging/simple{ - dir = 5 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/turf_decal/weather/snow, -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ - dir = 8 - }, -/turf/open/floor/iron/kitchen_coldroom/freezerfloor, -/area/station/service/kitchen/coldroom) "tjr" = ( /turf/closed/wall/r_wall, /area/station/engineering/atmos/hfr_room) @@ -69254,21 +69311,6 @@ /obj/structure/transit_tube/curved/flipped, /turf/open/space/basic, /area/space/nearstation) -"tlk" = ( -/obj/machinery/atmospherics/pipe/layer_manifold/supply/hidden{ - dir = 8 - }, -/obj/effect/turf_decal/delivery, -/obj/structure/plasticflaps/opaque{ - name = "Kitchen Deliveries" - }, -/obj/machinery/navbeacon{ - codes_txt = "delivery;dir=8"; - location = "Kitchen" - }, -/obj/structure/cable, -/turf/open/floor/iron/large, -/area/station/maintenance/starboard/greater) "tlq" = ( /obj/effect/spawner/structure/window/reinforced, /obj/machinery/door/poddoor/shutters/preopen{ @@ -69767,24 +69809,6 @@ /obj/effect/decal/cleanable/dirt, /turf/open/floor/iron/smooth, /area/station/maintenance/aft/greater) -"trR" = ( -/obj/structure/rack, -/obj/item/clothing/mask/gas, -/obj/item/reagent_containers/cup/glass/shaker, -/obj/item/cultivator, -/obj/item/clothing/head/utility/chefhat, -/obj/item/storage/box/lights/mixed, -/obj/effect/spawner/random/maintenance, -/obj/machinery/firealarm/directional/south, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/effect/spawner/random/food_or_drink/donkpockets, -/obj/item/storage/box/drinkingglasses, -/obj/effect/turf_decal/tile/green/diagonal_centre, -/obj/effect/turf_decal/bot, -/turf/open/floor/iron/diagonal, -/area/station/hallway/secondary/service) "tsb" = ( /obj/effect/turf_decal/trimline/blue/filled/line{ dir = 1 @@ -70698,6 +70722,11 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron/smooth, /area/station/engineering/atmos) +"tDA" = ( +/obj/structure/table, +/obj/machinery/light/directional/north, +/turf/open/floor/iron/kitchen, +/area/station/service/kitchen) "tDI" = ( /obj/machinery/portable_atmospherics/canister, /obj/effect/turf_decal/box, @@ -70793,31 +70822,9 @@ location = "QM #4" }, /obj/effect/turf_decal/box, -/mob/living/simple_animal/bot/mulebot{ - home_destination = "QM #1"; - suffix = "#1" - }, +/mob/living/simple_animal/bot/mulebot, /turf/open/floor/iron/smooth_edge, /area/station/cargo/storage) -"tEI" = ( -/obj/structure/table, -/obj/item/food/ready_donk/mac_n_cheese{ - pixel_y = 3; - pixel_x = 2 - }, -/obj/item/food/ready_donk/nachos_grandes{ - pixel_y = 7 - }, -/obj/item/food/ready_donk/donkhiladas{ - pixel_y = 11; - pixel_x = 1 - }, -/obj/effect/turf_decal/trimline/brown/filled/line{ - dir = 6 - }, -/obj/machinery/airalarm/directional/east, -/turf/open/floor/iron/smooth, -/area/station/cargo/bitrunning/den) "tEK" = ( /obj/machinery/atmospherics/pipe/smart/simple/dark/hidden{ dir = 10 @@ -70969,11 +70976,6 @@ }, /turf/open/floor/vault, /area/station/ai_monitored/turret_protected/aisat/atmos) -"tGD" = ( -/obj/effect/turf_decal/box, -/obj/structure/closet/secure_closet/freezer/fridge, -/turf/open/floor/iron/kitchen, -/area/station/service/kitchen) "tGJ" = ( /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ dir = 1 @@ -71409,11 +71411,6 @@ /obj/effect/turf_decal/tile/purple/diagonal_centre, /turf/open/floor/iron/white/diagonal, /area/station/science/research) -"tNI" = ( -/obj/machinery/status_display/evac/directional/west, -/obj/effect/turf_decal/tile/green/diagonal_centre, -/turf/open/floor/iron/diagonal, -/area/station/hallway/secondary/service) "tNN" = ( /obj/structure/window/spawner/directional/east, /turf/open/floor/grass, @@ -71427,15 +71424,6 @@ /obj/effect/landmark/start/hangover, /turf/open/floor/iron/white/diagonal, /area/station/medical/medbay/central) -"tOa" = ( -/obj/structure/chair/plastic, -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ - dir = 8 - }, -/obj/effect/landmark/start/bitrunner, -/obj/structure/cable, -/turf/open/floor/iron/smooth_large, -/area/station/cargo/bitrunning/den) "tOr" = ( /obj/effect/spawner/liquids_spawner, /obj/machinery/light/cold/directional/south, @@ -71641,6 +71629,10 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron/freezer, /area/station/medical/pharmacy) +"tRE" = ( +/obj/structure/cable, +/turf/open/floor/iron/kitchen, +/area/station/service/kitchen) "tRQ" = ( /obj/effect/turf_decal/trimline/green/filled/line{ dir = 1 @@ -71704,16 +71696,6 @@ dir = 4 }, /area/station/hallway/secondary/command) -"tSE" = ( -/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 = 6 - }, -/obj/effect/turf_decal/tile/green/diagonal_centre, -/turf/open/floor/iron/diagonal, -/area/station/hallway/secondary/service) "tSH" = ( /obj/effect/decal/cleanable/dirt, /obj/effect/turf_decal/siding/green{ @@ -71767,20 +71749,6 @@ "tTx" = ( /turf/open/floor/iron/white/smooth_large, /area/station/medical/medbay/central) -"tTC" = ( -/obj/structure/table, -/obj/machinery/door/poddoor/shutters/preopen{ - dir = 8; - id = "kitchen_counter"; - name = "Kitchen Counter Shutters" - }, -/obj/machinery/door/firedoor, -/obj/machinery/pollution_scrubber{ - pixel_x = 14; - pixel_y = -4 - }, -/turf/open/floor/iron/large, -/area/station/service/kitchen) "tTI" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -71845,12 +71813,6 @@ /obj/effect/mapping_helpers/mail_sorting/service/kitchen, /turf/open/floor/iron/dark/smooth_large, /area/station/hallway/primary/fore) -"tUw" = ( -/obj/effect/turf_decal/weather/snow, -/obj/machinery/atmospherics/pipe/smart/manifold4w/dark/hidden, -/obj/structure/cable, -/turf/open/floor/iron/kitchen_coldroom/freezerfloor, -/area/station/service/kitchen/coldroom) "tUB" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/effect/turf_decal/stripes/line{ @@ -71897,6 +71859,11 @@ }, /turf/open/floor/wood, /area/station/commons/fitness/recreation/entertainment) +"tVn" = ( +/obj/machinery/power/apc/auto_name/directional/east, +/obj/structure/cable, +/turf/open/floor/catwalk_floor/iron_dark, +/area/station/cargo/bitrunning/den) "tVB" = ( /obj/effect/turf_decal/delivery, /obj/machinery/space_heater, @@ -72040,6 +72007,11 @@ }, /turf/open/floor/carpet/orange, /area/station/command/heads_quarters/ce) +"tYp" = ( +/obj/machinery/chem_mass_spec, +/obj/effect/turf_decal/trimline/yellow/filled/line, +/turf/open/floor/iron/freezer, +/area/station/medical/pharmacy) "tYr" = ( /obj/structure/cable, /turf/open/floor/plating, @@ -72050,23 +72022,16 @@ }, /turf/open/floor/iron/smooth, /area/station/command/cc_dock) +"tZi" = ( +/obj/structure/noticeboard/directional/north, +/obj/machinery/light_switch/directional/east, +/obj/effect/turf_decal/bot, +/turf/open/floor/iron/large, +/area/station/hallway/secondary/service) "tZj" = ( /obj/effect/turf_decal/trimline/yellow/filled/corner, /turf/open/floor/iron/freezer, /area/station/medical/chemistry) -"tZu" = ( -/obj/structure/table, -/obj/item/plate/large, -/obj/item/plate, -/obj/item/plate/small{ - pixel_y = 1 - }, -/obj/item/knife/butcher{ - pixel_x = 13; - pixel_y = 3 - }, -/turf/open/floor/iron/kitchen, -/area/station/service/kitchen) "tZx" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -72513,11 +72478,6 @@ /obj/machinery/door/firedoor, /turf/open/floor/iron/white/smooth_large, /area/station/science/auxlab) -"ueJ" = ( -/obj/structure/table, -/obj/effect/spawner/random/entertainment/deck, -/turf/open/floor/iron/smooth_large, -/area/station/cargo/miningoffice) "ueO" = ( /obj/structure/closet/toolcloset, /obj/item/clothing/glasses/meson/engine, @@ -72628,6 +72588,15 @@ "ugz" = ( /turf/open/floor/plating/airless, /area/station/science/ordnance/bomb) +"ugC" = ( +/obj/effect/turf_decal/trimline/brown/filled/line{ + dir = 1 + }, +/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_edge, +/area/station/cargo/drone_bay) "ugP" = ( /obj/effect/decal/cleanable/dirt, /obj/effect/spawner/random/structure/crate_abandoned, @@ -72717,6 +72686,14 @@ /obj/effect/turf_decal/stripes/box, /turf/open/floor/iron/large, /area/station/science/lab) +"uim" = ( +/obj/structure/chair/sofa/right/brown{ + dir = 4 + }, +/obj/machinery/firealarm/directional/south, +/obj/machinery/light_switch/directional/west, +/turf/open/floor/iron/smooth_large, +/area/station/cargo/miningoffice) "uio" = ( /obj/machinery/button/door/incinerator_vent_atmos_aux{ pixel_x = -6; @@ -73230,6 +73207,14 @@ /obj/machinery/door/firedoor, /turf/open/floor/iron/large, /area/station/commons/fitness/recreation/entertainment) +"upB" = ( +/obj/effect/turf_decal/weather/snow, +/obj/machinery/firealarm/directional/north, +/obj/machinery/power/apc/auto_name/directional/west, +/obj/structure/cable, +/obj/structure/closet/secure_closet/freezer/fridge, +/turf/open/floor/iron/kitchen_coldroom/freezerfloor, +/area/station/service/kitchen/coldroom) "upF" = ( /obj/structure/cable, /obj/effect/spawner/structure/window/reinforced/plasma, @@ -73594,6 +73579,12 @@ /obj/effect/spawner/random/maintenance/three, /turf/open/floor/plating, /area/station/maintenance/department/medical/central) +"utv" = ( +/obj/machinery/light/directional/north, +/obj/structure/closet/secure_closet/miner, +/obj/effect/turf_decal/delivery, +/turf/open/floor/iron/smooth_large, +/area/station/cargo/miningdock) "utx" = ( /obj/machinery/atmospherics/pipe/smart/simple/scrubbers/visible{ dir = 9 @@ -73976,6 +73967,21 @@ dir = 8 }, /area/station/medical/storage) +"uyc" = ( +/obj/machinery/camera/directional/west{ + c_tag = "Cargo - Mining" + }, +/obj/effect/turf_decal/loading_area{ + dir = 1 + }, +/obj/effect/landmark/start/shaft_miner, +/obj/machinery/power/apc/auto_name/directional/west, +/obj/structure/cable, +/obj/effect/turf_decal/trimline/brown/filled/warning{ + dir = 9 + }, +/turf/open/floor/iron/smooth_large, +/area/station/cargo/miningdock) "uyk" = ( /turf/closed/wall, /area/station/medical/storage) @@ -74146,6 +74152,13 @@ /obj/effect/turf_decal/tile/bar/opposingcorners, /turf/open/floor/iron, /area/station/service/bar) +"uzN" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 1 + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/iron/dark/textured_large, +/area/station/cargo/bitrunning/den) "uzW" = ( /obj/effect/turf_decal/trimline/dark_red/arrow_ccw, /obj/structure/sign/poster/official/random/directional/south, @@ -74742,6 +74755,14 @@ }, /turf/open/floor/engine/co2, /area/station/engineering/atmos) +"uIn" = ( +/obj/effect/turf_decal/trimline/brown/filled/line{ + dir = 1 + }, +/obj/machinery/computer/shuttle/mining, +/obj/effect/turf_decal/bot, +/turf/open/floor/iron/smooth_edge, +/area/station/cargo/miningdock) "uIo" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -75049,29 +75070,6 @@ /obj/effect/turf_decal/stripes/line, /turf/open/floor/wood/large, /area/station/command/heads_quarters/blueshield) -"uNs" = ( -/obj/structure/table, -/obj/item/kitchen/rollingpin{ - pixel_y = 4 - }, -/obj/item/reagent_containers/cup/rag{ - pixel_y = 4 - }, -/obj/machinery/requests_console/directional/south{ - department = "Service Hall"; - name = "Service Hall Requests Console" - }, -/obj/effect/mapping_helpers/requests_console/supplies, -/obj/item/radio/headset/headset_srv{ - pixel_x = -11; - pixel_y = 4 - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/effect/turf_decal/tile/green/diagonal_centre, -/turf/open/floor/iron/diagonal, -/area/station/hallway/secondary/service) "uNu" = ( /obj/machinery/door/firedoor, /obj/machinery/door/poddoor/shutters/preopen{ @@ -75333,11 +75331,6 @@ }, /turf/open/floor/iron/small, /area/station/hallway/primary/central) -"uQI" = ( -/obj/effect/decal/cleanable/dirt, -/obj/structure/pod, -/turf/open/floor/wood, -/area/station/maintenance/rus_gambling) "uQV" = ( /turf/closed/wall/r_wall, /area/station/ai_monitored/turret_protected/aisat/service) @@ -75492,13 +75485,6 @@ }, /turf/open/floor/vault, /area/station/ai_monitored/turret_protected/ai_upload) -"uTk" = ( -/obj/effect/spawner/structure/window/reinforced, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/open/floor/plating/airless, -/area/station/cargo/sorting) "uTs" = ( /obj/effect/decal/cleanable/dirt, /obj/structure/closet/emcloset, @@ -75659,8 +75645,10 @@ }, /turf/open/floor/catwalk_floor, /area/station/hallway/primary/aft) -"uVw" = ( -/obj/structure/trash_pile, +"uVp" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, /turf/open/floor/catwalk_floor/iron_dark, /area/station/cargo/bitrunning/den) "uVG" = ( @@ -76005,21 +75993,6 @@ }, /turf/open/floor/circuit, /area/station/ai_monitored/turret_protected/ai) -"vaJ" = ( -/obj/structure/table, -/obj/item/storage/bag/plants{ - pixel_y = 2 - }, -/obj/item/reagent_containers/cup/watering_can{ - pixel_y = 3 - }, -/obj/machinery/newscaster/directional/south, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/effect/turf_decal/tile/green/diagonal_centre, -/turf/open/floor/iron/diagonal, -/area/station/hallway/secondary/service) "vaL" = ( /obj/structure/table/reinforced, /obj/structure/sign/calendar/directional/west, @@ -76292,6 +76265,14 @@ /obj/effect/turf_decal/stripes/end, /turf/open/floor/pod/dark, /area/station/engineering/storage/tech) +"vga" = ( +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock/hydroponics/glass{ + name = "Hydroponics" + }, +/obj/effect/mapping_helpers/airlock/access/all/service/hydroponics, +/turf/open/floor/iron/large, +/area/station/service/hydroponics) "vgc" = ( /obj/structure/disposalpipe/segment{ dir = 9 @@ -76355,6 +76336,11 @@ }, /turf/open/floor/iron/smooth_large, /area/station/cargo/warehouse) +"vhh" = ( +/obj/structure/flora/bush/jungle, +/obj/structure/window/fulltile, +/turf/open/floor/grass, +/area/station/service/hydroponics) "vhl" = ( /obj/machinery/door/airlock{ id_tag = "Toilet1"; @@ -76753,11 +76739,6 @@ dir = 4 }, /area/station/science/genetics) -"vmS" = ( -/obj/structure/chair/stool/directional/east, -/obj/effect/landmark/start/assistant, -/turf/open/floor/iron/cafeteria, -/area/station/service/cafeteria) "vmX" = ( /obj/effect/decal/cleanable/dirt, /obj/machinery/door/airlock{ @@ -77075,14 +77056,6 @@ name = "Holodeck Projector Floor" }, /area/station/holodeck/rec_center) -"vrL" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/effect/turf_decal/stripes/box, -/obj/machinery/rnd/production/techfab/department/service, -/turf/open/floor/iron/large, -/area/station/hallway/secondary/service) "vrU" = ( /obj/machinery/atmospherics/pipe/smart/simple/orange/visible{ dir = 4 @@ -77118,11 +77091,6 @@ /obj/machinery/space_heater, /turf/open/floor/iron/smooth, /area/station/maintenance/department/engine/atmos/lesser) -"vsK" = ( -/obj/effect/spawner/structure/window/reinforced, -/obj/structure/disposalpipe/segment, -/turf/open/floor/plating/airless, -/area/station/cargo/office) "vsS" = ( /obj/effect/turf_decal/trimline/yellow/filled/corner{ dir = 8 @@ -77145,22 +77113,6 @@ dir = 8 }, /area/station/hallway/primary/fore) -"vte" = ( -/obj/machinery/door/airlock/mining{ - name = "Bitrunning Den" - }, -/obj/effect/mapping_helpers/airlock/access/any/supply/bit_den, -/obj/effect/turf_decal/stripes/line{ - dir = 4 - }, -/obj/effect/turf_decal/stripes/line{ - dir = 8 - }, -/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/miningdock) "vti" = ( /obj/effect/spawner/structure/window/reinforced, /obj/machinery/door/poddoor/preopen{ @@ -77478,13 +77430,13 @@ /turf/open/floor/iron/smooth_large, /area/station/cargo/sorting) "vwn" = ( -/obj/structure/rack, /obj/effect/turf_decal/tile/dark_red/anticorner{ dir = 1 }, /obj/machinery/requests_console/auto_name/directional/north, /obj/effect/turf_decal/delivery, -/obj/effect/spawner/random/armory/disablers, +/obj/structure/rack/gunrack, +/obj/effect/spawner/armory_spawn/mod_lasers_small, /turf/open/floor/engine, /area/station/ai_monitored/security/armory) "vwo" = ( @@ -77540,11 +77492,6 @@ /obj/structure/cable, /turf/open/floor/plating, /area/station/maintenance/aft/greater) -"vxf" = ( -/obj/machinery/holopad, -/obj/effect/turf_decal/trimline/brown/filled/corner, -/turf/open/floor/iron/smooth_corner, -/area/station/cargo/bitrunning/den) "vxv" = ( /mob/living/basic/butterfly, /turf/closed/wall/mineral/iron, @@ -77595,16 +77542,6 @@ /obj/structure/cable, /turf/open/floor/iron/dark/telecomms, /area/station/tcommsat/server) -"vyb" = ( -/obj/machinery/restaurant_portal/restaurant, -/obj/machinery/light/warm/directional/east, -/obj/effect/turf_decal/delivery/red, -/obj/machinery/status_display/ai/directional/east, -/obj/structure/disposalpipe/segment{ - dir = 10 - }, -/turf/open/floor/iron/smooth_large, -/area/station/service/cafeteria) "vyc" = ( /obj/machinery/door/firedoor, /obj/structure/table/reinforced, @@ -78142,6 +78079,16 @@ /obj/structure/railing, /turf/open/floor/circuit, /area/station/ai_monitored/turret_protected/ai) +"vGV" = ( +/obj/machinery/door/firedoor, +/obj/machinery/door/poddoor/shutters/preopen{ + dir = 8; + id = "kitchen_counter"; + name = "Kitchen Counter Shutters" + }, +/obj/structure/table, +/turf/open/floor/iron/kitchen, +/area/station/service/kitchen) "vHa" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -78758,6 +78705,15 @@ /obj/effect/decal/cleanable/dirt, /turf/open/floor/wood, /area/station/maintenance/port/aft) +"vPl" = ( +/obj/machinery/firealarm/directional/south, +/obj/effect/turf_decal/tile/green/diagonal_centre, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/icecream_vat, +/turf/open/floor/iron/diagonal, +/area/station/hallway/secondary/service) "vPr" = ( /obj/effect/turf_decal/stripes/line{ dir = 10 @@ -79111,11 +79067,6 @@ dir = 4 }, /area/station/engineering/atmos) -"vUt" = ( -/obj/effect/spawner/structure/window/reinforced, -/obj/structure/disposalpipe/segment, -/turf/open/floor/plating/airless, -/area/station/cargo/sorting) "vUB" = ( /obj/machinery/incident_display/delam, /turf/closed/wall/r_wall, @@ -79484,11 +79435,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/dark, /area/station/security/brig) -"vZc" = ( -/obj/structure/cable, -/obj/effect/landmark/start/cook, -/turf/open/floor/iron/kitchen, -/area/station/service/kitchen) "vZk" = ( /obj/machinery/cryopod, /obj/effect/turf_decal/siding/white, @@ -80064,13 +80010,6 @@ /obj/structure/table/wood/fancy, /turf/open/floor/pod/dark, /area/station/service/chapel) -"whq" = ( -/obj/structure/table, -/obj/machinery/processor{ - pixel_y = 12 - }, -/turf/open/floor/iron/kitchen, -/area/station/service/kitchen) "whu" = ( /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ dir = 8 @@ -80429,6 +80368,14 @@ }, /turf/open/floor/carpet/black, /area/station/service/chapel/office) +"wnd" = ( +/obj/effect/turf_decal/delivery, +/obj/structure/railing{ + dir = 1 + }, +/obj/machinery/airalarm/directional/east, +/turf/open/floor/iron/smooth_large, +/area/station/cargo/miningfoundry) "wne" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/effect/turf_decal/trimline/green/corner{ @@ -80501,12 +80448,6 @@ /obj/machinery/atmospherics/pipe/smart/simple/dark/visible, /turf/open/floor/iron/smooth_large, /area/station/engineering/atmos) -"woE" = ( -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ - dir = 1 - }, -/turf/open/floor/iron/cafeteria, -/area/station/service/cafeteria) "woG" = ( /obj/effect/turf_decal/trimline/purple/filled/line{ dir = 4 @@ -80641,6 +80582,11 @@ /obj/effect/landmark/start/hangover, /turf/open/floor/iron/smooth_large, /area/station/hallway/primary/aft) +"wpS" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/iron/smooth_large, +/area/station/cargo/miningfoundry) "wqd" = ( /turf/closed/wall, /area/station/service/kitchen/abandoned) @@ -80698,6 +80644,15 @@ /obj/machinery/power/apc/auto_name/directional/south, /turf/open/floor/catwalk_floor/iron_smooth, /area/station/maintenance/department/engine/atmos) +"wrn" = ( +/obj/structure/chair/stool/directional/west{ + dir = 4 + }, +/obj/effect/turf_decal/siding/wood{ + dir = 4 + }, +/turf/open/floor/iron/cafeteria, +/area/station/service/cafeteria) "wrA" = ( /obj/structure/rack, /obj/item/clothing/head/helmet/sec{ @@ -80881,6 +80836,16 @@ }, /turf/open/floor/iron/smooth_edge, /area/station/cargo/lobby) +"wsQ" = ( +/obj/effect/turf_decal/loading_area{ + dir = 1 + }, +/obj/effect/landmark/start/shaft_miner, +/obj/effect/turf_decal/trimline/brown/filled/warning{ + dir = 1 + }, +/turf/open/floor/iron/smooth_large, +/area/station/cargo/miningdock) "wsR" = ( /obj/effect/turf_decal/trimline/neutral/filled/line{ dir = 4 @@ -81101,16 +81066,6 @@ /obj/effect/turf_decal/delivery, /turf/open/floor/iron/smooth_large, /area/station/cargo/sorting) -"wwr" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/turf_decal/trimline/yellow/filled/line{ - dir = 1 - }, -/obj/structure/closet/secure_closet/chemical, -/obj/item/storage/box/syringes, -/obj/item/storage/box/beakers, -/turf/open/floor/iron/freezer, -/area/station/medical/pharmacy) "wwA" = ( /obj/structure/table, /obj/effect/turf_decal/tile/neutral{ @@ -81538,6 +81493,16 @@ /obj/structure/cable, /turf/open/floor/iron/small, /area/station/commons/dorms) +"wBf" = ( +/obj/machinery/light/warm/directional/east, +/obj/machinery/status_display/ai/directional/east, +/obj/structure/disposalpipe/segment{ + dir = 10 + }, +/obj/effect/turf_decal/delivery/red, +/obj/machinery/restaurant_portal/restaurant, +/turf/open/floor/iron/smooth_large, +/area/station/service/cafeteria) "wBk" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -82368,6 +82333,29 @@ /obj/structure/sign/calendar/directional/west, /turf/open/floor/wood/large, /area/station/science/research) +"wMw" = ( +/obj/item/plate/oven_tray{ + pixel_x = -2; + pixel_y = 1 + }, +/obj/item/plate/oven_tray{ + pixel_x = -2; + pixel_y = 3 + }, +/obj/item/clothing/suit/apron/chef{ + pixel_y = 11 + }, +/obj/item/book/manual/wiki/cooking_to_serve_man{ + pixel_x = 3; + pixel_y = 2 + }, +/obj/structure/table, +/obj/item/knife/kitchen{ + pixel_x = -13; + pixel_y = 3 + }, +/turf/open/floor/iron/kitchen, +/area/station/service/kitchen) "wMA" = ( /obj/effect/turf_decal/trimline/yellow/filled/warning{ dir = 4 @@ -82676,21 +82664,21 @@ dir = 4 }, /area/station/service/hydroponics/garden) -"wQw" = ( -/obj/structure/kitchenspike, -/obj/effect/turf_decal/weather/snow, -/obj/machinery/atmospherics/pipe/heat_exchanging/simple{ - dir = 10 - }, -/obj/structure/sink/kitchen/directional/west, -/turf/open/floor/iron/kitchen_coldroom/freezerfloor, -/area/station/service/kitchen/coldroom) "wQx" = ( /obj/effect/turf_decal/tile/red/anticorner{ dir = 8 }, /turf/open/floor/pod/dark, /area/station/service/chapel/office) +"wQL" = ( +/obj/effect/turf_decal/trimline/brown/filled/warning{ + dir = 5 + }, +/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_edge, +/area/station/cargo/drone_bay) "wQU" = ( /obj/effect/spawner/structure/window/reinforced, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -82951,6 +82939,10 @@ /obj/structure/table, /turf/open/floor/iron/dark, /area/station/science/robotics/lab) +"wVD" = ( +/obj/effect/spawner/structure/window/reinforced, +/turf/open/floor/plating, +/area/station/cargo/sorting) "wVH" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -82987,10 +82979,7 @@ location = "QM #1" }, /obj/effect/turf_decal/box, -/mob/living/simple_animal/bot/mulebot{ - home_destination = "QM #3"; - suffix = "#3" - }, +/mob/living/simple_animal/bot/mulebot, /turf/open/floor/iron/smooth_edge, /area/station/cargo/storage) "wWw" = ( @@ -83263,6 +83252,12 @@ /obj/effect/turf_decal/trimline/white/mid_joiner, /turf/open/floor/carpet/black, /area/station/commons/dorms) +"xcq" = ( +/obj/structure/flora/bush/fullgrass, +/obj/structure/flora/bush/ferny, +/obj/structure/window/fulltile, +/turf/open/floor/grass, +/area/station/service/kitchen) "xcD" = ( /obj/machinery/atmospherics/pipe/smart/simple/cyan/visible{ dir = 5 @@ -83408,17 +83403,6 @@ /obj/effect/turf_decal/box, /turf/open/floor/iron/dark/smooth_large, /area/station/engineering/atmos) -"xgl" = ( -/obj/machinery/camera/directional/south{ - c_tag = "Service - Cafeteria Aft"; - name = "service camera" - }, -/obj/structure/chair/sofa/corp/left{ - color = "#DE3A3A"; - dir = 1 - }, -/turf/open/floor/iron/cafeteria, -/area/station/service/cafeteria) "xgv" = ( /obj/machinery/smartfridge/chemistry/virology/preloaded, /obj/effect/turf_decal/trimline/dark_green/filled/line{ @@ -83993,6 +83977,11 @@ /obj/effect/decal/cleanable/dirt, /turf/open/floor/plating, /area/station/maintenance/aft/lesser) +"xou" = ( +/obj/machinery/holopad, +/obj/effect/turf_decal/bot, +/turf/open/floor/iron/kitchen, +/area/station/service/kitchen) "xoG" = ( /obj/machinery/biogenerator, /obj/item/reagent_containers/cup/beaker{ @@ -84237,16 +84226,6 @@ /obj/effect/turf_decal/tile/blue/diagonal_centre, /turf/open/floor/iron/diagonal, /area/station/hallway/secondary/exit/departure_lounge) -"xqM" = ( -/obj/effect/turf_decal/trimline/brown/filled/line{ - dir = 5 - }, -/obj/effect/turf_decal/delivery, -/obj/structure/closet/secure_closet/miner, -/turf/open/floor/iron/smooth_corner{ - dir = 8 - }, -/area/station/cargo/miningdock) "xqO" = ( /obj/structure/lattice/catwalk, /obj/structure/marker_beacon/burgundy, @@ -84460,6 +84439,10 @@ /obj/structure/disposalpipe/segment, /turf/open/floor/catwalk_floor/iron_smooth, /area/station/maintenance/department/medical) +"xtx" = ( +/obj/machinery/deepfryer, +/turf/open/floor/iron/kitchen, +/area/station/service/kitchen) "xtF" = ( /obj/machinery/atmospherics/components/binary/crystallizer{ dir = 4 @@ -84902,6 +84885,19 @@ "xAr" = ( /turf/open/floor/iron/grimy, /area/station/commons/vacant_room/office) +"xAy" = ( +/obj/machinery/airalarm/directional/north, +/obj/effect/landmark/start/assistant, +/obj/machinery/light_switch/directional/north{ + pixel_x = 13 + }, +/obj/structure/window/spawner/directional/west, +/obj/structure/chair/sofa/corp/left{ + color = "#DE3A3A"; + dir = 4 + }, +/turf/open/floor/iron/cafeteria, +/area/station/service/cafeteria) "xAC" = ( /obj/structure/railing{ dir = 8 @@ -85054,25 +85050,6 @@ }, /turf/open/floor/wood/large, /area/station/service/theater) -"xDK" = ( -/obj/structure/table, -/obj/item/plate/oven_tray{ - pixel_x = -2; - pixel_y = 1 - }, -/obj/item/plate/oven_tray{ - pixel_x = -2; - pixel_y = 3 - }, -/obj/item/clothing/suit/apron/chef{ - pixel_y = 11 - }, -/obj/item/book/manual/wiki/cooking_to_serve_man{ - pixel_x = 3; - pixel_y = 2 - }, -/turf/open/floor/iron/kitchen, -/area/station/service/kitchen) "xDL" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -85238,6 +85215,16 @@ }, /turf/open/floor/pod/dark, /area/station/service/chapel/funeral) +"xFW" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/cable, +/obj/effect/turf_decal/trimline/brown/filled/warning{ + dir = 8 + }, +/turf/open/floor/iron/smooth_edge{ + dir = 4 + }, +/area/station/cargo/miningdock) "xGe" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -85346,6 +85333,12 @@ dir = 8 }, /area/station/hallway/primary/fore) +"xHx" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/turf_decal/weather/snow, +/mob/living/basic/goat/pete, +/turf/open/floor/iron/kitchen_coldroom/freezerfloor, +/area/station/service/kitchen/coldroom) "xHB" = ( /obj/effect/turf_decal/trimline/yellow/filled/line{ dir = 8 @@ -86225,12 +86218,6 @@ }, /turf/open/floor/catwalk_floor/iron_smooth, /area/station/maintenance/department/medical/morgue) -"xUG" = ( -/obj/structure/chair/stool/directional/east, -/obj/effect/landmark/start/hangover, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/turf/open/floor/iron/cafeteria, -/area/station/service/cafeteria) "xUK" = ( /obj/structure/disposaloutlet{ dir = 1; @@ -86492,6 +86479,16 @@ /obj/item/storage/box/lights/mixed, /turf/open/floor/iron/smooth, /area/station/maintenance/department/medical/central) +"xYN" = ( +/obj/item/radio/intercom/directional/east, +/obj/structure/table, +/obj/machinery/microwave{ + desc = "Cooks and boils stuff, somehow."; + pixel_x = -2; + pixel_y = 5 + }, +/turf/open/floor/iron/kitchen, +/area/station/service/kitchen) "xZa" = ( /obj/effect/turf_decal/trimline/green/filled/line, /turf/open/floor/iron/edge{ @@ -86757,6 +86754,14 @@ /obj/effect/spawner/structure/window/reinforced, /turf/open/floor/plating, /area/station/science/lab) +"ycB" = ( +/obj/effect/turf_decal/stripes/box, +/obj/machinery/rnd/production/techfab/department/service, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/iron/large, +/area/station/hallway/secondary/service) "ycD" = ( /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, /turf/open/floor/iron/smooth_large, @@ -86935,6 +86940,19 @@ /obj/effect/mapping_helpers/airlock/access/any/engineering/maintenance, /turf/open/floor/catwalk_floor/iron_smooth, /area/station/maintenance/department/engine/atmos/lesser) +"yfa" = ( +/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 = 4 + }, +/obj/effect/turf_decal/tile/green/diagonal_centre, +/obj/structure/disposalpipe/segment{ + dir = 1 + }, +/turf/open/floor/iron/diagonal, +/area/station/hallway/secondary/service) "yfl" = ( /obj/effect/turf_decal/trimline/green/filled/warning, /obj/structure/cable, @@ -87110,6 +87128,10 @@ dir = 4 }, /area/station/hallway/secondary/command) +"yib" = ( +/obj/effect/spawner/structure/window/reinforced, +/turf/open/floor/plating, +/area/station/cargo/miningdock) "yis" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -87150,34 +87172,12 @@ /obj/machinery/light_switch/directional/north, /turf/open/floor/iron/dark, /area/station/engineering/supermatter/room) -"yjs" = ( -/obj/structure/disposalpipe/trunk{ - dir = 8 - }, -/obj/effect/landmark/event_spawn, -/obj/machinery/disposal/bin, -/obj/effect/turf_decal/box, -/obj/structure/sink/kitchen/directional/west{ - pixel_x = 19 - }, -/turf/open/floor/iron/kitchen, -/area/station/service/kitchen) "yjw" = ( /obj/machinery/door/firedoor, /turf/open/floor/iron/stairs/left{ dir = 1 }, /area/station/engineering/atmos) -"yjD" = ( -/obj/structure/window/reinforced/survival_pod/spawner/directional/north, -/obj/machinery/door/window/survival_pod{ - dir = 8; - name = "Fitness Ring" - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/light/floor, -/turf/open/floor/iron/dark/smooth_large, -/area/station/commons/fitness/recreation/entertainment) "yjP" = ( /obj/machinery/requests_console/directional/east{ department = "Chemistry"; @@ -111111,7 +111111,7 @@ qCd eFq cSD lbX -hbG +mdF gOn gIW iTA @@ -114233,7 +114233,7 @@ aeg ljI ljI rIN -eSB +eMf nPN pdU xRR @@ -118807,7 +118807,7 @@ oUR lnS cHc waR -sgE +hyw nmm sgE pEL @@ -118847,7 +118847,7 @@ fDn aAN hns qZl -ebp +sre fDn fDn dof @@ -119361,7 +119361,7 @@ aAN gut nXW sLk -sUt +ayp kny nXW nhR @@ -119617,9 +119617,9 @@ tJU ykT vVO twU -wwr +kKa mJB -eil +tYp pAK mAC nIJ @@ -119871,11 +119871,11 @@ gLN gLN ojZ cwM -sCO +eUE hGE gQm fft -ayp +sUt daB mYW kyV @@ -120135,7 +120135,7 @@ pKg nXW kgk fDn -njQ +rVm dPv eEq xkq @@ -121377,12 +121377,12 @@ qSu qSu rUj bPZ -sbx -anI +xAy +aeH lxC cnA -nUo -anI +rUb +kLz uPO fHc pYI @@ -121634,12 +121634,12 @@ qSu gYN dqJ bPZ -jUL -ekG +pDj +jVW kLz cnA -pUt -gOt +rUb +kLz kLz bNy bhD @@ -121891,13 +121891,13 @@ wAA mDP cau cau -hEN -hUv -qwy -cnA -eYX -lkz -kLz +wrn +wrn +wrn +tdG +fNg +jDI +rKL rUb qQh fVT @@ -122144,18 +122144,18 @@ qLY mMs vDG qAl -bPZ -bPZ -cau -koZ -vmS -xUG -fxo -olm -gyK -woE -kLz -vyb +jSC +jSC +xcq +isq +tdn +vGV +hkU +ige +gKa +nja +gOt +wBf kPh ooa hZp @@ -122193,7 +122193,7 @@ uDE xcg xyf mEL -yjD +mjC ieO ieO tcz @@ -122402,16 +122402,16 @@ dcg pzr lcT bnA -bRS -qor -tdn -pei -kKA -tTC -bOI -bMB -rSO -xgl +ecl +wMw +xtx +sdl +xFd +eCV +mPf +neg +lsG +ioX fLp oie oRJ @@ -122659,18 +122659,18 @@ gzn tUt lkG wrT -coJ +jaG +iRi xRG -eeS -nNS -xFd -fMm -sha -esZ -lHd -foi +xRG +fUb +pdo +jSC +hCJ +bPZ +bPZ fLp -cIT +gsl hhJ pep udR @@ -122916,18 +122916,18 @@ hvD uKp eGd jSC -jdH +sSd ibK -yjs -ocK -rGx -jSC -hBP -aXm -hBP -hBP -fLp -mkD +xFd +bYX +acT +aLz +bnA +iNb +beU +nZU +vhh +hwE fuP roz wne @@ -122967,7 +122967,7 @@ hsq ptW uDd uDd -dzq +hqp cFx uAx jfo @@ -123173,23 +123173,23 @@ hvD hUS eGd bnA -nzv +aGg puH -tZu -anP -hqe -eGy -tNI -dAy -nTI -olG -tiJ +xFd +gZD +gvO +mNK +ogb +aaY +cyI +lOC +fYn wQo jGl -jio +akj hzT mqk -jio +akj qaD fLp nhJ @@ -123430,23 +123430,23 @@ jrX hUS eGd bnA +aGg +tRE +xou gZD -vZc -nMk -xDK -hqe -ogb -bkq -btx -eWX +dfG +eNr +cbf +aaY +cEq vOZ -ssw +vga bmN jGl -jio +akj hzT mqk -jio +akj rMh fLp tzs @@ -123686,18 +123686,18 @@ wzH hRr fba cUM -jSC -whq +lQG +tDA orv -ivZ -iog -bLx -cbf -tSE -lWH -gKB -ajR -tdO +xFd +nRS +fvY +ePd +sSm +aaY +bux +oSm +hGX slL qEr bKI @@ -123944,18 +123944,18 @@ hvD hUS eGd bnA -fva +rSX +lMt +pow pow -coC -liO tgy jSC -iUy -ctf -vrL +jSC +iYT +ycB fLp fLp -obz +pNs jru qKf nGh @@ -124201,15 +124201,15 @@ hvD hUS eGd bnA -iIG -mFX -tGD +xYN +qSs +bLx ehn -iJt +hIw jSC -nYG -rvS -vaJ +ivQ +bNV +sJR fLp hnJ cCw @@ -124459,22 +124459,22 @@ hUS slJ hfU hfU -gOj hfU +kIg hfU hfU jSC -hFu +eNJ ctf -uNs +qQn fLp pKd wxX mqk -jio +akj llF mqk -jio +akj jCH fLp uuO @@ -124715,23 +124715,23 @@ hvD dSe hzx hfU -eGT -tja -nRy -mVt +upB +gHS +hNB +ern hfU -gtJ -fZg +rla +jvC koq -trR +vPl fLp fNL wxX mqk -jio +akj llF mqk -jio +akj grQ fLp rjf @@ -124972,15 +124972,15 @@ hvD hUS eGd hfU -sJb -gFG -gIO -tUw +din +xHx +cxP +iEJ hfU -eEd -bPG -ctf -bdX +pWe +mlz +yfa +kpe fLp qEC iAM @@ -125229,13 +125229,13 @@ nJH hUS fyP hfU -wQw -qAn -ely -jDX +bsF +jEP +gcp +qDl hfU -itf -bmk +tZi +gZV dIM rMB fLp @@ -125489,7 +125489,7 @@ iNV iNV qzy iNV -tlk +lnT iNV iNV mNF @@ -125810,7 +125810,7 @@ pnL txh fTO gjv -vUt +owG ssQ vIF ekf @@ -126324,7 +126324,7 @@ pXL uTI djy rop -lkM +wVD wsP szj aqJ @@ -127094,7 +127094,7 @@ vXh jTg nLC qni -lkM +wVD cfZ tjR eiX @@ -127353,9 +127353,9 @@ hne mth rop rli -fye +dMh vuu -fye +dMh uzc qid rli @@ -127608,7 +127608,7 @@ rop gSW xGe sSn -lkM +wVD jLQ ukJ nTB @@ -127865,14 +127865,14 @@ cRU joy bey dGK -lkM +wVD rRS uLe bmS tkn gjm wJg -fye +dMh pgc gwM mGO @@ -128076,7 +128076,7 @@ tDO wkm gDf djz -uQI +iAj ykh wtQ yep @@ -128108,7 +128108,7 @@ izK mgS onP ofb -iCW +qXo onP pqh vCX @@ -128117,11 +128117,11 @@ vCX nvF pqh pqh -uTk +rtG rop rop pOV -lkM +wVD rop nUi xaD @@ -128129,7 +128129,7 @@ ltN xHW uLe kMM -fye +dMh pgc lxc gpK @@ -128386,7 +128386,7 @@ dNV uSX wjH wMS -vsK +qLC umD jgI rKH @@ -128643,7 +128643,7 @@ lCU eSk leb eEz -vsK +qLC mnf tWE rbW @@ -129136,17 +129136,17 @@ xud xud xud xdZ -nyf -nyf +sgl +yaj yaj -aJs +wuW sFi sFi uTU hcS sle -aJs -aJs +wuW +wuW uTU myM sle @@ -129154,9 +129154,9 @@ sFi sFi sFi oLo -eDx -eDx -eDx +shC +shC +shC oLo sUo rzr @@ -129385,16 +129385,16 @@ xMq xMq xMq oXI -fNX -iNa -bkF +mGz +uyc +xFW hQq qBe odX ipj ekQ bNu -lBF +uim yaj xMq sFi @@ -129410,7 +129410,7 @@ xTN git uho cHk -eDx +shC mqJ kBs nnr @@ -129642,19 +129642,19 @@ odJ xqO xMq oXI -ihS -cvp -nqU +utv +wsQ +tbp bcW njG xCF xCF xXC -ueJ +sMD gjq -nyf +sgl gZb -aJs +wuW wVQ udn aRn @@ -129671,7 +129671,7 @@ oLo nGM lGO pHC -eDx +shC dsj idx fsd @@ -129899,19 +129899,19 @@ ttw odJ xMq oXI -iFV -lmY -krz +mGz +dUa +tbp lon -cbP +yib szk -haV +nRy xXC jay dMl -nyf +sgl cKl -aJs +wuW eGw udn twB @@ -129928,7 +129928,7 @@ sSV lKg npI oyG -eDx +shC hDf vNs mvz @@ -130156,10 +130156,10 @@ ttw odJ xMq oXI -oCm -jAS -qpX -pmM +iKe +wsQ +tbp +tbm oXI pjT pjT @@ -130168,7 +130168,7 @@ pjT pjT pjT cYx -aJs +wuW pqc udn gqC @@ -130410,16 +130410,16 @@ ttw ttw ttw ttw -cbP -cbP -cbP -qtr -jAS -qpX +yib +yib +yib +laf +llM +tbp lFU oXI jBq -gsb +jnu efH ouL aUA @@ -130482,7 +130482,7 @@ wIM eWs kLc unI -fJV +poE mRm mRm rgt @@ -130676,7 +130676,7 @@ ucK hkN oXI mXQ -qTS +ugC nNB ens cRT @@ -130924,16 +130924,16 @@ ttw ttw ttw ttw -cbP -cbP -cbP -dpw -pws +yib +yib +yib +uIn +kjt ucK hwL oXI hwR -kbi +lFv kVH gJs jXN @@ -131184,13 +131184,13 @@ ttw odJ xMq oXI -kkC -pws -hSf -llf +oNA +dea +awr +oCs oXI -emO -dTO +juG +wQL wyB iVW coN @@ -131441,13 +131441,13 @@ ttw odJ xMq oXI -xqM -sqL -nBO -afo +yib +yib +nFa +oXI oXI pjT -pjT +shJ pjT pjT pjT @@ -131697,18 +131697,18 @@ odJ odJ xqO xMq -oXI -oXI -oXI -vte -oXI -oXI -qBt -ldU +sQJ +pvB +mHC +neT +enw +sQJ +lcZ +pUM +mNX +fNI qBt cBk -ttw -ttw xMq xqO ltB @@ -131954,19 +131954,19 @@ xMq xMq xMq xMq -cBk -pqk -nGR -goP -kdS -oUb -dAV +sQJ +cYc +wpS +jfx +kVv +sQJ +bjI +uVp +pNx ksB oxn wYd xMq -xMq -xMq odJ ttw ttw @@ -132211,18 +132211,18 @@ ttw ttw ttw xMq -cBk -hjg -hJg -tOa -qgY +sQJ +fdZ +qlR +iZW +gQp +sQJ fth -iLb -deu +gJt +rJo +uzN oky wYd -ttw -ttw xMq odJ ttw @@ -132468,18 +132468,18 @@ ttw kUb ttw xMq -cBk -hKK -kFL -vxf -pFJ +sQJ +jZq +gsZ +rMv +aka +sQJ qhU -mTY -jvw -rnb +fPB +ogM +aTk +cXP wYd -ttw -ttw xMq odJ ttw @@ -132725,18 +132725,18 @@ ttw kUb ttw xMq +sQJ +sAi +rZz +wnd +ppC +sQJ +eQw +iva +ibR +tVn +psR cBk -cBk -oGX -tEI -cBk -uVw -leF -gWT -cBk -cBk -xMq -xMq xMq odJ ttw @@ -132982,9 +132982,12 @@ xMq kUb xMq xMq -xMq -cBk -cBk +sQJ +sQJ +sQJ +sQJ +sQJ +sQJ cBk cBk cBk @@ -132992,9 +132995,6 @@ cBk cBk cBk xMq -ttw -ttw -xMq odJ ttw ttw @@ -133242,7 +133242,7 @@ ttw xMq xMq xMq -xMq +osx xMq xMq xMq diff --git a/_maps/map_files/debug/runtimestation.dmm b/_maps/map_files/debug/runtimestation.dmm index 0638947a9ac..ce806ac8a5c 100644 --- a/_maps/map_files/debug/runtimestation.dmm +++ b/_maps/map_files/debug/runtimestation.dmm @@ -1751,16 +1751,19 @@ /obj/effect/mapping_helpers/airalarm/unlocked, /turf/open/floor/plating, /area/station/engineering/atmos) +"hv" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on{ + dir = 4 + }, +/obj/item/storage/part_replacer/bluespace/tier4, +/turf/open/floor/iron, +/area/station/cargo/bitrunning/den) "hD" = ( /obj/structure/closet/secure_closet/chemical/heisenberg{ locked = 0 }, /turf/open/floor/iron, /area/station/medical/chemistry) -"ib" = ( -/obj/effect/spawner/structure/window/reinforced, -/turf/open/floor/plating, -/area/station/cargo/bitrunning/den) "ii" = ( /obj/effect/turf_decal/stripes/line{ dir = 4 @@ -1819,13 +1822,6 @@ /obj/structure/cable, /turf/open/floor/iron, /area/station/engineering/main) -"lE" = ( -/obj/machinery/power/apc/auto_name/directional/north, -/obj/structure/cable, -/obj/machinery/airalarm/directional/east, -/obj/machinery/computer/quantum_console, -/turf/open/floor/iron, -/area/station/cargo/bitrunning/den) "lH" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden{ dir = 6 @@ -1849,11 +1845,6 @@ /obj/machinery/chem_mass_spec, /turf/open/floor/iron, /area/station/medical/chemistry) -"mV" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden, -/turf/open/floor/iron, -/area/station/cargo/bitrunning/den) "nn" = ( /obj/machinery/atmospherics/components/unary/vent_pump/on{ dir = 8 @@ -1871,6 +1862,12 @@ /obj/item/storage/toolbox/syndicate, /turf/open/floor/iron, /area/station/commons/storage/primary) +"nI" = ( +/obj/machinery/door/airlock, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden, +/turf/open/floor/iron, +/area/station/cargo/bitrunning/den) "od" = ( /obj/effect/turf_decal/stripes/line{ dir = 8 @@ -1899,9 +1896,6 @@ /obj/machinery/door/airlock/external/glass/ruin, /turf/open/floor/plating, /area/station/medical/medbay) -"pK" = ( -/turf/open/floor/iron, -/area/station/cargo/bitrunning/den) "qb" = ( /obj/machinery/door/airlock, /turf/open/floor/plating, @@ -1932,22 +1926,13 @@ /obj/structure/cable, /turf/open/floor/iron, /area/station/hallway/primary/central) -"rM" = ( -/obj/machinery/quantum_server, -/turf/open/floor/iron, -/area/station/cargo/bitrunning/den) -"rS" = ( +"rT" = ( /turf/open/floor/circuit/green, /area/station/cargo/bitrunning/den) "sr" = ( /obj/machinery/door/airlock/shell, /turf/open/floor/iron/dark, /area/station/construction) -"sH" = ( -/obj/structure/table, -/obj/item/storage/box/shipping, -/turf/open/floor/iron, -/area/station/commons/storage/primary) "tE" = ( /obj/machinery/door/airlock/research, /turf/open/floor/iron/dark, @@ -2005,6 +1990,11 @@ }, /turf/open/floor/iron/dark, /area/station/science/explab) +"vb" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden, +/turf/open/floor/iron, +/area/station/cargo/bitrunning/den) "vm" = ( /mob/living/circuit_drone, /turf/open/floor/iron/dark, @@ -2078,16 +2068,16 @@ /obj/machinery/airalarm/directional/north, /turf/open/floor/iron, /area/station/science) +"Aj" = ( +/obj/structure/cable, +/turf/open/floor/iron, +/area/station/cargo/bitrunning/den) "AP" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden{ dir = 8 }, /turf/open/floor/iron, /area/station/science) -"Ba" = ( -/obj/machinery/netpod, -/turf/open/floor/iron, -/area/station/cargo/bitrunning/den) "BD" = ( /obj/structure/closet/secure_closet/chief_medical{ locked = 0 @@ -2108,10 +2098,6 @@ /obj/structure/closet/syndicate/resources/everything, /turf/open/floor/iron, /area/station/science) -"Cz" = ( -/obj/structure/cable, -/turf/open/floor/iron, -/area/station/cargo/bitrunning/den) "CQ" = ( /obj/machinery/light/directional/south, /obj/effect/turf_decal/stripes/line{ @@ -2229,6 +2215,13 @@ /obj/effect/turf_decal/tile/blue/half/contrasted, /turf/open/floor/iron, /area/station/command/bridge) +"IF" = ( +/obj/machinery/power/apc/auto_name/directional/north, +/obj/structure/cable, +/obj/machinery/airalarm/directional/east, +/obj/machinery/computer/quantum_console, +/turf/open/floor/iron, +/area/station/cargo/bitrunning/den) "IH" = ( /obj/structure/closet/secure_closet/engineering_welding{ locked = 0 @@ -2262,13 +2255,6 @@ /obj/effect/mapping_helpers/airalarm/unlocked, /turf/open/floor/iron, /area/station/hallway/primary/central) -"Kf" = ( -/obj/machinery/atmospherics/components/unary/vent_pump/on{ - dir = 4 - }, -/obj/item/storage/part_replacer/bluespace/tier4, -/turf/open/floor/iron, -/area/station/cargo/bitrunning/den) "Kx" = ( /obj/structure/table, /obj/item/analyzer, @@ -2276,15 +2262,6 @@ /obj/machinery/light/directional/south, /turf/open/floor/plating, /area/station/engineering/atmos) -"Lb" = ( -/obj/structure/table/reinforced, -/obj/machinery/light/directional/south, -/obj/item/bitrunning_debug, -/turf/open/floor/iron, -/area/station/cargo/bitrunning/den) -"Le" = ( -/turf/closed/wall/r_wall, -/area/station/cargo/bitrunning/den) "Ly" = ( /obj/machinery/chem_dispenser/chem_synthesizer, /turf/open/floor/iron/dark, @@ -2297,6 +2274,10 @@ /obj/machinery/door/airlock/research, /turf/open/floor/iron/dark, /area/station/science/explab) +"LS" = ( +/obj/machinery/quantum_server, +/turf/open/floor/iron, +/area/station/cargo/bitrunning/den) "LW" = ( /obj/effect/turf_decal/stripes/line, /turf/open/floor/iron, @@ -2328,10 +2309,6 @@ /obj/machinery/chem_recipe_debug, /turf/open/floor/iron, /area/station/medical/chemistry) -"Nj" = ( -/obj/machinery/byteforge, -/turf/open/floor/circuit/green, -/area/station/cargo/bitrunning/den) "Ns" = ( /obj/machinery/door/airlock/public/glass, /obj/structure/cable, @@ -2403,11 +2380,9 @@ }, /turf/open/floor/engine, /area/station/cargo/miningoffice) -"QU" = ( -/obj/machinery/door/airlock, -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden, -/turf/open/floor/iron, +"QY" = ( +/obj/effect/spawner/structure/window/reinforced, +/turf/open/floor/plating, /area/station/cargo/bitrunning/den) "Rb" = ( /obj/effect/spawner/structure/window/reinforced, @@ -2419,6 +2394,10 @@ }, /turf/open/floor/plating, /area/station/hallway/secondary/entry) +"Rp" = ( +/obj/machinery/byteforge, +/turf/open/floor/circuit/green, +/area/station/cargo/bitrunning/den) "RM" = ( /obj/structure/closet/secure_closet/hop{ locked = 0 @@ -2441,6 +2420,12 @@ }, /turf/open/floor/iron/white/corner, /area/station/medical/medbay) +"SC" = ( +/obj/structure/table/reinforced, +/obj/machinery/light/directional/south, +/obj/item/bitrunning_debug, +/turf/open/floor/iron, +/area/station/cargo/bitrunning/den) "Td" = ( /obj/machinery/light/directional/east, /obj/effect/turf_decal/stripes/line{ @@ -2455,11 +2440,18 @@ "Tt" = ( /turf/open/floor/plating, /area/station/maintenance/aft) +"TR" = ( +/obj/machinery/netpod, +/turf/open/floor/iron, +/area/station/cargo/bitrunning/den) "TV" = ( /obj/machinery/door/airlock, /obj/structure/cable, /turf/open/floor/iron, /area/station/construction) +"Ue" = ( +/turf/closed/wall/r_wall, +/area/station/cargo/bitrunning/den) "Ut" = ( /obj/structure/closet/secure_closet/medical3{ locked = 0 @@ -2582,6 +2574,9 @@ /obj/effect/landmark/blobstart, /turf/open/floor/iron, /area/station/commons/storage/primary) +"Yd" = ( +/turf/open/floor/iron, +/area/station/cargo/bitrunning/den) "Ym" = ( /obj/structure/table, /obj/item/storage/toolbox/electrical, @@ -2624,6 +2619,12 @@ /obj/machinery/suit_storage_unit/ce, /turf/open/floor/iron, /area/station/engineering/atmos) +"ZK" = ( +/obj/structure/table, +/obj/item/storage/box/shipping, +/obj/item/boulder_beacon, +/turf/open/floor/iron, +/area/station/commons/storage/primary) "ZP" = ( /turf/open/floor/iron/dark, /area/station/science/explab) @@ -3201,12 +3202,12 @@ aa aa aa aa -Le -Le -Le -Le -Le -Le +Ue +Ue +Ue +Ue +Ue +Ue aa aa aa @@ -3293,12 +3294,12 @@ aa aa aa aa -Le -rS -Nj -pK -Ba -Le +Ue +rT +Rp +Yd +TR +Ue aa aa aa @@ -3385,12 +3386,12 @@ aa aa aa aa -Le -rM -pK -Kf -Ba -Le +Ue +LS +Yd +hv +TR +Ue aa aa aa @@ -3477,12 +3478,12 @@ aa aa aa aa -Le -lE -Cz -mV -Lb -Le +Ue +IF +Aj +vb +SC +Ue aa aa aa @@ -3569,12 +3570,12 @@ em em em em -Le -Le -Le -QU -ib -Le +Ue +Ue +Ue +nI +QY +Ue Tj Tj Tj @@ -7821,7 +7822,7 @@ dJ dJ dJ dJ -sH +ZK cS fP fO diff --git a/_maps/map_files/generic/CentCom.dmm b/_maps/map_files/generic/CentCom.dmm index 7698a0f8dea..97982469132 100644 --- a/_maps/map_files/generic/CentCom.dmm +++ b/_maps/map_files/generic/CentCom.dmm @@ -247,9 +247,7 @@ /turf/open/floor/iron/dark/herringbone, /area/centcom/central_command_areas/evacuation/ship) "bd" = ( -/obj/machinery/door/window/brigdoor{ - base_state = "rightsecure"; - icon_state = "rightsecure"; +/obj/machinery/door/window/brigdoor/right/directional/south{ name = "Thunderdome Booth"; req_access = list("cent_captain") }, @@ -426,8 +424,7 @@ /turf/open/floor/iron/dark, /area/centcom/central_command_areas/admin) "bP" = ( -/obj/machinery/door/window/brigdoor{ - base_state = "rightsecure"; +/obj/machinery/door/window/brigdoor/right/directional/south{ name = "CentCom Stand"; req_access = list("cent_captain") }, @@ -1408,8 +1405,7 @@ /turf/open/floor/iron/white, /area/centcom/tdome/observation) "gC" = ( -/obj/machinery/door/window/brigdoor{ - base_state = "rightsecure"; +/obj/machinery/door/window/brigdoor/right/directional/south{ name = "CentCom Stand"; req_access = list("cent_captain") }, @@ -2406,7 +2402,7 @@ /area/centcom/central_command_areas/control) "lb" = ( /obj/structure/table/wood, -/obj/machinery/door/window, +/obj/machinery/door/window/left/directional/south, /obj/item/radio/intercom{ desc = "Talk smack through this."; syndie = 1 @@ -2427,8 +2423,7 @@ desc = "Talk smack through this."; syndie = 1 }, -/obj/machinery/door/window/brigdoor{ - base_state = "rightsecure"; +/obj/machinery/door/window/brigdoor/right/directional/south{ name = "CentCom Stand"; req_access = list("cent_captain") }, @@ -3317,10 +3312,7 @@ "pl" = ( /obj/structure/table/reinforced, /obj/machinery/door/firedoor, -/obj/machinery/door/window/brigdoor{ - base_state = "rightsecure"; - dir = 4; - icon_state = "rightsecure"; +/obj/machinery/door/window/brigdoor/right/directional/east{ name = "CentCom Customs"; req_access = list("cent_captain") }, @@ -4614,14 +4606,11 @@ /obj/machinery/door/firedoor, /obj/item/folder/red, /obj/item/pen/red, -/obj/machinery/door/window/brigdoor{ - base_state = "rightsecure"; - dir = 1; - icon_state = "rightsecure"; +/obj/machinery/door/window/brigdoor/right/directional/north{ name = "CentCom Customs"; req_access = list("cent_captain") }, -/obj/machinery/door/window, +/obj/machinery/door/window/left/directional/south, /obj/effect/turf_decal/bot, /turf/open/floor/iron, /area/centcom/central_command_areas/control) @@ -6233,10 +6222,7 @@ /obj/structure/table/reinforced, /obj/machinery/door/firedoor, /obj/item/storage/fancy/donut_box, -/obj/machinery/door/window/brigdoor{ - base_state = "rightsecure"; - dir = 1; - icon_state = "rightsecure"; +/obj/machinery/door/window/brigdoor/right/directional/north{ name = "CentCom Customs"; req_access = list("cent_captain") }, @@ -6255,10 +6241,7 @@ "BP" = ( /obj/structure/table/reinforced, /obj/machinery/door/firedoor, -/obj/machinery/door/window/brigdoor{ - base_state = "rightsecure"; - dir = 1; - icon_state = "rightsecure"; +/obj/machinery/door/window/brigdoor/right/directional/north{ name = "CentCom Customs"; req_access = list("cent_captain") }, @@ -6626,14 +6609,11 @@ /obj/machinery/door/firedoor, /obj/item/folder/red, /obj/item/pen/red, -/obj/machinery/door/window/brigdoor{ - base_state = "rightsecure"; - dir = 4; - icon_state = "rightsecure"; +/obj/effect/turf_decal/bot, +/obj/machinery/door/window/brigdoor/right/directional/east{ name = "CentCom Customs"; req_access = list("cent_captain") }, -/obj/effect/turf_decal/bot, /turf/open/floor/iron, /area/centcom/central_command_areas/control) "DI" = ( @@ -6641,14 +6621,11 @@ /obj/machinery/door/firedoor, /obj/item/folder/white, /obj/item/pen/blue, -/obj/machinery/door/window/brigdoor{ - base_state = "rightsecure"; - dir = 8; - icon_state = "rightsecure"; +/obj/effect/turf_decal/bot, +/obj/machinery/door/window/brigdoor/right/directional/west{ name = "CentCom Customs"; req_access = list("cent_captain") }, -/obj/effect/turf_decal/bot, /turf/open/floor/iron, /area/centcom/central_command_areas/control) "DJ" = ( @@ -6806,9 +6783,7 @@ /turf/open/floor/iron, /area/centcom/central_command_areas/supplypod/loading/four) "EH" = ( -/obj/machinery/door/window{ - dir = 8 - }, +/obj/machinery/door/window/left/directional/west, /obj/effect/turf_decal/siding/wood{ dir = 10 }, @@ -6950,8 +6925,7 @@ /turf/open/floor/iron, /area/centcom/central_command_areas/fore) "Fw" = ( -/obj/machinery/door/window/brigdoor{ - base_state = "rightsecure"; +/obj/machinery/door/window/brigdoor/right/directional/south{ name = "CentCom Stand"; req_access = list("cent_captain") }, @@ -10493,8 +10467,7 @@ /turf/open/floor/iron, /area/centcom/central_command_areas/supplypod/loading/one) "XF" = ( -/obj/machinery/door/window/brigdoor{ - base_state = "rightsecure"; +/obj/machinery/door/window/brigdoor/right/directional/south{ name = "CentCom Stand"; req_access = list("cent_captain") }, diff --git a/_maps/map_files/generic/CentCom_nova_z2.dmm b/_maps/map_files/generic/CentCom_nova_z2.dmm index 61bd359a61d..7f12a58bb35 100644 --- a/_maps/map_files/generic/CentCom_nova_z2.dmm +++ b/_maps/map_files/generic/CentCom_nova_z2.dmm @@ -154,7 +154,7 @@ /area/centcom/holding/cafe) "afl" = ( /obj/machinery/barsign/all_access/directional/north, -/obj/machinery/vending/wardrobe/bar_wardrobe/ghost_cafe, +/obj/machinery/vending/wardrobe/bar_wardrobe, /turf/open/indestructible/hotelwood, /area/centcom/holding/cafe) "afr" = ( @@ -415,12 +415,7 @@ /obj/effect/turf_decal/trimline/blue/filled/line{ dir = 1 }, -/obj/machinery/vending/cola/black{ - default_price = 0; - extended_inventory = 1; - extra_price = 0; - fair_market_price = 0 - }, +/obj/machinery/vending/autodrobe, /turf/open/indestructible/hoteltile{ icon_state = "floor" }, @@ -575,7 +570,7 @@ /turf/open/misc/grass/planet, /area/centcom/holding/cafepark) "alk" = ( -/obj/item/bedsheet/dorms_double, +/obj/effect/spawner/random/bedsheet/double, /obj/structure/bed/double, /turf/open/indestructible/carpet, /area/centcom/holding/cafe) @@ -1089,11 +1084,11 @@ specialfunctions = 4 }, /obj/structure/bed/double/pod, -/obj/item/bedsheet/dorms_double, +/obj/effect/spawner/random/bedsheet/double, /turf/open/indestructible/carpet, /area/centcom/holding/cafe) "aqy" = ( -/obj/machinery/vending/wardrobe/cargo_wardrobe/ghost_cafe, +/obj/machinery/vending/wardrobe/cargo_wardrobe, /turf/open/indestructible/hotelwood, /area/centcom/holding/cafe) "aqG" = ( @@ -1237,12 +1232,7 @@ /obj/effect/turf_decal/trimline/blue/filled/line{ dir = 9 }, -/obj/machinery/vending/coffee{ - default_price = 0; - extended_inventory = 1; - extra_price = 0; - fair_market_price = 0 - }, +/obj/machinery/vending/barbervend, /turf/open/indestructible/hoteltile{ icon_state = "floor" }, @@ -1298,13 +1288,15 @@ /turf/open/floor/iron/white, /area/centcom/holding/cafe) "atJ" = ( -/obj/machinery/door/window/right/directional/east, /obj/effect/turf_decal/stripes/line{ dir = 4 }, /obj/effect/turf_decal/tile/purple/half/contrasted{ dir = 1 }, +/obj/machinery/door/window/left/directional/east{ + name = "Robotics" + }, /turf/open/floor/iron, /area/centcom/holding/cafe) "atQ" = ( @@ -1460,7 +1452,7 @@ }, /area/centcom/holding/cafepark) "awn" = ( -/obj/machinery/vending/wardrobe/hydro_wardrobe/ghost_cafe, +/obj/machinery/vending/wardrobe/hydro_wardrobe, /turf/open/indestructible/hoteltile{ icon_state = "darkfull" }, @@ -1514,7 +1506,7 @@ /area/centcom/holding/cafe) "awQ" = ( /obj/machinery/light/directional/south, -/obj/machinery/vending/wardrobe/engi_wardrobe/ghost_cafe, +/obj/machinery/vending/wardrobe/engi_wardrobe, /turf/open/indestructible/hotelwood, /area/centcom/holding/cafe) "awU" = ( @@ -2059,7 +2051,7 @@ }, /area/centcom/holding/cafepark) "aBk" = ( -/obj/machinery/vending/wardrobe/curator_wardrobe/ghost_cafe, +/obj/machinery/vending/wardrobe/curator_wardrobe, /turf/open/indestructible/hotelwood, /area/centcom/holding/cafe) "aBm" = ( @@ -2233,7 +2225,7 @@ /turf/open/misc/dirt/planet, /area/centcom/holding/cafepark) "aCY" = ( -/obj/machinery/vending/wardrobe/viro_wardrobe/ghost_cafe, +/obj/machinery/vending/wardrobe/viro_wardrobe, /obj/effect/turf_decal/tile/blue/half/contrasted{ dir = 1 }, @@ -2285,13 +2277,8 @@ /turf/closed/indestructible/opshuttle, /area/centcom/holding/cafe) "aDQ" = ( -/obj/machinery/door/window/left/directional/west{ - base_state = "right"; - dir = 1; - icon_state = "right"; - name = "Monkey Pen"; - pixel_y = 2; - req_access = list("genetics") +/obj/machinery/door/window/left/directional/north{ + name = "Pet Pen" }, /turf/open/indestructible/hoteltile{ icon_state = "darkfull" @@ -2512,13 +2499,13 @@ /area/centcom/holding/cafe) "aGY" = ( /obj/structure/rack, -/obj/item/bedsheet/dorms_double, -/obj/item/bedsheet/dorms_double, -/obj/item/bedsheet/dorms_double, -/obj/item/bedsheet/dorms_double, -/obj/item/bedsheet/dorms_double, -/obj/item/bedsheet/dorms_double, -/obj/item/bedsheet/dorms_double, +/obj/effect/spawner/random/bedsheet/double, +/obj/effect/spawner/random/bedsheet/double, +/obj/effect/spawner/random/bedsheet/double, +/obj/effect/spawner/random/bedsheet/double, +/obj/effect/spawner/random/bedsheet/double, +/obj/effect/spawner/random/bedsheet/double, +/obj/effect/spawner/random/bedsheet/double, /turf/open/indestructible/hotelwood, /area/centcom/holding/cafe) "aHb" = ( @@ -2560,7 +2547,7 @@ /turf/open/floor/wood, /area/centcom/holding/cafepark) "aHC" = ( -/obj/machinery/vending/wardrobe/chef_wardrobe/ghost_cafe, +/obj/machinery/vending/wardrobe/chef_wardrobe, /turf/open/floor/iron/showroomfloor, /area/centcom/holding/cafe) "aHD" = ( @@ -3562,7 +3549,7 @@ "aSn" = ( /obj/structure/table, /obj/machinery/light/directional/west{ - bulb_colour = "#e8eaff " + bulb_colour = "#e8eaff" }, /obj/item/soap, /obj/item/soap, @@ -3770,13 +3757,10 @@ /turf/open/indestructible/hotelwood, /area/centcom/holding/cafe) "aUA" = ( -/obj/machinery/door/window/left/directional/west{ - dir = 1; - name = "Monkey Pen"; - pixel_y = 2; - req_access = list("genetics") - }, /obj/machinery/light/directional/west, +/obj/machinery/door/window/right/directional/north{ + name = "Pet Pen" + }, /turf/open/indestructible/hoteltile{ icon_state = "darkfull" }, @@ -3946,7 +3930,12 @@ /obj/effect/turf_decal/trimline/blue/filled/line{ dir = 10 }, -/obj/machinery/vending/barbervend, +/obj/machinery/vending/coffee{ + default_price = 0; + extended_inventory = 1; + extra_price = 0; + fair_market_price = 0 + }, /turf/open/indestructible/hoteltile{ icon_state = "floor" }, @@ -3971,7 +3960,7 @@ /turf/open/indestructible/hotelwood, /area/centcom/holding/cafe) "aXd" = ( -/obj/machinery/vending/wardrobe/law_wardrobe/ghost_cafe, +/obj/machinery/vending/wardrobe/law_wardrobe, /turf/open/indestructible/hotelwood, /area/centcom/holding/cafe) "aXl" = ( @@ -4054,7 +4043,7 @@ }, /area/centcom/holding/cafepark) "aYj" = ( -/obj/machinery/vending/wardrobe/chap_wardrobe/unholy/ghost_cafe, +/obj/machinery/vending/wardrobe/chap_wardrobe/unholy, /turf/open/indestructible/hotelwood, /area/centcom/holding/cafe) "aYk" = ( @@ -4214,6 +4203,12 @@ }, /turf/open/floor/iron, /area/centcom/interlink) +"baA" = ( +/obj/structure/chair/sofa/bamboo/left{ + dir = 1 + }, +/turf/open/water/hot_spring/cafe, +/area/centcom/holding/cafepark) "baM" = ( /obj/effect/turf_decal/stripes/line{ dir = 6 @@ -4222,7 +4217,7 @@ /area/centcom/holding/cafepark) "bbW" = ( /obj/effect/turf_decal/bot, -/obj/machinery/vending/wardrobe/gene_wardrobe/ghost_cafe, +/obj/machinery/vending/wardrobe/gene_wardrobe, /turf/open/indestructible/hoteltile{ icon_state = "darkfull" }, @@ -4485,7 +4480,7 @@ /turf/open/floor/iron, /area/centcom/holding/cafe) "bvA" = ( -/obj/machinery/door/window/right/directional/south, +/obj/machinery/door/window/left/directional/south, /turf/open/floor/iron/dark/corner{ dir = 1 }, @@ -4787,9 +4782,40 @@ /obj/machinery/light/warm/directional/south, /turf/open/floor/iron/cafeteria, /area/centcom/interlink) +"bUH" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 4 + }, +/obj/structure/rack/wooden, +/obj/item/towel{ + pixel_y = -2; + pixel_x = -4 + }, +/obj/item/towel{ + pixel_y = 1; + pixel_x = 1 + }, +/obj/item/towel{ + pixel_y = 6; + pixel_x = 7 + }, +/obj/item/towel{ + pixel_y = -2; + pixel_x = -4 + }, +/obj/item/towel{ + pixel_y = 1; + pixel_x = 1 + }, +/obj/item/towel{ + pixel_y = 6; + pixel_x = 7 + }, +/turf/open/floor/wood, +/area/centcom/holding/cafepark) "bUO" = ( /obj/structure/bed/double, -/obj/item/bedsheet/random/double, +/obj/effect/spawner/random/bedsheet/any/double, /turf/open/floor/wood, /area/centcom/interlink/dorm_rooms) "bUS" = ( @@ -4861,6 +4887,10 @@ }, /turf/open/floor/iron, /area/centcom/holding/cafe) +"bWP" = ( +/obj/structure/wall_torch/spawns_lit/directional/south, +/turf/open/floor/wood, +/area/centcom/holding/cafepark) "bXF" = ( /obj/structure/table/wood, /turf/open/floor/wood, @@ -5222,7 +5252,7 @@ /area/centcom/interlink) "cGX" = ( /obj/structure/bed, -/obj/item/bedsheet/dorms, +/obj/effect/spawner/random/bedsheet, /obj/structure/sign/painting/library_secure{ pixel_x = 32 }, @@ -6447,6 +6477,15 @@ }, /turf/open/indestructible/hotelwood, /area/centcom/holding/cafe) +"ffD" = ( +/obj/effect/turf_decal/weather/snow/corner{ + dir = 5 + }, +/obj/effect/turf_decal/siding/wood/corner{ + dir = 8 + }, +/turf/open/misc/dirt/planet, +/area/centcom/holding/cafepark) "fiC" = ( /obj/structure/closet/crate/bin, /obj/item/paper/crumpled{ @@ -6472,9 +6511,6 @@ /area/centcom/interlink) "foq" = ( /obj/structure/sign/poster/official/cleanliness/directional/east, -/obj/machinery/camera/directional/north{ - c_tag = "Jim Norton's Quebecois Coffee" - }, /obj/structure/noticeboard/directional/north, /obj/item/reagent_containers/condiment/sugar{ pixel_y = 4 @@ -6845,6 +6881,9 @@ }, /turf/open/indestructible/hotelwood, /area/centcom/holding/cafe) +"fVc" = ( +/turf/open/water/hot_spring/cafe, +/area/centcom/holding/cafepark) "fVr" = ( /obj/effect/light_emitter/interlink, /obj/effect/turf_decal/weather/dirt, @@ -6876,6 +6915,17 @@ }, /turf/open/floor/iron/dark, /area/centcom/interlink) +"gbM" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 9 + }, +/obj/structure/rack/wooden, +/obj/item/food/grown/poppy/geranium, +/obj/structure/railing/wooden_fencing{ + dir = 1 + }, +/turf/open/floor/wood, +/area/centcom/holding/cafepark) "gdL" = ( /obj/structure/towel_bin, /obj/structure/table/wood, @@ -6950,7 +7000,7 @@ /turf/open/floor/fakebasalt, /area/centcom/holding/cafepark) "gmE" = ( -/obj/machinery/vending/wardrobe/medi_wardrobe/ghost_cafe, +/obj/machinery/vending/wardrobe/medi_wardrobe, /obj/effect/turf_decal/tile/blue/half/contrasted{ dir = 1 }, @@ -7595,6 +7645,10 @@ /obj/effect/turf_decal/trimline/green/filled/arrow_ccw, /turf/open/floor/iron/dark, /area/centcom/interlink) +"hsW" = ( +/obj/structure/chair/sofa/bamboo/right, +/turf/open/water/hot_spring/cafe, +/area/centcom/holding/cafepark) "huq" = ( /obj/structure/chair/sofa/bench/right{ dir = 4 @@ -7606,6 +7660,10 @@ /obj/machinery/door/poddoor/shuttledock/interlink, /turf/open/floor/plating, /area/centcom/interlink) +"hvL" = ( +/obj/structure/chair/sofa/bamboo, +/turf/open/water/hot_spring/cafe, +/area/centcom/holding/cafepark) "hvQ" = ( /turf/open/floor/iron, /area/centcom/interlink) @@ -7617,7 +7675,7 @@ /area/centcom/holding/cafepark) "hyt" = ( /obj/effect/turf_decal/bot, -/obj/machinery/vending/wardrobe/viro_wardrobe/ghost_cafe, +/obj/machinery/vending/wardrobe/viro_wardrobe, /turf/open/indestructible/hoteltile{ icon_state = "darkfull" }, @@ -7947,6 +8005,15 @@ }, /turf/open/floor/grass, /area/centcom/interlink) +"iet" = ( +/obj/effect/turf_decal/weather/snow/corner{ + dir = 10 + }, +/obj/structure/railing/wooden_fencing{ + dir = 8 + }, +/turf/open/misc/dirt/planet, +/area/centcom/holding/cafepark) "ifp" = ( /obj/structure/spacevine{ name = "thick vines"; @@ -8318,10 +8385,8 @@ /turf/open/floor/iron, /area/centcom/interlink) "iNW" = ( -/obj/machinery/door/window/left/directional/west{ - dir = 4 - }, /obj/structure/sink/directional/east, +/obj/machinery/door/window/right/directional/east, /turf/open/floor/plating/abductor2, /area/centcom/holding/cafepark) "iOt" = ( @@ -8432,7 +8497,12 @@ }, /obj/effect/turf_decal/trimline/blue/filled/line, /obj/machinery/light, -/obj/machinery/vending/autodrobe, +/obj/machinery/vending/cola/black{ + default_price = 0; + extended_inventory = 1; + extra_price = 0; + fair_market_price = 0 + }, /turf/open/indestructible/hoteltile{ icon_state = "floor" }, @@ -8500,6 +8570,13 @@ smoothing_flags = 0 }, /area/centcom/holding/cafepark) +"jdW" = ( +/obj/effect/turf_decal/weather/snow/corner{ + dir = 8 + }, +/obj/structure/water_source/puddle, +/turf/open/misc/dirt/planet, +/area/centcom/holding/cafepark) "jeI" = ( /obj/machinery/cryopod/quiet{ dir = 1 @@ -8782,6 +8859,18 @@ /obj/item/pen, /turf/open/floor/iron/dark/textured_large, /area/centcom/interlink) +"jGP" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 1 + }, +/obj/structure/chair/wood{ + dir = 4 + }, +/obj/structure/railing/wooden_fencing{ + dir = 1 + }, +/turf/open/floor/wood, +/area/centcom/holding/cafepark) "jHv" = ( /obj/structure/bookcase/random/reference, /turf/open/floor/wood, @@ -9915,7 +10004,7 @@ /turf/open/lava/fake, /area/centcom/holding/cafepark) "lNi" = ( -/obj/machinery/vending/wardrobe/chem_wardrobe/ghost_cafe, +/obj/machinery/vending/wardrobe/chem_wardrobe, /obj/effect/turf_decal/tile/blue/half/contrasted{ dir = 1 }, @@ -9944,7 +10033,7 @@ /obj/structure/bed/double{ dir = 8 }, -/obj/item/bedsheet/dorms_double{ +/obj/effect/spawner/random/bedsheet/double{ dir = 8 }, /turf/open/floor/carpet/red, @@ -10245,6 +10334,12 @@ }, /turf/open/floor/iron/dark, /area/centcom/interlink) +"mvU" = ( +/obj/structure/chair/sofa/bamboo/right{ + dir = 1 + }, +/turf/open/water/hot_spring/cafe, +/area/centcom/holding/cafepark) "mwo" = ( /obj/structure/table/wood, /obj/item/reagent_containers/cup/glass/mug{ @@ -10955,7 +11050,7 @@ /area/centcom/interlink) "nCY" = ( /obj/structure/bed/double, -/obj/item/bedsheet/random/double, +/obj/effect/spawner/random/bedsheet/any/double, /obj/effect/turf_decal/siding/wood/corner, /turf/open/floor/wood, /area/centcom/interlink/dorm_rooms) @@ -11143,6 +11238,13 @@ /obj/structure/flora/grass/jungle/a/style_2, /turf/open/misc/dirt/planet, /area/centcom/holding/cafepark) +"nVZ" = ( +/obj/structure/fake_stairs/wood/directional/east, +/obj/structure/railing/wooden_fencing{ + dir = 1 + }, +/turf/open/misc/dirt/planet, +/area/centcom/holding/cafepark) "nWn" = ( /obj/effect/turf_decal/trimline/blue/filled/line{ dir = 1 @@ -11411,7 +11513,7 @@ /turf/open/misc/grass/planet, /area/centcom/holding/cafepark) "ovH" = ( -/obj/machinery/vending/wardrobe/syndie_wardrobe/ghost_cafe{ +/obj/machinery/vending/wardrobe/syndie_wardrobe{ default_price = 0; extra_price = 0; fair_market_price = 0 @@ -11600,7 +11702,7 @@ /area/centcom/holding/cafe) "oGv" = ( /obj/effect/turf_decal/bot, -/obj/machinery/vending/wardrobe/chem_wardrobe/ghost_cafe, +/obj/machinery/vending/wardrobe/chem_wardrobe, /turf/open/indestructible/hoteltile{ icon_state = "darkfull" }, @@ -11677,6 +11779,26 @@ }, /turf/open/floor/wood/tile, /area/centcom/interlink) +"oRG" = ( +/obj/effect/turf_decal/tile/neutral{ + dir = 1 + }, +/obj/effect/turf_decal/tile/neutral, +/obj/effect/turf_decal/tile/neutral{ + dir = 4 + }, +/obj/effect/turf_decal/tile/neutral{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 1 + }, +/obj/machinery/light/directional/north, +/obj/structure/dresser, +/turf/open/indestructible/hoteltile{ + icon_state = "floor" + }, +/area/centcom/holding/cafe) "oRX" = ( /obj/structure/fans/tiny/invisible, /obj/machinery/door/airlock/research{ @@ -11983,12 +12105,7 @@ /turf/open/floor/wood, /area/centcom/interlink/dorm_rooms) "prH" = ( -/obj/machinery/door/window/right/directional/east{ - base_state = "left"; - dir = 8; - icon_state = "left"; - name = "Fitness Ring" - }, +/obj/machinery/door/window/left/directional/west, /turf/open/floor/iron/dark/corner, /area/centcom/holding/cafe) "prT" = ( @@ -12865,6 +12982,13 @@ icon_state = "floor" }, /area/centcom/holding/cafepark) +"qIH" = ( +/obj/effect/turf_decal/siding/wood/corner, +/obj/effect/turf_decal/siding/wood/corner{ + dir = 4 + }, +/turf/open/floor/wood, +/area/centcom/holding/cafepark) "qIY" = ( /obj/effect/turf_decal/tile/green/opposingcorners, /turf/open/floor/iron, @@ -13101,7 +13225,7 @@ /obj/structure/bed/double{ pixel_y = -9 }, -/obj/item/bedsheet/dorms_double{ +/obj/effect/spawner/random/bedsheet/double{ pixel_y = -9 }, /turf/open/floor/bamboo, @@ -13214,10 +13338,6 @@ }, /turf/open/floor/iron/white, /area/centcom/holding/cafe) -"rnM" = ( -/obj/structure/wall_torch/spawns_lit/directional/south, -/turf/open/misc/asteroid/snow/indestructible/planet, -/area/centcom/holding/cafepark) "roh" = ( /obj/structure/flora/grass/jungle/a/style_3, /obj/structure/flora/tree/jungle/small/style_random, @@ -13242,6 +13362,12 @@ smoothing_flags = 0 }, /area/centcom/holding/cafepark) +"rvt" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 10 + }, +/turf/open/misc/dirt/planet, +/area/centcom/holding/cafepark) "rxB" = ( /obj/structure/closet/secure_closet/freezer/meat, /turf/open/indestructible/hoteltile{ @@ -13282,7 +13408,7 @@ /area/centcom/holding/cafe) "rCl" = ( /obj/effect/turf_decal/bot, -/obj/machinery/vending/wardrobe/science_wardrobe/ghost_cafe, +/obj/machinery/vending/wardrobe/science_wardrobe, /turf/open/indestructible/hoteltile{ icon_state = "darkfull" }, @@ -13335,7 +13461,6 @@ /area/centcom/holding/cafepark) "rHH" = ( /obj/structure/railing/wooden_fencing, -/obj/structure/water_source/puddle, /turf/open/misc/dirt/planet, /area/centcom/holding/cafepark) "rHY" = ( @@ -13847,7 +13972,7 @@ specialfunctions = 4 }, /obj/structure/bed/double, -/obj/item/bedsheet/dorms_double, +/obj/effect/spawner/random/bedsheet/double, /turf/open/indestructible/carpet, /area/centcom/holding/cafepark) "ssn" = ( @@ -14086,7 +14211,7 @@ /area/centcom/interlink) "sKP" = ( /obj/effect/turf_decal/bot, -/obj/machinery/vending/wardrobe/robo_wardrobe/ghost_cafe, +/obj/machinery/vending/wardrobe/robo_wardrobe, /turf/open/indestructible/hoteltile{ icon_state = "darkfull" }, @@ -14117,7 +14242,7 @@ /area/centcom/holding/cafe) "sNs" = ( /obj/structure/bed/double/pod, -/obj/item/bedsheet/random/double, +/obj/effect/spawner/random/bedsheet/any/double, /turf/open/indestructible/hotelwood, /area/centcom/holding/cafe) "sOj" = ( @@ -14419,6 +14544,15 @@ }, /turf/open/floor/wood/tile, /area/centcom/interlink) +"tnL" = ( +/obj/effect/turf_decal/siding/wood/end{ + dir = 4 + }, +/obj/structure/railing/wooden_fencing{ + dir = 1 + }, +/turf/open/floor/wood, +/area/centcom/holding/cafepark) "tpU" = ( /turf/open/misc/dirt/planet, /area/centcom/interlink) @@ -14471,7 +14605,7 @@ dir = 4 }, /obj/structure/sign/poster/contraband/lusty_xenomorph/directional/south, -/obj/machinery/vending/wardrobe/jani_wardrobe/ghost_cafe, +/obj/machinery/vending/wardrobe/jani_wardrobe, /turf/open/indestructible/hoteltile{ icon_state = "white" }, @@ -14791,6 +14925,13 @@ /obj/structure/flora/bush/fullgrass/style_random, /turf/open/floor/grass, /area/centcom/interlink) +"uaY" = ( +/obj/structure/wall_torch/spawns_lit/directional/south, +/obj/structure/chair/sofa/bamboo{ + dir = 1 + }, +/turf/open/water/hot_spring/cafe, +/area/centcom/holding/cafepark) "ubn" = ( /obj/effect/turf_decal/tile/dark_blue/opposingcorners, /obj/effect/turf_decal/siding/wood, @@ -15179,7 +15320,7 @@ /obj/structure/bed/double{ dir = 8 }, -/obj/item/bedsheet/dorms_double{ +/obj/effect/spawner/random/bedsheet/double{ dir = 8 }, /turf/open/floor/carpet/blue, @@ -15493,7 +15634,7 @@ /area/centcom/interlink) "vxC" = ( /obj/effect/turf_decal/bot, -/obj/machinery/vending/wardrobe/coroner_wardrobe/ghost_cafe, +/obj/machinery/vending/wardrobe/coroner_wardrobe, /turf/open/indestructible/hoteltile{ icon_state = "darkfull" }, @@ -15589,6 +15730,22 @@ "vLx" = ( /turf/closed/indestructible/rock, /area/centcom/interlink) +"vLz" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 5 + }, +/obj/structure/table/wood, +/obj/item/paper_bin/bundlenatural, +/obj/item/pen/charcoal, +/obj/item/pen/charcoal{ + pixel_y = 5; + pixel_x = 2 + }, +/obj/structure/railing/wooden_fencing{ + dir = 1 + }, +/turf/open/floor/wood, +/area/centcom/holding/cafepark) "vLY" = ( /obj/effect/turf_decal/trimline/green/corner{ dir = 8 @@ -15635,6 +15792,10 @@ /obj/structure/table/wood, /turf/open/misc/dirt/planet, /area/centcom/holding/cafepark) +"vQP" = ( +/obj/effect/turf_decal/siding/wood, +/turf/open/misc/dirt/planet, +/area/centcom/holding/cafepark) "vRf" = ( /obj/machinery/door/airlock/multi_tile/public/glass{ dir = 4; @@ -15852,7 +16013,6 @@ /obj/structure/chair/wood{ dir = 1 }, -/obj/effect/turf_decal/weather/snow/corner, /turf/open/misc/dirt/planet, /area/centcom/holding/cafepark) "wlA" = ( @@ -15958,6 +16118,12 @@ /obj/effect/light_emitter/interlink, /turf/open/floor/grass, /area/centcom/interlink) +"wyd" = ( +/obj/structure/railing/wooden_fencing{ + dir = 8 + }, +/turf/open/misc/asteroid/snow/indestructible/planet, +/area/centcom/holding/cafepark) "wyn" = ( /obj/machinery/duct, /turf/open/floor/iron/freezer, @@ -16320,6 +16486,14 @@ }, /turf/open/indestructible/hotelwood, /area/centcom/holding/cafepark) +"xei" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 10 + }, +/obj/structure/wall_torch/spawns_lit/directional/south, +/obj/structure/closet/crate/wooden/storage_barrel, +/turf/open/misc/dirt/planet, +/area/centcom/holding/cafepark) "xfD" = ( /obj/structure/punching_bag, /turf/open/indestructible/hotelwood, @@ -16457,6 +16631,13 @@ /obj/effect/turf_decal/trimline/green/filled/arrow_cw, /turf/open/floor/iron/dark, /area/centcom/interlink) +"xso" = ( +/obj/structure/rack/wooden, +/obj/effect/turf_decal/siding/wood{ + dir = 8 + }, +/turf/open/floor/wood, +/area/centcom/holding/cafepark) "xsM" = ( /obj/structure/window/spawner/directional/south, /obj/structure/reagent_dispensers/water_cooler, @@ -16585,6 +16766,19 @@ /obj/machinery/door/window/left/directional/south, /turf/open/floor/iron/dark, /area/centcom/interlink) +"xFa" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 4 + }, +/turf/open/floor/wood, +/area/centcom/holding/cafepark) +"xFg" = ( +/obj/effect/turf_decal/weather/snow/corner{ + dir = 1 + }, +/obj/effect/turf_decal/siding/wood, +/turf/open/misc/dirt/planet, +/area/centcom/holding/cafepark) "xFE" = ( /obj/structure/chair/sofa/bench/right{ dir = 1 @@ -16651,6 +16845,10 @@ /obj/effect/turf_decal/trimline/blue/filled/warning, /turf/open/floor/iron/white, /area/centcom/interlink) +"xNO" = ( +/obj/structure/chair/sofa/bamboo/left, +/turf/open/water/hot_spring/cafe, +/area/centcom/holding/cafepark) "xOm" = ( /obj/structure/chair/sofa/bench/corner{ dir = 1 @@ -16701,7 +16899,7 @@ /area/centcom/interlink) "xQK" = ( /obj/structure/bed/double, -/obj/item/bedsheet/dorms_double, +/obj/effect/spawner/random/bedsheet/double, /obj/structure/sign/painting/library_secure{ pixel_y = -32 }, @@ -16747,7 +16945,7 @@ /turf/open/floor/iron/freezer, /area/centcom/interlink) "xTZ" = ( -/obj/machinery/vending/wardrobe/coroner_wardrobe/ghost_cafe, +/obj/machinery/vending/wardrobe/coroner_wardrobe, /obj/effect/turf_decal/tile/blue/half/contrasted{ dir = 1 }, @@ -16861,7 +17059,7 @@ dir = 4 }, /obj/structure/bed, -/obj/item/bedsheet/dorms, +/obj/effect/spawner/random/bedsheet, /turf/open/floor/iron, /area/centcom/holding/cafe) "ycD" = ( @@ -62296,7 +62494,7 @@ wDG aUo aUz aTb -aBH +oRG axL azT azT @@ -64642,9 +64840,10 @@ pib pib aDB aAd -aAd -izJ izJ +aAd +gbM +xso amx ajj ajj @@ -64796,7 +64995,6 @@ aaa aaa aaa aaa -aaa "} (187,1,1) = {" aaa @@ -64901,12 +65099,12 @@ aSZ aDB aAd aAd -aEX +jGP +bWP amx amx ajj -aaa -aaa +ajj aaa aaa aaa @@ -65151,20 +65349,20 @@ rjk dIM vTT amx -aiD +jdW eFC aAd aAd aCX aDB aAd -aAd -izJ -aAd +vLz +xFa +qIH +xFa +bUH +ajj ajj -aaa -aaa -aaa aaa aaa aaa @@ -65414,10 +65612,13 @@ izJ aAd aSZ ayI -aDB -aAd -aAd -izJ +aiD +iet +wyd +tnL +fVc +fVc +baA ajj aaa aaa @@ -65565,9 +65766,6 @@ aaa aaa aaa aaa -aaa -aaa -aaa "} (190,1,1) = {" aaa @@ -65672,9 +65870,12 @@ amU aAd aCX hRJ +ayI aDB -aAd -aAd +nVZ +fVc +fVc +uaY ajj aaa aaa @@ -65822,9 +66023,6 @@ aaa aaa aaa aaa -aaa -aaa -aaa "} (191,1,1) = {" aaa @@ -65930,8 +66128,11 @@ aAd cnz hfJ wkQ -aAd -aAd +ayI +rvt +hsW +fVc +mvU ajj aaa aaa @@ -66079,9 +66280,6 @@ aaa aaa aaa aaa -aaa -aaa -aaa "} (192,1,1) = {" aaa @@ -66186,13 +66384,13 @@ aAd rOQ ayI kLW -eNw -aAd -aAd +pib +pib +vQP +hvL +fVc +ajj ajj -aaa -aaa -aaa aaa aaa aaa @@ -66445,7 +66643,9 @@ ayI eNw aAd aAd -izJ +xFg +xNO +fVc ajj aaa aaa @@ -66594,8 +66794,6 @@ aaa aaa aaa aaa -aaa -aaa "} (194,1,1) = {" aaa @@ -66700,12 +66898,12 @@ jxl aAd aoE aAd -aAd -izJ izJ +aAd +ffD +xei +ajj ajj -aaa -aaa aaa aaa aaa @@ -66957,12 +67155,12 @@ izJ aAd aoE aAd -rnM +aAd +aEX amx amx ajj -aaa -aaa +ajj aaa aaa aaa @@ -67215,6 +67413,7 @@ aAd aoE aAd izJ +aAd amx ajj ajj @@ -67366,7 +67565,6 @@ aaa aaa aaa aaa -aaa "} (197,1,1) = {" aaa diff --git a/_maps/map_files/tramstation/maintenance_modules/medsciupper_attachment_a_2.dmm b/_maps/map_files/tramstation/maintenance_modules/medsciupper_attachment_a_2.dmm index 1b839b3bc32..33ef15e40b5 100644 --- a/_maps/map_files/tramstation/maintenance_modules/medsciupper_attachment_a_2.dmm +++ b/_maps/map_files/tramstation/maintenance_modules/medsciupper_attachment_a_2.dmm @@ -66,8 +66,7 @@ name = "Containment Pen"; req_access = list("xenobiology") }, -/obj/machinery/door/window/left/directional/north{ - dir = 2; +/obj/machinery/door/window/left/directional/south{ name = "Containment Pen"; req_access = list("xenobiology") }, diff --git a/_maps/map_files/tramstation/tramstation.dmm b/_maps/map_files/tramstation/tramstation.dmm index 198a1f8e528..ba8942326bc 100644 --- a/_maps/map_files/tramstation/tramstation.dmm +++ b/_maps/map_files/tramstation/tramstation.dmm @@ -395,10 +395,6 @@ /obj/structure/extinguisher_cabinet/directional/east, /turf/open/floor/iron, /area/station/escapepodbay) -"abE" = ( -/obj/structure/sign/warning/electric_shock, -/turf/closed/wall/r_wall, -/area/station/maintenance/port/central) "abF" = ( /obj/effect/turf_decal/tile/bar{ dir = 8 @@ -1065,6 +1061,21 @@ /obj/effect/spawner/random/trash/cigbutt, /turf/open/misc/asteroid, /area/station/asteroid) +"adt" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/structure/cable, +/obj/effect/turf_decal/trimline/neutral/filled/corner{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/purple/corner{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/neutral/filled/line, +/obj/effect/turf_decal/trimline/purple/filled/warning, +/turf/open/floor/iron, +/area/station/service/janitor) "adu" = ( /obj/machinery/duct, /obj/machinery/door/firedoor, @@ -1606,24 +1617,6 @@ /obj/structure/flora/bush/grassy, /turf/open/floor/grass, /area/station/asteroid) -"afi" = ( -/obj/effect/landmark/start/shaft_miner, -/obj/effect/landmark/event_spawn, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/open/floor/iron, -/area/station/cargo/miningdock) -"afj" = ( -/obj/effect/turf_decal/trimline/brown/filled/corner{ - dir = 4 - }, -/obj/effect/turf_decal/trimline/brown/filled/corner, -/obj/structure/disposalpipe/segment{ - dir = 10 - }, -/turf/open/floor/iron, -/area/station/cargo/miningdock) "afl" = ( /obj/machinery/door/airlock/mining/glass{ name = "Mining Dock" @@ -2414,6 +2407,12 @@ /obj/effect/turf_decal/trimline/white/filled/line, /turf/open/floor/iron/dark, /area/station/engineering/storage/tech) +"ajn" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/decal/cleanable/dirt, +/obj/structure/railing, +/turf/open/floor/iron, +/area/station/cargo/miningfoundry) "ajo" = ( /obj/effect/decal/cleanable/dirt, /turf/open/floor/carpet, @@ -2586,13 +2585,6 @@ /obj/effect/landmark/event_spawn, /turf/open/floor/iron, /area/station/engineering/atmos) -"akS" = ( -/obj/effect/turf_decal/trimline/neutral/filled/line{ - dir = 8 - }, -/obj/structure/table, -/turf/open/floor/iron, -/area/station/hallway/secondary/exit/departure_lounge) "ala" = ( /obj/machinery/button/door/directional/west{ id = "private_g"; @@ -2735,6 +2727,9 @@ }, /obj/item/book/manual/wiki/atmospherics, /obj/machinery/firealarm/directional/north, +/obj/machinery/atmospherics/pipe/smart/simple/cyan/hidden{ + dir = 6 + }, /turf/open/floor/iron, /area/station/engineering/atmos) "amL" = ( @@ -2858,6 +2853,7 @@ /area/station/engineering/storage/tech) "any" = ( /obj/effect/turf_decal/trimline/yellow/filled/corner, +/obj/machinery/atmospherics/pipe/smart/simple/cyan/hidden, /turf/open/floor/iron, /area/station/engineering/atmos) "anB" = ( @@ -2887,6 +2883,7 @@ /obj/structure/sign/warning/secure_area{ pixel_x = 32 }, +/obj/machinery/atmospherics/pipe/smart/simple/cyan/hidden, /turf/open/floor/iron, /area/station/engineering/atmos) "anU" = ( @@ -3066,28 +3063,6 @@ /obj/machinery/newscaster/directional/north, /turf/open/floor/iron, /area/station/tcommsat/computer) -"apW" = ( -/obj/effect/turf_decal/trimline/red/filled/line{ - dir = 4 - }, -/obj/effect/turf_decal/trimline/red/filled/line{ - dir = 8 - }, -/obj/machinery/door/airlock/security/glass{ - id_tag = "outerbrigright"; - name = "Brig" - }, -/obj/effect/mapping_helpers/airlock/cyclelink_helper_multi{ - cycle_id = "brig_right" - }, -/obj/machinery/door/firedoor, -/obj/effect/mapping_helpers/airlock/access/all/security/entrance, -/obj/structure/disposalpipe/segment, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/effect/landmark/navigate_destination/sec, -/turf/open/floor/iron, -/area/station/security/brig) "aqf" = ( /obj/effect/decal/cleanable/dirt, /obj/effect/turf_decal/trimline/yellow/warning{ @@ -3425,6 +3400,14 @@ }, /turf/open/floor/engine, /area/station/maintenance/disposal/incinerator) +"auq" = ( +/obj/machinery/door/airlock/maintenance_hatch{ + name = "Utilities Access Hatch" + }, +/obj/effect/mapping_helpers/airlock/access/all/engineering/general, +/obj/structure/disposalpipe/segment, +/turf/open/floor/catwalk_floor, +/area/station/hallway/primary/tram/center) "aur" = ( /obj/effect/spawner/random/engineering/tracking_beacon, /turf/open/floor/iron/grimy, @@ -3782,6 +3765,13 @@ /obj/effect/turf_decal/trimline/red/filled/corner, /turf/open/floor/iron, /area/station/security/brig) +"axr" = ( +/obj/effect/turf_decal/trimline/neutral/filled/line{ + dir = 8 + }, +/obj/effect/spawner/random/vending/colavend, +/turf/open/floor/iron, +/area/station/hallway/secondary/service) "axt" = ( /obj/structure/ladder, /obj/effect/decal/cleanable/dirt, @@ -3962,12 +3952,6 @@ /obj/effect/turf_decal/siding/thinplating, /turf/open/floor/glass/reinforced, /area/station/security/brig) -"azC" = ( -/obj/structure/ladder, -/obj/effect/decal/cleanable/dirt, -/obj/machinery/light/dim/directional/west, -/turf/open/floor/iron/smooth, -/area/station/hallway/primary/tram/center) "azN" = ( /obj/effect/turf_decal/trimline/neutral/filled/line{ dir = 8 @@ -4008,6 +3992,17 @@ }, /turf/open/floor/wood, /area/station/command/meeting_room) +"aAz" = ( +/obj/machinery/vending/wardrobe/jani_wardrobe, +/obj/structure/extinguisher_cabinet/directional/north, +/obj/effect/turf_decal/trimline/neutral/filled/line{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/purple/filled/warning{ + dir = 1 + }, +/turf/open/floor/iron, +/area/station/service/janitor) "aAE" = ( /obj/effect/turf_decal/trimline/dark_blue/line{ dir = 1 @@ -4187,8 +4182,7 @@ /obj/effect/turf_decal/trimline/brown/filled/line{ dir = 8 }, -/obj/machinery/door/window/left/directional/west{ - dir = 1; +/obj/machinery/door/window/left/directional/north{ name = "Delivery Desk"; req_access = list("shipping") }, @@ -4434,6 +4428,7 @@ /obj/effect/turf_decal/siding/thinplating/corner{ dir = 4 }, +/obj/machinery/airalarm/directional/north, /turf/open/floor/iron, /area/station/hallway/primary/tram/center) "aEn" = ( @@ -4548,13 +4543,10 @@ /area/station/security/prison) "aFP" = ( /obj/effect/turf_decal/trimline/neutral/filled/corner{ - dir = 8 - }, -/obj/effect/turf_decal/trimline/neutral/filled/corner{ - dir = 1 + dir = 4 }, /turf/open/floor/iron, -/area/station/hallway/secondary/exit/departure_lounge) +/area/station/hallway/secondary/exit) "aFU" = ( /obj/effect/mapping_helpers/airlock/access/all/engineering/maintenance, /obj/machinery/door/airlock/maintenance_hatch{ @@ -4578,11 +4570,6 @@ /turf/open/floor/iron, /area/station/security/brig) "aFZ" = ( -/obj/effect/landmark/event_spawn, -/obj/effect/landmark/start/hangover, -/turf/open/floor/iron, -/area/station/hallway/secondary/exit) -"aGa" = ( /obj/effect/spawner/random/engineering/tracking_beacon, /turf/open/floor/iron, /area/station/hallway/secondary/exit) @@ -4605,6 +4592,18 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/dark, /area/station/command/heads_quarters/hop) +"aGi" = ( +/obj/machinery/door_buttons/airlock_controller{ + idExterior = "middleright_lower_upper_eva_external"; + idInterior = "middleright_lower_upper_eva_internal"; + idSelf = "middleright_lower_upper_eva_airlock_control"; + name = "External Access Console"; + pixel_y = -24 + }, +/obj/structure/ladder, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/iron/smooth, +/area/station/maintenance/tram/mid) "aGk" = ( /obj/effect/turf_decal/siding/wood{ dir = 10 @@ -4616,23 +4615,13 @@ /turf/open/floor/iron/grimy, /area/station/service/lawoffice) "aGq" = ( -/obj/effect/turf_decal/trimline/neutral/filled/line, -/obj/effect/turf_decal/trimline/neutral/filled/corner{ - dir = 4 +/obj/machinery/vending/snack/blue, +/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/effect/turf_decal/siding/thinplating/dark{ + dir = 6 }, -/turf/open/floor/iron, +/turf/open/floor/iron/dark, /area/station/hallway/secondary/exit) -"aGr" = ( -/obj/machinery/door/airlock/public/glass{ - name = "Escape Wing" - }, -/obj/machinery/door/firedoor, -/obj/effect/turf_decal/trimline/neutral/filled/line, -/obj/effect/turf_decal/trimline/neutral/filled/line{ - dir = 1 - }, -/turf/open/floor/iron, -/area/station/hallway/secondary/exit/departure_lounge) "aGs" = ( /obj/structure/chair, /obj/effect/turf_decal/trimline/neutral/filled/line{ @@ -4650,10 +4639,9 @@ /turf/open/floor/iron, /area/station/hallway/secondary/exit/departure_lounge) "aGw" = ( -/obj/effect/turf_decal/trimline/neutral/filled/line{ - dir = 8 - }, -/obj/machinery/status_display/ai/directional/west, +/obj/machinery/door/firedoor, +/obj/effect/turf_decal/trimline/neutral/filled/line, +/obj/effect/turf_decal/stripes/white/full, /turf/open/floor/iron, /area/station/hallway/secondary/exit/departure_lounge) "aGx" = ( @@ -5332,6 +5320,15 @@ }, /turf/open/floor/iron, /area/station/commons/storage/art) +"aMt" = ( +/obj/structure/sign/warning/electric_shock, +/obj/effect/turf_decal/stripes/end{ + dir = 4 + }, +/obj/effect/decal/cleanable/dirt, +/obj/structure/cable/multilayer/multiz, +/turf/open/floor/plating, +/area/station/maintenance/tram/right) "aMv" = ( /obj/effect/turf_decal/trimline/neutral/filled/line{ dir = 8 @@ -5866,8 +5863,7 @@ /area/station/hallway/secondary/entry) "aRE" = ( /obj/machinery/mass_driver/chapelgun, -/obj/machinery/door/window{ - dir = 1; +/obj/machinery/door/window/left/directional/north{ name = "Mass Driver"; req_access = list("chapel_office") }, @@ -5897,10 +5893,6 @@ }, /turf/open/floor/iron/textured_large, /area/station/security/execution/education) -"aRT" = ( -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, -/turf/open/floor/iron, -/area/station/service/janitor) "aSe" = ( /obj/structure/closet/wardrobe/black, /obj/effect/turf_decal/tile/blue/opposingcorners{ @@ -6055,14 +6047,6 @@ /obj/structure/cable, /turf/open/floor/circuit, /area/station/ai_monitored/turret_protected/aisat_interior) -"aUx" = ( -/obj/effect/spawner/random/vending/snackvend, -/obj/effect/turf_decal/trimline/neutral/filled/line{ - dir = 4 - }, -/obj/machinery/light/directional/east, -/turf/open/floor/iron, -/area/station/hallway/primary/tram/center) "aUC" = ( /obj/machinery/camera/directional/south{ c_tag = "Civilian - Chapel South" @@ -6127,6 +6111,21 @@ /obj/machinery/light/cold/directional/north, /turf/open/floor/iron/white, /area/station/science/lower) +"aWJ" = ( +/obj/effect/turf_decal/trimline/neutral/filled/line, +/obj/effect/turf_decal/trimline/neutral/filled/line{ + dir = 1 + }, +/obj/machinery/door/airlock/public/glass{ + name = "Primary Tool Storage" + }, +/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, +/obj/effect/landmark/navigate_destination/tools, +/turf/open/floor/iron, +/area/station/commons/storage/primary) "aWL" = ( /obj/effect/decal/cleanable/dirt, /obj/effect/turf_decal/trimline/neutral/filled/line{ @@ -6195,7 +6194,7 @@ /obj/effect/turf_decal/trimline/purple/filled/warning{ dir = 1 }, -/obj/structure/sign/clock/directional/north, +/obj/machinery/light_switch/directional/north, /turf/open/floor/iron, /area/station/service/janitor) "aYn" = ( @@ -6222,6 +6221,14 @@ }, /turf/open/floor/iron/dark, /area/station/engineering/supermatter/room) +"aZm" = ( +/obj/effect/turf_decal/trimline/neutral/filled/line{ + dir = 4 + }, +/obj/effect/landmark/event_spawn, +/obj/effect/landmark/start/hangover, +/turf/open/floor/iron, +/area/station/hallway/secondary/exit) "aZo" = ( /obj/effect/turf_decal/siding/thinplating/dark{ dir = 4 @@ -6229,11 +6236,6 @@ /obj/structure/disposalpipe/segment, /turf/open/floor/iron/checker, /area/station/commons/lounge) -"aZr" = ( -/obj/structure/closet/emcloset, -/obj/machinery/light/dim/directional/west, -/turf/open/floor/iron/smooth, -/area/station/hallway/primary/tram/right) "aZQ" = ( /obj/effect/turf_decal/trimline/brown/filled/corner{ dir = 8 @@ -6368,27 +6370,6 @@ }, /turf/open/floor/iron/dark, /area/station/ai_monitored/turret_protected/aisat_interior) -"bdX" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/dirt, -/obj/machinery/door/airlock/external{ - autoclose = 0; - frequency = 1449; - id_tag = "middleright_upper_eva_internal"; - name = "External Access" - }, -/obj/machinery/door_buttons/access_button{ - idDoor = "middleright_upper_eva_internal"; - idSelf = "middleright_upper_eva_airlock_control"; - name = "External Access Button"; - pixel_y = -24 - }, -/obj/effect/mapping_helpers/airlock/locked, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/open/floor/catwalk_floor, -/area/station/hallway/primary/tram/center) "bej" = ( /obj/machinery/newscaster/directional/north, /obj/effect/turf_decal/trimline/green/filled/line, @@ -6606,12 +6587,6 @@ /turf/open/floor/wood/large, /area/station/service/barber) "bjb" = ( -/obj/machinery/door/window/left/directional/west{ - base_state = "right"; - dir = 4; - icon_state = "right"; - name = "Brig Infirmary" - }, /obj/effect/turf_decal/trimline/red/filled/corner{ dir = 4 }, @@ -6619,6 +6594,9 @@ /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/door/window/right/directional/east{ + name = "Brig Infirmary" + }, /turf/open/floor/iron/white, /area/station/security/medical) "bje" = ( @@ -6630,10 +6608,6 @@ /obj/machinery/light_switch/directional/south, /turf/open/misc/asteroid/snow/coldroom, /area/station/service/kitchen/coldroom) -"bjn" = ( -/obj/item/radio/intercom/directional/east, -/turf/open/floor/iron, -/area/station/hallway/primary/tram/center) "bjK" = ( /obj/effect/turf_decal/trimline/red/filled/line{ dir = 10 @@ -6812,10 +6786,6 @@ /obj/effect/landmark/event_spawn, /turf/open/floor/iron, /area/station/hallway/secondary/entry) -"boi" = ( -/obj/machinery/newscaster/directional/west, -/turf/open/floor/iron, -/area/station/hallway/primary/tram/center) "bok" = ( /obj/structure/lattice/catwalk, /obj/structure/cable, @@ -7000,22 +6970,6 @@ }, /turf/open/floor/iron/white, /area/station/medical/treatment_center) -"brE" = ( -/obj/structure/closet/l3closet/janitor, -/obj/effect/turf_decal/trimline/purple/filled/warning{ - dir = 10 - }, -/obj/item/restraints/legcuffs/beartrap, -/obj/item/restraints/legcuffs/beartrap, -/obj/machinery/light_switch/directional/east{ - pixel_x = 23; - pixel_y = 8 - }, -/obj/effect/turf_decal/trimline/neutral/filled/line{ - dir = 10 - }, -/turf/open/floor/iron, -/area/station/service/janitor) "brG" = ( /obj/structure/reagent_dispensers/water_cooler, /turf/open/floor/wood/parquet, @@ -7198,6 +7152,13 @@ /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, /turf/open/floor/wood, /area/station/command/meeting_room) +"bvA" = ( +/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/opposingcorners, +/turf/open/floor/iron, +/area/station/cargo/miningfoundry) "bvH" = ( /obj/structure/table, /obj/machinery/microwave{ @@ -7217,22 +7178,6 @@ }, /turf/open/floor/iron/white, /area/station/medical/treatment_center) -"bvL" = ( -/obj/machinery/light_switch/directional/south, -/obj/effect/turf_decal/trimline/neutral/filled/line{ - dir = 1 - }, -/obj/effect/turf_decal/trimline/neutral/filled/line, -/obj/effect/turf_decal/trimline/purple/filled/warning, -/obj/effect/turf_decal/trimline/purple/filled/warning{ - dir = 1 - }, -/obj/structure/cable, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/open/floor/iron, -/area/station/service/janitor) "bvM" = ( /obj/machinery/computer/mech_bay_power_console, /turf/open/floor/circuit/green, @@ -7315,16 +7260,13 @@ /obj/effect/turf_decal/trimline/neutral/filled/line{ dir = 9 }, -/obj/structure/chair{ - dir = 4 - }, /obj/effect/turf_decal/trimline/red/filled/corner{ dir = 4 }, -/obj/effect/landmark/start/hangover, /obj/effect/turf_decal/trimline/neutral/corner{ dir = 4 }, +/obj/machinery/firealarm/directional/north, /turf/open/floor/iron, /area/station/hallway/secondary/exit/departure_lounge) "bxG" = ( @@ -7457,7 +7399,7 @@ /obj/structure/bed{ dir = 4 }, -/obj/item/bedsheet/dorms{ +/obj/effect/spawner/random/bedsheet{ dir = 4 }, /obj/structure/sign/clock/directional/west, @@ -7499,15 +7441,17 @@ /obj/structure/cable, /turf/open/floor/iron, /area/station/engineering/gravity_generator) -"bAa" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 +"bAj" = ( +/obj/machinery/door/airlock/engineering/glass{ + name = "Tram Mechanical Room" }, -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ +/obj/effect/mapping_helpers/airlock/access/all/engineering/general, +/obj/effect/mapping_helpers/airlock/unres{ dir = 8 }, -/turf/open/floor/iron, -/area/station/cargo/miningdock) +/obj/structure/cable, +/turf/open/floor/iron/smooth, +/area/station/hallway/primary/tram/right) "bAK" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -7517,6 +7461,13 @@ /obj/structure/cable, /turf/open/floor/iron, /area/station/command/heads_quarters/ce) +"bAP" = ( +/obj/effect/turf_decal/trimline/neutral/filled/line{ + dir = 1 + }, +/obj/structure/sign/poster/contraband/random/directional/north, +/turf/open/floor/iron, +/area/station/hallway/primary/tram/center) "bAT" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron/white, @@ -7893,6 +7844,12 @@ }, /turf/open/floor/iron, /area/station/hallway/secondary/exit) +"bIs" = ( +/obj/structure/ladder, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/light/dim/directional/west, +/turf/open/floor/iron/smooth, +/area/station/hallway/secondary/exit) "bIz" = ( /obj/effect/decal/cleanable/dirt, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -7909,15 +7866,6 @@ /obj/machinery/firealarm/directional/east, /turf/open/floor/iron, /area/station/hallway/secondary/construction/engineering) -"bII" = ( -/obj/effect/decal/cleanable/dirt, -/obj/structure/cable, -/obj/structure/disposalpipe/segment{ - dir = 5 - }, -/obj/machinery/light/small/dim/directional/south, -/turf/open/floor/catwalk_floor, -/area/station/hallway/primary/tram/center) "bIJ" = ( /obj/structure/bodycontainer/crematorium{ dir = 8; @@ -7946,18 +7894,6 @@ }, /turf/open/floor/glass/reinforced, /area/station/ai_monitored/turret_protected/aisat/hallway) -"bJY" = ( -/obj/machinery/button/elevator/directional/north{ - id = "tram_upper_center_lift" - }, -/obj/machinery/lift_indicator/directional/north{ - linked_elevator_id = "tram_upper_center_lift" - }, -/obj/effect/turf_decal/trimline/neutral/filled/line{ - dir = 1 - }, -/turf/open/floor/iron, -/area/station/hallway/secondary/service) "bKb" = ( /obj/effect/turf_decal/trimline/green/filled/corner{ dir = 4 @@ -8179,6 +8115,23 @@ }, /turf/open/floor/iron, /area/station/hallway/secondary/exit) +"bLS" = ( +/obj/machinery/requests_console/directional/south{ + department = "Janitorial"; + name = "Janitorial Requests Console" + }, +/obj/effect/turf_decal/trimline/neutral/filled/line{ + dir = 6 + }, +/obj/effect/turf_decal/trimline/purple/filled/warning{ + dir = 6 + }, +/obj/machinery/disposal/bin, +/obj/structure/disposalpipe/trunk{ + dir = 1 + }, +/turf/open/floor/iron, +/area/station/service/janitor) "bLT" = ( /obj/effect/turf_decal/siding/thinplating/corner{ dir = 1 @@ -8220,12 +8173,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/catwalk_floor, /area/station/maintenance/central/greater) -"bMX" = ( -/obj/effect/turf_decal/trimline/brown/filled/corner{ - dir = 1 - }, -/turf/open/floor/iron, -/area/station/cargo/miningdock) "bMZ" = ( /obj/effect/turf_decal/siding/thinplating/dark{ dir = 6 @@ -8510,19 +8457,6 @@ /obj/structure/closet/secure_closet/brig, /turf/open/floor/iron/dark, /area/station/security/execution/transfer) -"bTc" = ( -/obj/effect/decal/cleanable/dirt, -/obj/structure/disposalpipe/sorting/mail{ - dir = 4 - }, -/obj/structure/cable, -/obj/effect/mapping_helpers/mail_sorting/medbay/chemistry, -/obj/effect/mapping_helpers/mail_sorting/medbay/cmo_office, -/obj/effect/mapping_helpers/mail_sorting/medbay/general, -/obj/effect/mapping_helpers/mail_sorting/medbay/virology, -/obj/machinery/light/small/dim/directional/north, -/turf/open/floor/catwalk_floor, -/area/station/hallway/primary/tram/center) "bTm" = ( /obj/machinery/field/generator, /turf/open/floor/plating, @@ -8847,6 +8781,18 @@ }, /turf/open/floor/iron, /area/station/security/execution/transfer) +"bXs" = ( +/obj/machinery/door_buttons/airlock_controller{ + idExterior = "middleright_lower_lower_eva_external"; + idInterior = "middleright_lower_lower_eva_internal"; + idSelf = "middleright_lower_lower_eva_airlock_control"; + name = "External Access Console"; + pixel_y = -24 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/catwalk_floor, +/area/station/maintenance/tram/mid) "bXv" = ( /obj/effect/turf_decal/trimline/brown/filled/line{ dir = 4 @@ -8891,9 +8837,6 @@ dir = 1 }, /obj/effect/turf_decal/trimline/neutral/filled/line, -/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/hallway/secondary/exit/departure_lounge) "bYd" = ( @@ -9110,6 +9053,10 @@ }, /turf/open/floor/iron/white, /area/station/medical/medbay/central) +"cbc" = ( +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/catwalk_floor, +/area/station/maintenance/tram/mid) "cbe" = ( /obj/effect/turf_decal/trimline/red/filled/line, /obj/effect/turf_decal/trimline/neutral/filled/warning, @@ -9128,6 +9075,12 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/carpet, /area/station/commons/dorms) +"cbA" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron, +/area/station/cargo/miningdock) "cbG" = ( /obj/effect/landmark/start/security_officer, /obj/structure/chair{ @@ -9206,6 +9159,11 @@ }, /turf/open/floor/iron/checker, /area/station/commons/lounge) +"ccU" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/light/small/dim/directional/north, +/turf/open/floor/iron/smooth, +/area/station/hallway/primary/tram/center) "ccX" = ( /obj/machinery/vending/engivend, /turf/open/floor/iron, @@ -9494,13 +9452,6 @@ /obj/machinery/light/directional/east, /turf/open/floor/plating, /area/station/security/prison/work) -"cgF" = ( -/obj/effect/turf_decal/trimline/neutral/filled/line{ - dir = 4 - }, -/obj/item/kirbyplants/random, -/turf/open/floor/iron, -/area/station/hallway/primary/tram/center) "cgR" = ( /obj/effect/turf_decal/trimline/yellow/filled/line{ dir = 1 @@ -9715,6 +9666,13 @@ }, /turf/open/floor/iron/white, /area/station/science/lab) +"clO" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/light/small/dim/directional/north, +/turf/open/floor/catwalk_floor, +/area/station/hallway/primary/tram/center) "clT" = ( /turf/closed/wall, /area/station/security/checkpoint/medical) @@ -9737,6 +9695,16 @@ }, /turf/open/floor/iron, /area/station/security/brig) +"cmM" = ( +/obj/structure/disposalpipe/segment{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/simple/cyan/hidden, +/turf/open/floor/iron, +/area/station/engineering/atmos) "cmW" = ( /obj/structure/disposalpipe/sorting/mail/flip{ dir = 2 @@ -9747,14 +9715,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron, /area/station/hallway/secondary/command) -"cmZ" = ( -/obj/effect/turf_decal/trimline/neutral/filled/line{ - dir = 1 - }, -/obj/effect/turf_decal/trimline/neutral/filled/corner, -/obj/structure/cable, -/turf/open/floor/iron, -/area/station/hallway/primary/tram/right) "cnt" = ( /obj/effect/turf_decal/trimline/red/filled/line, /obj/effect/turf_decal/trimline/red/corner{ @@ -9847,8 +9807,14 @@ /obj/effect/turf_decal/trimline/neutral/corner{ dir = 4 }, +/obj/effect/landmark/start/hangover, /turf/open/floor/iron, /area/station/hallway/secondary/exit/departure_lounge) +"cpR" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/catwalk_floor, +/area/station/maintenance/tram/mid) "cpY" = ( /obj/machinery/duct, /obj/structure/cable, @@ -9857,6 +9823,13 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron, /area/station/hallway/secondary/service) +"cqj" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/railing/corner/end{ + dir = 4 + }, +/turf/open/floor/iron, +/area/station/cargo/miningfoundry) "cqn" = ( /obj/structure/table, /obj/machinery/camera/directional/south{ @@ -9946,6 +9919,13 @@ /obj/item/kirbyplants/random, /turf/open/floor/iron, /area/station/cargo/miningdock) +"crQ" = ( +/obj/structure/chair/sofa/bench/tram/left{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/neutral/filled/line, +/turf/open/floor/iron, +/area/station/hallway/primary/tram/center) "crR" = ( /obj/effect/turf_decal/tile/blue{ dir = 1 @@ -10046,9 +10026,26 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron/cafeteria, /area/station/command/heads_quarters/rd) +"csl" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/neutral/filled/line, +/turf/open/floor/iron, +/area/station/hallway/primary/tram/center) "csA" = ( /turf/closed/wall, /area/station/solars/starboard/fore) +"csH" = ( +/obj/machinery/door/airlock/maintenance_hatch{ + name = "Maintenance Hatch" + }, +/obj/effect/mapping_helpers/airlock/access/all/engineering/maintenance, +/obj/effect/mapping_helpers/airlock/unres{ + dir = 1 + }, +/turf/open/floor/catwalk_floor, +/area/station/maintenance/tram/mid) "csN" = ( /obj/effect/turf_decal/trimline/yellow/filled/line, /obj/machinery/atmospherics/pipe/smart/simple/dark/visible{ @@ -10086,6 +10083,15 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/white, /area/station/science/xenobiology) +"cuf" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron, +/area/station/cargo/miningdock) "cuM" = ( /obj/structure/table, /obj/item/radio/intercom/prison/directional/north, @@ -10136,7 +10142,7 @@ /turf/open/floor/plating, /area/station/maintenance/tram/mid) "cvf" = ( -/obj/machinery/door/window{ +/obj/machinery/door/window/left/directional/south{ name = "Captain's Desk"; req_access = list("captain") }, @@ -10147,7 +10153,7 @@ /area/station/command/heads_quarters/captain) "cvg" = ( /obj/structure/bed/double, -/obj/item/bedsheet/dorms_double, +/obj/effect/spawner/random/bedsheet/double, /obj/effect/landmark/start/assistant, /obj/structure/sign/clock/directional/north, /obj/item/pillow/random, @@ -10546,6 +10552,13 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/medical/virology) +"cBD" = ( +/obj/effect/turf_decal/trimline/brown/filled/line{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron, +/area/station/cargo/miningdock) "cBP" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -10569,10 +10582,6 @@ /obj/machinery/light/warm/directional/east, /turf/open/floor/wood, /area/station/service/theater) -"cCw" = ( -/obj/structure/sign/warning/electric_shock, -/turf/closed/wall, -/area/station/hallway/primary/tram/right) "cCD" = ( /obj/effect/turf_decal/trimline/red/filled/line, /obj/machinery/duct, @@ -10687,23 +10696,9 @@ }, /turf/open/floor/plating/elevatorshaft, /area/station/security/execution/transfer) -"cEV" = ( -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/catwalk_floor, -/area/station/maintenance/tram/mid) -"cFg" = ( -/obj/effect/turf_decal/trimline/neutral/filled/corner{ - dir = 4 - }, -/obj/structure/cable, -/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, +"cFb" = ( +/obj/structure/sign/warning/electric_shock, +/turf/closed/wall/r_wall, /area/station/hallway/secondary/exit) "cFh" = ( /obj/machinery/modular_computer/preset/engineering{ @@ -11252,18 +11247,6 @@ }, /turf/open/floor/iron, /area/station/security/prison) -"cOu" = ( -/obj/machinery/door_buttons/airlock_controller{ - idExterior = "middleright_lower_lower_eva_external"; - idInterior = "middleright_lower_lower_eva_internal"; - idSelf = "middleright_lower_lower_eva_airlock_control"; - name = "External Access Console"; - pixel_y = -24 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/catwalk_floor, -/area/station/maintenance/tram/mid) "cOC" = ( /obj/effect/turf_decal/trimline/neutral/filled/line{ dir = 4 @@ -11286,7 +11269,8 @@ /obj/machinery/light/small/directional/west, /obj/machinery/flasher/directional/west{ pixel_x = -24; - pixel_y = -8 + pixel_y = -8; + id = "hopflash" }, /turf/open/floor/iron/dark, /area/station/command/heads_quarters/hop) @@ -11297,17 +11281,24 @@ }, /turf/open/floor/engine, /area/station/engineering/supermatter/room) -"cOM" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/turf/open/floor/iron, -/area/station/hallway/secondary/exit/departure_lounge) "cON" = ( /obj/machinery/deepfryer, /turf/open/floor/iron/white/side{ dir = 8 }, /area/station/service/kitchen) +"cPg" = ( +/obj/machinery/power/smes/engineering, +/obj/structure/sign/warning/electric_shock/directional/west, +/obj/machinery/camera/emp_proof{ + c_tag = "Engineering - SMES"; + dir = 10; + network = list("ss13","engineering") + }, +/obj/structure/cable, +/obj/machinery/light/directional/west, +/turf/open/floor/iron, +/area/station/engineering/engine_smes) "cPl" = ( /obj/structure/railing/corner{ dir = 4 @@ -11377,7 +11368,7 @@ /obj/structure/bed{ dir = 4 }, -/obj/item/bedsheet/dorms{ +/obj/effect/spawner/random/bedsheet{ dir = 4 }, /obj/effect/landmark/start/assistant, @@ -11589,6 +11580,10 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/security/prison/garden) +"cTc" = ( +/obj/structure/sign/warning/electric_shock, +/turf/closed/wall, +/area/station/hallway/primary/tram/center) "cTl" = ( /obj/machinery/disposal/bin, /obj/effect/turf_decal/trimline/neutral/filled/line{ @@ -11622,6 +11617,13 @@ /obj/machinery/status_display/ai/directional/west, /turf/open/floor/circuit, /area/station/ai_monitored/turret_protected/ai) +"cUB" = ( +/obj/effect/landmark/start/shaft_miner, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron, +/area/station/cargo/miningdock) "cUE" = ( /obj/effect/turf_decal/trimline/yellow/filled/corner{ dir = 8 @@ -11761,6 +11763,14 @@ dir = 9 }, /area/station/service/chapel) +"cWA" = ( +/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/miningdock) "cWF" = ( /turf/closed/wall, /area/station/security/execution/transfer) @@ -11798,7 +11808,8 @@ dir = 4 }, /obj/machinery/door/airlock/security/glass{ - name = "Isolation Cell C" + name = "Isolation Cell C"; + id = "Isolation_C" }, /obj/effect/mapping_helpers/airlock/access/all/security/brig, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -11837,6 +11848,25 @@ /obj/machinery/airalarm/directional/north, /turf/open/floor/iron, /area/station/hallway/primary/tram/right) +"cYe" = ( +/obj/machinery/door/airlock/engineering{ + name = "Tram Mechanical Room" + }, +/obj/structure/disposalpipe/segment, +/obj/effect/mapping_helpers/airlock/access/all/engineering/general, +/obj/effect/decal/cleanable/dirt, +/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/unres{ + dir = 1 + }, +/turf/open/floor/catwalk_floor, +/area/station/maintenance/port/central) +"cYh" = ( +/obj/effect/turf_decal/trimline/neutral/filled/corner, +/turf/open/floor/iron, +/area/station/hallway/secondary/service) "cYl" = ( /obj/effect/turf_decal/trimline/yellow/filled/line{ dir = 8 @@ -11931,6 +11961,12 @@ /obj/machinery/light/small/directional/south, /turf/open/floor/plating, /area/station/engineering/atmos) +"cZQ" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/turf/open/floor/iron, +/area/station/cargo/miningfoundry) "cZT" = ( /obj/structure/alien/weeds, /obj/item/clothing/mask/facehugger/dead, @@ -12074,6 +12110,10 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/cargo/miningdock) +"dci" = ( +/obj/effect/turf_decal/tile/brown/fourcorners, +/turf/open/floor/iron, +/area/station/cargo/miningdock) "dck" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -12094,13 +12134,6 @@ }, /turf/open/floor/iron, /area/station/maintenance/tram/mid) -"dcw" = ( -/obj/effect/decal/cleanable/dirt, -/obj/structure/railing, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/turf/open/floor/catwalk_floor, -/area/station/hallway/secondary/exit) "dcz" = ( /obj/effect/decal/cleanable/dirt, /obj/effect/turf_decal/loading_area{ @@ -12173,6 +12206,14 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/security/prison/safe) +"ddY" = ( +/obj/structure/sign/poster/official/jim_nortons/directional/north, +/obj/machinery/conveyor{ + dir = 8; + id = "mining" + }, +/turf/open/floor/iron, +/area/station/cargo/miningfoundry) "dec" = ( /obj/structure/lattice/catwalk, /obj/structure/cable, @@ -12221,6 +12262,11 @@ /obj/effect/decal/cleanable/dirt, /turf/open/floor/plating, /area/station/solars/starboard/fore) +"deU" = ( +/obj/structure/closet/emcloset, +/obj/machinery/light/dim/directional/west, +/turf/open/floor/iron/smooth, +/area/station/hallway/primary/tram/right) "deX" = ( /obj/machinery/duct, /obj/structure/disposalpipe/segment, @@ -12453,6 +12499,13 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron, /area/station/cargo/miningdock) +"djS" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 4 + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/catwalk_floor, +/area/station/maintenance/tram/mid) "dka" = ( /obj/structure/chair/sofa/right{ dir = 1 @@ -13006,6 +13059,7 @@ /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/extinguisher_cabinet/directional/west, /turf/open/floor/iron, /area/station/hallway/secondary/exit) "duB" = ( @@ -13396,6 +13450,10 @@ }, /turf/open/floor/iron/white, /area/station/medical/chemistry) +"dCJ" = ( +/obj/machinery/light/small/dim/directional/south, +/turf/open/floor/catwalk_floor, +/area/station/hallway/primary/tram/center) "dCU" = ( /obj/effect/turf_decal/trimline/red/filled/line, /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ @@ -13466,9 +13524,40 @@ }, /turf/open/floor/iron/smooth, /area/station/maintenance/disposal) +"dEo" = ( +/obj/effect/turf_decal/trimline/neutral/filled/line{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/neutral/filled/corner, +/obj/structure/cable, +/turf/open/floor/iron, +/area/station/hallway/primary/tram/right) "dEv" = ( /turf/closed/wall/r_wall, /area/station/ai_monitored/security/armory) +"dEH" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/door/airlock/external{ + autoclose = 0; + frequency = 1449; + id_tag = "middleleft_upper_eva_internal"; + name = "External Access" + }, +/obj/machinery/door_buttons/access_button{ + idDoor = "middleleft_upper_eva_internal"; + idSelf = "middleleft_upper_eva_airlock_control"; + name = "External Access Button"; + pixel_y = -24 + }, +/obj/effect/mapping_helpers/airlock/locked, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/catwalk_floor, +/area/station/hallway/primary/tram/center) "dEM" = ( /obj/structure/disposalpipe/junction/flip{ dir = 8 @@ -13696,15 +13785,6 @@ }, /turf/open/openspace, /area/station/hallway/primary/tram/left) -"dIJ" = ( -/obj/machinery/door/airlock/hatch{ - name = "Emergency Exit" - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/open/floor/catwalk_floor, -/area/station/hallway/primary/tram/center) "dIK" = ( /turf/closed/wall/r_wall, /area/station/science/ordnance/freezerchamber) @@ -13738,6 +13818,10 @@ }, /turf/open/floor/wood, /area/station/command/meeting_room) +"dJk" = ( +/obj/structure/sign/warning/electric_shock, +/turf/closed/wall, +/area/station/hallway/primary/tram/right) "dJm" = ( /obj/structure/chair{ dir = 4 @@ -13763,12 +13847,6 @@ /obj/structure/cable, /turf/open/floor/iron, /area/station/hallway/secondary/exit/departure_lounge) -"dJq" = ( -/obj/effect/turf_decal/stripes/line, -/obj/effect/landmark/navigate_destination/dockaux, -/obj/machinery/light/directional/west, -/turf/open/floor/iron, -/area/station/hallway/secondary/entry) "dJG" = ( /obj/effect/turf_decal/bot, /obj/structure/closet/crate/freezer/blood, @@ -13856,15 +13934,6 @@ }, /turf/open/floor/iron/white, /area/station/science/ordnance) -"dLs" = ( -/obj/structure/cable, -/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/hallway/secondary/exit) "dLt" = ( /obj/effect/turf_decal/bot{ dir = 1 @@ -13875,6 +13944,18 @@ /obj/structure/reagent_dispensers/fueltank, /turf/open/floor/iron, /area/station/engineering/main) +"dLD" = ( +/obj/effect/turf_decal/bot, +/obj/item/mop, +/obj/effect/turf_decal/trimline/purple/filled/warning{ + dir = 5 + }, +/obj/structure/mop_bucket/janitorialcart, +/obj/effect/turf_decal/trimline/neutral/filled/line{ + dir = 5 + }, +/turf/open/floor/iron, +/area/station/service/janitor) "dLI" = ( /obj/machinery/door/airlock/maintenance_hatch{ name = "EVA Maintenance Hatch" @@ -13920,6 +14001,16 @@ /obj/machinery/light/dim/directional/south, /turf/open/floor/catwalk_floor, /area/station/solars/port) +"dMw" = ( +/obj/machinery/door/airlock/hatch{ + name = "Emergency Exit" + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/structure/cable, +/turf/open/floor/catwalk_floor, +/area/station/hallway/primary/tram/center) "dME" = ( /turf/closed/wall, /area/station/service/theater) @@ -14059,6 +14150,8 @@ /obj/effect/turf_decal/trimline/neutral/corner{ 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/hallway/secondary/exit/departure_lounge) "dPe" = ( @@ -14081,14 +14174,6 @@ }, /turf/open/floor/iron/dark, /area/station/medical/morgue) -"dPt" = ( -/obj/effect/decal/cleanable/dirt, -/obj/structure/railing{ - dir = 1 - }, -/obj/structure/cable, -/turf/open/floor/catwalk_floor, -/area/station/hallway/secondary/exit) "dPu" = ( /obj/structure/cable, /obj/structure/disposalpipe/segment, @@ -14254,7 +14339,7 @@ /obj/structure/bed{ dir = 4 }, -/obj/item/bedsheet/dorms{ +/obj/effect/spawner/random/bedsheet{ dir = 4 }, /obj/structure/sign/clock/directional/south, @@ -14281,13 +14366,6 @@ /obj/item/stack/medical/gauze, /turf/open/floor/iron/white, /area/station/medical/medbay/central) -"dRS" = ( -/obj/effect/decal/cleanable/dirt, -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ - dir = 4 - }, -/turf/open/floor/catwalk_floor, -/area/station/maintenance/tram/mid) "dRY" = ( /obj/machinery/firealarm/directional/south, /obj/effect/turf_decal/trimline/brown/line, @@ -15065,18 +15143,17 @@ /obj/item/radio/intercom/directional/west, /turf/open/floor/iron/dark, /area/station/command/teleporter) -"ejh" = ( -/obj/structure/cable, -/obj/machinery/power/apc/auto_name/directional/north, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/catwalk_floor, -/area/station/hallway/primary/tram/center) "ejm" = ( /obj/effect/turf_decal/trimline/neutral/filled/line{ dir = 4 }, /turf/open/floor/iron, /area/station/commons/fitness/recreation) +"ejo" = ( +/obj/effect/turf_decal/sand, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/catwalk_floor, +/area/station/maintenance/tram/mid) "ejD" = ( /obj/effect/turf_decal/trimline/red/filled/corner{ dir = 8 @@ -15118,13 +15195,6 @@ }, /turf/open/floor/iron/checker, /area/station/service/kitchen) -"ejL" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/effect/turf_decal/trimline/neutral/filled/line, -/turf/open/floor/iron, -/area/station/hallway/primary/tram/center) "ejR" = ( /obj/effect/decal/cleanable/dirt, /obj/machinery/door/airlock/external{ @@ -15176,6 +15246,15 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/security/prison/work) +"eki" = ( +/obj/effect/turf_decal/trimline/neutral/filled/line{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/purple/filled/warning{ + dir = 4 + }, +/turf/open/floor/iron, +/area/station/service/janitor) "ekB" = ( /turf/closed/wall, /area/station/service/janitor) @@ -15241,6 +15320,20 @@ /obj/effect/landmark/event_spawn, /turf/open/floor/iron/white, /area/station/science/lower) +"emp" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/turf_decal/stripes/end{ + dir = 4 + }, +/obj/structure/railing, +/obj/machinery/atmospherics/pipe/multiz/supply/hidden/layer4{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/multiz/scrubbers/hidden/layer2{ + dir = 4 + }, +/turf/open/floor/plating, +/area/station/hallway/secondary/exit) "ems" = ( /obj/structure/bed, /obj/effect/turf_decal/trimline/red/filled/line{ @@ -15607,10 +15700,6 @@ "euC" = ( /turf/open/floor/wood/parquet, /area/station/medical/psychology) -"euF" = ( -/obj/machinery/light/small/dim/directional/south, -/turf/open/floor/catwalk_floor, -/area/station/hallway/primary/tram/center) "euI" = ( /obj/structure/table/wood, /turf/open/floor/carpet, @@ -15747,6 +15836,14 @@ /obj/machinery/airalarm/directional/north, /turf/open/floor/iron, /area/station/cargo/storage) +"ext" = ( +/obj/effect/turf_decal/trimline/brown/filled/line{ + dir = 1 + }, +/obj/machinery/airalarm/directional/north, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron, +/area/station/cargo/miningdock) "exv" = ( /obj/structure/railing{ dir = 1 @@ -15979,6 +16076,12 @@ /obj/machinery/light/directional/east, /turf/open/floor/iron, /area/station/engineering/atmos) +"eAV" = ( +/obj/machinery/power/apc/auto_name/directional/south, +/obj/structure/cable, +/obj/effect/turf_decal/tile/brown/opposingcorners, +/turf/open/floor/iron, +/area/station/cargo/miningfoundry) "eAX" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -16034,13 +16137,6 @@ /obj/effect/turf_decal/bot, /turf/open/floor/plating, /area/station/ai_monitored/turret_protected/aisat/maint) -"eBu" = ( -/obj/effect/turf_decal/trimline/neutral/filled/corner{ - dir = 4 - }, -/obj/structure/cable, -/turf/open/floor/iron, -/area/station/hallway/primary/tram/right) "eBy" = ( /obj/effect/turf_decal/trimline/red/filled/line{ dir = 9 @@ -16384,6 +16480,13 @@ /obj/effect/spawner/random/armory/riot_shield, /turf/open/floor/iron/dark, /area/station/ai_monitored/security/armory) +"eJI" = ( +/obj/structure/closet/secure_closet/miner, +/obj/effect/turf_decal/trimline/brown/filled/line{ + dir = 5 + }, +/turf/open/floor/iron, +/area/station/cargo/miningdock) "eJQ" = ( /turf/open/floor/glass/reinforced, /area/station/science/xenobiology) @@ -16423,13 +16526,6 @@ }, /turf/open/floor/iron, /area/station/hallway/secondary/exit/departure_lounge) -"eKI" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/machinery/light/small/dim/directional/north, -/turf/open/floor/catwalk_floor, -/area/station/hallway/primary/tram/center) "eLl" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ dir = 4 @@ -16982,6 +17078,12 @@ /obj/structure/cable, /turf/open/floor/iron, /area/station/cargo/warehouse) +"eVy" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/catwalk_floor, +/area/station/maintenance/tram/mid) "eVz" = ( /turf/open/floor/grass, /area/station/service/hydroponics) @@ -17173,6 +17275,20 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron, /area/station/maintenance/port/central) +"eZE" = ( +/obj/effect/turf_decal/trimline/neutral/filled/line{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/purple/filled/warning{ + dir = 8 + }, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/light/directional/west, +/obj/machinery/firealarm/directional/west, +/turf/open/floor/iron, +/area/station/service/janitor) "eZO" = ( /obj/effect/decal/cleanable/dirt, /obj/effect/turf_decal/trimline/neutral/filled/line{ @@ -17285,9 +17401,14 @@ /obj/structure/cable, /turf/open/floor/iron/dark, /area/station/cargo/miningdock/oresilo) -"fcR" = ( -/turf/open/openspace, -/area/station/hallway/secondary/exit) +"fdc" = ( +/obj/machinery/brm, +/obj/machinery/conveyor{ + dir = 8; + id = "mining" + }, +/turf/open/floor/iron, +/area/station/cargo/miningfoundry) "fdr" = ( /obj/machinery/duct, /obj/structure/cable, @@ -17303,6 +17424,14 @@ /obj/structure/cable, /turf/open/floor/engine, /area/station/engineering/supermatter/room) +"fdM" = ( +/obj/effect/decal/cleanable/dirt, +/obj/structure/railing{ + dir = 1 + }, +/obj/structure/cable, +/turf/open/floor/catwalk_floor, +/area/station/hallway/secondary/exit) "fdU" = ( /obj/effect/turf_decal/trimline/yellow/filled/corner, /obj/effect/turf_decal/trimline/yellow/filled/corner{ @@ -17392,11 +17521,7 @@ id = "AI"; pixel_x = 20 }, -/obj/machinery/door/window{ - atom_integrity = 300; - base_state = "rightsecure"; - dir = 1; - icon_state = "rightsecure"; +/obj/machinery/door/window/brigdoor/right/directional/north{ name = "Primary AI Core Access"; req_access = list("ai_upload") }, @@ -17409,18 +17534,6 @@ }, /turf/open/floor/iron/freezer, /area/station/commons/toilet) -"ffF" = ( -/obj/machinery/power/smes/engineering, -/obj/structure/sign/warning/electric_shock, -/obj/machinery/camera/emp_proof{ - c_tag = "Engineering - SMES"; - dir = 10; - network = list("ss13","engineering") - }, -/obj/structure/cable, -/obj/machinery/light/directional/west, -/turf/open/floor/iron, -/area/station/engineering/engine_smes) "ffL" = ( /obj/structure/disposalpipe/segment, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -17464,18 +17577,6 @@ }, /turf/open/floor/iron, /area/station/hallway/secondary/exit/departure_lounge) -"fgs" = ( -/obj/machinery/door/airlock/vault{ - name = "High Security Vault" - }, -/obj/effect/mapping_helpers/airlock/locked, -/obj/effect/mapping_helpers/airlock/access/all/supply/vault, -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/landmark/navigate_destination/vault, -/turf/open/floor/iron/dark, -/area/station/ai_monitored/command/nuke_storage) "fgH" = ( /obj/effect/turf_decal/weather/snow, /obj/effect/turf_decal/weather/snow/corner, @@ -17655,6 +17756,9 @@ /obj/machinery/light/directional/west, /turf/open/floor/iron, /area/station/ai_monitored/command/storage/eva) +"fiW" = ( +/turf/open/openspace, +/area/station/hallway/secondary/exit) "fja" = ( /obj/structure/cable, /turf/open/floor/iron, @@ -17935,6 +18039,14 @@ /obj/structure/cable, /turf/open/space/openspace, /area/station/solars/port) +"fnL" = ( +/obj/structure/cable/multilayer/multiz, +/obj/effect/turf_decal/stripes/line{ + dir = 5 + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plating, +/area/station/hallway/primary/tram/left) "fnO" = ( /obj/effect/turf_decal/stripes/line, /obj/machinery/atmospherics/pipe/smart/manifold4w/cyan/visible, @@ -18037,13 +18149,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/security/brig) -"fpx" = ( -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ - dir = 4 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/catwalk_floor, -/area/station/maintenance/tram/mid) "fpQ" = ( /obj/effect/turf_decal/trimline/red/filled/corner, /obj/structure/cable, @@ -18291,15 +18396,10 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/cargo/storage) -"fuc" = ( -/obj/effect/turf_decal/siding/thinplating{ - dir = 1 - }, -/obj/structure/disposalpipe/segment{ - dir = 6 - }, -/turf/open/floor/iron, -/area/station/hallway/primary/tram/center) +"ftZ" = ( +/obj/effect/spawner/structure/window, +/turf/open/floor/plating, +/area/station/hallway/primary/tram/right) "fuj" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/engine, @@ -18344,6 +18444,9 @@ }, /obj/item/tank/internals/emergency_oxygen, /obj/item/clothing/mask/breath, +/obj/machinery/atmospherics/pipe/smart/simple/cyan/hidden{ + dir = 9 + }, /turf/open/floor/iron, /area/station/engineering/atmos) "fvx" = ( @@ -18355,6 +18458,13 @@ }, /turf/open/floor/iron, /area/station/commons/dorms) +"fvD" = ( +/obj/effect/decal/cleanable/dirt, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/catwalk_floor, +/area/station/hallway/secondary/exit) "fvK" = ( /obj/structure/cable/layer1, /obj/effect/decal/cleanable/dirt, @@ -18616,6 +18726,10 @@ /obj/machinery/airalarm/directional/north, /turf/open/floor/wood, /area/station/commons/vacant_room/office) +"fCP" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, +/turf/open/floor/iron, +/area/station/service/janitor) "fCS" = ( /obj/structure/table, /obj/machinery/reagentgrinder, @@ -18668,16 +18782,6 @@ }, /turf/open/floor/glass/reinforced, /area/station/science/research) -"fDF" = ( -/obj/machinery/door/airlock/engineering/glass{ - name = "Tram Mechanical Room" - }, -/obj/effect/decal/cleanable/dirt, -/obj/effect/mapping_helpers/airlock/access/all/engineering/general, -/obj/effect/mapping_helpers/airlock/unres, -/obj/structure/cable, -/turf/open/floor/catwalk_floor, -/area/station/hallway/primary/tram/center) "fDS" = ( /obj/machinery/door/airlock/engineering/glass{ name = "Laser Room" @@ -18719,11 +18823,6 @@ }, /turf/open/floor/wood/parquet, /area/station/medical/psychology) -"fEr" = ( -/obj/effect/turf_decal/siding/thinplating/dark, -/obj/structure/table, -/turf/open/floor/iron/dark, -/area/station/hallway/secondary/service) "fEG" = ( /obj/machinery/deepfryer, /obj/structure/extinguisher_cabinet/directional/east, @@ -18846,6 +18945,11 @@ }, /turf/open/floor/iron/dark, /area/station/ai_monitored/turret_protected/aisat_interior) +"fFO" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/landmark/navigate_destination/disposals, +/turf/open/floor/iron/smooth, +/area/station/maintenance/disposal) "fFR" = ( /obj/effect/turf_decal/trimline/purple/filled/line{ dir = 10 @@ -19069,22 +19173,8 @@ /obj/structure/disposalpipe/segment, /turf/open/floor/iron/white, /area/station/science/lower) -"fKL" = ( -/obj/effect/turf_decal/trimline/neutral/filled/line{ - dir = 8 - }, -/obj/effect/turf_decal/trimline/purple/filled/warning{ - dir = 8 - }, -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/light/directional/west, -/obj/machinery/firealarm/directional/west, -/turf/open/floor/iron, -/area/station/service/janitor) "fKO" = ( -/obj/effect/spawner/structure/window/reinforced, +/obj/effect/spawner/structure/window, /turf/open/floor/plating, /area/station/command/heads_quarters/hop) "fKW" = ( @@ -19323,17 +19413,6 @@ }, /turf/open/floor/iron/dark, /area/station/engineering/storage/tech) -"fPk" = ( -/obj/machinery/door/airlock/hatch{ - name = "Emergency Exit" - }, -/obj/effect/decal/cleanable/dirt, -/obj/structure/cable, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/open/floor/catwalk_floor, -/area/station/hallway/primary/tram/center) "fPv" = ( /obj/effect/turf_decal/delivery, /obj/machinery/door/window/left/directional/north{ @@ -19389,6 +19468,13 @@ }, /turf/open/floor/engine, /area/station/science/xenobiology) +"fQF" = ( +/obj/machinery/newscaster/directional/east, +/obj/structure/disposalpipe/segment{ + dir = 9 + }, +/turf/open/floor/iron, +/area/station/hallway/primary/tram/center) "fQH" = ( /obj/effect/turf_decal/delivery, /obj/machinery/navbeacon{ @@ -19634,6 +19720,23 @@ /obj/effect/decal/cleanable/dirt, /turf/open/floor/iron/smooth, /area/station/maintenance/tram/right) +"fUT" = ( +/obj/machinery/door/firedoor, +/obj/effect/turf_decal/trimline/neutral/filled/line{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/neutral/filled/line{ + dir = 8 + }, +/obj/machinery/door/airlock/public/glass{ + name = "Command Wing Hallway" + }, +/obj/structure/disposalpipe/segment, +/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/hallway/secondary/command) "fVg" = ( /obj/effect/turf_decal/trimline/neutral/filled/corner{ dir = 1 @@ -19665,6 +19768,15 @@ }, /turf/open/floor/plating, /area/station/ai_monitored/turret_protected/aisat/foyer) +"fVN" = ( +/obj/machinery/door/airlock/hatch{ + name = "Emergency Exit" + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/catwalk_floor, +/area/station/hallway/primary/tram/center) "fVX" = ( /obj/effect/turf_decal/trimline/dark_green/filled/line{ dir = 1 @@ -19676,13 +19788,6 @@ /obj/structure/cable, /turf/open/floor/iron/white, /area/station/science/genetics) -"fWa" = ( -/obj/effect/spawner/random/vending/colavend, -/obj/effect/turf_decal/trimline/neutral/filled/line{ - dir = 5 - }, -/turf/open/floor/iron, -/area/station/hallway/primary/tram/center) "fWi" = ( /obj/structure/rack, /obj/structure/window/spawner/directional/north, @@ -19797,12 +19902,6 @@ }, /turf/open/floor/iron, /area/station/escapepodbay) -"fXN" = ( -/obj/structure/ladder, -/obj/effect/decal/cleanable/dirt, -/obj/machinery/light/dim/directional/west, -/turf/open/floor/iron/smooth, -/area/station/hallway/secondary/exit) "fXQ" = ( /obj/effect/spawner/structure/window/reinforced, /obj/structure/cable, @@ -19816,6 +19915,15 @@ "fYf" = ( /turf/open/floor/iron/textured_large, /area/station/security/execution/education) +"fYl" = ( +/obj/structure/cable, +/obj/effect/turf_decal/trimline/yellow/filled/line, +/obj/effect/turf_decal/trimline/neutral/filled/warning, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/iron, +/area/station/hallway/primary/tram/center) "fYo" = ( /obj/effect/turf_decal/trimline/blue/filled/line{ dir = 8 @@ -20146,18 +20254,6 @@ "gfK" = ( /turf/closed/wall/r_wall, /area/station/security/execution/education) -"gfO" = ( -/obj/effect/turf_decal/sand, -/obj/machinery/door_buttons/airlock_controller{ - idExterior = "middleleft_upper_lower_eva_external"; - idInterior = "middleleft_upper_lower_eva_internal"; - idSelf = "middleleft_upper_lower_eva_airlock_control"; - name = "External Access Console"; - pixel_y = 24 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/turf/open/floor/catwalk_floor, -/area/station/maintenance/tram/mid) "gfV" = ( /obj/structure/table/wood/fancy/green, /obj/effect/spawner/round_default_module, @@ -20555,17 +20651,15 @@ /obj/effect/decal/cleanable/dirt, /turf/open/floor/iron, /area/station/maintenance/tram/mid) -"gmp" = ( -/obj/machinery/vending/wardrobe/jani_wardrobe, -/obj/structure/extinguisher_cabinet/directional/north, -/obj/effect/turf_decal/trimline/neutral/filled/line{ - dir = 1 - }, -/obj/effect/turf_decal/trimline/purple/filled/warning{ - dir = 1 +"gmm" = ( +/obj/structure/cable, +/obj/machinery/door/airlock/maintenance_hatch{ + name = "Utilities Access Hatch" }, -/turf/open/floor/iron, -/area/station/service/janitor) +/obj/effect/mapping_helpers/airlock/access/all/engineering/general, +/obj/structure/disposalpipe/segment, +/turf/open/floor/catwalk_floor, +/area/station/hallway/primary/tram/center) "gmq" = ( /obj/effect/turf_decal/trimline/red/filled/line{ dir = 8 @@ -20734,6 +20828,13 @@ }, /turf/open/floor/iron, /area/station/science/robotics/lab) +"goY" = ( +/obj/effect/turf_decal/tile/brown/opposingcorners{ + dir = 1 + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/iron, +/area/station/cargo/miningfoundry) "gpb" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -20955,11 +21056,6 @@ /obj/structure/cable, /turf/open/openspace, /area/station/solars/starboard/fore) -"gtY" = ( -/obj/effect/decal/cleanable/dirt, -/obj/structure/disposalpipe/segment, -/turf/open/floor/catwalk_floor, -/area/station/hallway/primary/tram/center) "gtZ" = ( /obj/effect/turf_decal/trimline/neutral/filled/line, /obj/machinery/airalarm/directional/south, @@ -21008,6 +21104,13 @@ }, /turf/open/floor/iron/dark, /area/station/command/bridge) +"guI" = ( +/obj/machinery/holopad, +/obj/effect/turf_decal/bot, +/obj/structure/cable, +/obj/effect/landmark/navigate_destination/dorms, +/turf/open/floor/iron, +/area/station/commons/dorms) "guL" = ( /turf/open/floor/iron/cafeteria, /area/station/service/kitchen) @@ -21114,13 +21217,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/white, /area/station/medical/medbay/lobby) -"gxw" = ( -/obj/effect/turf_decal/trimline/brown/filled/line{ - dir = 1 - }, -/obj/machinery/airalarm/directional/north, -/turf/open/floor/iron, -/area/station/cargo/miningdock) "gxO" = ( /obj/effect/turf_decal/trimline/yellow/filled/line{ dir = 9 @@ -21478,6 +21574,14 @@ /obj/structure/cable, /turf/open/floor/engine, /area/station/engineering/supermatter) +"gDQ" = ( +/obj/machinery/camera/directional/east{ + c_tag = "Hallway - Central Tram Platform North-East" + }, +/obj/structure/extinguisher_cabinet/directional/east, +/obj/effect/turf_decal/stripes/white/line, +/turf/open/floor/iron, +/area/station/hallway/primary/tram/center) "gDU" = ( /obj/effect/turf_decal/stripes/line{ dir = 6 @@ -21726,6 +21830,7 @@ dir = 1 }, /obj/item/airlock_painter/decal, +/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden, /turf/open/floor/iron, /area/station/engineering/atmos) "gIG" = ( @@ -21748,35 +21853,18 @@ /obj/machinery/light/directional/east, /turf/open/floor/engine, /area/station/engineering/supermatter/room) -"gIU" = ( -/obj/effect/decal/cleanable/dirt, -/obj/machinery/door/airlock/external{ - autoclose = 0; - frequency = 1449; - id_tag = "middleleft_lower_eva_internal"; - name = "External Access" - }, -/obj/machinery/door_buttons/access_button{ - idDoor = "middleleft_lower_eva_internal"; - idSelf = "middleleft_lower_eva_airlock_control"; - name = "External Access Button"; - pixel_y = 24 - }, -/obj/effect/mapping_helpers/airlock/locked, -/turf/open/floor/catwalk_floor, -/area/station/hallway/primary/tram/center) -"gIV" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/turf/open/floor/iron, -/area/station/cargo/miningdock) "gJs" = ( /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, /obj/effect/turf_decal/tile/bar/opposingcorners, /turf/open/floor/iron, /area/station/cargo/miningdock/cafeteria) +"gJt" = ( +/obj/effect/turf_decal/trimline/neutral/filled/line{ + dir = 8 + }, +/obj/effect/spawner/random/vending/snackvend, +/turf/open/floor/iron, +/area/station/hallway/secondary/service) "gJw" = ( /obj/effect/decal/cleanable/dirt, /obj/structure/falsewall, @@ -21864,7 +21952,8 @@ dir = 8 }, /obj/machinery/door/airlock/security/glass{ - name = "Isolation Cell B" + name = "Isolation Cell B"; + id = "Isolation_B" }, /obj/effect/mapping_helpers/airlock/access/all/security/brig, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -21998,8 +22087,7 @@ /area/station/medical/treatment_center) "gNK" = ( /obj/structure/table/reinforced, -/obj/machinery/door/window/brigdoor{ - dir = 1; +/obj/machinery/door/window/brigdoor/left/directional/north{ name = "Armory Desk"; req_access = list("armory") }, @@ -22344,6 +22432,18 @@ }, /turf/open/floor/iron, /area/station/hallway/secondary/exit/departure_lounge) +"gTY" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/door_buttons/airlock_controller{ + idExterior = "middleleft_lower_lower_eva_external"; + idInterior = "middleleft_lower_lower_eva_internal"; + idSelf = "middleleft_lower_lower_eva_airlock_control"; + name = "External Access Console"; + pixel_y = -24 + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/catwalk_floor, +/area/station/maintenance/tram/mid) "gUn" = ( /obj/effect/turf_decal/siding/thinplating{ dir = 9 @@ -22486,23 +22586,6 @@ }, /turf/open/floor/iron, /area/station/security/checkpoint/supply) -"gXj" = ( -/obj/effect/decal/cleanable/dirt, -/obj/machinery/door/airlock/external{ - autoclose = 0; - frequency = 1449; - id_tag = "middleright_lower_eva_internal"; - name = "External Access" - }, -/obj/machinery/door_buttons/access_button{ - idDoor = "middleright_lower_eva_internal"; - idSelf = "middleright_lower_eva_airlock_control"; - name = "External Access Button"; - pixel_y = 24 - }, -/obj/effect/mapping_helpers/airlock/locked, -/turf/open/floor/catwalk_floor, -/area/station/hallway/primary/tram/center) "gXo" = ( /obj/structure/flora/bush/fullgrass/style_random, /turf/open/misc/grass/jungle, @@ -22523,10 +22606,6 @@ /obj/effect/turf_decal/trimline/neutral/filled/line{ dir = 10 }, -/obj/structure/chair{ - dir = 4 - }, -/obj/effect/landmark/start/hangover, /obj/machinery/firealarm/directional/south, /turf/open/floor/iron, /area/station/hallway/secondary/exit/departure_lounge) @@ -22718,18 +22797,6 @@ }, /turf/open/floor/engine, /area/station/science/explab) -"hdk" = ( -/obj/effect/turf_decal/trimline/neutral/filled/line{ - dir = 8 - }, -/obj/structure/cable, -/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/hallway/primary/tram/left) "hdn" = ( /obj/effect/turf_decal/trimline/neutral/filled/line{ dir = 1 @@ -22833,18 +22900,7 @@ /area/station/ai_monitored/command/storage/eva) "heS" = ( /obj/machinery/holopad, -/obj/effect/turf_decal/trimline/neutral/corner{ - dir = 1 - }, -/obj/effect/turf_decal/trimline/neutral/corner{ - dir = 8 - }, -/obj/effect/turf_decal/trimline/neutral/filled/corner{ - dir = 4 - }, -/obj/effect/turf_decal/trimline/neutral/filled/corner, /obj/effect/turf_decal/bot, -/obj/machinery/status_display/evac/directional/east, /obj/machinery/camera/directional/east{ c_tag = "Departures - West Main" }, @@ -22853,6 +22909,10 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/effect/landmark/transport/nav_beacon/tram/nav/immovable_rod, +/obj/machinery/status_display/ai/directional/east, +/obj/effect/turf_decal/trimline/neutral/filled/line{ + dir = 4 + }, /turf/open/floor/iron, /area/station/hallway/secondary/exit/departure_lounge) "heY" = ( @@ -22886,7 +22946,7 @@ /obj/structure/bed{ dir = 8 }, -/obj/item/bedsheet/dorms, +/obj/effect/spawner/random/bedsheet, /obj/structure/sign/clock/directional/east, /obj/item/pillow/random, /turf/open/floor/wood, @@ -23423,8 +23483,9 @@ /obj/effect/turf_decal/trimline/neutral/filled/warning{ dir = 10 }, -/obj/machinery/atmospherics/components/unary/portables_connector/layer2{ - dir = 8 +/obj/machinery/atmospherics/components/unary/portables_connector/visible{ + dir = 8; + name = "Exfiltrate Port" }, /turf/open/floor/iron, /area/station/hallway/secondary/construction/engineering) @@ -23603,13 +23664,6 @@ }, /turf/open/floor/iron, /area/station/hallway/primary/tram/right) -"hsT" = ( -/obj/effect/turf_decal/trimline/neutral/filled/line{ - dir = 8 - }, -/obj/machinery/status_display/evac/directional/west, -/turf/open/floor/iron, -/area/station/hallway/secondary/exit/departure_lounge) "htb" = ( /obj/structure/closet/secure_closet/courtroom, /obj/effect/turf_decal/trimline/red/filled/line{ @@ -23792,21 +23846,9 @@ }, /turf/open/floor/glass, /area/station/command/meeting_room) -"hyH" = ( -/obj/structure/sign/warning/electric_shock, -/obj/effect/turf_decal/stripes/end{ - dir = 4 - }, -/obj/effect/decal/cleanable/dirt, -/obj/structure/cable/multilayer/multiz, -/turf/open/floor/plating, -/area/station/maintenance/tram/right) "hyK" = ( /obj/structure/window/reinforced/spawner/directional/north, -/obj/machinery/door/window/right/directional/east{ - base_state = "left"; - dir = 8; - icon_state = "left"; +/obj/machinery/door/window/left/directional/west{ name = "Fitness Ring" }, /turf/open/floor/iron/dark/smooth_corner, @@ -24266,6 +24308,10 @@ /obj/item/flashlight/lamp, /turf/open/floor/iron/dark, /area/station/service/janitor) +"hIt" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/cyan/hidden, +/turf/closed/wall/r_wall, +/area/station/engineering/atmos) "hIE" = ( /obj/structure/closet/secure_closet/engineering_electrical, /obj/effect/decal/cleanable/dirt, @@ -24492,23 +24538,6 @@ }, /turf/open/floor/engine/hull, /area/station/solars/starboard/fore) -"hNh" = ( -/obj/machinery/door/airlock/public/glass{ - name = "Escape Wing" - }, -/obj/machinery/door/firedoor, -/obj/effect/turf_decal/trimline/neutral/filled/line{ - dir = 1 - }, -/obj/effect/turf_decal/trimline/neutral/filled/line, -/obj/structure/cable, -/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/hallway/secondary/exit/departure_lounge) "hNo" = ( /obj/machinery/door/firedoor, /obj/structure/disposalpipe/segment, @@ -24534,7 +24563,7 @@ /area/station/service/library) "hNE" = ( /obj/effect/spawner/structure/window/reinforced, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/cyan/hidden, /turf/open/floor/plating, /area/station/engineering/atmos) "hNI" = ( @@ -24593,16 +24622,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/white, /area/station/medical/virology) -"hOy" = ( -/obj/structure/railing{ - dir = 1 - }, -/obj/effect/turf_decal/trimline/dark_red/warning{ - dir = 5 - }, -/obj/structure/transport/linear/public, -/turf/open/floor/plating/elevatorshaft, -/area/station/maintenance/tram/mid) "hOE" = ( /obj/effect/turf_decal/trimline/yellow/filled/line{ dir = 4 @@ -24788,12 +24807,19 @@ /area/station/security/brig) "hRK" = ( /obj/structure/bed, -/obj/item/bedsheet/dorms, +/obj/effect/spawner/random/bedsheet, /obj/effect/landmark/start/hangover, /obj/structure/sign/clock/directional/south, /obj/item/pillow/random, /turf/open/floor/carpet, /area/station/commons/dorms) +"hSm" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/light/small/dim/directional/north, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/catwalk_floor, +/area/station/maintenance/tram/mid) "hSs" = ( /obj/effect/turf_decal/trimline/brown/filled/corner, /obj/effect/turf_decal/trimline/brown/filled/corner{ @@ -24814,9 +24840,6 @@ c_tag = "Hallway - Central Escape Wing Entry" }, /obj/structure/cable, -/obj/structure/disposalpipe/segment{ - dir = 5 - }, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron, @@ -24915,8 +24938,7 @@ /obj/effect/turf_decal/trimline/brown/filled/line{ dir = 8 }, -/obj/machinery/door/window/left/directional/west{ - dir = 1; +/obj/machinery/door/window/left/directional/north{ name = "Terminal Access"; req_access = list("qm") }, @@ -25045,6 +25067,16 @@ }, /turf/open/floor/glass/reinforced, /area/station/science/genetics) +"hXW" = ( +/obj/effect/turf_decal/trimline/red/filled/line{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/neutral/filled/warning{ + dir = 1 + }, +/obj/machinery/transport/power_rectifier, +/turf/open/floor/iron, +/area/station/hallway/primary/tram/right) "hYd" = ( /obj/structure/lattice/catwalk, /obj/machinery/atmospherics/pipe/smart/simple/green/visible, @@ -25146,6 +25178,17 @@ "hZr" = ( /turf/closed/wall/r_wall, /area/station/engineering/atmos) +"hZv" = ( +/obj/structure/disposalpipe/segment, +/obj/effect/turf_decal/stripes/white/line{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/neutral/filled/line{ + dir = 4 + }, +/obj/item/radio/intercom/directional/east, +/turf/open/floor/iron, +/area/station/hallway/primary/tram/right) "hZA" = ( /obj/effect/decal/cleanable/dirt, /mob/living/basic/mouse, @@ -25446,6 +25489,7 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden, /turf/open/floor/iron, /area/station/engineering/atmos) "ifn" = ( @@ -25705,6 +25749,13 @@ }, /turf/open/floor/iron, /area/station/security/brig) +"ikI" = ( +/obj/effect/turf_decal/trimline/brown/filled/corner{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron, +/area/station/cargo/miningdock) "ikL" = ( /obj/structure/table/wood, /obj/item/storage/fancy/candle_box, @@ -25786,6 +25837,17 @@ }, /turf/open/floor/iron/dark, /area/station/medical/morgue) +"imm" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 6 + }, +/obj/structure/disposalpipe/trunk/multiz{ + dir = 4 + }, +/obj/effect/decal/cleanable/dirt, +/obj/structure/cable, +/turf/open/floor/catwalk_floor, +/area/station/maintenance/port/central) "imn" = ( /obj/structure/window/reinforced/spawner/directional/east, /obj/machinery/power/apc/auto_name/directional/south, @@ -25960,16 +26022,6 @@ }, /turf/open/floor/iron, /area/station/science/explab) -"iqe" = ( -/obj/machinery/door/airlock/hatch{ - name = "Emergency Exit" - }, -/obj/effect/decal/cleanable/dirt, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/open/floor/catwalk_floor, -/area/station/hallway/primary/tram/right) "iqg" = ( /obj/machinery/airalarm/directional/west, /turf/open/floor/iron/freezer, @@ -26169,6 +26221,15 @@ /obj/effect/turf_decal/stripes/white/full, /turf/open/floor/iron/white, /area/station/medical/medbay/central) +"iur" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/structure/disposalpipe/segment{ + dir = 10 + }, +/turf/open/floor/iron, +/area/station/hallway/secondary/exit/departure_lounge) "iuz" = ( /obj/machinery/door/airlock/external{ name = "Port Docking Bay 1"; @@ -26179,15 +26240,14 @@ /area/station/hallway/secondary/entry) "iuJ" = ( /obj/structure/bed/double, -/obj/item/bedsheet/dorms_double, +/obj/effect/spawner/random/bedsheet/double, /obj/structure/sign/clock/directional/north, /obj/item/pillow/random, /turf/open/floor/carpet, /area/station/commons/dorms) "iuM" = ( /obj/structure/table/wood/fancy/royalblue, -/obj/machinery/door/window{ - dir = 8; +/obj/machinery/door/window/left/directional/west{ name = "Secure Art Exhibition"; req_access = list("library") }, @@ -26357,6 +26417,13 @@ /obj/structure/closet/crate/mod, /turf/open/floor/iron/dark, /area/station/science/robotics/lab) +"ixy" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 8 + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/catwalk_floor, +/area/station/maintenance/tram/mid) "ixC" = ( /obj/machinery/computer/upload/ai{ dir = 8 @@ -26656,13 +26723,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron/dark, /area/station/commons/lounge) -"iEu" = ( -/obj/effect/turf_decal/trimline/neutral/filled/line{ - dir = 8 - }, -/obj/effect/spawner/random/vending/snackvend, -/turf/open/floor/iron, -/area/station/hallway/secondary/service) "iEz" = ( /obj/structure/lattice, /obj/machinery/camera/motion{ @@ -26691,7 +26751,8 @@ dir = 8 }, /obj/machinery/door/airlock/security/glass{ - name = "Isolation Cell D" + name = "Isolation Cell D"; + id = "Isolation_D" }, /obj/effect/mapping_helpers/airlock/access/all/security/brig, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -26954,17 +27015,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/white, /area/station/medical/virology) -"iKp" = ( -/obj/machinery/door/airlock/highsecurity{ - name = "AI Upload Access" - }, -/obj/effect/turf_decal/trimline/purple/filled/line{ - dir = 1 - }, -/obj/effect/mapping_helpers/airlock/access/all/command/ai_upload, -/obj/effect/landmark/navigate_destination/aiupload, -/turf/open/floor/iron/dark, -/area/station/ai_monitored/turret_protected/ai_upload) "iKr" = ( /obj/effect/turf_decal/bot_white/left, /obj/effect/turf_decal/tile/neutral/fourcorners, @@ -27026,6 +27076,13 @@ /obj/effect/turf_decal/stripes/asteroid/box, /turf/open/floor/plating/airless, /area/space/nearstation) +"iLY" = ( +/obj/structure/closet/secure_closet/miner, +/obj/effect/turf_decal/trimline/brown/filled/line{ + dir = 4 + }, +/turf/open/floor/iron, +/area/station/cargo/miningdock) "iMd" = ( /obj/structure/table, /obj/item/folder/white{ @@ -27132,7 +27189,6 @@ /turf/open/floor/iron, /area/station/commons/dorms) "iNR" = ( -/obj/item/radio/intercom/directional/west, /obj/effect/turf_decal/trimline/neutral/filled/line{ dir = 8 }, @@ -27140,8 +27196,8 @@ dir = 8 }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/sign/clock/directional/west, /turf/open/floor/iron, /area/station/service/janitor) "iNV" = ( @@ -27354,10 +27410,6 @@ /obj/structure/reagent_dispensers/foamtank, /turf/open/floor/plating, /area/station/engineering/engine_smes) -"iRg" = ( -/obj/structure/sign/warning/electric_shock, -/turf/closed/wall/r_wall, -/area/station/hallway/secondary/exit) "iRn" = ( /obj/effect/turf_decal/trimline/purple/filled/line{ dir = 8 @@ -27864,6 +27916,18 @@ }, /turf/open/floor/iron, /area/station/science/lab) +"iZK" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 6 + }, +/obj/structure/disposalpipe/trunk/multiz/down{ + dir = 4 + }, +/obj/effect/decal/cleanable/dirt, +/obj/structure/cable, +/obj/machinery/power/apc/auto_name/directional/west, +/turf/open/floor/catwalk_floor, +/area/station/hallway/primary/tram/left) "iZL" = ( /obj/structure/chair/stool/bar/directional/east, /obj/structure/cable, @@ -28004,10 +28068,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/checker, /area/station/commons/lounge) -"jce" = ( -/obj/effect/turf_decal/trimline/neutral/filled/corner, -/turf/open/floor/iron, -/area/station/hallway/secondary/service) "jcm" = ( /obj/structure/disposaloutlet{ dir = 8 @@ -28105,29 +28165,6 @@ /obj/structure/cable, /turf/open/floor/iron/dark, /area/station/command/bridge) -"jdG" = ( -/obj/effect/decal/cleanable/dirt, -/obj/machinery/door/airlock/external{ - autoclose = 0; - frequency = 1449; - id_tag = "middleleft_upper_eva_internal"; - name = "External Access" - }, -/obj/machinery/door_buttons/access_button{ - idDoor = "middleleft_upper_eva_internal"; - idSelf = "middleleft_upper_eva_airlock_control"; - name = "External Access Button"; - pixel_y = -24 - }, -/obj/effect/mapping_helpers/airlock/locked, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/open/floor/catwalk_floor, -/area/station/hallway/primary/tram/center) "jdN" = ( /obj/machinery/vending/tool, /obj/effect/turf_decal/trimline/yellow/filled/line{ @@ -28343,6 +28380,16 @@ }, /turf/open/floor/iron, /area/station/hallway/secondary/entry) +"jhn" = ( +/obj/effect/turf_decal/trimline/neutral/filled/line{ + dir = 8 + }, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/firealarm/directional/west, +/turf/open/floor/iron, +/area/station/hallway/secondary/exit) "jhs" = ( /obj/effect/turf_decal/trimline/red/filled/line{ dir = 5 @@ -28517,6 +28564,26 @@ /obj/structure/cable, /turf/open/floor/circuit, /area/station/ai_monitored/turret_protected/ai) +"jkn" = ( +/obj/machinery/door/airlock{ + name = "Custodial Closet" + }, +/obj/effect/turf_decal/trimline/neutral/filled/line{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/neutral/filled/line, +/obj/effect/turf_decal/trimline/purple/filled/warning, +/obj/effect/turf_decal/trimline/purple/filled/warning{ + dir = 1 + }, +/obj/machinery/door/firedoor, +/obj/effect/mapping_helpers/airlock/access/all/service/janitor, +/obj/structure/cable, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/iron, +/area/station/hallway/secondary/service) "jkt" = ( /turf/open/floor/carpet, /area/station/service/chapel) @@ -28690,8 +28757,7 @@ /turf/open/floor/plating, /area/station/cargo/lobby) "jnJ" = ( -/obj/machinery/door/window/brigdoor{ - dir = 4; +/obj/machinery/door/window/brigdoor/left/directional/east{ id = "crgcell"; name = "Cargo Cell"; req_access = list("security") @@ -28714,7 +28780,7 @@ /obj/structure/bed{ dir = 8 }, -/obj/item/bedsheet/dorms, +/obj/effect/spawner/random/bedsheet, /obj/effect/landmark/start/assistant, /obj/structure/sign/clock/directional/east, /obj/item/pillow/random, @@ -28834,6 +28900,14 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/white, /area/station/medical/medbay/central) +"jpR" = ( +/obj/structure/cable/multilayer/multiz, +/obj/effect/turf_decal/stripes/line{ + dir = 5 + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plating, +/area/station/maintenance/port/central) "jpV" = ( /obj/effect/turf_decal/trimline/purple/filled/line{ dir = 8 @@ -28914,14 +28988,22 @@ /obj/effect/turf_decal/trimline/neutral/filled/line{ dir = 4 }, -/obj/effect/turf_decal/trimline/red/corner{ - 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/turf_decal/trimline/red/filled/corner{ + dir = 4 + }, /turf/open/floor/iron, /area/station/hallway/secondary/exit/departure_lounge) +"jrz" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/light/small/dim/directional/north, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/catwalk_floor, +/area/station/hallway/primary/tram/center) "jrI" = ( /obj/structure/disposalpipe/trunk/multiz{ dir = 4 @@ -28941,6 +29023,14 @@ }, /turf/open/floor/iron/cafeteria, /area/station/command/heads_quarters/rd) +"jsx" = ( +/obj/machinery/conveyor{ + dir = 8; + id = "mining" + }, +/obj/machinery/digital_clock/directional/north, +/turf/open/floor/iron, +/area/station/cargo/miningfoundry) "jsy" = ( /obj/effect/turf_decal/siding/thinplating/dark{ dir = 9 @@ -29136,6 +29226,13 @@ /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, /turf/open/floor/iron, /area/station/hallway/secondary/service) +"jvA" = ( +/obj/effect/spawner/random/vending/colavend, +/obj/effect/turf_decal/trimline/neutral/filled/line{ + dir = 5 + }, +/turf/open/floor/iron, +/area/station/hallway/primary/tram/center) "jvE" = ( /obj/effect/turf_decal/trimline/red/filled/line{ dir = 1 @@ -29211,6 +29308,15 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/wood, /area/station/commons/dorms) +"jwy" = ( +/obj/machinery/airalarm/directional/east, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/railing/corner/end/flip{ + dir = 8 + }, +/turf/open/floor/iron, +/area/station/cargo/miningfoundry) "jwz" = ( /obj/effect/landmark/secequipment, /obj/effect/turf_decal/bot, @@ -29508,11 +29614,9 @@ "jBk" = ( /obj/effect/turf_decal/trimline/neutral/filled/corner, /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, +/obj/structure/disposalpipe/segment, /turf/open/floor/iron, /area/station/hallway/secondary/exit/departure_lounge) "jBn" = ( @@ -29685,18 +29789,6 @@ /obj/machinery/airalarm/directional/north, /turf/open/floor/iron, /area/station/commons/fitness/recreation) -"jEz" = ( -/obj/effect/turf_decal/bot, -/obj/item/mop, -/obj/effect/turf_decal/trimline/purple/filled/warning{ - dir = 5 - }, -/obj/structure/mop_bucket/janitorialcart, -/obj/effect/turf_decal/trimline/neutral/filled/line{ - dir = 5 - }, -/turf/open/floor/iron, -/area/station/service/janitor) "jEF" = ( /obj/effect/turf_decal/stripes/white/line{ dir = 8 @@ -29872,34 +29964,9 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron, /area/station/maintenance/port/central) -"jHj" = ( -/obj/structure/cable, -/obj/item/radio/intercom/directional/west, -/obj/structure/disposalpipe/segment{ - dir = 5 - }, -/turf/open/floor/iron, -/area/station/hallway/primary/tram/center) "jHr" = ( /turf/open/floor/wood, /area/station/commons/vacant_room/office) -"jHD" = ( -/obj/machinery/door/firedoor, -/obj/effect/turf_decal/trimline/neutral/filled/line{ - dir = 4 - }, -/obj/effect/turf_decal/trimline/neutral/filled/line{ - dir = 8 - }, -/obj/machinery/door/airlock/public/glass{ - name = "Command Wing Hallway" - }, -/obj/structure/disposalpipe/segment, -/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/hallway/secondary/command) "jHE" = ( /obj/effect/spawner/structure/window, /turf/open/floor/plating, @@ -30468,13 +30535,6 @@ }, /turf/open/floor/iron/white, /area/station/science/research) -"jUp" = ( -/obj/effect/turf_decal/trimline/neutral/filled/corner{ - dir = 8 - }, -/obj/structure/cable, -/turf/open/floor/iron, -/area/station/hallway/primary/tram/center) "jUz" = ( /obj/structure/table, /obj/item/stack/sheet/glass/fifty, @@ -30626,7 +30686,7 @@ /obj/effect/turf_decal/trimline/yellow/filled/corner{ dir = 1 }, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/visible, +/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden, /obj/structure/disposalpipe/segment, /obj/structure/cable, /turf/open/floor/iron, @@ -30647,21 +30707,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/wood/large, /area/station/service/library) -"jXA" = ( -/obj/effect/turf_decal/trimline/neutral/filled/line, -/obj/effect/turf_decal/trimline/neutral/filled/line{ - dir = 1 - }, -/obj/machinery/door/airlock/public/glass{ - name = "Primary Tool Storage" - }, -/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, -/obj/effect/landmark/navigate_destination/tools, -/turf/open/floor/iron, -/area/station/commons/storage/primary) "jXE" = ( /obj/machinery/atmospherics/pipe/smart/simple/yellow/visible, /turf/closed/wall/r_wall, @@ -30842,6 +30887,14 @@ "jYS" = ( /turf/closed/wall, /area/station/medical/chemistry) +"jYT" = ( +/obj/machinery/door/firedoor, +/obj/effect/turf_decal/trimline/neutral/filled/line{ + dir = 1 + }, +/obj/effect/turf_decal/stripes/white/full, +/turf/open/floor/iron, +/area/station/hallway/secondary/exit/departure_lounge) "jYU" = ( /obj/structure/transport/linear/public, /obj/effect/turf_decal/trimline/dark_red/warning{ @@ -30859,8 +30912,6 @@ dir = 1 }, /obj/effect/turf_decal/trimline/neutral/filled/line, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/light/directional/south, /turf/open/floor/iron, /area/station/hallway/secondary/exit/departure_lounge) @@ -31048,11 +31099,6 @@ }, /turf/open/floor/carpet, /area/station/service/chapel/monastery) -"kbZ" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/landmark/navigate_destination/disposals, -/turf/open/floor/iron/smooth, -/area/station/maintenance/disposal) "kcm" = ( /obj/effect/turf_decal/trimline/neutral/filled/corner{ dir = 4 @@ -31133,10 +31179,7 @@ name = "Atmospherics Blast Door" }, /obj/effect/landmark/navigate_destination/atmos, -/obj/machinery/door/window/left/directional/west{ - base_state = "right"; - dir = 4; - icon_state = "right"; +/obj/machinery/door/window/right/directional/east{ name = "Atmospherics Front Desk"; req_access = list("atmospherics") }, @@ -31186,6 +31229,16 @@ }, /turf/open/floor/iron/dark, /area/station/engineering/storage/tech) +"kdd" = ( +/obj/machinery/door/airlock/hatch{ + name = "Emergency Exit" + }, +/obj/effect/decal/cleanable/dirt, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/catwalk_floor, +/area/station/hallway/primary/tram/left) "kdr" = ( /obj/effect/turf_decal/trimline/red/filled/line{ dir = 8 @@ -31202,6 +31255,16 @@ }, /turf/open/floor/iron, /area/station/engineering/atmos) +"kdz" = ( +/obj/machinery/door/airlock/hatch{ + name = "Emergency Exit" + }, +/obj/effect/decal/cleanable/dirt, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/catwalk_floor, +/area/station/hallway/primary/tram/right) "kdI" = ( /obj/structure/cable, /obj/structure/disposalpipe/segment, @@ -31263,6 +31326,10 @@ /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, /turf/open/floor/circuit/green, /area/station/ai_monitored/turret_protected/ai_upload) +"keN" = ( +/obj/item/radio/intercom/directional/east, +/turf/open/floor/iron, +/area/station/hallway/primary/tram/center) "keQ" = ( /obj/machinery/power/apc/auto_name/directional/north, /obj/structure/cable, @@ -31319,13 +31386,6 @@ "kfO" = ( /turf/open/floor/plating, /area/station/cargo/drone_bay) -"kfR" = ( -/obj/machinery/holopad, -/obj/effect/turf_decal/bot, -/obj/structure/cable, -/obj/effect/landmark/navigate_destination/dorms, -/turf/open/floor/iron, -/area/station/commons/dorms) "kgd" = ( /obj/effect/turf_decal/siding/wood{ dir = 4 @@ -31425,6 +31485,17 @@ /obj/effect/landmark/start/hangover, /turf/open/floor/iron/white, /area/station/medical/medbay/lobby) +"kip" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 8 + }, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron, +/area/station/cargo/miningdock) "kis" = ( /obj/machinery/computer/atmos_alert{ dir = 8 @@ -31436,6 +31507,11 @@ /obj/structure/sign/clock/directional/north, /turf/open/floor/iron/dark, /area/station/engineering/engine_smes) +"kix" = ( +/obj/structure/cable, +/obj/structure/extinguisher_cabinet/directional/north, +/turf/open/floor/catwalk_floor, +/area/station/hallway/primary/tram/right) "kiC" = ( /obj/structure/table/reinforced, /obj/structure/window/reinforced/spawner/directional/south, @@ -31698,6 +31774,16 @@ }, /turf/open/floor/iron/dark, /area/station/engineering/storage/tech) +"kmb" = ( +/obj/machinery/door/airlock/engineering/glass{ + name = "Tram Mechanical Room" + }, +/obj/effect/decal/cleanable/dirt, +/obj/effect/mapping_helpers/airlock/access/all/engineering/general, +/obj/effect/mapping_helpers/airlock/unres, +/obj/structure/cable, +/turf/open/floor/catwalk_floor, +/area/station/hallway/primary/tram/center) "kmf" = ( /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, /obj/effect/turf_decal/tile/neutral{ @@ -31739,13 +31825,6 @@ /obj/machinery/airalarm/directional/south, /turf/open/floor/iron, /area/station/security/brig) -"kmH" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/light/small/dim/directional/north, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/catwalk_floor, -/area/station/maintenance/tram/mid) "kmM" = ( /obj/effect/turf_decal/trimline/yellow/filled/line{ dir = 10 @@ -31840,7 +31919,7 @@ /turf/open/floor/iron, /area/station/engineering/atmos) "kpq" = ( -/obj/machinery/atmospherics/pipe/color_adapter, +/obj/machinery/atmospherics/pipe/smart/simple/cyan/hidden, /turf/closed/wall/r_wall, /area/station/engineering/atmos) "kpt" = ( @@ -31881,15 +31960,6 @@ }, /turf/open/floor/iron, /area/station/security/courtroom) -"kqa" = ( -/obj/effect/turf_decal/trimline/neutral/filled/line{ - dir = 4 - }, -/obj/effect/turf_decal/trimline/purple/filled/warning{ - dir = 4 - }, -/turf/open/floor/iron, -/area/station/service/janitor) "kqf" = ( /obj/effect/turf_decal/stripes/corner{ dir = 8 @@ -31964,6 +32034,27 @@ }, /turf/open/floor/iron, /area/station/security/prison/workout) +"krh" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/door/airlock/external{ + autoclose = 0; + frequency = 1449; + id_tag = "middleright_upper_eva_internal"; + name = "External Access" + }, +/obj/machinery/door_buttons/access_button{ + idDoor = "middleright_upper_eva_internal"; + idSelf = "middleright_upper_eva_airlock_control"; + name = "External Access Button"; + pixel_y = -24 + }, +/obj/effect/mapping_helpers/airlock/locked, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/catwalk_floor, +/area/station/hallway/primary/tram/center) "krk" = ( /obj/structure/floodlight_frame, /obj/machinery/light/directional/north, @@ -32011,6 +32102,27 @@ /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, /turf/open/floor/iron, /area/station/security/brig) +"krM" = ( +/obj/machinery/camera{ + c_tag = "Hallway - Central Tram Platform South-East"; + dir = 6 + }, +/obj/machinery/firealarm/directional/east, +/obj/effect/turf_decal/stripes/white/line{ + dir = 1 + }, +/turf/open/floor/iron, +/area/station/hallway/primary/tram/center) +"krV" = ( +/obj/structure/cable, +/obj/structure/disposalpipe/segment{ + dir = 10 + }, +/obj/effect/turf_decal/trimline/neutral/filled/corner{ + dir = 1 + }, +/turf/open/floor/iron, +/area/station/hallway/primary/tram/center) "ksa" = ( /obj/effect/turf_decal/trimline/red/filled/corner{ dir = 4 @@ -32305,6 +32417,13 @@ }, /turf/open/floor/iron/cafeteria, /area/station/command/heads_quarters/rd) +"kxV" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/turf/open/floor/iron, +/area/station/cargo/miningfoundry) "kye" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/cafeteria, @@ -32382,6 +32501,16 @@ "kzx" = ( /turf/open/floor/iron, /area/station/commons/storage/primary) +"kzC" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/disposalpipe/segment{ + dir = 6 + }, +/obj/effect/turf_decal/trimline/neutral/filled/corner, +/obj/effect/turf_decal/trimline/purple/corner, +/turf/open/floor/iron, +/area/station/service/janitor) "kzQ" = ( /obj/effect/turf_decal/trimline/neutral/filled/line, /turf/open/floor/iron, @@ -33237,6 +33366,13 @@ }, /turf/open/floor/iron, /area/station/science/ordnance/testlab) +"kNG" = ( +/obj/structure/cable, +/obj/effect/turf_decal/trimline/neutral/filled/corner{ + dir = 4 + }, +/turf/open/floor/iron, +/area/station/hallway/primary/tram/center) "kNM" = ( /obj/machinery/dna_scannernew, /obj/effect/turf_decal/tile/dark_green/fourcorners, @@ -33488,6 +33624,11 @@ }, /turf/open/floor/iron, /area/station/engineering/atmos) +"kSI" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/light/small/dim/directional/south, +/turf/open/floor/iron/smooth, +/area/station/hallway/primary/tram/center) "kSL" = ( /obj/effect/turf_decal/trimline/brown/filled/corner{ dir = 8 @@ -34098,12 +34239,10 @@ /area/station/hallway/secondary/exit) "lcS" = ( /obj/structure/table/reinforced, -/obj/machinery/door/window/right/directional/west{ - dir = 2; +/obj/machinery/door/window/right/directional/south{ name = "Access Queue" }, -/obj/machinery/door/window/brigdoor/left/directional/east{ - dir = 1; +/obj/machinery/door/window/brigdoor/left/directional/north{ name = "Access Desk"; req_access = list("hop") }, @@ -34193,6 +34332,19 @@ }, /turf/open/floor/iron, /area/station/hallway/secondary/entry) +"leX" = ( +/obj/effect/decal/cleanable/dirt, +/obj/structure/disposalpipe/sorting/mail{ + dir = 4 + }, +/obj/structure/cable, +/obj/effect/mapping_helpers/mail_sorting/medbay/chemistry, +/obj/effect/mapping_helpers/mail_sorting/medbay/cmo_office, +/obj/effect/mapping_helpers/mail_sorting/medbay/general, +/obj/effect/mapping_helpers/mail_sorting/medbay/virology, +/obj/machinery/light/small/dim/directional/north, +/turf/open/floor/catwalk_floor, +/area/station/hallway/primary/tram/center) "lfq" = ( /obj/effect/turf_decal/trimline/white/warning{ dir = 4 @@ -34374,22 +34526,6 @@ }, /turf/open/floor/iron, /area/station/hallway/primary/tram/right) -"ljo" = ( -/obj/structure/table, -/obj/item/grenade/chem_grenade/cleaner, -/obj/item/grenade/chem_grenade/cleaner, -/obj/item/grenade/chem_grenade/cleaner, -/obj/item/reagent_containers/spray/cleaner, -/obj/machinery/newscaster/directional/south, -/obj/effect/turf_decal/trimline/neutral/filled/line, -/obj/effect/turf_decal/trimline/purple/filled/warning, -/obj/item/paper_bin{ - pixel_x = -3; - pixel_y = 7 - }, -/obj/item/key/janitor, -/turf/open/floor/iron, -/area/station/service/janitor) "ljw" = ( /obj/structure/chair{ dir = 4 @@ -34420,12 +34556,6 @@ /obj/structure/disposalpipe/segment, /turf/open/floor/iron/white, /area/station/science/auxlab/firing_range) -"ljU" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/open/floor/iron, -/area/station/cargo/miningdock) "ljZ" = ( /obj/machinery/atmospherics/components/unary/vent_pump/siphon/monitored/oxygen_output{ dir = 1 @@ -34697,6 +34827,10 @@ /obj/effect/turf_decal/tile/bar/opposingcorners, /turf/open/floor/iron, /area/station/cargo/miningdock/cafeteria) +"loc" = ( +/obj/structure/sign/warning/electric_shock, +/turf/closed/wall, +/area/station/hallway/primary/tram/left) "lof" = ( /obj/item/toy/balloon, /turf/open/floor/eighties/red, @@ -34706,6 +34840,12 @@ /obj/effect/turf_decal/tile/neutral/fourcorners, /turf/open/floor/iron/dark, /area/station/commons/fitness) +"loj" = ( +/obj/structure/ladder, +/obj/machinery/light/small/dim/directional/east, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/iron/smooth, +/area/station/maintenance/tram/mid) "lox" = ( /obj/structure/window/reinforced/spawner/directional/north, /obj/effect/turf_decal/stripes/line{ @@ -34832,13 +34972,6 @@ /obj/effect/mapping_helpers/airlock/access/all/science/robotics, /turf/open/floor/catwalk_floor, /area/station/maintenance/department/science) -"lqp" = ( -/obj/machinery/door/airlock/hatch{ - name = "Emergency Exit" - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/catwalk_floor, -/area/station/hallway/primary/tram/right) "lqu" = ( /obj/effect/spawner/structure/window/reinforced, /obj/machinery/door/poddoor/shutters/preopen{ @@ -35035,6 +35168,10 @@ }, /turf/open/floor/iron/white, /area/station/medical/medbay/central) +"ltd" = ( +/obj/structure/disposalpipe/segment, +/turf/open/floor/catwalk_floor, +/area/station/hallway/primary/tram/center) "ltl" = ( /obj/structure/cable, /obj/structure/disposalpipe/sorting/mail/flip{ @@ -35385,13 +35522,13 @@ /turf/open/floor/iron/white, /area/station/science/xenobiology) "lyR" = ( -/obj/effect/turf_decal/trimline/neutral/filled/line{ - dir = 10 - }, -/obj/structure/chair{ +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/structure/disposalpipe/segment{ dir = 4 }, -/obj/effect/landmark/start/hangover, +/obj/effect/turf_decal/trimline/neutral/filled/line, /turf/open/floor/iron, /area/station/hallway/secondary/exit/departure_lounge) "lyV" = ( @@ -35914,6 +36051,12 @@ }, /turf/open/floor/catwalk_floor, /area/station/hallway/primary/tram/left) +"lIR" = ( +/obj/machinery/camera/directional/south{ + c_tag = "Hallway - Upper East Power Hatch" + }, +/turf/open/openspace, +/area/station/hallway/secondary/exit) "lIS" = ( /obj/effect/turf_decal/siding/thinplating/dark{ dir = 4 @@ -36027,7 +36170,7 @@ /obj/structure/bed{ dir = 8 }, -/obj/item/bedsheet/dorms, +/obj/effect/spawner/random/bedsheet, /obj/effect/landmark/start/assistant, /obj/structure/sign/clock/directional/east, /obj/item/pillow/random, @@ -36047,16 +36190,6 @@ /obj/machinery/light/directional/south, /turf/open/floor/iron, /area/station/cargo/storage) -"lLA" = ( -/obj/machinery/door/airlock/engineering{ - name = "Tram Mechanical Room" - }, -/obj/effect/decal/cleanable/dirt, -/obj/effect/mapping_helpers/airlock/unres{ - dir = 4 - }, -/turf/open/floor/iron/smooth, -/area/station/maintenance/tram/right) "lLB" = ( /obj/structure/rack, /obj/item/reagent_containers/cup/bottle/ethanol{ @@ -36260,6 +36393,12 @@ }, /turf/open/floor/iron, /area/station/security/courtroom) +"lOx" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/catwalk_floor, +/area/station/maintenance/tram/mid) "lOC" = ( /obj/machinery/door/window/brigdoor/right/directional/east{ id = "scicell"; @@ -36373,10 +36512,7 @@ location = "QM #2" }, /obj/effect/turf_decal/tile/brown/fourcorners, -/mob/living/simple_animal/bot/mulebot{ - home_destination = "QM #2"; - suffix = "#2" - }, +/mob/living/simple_animal/bot/mulebot, /turf/open/floor/iron, /area/station/cargo/warehouse) "lQH" = ( @@ -36426,14 +36562,9 @@ /turf/open/floor/iron/smooth, /area/station/hallway/primary/tram/right) "lRx" = ( -/obj/structure/chair{ +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ dir = 1 }, -/obj/effect/turf_decal/trimline/neutral/filled/line, -/obj/effect/landmark/start/hangover, -/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/hallway/secondary/exit/departure_lounge) "lRC" = ( @@ -37212,6 +37343,13 @@ }, /turf/open/floor/iron, /area/station/security/courtroom) +"meg" = ( +/obj/machinery/light/small/directional/west, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/turf/open/floor/iron, +/area/station/cargo/miningfoundry) "men" = ( /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ dir = 4 @@ -37362,6 +37500,17 @@ /obj/structure/cable, /turf/open/floor/circuit/green, /area/station/ai_monitored/turret_protected/ai) +"mgj" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 1 + }, +/obj/effect/turf_decal/tile/brown/opposingcorners, +/obj/machinery/light_switch/directional/south{ + pixel_x = 8; + pixel_y = -23 + }, +/turf/open/floor/iron, +/area/station/cargo/miningfoundry) "mgq" = ( /obj/item/radio/intercom/directional/east, /turf/open/floor/iron/dark/side{ @@ -37532,29 +37681,6 @@ "mjM" = ( /turf/closed/wall, /area/station/security/medical) -"mjQ" = ( -/obj/effect/turf_decal/trimline/neutral/filled/corner{ - dir = 4 - }, -/obj/effect/turf_decal/trimline/neutral/filled/corner{ - dir = 1 - }, -/obj/effect/turf_decal/trimline/purple/corner{ - dir = 4 - }, -/obj/effect/turf_decal/trimline/purple/corner{ - dir = 1 - }, -/obj/structure/cable, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/effect/turf_decal/trimline/neutral/filled/line, -/obj/effect/turf_decal/trimline/purple/filled/warning, -/obj/machinery/light/directional/south, -/obj/effect/landmark/navigate_destination/janitor, -/turf/open/floor/iron, -/area/station/service/janitor) "mki" = ( /obj/machinery/door/airlock/command{ name = "Head of Personnel" @@ -37729,14 +37855,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron, /area/station/cargo/miningdock) -"mod" = ( -/obj/structure/railing, -/obj/effect/turf_decal/trimline/dark_red/warning{ - dir = 6 - }, -/obj/structure/transport/linear/public, -/turf/open/floor/plating/elevatorshaft, -/area/station/maintenance/tram/mid) "mon" = ( /mob/living/basic/sloth/paperwork, /turf/open/floor/glass, @@ -37893,17 +38011,13 @@ }, /turf/open/floor/iron, /area/station/hallway/secondary/entry) -"mqS" = ( -/obj/machinery/door/airlock/engineering{ - name = "Tram Mechanical Room" - }, -/obj/effect/decal/cleanable/dirt, -/obj/effect/mapping_helpers/airlock/access/all/engineering/general, -/obj/effect/mapping_helpers/airlock/unres{ +"mqT" = ( +/obj/effect/turf_decal/stripes/line{ dir = 1 }, -/turf/open/floor/iron/smooth, -/area/station/maintenance/tram/mid) +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/iron, +/area/station/cargo/miningfoundry) "mrb" = ( /obj/structure/table/wood, /obj/item/folder/yellow, @@ -37966,6 +38080,16 @@ }, /turf/open/floor/iron/checker, /area/station/commons/lounge) +"mrT" = ( +/obj/structure/railing{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/dark_red/warning{ + dir = 5 + }, +/obj/structure/transport/linear/public, +/turf/open/floor/plating/elevatorshaft, +/area/station/maintenance/tram/mid) "msg" = ( /obj/structure/closet/secure_closet/brig/genpop, /obj/effect/turf_decal/bot, @@ -38163,14 +38287,6 @@ /obj/structure/cable, /turf/open/floor/circuit, /area/station/ai_monitored/turret_protected/aisat_interior) -"mwN" = ( -/obj/effect/decal/cleanable/dirt, -/obj/machinery/light/small/dim/directional/north, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/open/floor/catwalk_floor, -/area/station/hallway/primary/tram/center) "mxf" = ( /obj/effect/turf_decal/trimline/purple/filled/line{ dir = 10 @@ -38507,15 +38623,6 @@ }, /turf/open/floor/iron, /area/station/security/courtroom/holding) -"mDP" = ( -/obj/structure/cable, -/obj/effect/turf_decal/trimline/yellow/filled/line, -/obj/effect/turf_decal/trimline/neutral/filled/warning, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/open/floor/iron, -/area/station/hallway/primary/tram/center) "mDS" = ( /obj/structure/cable, /obj/structure/disposalpipe/segment{ @@ -38697,6 +38804,15 @@ "mHc" = ( /turf/open/floor/iron/checker, /area/station/commons/lounge) +"mHj" = ( +/obj/effect/decal/cleanable/dirt, +/obj/structure/cable, +/obj/structure/disposalpipe/segment{ + dir = 5 + }, +/obj/machinery/light/small/dim/directional/south, +/turf/open/floor/catwalk_floor, +/area/station/hallway/primary/tram/center) "mHm" = ( /obj/effect/turf_decal/trimline/neutral/warning, /obj/structure/table/reinforced, @@ -38708,6 +38824,17 @@ /obj/structure/window/reinforced/spawner/directional/west, /turf/open/floor/iron/dark, /area/station/medical/morgue) +"mHt" = ( +/obj/machinery/door/airlock/engineering{ + name = "Tram Mechanical Room" + }, +/obj/effect/decal/cleanable/dirt, +/obj/effect/mapping_helpers/airlock/access/all/engineering/general, +/obj/effect/mapping_helpers/airlock/unres{ + dir = 1 + }, +/turf/open/floor/iron/smooth, +/area/station/maintenance/tram/mid) "mHw" = ( /obj/structure/lattice, /obj/machinery/atmospherics/pipe/smart/simple/dark/visible, @@ -38800,6 +38927,15 @@ dir = 8 }, /area/station/command/bridge) +"mIF" = ( +/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/opposingcorners{ + dir = 1 + }, +/turf/open/floor/iron, +/area/station/cargo/miningfoundry) "mIN" = ( /obj/structure/table, /obj/item/radio/intercom/prison, @@ -38807,6 +38943,17 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron, /area/station/security/prison) +"mIQ" = ( +/obj/structure/cable/multilayer/multiz, +/obj/effect/turf_decal/stripes/end{ + dir = 4 + }, +/obj/effect/decal/cleanable/dirt, +/obj/structure/railing{ + dir = 1 + }, +/turf/open/floor/plating, +/area/station/hallway/secondary/exit) "mIU" = ( /obj/effect/turf_decal/bot_white/right, /obj/effect/turf_decal/tile/neutral/fourcorners, @@ -39058,16 +39205,6 @@ /obj/machinery/photocopier, /turf/open/floor/iron/grimy, /area/station/service/library/lounge) -"mNZ" = ( -/obj/effect/turf_decal/trimline/neutral/filled/line{ - dir = 4 - }, -/obj/machinery/camera/directional/east{ - c_tag = "Hallway - Service Wing Left Stairway" - }, -/obj/machinery/light/directional/east, -/turf/open/floor/iron, -/area/station/hallway/secondary/service) "mOi" = ( /obj/effect/turf_decal/siding/wood{ dir = 8 @@ -39271,27 +39408,17 @@ /obj/structure/sign/clock/directional/east, /turf/open/floor/carpet, /area/station/medical/psychology) +"mTg" = ( +/obj/effect/decal/cleanable/rubble, +/obj/structure/closet/crate, +/turf/open/floor/iron, +/area/station/cargo/miningfoundry) "mTh" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/chapel{ dir = 6 }, /area/station/service/chapel) -"mTw" = ( -/obj/machinery/door/airlock/engineering{ - name = "Tram Mechanical Room" - }, -/obj/structure/disposalpipe/segment, -/obj/effect/mapping_helpers/airlock/access/all/engineering/general, -/obj/effect/decal/cleanable/dirt, -/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/unres{ - dir = 1 - }, -/turf/open/floor/catwalk_floor, -/area/station/maintenance/port/central) "mTR" = ( /obj/effect/turf_decal/stripes/line{ dir = 4 @@ -39344,10 +39471,7 @@ /area/station/service/chapel) "mVS" = ( /obj/structure/window/reinforced/spawner/directional/south, -/obj/machinery/door/window/right/directional/east{ - base_state = "left"; - dir = 8; - icon_state = "left"; +/obj/machinery/door/window/left/directional/west{ name = "Fitness Ring" }, /turf/open/floor/iron/dark/smooth_corner{ @@ -39448,6 +39572,12 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/engineering/atmos) +"mXI" = ( +/obj/structure/cable, +/obj/machinery/power/apc/auto_name/directional/north, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/catwalk_floor, +/area/station/hallway/primary/tram/center) "mXU" = ( /obj/structure/grille, /turf/open/floor/plating/airless, @@ -39522,18 +39652,6 @@ /obj/machinery/atmospherics/pipe/bridge_pipe/cyan/visible, /turf/open/floor/iron, /area/station/engineering/atmos) -"mZg" = ( -/obj/machinery/door_buttons/airlock_controller{ - idExterior = "middleright_lower_upper_eva_external"; - idInterior = "middleright_lower_upper_eva_internal"; - idSelf = "middleright_lower_upper_eva_airlock_control"; - name = "External Access Console"; - pixel_y = -24 - }, -/obj/structure/ladder, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/smooth, -/area/station/maintenance/tram/mid) "mZt" = ( /obj/effect/turf_decal/tile/neutral{ dir = 4 @@ -39793,6 +39911,23 @@ }, /turf/open/floor/catwalk_floor, /area/station/command/gateway) +"neh" = ( +/obj/structure/closet/l3closet/janitor, +/obj/effect/turf_decal/trimline/purple/filled/warning{ + dir = 10 + }, +/obj/item/restraints/legcuffs/beartrap, +/obj/item/restraints/legcuffs/beartrap, +/obj/machinery/light_switch/directional/east{ + pixel_x = 23; + pixel_y = 8 + }, +/obj/effect/turf_decal/trimline/neutral/filled/line{ + dir = 10 + }, +/obj/item/radio/intercom/directional/south, +/turf/open/floor/iron, +/area/station/service/janitor) "nel" = ( /obj/effect/turf_decal/trimline/neutral/filled/line{ dir = 4 @@ -39909,10 +40044,6 @@ "ngp" = ( /turf/closed/wall, /area/station/tcommsat/computer) -"ngr" = ( -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/smooth, -/area/station/hallway/secondary/exit) "ngv" = ( /obj/structure/cable, /obj/structure/disposalpipe/segment, @@ -40237,17 +40368,12 @@ /obj/machinery/camera/directional/east{ c_tag = "Hallway - Engineering Entry East" }, -/obj/machinery/atmospherics/components/unary/portables_connector/layer4{ - dir = 4 +/obj/machinery/atmospherics/components/unary/portables_connector/visible{ + dir = 4; + name = "Oxygen Tank Injection Port" }, /turf/open/floor/iron, /area/station/hallway/secondary/construction/engineering) -"nkw" = ( -/obj/effect/decal/cleanable/dirt, -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/turf/open/floor/catwalk_floor, -/area/station/maintenance/tram/mid) "nky" = ( /obj/machinery/conveyor{ dir = 8; @@ -40563,8 +40689,7 @@ /obj/effect/turf_decal/trimline/brown/filled/line{ dir = 8 }, -/obj/machinery/door/window/left/directional/west{ - dir = 1; +/obj/machinery/door/window/left/directional/north{ name = "Cargo Desk"; req_access = list("cargo") }, @@ -40822,6 +40947,14 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/wood, /area/station/commons/dorms) +"nvp" = ( +/obj/effect/spawner/random/vending/snackvend, +/obj/effect/turf_decal/trimline/neutral/filled/line{ + dir = 4 + }, +/obj/machinery/light/directional/east, +/turf/open/floor/iron, +/area/station/hallway/primary/tram/center) "nvA" = ( /obj/effect/turf_decal/trimline/brown/filled/corner{ dir = 4 @@ -40938,6 +41071,10 @@ }, /turf/open/floor/iron, /area/station/hallway/secondary/exit) +"nxN" = ( +/obj/item/radio/intercom/directional/west, +/turf/open/floor/iron, +/area/station/cargo/miningfoundry) "nxT" = ( /obj/effect/turf_decal/trimline/yellow/filled/line, /turf/open/floor/iron, @@ -41037,8 +41174,7 @@ id = "Xenolab"; name = "Test Chamber Blast Door" }, -/obj/machinery/door/window/left/directional/south{ - dir = 1; +/obj/machinery/door/window/left/directional/north{ name = "Maximum Security Test Chamber"; req_access = list("xenobiology") }, @@ -41066,10 +41202,32 @@ /obj/structure/cable, /turf/open/floor/iron/white, /area/station/science/genetics) +"nzx" = ( +/obj/machinery/door/airlock/engineering{ + name = "Power Access Hatch" + }, +/obj/effect/decal/cleanable/dirt, +/obj/effect/mapping_helpers/airlock/access/all/engineering/general, +/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/hallway/secondary/exit) "nzz" = ( /obj/effect/turf_decal/trimline/red/filled/line, /turf/open/floor/iron/showroomfloor, /area/station/security/warden) +"nzF" = ( +/obj/effect/turf_decal/tile/brown/fourcorners, +/obj/machinery/conveyor_switch/oneway{ + id = "mining"; + dir = 1 + }, +/obj/structure/railing{ + dir = 1 + }, +/turf/open/floor/iron, +/area/station/cargo/miningfoundry) "nzH" = ( /obj/effect/turf_decal/trimline/neutral/filled/line{ dir = 8 @@ -41157,6 +41315,23 @@ /obj/structure/disposalpipe/segment, /turf/open/floor/iron, /area/station/cargo/lobby) +"nAT" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/door/airlock/external{ + autoclose = 0; + frequency = 1449; + id_tag = "middleleft_lower_eva_internal"; + name = "External Access" + }, +/obj/machinery/door_buttons/access_button{ + idDoor = "middleleft_lower_eva_internal"; + idSelf = "middleleft_lower_eva_airlock_control"; + name = "External Access Button"; + pixel_y = 24 + }, +/obj/effect/mapping_helpers/airlock/locked, +/turf/open/floor/catwalk_floor, +/area/station/hallway/primary/tram/center) "nBj" = ( /obj/structure/cable, /obj/structure/disposalpipe/segment, @@ -41221,14 +41396,6 @@ }, /turf/open/floor/iron, /area/station/security/brig) -"nCJ" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ - dir = 1 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/catwalk_floor, -/area/station/maintenance/tram/mid) "nDj" = ( /obj/effect/turf_decal/trimline/red/filled/line{ dir = 1 @@ -41456,6 +41623,13 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/security/checkpoint/science) +"nHA" = ( +/obj/structure/transport/linear/public, +/obj/effect/turf_decal/caution/stand_clear/red{ + dir = 4 + }, +/turf/open/floor/plating/elevatorshaft, +/area/station/maintenance/tram/mid) "nHM" = ( /obj/effect/turf_decal/caution/stand_clear/white{ dir = 4 @@ -41505,10 +41679,7 @@ location = "QM #6" }, /obj/effect/turf_decal/tile/brown/fourcorners, -/mob/living/simple_animal/bot/mulebot{ - home_destination = "QM #6"; - suffix = "#6" - }, +/mob/living/simple_animal/bot/mulebot, /turf/open/floor/iron, /area/station/cargo/warehouse) "nIQ" = ( @@ -41541,9 +41712,10 @@ /turf/open/floor/plating, /area/station/maintenance/tram/left) "nJx" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/cable, +/obj/structure/railing{ + dir = 1 + }, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, /turf/open/floor/iron, /area/station/hallway/secondary/exit/departure_lounge) "nJF" = ( @@ -41844,6 +42016,16 @@ }, /turf/open/floor/iron, /area/station/security/prison/safe) +"nOo" = ( +/obj/machinery/door/airlock/engineering{ + name = "Tram Mechanical Room" + }, +/obj/effect/decal/cleanable/dirt, +/obj/effect/mapping_helpers/airlock/unres{ + dir = 4 + }, +/turf/open/floor/iron/smooth, +/area/station/maintenance/tram/right) "nOq" = ( /obj/effect/landmark/event_spawn, /turf/open/floor/iron, @@ -41926,12 +42108,9 @@ /turf/open/floor/iron, /area/station/hallway/secondary/construction/engineering) "nQq" = ( -/obj/structure/chair{ - dir = 1 - }, -/obj/effect/turf_decal/trimline/neutral/filled/line, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /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/hallway/secondary/exit/departure_lounge) "nQr" = ( @@ -42331,6 +42510,12 @@ }, /turf/open/floor/iron, /area/station/command/teleporter) +"nXb" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/railing, +/turf/open/floor/iron, +/area/station/cargo/miningfoundry) "nXh" = ( /obj/effect/turf_decal/trimline/neutral/warning{ dir = 1 @@ -42695,10 +42880,6 @@ /obj/machinery/reagentgrinder, /turf/open/floor/wood, /area/station/service/bar/backroom) -"ocw" = ( -/obj/structure/disposalpipe/segment, -/turf/open/floor/catwalk_floor, -/area/station/hallway/primary/tram/center) "ocK" = ( /obj/effect/turf_decal/trimline/yellow/filled/line, /obj/structure/sign/warning/secure_area{ @@ -43200,6 +43381,15 @@ /obj/effect/turf_decal/trimline/dark_blue/corner, /turf/open/floor/iron/dark, /area/station/command/heads_quarters/hop) +"omN" = ( +/obj/machinery/door/poddoor/preopen{ + id = "atmos"; + name = "Atmospherics Blast Door" + }, +/obj/effect/turf_decal/delivery, +/obj/machinery/atmospherics/pipe/smart/simple/cyan/hidden, +/turf/open/floor/iron, +/area/station/engineering/atmos) "onc" = ( /obj/effect/turf_decal/trimline/neutral/filled/corner{ dir = 4 @@ -43558,15 +43748,10 @@ /turf/open/floor/engine/cult, /area/station/service/library) "ovi" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/cyan/hidden, +/obj/machinery/meter, /turf/closed/wall/r_wall, /area/station/engineering/atmos) -"ovk" = ( -/obj/structure/ladder, -/obj/machinery/light/small/dim/directional/east, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/smooth, -/area/station/maintenance/tram/mid) "ovC" = ( /obj/structure/railing/corner{ dir = 4 @@ -43801,6 +43986,17 @@ "oAV" = ( /turf/closed/wall, /area/station/cargo/office) +"oAY" = ( +/obj/machinery/camera/directional/west{ + c_tag = "Hallway - Starboard Tram Platform North-West" + }, +/obj/structure/extinguisher_cabinet/directional/west, +/obj/structure/disposalpipe/segment{ + dir = 9 + }, +/obj/effect/turf_decal/stripes/white/line, +/turf/open/floor/iron, +/area/station/hallway/primary/tram/right) "oBc" = ( /obj/structure/rack, /obj/effect/turf_decal/stripes/corner, @@ -43894,13 +44090,19 @@ }, /turf/open/floor/iron, /area/station/hallway/primary/tram/left) +"oDs" = ( +/obj/structure/cable, +/obj/item/radio/intercom/directional/west, +/obj/structure/disposalpipe/segment{ + dir = 5 + }, +/turf/open/floor/iron, +/area/station/hallway/primary/tram/center) "oDH" = ( /obj/structure/table/wood, /obj/item/folder/blue, /obj/item/stamp/head/captain, -/obj/machinery/door/window{ - base_state = "right"; - icon_state = "right"; +/obj/machinery/door/window/right/directional/south{ name = "Captain's Desk"; req_access = list("captain") }, @@ -44021,6 +44223,15 @@ }, /turf/open/floor/iron, /area/station/cargo/office) +"oGG" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/iron, +/area/station/hallway/secondary/exit) "oGJ" = ( /turf/closed/mineral/random/stationside/asteroid/porus, /area/station/medical/chemistry) @@ -44057,17 +44268,6 @@ /obj/structure/cable, /turf/open/floor/plating, /area/station/engineering/supermatter/room) -"oHK" = ( -/obj/machinery/camera{ - c_tag = "Hallway - Central Tram Platform South-East"; - dir = 6 - }, -/obj/machinery/firealarm/directional/east, -/obj/effect/turf_decal/stripes/white/line{ - dir = 1 - }, -/turf/open/floor/iron, -/area/station/hallway/primary/tram/center) "oHO" = ( /obj/effect/turf_decal/trimline/purple/filled/corner{ dir = 8 @@ -44240,6 +44440,13 @@ /obj/effect/turf_decal/tile/neutral/fourcorners, /turf/open/floor/iron/dark, /area/station/commons/vacant_room/commissary) +"oNl" = ( +/obj/effect/turf_decal/trimline/neutral/filled/line{ + dir = 4 + }, +/obj/item/kirbyplants/random, +/turf/open/floor/iron, +/area/station/hallway/primary/tram/center) "oNp" = ( /obj/structure/sink{ pixel_y = 15 @@ -44323,6 +44530,16 @@ }, /turf/open/space/openspace, /area/station/solars/port) +"oOP" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/neutral/filled/corner, +/turf/open/floor/iron, +/area/station/hallway/secondary/exit) "oOT" = ( /obj/structure/table/wood, /obj/item/food/grown/poppy{ @@ -44425,13 +44642,6 @@ /obj/machinery/light/dim/directional/east, /turf/open/floor/iron/dark, /area/station/ai_monitored/command/nuke_storage) -"oQT" = ( -/obj/structure/cable, -/obj/effect/turf_decal/trimline/neutral/filled/corner{ - dir = 4 - }, -/turf/open/floor/iron, -/area/station/hallway/primary/tram/center) "oQU" = ( /obj/structure/window/reinforced/spawner/directional/north, /turf/open/misc/grass/jungle, @@ -44670,6 +44880,15 @@ /obj/machinery/airalarm/directional/west, /turf/open/floor/iron/white, /area/station/science/research) +"oVg" = ( +/obj/effect/turf_decal/trimline/brown/filled/line{ + dir = 1 + }, +/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/miningdock) "oVM" = ( /turf/closed/wall/r_wall, /area/station/security/prison/mess) @@ -44768,17 +44987,6 @@ /obj/effect/turf_decal/trimline/neutral/filled/corner, /turf/open/floor/iron, /area/station/hallway/secondary/exit/departure_lounge) -"oXK" = ( -/obj/structure/disposalpipe/segment, -/obj/effect/turf_decal/stripes/white/line{ - dir = 8 - }, -/obj/effect/turf_decal/trimline/neutral/filled/line{ - dir = 4 - }, -/obj/item/radio/intercom/directional/east, -/turf/open/floor/iron, -/area/station/hallway/primary/tram/right) "oXP" = ( /obj/effect/turf_decal/trimline/red/filled/corner, /obj/effect/turf_decal/trimline/red/filled/corner{ @@ -44958,6 +45166,11 @@ }, /turf/open/floor/wood, /area/station/command/heads_quarters/captain/private) +"pbC" = ( +/obj/effect/decal/cleanable/dirt, +/obj/structure/ladder, +/turf/open/floor/iron/smooth, +/area/station/hallway/primary/tram/center) "pbH" = ( /turf/closed/wall/r_wall, /area/station/science/server) @@ -44983,13 +45196,6 @@ }, /turf/open/floor/iron, /area/station/security/courtroom) -"pbS" = ( -/obj/structure/transport/linear/public, -/obj/effect/turf_decal/caution/stand_clear/red{ - dir = 4 - }, -/turf/open/floor/plating/elevatorshaft, -/area/station/maintenance/tram/mid) "pbV" = ( /obj/structure/window/reinforced/spawner/directional/west, /obj/structure/musician/piano, @@ -45151,7 +45357,7 @@ /turf/open/floor/iron/showroomfloor, /area/station/security/warden) "pfm" = ( -/obj/item/bedsheet/dorms_double{ +/obj/effect/spawner/random/bedsheet/double{ dir = 4 }, /obj/structure/bed/double{ @@ -45253,21 +45459,6 @@ }, /turf/open/floor/plating, /area/station/engineering/supermatter) -"phd" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/structure/cable, -/obj/effect/turf_decal/trimline/neutral/filled/corner{ - dir = 4 - }, -/obj/effect/turf_decal/trimline/purple/corner{ - dir = 4 - }, -/obj/effect/turf_decal/trimline/neutral/filled/line, -/obj/effect/turf_decal/trimline/purple/filled/warning, -/turf/open/floor/iron, -/area/station/service/janitor) "phl" = ( /turf/open/floor/carpet, /area/station/command/heads_quarters/captain) @@ -45289,8 +45480,7 @@ /turf/open/floor/plating, /area/station/maintenance/tram/mid) "phH" = ( -/obj/machinery/door/window/left/directional/west{ - dir = 4; +/obj/machinery/door/window/left/directional/east{ name = "Hydroponics Desk"; req_access = list("hydroponics") }, @@ -45651,14 +45841,6 @@ /obj/machinery/door/firedoor, /turf/open/floor/plating, /area/station/medical/pharmacy) -"pod" = ( -/obj/effect/turf_decal/trimline/neutral/filled/line{ - dir = 8 - }, -/obj/structure/cable, -/obj/structure/extinguisher_cabinet/directional/west, -/turf/open/floor/iron, -/area/station/hallway/primary/tram/center) "pof" = ( /obj/machinery/power/apc/auto_name/directional/west, /obj/structure/cable, @@ -45895,8 +46077,9 @@ /obj/effect/turf_decal/trimline/neutral/filled/warning{ dir = 6 }, -/obj/machinery/atmospherics/components/unary/portables_connector/layer4{ - dir = 4 +/obj/machinery/atmospherics/components/unary/portables_connector/visible{ + dir = 4; + name = "Oxygen Tank Injection Port" }, /turf/open/floor/iron, /area/station/hallway/secondary/construction/engineering) @@ -46232,17 +46415,6 @@ dir = 1 }, /area/station/service/chapel) -"pxp" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 6 - }, -/obj/structure/disposalpipe/trunk/multiz{ - dir = 4 - }, -/obj/effect/decal/cleanable/dirt, -/obj/structure/cable, -/turf/open/floor/catwalk_floor, -/area/station/maintenance/port/central) "pxs" = ( /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, /turf/open/floor/wood, @@ -46381,6 +46553,14 @@ }, /turf/open/floor/iron/dark, /area/station/medical/storage) +"pzb" = ( +/obj/effect/turf_decal/tile/brown/opposingcorners{ + dir = 1 + }, +/obj/machinery/firealarm/directional/west, +/obj/item/kirbyplants/random, +/turf/open/floor/iron, +/area/station/cargo/miningfoundry) "pzc" = ( /obj/machinery/camera{ c_tag = "Security - Interrogation Observation"; @@ -46435,6 +46615,18 @@ /obj/machinery/light/directional/north, /turf/open/floor/iron, /area/station/hallway/secondary/entry) +"pAA" = ( +/obj/machinery/door/airlock/vault{ + name = "High Security Vault" + }, +/obj/effect/mapping_helpers/airlock/locked, +/obj/effect/mapping_helpers/airlock/access/all/supply/vault, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/landmark/navigate_destination/vault, +/turf/open/floor/iron/dark, +/area/station/ai_monitored/command/nuke_storage) "pAC" = ( /obj/effect/turf_decal/siding/thinplating/end, /obj/machinery/atmospherics/pipe/multiz/supply/hidden/layer4{ @@ -46897,6 +47089,17 @@ /obj/machinery/light/small/directional/west, /turf/open/floor/iron, /area/station/maintenance/disposal/incinerator) +"pIF" = ( +/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/opposingcorners, +/obj/structure/railing/corner/end{ + dir = 8 + }, +/obj/machinery/light/small/directional/east, +/turf/open/floor/iron, +/area/station/cargo/miningfoundry) "pIQ" = ( /obj/structure/cable, /turf/closed/wall/r_wall, @@ -46965,21 +47168,6 @@ /obj/structure/cable, /turf/open/floor/iron, /area/station/security/checkpoint/engineering) -"pKa" = ( -/obj/effect/turf_decal/trimline/neutral/filled/corner{ - dir = 8 - }, -/obj/effect/turf_decal/trimline/neutral/filled/corner{ - dir = 1 - }, -/obj/structure/cable, -/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/hallway/secondary/exit/departure_lounge) "pKk" = ( /obj/machinery/portable_atmospherics/canister/oxygen, /obj/effect/turf_decal/bot{ @@ -47043,6 +47231,28 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron/dark, /area/station/service/chapel) +"pLg" = ( +/obj/effect/turf_decal/trimline/red/filled/line{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/red/filled/line{ + dir = 8 + }, +/obj/machinery/door/airlock/security/glass{ + id_tag = "outerbrigright"; + name = "Brig" + }, +/obj/effect/mapping_helpers/airlock/cyclelink_helper_multi{ + cycle_id = "brig_right" + }, +/obj/machinery/door/firedoor, +/obj/effect/mapping_helpers/airlock/access/all/security/entrance, +/obj/structure/disposalpipe/segment, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/landmark/navigate_destination/sec, +/turf/open/floor/iron, +/area/station/security/brig) "pLs" = ( /obj/structure/transport/linear/tram, /obj/structure/tram/split, @@ -47273,8 +47483,9 @@ dir = 10 }, /obj/machinery/firealarm/directional/west, -/obj/machinery/atmospherics/components/unary/portables_connector/layer2{ - dir = 8 +/obj/machinery/atmospherics/components/unary/portables_connector/visible{ + dir = 8; + name = "Exfiltrate Port" }, /turf/open/floor/iron, /area/station/hallway/secondary/construction/engineering) @@ -47438,7 +47649,7 @@ /obj/effect/turf_decal/trimline/neutral/filled/line{ dir = 4 }, -/obj/structure/extinguisher_cabinet/directional/east, +/obj/structure/sign/departments/evac/directional/east, /turf/open/floor/iron, /area/station/hallway/secondary/exit) "pUi" = ( @@ -47644,10 +47855,7 @@ location = "QM #3" }, /obj/effect/turf_decal/tile/brown/fourcorners, -/mob/living/simple_animal/bot/mulebot{ - home_destination = "QM #3"; - suffix = "#3" - }, +/mob/living/simple_animal/bot/mulebot, /turf/open/floor/iron, /area/station/cargo/warehouse) "pXC" = ( @@ -47886,23 +48094,6 @@ }, /turf/open/floor/iron, /area/station/hallway/secondary/exit) -"qbx" = ( -/obj/machinery/requests_console/directional/south{ - department = "Janitorial"; - name = "Janitorial Requests Console" - }, -/obj/effect/turf_decal/trimline/neutral/filled/line{ - dir = 6 - }, -/obj/effect/turf_decal/trimline/purple/filled/warning{ - dir = 6 - }, -/obj/machinery/disposal/bin, -/obj/structure/disposalpipe/trunk{ - dir = 1 - }, -/turf/open/floor/iron, -/area/station/service/janitor) "qbT" = ( /obj/effect/turf_decal/trimline/red/filled/line, /obj/structure/filingcabinet, @@ -47911,7 +48102,6 @@ /area/station/security/checkpoint/engineering) "qbW" = ( /obj/machinery/holopad, -/obj/effect/landmark/observer_start, /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -47923,6 +48113,7 @@ id = 2 }, /obj/machinery/transport/destination_sign/indicator/directional/south, +/obj/effect/landmark/observer_start, /turf/open/floor/iron, /area/station/hallway/primary/tram/center) "qch" = ( @@ -48186,6 +48377,11 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/showroomfloor, /area/station/security/lockers) +"qfQ" = ( +/obj/structure/cable, +/obj/machinery/power/apc/auto_name/directional/east, +/turf/open/floor/catwalk_floor, +/area/station/hallway/primary/tram/right) "qfS" = ( /obj/machinery/smartfridge/organ, /obj/structure/window/reinforced/spawner/directional/west, @@ -48458,13 +48654,6 @@ dir = 4 }, /area/station/command/bridge) -"qkk" = ( -/obj/effect/decal/cleanable/dirt, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/light/small/dim/directional/south, -/turf/open/floor/catwalk_floor, -/area/station/maintenance/tram/mid) "qkr" = ( /obj/machinery/camera/directional/west{ c_tag = "Security - Main West"; @@ -48489,6 +48678,7 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden, /turf/open/floor/iron, /area/station/engineering/atmos) "qkM" = ( @@ -48799,18 +48989,6 @@ /obj/structure/cable, /turf/open/floor/iron/dark, /area/station/ai_monitored/turret_protected/aisat_interior) -"qrc" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/door_buttons/airlock_controller{ - idExterior = "middleleft_lower_lower_eva_external"; - idInterior = "middleleft_lower_lower_eva_internal"; - idSelf = "middleleft_lower_lower_eva_airlock_control"; - name = "External Access Console"; - pixel_y = -24 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/catwalk_floor, -/area/station/maintenance/tram/mid) "qrg" = ( /obj/effect/turf_decal/stripes/corner{ dir = 4 @@ -48828,7 +49006,6 @@ "qrs" = ( /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, /obj/effect/decal/cleanable/dirt, -/obj/structure/sign/clock/directional/east, /obj/structure/closet/secure_closet/personal, /obj/effect/spawner/random/bureaucracy/briefcase, /obj/machinery/power/apc/auto_name/directional/north, @@ -48836,6 +49013,21 @@ /obj/effect/turf_decal/tile/neutral/fourcorners, /turf/open/floor/iron/dark, /area/station/commons/vacant_room/commissary) +"qrx" = ( +/obj/effect/turf_decal/trimline/neutral/filled/corner{ + dir = 4 + }, +/obj/structure/cable, +/turf/open/floor/iron, +/area/station/hallway/primary/tram/right) +"qrI" = ( +/obj/effect/decal/cleanable/dirt, +/obj/structure/cable, +/obj/structure/railing{ + dir = 1 + }, +/turf/open/floor/catwalk_floor, +/area/station/hallway/secondary/exit) "qrW" = ( /obj/effect/turf_decal/trimline/blue/filled/line{ dir = 1 @@ -48994,26 +49186,6 @@ /obj/machinery/telecomms/server/presets/medical, /turf/open/floor/iron/dark/telecomms, /area/station/tcommsat/server) -"quE" = ( -/obj/machinery/door/airlock{ - name = "Custodial Closet" - }, -/obj/effect/turf_decal/trimline/neutral/filled/line{ - dir = 1 - }, -/obj/effect/turf_decal/trimline/neutral/filled/line, -/obj/effect/turf_decal/trimline/purple/filled/warning, -/obj/effect/turf_decal/trimline/purple/filled/warning{ - dir = 1 - }, -/obj/machinery/door/firedoor, -/obj/effect/mapping_helpers/airlock/access/all/service/janitor, -/obj/structure/cable, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/open/floor/iron, -/area/station/hallway/secondary/service) "quF" = ( /obj/effect/decal/cleanable/dirt, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -49112,6 +49284,12 @@ "qxm" = ( /turf/closed/wall, /area/station/maintenance/starboard/central) +"qxG" = ( +/obj/structure/railing/corner{ + dir = 4 + }, +/turf/closed/wall, +/area/station/cargo/miningdock/cafeteria) "qxT" = ( /obj/structure/reagent_dispensers/water_cooler, /obj/effect/turf_decal/trimline/red/filled/line{ @@ -49214,6 +49392,14 @@ }, /turf/open/floor/iron/dark, /area/station/command/heads_quarters/ce) +"qzh" = ( +/obj/machinery/bouldertech/refinery/smelter, +/obj/machinery/conveyor{ + dir = 8; + id = "mining" + }, +/turf/open/floor/iron, +/area/station/cargo/miningfoundry) "qzn" = ( /obj/machinery/vending/wardrobe/curator_wardrobe, /turf/open/floor/engine/cult, @@ -49337,23 +49523,6 @@ }, /turf/open/floor/carpet, /area/station/command/heads_quarters/captain) -"qBI" = ( -/obj/machinery/door/airlock/engineering/glass{ - name = "Tram Mechanical Room" - }, -/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, -/obj/effect/mapping_helpers/airlock/unres{ - dir = 4 - }, -/obj/effect/mapping_helpers/airlock/access/all/engineering/general, -/turf/open/floor/catwalk_floor, -/area/station/hallway/primary/tram/left) "qBL" = ( /obj/effect/turf_decal/trimline/purple/filled/line{ dir = 8 @@ -49406,12 +49575,6 @@ /obj/structure/cable, /turf/open/floor/catwalk_floor, /area/station/maintenance/port/central) -"qCg" = ( -/obj/structure/disposalpipe/segment, -/obj/structure/cable, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/catwalk_floor, -/area/station/hallway/primary/tram/center) "qCh" = ( /obj/structure/closet/secure_closet/captains, /obj/machinery/computer/security/telescreen/entertainment/directional/north, @@ -49419,6 +49582,29 @@ /obj/machinery/light/warm/directional/north, /turf/open/floor/wood, /area/station/command/heads_quarters/captain/private) +"qCm" = ( +/obj/effect/turf_decal/trimline/neutral/filled/corner{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/neutral/filled/corner{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/purple/corner{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/purple/corner{ + dir = 1 + }, +/obj/structure/cable, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/neutral/filled/line, +/obj/effect/turf_decal/trimline/purple/filled/warning, +/obj/machinery/light/directional/south, +/obj/effect/landmark/navigate_destination/janitor, +/turf/open/floor/iron, +/area/station/service/janitor) "qCz" = ( /obj/effect/turf_decal/stripes/line, /turf/open/floor/iron/dark, @@ -49621,7 +49807,9 @@ /turf/open/floor/iron/white, /area/station/science/research) "qFH" = ( -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, +/obj/structure/railing{ + dir = 1 + }, /turf/open/floor/iron, /area/station/hallway/secondary/exit/departure_lounge) "qFK" = ( @@ -49874,9 +50062,9 @@ dir = 8 }, /obj/effect/mapping_helpers/airlock/access/all/engineering/atmos, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/visible, /obj/structure/disposalpipe/segment, /obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden, /turf/open/floor/iron, /area/station/engineering/atmos) "qKE" = ( @@ -49975,6 +50163,14 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/science/ordnance/testlab) +"qMI" = ( +/obj/machinery/light/warm/directional/north, +/obj/machinery/conveyor{ + dir = 8; + id = "mining" + }, +/turf/open/floor/iron, +/area/station/cargo/miningfoundry) "qMQ" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -50093,12 +50289,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/wood/large, /area/station/service/theater) -"qPp" = ( -/obj/effect/turf_decal/trimline/neutral/filled/line{ - dir = 1 - }, -/turf/closed/wall, -/area/station/maintenance/tram/mid) "qPE" = ( /obj/structure/chair/greyscale{ dir = 4 @@ -50193,6 +50383,14 @@ /obj/structure/railing, /turf/open/floor/plating/elevatorshaft, /area/station/maintenance/tram/left) +"qRC" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 1 + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/catwalk_floor, +/area/station/maintenance/tram/mid) "qRK" = ( /obj/structure/table, /obj/item/stack/sheet/iron/fifty, @@ -50245,15 +50443,6 @@ /obj/structure/disposalpipe/segment, /turf/open/floor/plating, /area/station/science/xenobiology) -"qTh" = ( -/obj/effect/turf_decal/trimline/neutral/filled/corner{ - dir = 8 - }, -/obj/structure/disposalpipe/segment{ - dir = 5 - }, -/turf/open/floor/iron, -/area/station/hallway/primary/tram/right) "qTp" = ( /obj/machinery/door/airlock{ id_tag = "private_b"; @@ -50263,6 +50452,22 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/wood, /area/station/commons/dorms) +"qTt" = ( +/obj/machinery/light_switch/directional/south, +/obj/effect/turf_decal/trimline/neutral/filled/line{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/neutral/filled/line, +/obj/effect/turf_decal/trimline/purple/filled/warning, +/obj/effect/turf_decal/trimline/purple/filled/warning{ + dir = 1 + }, +/obj/structure/cable, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/iron, +/area/station/service/janitor) "qTv" = ( /obj/effect/turf_decal/trimline/neutral/filled/line{ dir = 4 @@ -50560,6 +50765,11 @@ }, /turf/open/floor/iron/white, /area/station/science/xenobiology) +"qXv" = ( +/obj/effect/turf_decal/trimline/neutral/filled/line, +/obj/machinery/light/directional/south, +/turf/open/floor/iron, +/area/station/hallway/secondary/service) "qXA" = ( /obj/effect/turf_decal/trimline/brown/filled/corner, /obj/machinery/atmospherics/pipe/smart/simple/cyan/visible, @@ -50623,10 +50833,6 @@ /obj/machinery/light/small/directional/north, /turf/open/floor/iron, /area/station/engineering/atmos) -"qYw" = ( -/obj/structure/ladder, -/turf/open/floor/iron/smooth, -/area/station/hallway/primary/tram/right) "qYx" = ( /obj/machinery/door/airlock{ id_tag = "Toilet5"; @@ -50756,7 +50962,9 @@ dir = 8 }, /obj/structure/cable, -/obj/structure/disposalpipe/segment, +/obj/structure/disposalpipe/segment{ + dir = 5 + }, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/light/directional/west, @@ -51054,11 +51262,17 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/carpet, /area/station/commons/dorms) -"reK" = ( -/obj/structure/cable, -/obj/structure/extinguisher_cabinet/directional/north, -/turf/open/floor/catwalk_floor, -/area/station/hallway/primary/tram/right) +"reC" = ( +/obj/machinery/door/airlock/highsecurity{ + name = "AI Upload Access" + }, +/obj/effect/turf_decal/trimline/purple/filled/line{ + dir = 1 + }, +/obj/effect/mapping_helpers/airlock/access/all/command/ai_upload, +/obj/effect/landmark/navigate_destination/aiupload, +/turf/open/floor/iron/dark, +/area/station/ai_monitored/turret_protected/ai_upload) "reU" = ( /obj/effect/decal/cleanable/dirt, /obj/machinery/camera/directional/south{ @@ -51215,6 +51429,7 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden, /turf/open/floor/iron, /area/station/engineering/atmos) "rin" = ( @@ -51464,16 +51679,6 @@ }, /turf/open/floor/iron, /area/station/security/prison) -"rmw" = ( -/obj/machinery/door/airlock/maintenance_hatch{ - name = "Maintenance Hatch" - }, -/obj/effect/mapping_helpers/airlock/access/all/engineering/maintenance, -/obj/effect/mapping_helpers/airlock/unres{ - dir = 1 - }, -/turf/open/floor/catwalk_floor, -/area/station/maintenance/tram/mid) "rmz" = ( /obj/effect/turf_decal/siding/thinplating/dark, /obj/structure/table, @@ -51644,6 +51849,23 @@ /obj/structure/cable, /turf/open/floor/iron, /area/station/engineering/atmos/pumproom) +"roH" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/door/airlock/external{ + autoclose = 0; + frequency = 1449; + id_tag = "middleright_lower_eva_internal"; + name = "External Access" + }, +/obj/machinery/door_buttons/access_button{ + idDoor = "middleright_lower_eva_internal"; + idSelf = "middleright_lower_eva_airlock_control"; + name = "External Access Button"; + pixel_y = 24 + }, +/obj/effect/mapping_helpers/airlock/locked, +/turf/open/floor/catwalk_floor, +/area/station/hallway/primary/tram/center) "roQ" = ( /obj/effect/turf_decal/stripes/line{ dir = 8 @@ -51935,14 +52157,6 @@ /obj/effect/turf_decal/sand/plating, /turf/open/floor/plating/airless, /area/station/asteroid) -"rwc" = ( -/obj/effect/decal/cleanable/dirt, -/obj/structure/cable, -/obj/structure/railing{ - dir = 1 - }, -/turf/open/floor/catwalk_floor, -/area/station/hallway/secondary/exit) "rws" = ( /obj/structure/table/glass, /obj/item/storage/box/monkeycubes{ @@ -51954,6 +52168,14 @@ /obj/effect/turf_decal/tile/dark_green/fourcorners, /turf/open/floor/iron/white, /area/station/science/genetics) +"rwF" = ( +/obj/structure/railing, +/obj/effect/turf_decal/trimline/dark_red/warning{ + dir = 6 + }, +/obj/structure/transport/linear/public, +/turf/open/floor/plating/elevatorshaft, +/area/station/maintenance/tram/mid) "rwN" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -52004,6 +52226,16 @@ }, /turf/open/floor/iron, /area/station/commons/dorms) +"rxI" = ( +/obj/effect/turf_decal/trimline/neutral/filled/line{ + dir = 1 + }, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/transport/power_rectifier, +/turf/open/floor/iron, +/area/station/hallway/primary/tram/left) "rxN" = ( /obj/machinery/photocopier, /obj/structure/extinguisher_cabinet/directional/north, @@ -52102,17 +52334,6 @@ }, /turf/open/floor/iron/white, /area/station/science/xenobiology) -"rzF" = ( -/obj/machinery/door/airlock/engineering{ - name = "Power Access Hatch" - }, -/obj/effect/decal/cleanable/dirt, -/obj/effect/mapping_helpers/airlock/access/all/engineering/general, -/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/hallway/secondary/exit) "rzO" = ( /obj/structure/chair, /obj/machinery/airalarm/directional/north, @@ -52252,10 +52473,7 @@ location = "QM #1" }, /obj/effect/turf_decal/tile/brown/fourcorners, -/mob/living/simple_animal/bot/mulebot{ - home_destination = "QM #1"; - suffix = "#1" - }, +/mob/living/simple_animal/bot/mulebot, /turf/open/floor/iron, /area/station/cargo/warehouse) "rCL" = ( @@ -52285,7 +52503,7 @@ dir = 1 }, /obj/machinery/firealarm/directional/north, -/obj/machinery/atmospherics/pipe/smart/simple/supply/visible, +/obj/machinery/atmospherics/pipe/smart/simple/cyan/hidden, /obj/machinery/camera/emp_proof/directional/north{ c_tag = "Engineering - Atmospherics North" }, @@ -52383,13 +52601,6 @@ /obj/machinery/airalarm/directional/west, /turf/open/floor/iron/dark, /area/station/engineering/supermatter/room) -"rFw" = ( -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ - dir = 8 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/catwalk_floor, -/area/station/maintenance/tram/mid) "rGj" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron/cafeteria, @@ -52484,6 +52695,15 @@ /obj/machinery/duct, /turf/open/floor/iron/freezer, /area/station/security/prison) +"rIm" = ( +/obj/machinery/lift_indicator/directional/north{ + linked_elevator_id = "tram_upper_center_lift" + }, +/obj/machinery/button/elevator/directional/north{ + id = "tram_upper_center_lift" + }, +/turf/open/floor/iron, +/area/station/hallway/primary/tram/center) "rIp" = ( /obj/effect/landmark/start/depsec/supply, /obj/effect/turf_decal/trimline/red/filled/line{ @@ -52787,14 +53007,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/plating, /area/station/engineering/supermatter) -"rNN" = ( -/obj/machinery/camera/directional/east{ - c_tag = "Hallway - Central Tram Platform North-East" - }, -/obj/structure/extinguisher_cabinet/directional/east, -/obj/effect/turf_decal/stripes/white/line, -/turf/open/floor/iron, -/area/station/hallway/primary/tram/center) "rNO" = ( /obj/effect/turf_decal/trimline/white/warning, /turf/open/floor/engine/hull, @@ -53207,6 +53419,12 @@ }, /turf/open/floor/iron, /area/station/security/processing) +"rTn" = ( +/obj/structure/disposalpipe/segment, +/obj/structure/cable, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/catwalk_floor, +/area/station/hallway/primary/tram/center) "rTt" = ( /obj/effect/turf_decal/stripes/corner{ dir = 1 @@ -53325,6 +53543,10 @@ /obj/structure/extinguisher_cabinet/directional/west, /turf/open/floor/iron/dark, /area/station/command/teleporter) +"rWn" = ( +/obj/structure/extinguisher_cabinet/directional/west, +/turf/open/floor/iron, +/area/station/engineering/atmos) "rWt" = ( /obj/effect/turf_decal/trimline/neutral/filled/line{ dir = 6 @@ -53531,11 +53753,6 @@ }, /turf/open/floor/iron/dark, /area/station/service/hydroponics) -"sac" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/catwalk_floor, -/area/station/maintenance/tram/mid) "saj" = ( /obj/effect/decal/cleanable/dirt, /obj/machinery/atmospherics/pipe/smart/simple/dark/visible, @@ -53573,6 +53790,15 @@ /obj/item/wirecutters, /turf/open/space/openspace, /area/station/solars/starboard/fore) +"saI" = ( +/obj/effect/turf_decal/trimline/neutral/filled/line{ + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 10 + }, +/turf/open/floor/iron, +/area/station/hallway/primary/tram/right) "saJ" = ( /obj/structure/plasticflaps/opaque, /turf/open/floor/plating, @@ -53626,12 +53852,6 @@ }, /turf/open/floor/iron, /area/station/maintenance/port/central) -"sce" = ( -/obj/effect/landmark/start/shaft_miner, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/structure/cable, -/turf/open/floor/iron, -/area/station/cargo/miningdock) "scn" = ( /obj/structure/table, /obj/machinery/cell_charger, @@ -53772,6 +53992,10 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron, /area/station/hallway/secondary/exit) +"sfn" = ( +/obj/effect/turf_decal/tile/brown/opposingcorners, +/turf/open/floor/iron, +/area/station/cargo/miningfoundry) "sfv" = ( /obj/machinery/duct, /obj/structure/railing/corner{ @@ -53882,18 +54106,6 @@ }, /turf/open/floor/iron, /area/station/maintenance/disposal/incinerator) -"shP" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 6 - }, -/obj/structure/disposalpipe/trunk/multiz/down{ - dir = 4 - }, -/obj/effect/decal/cleanable/dirt, -/obj/structure/cable, -/obj/machinery/power/apc/auto_name/directional/west, -/turf/open/floor/catwalk_floor, -/area/station/hallway/primary/tram/left) "shQ" = ( /obj/machinery/modular_computer/preset/engineering{ dir = 8 @@ -53949,6 +54161,14 @@ }, /turf/open/floor/iron/white, /area/station/medical/surgery/aft) +"siF" = ( +/obj/machinery/bouldertech/refinery, +/obj/machinery/conveyor{ + dir = 8; + id = "mining" + }, +/turf/open/floor/iron, +/area/station/cargo/miningfoundry) "siL" = ( /obj/effect/turf_decal/trimline/purple/filled/line{ dir = 1 @@ -54012,17 +54232,6 @@ /obj/machinery/light/directional/south, /turf/open/floor/iron/dark, /area/station/science/robotics/lab) -"sjq" = ( -/obj/machinery/camera/directional/west{ - c_tag = "Hallway - Starboard Tram Platform North-West" - }, -/obj/structure/extinguisher_cabinet/directional/west, -/obj/structure/disposalpipe/segment{ - dir = 9 - }, -/obj/effect/turf_decal/stripes/white/line, -/turf/open/floor/iron, -/area/station/hallway/primary/tram/right) "sjE" = ( /obj/effect/turf_decal/trimline/yellow/filled/line{ dir = 8 @@ -54164,6 +54373,23 @@ /obj/effect/landmark/event_spawn, /turf/open/floor/iron, /area/station/security/prison/garden) +"slr" = ( +/obj/effect/decal/cleanable/dirt, +/obj/structure/railing, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/catwalk_floor, +/area/station/hallway/secondary/exit) +"slw" = ( +/obj/structure/railing{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/dark_red/warning{ + dir = 1 + }, +/obj/structure/transport/linear/public, +/turf/open/floor/plating/elevatorshaft, +/area/station/maintenance/tram/mid) "slx" = ( /obj/structure/hoop{ dir = 4 @@ -54306,19 +54532,13 @@ /turf/open/floor/iron, /area/station/commons/fitness) "snF" = ( -/obj/machinery/camera{ - c_tag = "Hallway - Starboard Tram Platform South-West"; - dir = 10 - }, -/obj/machinery/firealarm/directional/west, -/obj/structure/disposalpipe/segment{ - dir = 10 - }, -/obj/effect/turf_decal/stripes/white/line{ - dir = 1 +/obj/item/kirbyplants/random, +/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/effect/turf_decal/siding/thinplating/dark{ + dir = 4 }, -/turf/open/floor/iron, -/area/station/hallway/primary/tram/right) +/turf/open/floor/iron/dark, +/area/station/hallway/secondary/exit) "snK" = ( /obj/effect/turf_decal/trimline/brown/filled/line{ dir = 1 @@ -54344,16 +54564,6 @@ "soq" = ( /turf/closed/wall/r_wall, /area/station/maintenance/department/science) -"soP" = ( -/obj/machinery/door/airlock/hatch{ - name = "Emergency Exit" - }, -/obj/effect/decal/cleanable/dirt, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/open/floor/catwalk_floor, -/area/station/hallway/primary/tram/left) "spm" = ( /obj/effect/spawner/structure/window/reinforced, /obj/machinery/door/firedoor/heavy, @@ -54399,11 +54609,6 @@ /obj/effect/spawner/random/armory/rubbershot, /turf/open/floor/iron/dark, /area/station/ai_monitored/security/armory) -"sqg" = ( -/obj/structure/cable, -/obj/machinery/power/apc/auto_name/directional/east, -/turf/open/floor/catwalk_floor, -/area/station/hallway/primary/tram/right) "sql" = ( /obj/effect/turf_decal/trimline/purple/filled/corner{ dir = 1 @@ -54532,8 +54737,7 @@ /turf/open/floor/iron, /area/station/commons/fitness/recreation) "srY" = ( -/obj/machinery/door/window/brigdoor{ - dir = 8; +/obj/machinery/door/window/brigdoor/left/directional/west{ id = "engcell"; name = "Engineering Cell"; req_access = list("security") @@ -54886,6 +55090,12 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/white, /area/station/medical/virology) +"swd" = ( +/obj/structure/ladder, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/light/dim/directional/west, +/turf/open/floor/iron/smooth, +/area/station/hallway/primary/tram/center) "swg" = ( /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ dir = 8 @@ -54905,28 +55115,6 @@ /obj/effect/turf_decal/tile/neutral/fourcorners, /turf/open/floor/iron/dark, /area/station/hallway/primary/tram/right) -"swL" = ( -/obj/structure/railing{ - dir = 9 - }, -/obj/effect/turf_decal/trimline/dark_red/warning{ - dir = 9 - }, -/obj/structure/transport/linear/public, -/obj/machinery/elevator_control_panel/directional/north{ - linked_elevator_id = "tram_upper_center_lift"; - preset_destination_names = list("2" = "Lower Deck", "3" = "Upper Deck") - }, -/turf/open/floor/plating/elevatorshaft, -/area/station/maintenance/tram/mid) -"swR" = ( -/obj/structure/cable/multilayer/multiz, -/obj/effect/turf_decal/stripes/line{ - dir = 5 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/plating, -/area/station/maintenance/port/central) "swX" = ( /obj/structure/window/reinforced/spawner/directional/north, /turf/open/floor/iron/dark/smooth_edge{ @@ -55015,6 +55203,23 @@ /obj/item/flashlight/lamp, /turf/open/floor/carpet, /area/station/cargo/miningdock) +"syX" = ( +/obj/machinery/door/airlock/engineering/glass{ + name = "Tram Mechanical Room" + }, +/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, +/obj/effect/mapping_helpers/airlock/unres{ + dir = 4 + }, +/obj/effect/mapping_helpers/airlock/access/all/engineering/general, +/turf/open/floor/catwalk_floor, +/area/station/hallway/primary/tram/left) "szb" = ( /obj/effect/turf_decal/trimline/purple/filled/line{ dir = 8 @@ -55047,6 +55252,12 @@ /obj/machinery/firealarm/directional/east, /turf/open/floor/iron/dark, /area/station/engineering/supermatter/room) +"szr" = ( +/obj/effect/turf_decal/tile/brown/opposingcorners{ + dir = 1 + }, +/turf/open/floor/iron, +/area/station/cargo/miningfoundry) "szs" = ( /obj/effect/turf_decal/trimline/neutral/filled/line{ dir = 10 @@ -55057,6 +55268,18 @@ /obj/machinery/atmospherics/pipe/bridge_pipe/cyan/visible, /turf/open/floor/iron, /area/station/engineering/atmos) +"szw" = ( +/obj/effect/turf_decal/trimline/neutral/filled/line{ + dir = 8 + }, +/obj/structure/cable, +/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/hallway/primary/tram/left) "szM" = ( /obj/effect/turf_decal/trimline/red/filled/corner{ dir = 1 @@ -55096,13 +55319,6 @@ }, /turf/open/floor/iron, /area/station/security/prison) -"sBc" = ( -/obj/structure/chair/sofa/bench/tram/right{ - dir = 1 - }, -/obj/effect/turf_decal/trimline/neutral/filled/line, -/turf/open/floor/iron, -/area/station/hallway/primary/tram/center) "sBt" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -55134,16 +55350,6 @@ /obj/effect/landmark/start/hangover, /turf/open/floor/iron/grimy, /area/station/hallway/secondary/entry) -"sCR" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/structure/disposalpipe/segment{ - dir = 6 - }, -/obj/effect/turf_decal/trimline/neutral/filled/corner, -/obj/effect/turf_decal/trimline/purple/corner, -/turf/open/floor/iron, -/area/station/service/janitor) "sDe" = ( /obj/structure/table/wood, /obj/item/radio/intercom/directional/south, @@ -55185,6 +55391,13 @@ dir = 4 }, /area/station/maintenance/central/greater) +"sDG" = ( +/obj/effect/turf_decal/tile/brown/fourcorners, +/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/miningdock) "sDO" = ( /obj/effect/turf_decal/trimline/red/filled/line{ dir = 4 @@ -55224,16 +55437,6 @@ }, /turf/open/floor/iron/dark, /area/station/ai_monitored/turret_protected/aisat_interior) -"sEp" = ( -/obj/structure/cable, -/obj/structure/disposalpipe/segment{ - dir = 10 - }, -/obj/effect/turf_decal/trimline/neutral/filled/corner{ - dir = 1 - }, -/turf/open/floor/iron, -/area/station/hallway/primary/tram/center) "sEx" = ( /obj/effect/turf_decal/trimline/purple/filled/line{ dir = 8 @@ -55285,9 +55488,7 @@ /turf/open/floor/iron, /area/station/cargo/office) "sFw" = ( -/obj/machinery/door/window/left/directional/east{ - dir = 1; - icon_state = "right"; +/obj/machinery/door/window/right/directional/north{ name = "Incoming Mail"; req_access = list("shipping") }, @@ -55353,7 +55554,7 @@ "sGO" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/visible, +/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden, /obj/structure/disposalpipe/segment, /obj/structure/cable, /turf/open/floor/iron, @@ -55454,6 +55655,17 @@ /obj/machinery/light/directional/west, /turf/open/floor/iron, /area/station/engineering/atmos) +"sIk" = ( +/obj/machinery/door/airlock/hatch{ + name = "Emergency Exit" + }, +/obj/effect/decal/cleanable/dirt, +/obj/structure/cable, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/catwalk_floor, +/area/station/hallway/primary/tram/center) "sIq" = ( /obj/structure/table/glass, /obj/item/wrench/medical, @@ -55492,8 +55704,6 @@ }, /obj/effect/turf_decal/trimline/neutral/filled/line, /obj/effect/landmark/start/hangover, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/hallway/secondary/exit/departure_lounge) "sJQ" = ( @@ -55593,16 +55803,6 @@ /obj/structure/railing/corner, /turf/open/space/openspace, /area/station/solars/starboard/fore) -"sLl" = ( -/obj/structure/railing{ - dir = 1 - }, -/obj/effect/turf_decal/trimline/dark_red/warning{ - dir = 1 - }, -/obj/structure/transport/linear/public, -/turf/open/floor/plating/elevatorshaft, -/area/station/maintenance/tram/mid) "sLz" = ( /obj/effect/turf_decal/stripes/line{ dir = 6 @@ -55616,13 +55816,6 @@ }, /turf/open/floor/iron, /area/station/cargo/storage) -"sLC" = ( -/obj/machinery/newscaster/directional/east, -/obj/structure/disposalpipe/segment{ - dir = 9 - }, -/turf/open/floor/iron, -/area/station/hallway/primary/tram/center) "sLR" = ( /obj/effect/turf_decal/trimline/neutral/filled/corner{ dir = 1 @@ -56117,6 +56310,10 @@ /obj/structure/cable, /turf/open/floor/iron/white, /area/station/science/lobby) +"sUc" = ( +/obj/structure/ladder, +/turf/open/floor/iron/smooth, +/area/station/hallway/primary/tram/right) "sUf" = ( /obj/effect/decal/cleanable/dirt, /obj/effect/turf_decal/trimline/yellow/warning{ @@ -56209,10 +56406,7 @@ /area/station/service/theater) "sWq" = ( /obj/effect/turf_decal/trimline/neutral/filled/line{ - dir = 9 - }, -/obj/structure/chair{ - dir = 4 + dir = 1 }, /turf/open/floor/iron, /area/station/hallway/secondary/exit/departure_lounge) @@ -56280,14 +56474,14 @@ /turf/open/floor/iron, /area/station/cargo/drone_bay) "sXo" = ( -/obj/structure/chair{ +/obj/effect/turf_decal/trimline/red/filled/line{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/neutral/filled/warning{ dir = 1 }, -/obj/effect/turf_decal/trimline/neutral/filled/line, -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/light/directional/south, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron, /area/station/hallway/secondary/exit/departure_lounge) "sXL" = ( @@ -56330,14 +56524,6 @@ /obj/structure/cable, /turf/open/floor/iron, /area/station/security/checkpoint/engineering) -"sXZ" = ( -/obj/machinery/door/airlock/maintenance_hatch{ - name = "Utilities Access Hatch" - }, -/obj/effect/mapping_helpers/airlock/access/all/engineering/general, -/obj/structure/disposalpipe/segment, -/turf/open/floor/catwalk_floor, -/area/station/hallway/primary/tram/center) "sYd" = ( /obj/structure/cable, /obj/effect/turf_decal/sand/plating, @@ -56506,13 +56692,6 @@ /obj/effect/turf_decal/stripes/line, /turf/open/floor/plating, /area/station/engineering/engine_smes) -"tbg" = ( -/obj/effect/turf_decal/trimline/neutral/filled/line{ - dir = 8 - }, -/obj/effect/spawner/random/vending/colavend, -/turf/open/floor/iron, -/area/station/hallway/secondary/service) "tbi" = ( /obj/machinery/airalarm/directional/north, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -56808,6 +56987,18 @@ /obj/machinery/light/small/dim/directional/west, /turf/open/floor/iron/freezer, /area/station/security/prison) +"tgE" = ( +/obj/machinery/camera{ + c_tag = "Medical - Central North-West"; + dir = 10; + network = list("ss13","medbay") + }, +/obj/structure/extinguisher_cabinet/directional/west, +/obj/effect/turf_decal/stripes/white/line{ + dir = 1 + }, +/turf/open/floor/iron, +/area/station/hallway/primary/tram/center) "tgN" = ( /obj/machinery/door/firedoor, /obj/effect/turf_decal/trimline/red/filled/line{ @@ -56981,10 +57172,6 @@ }, /turf/open/floor/iron, /area/station/cargo/storage) -"tkc" = ( -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/catwalk_floor, -/area/station/maintenance/tram/mid) "tki" = ( /obj/effect/turf_decal/trimline/neutral/filled/line, /obj/machinery/door/poddoor/shutters/preopen{ @@ -57025,12 +57212,6 @@ /obj/effect/decal/cleanable/dirt, /turf/open/floor/iron/smooth, /area/station/hallway/primary/tram/left) -"tkB" = ( -/obj/structure/disposalpipe/junction/flip, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/structure/cable, -/turf/open/floor/iron, -/area/station/cargo/miningdock) "tkH" = ( /obj/machinery/firealarm/directional/west{ pixel_y = 3 @@ -57203,6 +57384,16 @@ /obj/structure/disposalpipe/segment, /turf/open/floor/iron, /area/station/security/office) +"toh" = ( +/obj/effect/turf_decal/trimline/neutral/filled/line{ + dir = 4 + }, +/obj/machinery/camera/directional/east{ + c_tag = "Hallway - Service Wing Left Stairway" + }, +/obj/machinery/light/directional/east, +/turf/open/floor/iron, +/area/station/hallway/secondary/service) "toq" = ( /obj/effect/turf_decal/trimline/yellow/filled/line{ dir = 1 @@ -57458,18 +57649,6 @@ }, /turf/open/floor/iron/dark, /area/station/ai_monitored/turret_protected/aisat_interior) -"tse" = ( -/obj/machinery/camera{ - c_tag = "Medical - Central North-West"; - dir = 10; - network = list("ss13","medbay") - }, -/obj/structure/extinguisher_cabinet/directional/west, -/obj/effect/turf_decal/stripes/white/line{ - dir = 1 - }, -/turf/open/floor/iron, -/area/station/hallway/primary/tram/center) "tsg" = ( /obj/effect/turf_decal/trimline/purple/filled/corner{ dir = 8 @@ -57559,13 +57738,16 @@ /obj/structure/sign/poster/official/obey/directional/south, /turf/open/floor/iron/white, /area/station/security/execution/education) -"ttM" = ( -/obj/structure/chair/sofa/bench/tram/left{ - dir = 1 +"ttA" = ( +/obj/effect/turf_decal/trimline/brown/filled/corner, +/obj/structure/disposalpipe/segment{ + dir = 10 + }, +/obj/effect/turf_decal/trimline/brown/filled/corner{ + dir = 4 }, -/obj/effect/turf_decal/trimline/neutral/filled/line, /turf/open/floor/iron, -/area/station/hallway/primary/tram/center) +/area/station/cargo/miningdock) "tuf" = ( /obj/structure/window/reinforced/spawner/directional/east, /obj/structure/table, @@ -57608,14 +57790,6 @@ /obj/machinery/light/dim/directional/west, /turf/open/floor/iron/dark, /area/station/engineering/storage/tech) -"tvu" = ( -/obj/machinery/camera/directional/west{ - c_tag = "Hallway - Central Tram Platform North-West" - }, -/obj/machinery/firealarm/directional/west, -/obj/effect/turf_decal/stripes/white/line, -/turf/open/floor/iron, -/area/station/hallway/primary/tram/center) "tvP" = ( /obj/structure/rack, /obj/item/storage/box/lights/tubes{ @@ -57960,7 +58134,7 @@ /obj/effect/turf_decal/trimline/neutral/filled/line{ dir = 1 }, -/obj/machinery/airalarm/directional/north, +/obj/machinery/transport/power_rectifier, /turf/open/floor/iron, /area/station/hallway/primary/tram/center) "tBa" = ( @@ -58100,10 +58274,6 @@ /obj/effect/turf_decal/stripes/line, /turf/open/floor/plating/airless, /area/station/science/ordnance/bomb) -"tDI" = ( -/obj/structure/sign/warning/electric_shock, -/turf/closed/wall, -/area/station/hallway/primary/tram/left) "tDP" = ( /obj/structure/cable, /obj/structure/disposalpipe/segment{ @@ -58135,9 +58305,8 @@ /area/station/service/theater) "tEk" = ( /obj/effect/landmark/event_spawn, -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ - dir = 1 - }, +/obj/structure/cable, +/obj/structure/disposalpipe/segment, /turf/open/floor/iron, /area/station/hallway/secondary/exit/departure_lounge) "tEl" = ( @@ -58319,6 +58488,9 @@ /obj/machinery/camera/autoname/directional/east, /turf/open/floor/iron, /area/station/escapepodbay) +"tHj" = ( +/turf/open/floor/catwalk_floor, +/area/station/hallway/primary/tram/center) "tHt" = ( /obj/structure/railing{ dir = 1 @@ -58364,6 +58536,18 @@ /mob/living/simple_animal/bot/floorbot, /turf/open/floor/iron/dark, /area/station/ai_monitored/turret_protected/aisat_interior) +"tIk" = ( +/obj/effect/turf_decal/trimline/neutral/filled/corner{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/iron, +/area/station/hallway/secondary/exit/departure_lounge) "tID" = ( /obj/structure/transport/linear/public, /obj/effect/landmark/transport/transport_id{ @@ -58473,12 +58657,13 @@ /obj/effect/turf_decal/trimline/red/filled/line{ dir = 4 }, -/obj/machinery/door/airlock/security/glass{ - name = "Isolation Cell A" - }, /obj/effect/mapping_helpers/airlock/access/all/security/brig, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/door/airlock/security/glass{ + name = "Isolation Cell A"; + id = "Isolation_A" + }, /turf/open/floor/iron, /area/station/security/execution/transfer) "tJR" = ( @@ -58735,6 +58920,11 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron/white, /area/station/science/ordnance/office) +"tOJ" = ( +/obj/effect/decal/cleanable/dirt, +/obj/structure/disposalpipe/segment, +/turf/open/floor/catwalk_floor, +/area/station/hallway/primary/tram/center) "tPb" = ( /obj/structure/table, /obj/item/storage/dice, @@ -58749,15 +58939,6 @@ /obj/structure/cable, /turf/open/floor/iron/cafeteria, /area/station/command/heads_quarters/rd) -"tPw" = ( -/obj/effect/turf_decal/trimline/neutral/filled/line{ - dir = 4 - }, -/obj/structure/disposalpipe/segment{ - dir = 10 - }, -/turf/open/floor/iron, -/area/station/hallway/primary/tram/right) "tPz" = ( /obj/effect/turf_decal/trimline/red/filled/line, /obj/structure/cable, @@ -58841,11 +59022,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/cyan/visible, /turf/open/floor/engine, /area/station/engineering/supermatter/room) -"tRi" = ( -/obj/effect/decal/cleanable/dirt, -/obj/machinery/light/small/dim/directional/north, -/turf/open/floor/iron/smooth, -/area/station/hallway/primary/tram/center) "tRn" = ( /obj/structure/table, /obj/effect/turf_decal/trimline/neutral/filled/line{ @@ -59033,7 +59209,7 @@ /turf/open/floor/iron/white, /area/station/medical/surgery/fore) "tTW" = ( -/obj/machinery/atmospherics/pipe/smart/simple/supply/visible{ +/obj/machinery/atmospherics/pipe/smart/simple/cyan/hidden{ dir = 5 }, /turf/open/floor/iron, @@ -59060,7 +59236,7 @@ /obj/structure/bed{ dir = 4 }, -/obj/item/bedsheet/dorms{ +/obj/effect/spawner/random/bedsheet{ dir = 4 }, /obj/structure/sign/clock/directional/west, @@ -59636,11 +59812,6 @@ /obj/machinery/light/cold/directional/north, /turf/open/floor/grass, /area/station/commons/dorms) -"ueV" = ( -/obj/effect/turf_decal/sand, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/catwalk_floor, -/area/station/maintenance/tram/mid) "ufh" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -59677,7 +59848,7 @@ /obj/structure/bed{ dir = 8 }, -/obj/item/bedsheet/dorms, +/obj/effect/spawner/random/bedsheet, /obj/structure/sign/clock/directional/east, /obj/item/pillow/random, /turf/open/floor/carpet, @@ -59821,6 +59992,18 @@ "uje" = ( /turf/closed/wall, /area/station/science/robotics/lab) +"ujf" = ( +/obj/machinery/door/airlock/mining, +/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 + }, +/obj/effect/mapping_helpers/airlock/access/all/supply/mining, +/obj/machinery/door/firedoor, +/turf/open/floor/iron, +/area/station/cargo/miningfoundry) "ujm" = ( /obj/machinery/door/airlock/external{ autoclose = 0; @@ -60215,6 +60398,14 @@ /obj/machinery/light/directional/east, /turf/open/floor/iron, /area/station/hallway/secondary/exit) +"unH" = ( +/obj/effect/turf_decal/trimline/neutral/filled/line{ + dir = 8 + }, +/obj/structure/cable, +/obj/structure/extinguisher_cabinet/directional/west, +/turf/open/floor/iron, +/area/station/hallway/primary/tram/center) "unS" = ( /obj/effect/turf_decal/stripes/line{ dir = 4 @@ -60259,7 +60450,7 @@ /area/station/hallway/secondary/command) "upb" = ( /obj/structure/bed/double, -/obj/item/bedsheet/dorms_double, +/obj/effect/spawner/random/bedsheet/double, /obj/effect/landmark/start/hangover, /obj/structure/sign/clock/directional/north, /obj/item/pillow/random, @@ -60320,6 +60511,10 @@ /obj/effect/turf_decal/tile/neutral/fourcorners, /turf/open/floor/iron/dark, /area/station/science/robotics/lab) +"uqa" = ( +/obj/machinery/newscaster/directional/west, +/turf/open/floor/iron, +/area/station/hallway/primary/tram/center) "uqc" = ( /obj/structure/sign/clock/directional/east, /turf/open/floor/iron/cafeteria, @@ -60859,7 +61054,6 @@ /obj/item/storage/box, /obj/item/storage/box, /obj/machinery/firealarm/directional/south, -/obj/structure/extinguisher_cabinet/directional/west, /turf/open/floor/iron, /area/station/engineering/atmos) "uyJ" = ( @@ -60888,13 +61082,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/checker, /area/station/commons/lounge) -"uyX" = ( -/obj/effect/decal/cleanable/dirt, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/light/small/dim/directional/north, -/turf/open/floor/catwalk_floor, -/area/station/maintenance/tram/mid) "uyZ" = ( /obj/effect/turf_decal/trimline/purple/filled/line{ dir = 8 @@ -61091,8 +61278,7 @@ pixel_x = -3; pixel_y = -3 }, -/obj/machinery/door/window/left/directional/west{ - dir = 2; +/obj/machinery/door/window/left/directional/south{ name = "Secure Medical Storage"; req_access = list("medical") }, @@ -61382,12 +61568,6 @@ /obj/effect/turf_decal/trimline/red/filled/line, /turf/open/floor/iron, /area/station/security/prison/garden) -"uFK" = ( -/obj/machinery/camera/directional/south{ - c_tag = "Hallway - Upper East Power Hatch" - }, -/turf/open/openspace, -/area/station/hallway/secondary/exit) "uFX" = ( /obj/structure/lattice/catwalk, /obj/machinery/atmospherics/pipe/smart/simple/yellow/visible, @@ -61779,13 +61959,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/carpet, /area/station/commons/dorms) -"uLp" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/dirt, -/obj/structure/cable, -/obj/structure/disposalpipe/segment, -/turf/open/floor/catwalk_floor, -/area/station/hallway/primary/tram/center) "uLt" = ( /obj/structure/table/glass, /obj/item/reagent_containers/cup/beaker{ @@ -61879,13 +62052,6 @@ }, /turf/open/floor/iron/white, /area/station/science/xenobiology) -"uMD" = ( -/obj/machinery/door/airlock/hatch{ - name = "Emergency Exit" - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/catwalk_floor, -/area/station/hallway/primary/tram/left) "uME" = ( /obj/effect/decal/cleanable/dirt, /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ @@ -62237,6 +62403,22 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron, /area/station/hallway/primary/tram/left) +"uUe" = ( +/obj/structure/table, +/obj/item/grenade/chem_grenade/cleaner, +/obj/item/grenade/chem_grenade/cleaner, +/obj/item/grenade/chem_grenade/cleaner, +/obj/item/reagent_containers/spray/cleaner, +/obj/machinery/newscaster/directional/south, +/obj/effect/turf_decal/trimline/neutral/filled/line, +/obj/effect/turf_decal/trimline/purple/filled/warning, +/obj/item/paper_bin{ + pixel_x = -3; + pixel_y = 7 + }, +/obj/item/key/janitor, +/turf/open/floor/iron, +/area/station/service/janitor) "uUs" = ( /obj/machinery/vending/wardrobe/sec_wardrobe, /obj/effect/turf_decal/trimline/red/filled/line{ @@ -62305,6 +62487,16 @@ /obj/structure/cable, /turf/open/floor/wood, /area/station/command/heads_quarters/hop) +"uVc" = ( +/obj/effect/landmark/start/shaft_miner, +/obj/effect/landmark/event_spawn, +/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/miningdock) "uVo" = ( /turf/open/floor/carpet, /area/station/command/meeting_room) @@ -62491,6 +62683,12 @@ /obj/structure/cable, /turf/open/floor/iron, /area/station/engineering/engine_smes) +"uYI" = ( +/obj/effect/turf_decal/trimline/neutral/filled/line{ + dir = 1 + }, +/turf/closed/wall, +/area/station/maintenance/tram/mid) "uYX" = ( /obj/effect/turf_decal/trimline/red/filled/corner{ dir = 8 @@ -62588,22 +62786,6 @@ "vay" = ( /turf/open/floor/plating, /area/station/commons/dorms) -"vaF" = ( -/obj/effect/turf_decal/trimline/purple/filled/line{ - dir = 4 - }, -/obj/effect/turf_decal/trimline/purple/filled/line{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/door/airlock/command{ - name = "MiniSat Access" - }, -/obj/effect/mapping_helpers/airlock/access/any/command/minisat, -/obj/effect/landmark/navigate_destination/minisat_access_ai, -/turf/open/floor/iron/dark, -/area/station/science/lower) "vaK" = ( /obj/effect/turf_decal/trimline/neutral/filled/corner{ dir = 1 @@ -62705,8 +62887,7 @@ /obj/effect/turf_decal/siding/wood{ dir = 8 }, -/obj/machinery/door/window{ - dir = 8; +/obj/machinery/door/window/left/directional/west{ name = "Secure Art Exhibition"; req_access = list("library") }, @@ -62993,6 +63174,11 @@ /obj/effect/landmark/start/hangover, /turf/open/floor/iron/grimy, /area/station/service/library/lounge) +"vhF" = ( +/obj/effect/turf_decal/siding/thinplating/dark, +/obj/structure/table, +/turf/open/floor/iron/dark, +/area/station/hallway/secondary/service) "vhG" = ( /obj/effect/turf_decal/trimline/neutral/filled/line{ dir = 1 @@ -63038,6 +63224,13 @@ }, /turf/open/space/openspace, /area/station/solars/starboard/fore) +"viU" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/light/small/dim/directional/north, +/turf/open/floor/catwalk_floor, +/area/station/maintenance/tram/mid) "viW" = ( /obj/effect/decal/remains/human, /obj/effect/decal/cleanable/crayon{ @@ -63304,17 +63497,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/security/prison) -"vms" = ( -/obj/structure/cable/multilayer/multiz, -/obj/effect/turf_decal/stripes/end{ - dir = 4 - }, -/obj/effect/decal/cleanable/dirt, -/obj/structure/railing{ - dir = 1 - }, -/turf/open/floor/plating, -/area/station/hallway/secondary/exit) "vmB" = ( /obj/effect/turf_decal/tile/neutral{ dir = 1 @@ -63463,6 +63645,20 @@ }, /turf/open/floor/iron/white, /area/station/science/genetics) +"vpt" = ( +/obj/structure/railing{ + dir = 9 + }, +/obj/effect/turf_decal/trimline/dark_red/warning{ + dir = 9 + }, +/obj/structure/transport/linear/public, +/obj/machinery/elevator_control_panel/directional/north{ + linked_elevator_id = "tram_upper_center_lift"; + preset_destination_names = list("2" = "Lower Deck", "3" = "Upper Deck") + }, +/turf/open/floor/plating/elevatorshaft, +/area/station/maintenance/tram/mid) "vpG" = ( /obj/effect/turf_decal/trimline/purple/filled/corner{ dir = 4 @@ -63523,6 +63719,18 @@ /obj/effect/mapping_helpers/airlock/access/all/science/xenobio, /turf/open/floor/catwalk_floor, /area/station/science/xenobiology) +"vqx" = ( +/obj/effect/turf_decal/sand, +/obj/machinery/door_buttons/airlock_controller{ + idExterior = "middleleft_upper_lower_eva_external"; + idInterior = "middleleft_upper_lower_eva_internal"; + idSelf = "middleleft_upper_lower_eva_airlock_control"; + name = "External Access Console"; + pixel_y = 24 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/catwalk_floor, +/area/station/maintenance/tram/mid) "vqH" = ( /obj/effect/turf_decal/stripes/line{ dir = 1 @@ -63794,6 +64002,20 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron, /area/station/hallway/secondary/construction/engineering) +"vvd" = ( +/obj/machinery/camera{ + c_tag = "Hallway - Starboard Tram Platform South-West"; + dir = 10 + }, +/obj/machinery/firealarm/directional/west, +/obj/structure/disposalpipe/segment{ + dir = 10 + }, +/obj/effect/turf_decal/stripes/white/line{ + dir = 1 + }, +/turf/open/floor/iron, +/area/station/hallway/primary/tram/right) "vvk" = ( /obj/effect/turf_decal/trimline/neutral/filled/line{ dir = 5 @@ -63866,14 +64088,6 @@ }, /turf/open/floor/wood, /area/station/service/bar/backroom) -"vwx" = ( -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/catwalk_floor, -/area/station/maintenance/tram/mid) "vwz" = ( /obj/effect/turf_decal/trimline/neutral/filled/corner, /obj/effect/turf_decal/trimline/blue/filled/corner{ @@ -64161,14 +64375,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/checker, /area/station/commons/lounge) -"vBy" = ( -/obj/structure/cable/multilayer/multiz, -/obj/effect/turf_decal/stripes/line{ - dir = 5 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/plating, -/area/station/hallway/primary/tram/left) "vBB" = ( /obj/machinery/power/terminal{ dir = 1 @@ -64273,6 +64479,13 @@ /obj/effect/turf_decal/trimline/white/warning, /turf/open/floor/iron, /area/station/maintenance/tram/left) +"vDd" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/light/small/dim/directional/south, +/turf/open/floor/catwalk_floor, +/area/station/maintenance/tram/mid) "vDg" = ( /obj/structure/flora/bush/fullgrass/style_random, /obj/effect/landmark/event_spawn, @@ -64325,13 +64538,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/catwalk_floor, /area/station/maintenance/central/greater) -"vEf" = ( -/obj/effect/decal/cleanable/dirt, -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/turf/open/floor/catwalk_floor, -/area/station/hallway/secondary/exit) "vEl" = ( /obj/structure/window/reinforced/spawner/directional/west, /turf/open/misc/grass/jungle, @@ -64378,6 +64584,15 @@ }, /turf/open/floor/iron/white, /area/station/science/xenobiology) +"vFe" = ( +/obj/effect/mapping_helpers/burnt_floor, +/obj/structure/sign/poster/official/midtown_slice/directional/north, +/obj/machinery/conveyor{ + dir = 8; + id = "mining" + }, +/turf/open/floor/iron, +/area/station/cargo/miningfoundry) "vFh" = ( /obj/effect/turf_decal/trimline/blue/filled/line{ dir = 4 @@ -64438,11 +64653,6 @@ }, /turf/open/floor/wood, /area/station/service/lawoffice) -"vGf" = ( -/obj/effect/decal/cleanable/dirt, -/obj/machinery/light/small/dim/directional/south, -/turf/open/floor/iron/smooth, -/area/station/hallway/primary/tram/center) "vGi" = ( /obj/effect/turf_decal/trimline/neutral/filled/corner, /obj/effect/turf_decal/trimline/neutral/filled/corner{ @@ -64608,7 +64818,8 @@ /turf/open/floor/iron/checker, /area/station/commons/lounge) "vJA" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden, +/obj/machinery/meter, /turf/closed/wall/r_wall, /area/station/engineering/break_room) "vJC" = ( @@ -64621,7 +64832,7 @@ "vKd" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/visible{ +/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden{ dir = 5 }, /obj/structure/disposalpipe/segment, @@ -65199,6 +65410,12 @@ /obj/effect/landmark/start/assistant, /turf/open/floor/iron, /area/station/commons/dorms) +"vUk" = ( +/obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden{ + dir = 4 + }, +/turf/open/floor/iron, +/area/station/engineering/atmos) "vUu" = ( /turf/open/floor/engine/hull/reinforced, /area/space/nearstation) @@ -65270,17 +65487,6 @@ "vWx" = ( /turf/closed/wall/r_wall, /area/station/cargo/miningdock/oresilo) -"vWy" = ( -/obj/machinery/door/airlock/engineering/glass{ - name = "Tram Mechanical Room" - }, -/obj/effect/mapping_helpers/airlock/access/all/engineering/general, -/obj/effect/mapping_helpers/airlock/unres{ - dir = 8 - }, -/obj/structure/cable, -/turf/open/floor/iron/smooth, -/area/station/hallway/primary/tram/right) "vWI" = ( /obj/effect/spawner/structure/window, /turf/open/floor/plating, @@ -65343,6 +65549,13 @@ /obj/effect/spawner/structure/window/reinforced, /turf/open/floor/plating, /area/station/cargo/office) +"vYn" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 4 + }, +/turf/open/floor/catwalk_floor, +/area/station/maintenance/tram/mid) "vYo" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -65418,6 +65631,18 @@ /obj/machinery/airalarm/directional/north, /turf/open/floor/wood/large, /area/station/service/barber) +"vZT" = ( +/obj/machinery/button/elevator/directional/north{ + id = "tram_upper_center_lift" + }, +/obj/machinery/lift_indicator/directional/north{ + linked_elevator_id = "tram_upper_center_lift" + }, +/obj/effect/turf_decal/trimline/neutral/filled/line{ + dir = 1 + }, +/turf/open/floor/iron, +/area/station/hallway/secondary/service) "vZX" = ( /obj/structure/lattice/catwalk, /obj/structure/railing{ @@ -65663,13 +65888,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron, /area/station/security/execution/transfer) -"weo" = ( -/obj/effect/turf_decal/trimline/neutral/filled/line{ - dir = 1 - }, -/obj/structure/sign/poster/contraband/random/directional/north, -/turf/open/floor/iron, -/area/station/hallway/primary/tram/center) "wev" = ( /obj/effect/turf_decal/siding/thinplating/dark/corner{ dir = 4 @@ -65956,6 +66174,10 @@ /obj/effect/mapping_helpers/airlock/access/all/security/general, /turf/open/floor/catwalk_floor, /area/station/maintenance/department/eva) +"wjB" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden, +/turf/closed/wall/r_wall, +/area/station/engineering/break_room) "wjP" = ( /obj/effect/turf_decal/stripes/line{ dir = 1 @@ -65980,11 +66202,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/engine, /area/station/engineering/supermatter/room) -"wki" = ( -/obj/effect/decal/cleanable/dirt, -/obj/structure/ladder, -/turf/open/floor/iron/smooth, -/area/station/hallway/primary/tram/center) "wkk" = ( /turf/open/floor/iron/freezer, /area/station/security/prison) @@ -66136,6 +66353,13 @@ }, /turf/open/floor/iron/dark, /area/station/service/chapel/monastery) +"wnP" = ( +/obj/machinery/door/airlock/hatch{ + name = "Emergency Exit" + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/catwalk_floor, +/area/station/hallway/primary/tram/right) "woB" = ( /obj/structure/window/reinforced/spawner/directional/west, /turf/open/floor/iron/white/smooth_corner{ @@ -66203,6 +66427,13 @@ }, /turf/open/floor/iron, /area/station/service/hydroponics/garden) +"wpH" = ( +/obj/effect/turf_decal/trimline/neutral/filled/corner{ + dir = 8 + }, +/obj/structure/cable, +/turf/open/floor/iron, +/area/station/hallway/primary/tram/center) "wpK" = ( /turf/closed/wall, /area/station/science/lobby) @@ -66424,6 +66655,13 @@ /obj/machinery/atmospherics/pipe/smart/simple/orange/visible, /turf/open/floor/iron, /area/station/engineering/atmos) +"wus" = ( +/obj/structure/disposalpipe/junction/flip, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron, +/area/station/cargo/miningdock) "wuC" = ( /obj/structure/table, /obj/effect/turf_decal/trimline/brown/filled/line{ @@ -66507,20 +66745,6 @@ /obj/structure/sign/poster/official/random/directional/south, /turf/open/floor/iron, /area/station/commons/fitness) -"wwH" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/turf_decal/stripes/end{ - dir = 4 - }, -/obj/structure/railing, -/obj/machinery/atmospherics/pipe/multiz/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/multiz/scrubbers/hidden/layer2{ - dir = 4 - }, -/turf/open/floor/plating, -/area/station/hallway/secondary/exit) "wwI" = ( /obj/machinery/holopad, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -66742,6 +66966,10 @@ }, /turf/open/floor/iron/dark, /area/station/ai_monitored/turret_protected/aisat/foyer) +"wzJ" = ( +/obj/structure/sign/warning/electric_shock, +/turf/closed/wall/r_wall, +/area/station/maintenance/port/central) "wAa" = ( /obj/effect/turf_decal/trimline/purple/filled/line{ dir = 4 @@ -66810,6 +67038,13 @@ }, /turf/open/floor/carpet, /area/station/service/chapel/monastery) +"wAB" = ( +/obj/structure/cable, +/obj/effect/turf_decal/tile/brown/opposingcorners{ + dir = 1 + }, +/turf/open/floor/iron, +/area/station/cargo/miningfoundry) "wAG" = ( /obj/effect/turf_decal/bot, /obj/structure/reagent_dispensers/foamtank, @@ -66892,11 +67127,6 @@ /obj/structure/disposalpipe/trunk, /turf/open/floor/iron/white, /area/station/science/xenobiology) -"wCZ" = ( -/obj/effect/turf_decal/trimline/neutral/filled/line, -/obj/machinery/light/directional/south, -/turf/open/floor/iron, -/area/station/hallway/secondary/service) "wDh" = ( /obj/machinery/door/airlock/external, /obj/effect/mapping_helpers/airlock/cyclelink_helper, @@ -66958,15 +67188,6 @@ }, /turf/open/floor/iron, /area/station/hallway/primary/tram/left) -"wEg" = ( -/obj/machinery/lift_indicator/directional/north{ - linked_elevator_id = "tram_upper_center_lift" - }, -/obj/machinery/button/elevator/directional/north{ - id = "tram_upper_center_lift" - }, -/turf/open/floor/iron, -/area/station/hallway/primary/tram/center) "wEl" = ( /obj/effect/turf_decal/trimline/neutral/filled/corner{ dir = 1 @@ -67033,6 +67254,12 @@ }, /turf/open/floor/iron, /area/station/command/teleporter) +"wFf" = ( +/obj/structure/disposalpipe/junction{ + dir = 4 + }, +/turf/open/floor/catwalk_floor, +/area/station/hallway/primary/tram/center) "wFq" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -67254,7 +67481,7 @@ /obj/structure/bed/double{ dir = 4 }, -/obj/item/bedsheet/dorms_double{ +/obj/effect/spawner/random/bedsheet/double{ dir = 4 }, /obj/structure/sign/clock/directional/north, @@ -67282,6 +67509,18 @@ dir = 1 }, /area/station/command/bridge) +"wJF" = ( +/obj/machinery/door/firedoor, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/neutral/filled/line, +/obj/effect/turf_decal/stripes/white/full, +/turf/open/floor/iron, +/area/station/hallway/secondary/exit/departure_lounge) "wJM" = ( /obj/structure/lattice/catwalk, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -67456,6 +67695,22 @@ }, /turf/open/floor/iron, /area/station/engineering/atmos) +"wNv" = ( +/obj/structure/closet, +/obj/item/clothing/ears/earmuffs{ + pixel_x = -3; + pixel_y = -2 + }, +/obj/item/clothing/ears/earmuffs{ + pixel_y = 7 + }, +/obj/item/clothing/ears/earmuffs{ + pixel_x = 6; + pixel_y = 3 + }, +/obj/effect/turf_decal/tile/brown/fourcorners, +/turf/open/floor/iron, +/area/station/cargo/miningfoundry) "wNK" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/violet/visible, /turf/open/floor/iron, @@ -67486,6 +67741,12 @@ }, /turf/open/floor/iron, /area/station/security/brig) +"wOf" = ( +/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/miningdock) "wOs" = ( /obj/machinery/door/firedoor, /obj/effect/turf_decal/trimline/brown/filled/line{ @@ -67558,6 +67819,15 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/hallway/primary/tram/right) +"wPR" = ( +/obj/effect/turf_decal/siding/thinplating{ + dir = 1 + }, +/obj/structure/disposalpipe/segment{ + dir = 6 + }, +/turf/open/floor/iron, +/area/station/hallway/primary/tram/center) "wQm" = ( /turf/open/floor/iron, /area/station/engineering/atmos) @@ -67602,6 +67872,13 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron, /area/station/hallway/secondary/construction/engineering) +"wRu" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/dirt, +/obj/structure/cable, +/obj/structure/disposalpipe/segment, +/turf/open/floor/catwalk_floor, +/area/station/hallway/primary/tram/center) "wRv" = ( /obj/machinery/atmospherics/pipe/smart/simple/dark/visible, /turf/open/floor/iron/white, @@ -67745,17 +68022,12 @@ /turf/open/floor/wood, /area/station/command/meeting_room) "wWh" = ( -/obj/effect/turf_decal/trimline/neutral/filled/line{ - dir = 1 - }, -/obj/effect/turf_decal/trimline/neutral/filled/corner, -/obj/structure/cable, -/obj/structure/disposalpipe/segment{ - dir = 4 +/obj/machinery/vending/cola/blue, +/obj/effect/turf_decal/siding/thinplating/dark{ + dir = 5 }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/turf/open/floor/iron, +/obj/effect/turf_decal/tile/neutral/fourcorners, +/turf/open/floor/iron/dark, /area/station/hallway/secondary/exit) "wWn" = ( /obj/effect/decal/cleanable/dirt, @@ -67779,6 +68051,10 @@ /obj/machinery/door/window/right/directional/north, /turf/open/floor/iron/smooth, /area/station/maintenance/disposal) +"wWv" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden, +/turf/closed/wall/r_wall, +/area/station/engineering/atmos) "wWF" = ( /obj/effect/decal/cleanable/dirt, /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ @@ -67957,6 +68233,14 @@ /obj/effect/turf_decal/siding/thinplating/dark, /turf/open/floor/iron/white, /area/station/science/research) +"xae" = ( +/obj/machinery/camera/directional/west{ + c_tag = "Hallway - Central Tram Platform North-West" + }, +/obj/machinery/firealarm/directional/west, +/obj/effect/turf_decal/stripes/white/line, +/turf/open/floor/iron, +/area/station/hallway/primary/tram/center) "xat" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -68038,13 +68322,21 @@ name = "Pharmacy Shutters" }, /obj/machinery/door/firedoor, -/obj/machinery/door/window/left/directional/south{ - dir = 4; +/obj/machinery/door/window/left/directional/east{ name = "Chemistry Desk"; req_access = list("pharmacy") }, /turf/open/floor/iron/white, /area/station/medical/pharmacy) +"xbT" = ( +/obj/effect/turf_decal/trimline/neutral/filled/corner{ + dir = 8 + }, +/obj/structure/disposalpipe/segment{ + dir = 5 + }, +/turf/open/floor/iron, +/area/station/hallway/primary/tram/right) "xcd" = ( /obj/effect/turf_decal/trimline/red/filled/line{ dir = 8 @@ -68087,6 +68379,11 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron/white, /area/station/science/xenobiology) +"xcU" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/railing, +/turf/open/floor/iron, +/area/station/cargo/miningfoundry) "xdw" = ( /obj/machinery/portable_atmospherics/scrubber, /turf/open/floor/iron/dark, @@ -68140,6 +68437,9 @@ /obj/machinery/airalarm/directional/south, /turf/open/floor/iron, /area/station/maintenance/tram/mid) +"xdZ" = ( +/turf/closed/wall, +/area/station/cargo/miningfoundry) "xei" = ( /obj/machinery/atmospherics/components/binary/pump/on, /obj/machinery/atmospherics/pipe/layer_manifold/scrubbers/hidden{ @@ -68610,6 +68910,12 @@ }, /turf/open/floor/iron/grimy, /area/station/service/chapel/office) +"xnH" = ( +/obj/effect/turf_decal/stripes/line, +/obj/effect/landmark/navigate_destination/dockaux, +/obj/machinery/light/directional/west, +/turf/open/floor/iron, +/area/station/hallway/secondary/entry) "xnI" = ( /turf/open/floor/iron, /area/station/maintenance/tram/left) @@ -68638,13 +68944,11 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron, /area/station/commons/fitness/recreation) -"xnY" = ( -/obj/structure/sign/warning/electric_shock, -/turf/closed/wall, -/area/station/hallway/primary/tram/center) "xog" = ( /obj/machinery/door/airlock/security/glass{ - name = "Isolation Wing" + name = "Isolation Wing"; + unres_sensor = 1; + unres_sides = 8 }, /obj/machinery/door/firedoor, /obj/effect/turf_decal/trimline/red/filled/line, @@ -69063,6 +69367,13 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron, /area/station/security/office) +"xwO" = ( +/obj/machinery/door/airlock/hatch{ + name = "Emergency Exit" + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/catwalk_floor, +/area/station/hallway/primary/tram/left) "xxe" = ( /obj/machinery/duct, /obj/effect/turf_decal/trimline/neutral/filled/corner{ @@ -69400,6 +69711,13 @@ /obj/effect/turf_decal/tile/blue/anticorner/contrasted, /turf/open/floor/iron/dark, /area/station/command/bridge) +"xCp" = ( +/obj/structure/chair/sofa/bench/tram/right{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/neutral/filled/line, +/turf/open/floor/iron, +/area/station/hallway/primary/tram/center) "xCr" = ( /obj/structure/railing{ dir = 8 @@ -69465,6 +69783,10 @@ }, /turf/open/floor/engine, /area/station/engineering/supermatter/room) +"xEZ" = ( +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/iron/smooth, +/area/station/hallway/secondary/exit) "xFb" = ( /obj/effect/turf_decal/trimline/red/filled/line{ dir = 4 @@ -69519,12 +69841,6 @@ "xFx" = ( /turf/open/floor/iron, /area/station/commons/fitness) -"xGn" = ( -/obj/structure/disposalpipe/junction{ - dir = 4 - }, -/turf/open/floor/catwalk_floor, -/area/station/hallway/primary/tram/center) "xGw" = ( /obj/machinery/door/airlock/external{ name = "Labor Camp Shuttle Airlock" @@ -69535,16 +69851,6 @@ /obj/effect/mapping_helpers/airlock/access/all/security/brig, /turf/open/floor/plating, /area/station/security/processing) -"xGM" = ( -/obj/machinery/door/airlock/hatch{ - name = "Emergency Exit" - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/structure/cable, -/turf/open/floor/catwalk_floor, -/area/station/hallway/primary/tram/center) "xGX" = ( /obj/effect/turf_decal/siding/thinplating/corner{ dir = 8 @@ -70175,9 +70481,14 @@ /obj/effect/spawner/structure/window, /turf/open/floor/plating, /area/station/medical/treatment_center) -"xTq" = ( +"xTn" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/decal/cleanable/dirt, /turf/open/floor/catwalk_floor, -/area/station/hallway/primary/tram/center) +/area/station/maintenance/tram/mid) "xTr" = ( /obj/effect/turf_decal/trimline/dark_green/filled/corner{ dir = 8 @@ -70423,15 +70734,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/dark, /area/station/commons/fitness/recreation/entertainment) -"xYm" = ( -/obj/structure/cable, -/obj/machinery/door/airlock/maintenance_hatch{ - name = "Utilities Access Hatch" - }, -/obj/effect/mapping_helpers/airlock/access/all/engineering/general, -/obj/structure/disposalpipe/segment, -/turf/open/floor/catwalk_floor, -/area/station/hallway/primary/tram/center) "xYp" = ( /obj/effect/turf_decal/trimline/red/filled/corner{ dir = 1 @@ -70532,6 +70834,22 @@ /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, /turf/open/floor/iron, /area/station/commons/dorms) +"yaj" = ( +/obj/effect/turf_decal/trimline/purple/filled/line{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/purple/filled/line{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/door/airlock/command{ + name = "MiniSat Access" + }, +/obj/effect/mapping_helpers/airlock/access/any/command/minisat, +/obj/effect/landmark/navigate_destination/minisat_access_ai, +/turf/open/floor/iron/dark, +/area/station/science/lower) "yar" = ( /obj/structure/cable, /obj/structure/disposalpipe/segment{ @@ -86515,9 +86833,9 @@ qQq qQq qQq lQM -swR -pxp -abE +jpR +imm +wzJ dIy pZW tUM @@ -86774,7 +87092,7 @@ qQq lQM tFW pal -mTw +cYe qCf pZW uof @@ -89577,7 +89895,7 @@ afn lKe gOh rbD -fgs +pAA qaM sfM kwe @@ -89618,7 +89936,7 @@ elr elr elr xPP -kfR +guI xFx vAF swX @@ -99348,9 +99666,9 @@ abM abM gjb eco -fKL +eZE iNR -brE +neh ekB qjU qjU @@ -99609,7 +99927,7 @@ sHm foY cYX ekB -swL +vpt pWP gAJ qjU @@ -99641,7 +99959,7 @@ pkp anr anH nkF -ffF +cPg uQm uYH nPN @@ -99864,9 +100182,9 @@ ekB bYF ulM isa -ljo +uUe ekB -sLl +slw tID gPT qjU @@ -100118,17 +100436,17 @@ aaa aaa aaa ekB -gmp -aRT -sCR -qbx +aAz +fCP +kzC +bLS ekB -hOy -pbS -mod +mrT +nHA +rwF qjU -dRS -ueV +vYn +ejo qjU abM abM @@ -100136,8 +100454,8 @@ ada abM abM qjU -ueV -fpx +ejo +djS jnq abM jnq @@ -100375,16 +100693,16 @@ aaa aaa aaa ekB -jEz -kqa -phd +dLD +eki +adt qjU qjU qjU qtV ceb qjU -gfO +vqx ecX qjU acQ @@ -100394,7 +100712,7 @@ acQ acQ qjU nNs -qrc +gTY jnq abM jnq @@ -100634,15 +100952,15 @@ aaa ekB gEx uTz -mjQ +qCm qjU -ovk -mqS +loj +mHt sKN -jce -rmw -nkw -qkk +cYh +csH +eVy +vDd qjU ujK ujK @@ -100650,8 +100968,8 @@ rQk ujK ujK qjU -uyX -nCJ +viU +qRC jnq abM jnq @@ -100891,12 +101209,12 @@ aaa ekB bxX hIg -bvL +qTt qjU qjU -qPp -bJY -wCZ +uYI +vZT +qXv qjU qjU nag @@ -101148,10 +101466,10 @@ dJJ dJJ dJJ dJJ -quE +jkn dJJ -tbg -iEu +axr +gJt jra ahy mxR @@ -101411,7 +101729,7 @@ qjT kJY ovL ahy -fEr +vhF qjU gmj pnF @@ -101665,7 +101983,7 @@ kCQ vZZ kCQ lOe -mNZ +toh xpb jeS bMZ @@ -104259,9 +104577,9 @@ fal pcu llU tpm +wjB vJA -vJA -ulV +wjB gYI cEq gYI @@ -104518,7 +104836,7 @@ cgd vIC pOZ hoT -hZr +wWv amA pvC qsP @@ -104775,7 +105093,7 @@ akM wRi oFd ntL -hZr +wWv gIu ifk qkG @@ -105034,14 +105352,14 @@ nku pso hZr amC -lJm +cmM any anO -aog +omN kpq rDj tTW -bZW +vUk wQm skM bZW @@ -105242,7 +105560,7 @@ acF vWI sNs vWI -jXA +aWJ vWI sNs alg @@ -105289,7 +105607,7 @@ oNq kcP hNE ovi -hZr +hIt fvn lJm rfW @@ -105540,7 +105858,7 @@ aaa hZr gZE hJN -wQm +rWn xml vTF akP @@ -105781,8 +106099,8 @@ mGw dau wxa mGw -cEV -qkk +lOx +vDd qjU hUz hUz @@ -105790,8 +106108,8 @@ ghW hUz hUz qjU -kmH -vwx +hSm +xTn qjU aaa hZr @@ -106038,8 +106356,8 @@ mGw eep eep mGw -sac -mZg +cpR +aGi qjU acP acP @@ -106048,7 +106366,7 @@ acP acP qjU ecX -cOu +bXs qjU aaa hZr @@ -106295,8 +106613,8 @@ bIm eep eep mGw -rFw -tkc +ixy +cbc qjU abM abM @@ -106304,8 +106622,8 @@ ade abM abM qjU -tkc -rFw +cbc +ixy qjU aaa hZr @@ -116546,11 +116864,11 @@ aac aac aaa aaa -aaa -aaa -aaa -aaa -aaa +xdZ +xdZ +xdZ +xdZ +xdZ unl hKV rMq @@ -116803,11 +117121,11 @@ aac aac aaa aaa -aaa -aaa -aaa -aaa -aaa +xdZ +mTg +meg +nxN +pzb unl ikc bvk @@ -116815,7 +117133,7 @@ aeu pzd njK eyR -sce +cUB afu uGW fvM @@ -117059,12 +117377,12 @@ aac aac aac aac -aac -aaa -aaa -aaa -aaa aaa +xdZ +qzh +mqT +cqj +mgj unl oNp rMq @@ -117072,7 +117390,7 @@ qBT oCe lDw lJt -oTd +cbA cJX uGW fvM @@ -117315,13 +117633,13 @@ aac aac aac aac -aac -aac -aaa -aaa -aaa aaa aaa +xdZ +vFe +cZQ +ajn +szr unl rbM gJs @@ -117329,7 +117647,7 @@ uRR rMq unl npb -oTd +cbA cJX uGW uGW @@ -117573,20 +117891,20 @@ aac aac aac aac -aac -aaa -aaa -aaa aaa -aaa -unl +xdZ +qMI +cZQ +xcU +sfn +njK xiZ nTG nTG taK unl nLK -tkB +wus vLL chf sOI @@ -117829,21 +118147,21 @@ aac aac aac aac -aac -aac -aaa -aaa -aaa aaa aaa -unl +xdZ +siF +cZQ +xcU +goY +njK flZ ktb mNp qal unl -gxw -gIV +ext +cuf cJX pCL dwA @@ -118086,21 +118404,21 @@ aac aac aac aac -aac -aac aaa aaa -aaa -aaa -aaa -unl +xdZ +jsx +mqT +xcU +eAV +qxG unl unl unl unl unl -eyR -bAa +cBD +kip cJX uGW uGW @@ -118344,20 +118662,20 @@ aac aac aac aac -aac -aaa -aaa -aaa -aaa -aaa -aaa aaa -aaa -uGW -bwM +xdZ +ddY +kxV +nXb +wAB +nzF +wNv +xdZ +dci pni -bMX -ljU +kaF +ikI +cWA lGz bBs afR @@ -118602,19 +118920,19 @@ aac aac aaa aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -uGW -bwM -eyR -kDi -afi +xdZ +fdc +cZQ +jwy +bvA +pIF +mIF +ujf +sDG +oVg +wOf +wOf +uVc kDi cJX wMu @@ -118859,26 +119177,26 @@ aac aac aac aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa +xdZ +xdZ +xdZ +xdZ +xdZ +xdZ +xdZ uGW bwM -dwA +eJI +iLY dAl -afj +ttA cZY jhN kDF vso nbo wqs -kbZ +fFO lHU qGM emT @@ -119123,7 +119441,7 @@ aaa aaa aaa aaa -aaa +uGW uGW uGW uGW @@ -119146,7 +119464,7 @@ abM abM qxm qxm -lLA +nOo myD myD myD @@ -119406,7 +119724,7 @@ hKj hKj myD sVs -hyH +aMt stO aiB hKj @@ -120223,7 +120541,7 @@ pKC cPE qah erv -vaF +yaj egK aGY pRm @@ -120733,7 +121051,7 @@ mBW hJl nrf hJl -iKp +reC xnS hJl dNT @@ -144608,7 +144926,7 @@ pMW avE nmY hng -dJq +xnH nmY nmY nmY @@ -152051,8 +152369,8 @@ cOE mHX jtg jvf -vBy -shP +fnL +iZK yiM pBj nXn @@ -152822,8 +153140,8 @@ jvf fKO tki jvf -tDI -qBI +loc +syX yiM mjx heY @@ -153079,7 +153397,7 @@ wHH uUc wid kqY -hdk +szw cEg yiM nMW @@ -153841,7 +154159,7 @@ aQO aQO aQO aQO -qhM +rxI nYq yiM cFs @@ -157161,7 +157479,7 @@ aBN sDO jFh msW -apW +pLg nSV aPk sGG @@ -157181,7 +157499,7 @@ nsn nsn hPM fmJ -jHD +fUT fRW xBV xlT @@ -157440,7 +157758,7 @@ tlg kOE yiM yiM -soP +kdd yiM cFs nVr @@ -157448,7 +157766,7 @@ laU jGG cFs yiM -uMD +xwO yiM yiM fpg @@ -165407,7 +165725,7 @@ eSz eSz izU vYA -vGf +kSI izU eSz nSP @@ -165415,7 +165733,7 @@ fXy lwN eSz izU -tRi +ccU ghg jyH jyH @@ -165663,7 +165981,7 @@ eSz eSz eSz izU -jdG +dEH izU izU eSz @@ -165673,7 +165991,7 @@ lwN eSz izU izU -gIU +nAT jyH lCA jRS @@ -165930,7 +166248,7 @@ lwN eSz izU seG -xTq +tHj jyH pvp kSh @@ -166172,22 +166490,22 @@ nTz rQl qez izU -azC +swd izU -wEg -ttM +rIm +crQ izU -bTc -qCg -xYm +leX +rTn +gmm lEj rWQ iCj fkZ lEj -xYm -uLp -bII +gmm +wRu +mHj jyH aQi jbg @@ -166430,11 +166748,11 @@ aBQ rWd izU ghg -xnY +cTc rOu -sBc +xCp izU -fPk +sIk izU izU eSz @@ -166444,7 +166762,7 @@ lwN eSz izU izU -xGM +dMw jyH wmy iYv @@ -166686,22 +167004,22 @@ bra mfN diN izU -ejh -fDF -oQT -jUp -pod -sEp -jHj -tvu +mXI +kmb +kNG +wpH +unH +krV +oDs +xae kNT brr mNB fbk kNT -tse -boi -mDP +tgE +uqa +fYl jyH pob xbN @@ -166945,7 +167263,7 @@ bhs izU izU izU -weo +bAP rOu rOu rOu @@ -167202,9 +167520,9 @@ lWy jGD izU izU -fWa -aUx -cgF +jvA +nvp +oNl aEl wQW cFS @@ -167461,7 +167779,7 @@ izU izU izU izU -hce +izU tAL sOD izU @@ -170031,7 +170349,7 @@ izU izU izU izU -izU +hce aEm gnK izU @@ -170803,17 +171121,17 @@ scZ eSz eSz eSz -fuc -sLC -rNN +wPR +fQF +gDQ kNT brr xFj fbk kNT -oHK -bjn -ejL +krM +keN +csl vic izU izU @@ -171060,7 +171378,7 @@ lZW lZW izU izU -dIJ +fVN izU izU eSz @@ -171070,7 +171388,7 @@ lwN eSz izU izU -dIJ +fVN izU wza izU @@ -171317,16 +171635,16 @@ aaa aaa aaa izU -xGn -gtY -sXZ +wFf +tOJ +auq vfk fhx iJl wUG vfk -sXZ -ocw +auq +ltd qtS gnj wza @@ -171574,8 +171892,8 @@ aaa aaa aaa izU -eKI -wki +clO +pbC izU eSz nSP @@ -171584,7 +171902,7 @@ lwN eSz izU seG -euF +dCJ izU wza izU @@ -171831,7 +172149,7 @@ aaa aaa aaa izU -bdX +krh izU izU eSz @@ -171841,7 +172159,7 @@ lwN eSz izU izU -gXj +roH izU wza izU @@ -172088,7 +172406,7 @@ aaa aaa aaa izU -mwN +jrz wYw izU eSz @@ -180056,7 +180374,7 @@ oSB nVd vUE bMb -iqe +kdz pxO brm gay @@ -180064,7 +180382,7 @@ lZj jwH brm pxO -lqp +wnP bMb lVi abM @@ -180314,14 +180632,14 @@ ldp wkz hsN psy -sjq +oAY seR kTK eFJ gOF seR -snF -qTh +vvd +xbT rmH lVi jxi @@ -180569,7 +180887,7 @@ jnJ ged whL vUE -aEz +hXW yeB ipC seR @@ -184167,7 +184485,7 @@ yiV uCO aDI aDV -eBu +qrx yeB hZc seR @@ -184424,10 +184742,10 @@ pEe uCO hPi bMb -cmZ -tPw +dEo +saI raY -oXK +hZv ljn ujw ljn @@ -184681,13 +184999,13 @@ vPB mRb sYJ bMb -vWy -cCw -vUE -vUE +bAj +dJk vUE vUE +ftZ vUE +ftZ vUE nSI tXz @@ -184938,14 +185256,14 @@ vPB uCO fZS bMb -reK -aZr +kix +deU lCy -fcR -vms -fXN -wwH -fcR +fiW +mIQ +bIs +emp +fiW nSI hPQ vDI @@ -185195,14 +185513,14 @@ vPB uCO fZS bMb -sqg -qYw +qfQ +sUc lCy -fcR -dPt -ngr -dcw -uFK +fiW +fdM +xEZ +slr +lIR nSI axt eRb @@ -185455,11 +185773,11 @@ bMb bMb bMb lCy -fcR -rwc -vEf -dcw -fcR +fiW +qrI +fvD +slr +fiW nSI qrs xts @@ -185712,11 +186030,11 @@ qUB hAR veA lCy -lCy -lCy -rzF -iRg -lCy +cFb +kDH +nzx +kDH +cFb nSI tXz tXz @@ -185969,13 +186287,13 @@ jha qDn ajg qZZ -ajg +kAO hSt pgo kAO kAO udX -kAO +jhn duA bPO iVy @@ -186225,9 +186543,9 @@ fZS kDH vPB pzv +oGG geG geG -dLs aFZ geG geG @@ -186481,15 +186799,15 @@ lMg qbu riS gAH -wuF -wuF -wuF -cFg -aGa -aDI +aFP +oOP pTW wuF +aZm wuF +pTW +aFP +aDI aHw aHE aHS @@ -186738,15 +187056,15 @@ pSV pSV pSV pEx -pEx -pEx +jYT +wJF fmy wWh -wuF +snF aGq fmy -pEx -pEx +jYT +aGw pEx fmy dbV @@ -186995,15 +187313,15 @@ gbB pkD pSV bxC -akS +joi lyR -fmy -hNh -pEx -aGr -fmy +xWu +rUQ +rUQ +rUQ +xWu sWq -akS +eKD gXH fmy fmy @@ -187253,12 +187571,12 @@ aDN wzg tiM qSm -eKD -hsT -pKa +tIk +aGb +aGb +aGb +aGb aGb -aFP -aGw joi qSm swr @@ -187510,7 +187828,7 @@ aDN wzg tiM qFH -kIo +iur tEk jBk heS @@ -187766,10 +188084,10 @@ wXP loQ wAh cpK -qSm -kIo -qSm -sXo +nJx +nQq +lRx +jZe fmy aGs kIo @@ -188023,10 +188341,10 @@ fam aDN wzg tiM +qFH +nQq qSm -kIo -qSm -lRx +sJx rUQ aGt kIo @@ -188282,7 +188600,7 @@ vQX dJp jrc fio -nJx +qSm bYa rUQ lai @@ -188795,9 +189113,9 @@ ifU kLI kFu uCy -tiM +sXo qSm -nQq +bYa rUQ lai qSm @@ -189053,7 +189371,7 @@ hoN cHS svC nny -cOM +qSm jZe xWu uuS diff --git a/_maps/modular_generic/station_l_security.dmm b/_maps/modular_generic/station_l_security.dmm index 0b629f3f388..f562d4eea59 100644 --- a/_maps/modular_generic/station_l_security.dmm +++ b/_maps/modular_generic/station_l_security.dmm @@ -1,9 +1,8 @@ //MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE "aJ" = ( /obj/structure/table/reinforced, -/obj/machinery/door/window/brigdoor/left/directional/north{ - name = "Security Desk"; - dir = 4 +/obj/machinery/door/window/brigdoor/left/directional/east{ + name = "Security Desk" }, /obj/item/flashlight/lamp{ pixel_x = -5; @@ -113,9 +112,8 @@ /area/template_noop) "lW" = ( /obj/structure/table/reinforced, -/obj/machinery/door/window/brigdoor/right/directional/north{ - name = "Security Desk"; - dir = 4 +/obj/machinery/door/window/brigdoor/right/directional/east{ + name = "Security Desk" }, /obj/item/paper_bin{ pixel_y = 3 diff --git a/_maps/modular_generic/station_m_evidence.dmm b/_maps/modular_generic/station_m_evidence.dmm index 9d1c5a8a5be..98f036b290c 100644 --- a/_maps/modular_generic/station_m_evidence.dmm +++ b/_maps/modular_generic/station_m_evidence.dmm @@ -77,7 +77,7 @@ /turf/open/floor/iron/dark/textured_large, /area/template_noop) "z" = ( -/obj/machinery/door/window/brigdoor{ +/obj/machinery/door/window/brigdoor/left/directional/south{ name = "Secure Evidence Lockup"; req_one_access = list("armory","detective") }, diff --git a/_maps/nova/automapper/templates/birdshot/birdshot_armory.dmm b/_maps/nova/automapper/templates/birdshot/birdshot_armory.dmm index eef058070d4..4964ab7de12 100644 --- a/_maps/nova/automapper/templates/birdshot/birdshot_armory.dmm +++ b/_maps/nova/automapper/templates/birdshot/birdshot_armory.dmm @@ -7,9 +7,9 @@ dir = 1 }, /obj/structure/rack/gunrack, -/obj/effect/spawner/armory_spawn/microfusion, /obj/effect/decal/cleanable/dirt, /obj/machinery/airalarm/directional/west, +/obj/effect/spawner/armory_spawn/smg, /turf/open/floor/iron/dark/small, /area/station/ai_monitored/security/armory) "f" = ( @@ -30,53 +30,36 @@ }, /obj/structure/rack/gunrack, /obj/effect/decal/cleanable/dirt, -/obj/effect/spawner/armory_spawn/smg, +/obj/effect/spawner/armory_spawn/mod_lasers_big, /turf/open/floor/iron/dark/small, /area/station/ai_monitored/security/armory) "A" = ( -/obj/structure/rack, -/obj/item/clothing/head/helmet/sec{ - pixel_x = -3; - pixel_y = 3 +/obj/structure/cable, +/obj/item/storage/barricade{ + pixel_y = 5 + }, +/obj/item/storage/barricade, +/obj/item/storage/barricade{ + pixel_y = -5 }, -/obj/item/clothing/head/helmet/sec, -/obj/item/clothing/head/helmet/sec{ +/obj/structure/table, +/obj/item/flashlight/seclite, +/obj/item/flashlight/seclite, +/obj/item/flashlight/seclite, +/obj/item/clothing/mask/gas/sechailer{ pixel_x = 3; pixel_y = -3 }, -/obj/item/clothing/suit/armor/vest/alt/sec{ +/obj/item/clothing/mask/gas/sechailer, +/obj/item/clothing/mask/gas/sechailer{ pixel_x = -3; pixel_y = 3 }, -/obj/item/clothing/suit/armor/vest/alt/sec, -/obj/item/clothing/suit/armor/vest/alt/sec{ - pixel_x = 3; - pixel_y = -3 - }, -/obj/structure/cable, /turf/open/floor/iron/dark/small, /area/station/ai_monitored/security/armory) "B" = ( -/obj/item/clothing/mask/gas/sechailer{ - pixel_x = -3; - pixel_y = 3 - }, -/obj/item/clothing/mask/gas/sechailer, -/obj/item/clothing/mask/gas/sechailer{ - pixel_x = 3; - pixel_y = -3 - }, -/obj/item/flashlight/seclite, -/obj/item/flashlight/seclite, -/obj/item/flashlight/seclite, -/obj/structure/table, -/obj/item/storage/barricade{ - pixel_y = -5 - }, -/obj/item/storage/barricade, -/obj/item/storage/barricade{ - pixel_y = 5 - }, +/obj/structure/rack/gunrack, +/obj/effect/spawner/armory_spawn/mod_lasers_small, /turf/open/floor/iron/dark/small, /area/station/ai_monitored/security/armory) "Q" = ( diff --git a/_maps/nova/automapper/templates/deltastation/deltastation_armory.dmm b/_maps/nova/automapper/templates/deltastation/deltastation_armory.dmm index 903d69e1062..b31565808ac 100644 --- a/_maps/nova/automapper/templates/deltastation/deltastation_armory.dmm +++ b/_maps/nova/automapper/templates/deltastation/deltastation_armory.dmm @@ -22,33 +22,18 @@ }, /obj/effect/turf_decal/tile/neutral/fourcorners, /obj/structure/window/reinforced/spawner/directional/south, -/obj/structure/rack/gunrack, -/obj/effect/spawner/armory_spawn/microfusion, +/obj/item/gun/energy/temperature/security, +/obj/item/clothing/suit/hooded/ablative, +/obj/item/gun/energy/ionrifle, +/obj/structure/rack, /turf/open/floor/iron/dark, /area/station/ai_monitored/security/armory) "E" = ( -/obj/structure/rack, /obj/structure/window/reinforced/spawner/directional/north, /obj/effect/turf_decal/tile/neutral/fourcorners, /obj/effect/turf_decal/bot, -/obj/item/clothing/suit/armor/vest/alt/sec{ - pixel_x = 3; - pixel_y = -3 - }, -/obj/item/clothing/suit/armor/vest/alt/sec, -/obj/item/clothing/suit/armor/vest/alt/sec{ - pixel_x = -3; - pixel_y = 3 - }, -/obj/item/clothing/head/helmet/sec{ - pixel_x = 3; - pixel_y = -3 - }, -/obj/item/clothing/head/helmet/sec, -/obj/item/clothing/head/helmet/sec{ - pixel_x = -3; - pixel_y = 3 - }, +/obj/structure/rack/gunrack, +/obj/effect/spawner/armory_spawn/mod_lasers_small, /turf/open/floor/iron/dark, /area/station/ai_monitored/security/armory) "L" = ( @@ -62,13 +47,13 @@ /turf/open/floor/iron/dark, /area/station/ai_monitored/security/armory) "M" = ( -/obj/structure/rack, -/obj/item/gun/energy/ionrifle, -/obj/item/clothing/suit/hooded/ablative, -/obj/item/gun/energy/temperature/security, /obj/structure/window/reinforced/spawner/directional/south, /obj/effect/turf_decal/tile/neutral/fourcorners, /obj/effect/turf_decal/bot, +/obj/effect/spawner/random/armory/riot_shield, +/obj/effect/spawner/random/armory/riot_armor, +/obj/effect/spawner/random/armory/riot_helmet, +/obj/structure/rack, /turf/open/floor/iron/dark, /area/station/ai_monitored/security/armory) "O" = ( @@ -85,20 +70,18 @@ /turf/open/floor/iron/dark, /area/station/ai_monitored/security/armory) "R" = ( -/obj/structure/rack, /obj/effect/turf_decal/tile/neutral/fourcorners, /obj/effect/turf_decal/bot, -/obj/effect/spawner/random/armory/riot_helmet, -/obj/effect/spawner/random/armory/riot_armor, -/obj/effect/spawner/random/armory/riot_shield, +/obj/effect/spawner/random/armory/bulletproof_armor, +/obj/effect/spawner/random/armory/bulletproof_helmet, +/obj/structure/rack, /turf/open/floor/iron/dark, /area/station/ai_monitored/security/armory) "U" = ( -/obj/structure/rack, /obj/effect/turf_decal/tile/neutral/fourcorners, /obj/effect/turf_decal/bot, -/obj/effect/spawner/random/armory/bulletproof_armor, -/obj/effect/spawner/random/armory/bulletproof_helmet, +/obj/structure/rack/gunrack, +/obj/effect/spawner/armory_spawn/mod_lasers_big, /turf/open/floor/iron/dark, /area/station/ai_monitored/security/armory) "X" = ( diff --git a/_maps/nova/automapper/templates/icebox/icebox_armory_middle.dmm b/_maps/nova/automapper/templates/icebox/icebox_armory_middle.dmm index d6797c049ee..03b1654a5c6 100644 --- a/_maps/nova/automapper/templates/icebox/icebox_armory_middle.dmm +++ b/_maps/nova/automapper/templates/icebox/icebox_armory_middle.dmm @@ -32,28 +32,11 @@ /turf/open/floor/iron/dark/textured, /area/station/ai_monitored/security/armory) "i" = ( -/obj/structure/rack, -/obj/item/clothing/head/helmet/sec{ - pixel_x = -3; - pixel_y = 3 - }, -/obj/item/clothing/head/helmet/sec, -/obj/item/clothing/head/helmet/sec{ - pixel_x = 3; - pixel_y = -3 - }, -/obj/item/clothing/suit/armor/vest/alt/sec{ - pixel_x = 3; - pixel_y = -3 - }, -/obj/item/clothing/suit/armor/vest/alt/sec, -/obj/item/clothing/suit/armor/vest/alt/sec{ - pixel_x = -3; - pixel_y = 3 - }, /obj/effect/turf_decal/tile/red/half{ dir = 8 }, +/obj/effect/spawner/armory_spawn/shotguns, +/obj/structure/rack/gunrack, /turf/open/floor/iron/dark/textured, /area/station/ai_monitored/security/armory) "q" = ( @@ -64,7 +47,7 @@ dir = 4 }, /obj/structure/rack/gunrack, -/obj/effect/spawner/armory_spawn/shotguns, +/obj/effect/spawner/armory_spawn/mod_lasers_small, /turf/open/floor/iron/dark/textured, /area/station/ai_monitored/security/armory) "x" = ( @@ -72,7 +55,7 @@ dir = 4 }, /obj/structure/rack/gunrack, -/obj/effect/spawner/armory_spawn/microfusion, +/obj/effect/spawner/armory_spawn/mod_lasers_big, /turf/open/floor/iron/dark/textured, /area/station/ai_monitored/security/armory) "B" = ( diff --git a/_maps/nova/automapper/templates/metastation/metastation_armory.dmm b/_maps/nova/automapper/templates/metastation/metastation_armory.dmm index 19dacb89944..a467bc31da2 100644 --- a/_maps/nova/automapper/templates/metastation/metastation_armory.dmm +++ b/_maps/nova/automapper/templates/metastation/metastation_armory.dmm @@ -8,8 +8,8 @@ "e" = ( /obj/machinery/airalarm/directional/north, /obj/structure/rack/gunrack, -/obj/effect/spawner/armory_spawn/microfusion, /obj/effect/turf_decal/delivery/red, +/obj/effect/spawner/armory_spawn/mod_lasers_small, /turf/open/floor/iron/smooth, /area/station/ai_monitored/security/armory) "f" = ( @@ -128,7 +128,7 @@ "C" = ( /obj/effect/turf_decal/delivery/red, /obj/structure/rack/gunrack, -/obj/effect/spawner/armory_spawn/smg, +/obj/effect/spawner/armory_spawn/mod_lasers_big, /turf/open/floor/iron/smooth, /area/station/ai_monitored/security/armory) "D" = ( @@ -239,6 +239,14 @@ /obj/effect/spawner/random/armory/bulletproof_helmet, /turf/open/floor/iron/dark, /area/station/ai_monitored/security/armory) +"P" = ( +/obj/effect/turf_decal/trimline/dark_blue/filled/warning{ + dir = 1 + }, +/obj/structure/rack/gunrack, +/obj/effect/spawner/armory_spawn/smg, +/turf/open/floor/iron/dark, +/area/station/ai_monitored/security/armory) "Q" = ( /obj/effect/turf_decal/trimline/dark_blue/filled/corner, /obj/effect/turf_decal/trimline/dark_blue/filled/warning{ @@ -248,8 +256,7 @@ /area/station/ai_monitored/security/armory) "R" = ( /obj/structure/table/reinforced, -/obj/machinery/door/window/brigdoor{ - dir = 1; +/obj/machinery/door/window/brigdoor/left/directional/north{ name = "Weapon Distribution"; req_access = list("armory") }, @@ -343,7 +350,7 @@ N (5,1,1) = {" N b -D +P r t F diff --git a/_maps/nova/automapper/templates/northstar/northstar_armory.dmm b/_maps/nova/automapper/templates/northstar/northstar_armory.dmm index 3c8ea12baed..9c66b751297 100644 --- a/_maps/nova/automapper/templates/northstar/northstar_armory.dmm +++ b/_maps/nova/automapper/templates/northstar/northstar_armory.dmm @@ -3,14 +3,13 @@ /turf/template_noop, /area/template_noop) "y" = ( +/obj/effect/spawner/armory_spawn/shotguns, /obj/structure/rack/gunrack, -/obj/structure/window/reinforced/spawner/directional/west, -/obj/effect/spawner/armory_spawn/smg, /turf/open/floor/iron/dark, /area/station/ai_monitored/security/armory) "F" = ( /obj/structure/rack/gunrack, -/obj/effect/spawner/armory_spawn/shotguns, +/obj/effect/spawner/armory_spawn/mod_lasers_small, /turf/open/floor/iron/dark, /area/station/ai_monitored/security/armory) "I" = ( @@ -20,20 +19,15 @@ /area/station/ai_monitored/security/armory) "O" = ( /obj/structure/rack/gunrack, -/obj/effect/spawner/armory_spawn/microfusion, /obj/structure/window/reinforced/spawner/directional/east, /obj/structure/cable, +/obj/effect/spawner/armory_spawn/mod_lasers_big, /turf/open/floor/iron/dark, /area/station/ai_monitored/security/armory) "Z" = ( -/obj/structure/table/reinforced, -/obj/item/storage/barricade{ - pixel_y = 10 - }, -/obj/item/storage/barricade{ - pixel_y = 5 - }, -/obj/item/storage/barricade, +/obj/structure/window/reinforced/spawner/directional/west, +/obj/effect/spawner/armory_spawn/smg, +/obj/structure/rack/gunrack, /turf/open/floor/iron/dark, /area/station/ai_monitored/security/armory) diff --git a/_maps/nova/automapper/templates/tramstation/tramstation_armory.dmm b/_maps/nova/automapper/templates/tramstation/tramstation_armory.dmm index 6b9b4479c1d..05c9bdb7d5a 100644 --- a/_maps/nova/automapper/templates/tramstation/tramstation_armory.dmm +++ b/_maps/nova/automapper/templates/tramstation/tramstation_armory.dmm @@ -52,8 +52,8 @@ dir = 1 }, /obj/structure/rack/gunrack, -/obj/effect/spawner/armory_spawn/microfusion, /obj/structure/cable, +/obj/effect/spawner/armory_spawn/mod_lasers_small, /turf/open/floor/iron, /area/station/ai_monitored/security/armory) "Mp" = ( @@ -61,18 +61,11 @@ layer = 2.9 }, /obj/structure/window/reinforced/spawner/directional/south, -/obj/structure/closet/secure_closet/armory_kiboko, +/obj/structure/rack/gunrack, +/obj/effect/spawner/armory_spawn/mod_lasers_big, /turf/open/floor/iron, /area/station/ai_monitored/security/armory) "SD" = ( -/obj/structure/rack, -/obj/item/storage/barricade{ - pixel_y = -5 - }, -/obj/item/storage/barricade, -/obj/item/storage/barricade{ - pixel_y = 5 - }, /obj/effect/turf_decal/tile/neutral{ dir = 1 }, @@ -83,6 +76,7 @@ dir = 8 }, /obj/effect/turf_decal/tile/neutral, +/obj/structure/closet/secure_closet/armory_kiboko, /turf/open/floor/iron/dark, /area/station/ai_monitored/security/armory) "TP" = ( diff --git a/_maps/safehouses/ancientmilsim_nova.dmm b/_maps/safehouses/ancientmilsim_nova.dmm index 4b00bcb4370..015646aa8fb 100644 --- a/_maps/safehouses/ancientmilsim_nova.dmm +++ b/_maps/safehouses/ancientmilsim_nova.dmm @@ -4,33 +4,32 @@ /turf/closed/wall/mineral/plastitanium/nodiagonal, /area/virtual_domain/safehouse) "b" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 8 - }, -/obj/effect/turf_decal/stripes/line{ - dir = 4 - }, /obj/structure/closet/crate/secure/weapon, -/obj/item/storage/pouch/medical/firstaid/stabilizer, -/obj/item/storage/pouch/ammo, -/obj/item/clothing/head/helmet/hecu, -/obj/item/clothing/suit/armor/vest/hecu, +/obj/item/storage/medkit/combat_surgeon/stocked, +/obj/item/storage/medkit/civil_defense/stocked, +/obj/item/clothing/glasses/hud/health/night, +/obj/item/storage/belt/military/assault, /obj/item/storage/box/survival/syndie, -/obj/item/gun/ballistic/automatic/sol_smg, +/obj/item/clothing/head/helmet/sf_peacekeeper, +/obj/item/clothing/suit/armor/sf_peacekeeper, /obj/item/knife/combat, -/obj/item/gun/ballistic/automatic/pistol/sol, /obj/item/ammo_box/magazine/c35sol_pistol, /obj/item/ammo_box/magazine/c35sol_pistol, /obj/item/ammo_box/magazine/c35sol_pistol, -/obj/item/storage/belt/military/assault/hecu, +/obj/item/ammo_box/magazine/c35sol_pistol, /obj/item/ammo_box/magazine/c35sol_pistol/stendo, /obj/item/ammo_box/magazine/c35sol_pistol/stendo, /obj/item/ammo_box/magazine/c35sol_pistol/stendo, /obj/item/ammo_box/magazine/c35sol_pistol/stendo, -/obj/item/stack/medical/mesh/bloody, -/obj/item/stack/medical/suture/bloody, -/obj/item/clothing/gloves/military, -/obj/item/clothing/glasses/hud/health/night, +/obj/item/gun/ballistic/automatic/sol_smg, +/obj/item/gun/ballistic/automatic/pistol/sol, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/effect/turf_decal/sand/volcanic, /turf/open/floor/iron, /area/virtual_domain/safehouse) "e" = ( @@ -131,29 +130,27 @@ /turf/open/floor/iron, /area/virtual_domain/safehouse) "G" = ( -/obj/effect/turf_decal/stripes/end, -/obj/effect/decal/cleanable/dirt, /obj/structure/closet/crate/secure/weapon, -/obj/item/storage/pouch/medical/firstaid/stabilizer, -/obj/item/storage/pouch/ammo, -/obj/item/clothing/head/helmet/hecu, -/obj/item/clothing/suit/armor/vest/hecu, +/obj/item/storage/medkit/combat_surgeon/stocked, +/obj/item/storage/medkit/civil_defense/stocked, +/obj/item/clothing/glasses/hud/health/night, +/obj/item/storage/belt/military/assault, /obj/item/storage/box/survival/syndie, -/obj/item/gun/ballistic/automatic/sol_smg, +/obj/item/clothing/head/helmet/sf_peacekeeper, +/obj/item/clothing/suit/armor/sf_peacekeeper, /obj/item/knife/combat, -/obj/item/gun/ballistic/automatic/pistol/sol, /obj/item/ammo_box/magazine/c35sol_pistol, /obj/item/ammo_box/magazine/c35sol_pistol, /obj/item/ammo_box/magazine/c35sol_pistol, -/obj/item/storage/belt/military/assault/hecu, +/obj/item/ammo_box/magazine/c35sol_pistol, /obj/item/ammo_box/magazine/c35sol_pistol/stendo, /obj/item/ammo_box/magazine/c35sol_pistol/stendo, /obj/item/ammo_box/magazine/c35sol_pistol/stendo, /obj/item/ammo_box/magazine/c35sol_pistol/stendo, -/obj/item/stack/medical/mesh/bloody, -/obj/item/stack/medical/suture/bloody, -/obj/item/clothing/gloves/military, -/obj/item/clothing/glasses/hud/health/night, +/obj/item/gun/ballistic/automatic/sol_smg, +/obj/item/gun/ballistic/automatic/pistol/sol, +/obj/effect/turf_decal/stripes/end, +/obj/effect/turf_decal/sand/volcanic, /turf/open/floor/iron, /area/virtual_domain/safehouse) "H" = ( @@ -170,7 +167,6 @@ }, /obj/effect/decal/cleanable/dirt, /obj/machinery/computer{ - dir = 2; name = "hovercraft console"; icon_screen = "shuttle"; desc = "An armored hovercraft control computer. Doesn't work anymore... who would've thought." @@ -223,26 +219,24 @@ }, /obj/effect/turf_decal/sand/volcanic, /obj/structure/closet/crate/secure/weapon, -/obj/item/storage/pouch/medical/firstaid/loaded, -/obj/item/storage/pouch/medical/loaded, -/obj/item/clothing/head/helmet/hecu, -/obj/item/clothing/suit/armor/vest/hecu, +/obj/item/storage/medkit/combat_surgeon/stocked, +/obj/item/storage/medkit/civil_defense/stocked, +/obj/item/clothing/glasses/hud/health/night, +/obj/item/storage/belt/military/assault, /obj/item/storage/box/survival/syndie, -/obj/item/gun/ballistic/automatic/sol_smg, +/obj/item/clothing/head/helmet/sf_peacekeeper, +/obj/item/clothing/suit/armor/sf_peacekeeper, /obj/item/knife/combat, -/obj/item/gun/ballistic/automatic/pistol/sol, /obj/item/ammo_box/magazine/c35sol_pistol, /obj/item/ammo_box/magazine/c35sol_pistol, /obj/item/ammo_box/magazine/c35sol_pistol, -/obj/item/storage/belt/military/assault/hecu, +/obj/item/ammo_box/magazine/c35sol_pistol, /obj/item/ammo_box/magazine/c35sol_pistol/stendo, /obj/item/ammo_box/magazine/c35sol_pistol/stendo, /obj/item/ammo_box/magazine/c35sol_pistol/stendo, /obj/item/ammo_box/magazine/c35sol_pistol/stendo, -/obj/item/stack/medical/mesh/bloody, -/obj/item/stack/medical/suture/bloody, -/obj/item/clothing/gloves/military, -/obj/item/clothing/glasses/hud/health/night, +/obj/item/gun/ballistic/automatic/sol_smg, +/obj/item/gun/ballistic/automatic/pistol/sol, /turf/open/floor/iron, /area/virtual_domain/safehouse) diff --git a/_maps/shuttles/cargo_birdshot.dmm b/_maps/shuttles/cargo_birdshot.dmm index 4706a71d082..a0cc7901c18 100644 --- a/_maps/shuttles/cargo_birdshot.dmm +++ b/_maps/shuttles/cargo_birdshot.dmm @@ -69,9 +69,6 @@ }, /turf/open/floor/mineral/titanium, /area/shuttle/supply) -"t" = ( -/turf/closed/wall/mineral/titanium/nosmooth, -/area/shuttle/supply) "w" = ( /obj/effect/turf_decal/stripes/box, /obj/machinery/conveyor{ @@ -247,7 +244,7 @@ T X W Z -t +T M J w @@ -289,7 +286,7 @@ T R m i -t +T P e I diff --git a/_maps/shuttles/emergency_casino.dmm b/_maps/shuttles/emergency_casino.dmm index 95996a80d38..55985a02e69 100644 --- a/_maps/shuttles/emergency_casino.dmm +++ b/_maps/shuttles/emergency_casino.dmm @@ -677,7 +677,7 @@ /turf/open/floor/iron/dark, /area/shuttle/escape) "vD" = ( -/obj/machinery/door/window, +/obj/machinery/door/window/left/directional/south, /obj/effect/turf_decal/tile/bar/opposingcorners, /turf/open/floor/iron, /area/shuttle/escape) diff --git a/_maps/shuttles/emergency_clown.dmm b/_maps/shuttles/emergency_clown.dmm index f5c0ca4ea61..fc943e5287b 100644 --- a/_maps/shuttles/emergency_clown.dmm +++ b/_maps/shuttles/emergency_clown.dmm @@ -158,7 +158,7 @@ /area/shuttle/escape) "aM" = ( /obj/structure/bed, -/obj/item/bedsheet/random, +/obj/effect/spawner/random/bedsheet/any, /turf/open/floor/mineral/bananium, /area/shuttle/escape) "aQ" = ( @@ -246,7 +246,7 @@ /area/shuttle/escape) "iU" = ( /obj/structure/bed, -/obj/item/bedsheet/random, +/obj/effect/spawner/random/bedsheet/any, /obj/machinery/light/small/directional/east, /turf/open/floor/mineral/bananium, /area/shuttle/escape) @@ -254,7 +254,7 @@ /obj/structure/bed{ dir = 4 }, -/obj/item/bedsheet/random{ +/obj/effect/spawner/random/bedsheet/any{ dir = 4 }, /turf/open/floor/mineral/bananium, @@ -289,7 +289,7 @@ /obj/structure/bed{ dir = 4 }, -/obj/item/bedsheet/random{ +/obj/effect/spawner/random/bedsheet/any{ dir = 4 }, /obj/machinery/light/small/directional/west, @@ -300,7 +300,7 @@ /obj/structure/bed{ dir = 4 }, -/obj/item/bedsheet/random{ +/obj/effect/spawner/random/bedsheet/any{ dir = 4 }, /turf/open/floor/mineral/bananium, @@ -315,7 +315,7 @@ "XT" = ( /obj/structure/window/reinforced/spawner/directional/east, /obj/structure/bed, -/obj/item/bedsheet/random, +/obj/effect/spawner/random/bedsheet/any, /turf/open/floor/mineral/bananium, /area/shuttle/escape) "YC" = ( diff --git a/_maps/shuttles/emergency_fame.dmm b/_maps/shuttles/emergency_fame.dmm index c4eeb98834b..368de11546d 100644 --- a/_maps/shuttles/emergency_fame.dmm +++ b/_maps/shuttles/emergency_fame.dmm @@ -989,8 +989,7 @@ /turf/open/floor/iron/dark, /area/shuttle/escape) "Wp" = ( -/obj/machinery/door/window/left/directional/west{ - dir = 4; +/obj/machinery/door/window/left/directional/east{ name = "Infirmary" }, /turf/open/floor/mineral/titanium/white, diff --git a/_maps/shuttles/emergency_hugcage.dmm b/_maps/shuttles/emergency_hugcage.dmm index 6e68506c433..4b500f7bdbd 100644 --- a/_maps/shuttles/emergency_hugcage.dmm +++ b/_maps/shuttles/emergency_hugcage.dmm @@ -3,7 +3,7 @@ /turf/closed/wall/mineral/titanium/nodiagonal, /area/shuttle/escape/brig) "aR" = ( -/obj/item/bedsheet/random{ +/obj/effect/spawner/random/bedsheet/any{ dir = 8 }, /obj/structure/bed, @@ -83,7 +83,7 @@ /turf/closed/wall/mineral/titanium, /area/shuttle/escape) "gg" = ( -/obj/item/bedsheet/random{ +/obj/effect/spawner/random/bedsheet/any{ dir = 4 }, /obj/structure/bed{ @@ -116,7 +116,7 @@ /area/shuttle/escape) "iI" = ( /obj/structure/bed, -/obj/item/bedsheet/random, +/obj/effect/spawner/random/bedsheet/any, /obj/item/pillow/random, /obj/effect/spawner/random/entertainment/plushie_delux, /turf/open/floor/mineral/titanium/yellow, @@ -148,7 +148,7 @@ /obj/structure/bed{ dir = 1 }, -/obj/item/bedsheet/random{ +/obj/effect/spawner/random/bedsheet/any{ dir = 4 }, /obj/item/pillow/random, @@ -211,7 +211,7 @@ /turf/open/floor/mineral/titanium/blue, /area/shuttle/escape) "ys" = ( -/obj/item/bedsheet/random{ +/obj/effect/spawner/random/bedsheet/any{ dir = 4 }, /obj/structure/bed{ @@ -327,7 +327,7 @@ /turf/open/floor/mineral/plastitanium/red, /area/shuttle/escape/brig) "KW" = ( -/obj/item/bedsheet/random{ +/obj/effect/spawner/random/bedsheet/any{ dir = 8 }, /obj/structure/bed, diff --git a/_maps/shuttles/emergency_imfedupwiththisworld.dmm b/_maps/shuttles/emergency_imfedupwiththisworld.dmm index 82bc9dc7ca3..6513f090c53 100644 --- a/_maps/shuttles/emergency_imfedupwiththisworld.dmm +++ b/_maps/shuttles/emergency_imfedupwiththisworld.dmm @@ -75,9 +75,7 @@ /turf/open/floor/iron, /area/shuttle/escape) "s" = ( -/obj/machinery/door/window{ - dir = 8 - }, +/obj/machinery/door/window/left/directional/west, /obj/effect/turf_decal/tile/bar/opposingcorners, /turf/open/floor/iron, /area/shuttle/escape) diff --git a/_maps/shuttles/emergency_lance.dmm b/_maps/shuttles/emergency_lance.dmm index 05727cad322..e2f254844d3 100644 --- a/_maps/shuttles/emergency_lance.dmm +++ b/_maps/shuttles/emergency_lance.dmm @@ -1464,8 +1464,7 @@ }, /obj/structure/window/reinforced/survival_pod/spawner/directional/north, /obj/structure/window/reinforced/survival_pod/spawner/directional/south, -/obj/machinery/door/window/survival_pod{ - dir = 4; +/obj/machinery/door/window/survival_pod/left/directional/east{ name = "Emergency Weapons"; req_access = list("command") }, @@ -1532,8 +1531,7 @@ /turf/open/floor/iron, /area/shuttle/escape) "WN" = ( -/obj/machinery/door/window/survival_pod{ - dir = 1; +/obj/machinery/door/window/survival_pod/left/directional/north{ name = "Holding Cell B"; req_access = list("security") }, @@ -1591,7 +1589,7 @@ /turf/open/floor/iron, /area/shuttle/escape) "Yk" = ( -/obj/machinery/door/window/survival_pod{ +/obj/machinery/door/window/survival_pod/left/directional/south{ name = "Holding Cell A"; req_access = list("security") }, diff --git a/_maps/shuttles/emergency_luxury.dmm b/_maps/shuttles/emergency_luxury.dmm index 29744e3ec36..af17c03a0d8 100644 --- a/_maps/shuttles/emergency_luxury.dmm +++ b/_maps/shuttles/emergency_luxury.dmm @@ -559,9 +559,7 @@ /turf/open/floor/carpet/red, /area/shuttle/escape/luxury) "xV" = ( -/obj/machinery/door/window{ - dir = 4 - }, +/obj/machinery/door/window/left/directional/east, /turf/open/floor/carpet/green, /area/shuttle/escape/luxury) "xY" = ( diff --git a/_maps/shuttles/emergency_monastery.dmm b/_maps/shuttles/emergency_monastery.dmm index 6c1aa5922d3..890cf947340 100644 --- a/_maps/shuttles/emergency_monastery.dmm +++ b/_maps/shuttles/emergency_monastery.dmm @@ -515,14 +515,11 @@ /area/shuttle/escape) "ig" = ( /obj/machinery/light/small/directional/west, -/obj/machinery/door/window/right/directional/north{ - base_state = "left"; - dir = 2; - icon_state = "left"; +/obj/effect/turf_decal/tile/red/half/contrasted, +/obj/machinery/door/window/left/directional/south{ name = "Curator Desk Door"; req_access = list("library") }, -/obj/effect/turf_decal/tile/red/half/contrasted, /turf/open/floor/iron/dark, /area/shuttle/escape) "it" = ( @@ -1022,9 +1019,7 @@ /turf/open/floor/iron/dark, /area/shuttle/escape) "oX" = ( -/obj/machinery/door/window/right/directional/north{ - base_state = "left"; - icon_state = "left"; +/obj/machinery/door/window/left/directional/north{ name = "Secure Art Exhibit"; req_access = list("library") }, @@ -1204,10 +1199,7 @@ /turf/open/floor/iron/dark, /area/shuttle/escape) "rL" = ( -/obj/machinery/door/window/left/directional/east{ - base_state = "right"; - dir = 1; - icon_state = "right"; +/obj/machinery/door/window/right/directional/north{ name = "Coffin Storage"; req_access = list("chapel_office") }, @@ -1533,8 +1525,7 @@ /turf/closed/wall/mineral/iron, /area/shuttle/escape) "yd" = ( -/obj/machinery/door/window/left/directional/east{ - dir = 1; +/obj/machinery/door/window/left/directional/north{ name = "Coffin Storage"; req_access = list("chapel_office") }, @@ -2453,16 +2444,12 @@ /turf/open/floor/carpet, /area/shuttle/escape) "Ju" = ( -/obj/structure/rack{ - icon = 'icons/obj/fluff/general.dmi'; - icon_state = "minibar"; - name = "skeletal minibar" - }, /obj/item/book/codex_gigas, /obj/machinery/camera/directional/south{ c_tag = "Monastery Archives Aft"; network = list("ss13","monastery") }, +/obj/structure/rack/skeletal, /turf/open/floor/iron/dark, /area/shuttle/escape) "Jv" = ( @@ -3141,8 +3128,7 @@ /area/shuttle/escape) "RM" = ( /obj/machinery/mass_driver/chapelgun, -/obj/machinery/door/window/left/directional/east{ - dir = 8; +/obj/machinery/door/window/left/directional/west{ name = "Mass Driver" }, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -3299,8 +3285,7 @@ /area/shuttle/escape) "Tb" = ( /obj/machinery/light/small/directional/east, -/obj/machinery/door/window/right/directional/north{ - dir = 2; +/obj/machinery/door/window/right/directional/south{ name = "Curator Desk Door"; req_access = list("library") }, @@ -3797,8 +3782,7 @@ /turf/open/floor/plating, /area/shuttle/escape) "Zh" = ( -/obj/machinery/door/window/brigdoor{ - dir = 4; +/obj/machinery/door/window/brigdoor/left/directional/east{ req_access = list("security") }, /turf/open/floor/mineral/plastitanium/red, diff --git a/_maps/shuttles/emergency_russiafightpit.dmm b/_maps/shuttles/emergency_russiafightpit.dmm index 6d8a0e5e8fb..33baf94c7ec 100644 --- a/_maps/shuttles/emergency_russiafightpit.dmm +++ b/_maps/shuttles/emergency_russiafightpit.dmm @@ -250,7 +250,7 @@ /area/shuttle/escape) "aZ" = ( /obj/effect/decal/cleanable/shreds, -/obj/machinery/door/window{ +/obj/machinery/door/window/left/directional/south{ name = "Fight Pit" }, /turf/open/floor/engine, diff --git a/_maps/shuttles/ferry_base.dmm b/_maps/shuttles/ferry_base.dmm index 4f9861db6d5..69a4d6fa18c 100644 --- a/_maps/shuttles/ferry_base.dmm +++ b/_maps/shuttles/ferry_base.dmm @@ -62,6 +62,12 @@ }, /turf/open/floor/mineral/titanium/blue, /area/shuttle/transport) +"J" = ( +/obj/machinery/power/shuttle_engine/propulsion{ + dir = 8 + }, +/turf/closed/wall/mineral/titanium, +/area/shuttle/transport) "U" = ( /obj/structure/chair/comfy/shuttle{ dir = 1 @@ -72,17 +78,17 @@ (1,1,1) = {" a -b +J k -b +J a "} (2,1,1) = {" -b +J g l g -b +J "} (3,1,1) = {" c @@ -148,9 +154,9 @@ q c "} (12,1,1) = {" -c +b e m e -c +b "} diff --git a/_maps/shuttles/ferry_lighthouse.dmm b/_maps/shuttles/ferry_lighthouse.dmm index 48d0c4f558f..18197d61f14 100644 --- a/_maps/shuttles/ferry_lighthouse.dmm +++ b/_maps/shuttles/ferry_lighthouse.dmm @@ -4,7 +4,7 @@ /area/template_noop) "ab" = ( /obj/machinery/power/shuttle_engine/propulsion/left{ - dir = 4 + dir = 8 }, /turf/open/floor/plating/airless, /area/shuttle/transport) @@ -257,6 +257,13 @@ }, /turf/open/floor/wood, /area/shuttle/transport) +"sy" = ( +/obj/machinery/power/shuttle_engine/propulsion/left{ + dir = 8; + pixel_x = 1 + }, +/turf/open/floor/plating/airless, +/area/shuttle/transport) "ZS" = ( /obj/machinery/light/warm/directional/west, /turf/open/floor/wood, @@ -299,7 +306,7 @@ ac aa "} (3,1,1) = {" -ab +sy af ag ag diff --git a/_maps/shuttles/ferry_meat.dmm b/_maps/shuttles/ferry_meat.dmm index 35188f97429..fc986bcda50 100644 --- a/_maps/shuttles/ferry_meat.dmm +++ b/_maps/shuttles/ferry_meat.dmm @@ -4,7 +4,7 @@ /area/template_noop) "b" = ( /obj/machinery/power/shuttle_engine/propulsion{ - dir = 4 + dir = 8 }, /turf/closed/wall/mineral/titanium, /area/shuttle/transport) diff --git a/_maps/shuttles/infiltrator_advanced.dmm b/_maps/shuttles/infiltrator_advanced.dmm index fa8ab14f69c..502d380cbd3 100644 --- a/_maps/shuttles/infiltrator_advanced.dmm +++ b/_maps/shuttles/infiltrator_advanced.dmm @@ -771,8 +771,7 @@ /turf/open/floor/mineral/plastitanium/red, /area/shuttle/syndicate/airlock) "bV" = ( -/obj/machinery/door/window{ - dir = 1; +/obj/machinery/door/window/left/directional/north{ name = "Surgery Chamber"; req_access = list("syndicate") }, @@ -1712,9 +1711,7 @@ /obj/machinery/nuclearbomb/syndicate{ anchored = 1 }, -/obj/machinery/door/window{ - dir = 1 - }, +/obj/machinery/door/window/left/directional/north, /obj/effect/turf_decal/stripes/end{ dir = 1 }, @@ -1758,8 +1755,7 @@ dir = 1; name = "Connector to Ship" }, -/obj/machinery/door/window{ - dir = 1; +/obj/machinery/door/window/left/directional/north{ name = "Systems Chamber"; req_access = list("syndicate") }, diff --git a/_maps/shuttles/infiltrator_basic.dmm b/_maps/shuttles/infiltrator_basic.dmm index 070fe4bdcee..1da090f2957 100644 --- a/_maps/shuttles/infiltrator_basic.dmm +++ b/_maps/shuttles/infiltrator_basic.dmm @@ -374,9 +374,7 @@ /obj/machinery/nuclearbomb/syndicate{ anchored = 1 }, -/obj/machinery/door/window/survival_pod{ - dir = 1 - }, +/obj/machinery/door/window/survival_pod/left/directional/north, /obj/effect/turf_decal/siding/red, /obj/structure/railing, /turf/open/floor/circuit/red, @@ -781,8 +779,7 @@ /turf/open/floor/iron/dark, /area/shuttle/syndicate/bridge) "vu" = ( -/obj/machinery/door/window/survival_pod{ - dir = 1; +/obj/machinery/door/window/survival_pod/left/directional/north{ name = "Telecommunications Centre"; req_access = list("syndicate") }, diff --git a/_maps/shuttles/nova/pirate_nri_raider.dmm b/_maps/shuttles/nova/pirate_nri_raider.dmm index 1fa7bc5c469..f691dc8f150 100644 --- a/_maps/shuttles/nova/pirate_nri_raider.dmm +++ b/_maps/shuttles/nova/pirate_nri_raider.dmm @@ -599,9 +599,6 @@ }, /turf/open/floor/plating, /area/shuttle/pirate/nri) -"wb" = ( -/turf/open/floor/pod/light, -/area/shuttle/pirate/nri) "wh" = ( /obj/effect/turf_decal/stripes/line{ dir = 1 @@ -678,6 +675,17 @@ }, /turf/closed/wall/mineral/titanium/spaceship/nodiagonal, /area/shuttle/pirate/nri) +"yP" = ( +/obj/effect/turf_decal/stripes/line, +/obj/item/ammo_box/advanced/s12gauge/magnum, +/obj/item/ammo_box/advanced/s12gauge/magnum, +/obj/item/ammo_box/advanced/s12gauge/magnum, +/obj/item/ammo_box/advanced/s12gauge/beehive, +/obj/item/ammo_box/advanced/s12gauge/beehive, +/obj/item/ammo_box/advanced/s12gauge/beehive, +/obj/structure/rack/shelf, +/turf/open/floor/pod/light, +/area/shuttle/pirate/nri) "zb" = ( /obj/structure/deployable_barricade/guardrail, /obj/structure/lattice/catwalk, @@ -888,14 +896,6 @@ }, /turf/open/floor/engine/hull/reinforced, /area/shuttle/pirate/nri) -"Gh" = ( -/obj/effect/turf_decal/stripes/line, -/obj/item/storage/box/ammo_box/shotgun_12g, -/obj/item/storage/box/ammo_box/shotgun_12g, -/obj/item/storage/box/ammo_box/shotgun_12g, -/obj/structure/rack/shelf, -/turf/open/floor/pod/light, -/area/shuttle/pirate/nri) "GO" = ( /turf/open/floor/engine/hull, /area/shuttle/pirate/nri) @@ -1052,9 +1052,7 @@ /turf/open/floor/pod/dark, /area/shuttle/pirate/nri) "Lp" = ( -/obj/machinery/door/window/survival_pod{ - dir = 4 - }, +/obj/machinery/door/window/survival_pod/left/directional/east, /obj/structure/cable, /turf/open/floor/plating, /area/shuttle/pirate/nri) @@ -1259,12 +1257,6 @@ }, /turf/closed/wall/mineral/titanium/spaceship/nodiagonal, /area/shuttle/pirate/nri) -"Ui" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 8 - }, -/turf/open/floor/pod/dark, -/area/shuttle/pirate/nri) "UO" = ( /obj/structure/closet/crate/freezer/blood{ anchored = 1 @@ -1546,7 +1538,7 @@ iC iC IY Hz -Ui +HV kQ rp sK @@ -1610,9 +1602,9 @@ Hz "} (12,1,1) = {" Hz -Gh -wb -wb +yP +qp +qp wM kb wQ @@ -1621,14 +1613,14 @@ Nu IT HO IT -wb -wb +qp +qp Hz "} (13,1,1) = {" Hz fB -wb +qp JB Hz rd @@ -1638,14 +1630,14 @@ wT be Hz Bw -wb +qp DL Hz "} (14,1,1) = {" Hz Hh -wb +qp Ci Hz tk @@ -1655,7 +1647,7 @@ od tk Hz bE -wb +qp pg Hz "} @@ -1735,7 +1727,7 @@ xp Hz zJ xX -wb +qp qz Qg Hz @@ -1752,7 +1744,7 @@ IT Hz LA ui -wb +qp VN mJ Hz diff --git a/_maps/shuttles/nova/ruin_tarkon_driver.dmm b/_maps/shuttles/nova/ruin_tarkon_driver.dmm new file mode 100644 index 00000000000..b10221a5542 --- /dev/null +++ b/_maps/shuttles/nova/ruin_tarkon_driver.dmm @@ -0,0 +1,682 @@ +//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE +"aP" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 8 + }, +/turf/open/floor/mineral/titanium, +/area/shuttle/tarkon_driver) +"bF" = ( +/obj/machinery/light/directional/east, +/obj/structure/table/reinforced, +/obj/effect/spawner/random/food_or_drink/snack, +/obj/item/crowbar/red, +/turf/open/floor/mineral/titanium, +/area/shuttle/tarkon_driver) +"cP" = ( +/obj/machinery/door/airlock/titanium/glass, +/obj/effect/mapping_helpers/airlock/access/all/tarkon/general, +/turf/open/floor/mineral/titanium, +/area/shuttle/tarkon_driver) +"cS" = ( +/obj/machinery/door/airlock/titanium, +/obj/docking_port/mobile{ + name = "Tarkon Driver"; + port_direction = 2; + preferred_direction = 8; + shuttle_id = "tarkon_driver" + }, +/obj/structure/fans/tiny/invisible, +/obj/structure/cable, +/turf/open/floor/mineral/titanium, +/area/shuttle/tarkon_driver) +"ef" = ( +/turf/open/floor/iron/recharge_floor, +/area/shuttle/tarkon_driver) +"eP" = ( +/obj/machinery/power/smes/tarkon_driver, +/obj/structure/cable, +/turf/open/floor/mineral/titanium, +/area/shuttle/tarkon_driver) +"fg" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 4 + }, +/turf/open/floor/mineral/titanium, +/area/shuttle/tarkon_driver) +"fy" = ( +/obj/effect/spawner/structure/window/reinforced/shuttle, +/obj/machinery/door/poddoor{ + id = "driverwindows" + }, +/turf/open/floor/mineral/titanium, +/area/shuttle/tarkon_driver) +"fE" = ( +/obj/machinery/light/directional/west, +/obj/structure/table/reinforced, +/obj/item/clothing/mask/gas, +/turf/open/floor/mineral/titanium, +/area/shuttle/tarkon_driver) +"gu" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/catwalk_floor/iron, +/area/shuttle/tarkon_driver) +"hH" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/closed/wall/mineral/titanium/spaceship, +/area/shuttle/tarkon_driver) +"hT" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 1 + }, +/obj/machinery/camera/tarkon/directional/south, +/turf/open/floor/mineral/titanium, +/area/shuttle/tarkon_driver) +"hW" = ( +/obj/structure/chair/comfy/shuttle{ + dir = 8 + }, +/turf/open/floor/mineral/titanium, +/area/shuttle/tarkon_driver) +"if" = ( +/obj/machinery/door/airlock/titanium, +/obj/structure/fans/tiny/invisible, +/obj/structure/cable, +/turf/open/floor/mineral/titanium, +/area/shuttle/tarkon_driver) +"ik" = ( +/obj/structure/cable, +/obj/machinery/power/terminal{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/mineral/titanium, +/area/shuttle/tarkon_driver) +"io" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/catwalk_floor/iron, +/area/shuttle/tarkon_driver) +"iF" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/mineral/titanium, +/area/shuttle/tarkon_driver) +"jG" = ( +/obj/structure/cable, +/obj/machinery/power/terminal{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/camera/tarkon/directional/south, +/turf/open/floor/mineral/titanium, +/area/shuttle/tarkon_driver) +"ni" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/mineral/titanium, +/area/shuttle/tarkon_driver) +"nn" = ( +/obj/structure/rack/shelf, +/obj/effect/spawner/random/medical/medkit, +/obj/effect/spawner/random/medical/medkit, +/obj/machinery/airalarm/directional/east, +/obj/effect/mapping_helpers/airalarm/all_access, +/turf/open/floor/mineral/titanium, +/area/shuttle/tarkon_driver) +"nz" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/door/airlock/titanium/glass, +/obj/effect/mapping_helpers/airlock/access/all/tarkon/general, +/turf/open/floor/mineral/titanium, +/area/shuttle/tarkon_driver) +"oz" = ( +/obj/machinery/airalarm/directional/south, +/obj/effect/mapping_helpers/airalarm/all_access, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 1 + }, +/obj/machinery/camera/tarkon/directional/south, +/turf/open/floor/mineral/titanium, +/area/shuttle/tarkon_driver) +"pi" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/camera/tarkon/directional/south, +/turf/open/floor/mineral/titanium, +/area/shuttle/tarkon_driver) +"rr" = ( +/obj/machinery/light/directional/north, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/mineral/titanium, +/area/shuttle/tarkon_driver) +"st" = ( +/obj/machinery/light/directional/south, +/obj/machinery/atmospherics/components/unary/portables_connector/layer4{ + dir = 1 + }, +/obj/machinery/portable_atmospherics/canister/air, +/turf/open/floor/mineral/titanium, +/area/shuttle/tarkon_driver) +"tV" = ( +/turf/closed/wall/mineral/titanium/nodiagonal, +/area/shuttle/tarkon_driver) +"uk" = ( +/obj/machinery/door/airlock/titanium, +/obj/effect/mapping_helpers/airlock/access/all/tarkon/general, +/obj/structure/fans/tiny/invisible, +/turf/open/floor/mineral/titanium, +/area/shuttle/tarkon_driver) +"vo" = ( +/turf/open/floor/catwalk_floor/iron, +/area/shuttle/tarkon_driver) +"zo" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/mineral/titanium, +/area/shuttle/tarkon_driver) +"zL" = ( +/obj/machinery/power/shuttle_engine/propulsion/burst, +/obj/machinery/atmospherics/components/unary/passive_vent/layer2{ + dir = 1 + }, +/turf/open/floor/mineral/titanium, +/area/shuttle/tarkon_driver) +"Al" = ( +/obj/machinery/computer/camera_advanced/shuttle_docker/tarkon_driver, +/turf/open/floor/mineral/titanium, +/area/shuttle/tarkon_driver) +"Ap" = ( +/obj/structure/chair/comfy/shuttle{ + dir = 4 + }, +/obj/machinery/airalarm/directional/north, +/obj/effect/mapping_helpers/airalarm/all_access, +/turf/open/floor/mineral/titanium, +/area/shuttle/tarkon_driver) +"AX" = ( +/obj/machinery/light/directional/north, +/obj/structure/tank_dispenser, +/turf/open/floor/mineral/titanium, +/area/shuttle/tarkon_driver) +"BH" = ( +/obj/machinery/recharge_station, +/turf/open/floor/mineral/titanium, +/area/shuttle/tarkon_driver) +"BS" = ( +/obj/machinery/airalarm/directional/east, +/obj/effect/mapping_helpers/airalarm/all_access, +/obj/structure/chair/comfy/shuttle{ + dir = 8 + }, +/turf/open/floor/mineral/titanium, +/area/shuttle/tarkon_driver) +"Cf" = ( +/obj/structure/rack/shelf, +/obj/item/flashlight/flare, +/obj/item/flashlight/flare, +/obj/item/flashlight/flare, +/obj/machinery/door/window/brigdoor/tarkon/right/directional/west, +/turf/open/floor/mineral/titanium, +/area/shuttle/tarkon_driver) +"Cn" = ( +/obj/structure/rack/shelf, +/obj/item/tank/internals/emergency_oxygen, +/obj/item/tank/internals/emergency_oxygen, +/obj/item/tank/internals/emergency_oxygen, +/obj/machinery/door/window/brigdoor/tarkon/right/directional/west, +/obj/machinery/light/directional/south, +/obj/machinery/camera/tarkon/directional/south, +/turf/open/floor/mineral/titanium, +/area/shuttle/tarkon_driver) +"Cv" = ( +/obj/machinery/power/shuttle_engine/propulsion/burst, +/turf/open/floor/mineral/titanium, +/area/shuttle/tarkon_driver) +"DF" = ( +/obj/machinery/mech_bay_recharge_port{ + dir = 2 + }, +/turf/open/floor/mineral/titanium, +/area/shuttle/tarkon_driver) +"Em" = ( +/turf/template_noop, +/area/template_noop) +"Fi" = ( +/obj/structure/table/reinforced, +/obj/item/tank/internals/emergency_oxygen/engi, +/obj/machinery/airalarm/directional/west, +/obj/effect/mapping_helpers/airalarm/all_access, +/turf/open/floor/mineral/titanium, +/area/shuttle/tarkon_driver) +"Fp" = ( +/obj/machinery/computer/camera_advanced/tarkon_cam, +/turf/open/floor/mineral/titanium, +/area/shuttle/tarkon_driver) +"GN" = ( +/turf/closed/wall/mineral/titanium/spaceship, +/area/shuttle/tarkon_driver) +"GX" = ( +/obj/machinery/light/directional/north, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/mineral/titanium, +/area/shuttle/tarkon_driver) +"HI" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/catwalk_floor/iron, +/area/shuttle/tarkon_driver) +"HY" = ( +/obj/machinery/door/airlock/titanium, +/turf/open/floor/mineral/titanium, +/area/shuttle/tarkon_driver) +"IP" = ( +/obj/structure/closet/crate/internals, +/obj/item/clothing/head/helmet/space/eva, +/obj/item/clothing/mask/breath, +/obj/item/clothing/suit/space/eva, +/obj/item/tank/internals/oxygen, +/obj/item/tank/internals/oxygen, +/obj/item/clothing/suit/space/eva, +/obj/item/clothing/head/helmet/space/eva, +/obj/item/clothing/mask/breath, +/obj/machinery/door/window/brigdoor/tarkon/right/directional/east, +/obj/machinery/light/directional/south, +/obj/machinery/camera/tarkon/directional/south, +/turf/open/floor/mineral/titanium, +/area/shuttle/tarkon_driver) +"Jo" = ( +/obj/structure/table/reinforced, +/obj/machinery/light/directional/south, +/obj/item/pickaxe/drill, +/turf/open/floor/mineral/titanium, +/area/shuttle/tarkon_driver) +"JF" = ( +/turf/closed/wall/mineral/titanium, +/area/shuttle/tarkon_driver) +"JS" = ( +/obj/structure/table/reinforced, +/obj/machinery/button/door{ + id = "driverwindows"; + name = "Blast Shield Control" + }, +/turf/open/floor/mineral/titanium, +/area/shuttle/tarkon_driver) +"JY" = ( +/obj/machinery/computer/shuttle/tarkon_driver, +/turf/open/floor/mineral/titanium, +/area/shuttle/tarkon_driver) +"Kv" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, +/turf/open/floor/mineral/titanium, +/area/shuttle/tarkon_driver) +"LG" = ( +/turf/closed/wall/mineral/titanium/spaceship/nodiagonal, +/area/shuttle/tarkon_driver) +"Mh" = ( +/obj/machinery/door/airlock/titanium, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/mineral/titanium, +/area/shuttle/tarkon_driver) +"Ml" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/catwalk_floor/iron, +/area/shuttle/tarkon_driver) +"Nj" = ( +/obj/structure/chair/comfy/shuttle{ + dir = 8 + }, +/obj/machinery/airalarm/directional/north, +/obj/effect/mapping_helpers/airalarm/all_access, +/turf/open/floor/mineral/titanium, +/area/shuttle/tarkon_driver) +"Ow" = ( +/obj/structure/cable, +/turf/open/floor/catwalk_floor/iron, +/area/shuttle/tarkon_driver) +"OJ" = ( +/obj/machinery/suit_storage_unit/industrial/tarkon, +/turf/open/floor/mineral/titanium, +/area/shuttle/tarkon_driver) +"Pn" = ( +/obj/machinery/power/smes/engineering{ + input_level = 5000 + }, +/obj/machinery/power/smes/tarkon_driver, +/turf/open/floor/mineral/titanium, +/area/shuttle/tarkon_driver) +"Qe" = ( +/obj/structure/rack/shelf, +/obj/effect/spawner/random/engineering/material, +/obj/effect/spawner/random/engineering/material, +/turf/open/floor/mineral/titanium, +/area/shuttle/tarkon_driver) +"Rg" = ( +/turf/open/floor/mineral/titanium, +/area/shuttle/tarkon_driver) +"Rn" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/airalarm/directional/north, +/obj/effect/mapping_helpers/airalarm/all_access, +/turf/open/floor/mineral/titanium, +/area/shuttle/tarkon_driver) +"Sd" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, +/turf/open/floor/mineral/titanium, +/area/shuttle/tarkon_driver) +"St" = ( +/obj/structure/closet/crate/internals, +/obj/item/clothing/head/helmet/space/eva, +/obj/item/clothing/mask/breath, +/obj/item/clothing/suit/space/eva, +/obj/item/tank/internals/oxygen, +/obj/item/tank/internals/oxygen, +/obj/item/clothing/suit/space/eva, +/obj/item/clothing/head/helmet/space/eva, +/obj/item/clothing/mask/breath, +/obj/machinery/door/window/brigdoor/tarkon/right/directional/east, +/turf/open/floor/mineral/titanium, +/area/shuttle/tarkon_driver) +"Tp" = ( +/obj/structure/rack/shelf, +/obj/item/oxygen_candle, +/obj/item/oxygen_candle, +/obj/item/oxygen_candle, +/obj/machinery/door/window/brigdoor/tarkon/right/directional/west, +/turf/open/floor/mineral/titanium, +/area/shuttle/tarkon_driver) +"TS" = ( +/obj/structure/chair/comfy/shuttle{ + dir = 4 + }, +/turf/open/floor/mineral/titanium, +/area/shuttle/tarkon_driver) +"Ue" = ( +/obj/structure/table/reinforced, +/obj/machinery/cell_charger, +/obj/machinery/light_switch/directional/east, +/obj/machinery/camera/tarkon/directional/east, +/turf/open/floor/mineral/titanium, +/area/shuttle/tarkon_driver) +"Ut" = ( +/obj/effect/spawner/structure/window/reinforced/shuttle, +/turf/open/floor/mineral/titanium, +/area/shuttle/tarkon_driver) +"Uu" = ( +/obj/machinery/door/airlock/titanium/glass, +/obj/effect/mapping_helpers/airlock/access/all/tarkon/general, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/mineral/titanium, +/area/shuttle/tarkon_driver) +"Vp" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/computer/mech_bay_power_console{ + dir = 4 + }, +/turf/open/floor/mineral/titanium, +/area/shuttle/tarkon_driver) +"Vt" = ( +/obj/machinery/power/apc/auto_name/directional/east, +/obj/structure/cable, +/obj/effect/mapping_helpers/apc/full_charge, +/obj/effect/mapping_helpers/apc/unlocked, +/obj/structure/table/reinforced, +/obj/item/storage/toolbox/emergency, +/turf/open/floor/mineral/titanium, +/area/shuttle/tarkon_driver) +"VM" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/catwalk_floor/iron, +/area/shuttle/tarkon_driver) +"Ww" = ( +/obj/structure/rack/shelf, +/obj/effect/spawner/random/maintenance/three, +/obj/machinery/light/directional/north, +/turf/open/floor/mineral/titanium, +/area/shuttle/tarkon_driver) +"Xb" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 1 + }, +/turf/open/floor/mineral/titanium, +/area/shuttle/tarkon_driver) +"XN" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/mineral/titanium, +/area/shuttle/tarkon_driver) +"Ye" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, +/turf/open/floor/mineral/titanium, +/area/shuttle/tarkon_driver) +"Zm" = ( +/obj/structure/chair/comfy/shuttle{ + dir = 1 + }, +/turf/open/floor/mineral/titanium, +/area/shuttle/tarkon_driver) +"Zo" = ( +/obj/machinery/power/shuttle_engine/propulsion/burst{ + dir = 1 + }, +/turf/open/floor/mineral/titanium, +/area/shuttle/tarkon_driver) + +(1,1,1) = {" +Zo +LG +LG +JF +JF +JF +JF +Em +Em +Zo +GN +GN +GN +GN +LG +GN +"} +(2,1,1) = {" +Em +Zo +LG +AX +OJ +OJ +JF +fy +fy +tV +LG +DF +ef +BH +GN +Cv +"} +(3,1,1) = {" +Em +Em +uk +Kv +gu +oz +JF +St +St +IP +LG +Vp +Xb +pi +hH +zL +"} +(4,1,1) = {" +JF +fy +tV +JF +Uu +JF +tV +Ap +TS +TS +LG +rr +Kv +XN +LG +GN +"} +(5,1,1) = {" +fy +JS +fE +Fi +gu +TS +Ut +Rg +fg +Rg +LG +Rn +Rg +ni +st +GN +"} +(6,1,1) = {" +fy +Al +Zm +Kv +gu +gu +nz +gu +gu +gu +Mh +gu +VM +VM +vo +if +"} +(7,1,1) = {" +fy +JY +Zm +Ye +gu +vo +cP +vo +HI +vo +HY +io +vo +Ml +Ow +cS +"} +(8,1,1) = {" +fy +Fp +bF +Ue +gu +BS +Ut +Rg +aP +Rg +LG +zo +Rg +iF +Jo +GN +"} +(9,1,1) = {" +JF +fy +tV +JF +Uu +JF +tV +Nj +hW +hW +LG +GX +Sd +iF +LG +GN +"} +(10,1,1) = {" +Em +Em +uk +Kv +gu +hT +JF +Tp +Cf +Cn +LG +ik +Xb +jG +hH +zL +"} +(11,1,1) = {" +Em +Zo +LG +Ww +Qe +nn +JF +fy +fy +tV +LG +eP +Vt +Pn +GN +Cv +"} +(12,1,1) = {" +Zo +LG +LG +JF +JF +JF +JF +Em +Em +Zo +LG +GN +GN +GN +LG +GN +"} diff --git a/_maps/shuttles/nova/ruin_tarkon_driverdc2.dmm b/_maps/shuttles/nova/ruin_tarkon_driverdc2.dmm deleted file mode 100644 index 5d89675d603..00000000000 --- a/_maps/shuttles/nova/ruin_tarkon_driverdc2.dmm +++ /dev/null @@ -1,505 +0,0 @@ -//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE -"aj" = ( -/obj/machinery/power/shuttle_engine/propulsion/burst{ - dir = 1 - }, -/turf/open/floor/mineral/titanium, -/area/shuttle/tarkon_driver) -"cU" = ( -/obj/machinery/power/shuttle_engine/propulsion/burst, -/turf/open/floor/mineral/titanium, -/area/shuttle/tarkon_driver) -"eC" = ( -/obj/structure/table/reinforced, -/obj/item/flashlight/lamp, -/turf/open/floor/mineral/titanium, -/area/shuttle/tarkon_driver) -"eG" = ( -/obj/structure/window/reinforced/tinted/spawner/directional/north, -/obj/structure/window/reinforced/tinted/spawner/directional/east, -/turf/open/floor/mineral/titanium, -/area/shuttle/tarkon_driver) -"ip" = ( -/obj/machinery/door/airlock/titanium/glass, -/turf/open/floor/mineral/titanium, -/area/shuttle/tarkon_driver) -"jH" = ( -/obj/machinery/door/window/right/directional/east{ - opacity = 1 - }, -/turf/open/floor/mineral/titanium, -/area/shuttle/tarkon_driver) -"kb" = ( -/turf/closed/wall/mineral/titanium/nodiagonal, -/area/shuttle/tarkon_driver) -"kC" = ( -/obj/machinery/door/window/left/directional/west{ - opacity = 1 - }, -/turf/open/floor/mineral/titanium, -/area/shuttle/tarkon_driver) -"kQ" = ( -/obj/machinery/light/dim/directional/west, -/obj/structure/table/reinforced, -/obj/item/clothing/mask/gas, -/turf/open/floor/mineral/titanium, -/area/shuttle/tarkon_driver) -"lV" = ( -/turf/template_noop, -/area/template_noop) -"mZ" = ( -/obj/effect/decal/cleanable/blood, -/turf/open/floor/cult, -/area/shuttle/tarkon_driver) -"nd" = ( -/obj/structure/table/reinforced, -/obj/item/storage/toolbox/emergency, -/obj/machinery/light/warm/directional/south, -/turf/open/floor/mineral/titanium, -/area/shuttle/tarkon_driver) -"oi" = ( -/obj/structure/window/reinforced/tinted/spawner/directional/north, -/obj/structure/bed/pod{ - dir = 1 - }, -/obj/item/bedsheet{ - dir = 1 - }, -/turf/open/floor/mineral/titanium, -/area/shuttle/tarkon_driver) -"oo" = ( -/turf/closed/wall/mineral/titanium, -/area/shuttle/tarkon_driver) -"oK" = ( -/mob/living/simple_animal/hostile/cult/magic, -/obj/effect/decal/cleanable/blood, -/turf/open/floor/cult, -/area/shuttle/tarkon_driver) -"pL" = ( -/obj/structure/window/reinforced/tinted/spawner/directional/west, -/turf/open/floor/mineral/titanium, -/area/shuttle/tarkon_driver) -"rT" = ( -/obj/structure/window/reinforced/tinted/spawner/directional/east, -/turf/open/floor/mineral/titanium, -/area/shuttle/tarkon_driver) -"tk" = ( -/obj/machinery/mech_bay_recharge_port{ - dir = 2 - }, -/turf/open/floor/mineral/titanium, -/area/shuttle/tarkon_driver) -"wt" = ( -/obj/structure/statue/bone/rib, -/obj/effect/decal/cleanable/blood, -/turf/open/floor/cult, -/area/shuttle/tarkon_driver) -"wZ" = ( -/obj/effect/decal/cleanable/blood, -/turf/open/floor/mineral/titanium, -/area/shuttle/tarkon_driver) -"xg" = ( -/obj/machinery/door/airlock/titanium, -/obj/effect/mapping_helpers/airlock/access/all/tarkon/general, -/obj/structure/fans/tiny/invisible, -/turf/open/floor/mineral/titanium, -/area/shuttle/tarkon_driver) -"xi" = ( -/obj/machinery/computer/camera_advanced/shuttle_docker/tarkon_driver, -/turf/open/floor/mineral/titanium, -/area/shuttle/tarkon_driver) -"xy" = ( -/obj/structure/window/reinforced/tinted/spawner/directional/south, -/obj/structure/table/reinforced, -/obj/item/tank/internals/emergency_oxygen/engi, -/turf/open/floor/mineral/titanium, -/area/shuttle/tarkon_driver) -"zR" = ( -/obj/machinery/door/airlock/titanium, -/obj/docking_port/mobile{ - shuttle_id = "tarkon_driver"; - name = "Tarkon Driver"; - port_direction = 2; - preferred_direction = 8 - }, -/obj/structure/fans/tiny/invisible, -/obj/effect/mapping_helpers/airlock/access/all/tarkon/general, -/turf/open/floor/mineral/titanium, -/area/shuttle/tarkon_driver) -"Bv" = ( -/obj/structure/rack/shelf, -/obj/item/oxygen_candle, -/obj/item/oxygen_candle, -/obj/item/oxygen_candle, -/turf/open/floor/cult, -/area/shuttle/tarkon_driver) -"Cm" = ( -/obj/effect/spawner/structure/window/reinforced/shuttle, -/obj/machinery/door/poddoor{ - id = "driverwindows" - }, -/turf/open/floor/mineral/titanium, -/area/shuttle/tarkon_driver) -"Dw" = ( -/obj/machinery/light/dim/directional/east, -/obj/structure/table/reinforced, -/obj/effect/spawner/random/food_or_drink/snack, -/turf/open/floor/mineral/titanium, -/area/shuttle/tarkon_driver) -"Dx" = ( -/obj/machinery/door/window/left/directional/south, -/turf/open/floor/mineral/titanium, -/area/shuttle/tarkon_driver) -"DX" = ( -/obj/machinery/computer/shuttle/tarkon_driver, -/turf/open/floor/mineral/titanium, -/area/shuttle/tarkon_driver) -"Ea" = ( -/obj/structure/rack/shelf, -/obj/item/flashlight/flare, -/obj/item/flashlight/flare, -/obj/item/flashlight/flare, -/turf/open/floor/cult, -/area/shuttle/tarkon_driver) -"EM" = ( -/obj/structure/bed/pod, -/obj/item/bedsheet, -/turf/open/floor/mineral/titanium, -/area/shuttle/tarkon_driver) -"FA" = ( -/mob/living/simple_animal/hostile/cult/warrior, -/turf/open/floor/cult, -/area/shuttle/tarkon_driver) -"FS" = ( -/obj/structure/window/reinforced/tinted/spawner/directional/north, -/obj/structure/bed/pod, -/obj/item/bedsheet, -/turf/open/floor/mineral/titanium, -/area/shuttle/tarkon_driver) -"Gg" = ( -/turf/open/floor/iron/recharge_floor, -/area/shuttle/tarkon_driver) -"GC" = ( -/obj/structure/statue/bone/rib{ - dir = 1 - }, -/turf/open/floor/cult, -/area/shuttle/tarkon_driver) -"HD" = ( -/obj/structure/rack/shelf, -/obj/effect/spawner/random/maintenance/three, -/turf/open/floor/mineral/titanium, -/area/shuttle/tarkon_driver) -"HO" = ( -/obj/structure/bed/pod{ - dir = 1 - }, -/obj/item/bedsheet{ - dir = 1 - }, -/turf/open/floor/mineral/titanium, -/area/shuttle/tarkon_driver) -"Ig" = ( -/turf/open/floor/mineral/titanium, -/area/shuttle/tarkon_driver) -"Ms" = ( -/obj/structure/table/reinforced, -/obj/machinery/button/door{ - id = "driverwindows"; - name = "Blast Shield Control" - }, -/turf/open/floor/mineral/titanium, -/area/shuttle/tarkon_driver) -"Oa" = ( -/obj/structure/closet/crate/internals, -/obj/item/clothing/head/helmet/space/eva, -/obj/item/clothing/mask/breath, -/obj/item/clothing/suit/space/eva, -/obj/item/tank/internals/oxygen, -/obj/item/tank/internals/oxygen, -/obj/item/clothing/suit/space/eva, -/obj/item/clothing/head/helmet/space/eva, -/obj/item/clothing/mask/breath, -/turf/open/floor/cult, -/area/shuttle/tarkon_driver) -"Op" = ( -/obj/machinery/door/airlock/titanium, -/obj/structure/fans/tiny/invisible, -/obj/effect/mapping_helpers/airlock/access/all/tarkon/general, -/turf/open/floor/mineral/titanium, -/area/shuttle/tarkon_driver) -"Qj" = ( -/obj/structure/table/reinforced, -/obj/machinery/light/warm/directional/south, -/obj/item/pickaxe/drill, -/turf/open/floor/mineral/titanium, -/area/shuttle/tarkon_driver) -"Sd" = ( -/obj/machinery/door/window/right/directional/south, -/turf/open/floor/mineral/titanium, -/area/shuttle/tarkon_driver) -"SG" = ( -/obj/structure/rack/shelf, -/obj/effect/spawner/random/medical/medkit, -/obj/effect/spawner/random/medical/medkit, -/turf/open/floor/mineral/titanium, -/area/shuttle/tarkon_driver) -"Ti" = ( -/obj/structure/table/reinforced, -/obj/item/crowbar/red, -/turf/open/floor/mineral/titanium, -/area/shuttle/tarkon_driver) -"Tt" = ( -/obj/structure/chair/comfy/shuttle{ - dir = 1 - }, -/turf/open/floor/mineral/titanium, -/area/shuttle/tarkon_driver) -"UE" = ( -/obj/structure/window/reinforced/tinted/spawner/directional/north, -/obj/structure/window/reinforced/tinted/spawner/directional/west, -/turf/open/floor/mineral/titanium, -/area/shuttle/tarkon_driver) -"UY" = ( -/obj/structure/rack/shelf, -/obj/effect/spawner/random/engineering/material, -/obj/effect/spawner/random/engineering/material, -/turf/open/floor/mineral/titanium, -/area/shuttle/tarkon_driver) -"VD" = ( -/obj/structure/window/reinforced/tinted/spawner/directional/south, -/obj/structure/table/reinforced, -/obj/effect/spawner/random/food_or_drink/snack, -/turf/open/floor/mineral/titanium, -/area/shuttle/tarkon_driver) -"XQ" = ( -/obj/structure/rack/shelf, -/obj/item/tank/internals/emergency_oxygen, -/obj/item/tank/internals/emergency_oxygen, -/obj/item/tank/internals/emergency_oxygen, -/turf/open/floor/cult, -/area/shuttle/tarkon_driver) -"Yh" = ( -/obj/machinery/recharge_station, -/turf/open/floor/mineral/titanium, -/area/shuttle/tarkon_driver) -"YA" = ( -/turf/open/floor/cult, -/area/shuttle/tarkon_driver) - -(1,1,1) = {" -aj -oo -oo -oo -oo -oo -oo -lV -lV -aj -oo -oo -oo -oo -oo -oo -"} -(2,1,1) = {" -lV -aj -oo -tk -Gg -Yh -oo -Cm -Cm -oo -kb -HO -eC -HO -oo -cU -"} -(3,1,1) = {" -lV -lV -xg -Ig -Ig -Ig -oo -Oa -Oa -Oa -oi -Ig -Ig -Ig -oo -cU -"} -(4,1,1) = {" -oo -Cm -kb -oo -ip -oo -kb -YA -GC -mZ -eG -rT -jH -rT -kb -oo -"} -(5,1,1) = {" -Cm -Ms -kQ -xy -Ig -Ig -wZ -Ig -mZ -YA -Ig -Ig -Ig -wZ -nd -oo -"} -(6,1,1) = {" -Cm -xi -Tt -Sd -Ig -Ig -YA -Ig -YA -mZ -FA -Ig -Ig -Ig -Ig -Op -"} -(7,1,1) = {" -Cm -DX -Tt -Dx -Ig -wZ -Ig -oK -YA -Ig -Ig -YA -wZ -Ig -Ig -zR -"} -(8,1,1) = {" -Cm -Ti -Dw -VD -wZ -Ig -Ig -YA -YA -YA -wZ -Ig -Ig -Ig -Qj -oo -"} -(9,1,1) = {" -oo -Cm -kb -oo -ip -oo -kb -mZ -wt -YA -UE -pL -kC -pL -kb -oo -"} -(10,1,1) = {" -lV -lV -xg -Ig -Ig -Ig -oo -Bv -Ea -XQ -FS -Ig -Ig -Ig -oo -cU -"} -(11,1,1) = {" -lV -aj -oo -HD -UY -SG -oo -Cm -Cm -oo -kb -EM -eC -EM -oo -cU -"} -(12,1,1) = {" -aj -oo -oo -oo -oo -oo -oo -lV -lV -aj -oo -oo -oo -oo -oo -oo -"} diff --git a/_maps/shuttles/nova/ruin_tarkon_driverdc3.dmm b/_maps/shuttles/nova/ruin_tarkon_driverdc3.dmm deleted file mode 100644 index 6b3677487d7..00000000000 --- a/_maps/shuttles/nova/ruin_tarkon_driverdc3.dmm +++ /dev/null @@ -1,492 +0,0 @@ -//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE -"a" = ( -/obj/structure/table/reinforced, -/obj/item/flashlight/lamp, -/turf/open/floor/mineral/titanium, -/area/shuttle/tarkon_driver) -"b" = ( -/obj/machinery/power/shuttle_engine/propulsion/burst{ - dir = 1 - }, -/turf/open/floor/mineral/titanium, -/area/shuttle/tarkon_driver) -"d" = ( -/obj/structure/table/reinforced, -/obj/machinery/button/door{ - id = "driverwindows"; - name = "Blast Shield Control" - }, -/turf/open/floor/mineral/titanium, -/area/shuttle/tarkon_driver) -"e" = ( -/obj/machinery/computer/camera_advanced/shuttle_docker/tarkon_driver, -/turf/open/floor/mineral/titanium, -/area/shuttle/tarkon_driver) -"f" = ( -/mob/living/simple_animal/hostile/alien/drone, -/turf/open/floor/mineral/titanium, -/area/shuttle/tarkon_driver) -"g" = ( -/obj/structure/bed/pod{ - dir = 1 - }, -/obj/item/bedsheet{ - dir = 1 - }, -/turf/open/floor/mineral/titanium, -/area/shuttle/tarkon_driver) -"h" = ( -/obj/structure/window/reinforced/tinted/spawner/directional/north, -/obj/structure/bed/pod{ - dir = 1 - }, -/obj/item/bedsheet{ - dir = 1 - }, -/turf/open/floor/mineral/titanium, -/area/shuttle/tarkon_driver) -"i" = ( -/obj/machinery/computer/shuttle/tarkon_driver, -/turf/open/floor/mineral/titanium, -/area/shuttle/tarkon_driver) -"j" = ( -/obj/machinery/door/airlock/titanium/glass, -/turf/open/floor/mineral/titanium, -/area/shuttle/tarkon_driver) -"k" = ( -/obj/structure/window/reinforced/tinted/spawner/directional/north, -/obj/structure/window/reinforced/tinted/spawner/directional/west, -/turf/open/floor/mineral/titanium, -/area/shuttle/tarkon_driver) -"l" = ( -/obj/structure/table/reinforced, -/obj/item/crowbar/red, -/turf/open/floor/mineral/titanium, -/area/shuttle/tarkon_driver) -"n" = ( -/obj/structure/rack/shelf, -/obj/item/flashlight/flare, -/obj/item/flashlight/flare, -/obj/item/flashlight/flare, -/turf/open/floor/mineral/titanium, -/area/shuttle/tarkon_driver) -"o" = ( -/obj/structure/rack/shelf, -/obj/effect/spawner/random/maintenance/three, -/turf/open/floor/mineral/titanium, -/area/shuttle/tarkon_driver) -"p" = ( -/obj/machinery/door/airlock/titanium, -/obj/effect/mapping_helpers/airlock/access/all/tarkon/general, -/obj/structure/fans/tiny/invisible, -/turf/open/floor/mineral/titanium, -/area/shuttle/tarkon_driver) -"q" = ( -/obj/machinery/door/airlock/titanium, -/obj/docking_port/mobile{ - shuttle_id = "tarkon_driver"; - name = "Tarkon Driver"; - port_direction = 2; - preferred_direction = 8 - }, -/obj/structure/fans/tiny/invisible, -/obj/effect/mapping_helpers/airlock/access/all/tarkon/general, -/turf/open/floor/mineral/titanium, -/area/shuttle/tarkon_driver) -"r" = ( -/turf/closed/wall/mineral/titanium, -/area/shuttle/tarkon_driver) -"s" = ( -/turf/template_noop, -/area/template_noop) -"t" = ( -/obj/machinery/light/dim/directional/west, -/obj/structure/table/reinforced, -/obj/item/clothing/mask/gas, -/turf/open/floor/mineral/titanium, -/area/shuttle/tarkon_driver) -"u" = ( -/obj/structure/chair/comfy/shuttle{ - dir = 1 - }, -/turf/open/floor/mineral/titanium, -/area/shuttle/tarkon_driver) -"v" = ( -/obj/machinery/light/dim/directional/east, -/obj/structure/table/reinforced, -/obj/effect/spawner/random/food_or_drink/snack, -/turf/open/floor/mineral/titanium, -/area/shuttle/tarkon_driver) -"w" = ( -/obj/structure/rack/shelf, -/obj/item/oxygen_candle, -/obj/item/oxygen_candle, -/obj/item/oxygen_candle, -/turf/open/floor/mineral/titanium, -/area/shuttle/tarkon_driver) -"x" = ( -/obj/structure/window/reinforced/tinted/spawner/directional/south, -/obj/structure/table/reinforced, -/obj/item/tank/internals/emergency_oxygen/engi, -/turf/open/floor/mineral/titanium, -/area/shuttle/tarkon_driver) -"y" = ( -/obj/machinery/mech_bay_recharge_port{ - dir = 2 - }, -/turf/open/floor/mineral/titanium, -/area/shuttle/tarkon_driver) -"z" = ( -/obj/structure/closet/crate/internals, -/obj/item/clothing/head/helmet/space/eva, -/obj/item/clothing/mask/breath, -/obj/item/clothing/suit/space/eva, -/obj/item/tank/internals/oxygen, -/obj/item/tank/internals/oxygen, -/obj/item/clothing/suit/space/eva, -/obj/item/clothing/head/helmet/space/eva, -/obj/item/clothing/mask/breath, -/turf/open/floor/mineral/titanium, -/area/shuttle/tarkon_driver) -"A" = ( -/obj/machinery/door/window/right/directional/south, -/turf/open/floor/mineral/titanium, -/area/shuttle/tarkon_driver) -"B" = ( -/obj/structure/bed/pod, -/obj/item/bedsheet, -/turf/open/floor/mineral/titanium, -/area/shuttle/tarkon_driver) -"C" = ( -/obj/structure/table/reinforced, -/obj/machinery/light/warm/directional/south, -/obj/item/pickaxe/drill, -/turf/open/floor/mineral/titanium, -/area/shuttle/tarkon_driver) -"D" = ( -/obj/structure/window/reinforced/tinted/spawner/directional/north, -/obj/structure/window/reinforced/tinted/spawner/directional/east, -/turf/open/floor/mineral/titanium, -/area/shuttle/tarkon_driver) -"E" = ( -/mob/living/simple_animal/hostile/alien/sentinel, -/turf/open/floor/mineral/titanium, -/area/shuttle/tarkon_driver) -"F" = ( -/turf/open/floor/mineral/titanium, -/area/shuttle/tarkon_driver) -"G" = ( -/obj/machinery/door/window/right/directional/east{ - opacity = 1 - }, -/turf/open/floor/mineral/titanium, -/area/shuttle/tarkon_driver) -"H" = ( -/obj/structure/window/reinforced/tinted/spawner/directional/east, -/turf/open/floor/mineral/titanium, -/area/shuttle/tarkon_driver) -"I" = ( -/obj/effect/spawner/structure/window/reinforced/shuttle, -/obj/machinery/door/poddoor{ - id = "driverwindows" - }, -/turf/open/floor/mineral/titanium, -/area/shuttle/tarkon_driver) -"J" = ( -/obj/structure/window/reinforced/tinted/spawner/directional/north, -/obj/structure/bed/pod, -/obj/item/bedsheet, -/turf/open/floor/mineral/titanium, -/area/shuttle/tarkon_driver) -"K" = ( -/mob/living/simple_animal/hostile/alien, -/turf/open/floor/mineral/titanium, -/area/shuttle/tarkon_driver) -"L" = ( -/obj/machinery/recharge_station, -/turf/open/floor/mineral/titanium, -/area/shuttle/tarkon_driver) -"M" = ( -/obj/structure/window/reinforced/tinted/spawner/directional/west, -/turf/open/floor/mineral/titanium, -/area/shuttle/tarkon_driver) -"N" = ( -/obj/structure/window/reinforced/tinted/spawner/directional/south, -/obj/structure/table/reinforced, -/obj/effect/spawner/random/food_or_drink/snack, -/turf/open/floor/mineral/titanium, -/area/shuttle/tarkon_driver) -"O" = ( -/obj/structure/rack/shelf, -/obj/effect/spawner/random/engineering/material, -/obj/effect/spawner/random/engineering/material, -/turf/open/floor/mineral/titanium, -/area/shuttle/tarkon_driver) -"P" = ( -/obj/machinery/door/window/left/directional/south, -/obj/structure/alien/weeds/node, -/turf/open/floor/mineral/titanium, -/area/shuttle/tarkon_driver) -"Q" = ( -/turf/closed/wall/mineral/titanium/nodiagonal, -/area/shuttle/tarkon_driver) -"R" = ( -/obj/machinery/door/window/left/directional/west{ - opacity = 1 - }, -/turf/open/floor/mineral/titanium, -/area/shuttle/tarkon_driver) -"S" = ( -/obj/machinery/door/airlock/titanium, -/obj/structure/fans/tiny/invisible, -/obj/effect/mapping_helpers/airlock/access/all/tarkon/general, -/turf/open/floor/mineral/titanium, -/area/shuttle/tarkon_driver) -"T" = ( -/mob/living/simple_animal/hostile/alien/sentinel, -/turf/open/floor/iron/recharge_floor, -/area/shuttle/tarkon_driver) -"U" = ( -/obj/machinery/power/shuttle_engine/propulsion/burst, -/turf/open/floor/mineral/titanium, -/area/shuttle/tarkon_driver) -"V" = ( -/obj/structure/alien/weeds/node, -/turf/open/floor/mineral/titanium, -/area/shuttle/tarkon_driver) -"W" = ( -/obj/structure/table/reinforced, -/obj/item/storage/toolbox/emergency, -/obj/machinery/light/warm/directional/south, -/turf/open/floor/mineral/titanium, -/area/shuttle/tarkon_driver) -"X" = ( -/obj/structure/rack/shelf, -/obj/item/tank/internals/emergency_oxygen, -/obj/item/tank/internals/emergency_oxygen, -/obj/item/tank/internals/emergency_oxygen, -/turf/open/floor/mineral/titanium, -/area/shuttle/tarkon_driver) -"Y" = ( -/obj/structure/rack/shelf, -/obj/effect/spawner/random/medical/medkit, -/obj/effect/spawner/random/medical/medkit, -/turf/open/floor/mineral/titanium, -/area/shuttle/tarkon_driver) - -(1,1,1) = {" -b -r -r -r -r -r -r -s -s -b -r -r -r -r -r -r -"} -(2,1,1) = {" -s -b -r -y -T -L -r -I -I -r -Q -g -a -g -r -U -"} -(3,1,1) = {" -s -s -p -F -V -F -r -z -z -z -h -F -F -V -r -U -"} -(4,1,1) = {" -r -I -Q -r -j -r -Q -V -F -F -D -H -G -H -Q -r -"} -(5,1,1) = {" -I -d -t -x -F -F -F -F -F -K -F -F -F -K -W -r -"} -(6,1,1) = {" -I -e -u -A -F -F -F -F -F -F -V -F -F -F -F -S -"} -(7,1,1) = {" -I -i -u -P -F -F -F -f -F -F -F -F -F -F -V -q -"} -(8,1,1) = {" -I -l -v -N -F -F -V -F -F -F -F -F -E -F -C -r -"} -(9,1,1) = {" -r -I -Q -r -j -r -Q -F -F -V -k -M -R -M -Q -r -"} -(10,1,1) = {" -s -s -p -f -F -V -r -w -n -X -J -F -V -F -r -U -"} -(11,1,1) = {" -s -b -r -o -O -Y -r -I -I -r -Q -B -a -B -r -U -"} -(12,1,1) = {" -b -r -r -r -r -r -r -s -s -b -r -r -r -r -r -r -"} diff --git a/_maps/shuttles/nova/ruin_tarkon_driverdc54.dmm b/_maps/shuttles/nova/ruin_tarkon_driverdc54.dmm deleted file mode 100644 index bea3eba3a4e..00000000000 --- a/_maps/shuttles/nova/ruin_tarkon_driverdc54.dmm +++ /dev/null @@ -1,474 +0,0 @@ -//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE -"a" = ( -/obj/structure/table/reinforced, -/obj/item/flashlight/lamp, -/turf/open/floor/mineral/titanium, -/area/shuttle/tarkon_driver) -"b" = ( -/obj/machinery/power/shuttle_engine/propulsion/burst{ - dir = 1 - }, -/turf/open/floor/mineral/titanium, -/area/shuttle/tarkon_driver) -"d" = ( -/obj/structure/table/reinforced, -/obj/machinery/button/door{ - id = "driverwindows"; - name = "Blast Shield Control" - }, -/turf/open/floor/mineral/titanium, -/area/shuttle/tarkon_driver) -"e" = ( -/obj/machinery/computer/camera_advanced/shuttle_docker/tarkon_driver, -/turf/open/floor/mineral/titanium, -/area/shuttle/tarkon_driver) -"g" = ( -/obj/structure/bed/pod{ - dir = 1 - }, -/obj/item/bedsheet{ - dir = 1 - }, -/turf/open/floor/mineral/titanium, -/area/shuttle/tarkon_driver) -"h" = ( -/obj/structure/window/reinforced/tinted/spawner/directional/north, -/obj/structure/bed/pod{ - dir = 1 - }, -/obj/item/bedsheet{ - dir = 1 - }, -/turf/open/floor/mineral/titanium, -/area/shuttle/tarkon_driver) -"i" = ( -/obj/machinery/computer/shuttle/tarkon_driver, -/turf/open/floor/mineral/titanium, -/area/shuttle/tarkon_driver) -"j" = ( -/obj/machinery/door/airlock/titanium/glass, -/turf/open/floor/mineral/titanium, -/area/shuttle/tarkon_driver) -"k" = ( -/obj/structure/window/reinforced/tinted/spawner/directional/north, -/obj/structure/window/reinforced/tinted/spawner/directional/west, -/turf/open/floor/mineral/titanium, -/area/shuttle/tarkon_driver) -"l" = ( -/obj/structure/table/reinforced, -/obj/item/crowbar/red, -/turf/open/floor/mineral/titanium, -/area/shuttle/tarkon_driver) -"n" = ( -/obj/structure/rack/shelf, -/obj/item/flashlight/flare, -/obj/item/flashlight/flare, -/obj/item/flashlight/flare, -/turf/open/floor/mineral/titanium, -/area/shuttle/tarkon_driver) -"o" = ( -/obj/structure/rack/shelf, -/obj/effect/spawner/random/maintenance/three, -/turf/open/floor/mineral/titanium, -/area/shuttle/tarkon_driver) -"p" = ( -/obj/machinery/door/airlock/titanium, -/obj/effect/mapping_helpers/airlock/access/all/tarkon/general, -/obj/structure/fans/tiny/invisible, -/turf/open/floor/mineral/titanium, -/area/shuttle/tarkon_driver) -"q" = ( -/obj/machinery/door/airlock/titanium, -/obj/docking_port/mobile{ - shuttle_id = "tarkon_driver"; - name = "Tarkon Driver"; - port_direction = 2; - preferred_direction = 8 - }, -/obj/structure/fans/tiny/invisible, -/obj/effect/mapping_helpers/airlock/access/all/tarkon/general, -/turf/open/floor/mineral/titanium, -/area/shuttle/tarkon_driver) -"r" = ( -/turf/closed/wall/mineral/titanium, -/area/shuttle/tarkon_driver) -"s" = ( -/turf/template_noop, -/area/template_noop) -"t" = ( -/obj/machinery/light/dim/directional/west, -/obj/structure/table/reinforced, -/obj/item/clothing/mask/gas, -/turf/open/floor/mineral/titanium, -/area/shuttle/tarkon_driver) -"u" = ( -/obj/structure/chair/comfy/shuttle{ - dir = 1 - }, -/turf/open/floor/mineral/titanium, -/area/shuttle/tarkon_driver) -"v" = ( -/obj/machinery/light/dim/directional/east, -/obj/structure/table/reinforced, -/obj/effect/spawner/random/food_or_drink/snack, -/turf/open/floor/mineral/titanium, -/area/shuttle/tarkon_driver) -"w" = ( -/obj/structure/rack/shelf, -/obj/item/oxygen_candle, -/obj/item/oxygen_candle, -/obj/item/oxygen_candle, -/turf/open/floor/mineral/titanium, -/area/shuttle/tarkon_driver) -"x" = ( -/obj/structure/window/reinforced/tinted/spawner/directional/south, -/obj/structure/table/reinforced, -/obj/item/tank/internals/emergency_oxygen/engi, -/turf/open/floor/mineral/titanium, -/area/shuttle/tarkon_driver) -"y" = ( -/obj/machinery/mech_bay_recharge_port{ - dir = 2 - }, -/turf/open/floor/mineral/titanium, -/area/shuttle/tarkon_driver) -"z" = ( -/obj/structure/closet/crate/internals, -/obj/item/clothing/head/helmet/space/eva, -/obj/item/clothing/mask/breath, -/obj/item/clothing/suit/space/eva, -/obj/item/tank/internals/oxygen, -/obj/item/tank/internals/oxygen, -/obj/item/clothing/suit/space/eva, -/obj/item/clothing/head/helmet/space/eva, -/obj/item/clothing/mask/breath, -/turf/open/floor/mineral/titanium, -/area/shuttle/tarkon_driver) -"A" = ( -/obj/machinery/door/window/right/directional/south, -/turf/open/floor/mineral/titanium, -/area/shuttle/tarkon_driver) -"B" = ( -/obj/structure/bed/pod, -/obj/item/bedsheet, -/turf/open/floor/mineral/titanium, -/area/shuttle/tarkon_driver) -"C" = ( -/obj/structure/table/reinforced, -/obj/machinery/light/warm/directional/south, -/obj/item/pickaxe/drill, -/turf/open/floor/mineral/titanium, -/area/shuttle/tarkon_driver) -"D" = ( -/obj/structure/window/reinforced/tinted/spawner/directional/north, -/obj/structure/window/reinforced/tinted/spawner/directional/east, -/turf/open/floor/mineral/titanium, -/area/shuttle/tarkon_driver) -"F" = ( -/turf/open/floor/mineral/titanium, -/area/shuttle/tarkon_driver) -"G" = ( -/obj/machinery/door/window/right/directional/east{ - opacity = 1 - }, -/turf/open/floor/mineral/titanium, -/area/shuttle/tarkon_driver) -"H" = ( -/obj/structure/window/reinforced/tinted/spawner/directional/east, -/turf/open/floor/mineral/titanium, -/area/shuttle/tarkon_driver) -"I" = ( -/obj/effect/spawner/structure/window/reinforced/shuttle, -/obj/machinery/door/poddoor{ - id = "driverwindows" - }, -/turf/open/floor/mineral/titanium, -/area/shuttle/tarkon_driver) -"J" = ( -/obj/structure/window/reinforced/tinted/spawner/directional/north, -/obj/structure/bed/pod, -/obj/item/bedsheet, -/turf/open/floor/mineral/titanium, -/area/shuttle/tarkon_driver) -"L" = ( -/obj/machinery/recharge_station, -/turf/open/floor/mineral/titanium, -/area/shuttle/tarkon_driver) -"M" = ( -/obj/structure/window/reinforced/tinted/spawner/directional/west, -/turf/open/floor/mineral/titanium, -/area/shuttle/tarkon_driver) -"N" = ( -/obj/structure/window/reinforced/tinted/spawner/directional/south, -/obj/structure/table/reinforced, -/obj/effect/spawner/random/food_or_drink/snack, -/turf/open/floor/mineral/titanium, -/area/shuttle/tarkon_driver) -"O" = ( -/obj/structure/rack/shelf, -/obj/effect/spawner/random/engineering/material, -/obj/effect/spawner/random/engineering/material, -/turf/open/floor/mineral/titanium, -/area/shuttle/tarkon_driver) -"P" = ( -/obj/machinery/door/window/left/directional/south, -/turf/open/floor/mineral/titanium, -/area/shuttle/tarkon_driver) -"Q" = ( -/turf/closed/wall/mineral/titanium/nodiagonal, -/area/shuttle/tarkon_driver) -"R" = ( -/obj/machinery/door/window/left/directional/west{ - opacity = 1 - }, -/turf/open/floor/mineral/titanium, -/area/shuttle/tarkon_driver) -"S" = ( -/obj/machinery/door/airlock/titanium, -/obj/structure/fans/tiny/invisible, -/obj/effect/mapping_helpers/airlock/access/all/tarkon/general, -/turf/open/floor/mineral/titanium, -/area/shuttle/tarkon_driver) -"T" = ( -/turf/open/floor/iron/recharge_floor, -/area/shuttle/tarkon_driver) -"U" = ( -/obj/machinery/power/shuttle_engine/propulsion/burst, -/turf/open/floor/mineral/titanium, -/area/shuttle/tarkon_driver) -"W" = ( -/obj/structure/table/reinforced, -/obj/item/storage/toolbox/emergency, -/obj/machinery/light/warm/directional/south, -/turf/open/floor/mineral/titanium, -/area/shuttle/tarkon_driver) -"X" = ( -/obj/structure/rack/shelf, -/obj/item/tank/internals/emergency_oxygen, -/obj/item/tank/internals/emergency_oxygen, -/obj/item/tank/internals/emergency_oxygen, -/turf/open/floor/mineral/titanium, -/area/shuttle/tarkon_driver) -"Y" = ( -/obj/structure/rack/shelf, -/obj/effect/spawner/random/medical/medkit, -/obj/effect/spawner/random/medical/medkit, -/turf/open/floor/mineral/titanium, -/area/shuttle/tarkon_driver) - -(1,1,1) = {" -b -r -r -r -r -r -r -s -s -b -r -r -r -r -r -r -"} -(2,1,1) = {" -s -b -r -y -T -L -r -I -I -r -Q -g -a -g -r -U -"} -(3,1,1) = {" -s -s -p -F -F -F -r -z -z -z -h -F -F -F -r -U -"} -(4,1,1) = {" -r -I -Q -r -j -r -Q -F -F -F -D -H -G -H -Q -r -"} -(5,1,1) = {" -I -d -t -x -F -F -F -F -F -F -F -F -F -F -W -r -"} -(6,1,1) = {" -I -e -u -A -F -F -F -F -F -F -F -F -F -F -F -S -"} -(7,1,1) = {" -I -i -u -P -F -F -F -F -F -F -F -F -F -F -F -q -"} -(8,1,1) = {" -I -l -v -N -F -F -F -F -F -F -F -F -F -F -C -r -"} -(9,1,1) = {" -r -I -Q -r -j -r -Q -F -F -F -k -M -R -M -Q -r -"} -(10,1,1) = {" -s -s -p -F -F -F -r -w -n -X -J -F -F -F -r -U -"} -(11,1,1) = {" -s -b -r -o -O -Y -r -I -I -r -Q -B -a -B -r -U -"} -(12,1,1) = {" -b -r -r -r -r -r -r -s -s -b -r -r -r -r -r -r -"} diff --git a/_maps/shuttles/nova/slaver_syndie.dmm b/_maps/shuttles/nova/slaver_syndie.dmm index d552f96c547..e9eac52860e 100644 --- a/_maps/shuttles/nova/slaver_syndie.dmm +++ b/_maps/shuttles/nova/slaver_syndie.dmm @@ -18,9 +18,8 @@ /obj/machinery/atmospherics/pipe/smart/simple/supply/hidden{ dir = 4 }, -/obj/machinery/door/window/survival_pod{ +/obj/machinery/door/window/survival_pod/left/directional/east{ desc = "Kinda sleek. Doesn't offer much privacy."; - dir = 4; name = "Prison Cell Door"; req_access = list("syndicate") }, @@ -416,9 +415,8 @@ /obj/machinery/atmospherics/pipe/smart/simple/supply/hidden{ dir = 4 }, -/obj/machinery/door/window/survival_pod{ +/obj/machinery/door/window/survival_pod/left/directional/west{ desc = "Kinda sleek. Doesn't offer much privacy."; - dir = 8; name = "Prison Cell Door"; req_access = list("syndicate") }, @@ -758,9 +756,8 @@ pixel_y = 13 }, /obj/machinery/shower/directional/north, -/obj/machinery/door/window/survival_pod{ +/obj/machinery/door/window/survival_pod/left/directional/west{ desc = "Kinda sleek. Doesn't offer much privacy."; - dir = 8; name = "Prison Cell Door"; req_one_access = list("security","brig","armory","syndicate") }, diff --git a/_maps/shuttles/nova/whiteship_blueshift.dmm b/_maps/shuttles/nova/whiteship_blueshift.dmm index 533ea6484b0..58d0ff34ac6 100644 --- a/_maps/shuttles/nova/whiteship_blueshift.dmm +++ b/_maps/shuttles/nova/whiteship_blueshift.dmm @@ -88,9 +88,7 @@ /obj/effect/turf_decal/tile/neutral{ dir = 8 }, -/obj/machinery/door/window/left/directional/north{ - dir = 8 - }, +/obj/machinery/door/window/left/directional/west, /turf/open/floor/iron/dark, /area/shuttle/abandoned) "aZ" = ( @@ -163,7 +161,7 @@ /obj/machinery/atmospherics/components/unary/vent_pump/on, /obj/structure/alien/weeds/node, /obj/structure/bed/double/pod, -/obj/item/bedsheet/dorms_double, +/obj/effect/spawner/random/bedsheet/double, /obj/structure/sign/poster/random/directional/east, /turf/open/floor/wood, /area/shuttle/abandoned/crew) @@ -1495,7 +1493,7 @@ /turf/open/floor/plating, /area/shuttle/abandoned/bridge) "nX" = ( -/obj/item/bedsheet/dorms, +/obj/effect/spawner/random/bedsheet, /obj/machinery/atmospherics/components/unary/vent_pump/on, /obj/effect/decal/cleanable/dirt, /obj/effect/decal/cleanable/dirt, @@ -3603,7 +3601,7 @@ /obj/structure/alien/weeds, /obj/structure/alien/weeds, /obj/structure/bed/double/pod, -/obj/item/bedsheet/dorms_double, +/obj/effect/spawner/random/bedsheet/double, /obj/structure/sign/poster/random/directional/east, /turf/open/floor/wood, /area/shuttle/abandoned/crew) @@ -3903,7 +3901,7 @@ /turf/template_noop, /area/shuttle/abandoned/bridge) "LG" = ( -/obj/item/bedsheet/dorms, +/obj/effect/spawner/random/bedsheet, /obj/machinery/atmospherics/components/unary/vent_pump/on, /obj/effect/decal/cleanable/dirt, /obj/structure/alien/weeds, diff --git a/_maps/shuttles/pirate_default.dmm b/_maps/shuttles/pirate_default.dmm index 77f7c615ac2..9bd032fd328 100644 --- a/_maps/shuttles/pirate_default.dmm +++ b/_maps/shuttles/pirate_default.dmm @@ -900,7 +900,7 @@ }, /obj/machinery/atmospherics/components/unary/vent_pump/on, /obj/structure/window/spawner/directional/east, -/obj/machinery/door/window{ +/obj/machinery/door/window/left/directional/south{ name = "Decontamination" }, /turf/open/floor/plating, diff --git a/_maps/shuttles/pirate_dutchman.dmm b/_maps/shuttles/pirate_dutchman.dmm index 86b85f7b70e..fb36638173e 100644 --- a/_maps/shuttles/pirate_dutchman.dmm +++ b/_maps/shuttles/pirate_dutchman.dmm @@ -464,15 +464,11 @@ /obj/effect/turf_decal/siding/wood{ dir = 8 }, -/obj/structure/rack{ - icon = 'icons/obj/fluff/general.dmi'; - icon_state = "minibar"; - name = "skeletal minibar" - }, /obj/item/food/grown/sugarcane, /obj/item/food/grown/sugarcane, /obj/item/food/grown/sugarcane, /obj/item/reagent_containers/cup/bucket/wooden, +/obj/structure/rack/skeletal, /turf/open/floor/wood/airless, /area/shuttle/pirate/flying_dutchman) "vT" = ( @@ -550,17 +546,13 @@ dir = 10 }, /obj/machinery/light/floor, -/obj/structure/rack{ - icon = 'icons/obj/fluff/general.dmi'; - icon_state = "minibar"; - name = "skeletal minibar" - }, /obj/item/reagent_containers/condiment/milk{ pixel_x = -5 }, /obj/item/reagent_containers/condiment/milk{ pixel_x = 5 }, +/obj/structure/rack/skeletal, /turf/open/floor/wood/airless, /area/shuttle/pirate/flying_dutchman) "zE" = ( diff --git a/_maps/shuttles/pirate_grey.dmm b/_maps/shuttles/pirate_grey.dmm index 0726d8d1ea1..7ba8fdd5a5c 100644 --- a/_maps/shuttles/pirate_grey.dmm +++ b/_maps/shuttles/pirate_grey.dmm @@ -955,7 +955,7 @@ /area/shuttle/pirate) "DP" = ( /obj/structure/bed, -/obj/item/bedsheet/random, +/obj/effect/spawner/random/bedsheet/any, /turf/open/floor/plating, /area/shuttle/pirate) "DX" = ( diff --git a/_maps/shuttles/pirate_silverscale.dmm b/_maps/shuttles/pirate_silverscale.dmm index e4838e040e4..d4bd9d0c16b 100644 --- a/_maps/shuttles/pirate_silverscale.dmm +++ b/_maps/shuttles/pirate_silverscale.dmm @@ -91,7 +91,7 @@ /obj/structure/bed/pod{ dir = 4 }, -/obj/item/bedsheet/black{ +/obj/item/bedsheet/pirate{ dir = 4 }, /turf/open/floor/carpet/royalblack, @@ -288,7 +288,7 @@ /area/shuttle/pirate) "uP" = ( /obj/structure/bed/pod, -/obj/item/bedsheet/black, +/obj/item/bedsheet/pirate, /turf/open/floor/carpet/royalblack, /area/shuttle/pirate) "vw" = ( @@ -381,7 +381,7 @@ /obj/machinery/airalarm/directional/east, /obj/effect/mapping_helpers/airalarm/all_access, /obj/structure/bed/pod, -/obj/item/bedsheet/black, +/obj/item/bedsheet/pirate, /turf/open/floor/carpet/royalblack, /area/shuttle/pirate) "zB" = ( diff --git a/_maps/shuttles/ruin_pirate_cutter.dmm b/_maps/shuttles/ruin_pirate_cutter.dmm index 77c4e37bc03..e99c5097664 100644 --- a/_maps/shuttles/ruin_pirate_cutter.dmm +++ b/_maps/shuttles/ruin_pirate_cutter.dmm @@ -344,7 +344,7 @@ "wV" = ( /obj/machinery/light/small/directional/north, /obj/structure/bed, -/obj/item/bedsheet/brown, +/obj/item/bedsheet/pirate, /turf/open/floor/iron/dark, /area/shuttle/ruin/caravan/pirate) "xb" = ( @@ -501,7 +501,7 @@ /obj/structure/bed{ dir = 4 }, -/obj/item/bedsheet/brown{ +/obj/item/bedsheet/pirate{ dir = 4 }, /obj/machinery/airalarm/directional/west, @@ -514,7 +514,7 @@ "Ha" = ( /obj/machinery/light/small/directional/south, /obj/structure/bed, -/obj/item/bedsheet/brown, +/obj/item/bedsheet/pirate, /turf/open/floor/iron/dark, /area/shuttle/ruin/caravan/pirate) "Hb" = ( @@ -551,9 +551,7 @@ /area/shuttle/ruin/caravan/pirate) "Iu" = ( /obj/structure/table, -/obj/machinery/door/window/left/directional/south{ - base_state = "right"; - icon_state = "right"; +/obj/machinery/door/window/right/directional/south{ name = "Weapon Storage" }, /obj/item/gun/energy/laser, @@ -840,7 +838,7 @@ /obj/structure/bed{ dir = 4 }, -/obj/item/bedsheet/brown{ +/obj/item/bedsheet/pirate{ dir = 4 }, /obj/machinery/firealarm/directional/west, diff --git a/_maps/shuttles/whiteship_cere.dmm b/_maps/shuttles/whiteship_cere.dmm index e6a677d57c3..1f0308690e7 100644 --- a/_maps/shuttles/whiteship_cere.dmm +++ b/_maps/shuttles/whiteship_cere.dmm @@ -388,7 +388,7 @@ /area/shuttle/abandoned/cargo) "oB" = ( /obj/structure/bed, -/obj/item/bedsheet/random, +/obj/effect/spawner/random/bedsheet/any, /obj/machinery/light/small/directional/east, /obj/effect/decal/cleanable/dirt, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden, diff --git a/_maps/shuttles/whiteship_kilo.dmm b/_maps/shuttles/whiteship_kilo.dmm index 50f40bba54a..cbc214f21d8 100644 --- a/_maps/shuttles/whiteship_kilo.dmm +++ b/_maps/shuttles/whiteship_kilo.dmm @@ -1136,9 +1136,7 @@ /turf/open/floor/plating, /area/shuttle/abandoned/engine) "Yh" = ( -/obj/machinery/door/window/survival_pod{ - dir = 4 - }, +/obj/machinery/door/window/survival_pod/left/directional/east, /obj/effect/turf_decal/stripes{ dir = 4 }, @@ -1171,16 +1169,14 @@ /turf/open/floor/plating, /area/shuttle/abandoned/engine) "YU" = ( -/obj/machinery/door/window/survival_pod{ - dir = 4 - }, +/obj/machinery/door/window/survival_pod/left/directional/east, /obj/effect/turf_decal/stripes{ dir = 4 }, /obj/structure/bed/pod{ dir = 1 }, -/obj/item/bedsheet/dorms{ +/obj/effect/spawner/random/bedsheet{ dir = 4 }, /obj/effect/decal/cleanable/dirt, diff --git a/_maps/shuttles/whiteship_obelisk.dmm b/_maps/shuttles/whiteship_obelisk.dmm index 170c3db24bd..cf27098fe03 100644 --- a/_maps/shuttles/whiteship_obelisk.dmm +++ b/_maps/shuttles/whiteship_obelisk.dmm @@ -590,7 +590,7 @@ /area/shuttle/abandoned) "Hd" = ( /obj/structure/cable, -/obj/machinery/door/window, +/obj/machinery/door/window/left/directional/south, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden{ dir = 4 }, @@ -625,9 +625,7 @@ /area/shuttle/abandoned/crew) "JN" = ( /obj/structure/cable, -/obj/machinery/door/window{ - dir = 1 - }, +/obj/machinery/door/window/left/directional/north, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden{ dir = 4 }, @@ -741,7 +739,7 @@ /area/shuttle/abandoned/engine) "Qo" = ( /obj/structure/table, -/obj/machinery/door/window, +/obj/machinery/door/window/left/directional/south, /obj/structure/window/reinforced/spawner/directional/east, /obj/item/storage/medkit/brute, /obj/item/storage/medkit/fire{ diff --git a/_maps/shuttles/whiteship_personalshuttle.dmm b/_maps/shuttles/whiteship_personalshuttle.dmm index e3f432f350b..8e041082bc6 100644 --- a/_maps/shuttles/whiteship_personalshuttle.dmm +++ b/_maps/shuttles/whiteship_personalshuttle.dmm @@ -273,7 +273,7 @@ /area/shuttle/abandoned/bridge) "pS" = ( /obj/machinery/light/small/directional/south, -/obj/item/bedsheet/dorms{ +/obj/effect/spawner/random/bedsheet{ dir = 4 }, /obj/structure/bed/pod{ diff --git a/_maps/shuttles/whiteship_tram.dmm b/_maps/shuttles/whiteship_tram.dmm index c5cc58f8208..87c04821181 100644 --- a/_maps/shuttles/whiteship_tram.dmm +++ b/_maps/shuttles/whiteship_tram.dmm @@ -713,7 +713,7 @@ /turf/open/floor/plastic, /area/shuttle/abandoned/crew) "dh" = ( -/obj/machinery/door/window/brigdoor{ +/obj/machinery/door/window/brigdoor/left/directional/south{ name = "Captain's Quarters" }, /obj/effect/turf_decal/stripes/white/line{ @@ -1004,9 +1004,7 @@ /turf/open/floor/iron/smooth_large, /area/shuttle/abandoned/engine) "sR" = ( -/obj/machinery/door/window/survival_pod{ - dir = 8 - }, +/obj/machinery/door/window/survival_pod/left/directional/west, /obj/effect/turf_decal/delivery/red, /turf/open/floor/pod, /area/shuttle/abandoned/cargo) @@ -1279,9 +1277,7 @@ /turf/open/floor/iron/dark/textured_large, /area/shuttle/abandoned/bridge) "PI" = ( -/obj/machinery/door/window/survival_pod{ - dir = 4 - }, +/obj/machinery/door/window/survival_pod/left/directional/east, /obj/effect/turf_decal/delivery/red, /turf/open/floor/pod, /area/shuttle/abandoned/cargo) diff --git a/_maps/templates/battlecruiser_starfury.dmm b/_maps/templates/battlecruiser_starfury.dmm index 672cc444fbd..2c70afabbdf 100644 --- a/_maps/templates/battlecruiser_starfury.dmm +++ b/_maps/templates/battlecruiser_starfury.dmm @@ -4737,8 +4737,7 @@ /turf/open/floor/iron/dark, /area/shuttle/sbc_starfury) "FO" = ( -/obj/machinery/door/window/survival_pod{ - dir = 1; +/obj/machinery/door/window/survival_pod/left/directional/north{ req_access = list("syndicate_leader"); name = "Command Desk" }, @@ -5791,9 +5790,6 @@ }, /turf/open/floor/iron/dark, /area/shuttle/sbc_starfury) -"ZF" = ( -/turf/closed/wall/mineral/plastitanium/nosmooth, -/area/shuttle/sbc_starfury) "ZK" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -5974,7 +5970,7 @@ cH ow ae ae -ZF +ac aa aa aa @@ -6110,7 +6106,7 @@ cH Zl ae ae -ZF +ac aa aa aa @@ -8014,7 +8010,7 @@ cH vC ae ae -ZF +ac aa aa aa @@ -8150,7 +8146,7 @@ cH xI ae ae -ZF +ac aa aa aa diff --git a/_maps/templates/hilbertshotel.dmm b/_maps/templates/hilbertshotel.dmm index 2895d104069..8c425aa9c13 100644 --- a/_maps/templates/hilbertshotel.dmm +++ b/_maps/templates/hilbertshotel.dmm @@ -76,7 +76,7 @@ /area/misc/hilbertshotel) "q" = ( /obj/structure/bed, -/obj/item/bedsheet/random, +/obj/effect/spawner/random/bedsheet/any, /turf/open/indestructible/hotelwood, /area/misc/hilbertshotel) "r" = ( diff --git a/_maps/templates/hilbertshotellore.dmm b/_maps/templates/hilbertshotellore.dmm index a9333eaea8b..716fa330de5 100644 --- a/_maps/templates/hilbertshotellore.dmm +++ b/_maps/templates/hilbertshotellore.dmm @@ -204,7 +204,7 @@ /area/misc/hilbertshotel) "aU" = ( /obj/structure/bed, -/obj/item/bedsheet/random, +/obj/effect/spawner/random/bedsheet/any, /obj/effect/decal/cleanable/dirt, /turf/open/indestructible/hotelwood, /area/misc/hilbertshotel) diff --git a/_maps/templates/holodeck_basketball.dmm b/_maps/templates/holodeck_basketball.dmm index 1a28d2ca33a..7af2c536439 100644 --- a/_maps/templates/holodeck_basketball.dmm +++ b/_maps/templates/holodeck_basketball.dmm @@ -162,15 +162,13 @@ /turf/open/floor/holofloor, /area/template_noop) "P" = ( -/obj/machinery/door/window{ - dir = 8; +/obj/machinery/door/window/left/directional/west{ name = "Basketball Court" }, /turf/open/floor/holofloor, /area/template_noop) "Q" = ( -/obj/machinery/door/window{ - dir = 4; +/obj/machinery/door/window/left/directional/east{ name = "Basketball Court" }, /turf/open/floor/holofloor, diff --git a/_maps/templates/holodeck_kobayashi.dmm b/_maps/templates/holodeck_kobayashi.dmm index 56470141bf3..babaeaac2a0 100644 --- a/_maps/templates/holodeck_kobayashi.dmm +++ b/_maps/templates/holodeck_kobayashi.dmm @@ -27,9 +27,7 @@ /turf/open/floor/holofloor/plating, /area/template_noop) "f" = ( -/obj/machinery/door/window/left/directional/west{ - dir = 2 - }, +/obj/machinery/door/window/left/directional/south, /turf/open/floor/holofloor/plating, /area/template_noop) "j" = ( @@ -142,10 +140,7 @@ /turf/open/floor/holofloor, /area/template_noop) "H" = ( -/obj/machinery/door/window/left/directional/west{ - dir = 2; - icon_state = "right" - }, +/obj/machinery/door/window/right/directional/south, /turf/open/floor/holofloor/plating, /area/template_noop) "J" = ( diff --git a/_maps/templates/holodeck_lounge.dmm b/_maps/templates/holodeck_lounge.dmm index 6bb39eb4d21..3807be667cb 100644 --- a/_maps/templates/holodeck_lounge.dmm +++ b/_maps/templates/holodeck_lounge.dmm @@ -18,12 +18,7 @@ }, /area/template_noop) "c" = ( -/obj/machinery/door/window{ - base_state = "right"; - dir = 4; - icon_state = "right"; - layer = 3 - }, +/obj/machinery/door/window/right/directional/east, /turf/open/floor/holofloor{ dir = 9; icon_state = "wood" diff --git a/_maps/templates/holodeck_medicalsim.dmm b/_maps/templates/holodeck_medicalsim.dmm index 871e5461491..7e4162ce074 100644 --- a/_maps/templates/holodeck_medicalsim.dmm +++ b/_maps/templates/holodeck_medicalsim.dmm @@ -402,9 +402,7 @@ }, /area/template_noop) "GN" = ( -/obj/machinery/door/window/left/directional/west{ - dir = 2 - }, +/obj/machinery/door/window/left/directional/south, /obj/effect/turf_decal/tile/blue/half/contrasted, /turf/open/floor/holofloor{ icon_state = "white" diff --git a/_maps/templates/holodeck_thunderdome1218.dmm b/_maps/templates/holodeck_thunderdome1218.dmm index 61794d3471d..a71432bbbd2 100644 --- a/_maps/templates/holodeck_thunderdome1218.dmm +++ b/_maps/templates/holodeck_thunderdome1218.dmm @@ -22,9 +22,7 @@ /turf/open/floor/holofloor/grass, /area/template_noop) "n" = ( -/obj/machinery/door/window/left/directional/west{ - dir = 2 - }, +/obj/machinery/door/window/left/directional/south, /turf/open/floor/holofloor/grass, /area/template_noop) "p" = ( @@ -40,10 +38,7 @@ /turf/open/floor/holofloor/asteroid, /area/template_noop) "s" = ( -/obj/machinery/door/window/left/directional/west{ - dir = 2; - icon_state = "right" - }, +/obj/machinery/door/window/right/directional/south, /turf/open/floor/holofloor/grass, /area/template_noop) "x" = ( @@ -94,9 +89,7 @@ /turf/open/floor/holofloor/grass, /area/template_noop) "R" = ( -/obj/machinery/door/window/left/directional/west{ - dir = 2 - }, +/obj/machinery/door/window/left/directional/south, /turf/open/floor/holofloor/asteroid, /area/template_noop) "T" = ( diff --git a/_maps/templates/lazy_templates/ninja_den.dmm b/_maps/templates/lazy_templates/ninja_den.dmm index 1f728350714..188d5261cff 100644 --- a/_maps/templates/lazy_templates/ninja_den.dmm +++ b/_maps/templates/lazy_templates/ninja_den.dmm @@ -470,7 +470,7 @@ "lh" = ( /obj/structure/toilet, /obj/structure/window/reinforced/survival_pod/spawner/directional/east, -/obj/machinery/door/window/survival_pod, +/obj/machinery/door/window/survival_pod/left/directional/south, /turf/open/floor/iron/showroomfloor, /area/centcom/central_command_areas/holding) "ln" = ( @@ -594,7 +594,7 @@ /obj/machinery/shower/directional/south, /obj/item/soap/syndie, /obj/structure/curtain, -/obj/machinery/door/window/survival_pod, +/obj/machinery/door/window/survival_pod/left/directional/south, /turf/open/floor/iron/showroomfloor, /area/centcom/central_command_areas/holding) "ov" = ( diff --git a/_maps/templates/lazy_templates/nukie_base.dmm b/_maps/templates/lazy_templates/nukie_base.dmm index ac3de4c4b26..58c3d233d7b 100644 --- a/_maps/templates/lazy_templates/nukie_base.dmm +++ b/_maps/templates/lazy_templates/nukie_base.dmm @@ -1034,8 +1034,7 @@ /turf/open/floor/mineral/plastitanium, /area/centcom/syndicate_mothership/expansion_chemicalwarfare) "lA" = ( -/obj/machinery/door/window/survival_pod{ - dir = 8; +/obj/machinery/door/window/survival_pod/left/directional/west{ name = "Toilet Door" }, /obj/structure/window/reinforced/survival_pod/spawner/directional/north{ @@ -1789,7 +1788,7 @@ }, /area/centcom/syndicate_mothership/control) "uN" = ( -/obj/machinery/door/window/survival_pod{ +/obj/machinery/door/window/survival_pod/left/directional/south{ name = "Frosted Door" }, /turf/open/floor/iron/freezer, @@ -2787,7 +2786,7 @@ /area/centcom/syndicate_mothership/control) "GS" = ( /obj/effect/turf_decal/siding/thinplating, -/obj/machinery/door/window/survival_pod{ +/obj/machinery/door/window/survival_pod/left/directional/south{ name = "Surgery" }, /turf/open/floor/mineral/titanium/tiled/blue, diff --git a/_maps/templates/lazy_templates/wizard_den.dmm b/_maps/templates/lazy_templates/wizard_den.dmm index 8c2ad8d2153..58e09b40a0a 100644 --- a/_maps/templates/lazy_templates/wizard_den.dmm +++ b/_maps/templates/lazy_templates/wizard_den.dmm @@ -229,7 +229,8 @@ "nV" = ( /obj/structure/flora/bush/fullgrass/style_random, /mob/living/simple_animal/hostile/ooze/gelatinous{ - name = "Jimmy" + name = "Jimmy"; + faction = list("slime", "Wizard") }, /turf/open/floor/grass, /area/centcom/wizard_station) @@ -536,7 +537,8 @@ /area/centcom/wizard_station) "AW" = ( /mob/living/simple_animal/pet/gondola{ - name = "Jommy" + name = "Jommy"; + faction = list("gondola", "Wizard") }, /obj/structure/flora/bush/fullgrass/style_random, /turf/open/floor/grass, diff --git a/_maps/templates/medium_shuttle4.dmm b/_maps/templates/medium_shuttle4.dmm index 0071a71a1e9..67a5617da6b 100644 --- a/_maps/templates/medium_shuttle4.dmm +++ b/_maps/templates/medium_shuttle4.dmm @@ -54,7 +54,7 @@ /turf/open/floor/oldshuttle, /area/ruin/powered/shuttle/medium_4) "r" = ( -/obj/machinery/power/generator, +/obj/machinery/power/thermoelectric_generator, /turf/open/floor/oldshuttle, /area/ruin/powered/shuttle/medium_4) "s" = ( diff --git a/_maps/templates/shelter_2.dmm b/_maps/templates/shelter_2.dmm index a1d20f0e7a9..b12848b01da 100644 --- a/_maps/templates/shelter_2.dmm +++ b/_maps/templates/shelter_2.dmm @@ -65,9 +65,7 @@ /obj/structure/window/reinforced/survival_pod/spawner/directional/west{ layer = 3 }, -/obj/machinery/door/window/survival_pod{ - dir = 1 - }, +/obj/machinery/door/window/survival_pod/left/directional/north, /turf/open/floor/carpet/black, /area/misc/survivalpod) "o" = ( @@ -119,9 +117,7 @@ /turf/open/floor/carpet/black, /area/misc/survivalpod) "u" = ( -/obj/machinery/door/window/survival_pod{ - dir = 1 - }, +/obj/machinery/door/window/survival_pod/left/directional/north, /turf/open/floor/carpet/black, /area/misc/survivalpod) "v" = ( diff --git a/_maps/templates/shelter_3.dmm b/_maps/templates/shelter_3.dmm index 8822425774a..d4681507a37 100644 --- a/_maps/templates/shelter_3.dmm +++ b/_maps/templates/shelter_3.dmm @@ -126,7 +126,7 @@ /turf/open/floor/pod/dark, /area/misc/survivalpod) "v" = ( -/obj/machinery/door/window/survival_pod{ +/obj/machinery/door/window/survival_pod/left/directional/south{ req_one_access = list("bar","mining") }, /turf/open/floor/pod/dark, diff --git a/_maps/virtual_domains/ancientmilsim_nova.dmm b/_maps/virtual_domains/ancientmilsim_nova.dmm index 15a7366f67a..13b0970add0 100644 --- a/_maps/virtual_domains/ancientmilsim_nova.dmm +++ b/_maps/virtual_domains/ancientmilsim_nova.dmm @@ -195,7 +195,7 @@ /area/virtual_domain/ancient_milsim/snpc_garage) "gL" = ( /obj/structure/table, -/obj/item/grenade/chem_grenade/clf3, +/obj/item/grenade/stingbang, /turf/open/floor/plating, /area/virtual_domain/ancient_milsim/janitor) "gP" = ( @@ -237,7 +237,7 @@ dir = 4; id = "sol_invasion" }, -/obj/machinery/door/window, +/obj/machinery/door/window/left/directional/south, /obj/structure/window/reinforced/spawner/directional/east, /turf/open/floor/plating, /area/virtual_domain/ancient_milsim/janitor) @@ -948,7 +948,7 @@ dir = 4; id = "sol_invasion" }, -/obj/machinery/door/window, +/obj/machinery/door/window/left/directional/south, /turf/open/floor/plating, /area/virtual_domain/ancient_milsim/janitor) "Bd" = ( @@ -1709,7 +1709,7 @@ /turf/open/floor/iron, /area/virtual_domain/ancient_milsim/snpc_cafe) "Vr" = ( -/obj/item/ammo_box/magazine/lanca, +/obj/item/ammo_box/magazine/wylom, /turf/open/misc/grass/planet/ancient_milsim, /area/virtual_domain/ancient_milsim/loot_camp) "VA" = ( @@ -4625,7 +4625,7 @@ Uz (49,1,1) = {" Uz Vl -Vr +Vl Vl Vl Vl @@ -4682,7 +4682,7 @@ Uz "} (50,1,1) = {" Uz -Vl +Vr wz Vl Vl diff --git a/_maps/virtual_domains/beach_bar.dmm b/_maps/virtual_domains/beach_bar.dmm index edea28b064f..63681684161 100644 --- a/_maps/virtual_domains/beach_bar.dmm +++ b/_maps/virtual_domains/beach_bar.dmm @@ -84,34 +84,7 @@ /turf/open/water/beach, /area/virtual_domain/fullbright) "db" = ( -/obj/item/reagent_containers/cup/glass/bottle/beer/light, -/obj/item/reagent_containers/cup/glass/bottle/beer/light, -/obj/item/reagent_containers/cup/glass/bottle/beer/light, -/obj/item/reagent_containers/cup/glass/bottle/beer/light, -/obj/item/vending_refill/cigarette, -/obj/item/vending_refill/boozeomat, -/obj/structure/closet/secure_closet{ - icon_state = "cabinet"; - name = "booze storage"; - req_access = list("bar") - }, -/obj/item/storage/backpack/duffelbag, -/obj/item/etherealballdeployer, -/obj/item/reagent_containers/cup/glass/bottle/beer/light, -/obj/item/reagent_containers/cup/glass/bottle/beer/light, -/obj/item/reagent_containers/cup/glass/bottle/beer/light, -/obj/item/reagent_containers/cup/glass/bottle/beer/light, -/obj/item/reagent_containers/cup/glass/bottle/beer/light, -/obj/item/reagent_containers/cup/glass/bottle/beer/light, -/obj/item/reagent_containers/cup/glass/bottle/beer/light, -/obj/item/reagent_containers/cup/glass/bottle/beer/light, -/obj/item/reagent_containers/cup/glass/bottle/beer/light, -/obj/item/reagent_containers/cup/glass/bottle/beer/light, -/obj/item/reagent_containers/cup/glass/colocup, -/obj/item/reagent_containers/cup/glass/colocup, -/obj/item/reagent_containers/cup/glass/colocup, -/obj/item/reagent_containers/cup/glass/colocup, -/obj/item/reagent_containers/cup/glass/colocup, +/obj/structure/closet/secure_closet/bar/lavaland_bartender_booze, /turf/open/floor/wood, /area/virtual_domain/fullbright) "di" = ( @@ -395,19 +368,8 @@ /turf/open/misc/asteroid/basalt/lava_land_surface, /area/virtual_domain/fullbright) "ug" = ( -/obj/structure/closet/secure_closet{ - icon_state = "cabinet"; - name = "bartender's closet"; - req_access = list("bar") - }, -/obj/item/clothing/shoes/sandal{ - desc = "A very fashionable pair of flip-flops."; - name = "flip-flops" - }, -/obj/item/clothing/neck/beads, -/obj/item/clothing/glasses/sunglasses/reagent, -/obj/item/clothing/suit/costume/hawaiian, /obj/machinery/light/small/directional/east, +/obj/structure/closet/secure_closet/bar/lavaland_bartender_clothes, /turf/open/floor/wood, /area/virtual_domain/fullbright) "uk" = ( @@ -897,7 +859,7 @@ /turf/open/misc/beach/sand, /area/virtual_domain/fullbright) "Nw" = ( -/obj/item/bedsheet/dorms{ +/obj/effect/spawner/random/bedsheet{ dir = 4 }, /obj/structure/bed{ diff --git a/_maps/virtual_domains/pirates.dmm b/_maps/virtual_domains/pirates.dmm index 5db01cc36a9..5b681ab7a30 100644 --- a/_maps/virtual_domains/pirates.dmm +++ b/_maps/virtual_domains/pirates.dmm @@ -480,14 +480,10 @@ /area/virtual_domain/fullbright) "AF" = ( /obj/effect/mapping_helpers/burnt_floor, -/obj/structure/rack{ - icon = 'icons/obj/fluff/general.dmi'; - icon_state = "minibar"; - name = "skeletal minibar" - }, /obj/item/storage/bag/money/dutchmen{ pixel_y = 13 }, +/obj/structure/rack/skeletal, /turf/open/floor/wood/parquet, /area/virtual_domain) "AP" = ( diff --git a/_maps/virtual_domains/syndicate_assault.dmm b/_maps/virtual_domains/syndicate_assault.dmm index 42e9f96a389..d331f664ac7 100644 --- a/_maps/virtual_domains/syndicate_assault.dmm +++ b/_maps/virtual_domains/syndicate_assault.dmm @@ -252,8 +252,7 @@ /turf/open/floor/mineral/plastitanium, /area/ruin/space/has_grav/powered/virtual_domain) "ja" = ( -/obj/machinery/door/window{ - dir = 1; +/obj/machinery/door/window/left/directional/north{ name = "Spare Equipment"; req_access = list("syndicate") }, @@ -466,7 +465,7 @@ /turf/open/floor/mineral/plastitanium, /area/ruin/space/has_grav/powered/virtual_domain) "sq" = ( -/obj/machinery/door/window{ +/obj/machinery/door/window/left/directional/south{ name = "Control Room"; req_access = list("syndicate") }, @@ -889,8 +888,7 @@ /area/space) "Lo" = ( /obj/structure/filingcabinet, -/obj/machinery/door/window{ - dir = 8; +/obj/machinery/door/window/left/directional/west{ name = "Syndicate Interior Door"; req_access = list("syndicate") }, diff --git a/code/__DEFINES/_flags.dm b/code/__DEFINES/_flags.dm index 012ded7eac1..55b5b12b531 100644 --- a/code/__DEFINES/_flags.dm +++ b/code/__DEFINES/_flags.dm @@ -133,22 +133,36 @@ GLOBAL_LIST_INIT(bitflags, list(1, 2, 4, 8, 16, 32, 64, 128, 256, 512, 1024, 204 the atom/checkpass() proc uses them (tables will call movable atom checkpass(PASSTABLE) for example) */ //flags for pass_flags +/// Allows you to pass over tables. #define PASSTABLE (1<<0) +/// Allows you to pass over glass(this generally includes anything see-through that's glass-adjacent, ie. windows, windoors, airlocks with glass, etc.) #define PASSGLASS (1<<1) +/// Allows you to pass over grilles. #define PASSGRILLE (1<<2) +/// Allows you to pass over blob tiles. #define PASSBLOB (1<<3) +/// Allows you to pass over mobs. #define PASSMOB (1<<4) +/// Allows you to pass over closed turfs, ie. walls. #define PASSCLOSEDTURF (1<<5) /// Let thrown things past us. **ONLY MEANINGFUL ON pass_flags_self!** #define LETPASSTHROW (1<<6) +/// Allows you to pass over machinery, ie. vending machines, computers, protolathes, etc. #define PASSMACHINE (1<<7) +/// Allows you to pass over structures, ie. racks, tables(if you don't already have PASSTABLE), etc. #define PASSSTRUCTURE (1<<8) +/// Allows you to pass over plastic flaps, often found at cargo or MULE dropoffs. #define PASSFLAPS (1<<9) +/// Allows you to pass over airlocks and mineral doors. #define PASSDOORS (1<<10) +/// Allows you to pass over vehicles, ie. mecha, secways, the pimpin' ride, etc. #define PASSVEHICLE (1<<11) +/// Allows you to pass over dense items. #define PASSITEM (1<<12) /// Do not intercept click attempts during Adjacent() checks. See [turf/proc/ClickCross]. **ONLY MEANINGFUL ON pass_flags_self!** #define LETPASSCLICKS (1<<13) +/// Allows you to pass over windows and window-adjacent stuff, like windows and windoors. Does not include airlocks with glass in them. +#define PASSWINDOW (1<<14) //Movement Types #define GROUND (1<<0) diff --git a/code/__DEFINES/ai/ai_blackboard.dm b/code/__DEFINES/ai/ai_blackboard.dm index daa5d4285f9..6dc90ea4d64 100644 --- a/code/__DEFINES/ai/ai_blackboard.dm +++ b/code/__DEFINES/ai/ai_blackboard.dm @@ -141,5 +141,8 @@ /// The next time at which this mob can call for reinforcements #define BB_BASIC_MOB_REINFORCEMENTS_COOLDOWN "BB_basic_mob_reinforcements_cooldown" +/// the direction we started when executing stare at things +#define BB_STARTING_DIRECTION "BB_startdir" + ///Text we display when we befriend someone #define BB_FRIENDLY_MESSAGE "friendly_message" diff --git a/code/__DEFINES/ai/bot_keys.dm b/code/__DEFINES/ai/bot_keys.dm index 5cf2e4263d4..3c9a8551f50 100644 --- a/code/__DEFINES/ai/bot_keys.dm +++ b/code/__DEFINES/ai/bot_keys.dm @@ -35,6 +35,10 @@ #define BB_NEAR_DEATH_SPEECH "near_death_speech" ///in crit patient we must alert medbay about #define BB_PATIENT_IN_CRIT "patient_in_crit" +///how much time interval before we clear list +#define BB_UNREACHABLE_LIST_COOLDOWN "unreachable_list_cooldown" +///can we clear the list now +#define BB_CLEAR_LIST_READY "clear_list_ready" // cleanbots ///key that holds the foaming ability diff --git a/code/__DEFINES/ai/monsters.dm b/code/__DEFINES/ai/monsters.dm index aff00260705..d4f9af401cf 100644 --- a/code/__DEFINES/ai/monsters.dm +++ b/code/__DEFINES/ai/monsters.dm @@ -116,6 +116,10 @@ #define BB_ORE_TARGET "BB_ore_target" /// which ore types we will not eat #define BB_ORE_IGNORE_TYPES "BB_ore_ignore_types" +/// key that holds the boulder we will break +#define BB_BOULDER_TARGET "BB_boulder_target" +/// key that holds the ore_vent we will harvest boulders from +#define BB_VENT_TARGET "BB_vent_target" // minebot keys /// key that stores our toggle light ability diff --git a/code/__DEFINES/antagonists.dm b/code/__DEFINES/antagonists.dm index d750a0a3631..888164e5256 100644 --- a/code/__DEFINES/antagonists.dm +++ b/code/__DEFINES/antagonists.dm @@ -213,6 +213,9 @@ GLOBAL_LIST_INIT(ai_employers, list( /// Checks if the given mob is a blood cultist #define IS_CULTIST(mob) (mob?.mind?.has_antag_datum(/datum/antagonist/cult)) +/// Checks if the given mob is a changeling +#define IS_CHANGELING(mob) (mob?.mind?.has_antag_datum(/datum/antagonist/changeling)) + /// Checks if the given mob is a nuclear operative #define IS_NUKE_OP(mob) (mob?.mind?.has_antag_datum(/datum/antagonist/nukeop)) diff --git a/code/__DEFINES/atmospherics/atmos_machinery.dm b/code/__DEFINES/atmospherics/atmos_machinery.dm index eb0f853ee94..ef1d06f7eee 100644 --- a/code/__DEFINES/atmospherics/atmos_machinery.dm +++ b/code/__DEFINES/atmospherics/atmos_machinery.dm @@ -49,6 +49,13 @@ /// Fire alarm has all components but isn't completed #define FIRE_ALARM_BUILD_SECURED 2 +// Fault levels for air alarm display +/// Area faults clear +#define AREA_FAULT_NONE 0 +/// Fault triggered by manual intervention (ie: fire alarm pull) +#define AREA_FAULT_MANUAL 1 +/// Fault triggered automatically (ie: firedoor detection) +#define AREA_FAULT_AUTOMATIC 2 // threshold_type values for [/datum/tlv/proc/set_value] and [/datum/tlv/proc/reset_value] /// [/datum/tlv/var/warning_min] diff --git a/code/__DEFINES/atmospherics/atmos_piping.dm b/code/__DEFINES/atmospherics/atmos_piping.dm index 5e501a83983..1993f102225 100644 --- a/code/__DEFINES/atmospherics/atmos_piping.dm +++ b/code/__DEFINES/atmospherics/atmos_piping.dm @@ -92,8 +92,14 @@ // Ventcrawling bitflags, handled in var/vent_movement ///Allows for ventcrawling to occur. All atmospheric machines have this flag on by default. Cryo is the exception -#define VENTCRAWL_ALLOWED (1<<0) +#define VENTCRAWL_ALLOWED (1<<0) ///Allows mobs to enter or leave from atmospheric machines. On for passive, unary, and scrubber vents. #define VENTCRAWL_ENTRANCE_ALLOWED (1<<1) ///Used to check if a machinery is visible. Called by update_pipe_vision(). On by default for all except cryo. -#define VENTCRAWL_CAN_SEE (1<<2) +#define VENTCRAWL_CAN_SEE (1<<2) + +DEFINE_BITFIELD(vent_movement, list( + "Ventcrawl Allowed" = VENTCRAWL_ALLOWED, + "Ventcrawl Entrance Allowed" = VENTCRAWL_ENTRANCE_ALLOWED, + "Ventcrawl Can See" = VENTCRAWL_CAN_SEE, +)) diff --git a/code/__DEFINES/atom_hud.dm b/code/__DEFINES/atom_hud.dm index eeac64d4bca..ee2d52ce8b9 100644 --- a/code/__DEFINES/atom_hud.dm +++ b/code/__DEFINES/atom_hud.dm @@ -95,6 +95,7 @@ #define SECHUD_BARTENDER "hudbartender" #define SECHUD_BITRUNNER "hudbitrunner" #define SECHUD_BOTANIST "hudbotanist" +#define SECHUD_BRIDGE_ASSISTANT "hudbridgeassistant" #define SECHUD_CAPTAIN "hudcaptain" #define SECHUD_CARGO_TECHNICIAN "hudcargotechnician" #define SECHUD_CHAPLAIN "hudchaplain" diff --git a/code/__DEFINES/colors.dm b/code/__DEFINES/colors.dm index 6a71a8d6c3c..bcb63c15382 100644 --- a/code/__DEFINES/colors.dm +++ b/code/__DEFINES/colors.dm @@ -61,6 +61,7 @@ #define COLOR_VERY_SOFT_YELLOW "#FAE48E" #define COLOR_GOLD "#FFD700" #define COLOR_ETHIOPIA_YELLOW "#FCDD09" +#define COLOR_LIGHT_YELLOW "#FFFEE0" #define COLOR_OLIVE "#808000" #define COLOR_ASSISTANT_OLIVE "#828163" @@ -430,3 +431,5 @@ GLOBAL_LIST_INIT(cable_colors, list( CABLE_COLOR_YELLOW = CABLE_HEX_COLOR_YELLOW, CABLE_COLOR_BROWN = CABLE_HEX_COLOR_BROWN )) + +#define HUSK_COLOR_TONE rgb(96, 88, 80) diff --git a/code/__DEFINES/combat.dm b/code/__DEFINES/combat.dm index c12c9b57713..33b7853cfd0 100644 --- a/code/__DEFINES/combat.dm +++ b/code/__DEFINES/combat.dm @@ -338,13 +338,13 @@ GLOBAL_LIST_INIT(arm_zones, list(BODY_ZONE_L_ARM, BODY_ZONE_R_ARM)) #define COMPONENT_AUTOFIRE_SHOT_SUCCESS (1<<0) /// Martial arts attack requested but is not available, allow a check for a regular attack. -#define MARTIAL_ATTACK_INVALID -1 +#define MARTIAL_ATTACK_INVALID NONE /// Martial arts attack happened but failed, do not allow a check for a regular attack. -#define MARTIAL_ATTACK_FAIL FALSE +#define MARTIAL_ATTACK_FAIL COMPONENT_SKIP_ATTACK /// Martial arts attack happened and succeeded, do not allow a check for a regular attack. -#define MARTIAL_ATTACK_SUCCESS TRUE +#define MARTIAL_ATTACK_SUCCESS COMPONENT_CANCEL_ATTACK_CHAIN /// IF an object is weak against armor, this is the value that any present armor is multiplied by #define ARMOR_WEAKENED_MULTIPLIER 2 @@ -370,3 +370,18 @@ GLOBAL_LIST_INIT(arm_zones, list(BODY_ZONE_L_ARM, BODY_ZONE_R_ARM)) #define COMBO_STEPS "steps" /// The proc the combo calls #define COMBO_PROC "proc" + +///Checks If the target can be moved at all by shoving them +#define SHOVE_CAN_MOVE (1<<0) +///If the target can be shoved into something something with perhaps special interactions. +#define SHOVE_CAN_HIT_SOMETHING (1<<1) +///Keeps knockdowns at bay for the target +#define SHOVE_KNOCKDOWN_BLOCKED (1<<2) +///If the target can be briefly paralized by shoving them once again after knocking them down. +#define SHOVE_CAN_KICK_SIDE (1<<3) +///Whether the staggered status effect can be applied on the target +#define SHOVE_CAN_STAGGER (1<<4) +///If the target could move, but didn't because there's an obstacle in the path. +#define SHOVE_BLOCKED (1<<5) +///If the obstacle is an object at the border of the turf (so no signal from being sent to the other turf) +#define SHOVE_DIRECTIONAL_BLOCKED (1<<6) diff --git a/code/__DEFINES/construction/material.dm b/code/__DEFINES/construction/material.dm index 294fe6364cd..24ab2eb3303 100644 --- a/code/__DEFINES/construction/material.dm +++ b/code/__DEFINES/construction/material.dm @@ -75,3 +75,15 @@ #define MATERIAL_QUANTITY_RARE 2500 /// How much quantity of a material stock exists for exotic materials like diamond & bluespace crystals. #define MATERIAL_QUANTITY_EXOTIC 500 + +// The number of ore vents that will spawn boulders with this material. +/// Is this material going to spawn often in ore vents? (80% of vents on lavaland) +#define MATERIAL_RARITY_COMMON 12 +/// Is this material going to spawn often in ore vents? (53% of vents on lavaland) +#define MATERIAL_RARITY_SEMIPRECIOUS 8 +/// Is this material going to spawn uncommonly in ore vents? (33% of vents on lavaland) +#define MATERIAL_RARITY_PRECIOUS 5 +/// Is this material going to spawn rarely in ore vents? (20% of vents on lavaland) +#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 diff --git a/code/__DEFINES/construction/rcd.dm b/code/__DEFINES/construction/rcd.dm index e8c9ae55f32..95c5ab80053 100644 --- a/code/__DEFINES/construction/rcd.dm +++ b/code/__DEFINES/construction/rcd.dm @@ -19,6 +19,9 @@ /// Time taken for an rcd hologram to disappear #define RCD_HOLOGRAM_FADE_TIME (15 SECONDS) +/// Delay before another rcd scan can be performed in the UI +#define RCD_DESTRUCTIVE_SCAN_COOLDOWN (RCD_HOLOGRAM_FADE_TIME + 1 SECONDS) + //All available upgrades /// Upgrade for building machines #define RCD_UPGRADE_FRAMES (1 << 0) diff --git a/code/__DEFINES/dcs/signals/signals_atom/signals_atom_main.dm b/code/__DEFINES/dcs/signals/signals_atom/signals_atom_main.dm index c3ec1aa8a84..a027dc61adb 100644 --- a/code/__DEFINES/dcs/signals/signals_atom/signals_atom_main.dm +++ b/code/__DEFINES/dcs/signals/signals_atom/signals_atom_main.dm @@ -20,6 +20,8 @@ #define COMSIG_ATOM_REAGENT_EXAMINE "atom_reagent_examine" /// Stop the generic reagent examine text #define STOP_GENERIC_REAGENT_EXAMINE (1<<0) + /// Allows the generic reaegent examine text regardless of whether the user can scan reagents. + #define ALLOW_GENERIC_REAGENT_EXAMINE (1<<1) ///from base of atom/examine_more(): (/mob, examine_list) #define COMSIG_ATOM_EXAMINE_MORE "atom_examine_more" /// from atom/examine_more(): (/atom/examining, examine_list) diff --git a/code/__DEFINES/dcs/signals/signals_camera.dm b/code/__DEFINES/dcs/signals/signals_camera.dm index 6ec142f54fa..92e9b94f35b 100644 --- a/code/__DEFINES/dcs/signals/signals_camera.dm +++ b/code/__DEFINES/dcs/signals/signals_camera.dm @@ -1,2 +1,4 @@ -///Signal sent when a /datum/trackable found a target: (datum/trackable/source, mob/living/target) +///Signal sent when a /datum/trackable found a target: (mob/living/target) #define COMSIG_TRACKABLE_TRACKING_TARGET "comsig_trackable_tracking_target" +///Signal sent when the mob a /datum/trackable is actively following changes glide size: mob/living/target, new_glide_size) +#define COMSIG_TRACKABLE_GLIDE_CHANGED "comsig_trackable_glide_changed" diff --git a/code/__DEFINES/dcs/signals/signals_circuit.dm b/code/__DEFINES/dcs/signals/signals_circuit.dm index c0676d768ce..3fe4e80fdb2 100644 --- a/code/__DEFINES/dcs/signals/signals_circuit.dm +++ b/code/__DEFINES/dcs/signals/signals_circuit.dm @@ -81,3 +81,8 @@ /// Called when an equipment action component is removed from a shell (/obj/item/circuit_component/equipment_action/action_comp) #define COMSIG_CIRCUIT_ACTION_COMPONENT_UNREGISTERED "circuit_action_component_unregistered" + +///Sent to the shell component when a circuit is attached. +#define COMSIG_SHELL_CIRCUIT_ATTACHED "shell_circuit_attached" +///Sent to the shell component when a circuit is removed. +#define COMSIG_SHELL_CIRCUIT_REMOVED "shell_circuit_removed" diff --git a/code/__DEFINES/dcs/signals/signals_fish.dm b/code/__DEFINES/dcs/signals/signals_fish.dm index a40e731fc7b..c70cdfde1a3 100644 --- a/code/__DEFINES/dcs/signals/signals_fish.dm +++ b/code/__DEFINES/dcs/signals/signals_fish.dm @@ -28,6 +28,8 @@ #define COMSIG_FISHING_ROD_CAUGHT_FISH "fishing_rod_caught_fish" /// From /obj/item/fishing_rod/proc/hook_item(): (reward, user) #define COMSIG_FISHING_ROD_HOOKED_ITEM "fishing_rod_hooked_item" +/// From /datum/fish_source/proc/use_slot(), sent to the slotted item: (obj/item/fishing_rod/rod) +#define COMSIG_FISHING_EQUIPMENT_SLOTTED "fishing_equipment_slotted" /// Sent when the challenge is to be interrupted: (reason) #define COMSIG_FISHING_SOURCE_INTERRUPT_CHALLENGE "fishing_spot_interrupt_challenge" diff --git a/code/__DEFINES/dcs/signals/signals_global.dm b/code/__DEFINES/dcs/signals/signals_global.dm index 3c7399d98fa..41c2b4b7459 100644 --- a/code/__DEFINES/dcs/signals/signals_global.dm +++ b/code/__DEFINES/dcs/signals/signals_global.dm @@ -84,6 +84,9 @@ /// (new_name, old_name) #define COMSIG_GLOB_STATION_NAME_CHANGED "!station_name_changed" +/// Global signal sent before we decide what job everyone has +#define COMSIG_GLOB_PRE_JOBS_ASSIGNED "!pre_roles_assigned" + /// global signal when a global nullrod type is picked #define COMSIG_GLOB_NULLROD_PICKED "!nullrod_picked" diff --git a/code/__DEFINES/dcs/signals/signals_mining.dm b/code/__DEFINES/dcs/signals/signals_mining.dm index 8dc3fe283f6..3ef84b1f7b6 100644 --- a/code/__DEFINES/dcs/signals/signals_mining.dm +++ b/code/__DEFINES/dcs/signals/signals_mining.dm @@ -1,3 +1,6 @@ +/// Sent from /obj/structure/ore_vent, lets the spawner component know to qdel. +#define COMSIG_VENT_WAVE_CONCLUDED "mining_waves_stop" + /// Fired by a mob which has been grabbed by a goliath #define COMSIG_GOLIATH_TENTACLED_GRABBED "comsig_goliath_tentacle_grabbed" /// Fired by a goliath tentacle which is returning to the earth 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 fe7673ee3ca..8b73010b8f9 100644 --- a/code/__DEFINES/dcs/signals/signals_mob/signals_mob_carbon.dm +++ b/code/__DEFINES/dcs/signals/signals_mob/signals_mob_carbon.dm @@ -13,13 +13,6 @@ ///Called from /mob/living/carbon/help_shake_act on the helper, after any hugs have ocurred. (mob/living/helped) #define COMSIG_CARBON_HELPED "carbon_helped_someone" -///Before a carbon mob is shoved, sent to the turf we're trying to shove onto (mob/living/carbon/shover, mob/living/carbon/target) -#define COMSIG_CARBON_DISARM_PRESHOVE "carbon_disarm_preshove" - #define COMSIG_CARBON_ACT_SOLID (1<<0) //Tells disarm code to act as if the mob was shoved into something solid, even we we're not -///When a carbon mob is disarmed, this is sent to the turf we're trying to shove onto (mob/living/carbon/shover, mob/living/carbon/target, shove_blocked) -#define COMSIG_CARBON_DISARM_COLLIDE "carbon_disarm_collision" - #define COMSIG_CARBON_SHOVE_HANDLED (1<<0) - ///When a carbon slips. Called on /turf/open/handle_slip() #define COMSIG_ON_CARBON_SLIP "carbon_slip" // /mob/living/carbon physiology signals @@ -125,8 +118,6 @@ ///Applied preferences to a human #define COMSIG_HUMAN_PREFS_APPLIED "human_prefs_applied" -///Hit by successful disarm attack (mob/living/carbon/human/attacker,zone_targeted) -#define COMSIG_HUMAN_DISARM_HIT "human_disarm_hit" ///Whenever EquipRanked is called, called after job is set #define COMSIG_JOB_RECEIVED "job_received" ///from /mob/living/carbon/human/proc/set_coretemperature(): (oldvalue, newvalue) diff --git a/code/__DEFINES/dcs/signals/signals_mob/signals_mob_living.dm b/code/__DEFINES/dcs/signals/signals_mob/signals_mob_living.dm index b1838793e98..533ad2e1ae8 100644 --- a/code/__DEFINES/dcs/signals/signals_mob/signals_mob_living.dm +++ b/code/__DEFINES/dcs/signals/signals_mob/signals_mob_living.dm @@ -12,8 +12,6 @@ #define COMSIG_ORGAN_BEING_REPLACED "organ_being_replaced" /// Called when an organ gets surgically removed (mob/living/user, mob/living/carbon/old_owner, target_zone, obj/item/tool) #define COMSIG_ORGAN_SURGICALLY_REMOVED "organ_surgically_removed" -/// Called when using the *wag emote -#define COMSIG_ORGAN_WAG_TAIL "wag_tail" ///from base of mob/update_transform() #define COMSIG_LIVING_POST_UPDATE_TRANSFORM "living_post_update_transform" @@ -228,6 +226,15 @@ #define COMSIG_LIVING_CHECK_BLOCK "living_check_block" #define SUCCESSFUL_BLOCK (1<<0) +///Hit by successful disarm attack (mob/living/attacker, zone_targeted, item/weapon) +#define COMSIG_LIVING_DISARM_HIT "living_disarm_hit" +///Before a living mob is shoved, sent to the turf we're trying to shove onto (mob/living/shover, mob/living/target) +#define COMSIG_LIVING_DISARM_PRESHOVE "living_disarm_preshove" + #define COMSIG_LIVING_ACT_SOLID (1<<0) //Tells disarm code to act as if the mob was shoved into something solid, even we we're not +///When a living mob is disarmed, this is sent to the turf we're trying to shove onto (mob/living/shover, mob/living/target, shove_blocked) +#define COMSIG_LIVING_DISARM_COLLIDE "living_disarm_collision" + #define COMSIG_LIVING_SHOVE_HANDLED (1<<0) + /// Sent on a mob from /datum/component/mob_chain when component is attached with it as the "front" : (mob/living/basic/tail) #define COMSIG_MOB_GAINED_CHAIN_TAIL "living_gained_chain_tail" /// Sent on a mob from /datum/component/mob_chain when component is detached from it as the "front" : (mob/living/basic/tail) @@ -240,5 +247,9 @@ /// Sent from a mob to their loc when starting to remove cuffs on itself #define COMSIG_MOB_REMOVING_CUFFS "living_removing_cuffs" -/// Sent as a reply to above from any atom that wishs to stop self-cuff removal -#define COMSIG_MOB_BLOCK_CUFF_REMOVAL (1<<0) + /// Sent as a reply to above from any atom that wishs to stop self-cuff removal + #define COMSIG_MOB_BLOCK_CUFF_REMOVAL (1<<0) + +/// Sent to a mob grabbing another mob: (mob/living/grabbing) +#define COMSIG_LIVING_GRAB "living_grab" + // Return COMPONENT_CANCEL_ATTACK_CHAIN / COMPONENT_SKIP_ATTACK_CHAIN to stop the grab diff --git a/code/__DEFINES/dcs/signals/signals_mob/signals_mob_main.dm b/code/__DEFINES/dcs/signals/signals_mob/signals_mob_main.dm index 2023493ac95..cd1c636c283 100644 --- a/code/__DEFINES/dcs/signals/signals_mob/signals_mob_main.dm +++ b/code/__DEFINES/dcs/signals/signals_mob/signals_mob_main.dm @@ -70,6 +70,8 @@ ///from mind/transfer_to. Sent to the receiving mob. #define COMSIG_MOB_MIND_TRANSFERRED_INTO "mob_mind_transferred_into" +///from mind/transfer_from. Sent to the mob the mind is being transferred out of. +#define COMSIG_MOB_MIND_TRANSFERRED_OUT_OF "mob_mind_transferred_out_of" /// From /mob/proc/ghostize() Called when a mob sucessfully ghosts #define COMSIG_MOB_GHOSTIZED "mob_ghostized" @@ -238,3 +240,9 @@ #define COMPONENT_BLOCK_MOB_CHANGE (1<<0) /// from /mob/proc/change_mob_type_unchecked() : () #define COMSIG_MOB_CHANGED_TYPE "mob_changed_type" + +/// from /mob/proc/slip(): (knockdown_amonut, obj/slipped_on, lube_flags [mobs.dm], paralyze, force_drop) +#define COMSIG_MOB_SLIPPED "mob_slipped" + +/// from /mob/proc/key_down(): (key, client/client, full_key) +#define COMSIG_MOB_KEYDOWN "mob_key_down" diff --git a/code/__DEFINES/dcs/signals/signals_modular_computer.dm b/code/__DEFINES/dcs/signals/signals_modular_computer.dm index 950262a5fe1..dd325e41984 100644 --- a/code/__DEFINES/dcs/signals/signals_modular_computer.dm +++ b/code/__DEFINES/dcs/signals/signals_modular_computer.dm @@ -1,5 +1,10 @@ // Various modular computer signals. +/// From /obj/item/modular_computer/proc/turn_on: (user) +#define COMSIG_MODULAR_COMPUTER_TURNED_ON "comsig_modular_computer_turned_on" +/// From /obj/item/modular_computer/proc/shutdown_computer: (loud) +#define COMSIG_MODULAR_COMPUTER_SHUT_DOWN "comsig_modular_computer_shut_down" + /// From /obj/item/modular_computer/proc/store_file: (datum/computer_file/file_storing) #define COMSIG_MODULAR_COMPUTER_FILE_STORE "comsig_modular_computer_file_store" /// From /obj/item/modular_computer/proc/remove_file: (datum/computer_file/file_removing) @@ -9,7 +14,36 @@ /// From /obj/item/modular_computer/proc/store_file: () #define COMSIG_COMPUTER_FILE_DELETE "comsig_computer_file_delete" +/// From /obj/item/modular_computer/proc/InsertID: (inserting_id, user) +#define COMSIG_MODULAR_COMPUTER_INSERTED_ID "comsig_computer_inserted_id" + +/// From /datum/computer_file/program/on_start: (user) +#define COMSIG_COMPUTER_PROGRAM_START "computer_program_start" + +/// From /datum/computer_file/program/kill_program: (user) +#define COMSIG_COMPUTER_PROGRAM_KILL "computer_program_kill" + +/// From /datum/computer_file/program/nt_pay/make_payment: (payment_result) +#define COMSIG_MODULAR_COMPUTER_NT_PAY_RESULT "comsig_modular_computer_nt_pay_result" + +/// From /datum/computer_file/program/nt_pay/make_payment: (spookiness, manual) +#define COMSIG_MODULAR_COMPUTER_SPECTRE_SCAN "comsig_modular_computer_spectre_scan" + +/// From /datum/computer_file/program/radar/trackable: (atom/signal, turf/signal_turf, turf/computer_turf) +#define COMSIG_MODULAR_COMPUTER_RADAR_TRACKABLE "comsig_modular_computer_radar_trackable" + #define COMPONENT_RADAR_TRACK_ANYWAY (1<<0) + #define COMPONENT_RADAR_DONT_TRACK (1<<1) +/// From /datum/computer_file/program/radar/find_atom: (list/atom_container) +#define COMSIG_MODULAR_COMPUTER_RADAR_FIND_ATOM "comsig_modular_computer_radar_find_atom" +/// From /datum/computer_file/program/radar/ui_act, when action is "selecttarget": (selected_ref) +#define COMSIG_MODULAR_COMPUTER_RADAR_SELECTED "comsig_modular_computer_radar_selected" + /// from /obj/item/modular_computer/imprint_id(): (name, job) #define COMSIG_MODULAR_PDA_IMPRINT_UPDATED "comsig_modular_pda_imprint_updated" /// from /obj/item/modular_computer/reset_id(): () #define COMSIG_MODULAR_PDA_IMPRINT_RESET "comsig_modular_pda_imprint_reset" + +/// From /datum/computer_file/program/messenger/receive_message, sent to the computer: (signal/subspace/messaging/tablet_message/signal, sender_job, sender_name) +#define COMSIG_MODULAR_PDA_MESSAGE_RECEIVED "comsig_modular_pda_message_received" +/// From /datum/computer_file/program/messenger/send_message_signal, sent to the computer: (atom/origin, datum/signal/subspace/messaging/tablet_message/signal) +#define COMSIG_MODULAR_PDA_MESSAGE_SENT "comsig_modular_pda_message_sent" diff --git a/code/__DEFINES/dcs/signals/signals_object.dm b/code/__DEFINES/dcs/signals/signals_object.dm index b3149b82719..442309289f0 100644 --- a/code/__DEFINES/dcs/signals/signals_object.dm +++ b/code/__DEFINES/dcs/signals/signals_object.dm @@ -138,8 +138,10 @@ #define COMSIG_ITEM_PICKUP "item_pickup" ///from base of obj/item/on_outfit_equip(): (mob/equipper, visuals_only, slot) #define COMSIG_ITEM_EQUIPPED_AS_OUTFIT "item_equip_as_outfit" -///from base of datum/storage/attempt_insert(): () +///from base of datum/storage/handle_enter(): (datum/storage/storage) #define COMSIG_ITEM_STORED "item_stored" +///from base of datum/storage/handle_exit(): (datum/storage/storage) +#define COMSIG_ITEM_UNSTORED "item_unstored" ///from base of obj/item/apply_fantasy_bonuses(): (bonus) #define COMSIG_ITEM_APPLY_FANTASY_BONUSES "item_apply_fantasy_bonuses" @@ -444,7 +446,7 @@ #define COMPONENT_SECONDARY_CONTINUE_ATTACK_CHAIN (1<<1) #define COMPONENT_SECONDARY_CALL_NORMAL_ATTACK_CHAIN (1<<2) /// From base of [/obj/item/proc/attack_secondary()]: (atom/target, mob/user, params) -#define COMSIG_ITEM_ATTACK_SECONDARY "item_pre_attack_secondary" +#define COMSIG_ITEM_ATTACK_SECONDARY "item_attack_secondary" ///from base of obj/item/afterattack(): (atom/target, mob/user, proximity_flag, click_parameters) #define COMSIG_ITEM_AFTERATTACK "item_afterattack" /// Flag for when /afterattack potentially acts on an item. @@ -462,9 +464,16 @@ /// from base of obj/item/failedEmbed() #define COMSIG_ITEM_FAILED_EMBED "item_failed_embed" +/// from base of datum/element/disarm_attack/secondary_attack(), used to prevent shoving: (victim, user, send_message) +#define COMSIG_ITEM_CAN_DISARM_ATTACK "item_pre_disarm_attack" + #define COMPONENT_BLOCK_ITEM_DISARM_ATTACK (1<<0) + ///from /obj/item/assembly/proc/pulsed(mob/pulser) #define COMSIG_ASSEMBLY_PULSED "assembly_pulsed" +///from /datum/computer_file/program/nt_pay/_pay(), sent to every physical card of a bank account: (computer, money_received) +#define COMSIG_ID_CARD_NTPAY_MONEY_RECEIVED "id_card_ntpay_money_received" + ///from base of /obj/item/mmi/set_brainmob(): (mob/living/brain/new_brainmob) #define COMSIG_MMI_SET_BRAINMOB "mmi_set_brainmob" diff --git a/code/__DEFINES/dcs/signals/signals_reagent.dm b/code/__DEFINES/dcs/signals/signals_reagent.dm index a73d59a234c..38d2ae92d9d 100644 --- a/code/__DEFINES/dcs/signals/signals_reagent.dm +++ b/code/__DEFINES/dcs/signals/signals_reagent.dm @@ -55,3 +55,7 @@ #define COMSIG_REAGENTS_EXPOSE_TURF "reagents_expose_turf" ///from base of [/datum/component/personal_crafting/proc/del_reqs]: () #define COMSIG_REAGENTS_CRAFTING_PING "reagents_crafting_ping" +/// sent when reagents are transfered from a cup, to something refillable (atom/transfer_to) +#define COMSIG_REAGENTS_CUP_TRANSFER_TO "reagents_cup_transfer_to" +/// sent when reagents are transfered from some reagent container, to a cup (atom/transfer_from) +#define COMSIG_REAGENTS_CUP_TRANSFER_FROM "reagents_cup_transfer_from" diff --git a/code/__DEFINES/dcs/signals/uplink.dm b/code/__DEFINES/dcs/signals/uplink.dm new file mode 100644 index 00000000000..1daa4f31270 --- /dev/null +++ b/code/__DEFINES/dcs/signals/uplink.dm @@ -0,0 +1,2 @@ +///Signal sent to a mob when they purchase an item from their uplink: (datum/uplink_handler/uplink_handler_source, atom/spawned_item, mob/user) +#define COMSIG_ON_UPLINK_PURCHASE "comsig_on_uplink_purchase" diff --git a/code/__DEFINES/devices.dm b/code/__DEFINES/devices.dm index cacda58a9ea..5e63d9bd6d3 100644 --- a/code/__DEFINES/devices.dm +++ b/code/__DEFINES/devices.dm @@ -13,3 +13,12 @@ #define INSPECTOR_TIME_MODE_SLOW 1 #define INSPECTOR_TIME_MODE_FAST 2 #define INSPECTOR_TIME_MODE_HONK 3 + +// Health scan modes +/// Healthscan prints health of the target +#define SCANNER_CONDENSED 0 +/// Healthscan prints health of each bodypart of the target in addition to broad health +#define SCANNER_VERBOSE 1 +/// Used to prevent health analyzers from switching modes when they shouldn't. +/// Functions the same as [SCANNER_CONDENSED] +#define SCANNER_NO_MODE -1 diff --git a/code/__DEFINES/do_afters.dm b/code/__DEFINES/do_afters.dm index dcedbbe010b..cba02d6cf67 100644 --- a/code/__DEFINES/do_afters.dm +++ b/code/__DEFINES/do_afters.dm @@ -7,3 +7,4 @@ #define DOAFTER_SOURCE_HEAL_TOUCH "doafter_heal_touch" #define DOAFTER_SOURCE_PLANTING_DEVICE "doafter_planting_device" #define DOAFTER_SOURCE_CHARGE_CRANKRECHARGE "doafter_charge_crank_recharge" +#define DOAFTER_SOURCE_REMOVING_HOOK "doafter_removing_hook" diff --git a/code/__DEFINES/economy.dm b/code/__DEFINES/economy.dm index 9d6841b56fd..93b0678581a 100644 --- a/code/__DEFINES/economy.dm +++ b/code/__DEFINES/economy.dm @@ -15,10 +15,7 @@ ///Paygrade for Heads of Staff. #define PAYCHECK_COMMAND 100 -//How many credits a player is charged if they print something from a departmental lathe they shouldn't have access to. -#define LATHE_TAX 10 -//How much POWER a borg's cell is taxed if they print something from a departmental lathe. -#define SILICON_LATHE_TAX 2000 + #define STATION_TARGET_BUFFER 25 diff --git a/code/__DEFINES/external_organs.dm b/code/__DEFINES/external_organs.dm index da8c4ddc272..07a329677fe 100644 --- a/code/__DEFINES/external_organs.dm +++ b/code/__DEFINES/external_organs.dm @@ -8,3 +8,7 @@ ///Tail wagging #define WAG_ABLE (1<<0) #define WAG_WAGGING (1<<1) + +/// Tail spine defines +#define SPINE_KEY_LIZARD "lizard" +#define SPINE_KEY_VOX "vox" // NOVA EDIT ADDITION diff --git a/code/__DEFINES/fish.dm b/code/__DEFINES/fish.dm index 89b7963d91d..24c3c963598 100644 --- a/code/__DEFINES/fish.dm +++ b/code/__DEFINES/fish.dm @@ -3,6 +3,7 @@ // Baseline fishing difficulty levels #define FISHING_DEFAULT_DIFFICULTY 15 +#define FISHING_EASY_DIFFICULTY 10 /// Difficulty modifier when bait is fish's favorite #define FAV_BAIT_DIFFICULTY_MOD -5 @@ -18,6 +19,11 @@ #define FISH_AI_ZIPPY "zippy" #define FISH_AI_SLOW "slow" +///Slot defines for the fishing rod and its equipment +#define ROD_SLOT_BAIT "bait" +#define ROD_SLOT_LINE "line" +#define ROD_SLOT_HOOK "hook" + #define ADDITIVE_FISHING_MOD "additive" #define MULTIPLICATIVE_FISHING_MOD "multiplicative" @@ -45,19 +51,25 @@ #define FISHING_LINE_REINFORCED (1 << 1) /// Much like FISHING_HOOK_ENSNARE but for the fishing line. #define FISHING_LINE_BOUNCY (1 << 2) +/// The sorta opposite of FISHING_LINE_BOUNCY. It makes it slower to gain completion and faster to lose it. +#define FISHING_LINE_STIFF (1 << 3) +///Skip the biting phase and go straight to the fishing phase. +#define FISHING_LINE_AUTOREEL (1 << 4) ///Keeps the bait from falling from gravity, instead allowing the player to move the bait down with right click. -#define FISHING_MINIGAME_RULE_BIDIRECTIONAL (1 << 2) +#define FISHING_MINIGAME_RULE_BIDIRECTIONAL (1 << 0) ///Prevents the player from losing the minigame when the completion reaches 0 -#define FISHING_MINIGAME_RULE_NO_ESCAPE (1 << 3) +#define FISHING_MINIGAME_RULE_NO_ESCAPE (1 << 1) ///Automatically kills the fish after a while, at the cost of killing it -#define FISHING_MINIGAME_RULE_KILL (1 << 4) +#define FISHING_MINIGAME_RULE_KILL (1 << 2) ///Prevents the fishing skill from having an effect on the minigame and experience from being awarded -#define FISHING_MINIGAME_RULE_NO_EXP (1 << 5) +#define FISHING_MINIGAME_RULE_NO_EXP (1 << 3) ///If enabled, the minigame will occasionally screw around and invert the velocity of the bait -#define FISHING_MINIGAME_RULE_ANTIGRAV (1 << 6) +#define FISHING_MINIGAME_RULE_ANTIGRAV (1 << 4) ///Will filp the minigame hud for the duration of the effect -#define FISHING_MINIGAME_RULE_FLIP (1 << 7) +#define FISHING_MINIGAME_RULE_FLIP (1 << 5) +///Skip the biting phase and go straight to the minigame, avoiding the penalty for having slow reflexes. +#define FISHING_MINIGAME_AUTOREEL (1 << 6) ///all the effects that are active and will last for a few seconds before triggering a cooldown #define FISHING_MINIGAME_ACTIVE_EFFECTS (FISHING_MINIGAME_RULE_ANTIGRAV|FISHING_MINIGAME_RULE_FLIP) @@ -90,6 +102,7 @@ #define AQUARIUM_LAYER_MODE_BOTTOM "bottom" #define AQUARIUM_LAYER_MODE_TOP "top" #define AQUARIUM_LAYER_MODE_AUTO "auto" +#define AQUARIUM_LAYER_MODE_BEHIND_GLASS "behind_glass" #define FISH_ALIVE "alive" #define FISH_DEAD "dead" diff --git a/code/__DEFINES/gradient.dm b/code/__DEFINES/gradient.dm index 6a920e322b0..573a339880b 100644 --- a/code/__DEFINES/gradient.dm +++ b/code/__DEFINES/gradient.dm @@ -1,3 +1,4 @@ // spacemandmm doesn't really implement gradient() right, so let's just handle that here yeah? +#define rgb_gradient(index, args...) UNLINT(gradient(args, index)) #define hsl_gradient(index, args...) UNLINT(gradient(args, space = COLORSPACE_HSL, index)) #define hsv_gradient(index, args...) UNLINT(gradient(args, space = COLORSPACE_HSV, index)) diff --git a/code/__DEFINES/inventory.dm b/code/__DEFINES/inventory.dm index f77bbda463e..23c7428625d 100644 --- a/code/__DEFINES/inventory.dm +++ b/code/__DEFINES/inventory.dm @@ -7,7 +7,7 @@ #define WEIGHT_CLASS_SMALL 2 /// Standard backpacks can carry tiny, small & normal items, (e.g. fire extinguisher, stun baton, gas mask, metal sheets) #define WEIGHT_CLASS_NORMAL 3 -/// Items that can be weilded or equipped but not stored in an inventory, (e.g. defibrillator, backpack, space suits) +/// Items that can be wielded or equipped but not stored in an inventory, (e.g. defibrillator, backpack, space suits) #define WEIGHT_CLASS_BULKY 4 /// Usually represents objects that require two hands to operate, (e.g. shotgun, two-handed melee weapons) #define WEIGHT_CLASS_HUGE 5 @@ -210,7 +210,6 @@ GLOBAL_LIST_INIT(detective_vest_allowed, list( /obj/item/storage/belt/holster/nukie, /obj/item/storage/belt/holster/energy, /obj/item/gun/ballistic/shotgun/automatic/combat/compact, - /obj/item/gun/microfusion, //NOVA EDIT ADDITION )) GLOBAL_LIST_INIT(security_vest_allowed, list( @@ -228,7 +227,6 @@ GLOBAL_LIST_INIT(security_vest_allowed, list( /obj/item/storage/belt/holster/energy, /obj/item/gun/ballistic/shotgun/automatic/combat/compact, /obj/item/pen/red/security, - /obj/item/gun/microfusion, //NOVA EDIT ADDITION )) GLOBAL_LIST_INIT(security_wintercoat_allowed, list( @@ -241,7 +239,6 @@ GLOBAL_LIST_INIT(security_wintercoat_allowed, list( /obj/item/storage/belt/holster/nukie, /obj/item/storage/belt/holster/energy, /obj/item/gun/ballistic/shotgun/automatic/combat/compact, - /obj/item/gun/microfusion, //NOVA EDIT ADDITION )) //Allowed list for all chaplain suits (except the honkmother robe) diff --git a/code/__DEFINES/jobs.dm b/code/__DEFINES/jobs.dm index 4b625097d23..46d3f1a83e6 100644 --- a/code/__DEFINES/jobs.dm +++ b/code/__DEFINES/jobs.dm @@ -48,6 +48,7 @@ #define JOB_RESEARCH_DIRECTOR "Research Director" #define JOB_CHIEF_ENGINEER "Chief Engineer" #define JOB_CHIEF_MEDICAL_OFFICER "Chief Medical Officer" +#define JOB_BRIDGE_ASSISTANT "Bridge Assistant" //Silicon #define JOB_AI "AI" #define JOB_CYBORG "Cyborg" @@ -76,10 +77,11 @@ #define JOB_SCIENTIST "Scientist" #define JOB_ROBOTICIST "Roboticist" #define JOB_GENETICIST "Geneticist" -#define JOB_SCIENCE_GUARD "Science Guard" +#define JOB_SCIENCE_GUARD "Science Guard" // NOVA EDIT ADDITION //Supply #define JOB_QUARTERMASTER "Quartermaster" #define JOB_CARGO_TECHNICIAN "Cargo Technician" +#define JOB_CARGO_GORILLA "Cargo Gorilla" #define JOB_SHAFT_MINER "Shaft Miner" #define JOB_BITRUNNER "Bitrunner" #define JOB_CUSTOMS_AGENT "Customs Agent" // NOVA EDIT ADDITION @@ -145,50 +147,52 @@ #define JOB_DISPLAY_ORDER_ASSISTANT 1 #define JOB_DISPLAY_ORDER_CAPTAIN 2 #define JOB_DISPLAY_ORDER_HEAD_OF_PERSONNEL 3 -#define JOB_DISPLAY_ORDER_BARTENDER 4 -#define JOB_DISPLAY_ORDER_BOTANIST 5 -#define JOB_DISPLAY_ORDER_COOK 6 -#define JOB_DISPLAY_ORDER_JANITOR 7 -#define JOB_DISPLAY_ORDER_CLOWN 8 -#define JOB_DISPLAY_ORDER_MIME 9 -#define JOB_DISPLAY_ORDER_CURATOR 10 -#define JOB_DISPLAY_ORDER_LAWYER 11 -#define JOB_DISPLAY_ORDER_CHAPLAIN 12 -#define JOB_DISPLAY_ORDER_PSYCHOLOGIST 13 -#define JOB_DISPLAY_ORDER_AI 14 -#define JOB_DISPLAY_ORDER_CYBORG 15 -#define JOB_DISPLAY_ORDER_CHIEF_ENGINEER 16 -#define JOB_DISPLAY_ORDER_STATION_ENGINEER 17 -#define JOB_DISPLAY_ORDER_ATMOSPHERIC_TECHNICIAN 18 -#define JOB_DISPLAY_ORDER_QUARTERMASTER 19 -#define JOB_DISPLAY_ORDER_CARGO_TECHNICIAN 20 -#define JOB_DISPLAY_ORDER_SHAFT_MINER 21 -#define JOB_DISPLAY_ORDER_BITRUNNER 22 -#define JOB_DISPLAY_ORDER_CHIEF_MEDICAL_OFFICER 23 -#define JOB_DISPLAY_ORDER_MEDICAL_DOCTOR 24 -#define JOB_DISPLAY_ORDER_PARAMEDIC 25 -#define JOB_DISPLAY_ORDER_CHEMIST 26 -#define JOB_DISPLAY_ORDER_VIROLOGIST 27 -#define JOB_DISPLAY_ORDER_CORONER 28 -#define JOB_DISPLAY_ORDER_RESEARCH_DIRECTOR 29 -#define JOB_DISPLAY_ORDER_SCIENTIST 30 -#define JOB_DISPLAY_ORDER_ROBOTICIST 31 -#define JOB_DISPLAY_ORDER_GENETICIST 32 -#define JOB_DISPLAY_ORDER_HEAD_OF_SECURITY 33 -#define JOB_DISPLAY_ORDER_WARDEN 34 -#define JOB_DISPLAY_ORDER_DETECTIVE 35 -#define JOB_DISPLAY_ORDER_SECURITY_OFFICER 36 -#define JOB_DISPLAY_ORDER_PRISONER 37 -#define JOB_DISPLAY_ORDER_SECURITY_MEDIC 38 //NOVA EDIT ADDITON -#define JOB_DISPLAY_ORDER_CORRECTIONS_OFFICER 39 //NOVA EDIT ADDITON -#define JOB_DISPLAY_ORDER_NANOTRASEN_CONSULTANT 40 //NOVA EDIT ADDITON -#define JOB_DISPLAY_ORDER_BLUESHIELD 41 //NOVA EDIT ADDITON -#define JOB_DISPLAY_ORDER_ORDERLY 42 //NOVA EDIT ADDITION -#define JOB_DISPLAY_ORDER_SCIENCE_GUARD 43 //NOVA EDIT ADDITION -#define JOB_DISPLAY_ORDER_BOUNCER 44 //NOVA EDIT ADDITION -#define JOB_DISPLAY_ORDER_ENGINEER_GUARD 45 //NOVA EDIT ADDITION -#define JOB_DISPLAY_ORDER_CUSTOMS_AGENT 46 //NOVA EDIT ADDITION -#define JOB_DISPLAY_ORDER_EXP_CORPS 47 //NOVA EDIT ADDITON +#define JOB_DISPLAY_ORDER_BRIDGE_ASSISTANT 4 +#define JOB_DISPLAY_ORDER_BARTENDER 5 +#define JOB_DISPLAY_ORDER_BOTANIST 6 +#define JOB_DISPLAY_ORDER_COOK 7 +#define JOB_DISPLAY_ORDER_JANITOR 8 +#define JOB_DISPLAY_ORDER_CLOWN 9 +#define JOB_DISPLAY_ORDER_MIME 10 +#define JOB_DISPLAY_ORDER_CURATOR 11 +#define JOB_DISPLAY_ORDER_LAWYER 12 +#define JOB_DISPLAY_ORDER_CHAPLAIN 13 +#define JOB_DISPLAY_ORDER_PSYCHOLOGIST 14 +#define JOB_DISPLAY_ORDER_AI 15 +#define JOB_DISPLAY_ORDER_CYBORG 16 +#define JOB_DISPLAY_ORDER_CHIEF_ENGINEER 17 +#define JOB_DISPLAY_ORDER_STATION_ENGINEER 18 +#define JOB_DISPLAY_ORDER_ATMOSPHERIC_TECHNICIAN 19 +#define JOB_DISPLAY_ORDER_QUARTERMASTER 20 +#define JOB_DISPLAY_ORDER_CARGO_TECHNICIAN 21 +#define JOB_DISPLAY_ORDER_SHAFT_MINER 22 +#define JOB_DISPLAY_ORDER_BITRUNNER 23 +#define JOB_DISPLAY_ORDER_CARGO_GORILLA 24 +#define JOB_DISPLAY_ORDER_CHIEF_MEDICAL_OFFICER 25 +#define JOB_DISPLAY_ORDER_MEDICAL_DOCTOR 26 +#define JOB_DISPLAY_ORDER_PARAMEDIC 27 +#define JOB_DISPLAY_ORDER_CHEMIST 28 +#define JOB_DISPLAY_ORDER_VIROLOGIST 29 +#define JOB_DISPLAY_ORDER_CORONER 30 +#define JOB_DISPLAY_ORDER_RESEARCH_DIRECTOR 31 +#define JOB_DISPLAY_ORDER_SCIENTIST 32 +#define JOB_DISPLAY_ORDER_ROBOTICIST 33 +#define JOB_DISPLAY_ORDER_GENETICIST 34 +#define JOB_DISPLAY_ORDER_HEAD_OF_SECURITY 35 +#define JOB_DISPLAY_ORDER_WARDEN 36 +#define JOB_DISPLAY_ORDER_DETECTIVE 37 +#define JOB_DISPLAY_ORDER_SECURITY_OFFICER 38 +#define JOB_DISPLAY_ORDER_PRISONER 39 +#define JOB_DISPLAY_ORDER_SECURITY_MEDIC 40 //NOVA EDIT ADDITON +#define JOB_DISPLAY_ORDER_CORRECTIONS_OFFICER 41 //NOVA EDIT ADDITON +#define JOB_DISPLAY_ORDER_NANOTRASEN_CONSULTANT 42 //NOVA EDIT ADDITON +#define JOB_DISPLAY_ORDER_BLUESHIELD 43 //NOVA EDIT ADDITON +#define JOB_DISPLAY_ORDER_ORDERLY 44 //NOVA EDIT ADDITION +#define JOB_DISPLAY_ORDER_SCIENCE_GUARD 45 //NOVA EDIT ADDITION +#define JOB_DISPLAY_ORDER_BOUNCER 46 //NOVA EDIT ADDITION +#define JOB_DISPLAY_ORDER_ENGINEER_GUARD 47 //NOVA EDIT ADDITION +#define JOB_DISPLAY_ORDER_CUSTOMS_AGENT 48 //NOVA EDIT ADDITION +#define JOB_DISPLAY_ORDER_EXP_CORPS 49 //NOVA EDIT ADDITON #define DEPARTMENT_UNASSIGNED "No Department" diff --git a/code/__DEFINES/keybinding.dm b/code/__DEFINES/keybinding.dm index 285b7e6ea58..2a2a092c6d0 100644 --- a/code/__DEFINES/keybinding.dm +++ b/code/__DEFINES/keybinding.dm @@ -66,6 +66,7 @@ #define COMSIG_KB_MOB_ACTIVATEINHAND_DOWN "keybinding_mob_activateinhand_down" #define COMSIG_KB_MOB_DROPITEM_DOWN "keybinding_mob_dropitem_down" #define COMSIG_KB_MOB_TARGETCYCLEHEAD_DOWN "keybinding_mob_targetcyclehead_down" +#define COMSIG_KB_MOB_TARGETHEAD_DOWN "keybinding_mob_targethead_down" #define COMSIG_KB_MOB_TARGETEYES_DOWN "keybinding_mob_targeteyes_down" #define COMSIG_KB_MOB_TARGETMOUTH_DOWN "keybinding_mob_targetmouth_down" #define COMSIG_KB_MOB_TARGETRIGHTARM_DOWN "keybinding_mob_targetrightarm_down" diff --git a/code/__DEFINES/layers.dm b/code/__DEFINES/layers.dm index 1ba6879005b..0a9ea44aaa8 100644 --- a/code/__DEFINES/layers.dm +++ b/code/__DEFINES/layers.dm @@ -197,7 +197,7 @@ #define MOB_SHIELD_LAYER 4.01 #define MOB_ABOVE_PIGGYBACK_LAYER 4.06 #define MOB_UPPER_LAYER 4.07 -#define HITSCAN_PROJECTILE_LAYER 4.09 //above all mob but still hidden by FoV +#define HITSCAN_PROJECTILE_LAYER 4.09 #define ABOVE_MOB_LAYER 4.1 #define WALL_OBJ_LAYER 4.25 #define TRAM_SIGNAL_LAYER 4.26 diff --git a/code/__DEFINES/lighting.dm b/code/__DEFINES/lighting.dm index 576164bd136..ca03017686f 100644 --- a/code/__DEFINES/lighting.dm +++ b/code/__DEFINES/lighting.dm @@ -1,17 +1,17 @@ /// Object doesn't use any of the light systems. Should be changed to add a light source to the object. #define NO_LIGHT_SUPPORT 0 /// Light made with the lighting datums, applying a matrix. -#define STATIC_LIGHT 1 +#define COMPLEX_LIGHT 1 /// Light made by masking the lighting darkness plane. -#define MOVABLE_LIGHT 2 +#define OVERLAY_LIGHT 2 /// Light made by masking the lighting darkness plane, and is directional. -#define MOVABLE_LIGHT_DIRECTIONAL 3 +#define OVERLAY_LIGHT_DIRECTIONAL 3 ///Light made by masking the lighting darkness plane, and is a directionally focused beam. -#define MOVABLE_LIGHT_BEAM 4 +#define OVERLAY_LIGHT_BEAM 4 /// Nonesensical value for light color, used for null checks. #define NONSENSICAL_VALUE -99999 -/// Is a movable light source attached to another movable (its loc), meaning that the lighting component should go one level deeper. +/// Is our overlay light source attached to another movable (its loc), meaning that the lighting component should go one level deeper. #define LIGHT_ATTACHED (1<<0) /// Freezes a light in its current state, blocking any attempts at modification #define LIGHT_FROZEN (1<<1) @@ -102,23 +102,14 @@ GLOBAL_LIST_INIT(em_block_color, EM_BLOCK_COLOR) /// A globaly cached version of [EM_MASK_MATRIX] for quick access. GLOBAL_LIST_INIT(em_mask_matrix, EM_MASK_MATRIX) -/// Returns the red part of a #RRGGBB hex sequence as number -#define GETREDPART(hexa) hex2num(copytext(hexa, 2, 4)) - -/// Returns the green part of a #RRGGBB hex sequence as number -#define GETGREENPART(hexa) hex2num(copytext(hexa, 4, 6)) - -/// Returns the blue part of a #RRGGBB hex sequence as number -#define GETBLUEPART(hexa) hex2num(copytext(hexa, 6, 8)) - /// Parse the hexadecimal color into lumcounts of each perspective. #define PARSE_LIGHT_COLOR(source) \ do { \ if (source.light_color != COLOR_WHITE) { \ - var/__light_color = source.light_color; \ - source.lum_r = GETREDPART(__light_color) / 255; \ - source.lum_g = GETGREENPART(__light_color) / 255; \ - source.lum_b = GETBLUEPART(__light_color) / 255; \ + var/list/color_parts = rgb2num(source.light_color); \ + source.lum_r = color_parts[1] / 255; \ + source.lum_g = color_parts[2] / 255; \ + source.lum_b = color_parts[3] / 255; \ } else { \ source.lum_r = 1; \ source.lum_g = 1; \ diff --git a/code/__DEFINES/mecha.dm b/code/__DEFINES/mecha.dm index 0f900f72ee4..33c8ca373a7 100644 --- a/code/__DEFINES/mecha.dm +++ b/code/__DEFINES/mecha.dm @@ -46,7 +46,9 @@ #define MECHA_SNOWFLAKE_ID_AIR_TANK "air_tank_snowflake" #define MECHA_SNOWFLAKE_ID_WEAPON_BALLISTIC "ballistic_weapon_snowflake" #define MECHA_SNOWFLAKE_ID_GENERATOR "generator_snowflake" +#define MECHA_SNOWFLAKE_ID_ORE_SCANNER "orescanner_snowflake" #define MECHA_SNOWFLAKE_ID_CLAW "lawclaw_snowflake" +#define MECHA_SNOWFLAKE_ID_RCD "rcd_snowflake" #define MECHA_AMMO_INCENDIARY "Incendiary bullet" #define MECHA_AMMO_BUCKSHOT "Buckshot shell" diff --git a/code/__DEFINES/melee.dm b/code/__DEFINES/melee.dm index df7320f5085..64fdfd1889e 100644 --- a/code/__DEFINES/melee.dm +++ b/code/__DEFINES/melee.dm @@ -2,7 +2,6 @@ #define MARTIALART_BOXING "boxing" #define MARTIALART_CQC "CQC" -#define MARTIALART_HUGS_OF_THE_GONDOLA "hugs of the gondola" #define MARTIALART_KRAVMAGA "krav maga" #define MARTIALART_MUSHPUNCH "mushroom punch" #define MARTIALART_PLASMAFIST "plasma fist" diff --git a/code/__DEFINES/mining.dm b/code/__DEFINES/mining.dm new file mode 100644 index 00000000000..11d150a453d --- /dev/null +++ b/code/__DEFINES/mining.dm @@ -0,0 +1,49 @@ +// Defines related to the mining rework circa June 2023 +/// Durability of a large size boulder from a large size vent. +#define BOULDER_SIZE_LARGE 15 +/// Durability of a medium size boulder from a medium size vent. +#define BOULDER_SIZE_MEDIUM 10 +/// Durability of a small size boulder from a small size vent. +#define BOULDER_SIZE_SMALL 5 +/// How many boulders can a single ore vent have on it's tile before it stops producing more? +#define MAX_BOULDERS_PER_VENT 10 +/// Time multiplier +#define INATE_BOULDER_SPEED_MULTIPLIER 3 +// Vent type +/// Large vents, giving large boulders. +#define LARGE_VENT_TYPE "large" +/// Medium vents, giving medium boulders. +#define MEDIUM_VENT_TYPE "medium" +/// Small vents, giving small boulders. +#define SMALL_VENT_TYPE "small" + +/// Proximity to a vent that a wall ore needs to be for 5 ore to be mined. +#define VENT_PROX_VERY_HIGH 3 +/// Proximity to a vent that a wall ore needs to be for 4 ore to be mined. +#define VENT_PROX_HIGH 6 +/// Proximity to a vent that a wall ore needs to be for 3 ore to be mined. +#define VENT_PROX_MEDIUM 15 +/// Proximity to a vent that a wall ore needs to be for 2 ore to be mined. +#define VENT_PROX_LOW 32 +/// Proximity to a vent that a wall ore needs to be for 1 ore to be mined. +#define VENT_PROX_FAR 64 + +/// The chance of ore spawning in a wall that is VENT_PROX_VERY_HIGH tiles to a vent. +#define VENT_CHANCE_VERY_HIGH 75 +/// The chance of ore spawning in a wall that is VENT_PROX_HIGH tiles to a vent. +#define VENT_CHANCE_HIGH 18 +/// The chance of ore spawning in a wall that is VENT_PROX_MEDIUM tiles to a vent. +#define VENT_CHANCE_MEDIUM 9 +/// The chance of ore spawning in a wall that is VENT_PROX_LOW tiles to a vent. +#define VENT_CHANCE_LOW 5 +/// The chance of ore spawning in a wall that is VENT_PROX_FAR tiles to a vent. +#define VENT_CHANCE_FAR 1 + +/// The number of points a miner gets for discovering a vent, multiplied by BOULDER_SIZE when completing a wave defense minus the discovery bonus. +#define MINER_POINT_MULTIPLIER 100 +/// The multiplier that gets applied for automatically generated mining points. +#define MINING_POINT_MACHINE_MULTIPLIER 0.8 + +//String defines to use with CaveGenerator presets for what ore breakdown to use. +#define OREGEN_PRESET_LAVALAND "lavaland" +#define OREGEN_PRESET_TRIPLE_Z "triple_z" diff --git a/code/__DEFINES/mobs.dm b/code/__DEFINES/mobs.dm index 4c2eea59834..87450bf333e 100644 --- a/code/__DEFINES/mobs.dm +++ b/code/__DEFINES/mobs.dm @@ -504,9 +504,6 @@ #define ROBOTIC_BRUTE_EXAMINE_TEXT "denting" #define ROBOTIC_BURN_EXAMINE_TEXT "charring" -// If a mob has a higher threshold than this, the icon shown will be increased to the big fire icon. -#define MOB_BIG_FIRE_STACK_THRESHOLD 3 - #define GRAB_PIXEL_SHIFT_PASSIVE 6 #define GRAB_PIXEL_SHIFT_AGGRESSIVE 12 #define GRAB_PIXEL_SHIFT_NECK 16 @@ -785,8 +782,8 @@ GLOBAL_LIST_INIT(human_heights_to_offsets, list( #define WOUND_LAYER 3 /// Blood cult ascended halo layer, because there's currently no better solution for adding/removing #define HALO_LAYER 2 -/// Fire layer when you're on fire -#define FIRE_LAYER 1 +/// The highest most layer for mob overlays. Unused +#define HIGHEST_LAYER 1 #define UPPER_BODY "upper body" #define LOWER_BODY "lower body" @@ -827,7 +824,7 @@ GLOBAL_LIST_INIT(layers_to_offset, list( // BODY_BEHIND_LAYER (external organs like wings) // BODY_FRONT_LAYER (external organs like wings) // DAMAGE_LAYER (full body) - // FIRE_LAYER (full body) + // HIGHEST_LAYER (full body) // UNIFORM_LAYER (full body) // WOUND_LAYER (full body) )) diff --git a/code/__DEFINES/modular_computer.dm b/code/__DEFINES/modular_computer.dm index a316c1443b1..a8e5c38ffc6 100644 --- a/code/__DEFINES/modular_computer.dm +++ b/code/__DEFINES/modular_computer.dm @@ -28,6 +28,8 @@ #define PROGRAM_HEADER (1<<4) ///The program will run despite the ModPC not having any power in it. #define PROGRAM_RUNS_WITHOUT_POWER (1<<5) +///The circuit ports of this program can be triggered even if the program is not open +#define PROGRAM_CIRCUITS_RUN_WHEN_CLOSED (1<<6) //Program categories #define PROGRAM_CATEGORY_DEVICE "Device Tools" @@ -38,6 +40,9 @@ #define PROGRAM_CATEGORY_SUPPLY "Supply" #define PROGRAM_CATEGORY_SCIENCE "Science" +///The default amount a program should take in cell use. +#define PROGRAM_BASIC_CELL_USE 15 + ///This app grants a minor protection against being PDA bombed if installed. ///(can sometimes prevent it from being sent, while wasting a PDA bomb from the sender). #define DETOMATIX_RESIST_MINOR 1 diff --git a/code/__DEFINES/obj_flags.dm b/code/__DEFINES/obj_flags.dm index 9427328fcc2..8ace303b843 100644 --- a/code/__DEFINES/obj_flags.dm +++ b/code/__DEFINES/obj_flags.dm @@ -68,28 +68,26 @@ #define VOICEBOX_TOGGLABLE (1<<6) /// The voicebox is currently turned off. #define VOICEBOX_DISABLED (1<<7) -/// Prevents shovies against a dense object from knocking the wearer down. -#define BLOCKS_SHOVE_KNOCKDOWN (1<<8) /// Prevents knock-off from things like hat-throwing. -#define SNUG_FIT (1<<9) +#define SNUG_FIT (1<<8) /// Hats with negative effects when worn (i.e the tinfoil hat). -#define ANTI_TINFOIL_MANEUVER (1<<10) +#define ANTI_TINFOIL_MANEUVER (1<<9) /// Clothes that cause a larger notification when placed on a person. -#define DANGEROUS_OBJECT (1<<11) +#define DANGEROUS_OBJECT (1<<10) /// Clothes that use large icons, for applying the proper overlays like blood -#define LARGE_WORN_ICON (1<<12) +#define LARGE_WORN_ICON (1<<11) /// Clothes that block speech (i.e the muzzle). Can be applied to any clothing piece. -#define BLOCKS_SPEECH (1<<13) +#define BLOCKS_SPEECH (1<<12) /// prevents from placing on plasmaman helmet or modsuit hat holder -#define STACKABLE_HELMET_EXEMPT (1<<14) +#define STACKABLE_HELMET_EXEMPT (1<<13) /// Prevents plasmamen from igniting when wearing this -#define PLASMAMAN_PREVENT_IGNITION (1<<15) +#define PLASMAMAN_PREVENT_IGNITION (1<<14) /// Usable as casting clothes by wizards (matters for suits, glasses and headwear) -#define CASTING_CLOTHES (1<<16) +#define CASTING_CLOTHES (1<<15) ///Moths can't eat the clothing that has this flag. -#define INEDIBLE_CLOTHING (1<<17) +#define INEDIBLE_CLOTHING (1<<16) /// Headgear/helmet allows internals -#define HEADINTERNALS (1<<18) +#define HEADINTERNALS (1<<17) /// Integrity defines for clothing (not flags but close enough) #define CLOTHING_PRISTINE 0 // We have no damage on the clothing diff --git a/code/__DEFINES/polls.dm b/code/__DEFINES/polls.dm index a5a0616d8d4..435e9f60141 100644 --- a/code/__DEFINES/polls.dm +++ b/code/__DEFINES/polls.dm @@ -5,3 +5,14 @@ #define POLLTYPE_RATING "NUMVAL" #define POLLTYPE_MULTI "MULTICHOICE" #define POLLTYPE_IRV "IRV" + +///The message sent when you sign up to a poll. +#define POLL_RESPONSE_SIGNUP "signup" +///The message sent when you've already signed up for a poll and are trying to sign up again. +#define POLL_RESPONSE_ALREADY_SIGNED "already_signed" +///The message sent when you are not signed up for a poll. +#define POLL_RESPONSE_NOT_SIGNED "not_signed" +///The message sent when you are too late to unregister from a poll. +#define POLL_RESPONSE_TOO_LATE_TO_UNREGISTER "failed_unregister" +///The message sent when you successfully unregister from a poll. +#define POLL_RESPONSE_UNREGISTERED "unregistered" diff --git a/code/__DEFINES/random_spawner.dm b/code/__DEFINES/random_spawner.dm new file mode 100644 index 00000000000..2a012e79048 --- /dev/null +++ b/code/__DEFINES/random_spawner.dm @@ -0,0 +1,3 @@ +///Used by bedsheets spawners to tell if it's a single or double bedsheet. +#define BEDSHEET_SINGLE "single" +#define BEDSHEET_DOUBLE "double" diff --git a/code/__DEFINES/research.dm b/code/__DEFINES/research.dm index 005c67ae1a3..d3f99314f1d 100644 --- a/code/__DEFINES/research.dm +++ b/code/__DEFINES/research.dm @@ -4,13 +4,6 @@ //! Techweb names for new point types. Can be used to define specific point values for specific types of research (science, security, engineering, etc.) #define TECHWEB_POINT_TYPE_GENERIC "General Research" -#define TECHWEB_POINT_TYPE_DEFAULT TECHWEB_POINT_TYPE_GENERIC - -//! Associative names for techweb point values, see: [all_nodes][code/modules/research/techweb/all_nodes.dm] -#define TECHWEB_POINT_TYPE_LIST_ASSOCIATIVE_NAMES list(\ - TECHWEB_POINT_TYPE_GENERIC = "General Research",\ - ) - //! Amount of points gained per second by a single R&D server, see: [research][code/controllers/subsystem/research.dm] #define TECHWEB_SINGLE_SERVER_INCOME 52.3 diff --git a/code/__DEFINES/research/anomalies.dm b/code/__DEFINES/research/anomalies.dm index 0ae1c24b0e3..6f4bc3cd89d 100644 --- a/code/__DEFINES/research/anomalies.dm +++ b/code/__DEFINES/research/anomalies.dm @@ -7,6 +7,7 @@ #define MAX_CORES_HALLUCINATION 8 #define MAX_CORES_BIOSCRAMBLER 8 #define MAX_CORES_DIMENSIONAL 8 +#define MAX_CORES_ECTOPLASMIC 8 ///Defines for the different types of explosion a flux anomaly can have #define FLUX_NO_EXPLOSION 0 diff --git a/code/__DEFINES/research/research_categories.dm b/code/__DEFINES/research/research_categories.dm index 65de3edca53..3f6428eb731 100644 --- a/code/__DEFINES/research/research_categories.dm +++ b/code/__DEFINES/research/research_categories.dm @@ -187,6 +187,7 @@ #define RND_SUBCATEGORY_CYBERNETICS_IMPLANTS_TOOLS "/Cybernetic Implanting Tools" #define RND_SUBCATEGORY_CYBERNETICS_IMPLANTS_UTILITY "/Cybernetic Utility Implants" #define RND_SUBCATEGORY_CYBERNETICS_IMPLANTS_MISC "/Cybernetic Miscellaneous Implants" +#define RND_SUBCATEGORY_CYBERNETICS_IMPLANTS_SECURITY "/Cybernetic Security Implants" #define RND_SUBCATEGORY_CYBERNETICS_ADVANCED_LIMBS "/Cybernetic Advanced Limbs" // Limb Categories diff --git a/code/__DEFINES/role_preferences.dm b/code/__DEFINES/role_preferences.dm index 5b82fa07e89..76ea6b5910b 100644 --- a/code/__DEFINES/role_preferences.dm +++ b/code/__DEFINES/role_preferences.dm @@ -87,6 +87,7 @@ #define ROLE_SLAUGHTER_DEMON "Slaughter Demon" #define ROLE_WIZARD_APPRENTICE "apprentice" #define ROLE_SYNDICATE_MONKEY "Syndicate Monkey Agent" +#define ROLE_CONTRACTOR_SUPPORT "Contractor Support Unit" //Spawner roles #define ROLE_ANCIENT_CREW "Ancient Crew" diff --git a/code/__DEFINES/rust_g.dm b/code/__DEFINES/rust_g.dm index 76e5fa22d47..5404cebed97 100644 --- a/code/__DEFINES/rust_g.dm +++ b/code/__DEFINES/rust_g.dm @@ -118,7 +118,7 @@ #define rustg_dmi_icon_states(fname) RUSTG_CALL(RUST_G, "dmi_icon_states")(fname) #define rustg_file_read(fname) RUSTG_CALL(RUST_G, "file_read")(fname) -#define rustg_file_exists(fname) RUSTG_CALL(RUST_G, "file_exists")(fname) +#define rustg_file_exists(fname) (RUSTG_CALL(RUST_G, "file_exists")(fname) == "true") #define rustg_file_write(text, fname) RUSTG_CALL(RUST_G, "file_write")(text, fname) #define rustg_file_append(text, fname) RUSTG_CALL(RUST_G, "file_append")(text, fname) #define rustg_file_get_line_count(fname) text2num(RUSTG_CALL(RUST_G, "file_get_line_count")(fname)) @@ -129,7 +129,13 @@ #define text2file(text, fname) rustg_file_append(text, "[fname]") #endif +/// Returns the git hash of the given revision, ex. "HEAD". #define rustg_git_revparse(rev) RUSTG_CALL(RUST_G, "rg_git_revparse")(rev) + +/** + * Returns the date of the given revision in the format YYYY-MM-DD. + * Returns null if the revision is invalid. + */ #define rustg_git_commit_date(rev) RUSTG_CALL(RUST_G, "rg_git_commit_date")(rev) #define RUSTG_HTTP_METHOD_GET "get" diff --git a/code/__DEFINES/say.dm b/code/__DEFINES/say.dm index 4ea5e070146..04b1aab8455 100644 --- a/code/__DEFINES/say.dm +++ b/code/__DEFINES/say.dm @@ -5,6 +5,7 @@ #define RADIO_EXTENSION "department specific" #define RADIO_KEY "department specific key" #define LANGUAGE_EXTENSION "language specific" +#define SAY_MOD_VERB "say_mod_verb" //Message modes. Each one defines a radio channel, more or less. //if you use ! as a mode key for some ungodly reason, change the first character for ion_num() so get_message_mode() doesn't freak out with state law prompts - shiz. diff --git a/code/__DEFINES/skills.dm b/code/__DEFINES/skills.dm index e870e9de7a6..f6ecde7c2e1 100644 --- a/code/__DEFINES/skills.dm +++ b/code/__DEFINES/skills.dm @@ -43,3 +43,6 @@ #define FISHING_SKILL_DIFFIULTY_EXP_MULT 0.015 ///How much exp one would gain per spent playing the fishing minigame at minimum difficulty. the time is multiplied by 0.1 because deciseconds... #define FISHING_SKILL_EXP_PER_SECOND (SKILL_EXP_LEGENDARY / (15 MINUTES * 0.1)) + +///The base modifier a boulder's size grants to the mining skill. +#define MINING_SKILL_BOULDER_SIZE_XP 10 diff --git a/code/__DEFINES/sound.dm b/code/__DEFINES/sound.dm index 2a2bf2c9074..b38dd983988 100644 --- a/code/__DEFINES/sound.dm +++ b/code/__DEFINES/sound.dm @@ -146,7 +146,6 @@ #define ANNOUNCER_SPOOKY "announcer_spooky" #define ANNOUNCER_ERTYES "announcer_ertyes" #define ANNOUNCER_MUTANTS "announcer_mutants" -#define ANNOUNCER_KLAXON "announcer_klaxon" #define ANNOUNCER_NRI_RAIDERS "announcer_nri_raiders" #define ANNOUNCER_OUTBREAK6 "announcer_outbreak6" #define ANNOUNCER_DEPARTMENTAL "announcer_departmental" @@ -193,7 +192,6 @@ GLOBAL_LIST_INIT(announcer_keys, list( ANNOUNCER_SPOOKY, ANNOUNCER_ERTYES, ANNOUNCER_MUTANTS, - ANNOUNCER_KLAXON, ANNOUNCER_NRI_RAIDERS, ANNOUNCER_OUTBREAK6, //NOVA EDIT END @@ -232,3 +230,4 @@ GLOBAL_LIST_INIT(announcer_keys, list( #define SFX_TREE_CHOP "tree_chop" #define SFX_ROCK_TAP "rock_tap" #define SFX_SEAR "sear" +#define SFX_REEL "reel" diff --git a/code/__DEFINES/stat_tracking.dm b/code/__DEFINES/stat_tracking.dm index d143e5df4c7..9bd69744040 100644 --- a/code/__DEFINES/stat_tracking.dm +++ b/code/__DEFINES/stat_tracking.dm @@ -54,7 +54,8 @@ #define EXPORT_STATS_TO_FILE_LATER(filename, costs, counts, proc) \ do { \ var/static/last_export = 0; \ - if (world.time - last_export > 1.1 SECONDS) { \ + /* Need to always run if we haven't yet, since this code can be placed ANYWHERE */ \ + if (world.time - last_export > 1.1 SECONDS || (last_export == 0)) { \ last_export = world.time; \ /* spawn() is used here because this is often used to track init times, where timers act oddly. */ \ /* I was making timers and even after init times were complete, the timers didn't run :shrug: */ \ diff --git a/code/__DEFINES/station.dm b/code/__DEFINES/station.dm index ddaa82daffc..5a04961429f 100644 --- a/code/__DEFINES/station.dm +++ b/code/__DEFINES/station.dm @@ -2,12 +2,17 @@ #define STATION_TRAIT_NEUTRAL 2 #define STATION_TRAIT_NEGATIVE 3 -/// For traits that shouldn't be selected, like abstract types (wow) -#define STATION_TRAIT_ABSTRACT (1<<0) +///Defines for the cost of different station traits. This one is the default. +#define STATION_TRAIT_COST_FULL 1 +///Cost for smaller traits that could fly under the radar, and are only minorly negative/positive if not neutral. +#define STATION_TRAIT_COST_LOW 0.5 +///Cost for very little, and mainly neutral traits that hardly amount to anything really that interesting. +#define STATION_TRAIT_COST_MINIMAL 0.3 + /// Only run on planet stations -#define STATION_TRAIT_PLANETARY (1<<1) +#define STATION_TRAIT_PLANETARY (1<<0) /// Only run on space stations -#define STATION_TRAIT_SPACE_BOUND (1<<2) +#define STATION_TRAIT_SPACE_BOUND (1<<1) /// Not restricted by space or planet, can always just happen #define STATION_TRAIT_MAP_UNRESTRICTED STATION_TRAIT_PLANETARY | STATION_TRAIT_SPACE_BOUND diff --git a/code/__DEFINES/status_effects.dm b/code/__DEFINES/status_effects.dm index 768f1faa514..4e901c4ba2c 100644 --- a/code/__DEFINES/status_effects.dm +++ b/code/__DEFINES/status_effects.dm @@ -31,6 +31,11 @@ /// If the incapacitated status effect will ignore a mob being agressively grabbed #define IGNORE_GRAB (1<<2) +/// Maxamounts of fire stacks a mob can get +#define MAX_FIRE_STACKS 20 +/// If a mob has a higher threshold than this, the icon shown will be increased to the big fire icon. +#define MOB_BIG_FIRE_STACK_THRESHOLD 3 + // Grouped effect sources, see also code/__DEFINES/traits.dm #define STASIS_MACHINE_EFFECT "stasis_machine" diff --git a/code/__DEFINES/tgs.dm b/code/__DEFINES/tgs.dm index c561a64ebf5..fdfec5e8ca0 100644 --- a/code/__DEFINES/tgs.dm +++ b/code/__DEFINES/tgs.dm @@ -1,6 +1,6 @@ // tgstation-server DMAPI -#define TGS_DMAPI_VERSION "7.0.1" +#define TGS_DMAPI_VERSION "7.0.2" // All functions and datums outside this document are subject to change with any version and should not be relied on. @@ -426,6 +426,7 @@ /** * Send a message to connected chats. This function may sleep! + * If TGS is offline when called, the message may be placed in a queue to be sent and this function will return immediately. Your message will be sent when TGS reconnects to the game. * * message - The [/datum/tgs_message_content] to send. * admin_only: If [TRUE], message will be sent to admin connected chats. Vice-versa applies. @@ -435,6 +436,7 @@ /** * Send a private message to a specific user. This function may sleep! + * If TGS is offline when called, the message may be placed in a queue to be sent and this function will return immediately. Your message will be sent when TGS reconnects to the game. * * message - The [/datum/tgs_message_content] to send. * user: The [/datum/tgs_chat_user] to PM. @@ -444,6 +446,7 @@ /** * Send a message to connected chats that are flagged as game-related in TGS. This function may sleep! + * If TGS is offline when called, the message may be placed in a queue to be sent and this function will return immediately. Your message will be sent when TGS reconnects to the game. * * message - The [/datum/tgs_message_content] to send. * channels - Optional list of [/datum/tgs_chat_channel]s to restrict the message to. diff --git a/code/__DEFINES/traits/declarations.dm b/code/__DEFINES/traits/declarations.dm index e0f042ccc45..88d4a6a50f2 100644 --- a/code/__DEFINES/traits/declarations.dm +++ b/code/__DEFINES/traits/declarations.dm @@ -4,8 +4,8 @@ // BEGIN TRAIT DEFINES /* - *Remember to update _globalvars/traits.dm if you're adding/removing/renaming traits. - */ +Remember to update _globalvars/traits.dm if you're adding/removing/renaming traits. +*/ //mob traits /// Forces the user to stay unconscious. @@ -211,6 +211,12 @@ #define TRAIT_BLOOD_DEFICIENCY "blood_deficiency" #define TRAIT_JOLLY "jolly" #define TRAIT_NOCRITDAMAGE "no_crit" +/// Prevents shovies against a dense object from knocking them down. +#define TRAIT_SHOVE_KNOCKDOWN_BLOCKED "shove_knockdown_blocked" +/// Prevents staggering. +#define TRAIT_NO_STAGGER "no_stagger" +/// Getting hit by thrown movables won't push you away +#define TRAIT_NO_THROW_HITPUSH "no_throw_hitpush" ///Added to mob or mind, changes the icons of the fish shown in the minigame UI depending on the possible reward. #define TRAIT_REVEAL_FISH "reveal_fish" @@ -311,6 +317,8 @@ /// Is a medbot healing you #define TRAIT_MEDIBOTCOMINGTHROUGH "medbot" #define TRAIT_PASSTABLE "passtable" +/// Lets you fly through windows +#define TRAIT_PASSWINDOW "passwindow" /// Makes you immune to flashes #define TRAIT_NOFLASH "noflash" /// prevents xeno huggies implanting skeletons @@ -335,6 +343,8 @@ #define TRAIT_DEL_ON_SPACE_DUMP "del_on_hyperspace_leave" /// We can walk up or around cliffs, or at least we don't fall off of it #define TRAIT_CLIFF_WALKER "cliff_walker" +/// This means the user is currently holding/wearing a "tactical camouflage" item (like a potted plant). +#define TRAIT_TACTICALLY_CAMOUFLAGED "tactically_camouflaged" /// Gets double arcade prizes #define TRAIT_GAMERGOD "gamer-god" #define TRAIT_GIANT "giant" @@ -347,10 +357,13 @@ #define TRAIT_TUMOR_SUPPRESSED "brain_tumor_suppressed" /// Prevents hallucinations from the hallucination brain trauma (RDS) #define TRAIT_RDS_SUPPRESSED "rds_suppressed" -/// mobs that have this trait cannot be extinguished -#define TRAIT_PERMANENTLY_ONFIRE "permanently_onfire" +/// Mobs that have this trait cannot be extinguished +#define TRAIT_NO_EXTINGUISH "no_extinguish" /// Indicates if the mob is currently speaking with sign language #define TRAIT_SIGN_LANG "sign_language" +/// Trait given to mobs to indicate that they can catch papers thrown at them midair without trying, +/// and make syndicate airplanes when folding paper up. +#define TRAIT_PAPER_MASTER "paper_master" /// This mob is able to use sign language over the radio. #define TRAIT_CAN_SIGN_ON_COMMS "can_sign_on_comms" /// nobody can use martial arts on this mob @@ -500,6 +513,9 @@ /// Sells for more money on the pirate bounty pad. #define TRAIT_HIGH_VALUE_RANSOM "high_value_ransom" +/// Makes the user handcuff others faster +#define TRAIT_FAST_CUFFING "fast_cuffing" + // METABOLISMS // Various jobs on the station have historically had better reactions // to various drinks and foodstuffs. Security liking donuts is a classic @@ -592,6 +608,8 @@ #define TRAIT_LAVA_STOPPED "lava_stopped" ///Chasms will be safe to cross while they've this trait. #define TRAIT_CHASM_STOPPED "chasm_stopped" +///Chasms will be safe to cross if there is something with this trait on it +#define TRAIT_CHASM_STOPPER "chasm_stopper" ///The effects of the immerse element will be halted while this trait is present. #define TRAIT_IMMERSE_STOPPED "immerse_stopped" /// The effects of hyperspace drift are blocked when the tile has this trait @@ -621,6 +639,8 @@ /// Used by the honkspam element to avoid spamming the sound. Amusing considering its name. #define TRAIT_HONKSPAMMING "trait_honkspamming" +/// Required by the waddling element since there are multiple sources of it. +#define TRAIT_WADDLING "trait_waddling" ///Used for managing KEEP_TOGETHER in [/atom/var/appearance_flags] #define TRAIT_KEEP_TOGETHER "keep-together" @@ -790,6 +810,8 @@ #define TRAIT_PDA_CAN_EXPLODE "pda_can_explode" ///The download speeds of programs from the dowloader is halved. #define TRAIT_MODPC_HALVED_DOWNLOAD_SPEED "modpc_halved_download_speed" +///Dictates whether a user (source) is interacting with the frame of a stationary modular computer or the pc inside it. Needed for circuits I guess. +#define TRAIT_MODPC_INTERACTING_WITH_FRAME "modpc_interacting_with_frame" /// If present on a [/mob/living/carbon], will make them appear to have a medium level disease on health HUDs. #define TRAIT_DISEASELIKE_SEVERITY_MEDIUM "diseaselike_severity_medium" @@ -827,6 +849,9 @@ /// Similar trait given to temporary bodies inhabited by players #define TRAIT_TEMPORARY_BODY "temporary_body" +/// Trait given to objects with the wallmounted component +#define TRAIT_WALLMOUNTED "wallmounted" + /// Trait given to mechs that can have orebox functionality on movement #define TRAIT_OREBOX_FUNCTIONAL "orebox_functional" @@ -886,6 +911,7 @@ #define TRAIT_BLOB_ALLY "blob_ally" ///Traits given by station traits +#define STATION_TRAIT_ASSISTANT_GIMMICKS "station_trait_assistant_gimmicks" #define STATION_TRAIT_BANANIUM_SHIPMENTS "station_trait_bananium_shipments" #define STATION_TRAIT_BIGGER_PODS "station_trait_bigger_pods" #define STATION_TRAIT_BIRTHDAY "station_trait_birthday" @@ -914,6 +940,11 @@ /// This atom is currently spinning. #define TRAIT_SPINNING "spinning" +/// This limb can't be torn open anymore +#define TRAIT_IMMUNE_TO_CRANIAL_FISSURE "immune_to_cranial_fissure" +/// Trait given if the mob has a cranial fissure. +#define TRAIT_HAS_CRANIAL_FISSURE "has_cranial_fissure" + /// Denotes that this id card was given via the job outfit, aka the first ID this player got. #define TRAIT_JOB_FIRST_ID_CARD "job_first_id_card" /// ID cards with this trait will attempt to forcibly occupy the front-facing ID card slot in wallets. @@ -1041,4 +1072,13 @@ /// Trait which self-identifies as an enemy of the law #define TRAIT_ALWAYS_WANTED "always_wanted" +/// Trait which means whatever has this is dancing by a dance machine +#define TRAIT_DISCO_DANCER "disco_dancer" + +/// That which allows mobs to instantly break down boulders. +#define TRAIT_INSTANTLY_PROCESSES_BOULDERS "instantly_processes_boulders" + +/// Trait applied to objects and mobs that can attack a boulder and break it down. (See /obj/item/boulder/manual_process()) +#define TRAIT_BOULDER_BREAKER "boulder_breaker" + // END TRAIT DEFINES diff --git a/code/__DEFINES/traits/sources.dm b/code/__DEFINES/traits/sources.dm index f9cdbe4326d..dd237bf54b7 100644 --- a/code/__DEFINES/traits/sources.dm +++ b/code/__DEFINES/traits/sources.dm @@ -41,6 +41,9 @@ /// Trait from light debugging #define LIGHT_DEBUG_TRAIT "light-debug" +/// Trait given by an Action datum +#define ACTION_TRAIT "action" + #define CLOTHING_TRAIT "clothing" #define HELMET_TRAIT "helmet" /// inherited from the mask @@ -180,6 +183,8 @@ #define TRAIT_SUBTREE_REQUIRED_OPERATIONAL_DATUM "element-required" /// Trait applied by MODsuits. #define MOD_TRAIT "mod" +/// Trait applied to tram passengers +#define TRAM_PASSENGER_TRAIT "tram-passenger" /// Trait granted by the berserker hood. #define BERSERK_TRAIT "berserk_trait" @@ -279,3 +284,6 @@ #define ORGAN_INSIDE_BODY_TRAIT "organ_inside_body" /// Trait when something was labelled by a pen. #define PEN_LABEL_TRAIT "pen_label" + +/// Trait when a drink was renamed by a shaker +#define SHAKER_LABEL_TRAIT "shaker_trait" diff --git a/code/__DEFINES/wounds.dm b/code/__DEFINES/wounds.dm index 224b2c973cb..7d02aa7f3eb 100644 --- a/code/__DEFINES/wounds.dm +++ b/code/__DEFINES/wounds.dm @@ -123,6 +123,8 @@ GLOBAL_LIST_INIT(bio_state_anatomy, list( #define WOUND_SERIES_FLESH_PUNCTURE_BLEED "wound_series_flesh_puncture_bleed" /// Generic loss wounds. See loss.dm #define WOUND_SERIES_LOSS_BASIC "wound_series_loss_basic" +/// Cranial fissure wound. +#define WOUND_SERIES_CRANIAL_FISSURE "wound_series_cranial_fissure" // NOVA EDIT ADDITION BEGIN - MUSCLE AND SYNTH WOUNDS // Have to put it here so I can use it in the global list of wound series diff --git a/code/__DEFINES/~ff_defines/traits.dm b/code/__DEFINES/~ff_defines/traits.dm index f99cec031ef..6185631ec92 100644 --- a/code/__DEFINES/~ff_defines/traits.dm +++ b/code/__DEFINES/~ff_defines/traits.dm @@ -2,8 +2,6 @@ #define TRAIT_CAN_BUCKLED_TO_HAND "can_buckled_to_hand" // Обладает ли бом слабым телом. Квирк присутствует у таких специй как тешари. Блокирует возможность брать мобов на плечо, или спину. А так же бросать тела. #define TRAIT_WEAK_BODY "weak_body" -//Защита от опрокидываний. -#define TRAIT_KNOCKDOWN_IMMUNE "knock_immune" //Позволяет забираться в сумки и будет положенным в них. #define TRAIT_CAN_ENTER_BAG "can_enter_bag" // Идеальный слух. Позволяет слышать шепот в приделах экрана и речь на любом расстоянии. diff --git a/code/__DEFINES/~nova_defines/baton_upgrades.dm b/code/__DEFINES/~nova_defines/baton_upgrades.dm deleted file mode 100644 index 0ec64253761..00000000000 --- a/code/__DEFINES/~nova_defines/baton_upgrades.dm +++ /dev/null @@ -1,3 +0,0 @@ -#define BATON_CUFF_UPGRADE (1<<0) -#define BATON_MUTE_UPGRADE (1<<1) -#define BATON_FOCUS_UPGRADE (1<<2) diff --git a/code/__DEFINES/~nova_defines/colony_fabricator_misc.dm b/code/__DEFINES/~nova_defines/colony_fabricator_misc.dm index 0ebd9a14240..5e741ddfa69 100644 --- a/code/__DEFINES/~nova_defines/colony_fabricator_misc.dm +++ b/code/__DEFINES/~nova_defines/colony_fabricator_misc.dm @@ -2,8 +2,6 @@ #define RND_CATEGORY_AKHTER_CLOTHING "Clothing" /// Category for equipment like belts and bags in the organics printer #define RND_CATEGORY_AKHTER_EQUIPMENT "Equipment" -/// Category for medical items in the organics printer -#define RND_CATEGORY_AKHTER_MEDICAL "Emergency Medical" /// Category for resources made by the organics printer #define RND_CATEGORY_AKHTER_RESOURCES "Resources" @@ -18,6 +16,11 @@ /// Category for the seeds the organics printer can make #define RND_CATEGORY_AKHTER_SEEDS "Synthesized Seeds" +/// Medical items in the deforest medstation +#define RND_CATEGORY_DEFOREST_MEDICAL "Emergency Medical" +/// Blood and blood bags +#define RND_CATEGORY_DEFOREST_BLOOD "Synthesized Blood" + /// The items the frontier clothing can hold GLOBAL_LIST_INIT(colonist_suit_allowed, list( /obj/item/ammo_box, diff --git a/code/__DEFINES/~nova_defines/hud.dm b/code/__DEFINES/~nova_defines/hud.dm index 929c2b79b09..13b5768c88d 100644 --- a/code/__DEFINES/~nova_defines/hud.dm +++ b/code/__DEFINES/~nova_defines/hud.dm @@ -1,21 +1,5 @@ -// ERP stuff -#define ui_vagina "LEFT+1:8,BOTTOM+4:14" -#define ui_vagina_down "LEFT+1:8,BOTTOM+1:8" -#define ui_anus "LEFT+2:10,BOTTOM+4:14" -#define ui_anus_down "LEFT+2:10,BOTTOM+1:8" -#define ui_nipples "LEFT:6,BOTTOM+5:17" -#define ui_nipples_down "LEFT:6,BOTTOM+2:11" -#define ui_penis "LEFT+1:8,BOTTOM+5:17" -#define ui_penis_down "LEFT+1:8,BOTTOM+2:11" -#define ui_erp_inventory "LEFT:6,BOTTOM+1:8" -#define ui_erp_inventory_up "LEFT:6,BOTTOM+4:14" - -// Cyborg PDA -#define ui_borg_pda_send "CENTER+5:21,BOTTOM:5" // To the right of the alert panel -#define ui_borg_pda_log "CENTER+6:21,BOTTOM:5" - // Ammo counter -#define ui_ammocounter "RIGHT-1:28,CENTER-5:9" +#define ui_ammocounter "EAST-1:28,CENTER-5:9" //Families #define ui_wanted_lvl "NORTH,11" diff --git a/code/__DEFINES/~nova_defines/manufacturer_strings.dm b/code/__DEFINES/~nova_defines/manufacturer_strings.dm index b9cdddc78b0..81819d4f0ef 100644 --- a/code/__DEFINES/~nova_defines/manufacturer_strings.dm +++ b/code/__DEFINES/~nova_defines/manufacturer_strings.dm @@ -8,14 +8,17 @@ #define COMPANY_CARWO "It has a small [span_cyan("four pointed star")] alongside [span_cyan("Carwo Defense Systems")] etched into it." #define COMPANY_TRAPPISTE "It has a small [span_red("pattern of five squares")] alongside [span_red("Trappiste Fabriek")] etched into it." +#define COMPANY_CYBERSUN "It has a [span_red("red circle")] broken by a hexagonal flower alongside [span_red("Cybersun Industries")] in Konjin etched into it." #define COMPANY_SCARBOROUGH "It has [span_orange("Scarborough Arms")] stamped onto it." #define COMPANY_INTERDYNE "It has [span_cyan("Interdyne Pharmaceuticals")] stamped onto it." #define COMPANY_ALLSTAR "It has [span_red("Allstar Lasers Inc.")] stamped onto it." #define COMPANY_MICRON "It has [span_cyan("Micron Control Sys.")] cut into it." +#define COMPANY_NAKAMURA "It has [span_orange("Nakamura Engineering")] embossed onto it." +#define COMPANY_BLACKSTEEL "It bears the [span_grey("crossed sword and hammer")] crafter's mark of the [span_grey("Jarnsmiour Blacksteel Foundation")] upon its fore." + #define COMPANY_SZOT "It has a small [span_engradio("three point crown")] alongside [span_engradio("Szot Dynamica")] cut into it." -#define COMPANY_TKACH "It has [span_robot("Tkach Design Bureau")] stamped onto it." #define COMPANY_SAKHNO "It has [span_green("Sakhno Concern")] stamped onto it." #define COMPANY_XHIHAO "It has [span_purple("Xhihao Light Arms")] etched into it." diff --git a/code/__DEFINES/~nova_defines/mobs.dm b/code/__DEFINES/~nova_defines/mobs.dm index 2943a1b5e3c..a040ec993d7 100644 --- a/code/__DEFINES/~nova_defines/mobs.dm +++ b/code/__DEFINES/~nova_defines/mobs.dm @@ -32,3 +32,4 @@ #define BODYPART_ICON_SYNTHMAMMAL 'modular_nova/modules/bodyparts/icons/synthmammal_parts_greyscale.dmi' #define BODYPART_ICON_IPC 'modular_nova/modules/bodyparts/icons/ipc_parts.dmi' #define BODYPART_ICON_SYNTHLIZARD 'modular_nova/modules/bodyparts/icons/synthliz_parts_greyscale.dmi' +#define BODYPART_ICON_SNAIL 'modular_nova/modules/bodyparts/icons/snail_parts_greyscale.dmi' diff --git a/code/__DEFINES/~nova_defines/quirks.dm b/code/__DEFINES/~nova_defines/quirks.dm index 7acc8b3e9b1..5237be29176 100644 --- a/code/__DEFINES/~nova_defines/quirks.dm +++ b/code/__DEFINES/~nova_defines/quirks.dm @@ -25,3 +25,10 @@ #define DEATH_CONSEQUENCES_SHOW_HEALTH_ANALYZER_DATA "dc_show_health_analyzer_data" #define DEATH_CONSEQUENCES_TIME_BETWEEN_REMINDERS 5 MINUTES + +/// the minimum percentage of RGB darkness reduction that Nova's NV will always give. for base reference, the old NV quirk was equal to 4.5. note: some wide variance in min/max is needed to ensure hue has some chance to linear convert across +#define NOVA_NIGHT_VISION_POWER_MIN 4.5 +/// the maximum percentage. for reference, low-light adapted eyes (icecats and ashwalkers) have 30. +#define NOVA_NIGHT_VISION_POWER_MAX 9 +/// percentage of the NIGHT_VISION_POWER_MAX increase that is applied for eyes with low innate flash protection (photophobia quirk/moth eyes). At 0.75, this raises NV to 22.5 at hypersensitive flash_protect. +#define NOVA_NIGHT_VISION_SENSITIVITY_MULT 0.75 diff --git a/code/__DEFINES/~nova_defines/traits/declarations.dm b/code/__DEFINES/~nova_defines/traits/declarations.dm index 245a42f88a5..ff79f76448a 100644 --- a/code/__DEFINES/~nova_defines/traits/declarations.dm +++ b/code/__DEFINES/~nova_defines/traits/declarations.dm @@ -75,6 +75,9 @@ /// The trait that determines if someone has the oversized quirk. #define TRAIT_OVERSIZED "trait_oversized" +/// The trait that determines if someone has the robotic limb reattachment quirk. +#define TRAIT_ROBOTIC_LIMBATTACHMENT "trait_robotic_limbattachment" + /// Cargo Loader trait #define TRAIT_TRASHMAN "trait_trashman" @@ -116,6 +119,9 @@ #define TRAIT_REVIVES_BY_HEALING "trait_revives_by_healing" #define TRAIT_ROBOTIC_DNA_ORGANS "trait_robotic_dna_organs" +/// Trait that changes the ending effects of twitch leaving your system +#define TRAIT_TWITCH_ADAPTED "twitch_adapted" + //Defines for model features, set in the model_features list of a robot model datum. Are they a dogborg? Is the model small? etc. /// Cyborgs with unique sprites for when they get totally broken down. #define TRAIT_R_UNIQUEWRECK "unique_wreck" diff --git a/code/__HELPERS/_lists.dm b/code/__HELPERS/_lists.dm index 361bd10f329..7af30c8d972 100644 --- a/code/__HELPERS/_lists.dm +++ b/code/__HELPERS/_lists.dm @@ -97,6 +97,19 @@ LAZYINITLIST(lazy_list[key]); \ lazy_list[key] |= value; +///Ensures the length of a list is at least I, prefilling it with V if needed. if V is a proc call, it is repeated for each new index so that list() can just make a new list for each item. +#define LISTASSERTLEN(L, I, V...) \ + if (length(L) < I) { \ + var/_OLD_LENGTH = length(L); \ + L.len = I; \ + /* Convert the optional argument to a if check */ \ + for (var/_USELESS_VAR in list(V)) { \ + for (var/_INDEX_TO_ASSIGN_TO in _OLD_LENGTH+1 to I) { \ + L[_INDEX_TO_ASSIGN_TO] = V; \ + } \ + } \ + } + #define reverseList(L) reverse_range(L.Copy()) /// Passed into BINARY_INSERT to compare keys diff --git a/code/__HELPERS/announcements.dm b/code/__HELPERS/announcements.dm index 7a27be43a75..d8653a2eb05 100644 --- a/code/__HELPERS/announcements.dm +++ b/code/__HELPERS/announcements.dm @@ -16,8 +16,8 @@ * * play_sound - if TRUE, play a sound with the announcement (based on player option) * * sound_override - optional, override the default announcement sound * * sender_override - optional, modifies the sender of the announcement - * * encode_title - if TRUE, the title will be HTML encoded - * * encode_text - if TRUE, the text will be HTML encoded + * * encode_title - if TRUE, the title will be HTML encoded (escaped) + * * encode_text - if TRUE, the text will be HTML encoded (escaped) */ /proc/send_ooc_announcement( @@ -28,7 +28,7 @@ sound_override = 'sound/misc/bloop.ogg', sender_override = "Server Admin Announcement", encode_title = TRUE, - encode_text = TRUE, + encode_text = FALSE, ) if(isnull(text)) return diff --git a/code/__HELPERS/areas.dm b/code/__HELPERS/areas.dm index dec768a6a0c..8df182c90d0 100644 --- a/code/__HELPERS/areas.dm +++ b/code/__HELPERS/areas.dm @@ -273,13 +273,11 @@ GLOBAL_LIST_INIT(typecache_powerfailure_safe_areas, typecacheof(list( // Now their turfs var/list/turfs = list() for(var/area/pull_from as anything in areas_to_pull) - var/list/our_turfs = pull_from.get_contained_turfs() - if(target_z == 0) - turfs += our_turfs + if (target_z == 0) + for (var/list/zlevel_turfs as anything in pull_from.get_zlevel_turf_lists()) + turfs += zlevel_turfs else - for(var/turf/turf_in_area as anything in our_turfs) - if(target_z == turf_in_area.z) - turfs += turf_in_area + turfs += pull_from.get_turfs_by_zlevel(target_z) return turfs diff --git a/code/__HELPERS/atoms.dm b/code/__HELPERS/atoms.dm index 9845593c084..406ea75143c 100644 --- a/code/__HELPERS/atoms.dm +++ b/code/__HELPERS/atoms.dm @@ -314,16 +314,6 @@ rough example of the "cone" made by the 3 dirs checked /proc/pass(...) return -///Returns a list of the parents of all storage components that contain the target item -/proc/get_storage_locs(obj/item/target) - . = list() - if(!istype(target) || !(target.item_flags & IN_STORAGE)) - return - var/datum/storage/storage_datum = target.loc.atom_storage - if(!storage_datum) - return - . += storage_datum.real_location?.resolve() - /// Returns an x and y value require to reverse the transformations made to center an oversized icon /atom/proc/get_oversized_icon_offsets() if (pixel_x == 0 && pixel_y == 0) diff --git a/code/__HELPERS/chat_filter.dm b/code/__HELPERS/chat_filter.dm index b395da3d7aa..34d811bf85b 100644 --- a/code/__HELPERS/chat_filter.dm +++ b/code/__HELPERS/chat_filter.dm @@ -85,6 +85,14 @@ return null +///Given a pda message, will replace any match in the message with grawlixs. +/proc/censor_ic_filter_for_pdas(message) + if(config.ic_outside_pda_filter_regex) + message = config.ic_outside_pda_filter_regex.Replace(message, GLOBAL_PROC_REF(grawlix)) + if(config.soft_ic_outside_pda_filter_regex) + message = config.soft_ic_outside_pda_filter_regex.Replace(message, GLOBAL_PROC_REF(grawlix)) + return message + /// Logs to the filter log with the given message, match, and scope /proc/log_filter(scope, message, filter_result) log_filter_raw("[scope] filter:\n\tMessage: [message]\n\tFilter match: [filter_result[CHAT_FILTER_INDEX_WORD]]") diff --git a/code/__HELPERS/colors.dm b/code/__HELPERS/colors.dm index 58f4d61ea30..9f17d4c0028 100644 --- a/code/__HELPERS/colors.dm +++ b/code/__HELPERS/colors.dm @@ -19,13 +19,8 @@ /// Given a color in the format of "#RRGGBB" or "#RRGGBBAA", gives back a 4 entry list with the number values of each /proc/split_color(color) - var/list/output = list() - output += hex2num(copytext(color, 2, 4)) - output += hex2num(copytext(color, 4, 6)) - output += hex2num(copytext(color, 6, 8)) - if(length(color) == 9) - output += hex2num(copytext(color, 8, 10)) - else + var/list/output = rgb2num(color) + if(length(output) == 3) output += 255 return output @@ -49,29 +44,27 @@ CRASH("Given non-HTML argument!") else if(length_char(HTMLstring) != 7) CRASH("Given non-hex symbols in argument!") - var/textr = copytext(HTMLstring, 2, 4) - var/textg = copytext(HTMLstring, 4, 6) - var/textb = copytext(HTMLstring, 6, 8) - return rgb(255 - hex2num(textr), 255 - hex2num(textg), 255 - hex2num(textb)) + var/list/color = rgb2num(HTMLstring) + return rgb(255 - color[1], 255 - color[2], 255 - color[3]) -///Flash a color on the client +///Flash a color on the passed mob /proc/flash_color(mob_or_client, flash_color="#960000", flash_time=20) - var/client/flashed_client + var/mob/flashed_mob if(ismob(mob_or_client)) - var/mob/client_mob = mob_or_client - if(client_mob.client) - flashed_client = client_mob.client - else - return + flashed_mob = mob_or_client else if(istype(mob_or_client, /client)) - flashed_client = mob_or_client + var/client/flashed_client = mob_or_client + flashed_mob = flashed_client.mob - if(!istype(flashed_client)) + if(!istype(flashed_mob)) return - var/animate_color = flashed_client.color - flashed_client.color = flash_color - animate(flashed_client, color = animate_color, time = flash_time) + var/datum/client_colour/temp/temp_color = new(flashed_mob) + temp_color.colour = flash_color + temp_color.fade_in = flash_time * 0.25 + temp_color.fade_out = flash_time * 0.25 + QDEL_IN(temp_color, (flash_time * 0.5) + 1) + flashed_mob.add_client_colour(temp_color) /// Blends together two colors (passed as 3 or 4 length lists) using the screen blend mode /// Much like multiply, screen effects the brightness of the resulting color @@ -110,4 +103,3 @@ #define RANDOM_COLOUR (rgb(rand(0,255),rand(0,255),rand(0,255))) - diff --git a/code/__HELPERS/construction.dm b/code/__HELPERS/construction.dm index 9cc7d112532..f7b0ece13f8 100644 --- a/code/__HELPERS/construction.dm +++ b/code/__HELPERS/construction.dm @@ -59,3 +59,63 @@ return null . = new target.type(target.drop_location(), amount, FALSE, target.mats_per_unit) + +/** + * divides a list of materials uniformly among all contents of the target_object reccursively + * Used to set materials of printed items with their design cost by taking into consideration their already existing materials + * e.g. if 12 iron is to be divided uniformly among 2 objects A, B who's current iron contents are 3 & 7 + * Then first we normalize those values i.e. find their weights to decide who gets an higher share of iron + * total_sum = 3 + 7 = 10, A = 3/10 = 0.3, B = 7/10 = 0.7 + * Then we finally multiply those weights with the user value of 12 we get + * A = 0.3 * 12 = 3.6, B = 0.7 * 12 = 8.4 i.e. 3.6 + 8.4 = 12!! + * Off course we round the values so we don't have to deal with floating point materials so the actual value + * ends being less but that's not an issue + * Arguments + * + * * [custom_materials][list] - the list of materials to set for the object + * * multiplier - multiplier passed to set_custom_materials + * * [target_object][atom] - the target object who's custom materials we are trying to modify + */ +/proc/split_materials_uniformly(list/custom_materials, multiplier, atom/target_object) + if(!length(target_object.contents)) //most common case where the object is just 1 thing + target_object.set_custom_materials(custom_materials, multiplier) + return + + //Step 1: Get reccursive contents of all objects, only filter obj cause that what's material container accepts + var/list/reccursive_contents = target_object.get_all_contents_type(/obj/item) + + //Step 2: find the sum of each material type per object and record their amounts into an 2D list + var/list/material_map_sum = list() + var/list/material_map_amounts = list() + for(var/atom/object as anything in reccursive_contents) + var/list/item_materials = object.custom_materials + for(var/mat as anything in custom_materials) + var/mat_amount = 1 //no materials mean we assign this default amount + if(length(item_materials)) + mat_amount = item_materials[mat] || 1 //if this object doesn't have our material type then assign a default value of 1 + + //record the sum of mats for normalizing + material_map_sum[mat] += mat_amount + //record the material amount for each item into an 2D list + var/list/mat_list_per_item = material_map_amounts[mat] + if(isnull(mat_list_per_item)) + material_map_amounts[mat] = list(mat_amount) + else + mat_list_per_item += mat_amount + + //Step 3: normalize & scale material_map_amounts with material_map_sum + for(var/mat as anything in material_map_amounts) + var/mat_sum = material_map_sum[mat] + var/list/mat_per_item = material_map_amounts[mat] + for(var/i in 1 to mat_per_item.len) + mat_per_item[i] = (mat_per_item[i] / mat_sum) * custom_materials[mat] + + //Step 4 flatten the 2D list and assign the final values to each atom + var/index = 1 + for(var/atom/object as anything in reccursive_contents) + var/list/final_material_list = list() + for(var/mat as anything in material_map_amounts) + var/list/mat_per_item = material_map_amounts[mat] + final_material_list[mat] = mat_per_item[index] + object.set_custom_materials(final_material_list, multiplier) + index += 1 diff --git a/code/__HELPERS/global_lists.dm b/code/__HELPERS/global_lists.dm index 408852af459..c54c052d05d 100644 --- a/code/__HELPERS/global_lists.dm +++ b/code/__HELPERS/global_lists.dm @@ -27,7 +27,7 @@ init_sprite_accessory_subtypes(/datum/sprite_accessory/wings_open, GLOB.wings_open_list) init_sprite_accessory_subtypes(/datum/sprite_accessory/frills, GLOB.frills_list) init_sprite_accessory_subtypes(/datum/sprite_accessory/spines, GLOB.spines_list) - init_sprite_accessory_subtypes(/datum/sprite_accessory/spines_animated, GLOB.animated_spines_list) + init_sprite_accessory_subtypes(/datum/sprite_accessory/tail_spines, GLOB.tail_spines_list) init_sprite_accessory_subtypes(/datum/sprite_accessory/legs, GLOB.legs_list) init_sprite_accessory_subtypes(/datum/sprite_accessory/caps, GLOB.caps_list) init_sprite_accessory_subtypes(/datum/sprite_accessory/moth_wings, GLOB.moth_wings_list) diff --git a/code/__HELPERS/icons.dm b/code/__HELPERS/icons.dm index 798059ac7b7..d9d001dd62f 100644 --- a/code/__HELPERS/icons.dm +++ b/code/__HELPERS/icons.dm @@ -1,14 +1,22 @@ /* IconProcs README + A BYOND library for manipulating icons and colors + by Lummox JR + version 1.0 + The IconProcs library was made to make a lot of common icon operations much easier. BYOND's icon manipulation routines are very capable but some of the advanced capabilities like using alpha transparency can be unintuitive to beginners. + CHANGING ICONS + Several new procs have been added to the /icon datum to simplify working with icons. To use them, remember you first need to setup an /icon var like so: + GLOBAL_DATUM_INIT(my_icon, /icon, new('iconfile.dmi')) + icon/ChangeOpacity(amount = 1) A very common operation in DM is to try to make an icon more or less transparent. Making an icon more transparent is usually much easier than making it less so, however. This proc basically is a frontend @@ -40,58 +48,53 @@ icon/UseAlphaMask(mask, mode) Sometimes you may want to take the alpha values from one icon and use them on a different icon. This proc will do that. Just supply the icon whose alpha mask you want to use, and src will change so it has the same colors as before but uses the mask for opacity. + COLOR MANAGEMENT AND HSV + RGB isn't the only way to represent color. Sometimes it's more useful to work with a model called HSV, which stands for hue, saturation, and value. + * The hue of a color describes where it is along the color wheel. It goes from red to yellow to green to cyan to blue to magenta and back to red. * The saturation of a color is how much color is in it. A color with low saturation will be more gray, and with no saturation at all it is a shade of gray. * The value of a color determines how bright it is. A high-value color is vivid, moderate value is dark, and no value at all is black. -Just as BYOND uses "#rrggbb" to represent RGB values, a similar format is used for HSV: "#hhhssvv". The hue is three -hex digits because it ranges from 0 to 0x5FF. - * 0 to 0xFF - red to yellow - * 0x100 to 0x1FF - yellow to green - * 0x200 to 0x2FF - green to cyan - * 0x300 to 0x3FF - cyan to blue - * 0x400 to 0x4FF - blue to magenta - * 0x500 to 0x5FF - magenta to red -Knowing this, you can figure out that red is "#000ffff" in HSV format, which is hue 0 (red), saturation 255 (as colorful as possible), -value 255 (as bright as possible). Green is "#200ffff" and blue is "#400ffff". -More than one HSV color can match the same RGB color. + +While rgb is typically stored in the #rrggbb" format (with optional "aa" on the end), HSV never needs to be displayed. +Most procs that work in HSV "space" will simply accept RGB inputs and convert them in place using rgb2num(color, space = COLORSPACE_HSV). + +That said, if you want to manually modify these values rgb2hsv() will hand you back a list in the format list(hue, saturation, value, alpha). +Converting back is simple, just a hsv2rgb(hsv) call + +Hue ranges from 0 to 360 (it's in degrees of a color wheel) +Saturation ranges from 0 to 100 +Value ranges from 0 to 100 + +Knowing this, you can figure out that red is list(0, 100, 100) in HSV format, which is hue 0 (red), saturation 100 (as colorful as possible), +value 255 (as bright as possible). Green is list(120, 100, 100) and blue is list(240, 100, 100). + +It is worth noting that while we do not have helpers for them currently, these same ideas apply to all of byond's color spaces +HSV (hue saturation value), HSL (hue satriation luminosity) and HCY (hue chroma luminosity) + Here are some procs you can use for color management: -ReadRGB(rgb) - Takes an RGB string like "#ffaa55" and converts it to a list such as list(255,170,85). If an RGBA format is used - that includes alpha, the list will have a fourth item for the alpha value. -hsv(hue, sat, val, apha) - Counterpart to rgb(), this takes the values you input and converts them to a string in "#hhhssvv" or "#hhhssvvaa" - format. Alpha is not included in the result if null. -ReadHSV(rgb) - Takes an HSV string like "#100FF80" and converts it to a list such as list(256,255,128). If an HSVA format is used that - includes alpha, the list will have a fourth item for the alpha value. -RGBtoHSV(rgb) - Takes an RGB or RGBA string like "#ffaa55" and converts it into an HSV or HSVA color such as "#080aaff". -HSVtoRGB(hsv) - Takes an HSV or HSVA string like "#080aaff" and converts it into an RGB or RGBA color such as "#ff55aa". + BlendRGB(rgb1, rgb2, amount) Blends between two RGB or RGBA colors using regular RGB blending. If amount is 0, the first color is the result; if 1, the second color is the result. 0.5 produces an average of the two. Values outside the 0 to 1 range are allowed as well. - The returned value is an RGB or RGBA color. -BlendHSV(hsv1, hsv2, amount) - Blends between two HSV or HSVA colors using HSV blending, which tends to produce nicer results than regular RGB + Returns an RGB or RGBA string +BlendHSV(rgb1, rgb2, amount) + Blends between two RGB or RGBA colors using HSV blending, which tends to produce nicer results than regular RGB blending because the brightness of the color is left intact. If amount is 0, the first color is the result; if 1, the second color is the result. 0.5 produces an average of the two. Values outside the 0 to 1 range are allowed as well. - The returned value is an HSV or HSVA color. -BlendRGBasHSV(rgb1, rgb2, amount) - Like BlendHSV(), but the colors used and the return value are RGB or RGBA colors. The blending is done in HSV form. + Returns an RGB or RGBA string HueToAngle(hue) Converts a hue to an angle range of 0 to 360. Angle 0 is red, 120 is green, and 240 is blue. AngleToHue(hue) Converts an angle to a hue in the valid range. -RotateHue(hsv, angle) - Takes an HSV or HSVA value and rotates the hue forward through red, green, and blue by an angle from 0 to 360. - (Rotating red by 60° produces yellow.) The result is another HSV or HSVA color with the same saturation and value - as the original, but a different hue. +RotateHue(rgb, angle) + Takes an RGB or RGBA value and rotates the hue forward through red, green, and blue by an angle from 0 to 360. + (Rotating red by 60° produces yellow.) + Returns an RGB or RGBA string GrayScale(rgb) Takes an RGB or RGBA color and converts it to grayscale. Returns an RGB or RGBA string. ColorTone(rgb, tone) @@ -101,33 +104,42 @@ ColorTone(rgb, tone) /* Get Flat Icon DEMO by DarkCampainger + This is a test for the get flat icon proc, modified approprietly for icons and their states. Probably not a good idea to run this unless you want to see how the proc works in detail. mob icon = 'old_or_unused.dmi' icon_state = "green" + Login() // Testing image underlays underlays += image(icon='old_or_unused.dmi',icon_state="red") underlays += image(icon='old_or_unused.dmi',icon_state="red", pixel_x = 32) underlays += image(icon='old_or_unused.dmi',icon_state="red", pixel_x = -32) + // Testing image overlays add_overlay(image(icon='old_or_unused.dmi',icon_state="green", pixel_x = 32, pixel_y = -32)) add_overlay(image(icon='old_or_unused.dmi',icon_state="green", pixel_x = 32, pixel_y = 32)) add_overlay(image(icon='old_or_unused.dmi',icon_state="green", pixel_x = -32, pixel_y = -32)) + // Testing icon file overlays (defaults to mob's state) add_overlay('_flat_demoIcons2.dmi') + // Testing icon_state overlays (defaults to mob's icon) add_overlay("white") + // Testing dynamic icon overlays var/icon/I = icon('old_or_unused.dmi', icon_state="aqua") I.Shift(NORTH,16,1) add_overlay(I) + // Testing dynamic image overlays I=image(icon=I,pixel_x = -32, pixel_y = 32) add_overlay(I) + // Testing object types (and layers) add_overlay(/obj/effect/overlay_test) + loc = locate (10,10,1) verb Browse_Icon() @@ -138,9 +150,11 @@ mob src<

") + Output_Icon() set name = "2. Output Icon" to_chat(src, "Icon is: [icon2base64html(getFlatIcon(src))]") + Label_Icon() set name = "3. Label Icon" // Give it a name for the cache @@ -151,9 +165,11 @@ mob src< 57 && ch < 65) || (ch > 70 && ch < 97) || ch > 102) - break - ++digits - if(digits == 8) - break - - var/single = digits < 6 - if(digits != 3 && digits != 4 && digits != 6 && digits != 8) - return - if(digits == 4 || digits == 8) - usealpha = 1 - for(i=start, digits>0, ++i) - ch = text2ascii(rgb, i) - if(ch >= 48 && ch <= 57) - ch -= 48 - else if(ch >= 65 && ch <= 70) - ch -= 55 - else if(ch >= 97 && ch <= 102) - ch -= 87 - else - break - --digits - switch(which) - if(0) - r = (r << 4) | ch - if(single) - r |= r << 4 - ++which - else if(!(digits & 1)) - ++which - if(1) - g = (g << 4) | ch - if(single) - g |= g << 4 - ++which - else if(!(digits & 1)) - ++which - if(2) - b = (b << 4) | ch - if(single) - b |= b << 4 - ++which - else if(!(digits & 1)) - ++which - if(3) - alpha = (alpha << 4) | ch - if(single) - alpha |= alpha << 4 - - . = list(r, g, b) - if(usealpha) - . += alpha - -/proc/ReadHSV(hsv) - if(!hsv) - return - - // interpret the HSV or HSVA value - var/i=1,start=1 - if(text2ascii(hsv) == 35) - ++start // skip opening # - var/ch,which=0,hue=0,sat=0,val=0,alpha=0,usealpha - var/digits=0 - for(i=start, i <= length(hsv), ++i) - ch = text2ascii(hsv, i) - if(ch < 48 || (ch > 57 && ch < 65) || (ch > 70 && ch < 97) || ch > 102) - break - ++digits - if(digits == 9) - break - if(digits > 7) - usealpha = 1 - if(digits <= 4) - ++which - if(digits <= 2) - ++which - for(i=start, digits>0, ++i) - ch = text2ascii(hsv, i) - if(ch >= 48 && ch <= 57) - ch -= 48 - else if(ch >= 65 && ch <= 70) - ch -= 55 - else if(ch >= 97 && ch <= 102) - ch -= 87 - else - break - --digits - switch(which) - if(0) - hue = (hue << 4) | ch - if(digits == (usealpha ? 6 : 4)) - ++which - if(1) - sat = (sat << 4) | ch - if(digits == (usealpha ? 4 : 2)) - ++which - if(2) - val = (val << 4) | ch - if(digits == (usealpha ? 2 : 0)) - ++which - if(3) - alpha = (alpha << 4) | ch - - . = list(hue, sat, val) - if(usealpha) - . += alpha - -/proc/HSVtoRGB(hsv) - if(!hsv) - return "#000000" - var/list/HSV = ReadHSV(hsv) - if(!HSV) +/// Converts an rgb color into a list storing hsva +/// Exists because it's useful to have a guarenteed alpha value +/proc/rgb2hsv(rgb) + var/list/hsv = rgb2num(rgb, COLORSPACE_HSV) + if(length(hsv) < 4) + hsv += 255 // Max alpha, just to make life easy + return hsv + +/// Converts a list storing hsva into an rgb color +/proc/hsv2rgb(hsv) + if(length(hsv) < 3) return "#000000" - - var/hue = HSV[1] - var/sat = HSV[2] - var/val = HSV[3] - - // Compress hue into easier-to-manage range - hue -= hue >> 8 - if(hue >= 0x5fa) - hue -= 0x5fa - - var/hi,mid,lo,r,g,b - hi = val - lo = round((255 - sat) * val / 255, 1) - mid = lo + round(abs(round(hue, 510) - hue) * (hi - lo) / 255, 1) - if(hue >= 765) - if(hue >= 1275) {r=hi; g=lo; b=mid} - else if(hue >= 1020) {r=mid; g=lo; b=hi } - else {r=lo; g=mid; b=hi } - else - if(hue >= 510) {r=lo; g=hi; b=mid} - else if(hue >= 255) {r=mid; g=hi; b=lo } - else {r=hi; g=mid; b=lo } - - return (HSV.len > 3) ? rgb(r,g,b,HSV[4]) : rgb(r,g,b) - -/proc/RGBtoHSV(rgb) - if(!rgb) - return "#0000000" - var/list/RGB = ReadRGB(rgb) - if(!RGB) - return "#0000000" - - var/r = RGB[1] - var/g = RGB[2] - var/b = RGB[3] - var/hi = max(r,g,b) - var/lo = min(r,g,b) - - var/val = hi - var/sat = hi ? round((hi-lo) * 255 / hi, 1) : 0 - var/hue = 0 - - if(sat) - var/dir - var/mid - if(hi == r) - if(lo == b) {hue=0; dir=1; mid=g} - else {hue=1535; dir=-1; mid=b} - else if(hi == g) - if(lo == r) {hue=512; dir=1; mid=b} - else {hue=511; dir=-1; mid=r} - else if(hi == b) - if(lo == g) {hue=1024; dir=1; mid=r} - else {hue=1023; dir=-1; mid=g} - hue += dir * round((mid-lo) * 255 / (hi-lo), 1) - - return hsv(hue, sat, val, (RGB.len>3 ? RGB[4] : null)) - -/proc/hsv(hue, sat, val, alpha) - if(hue < 0 || hue >= 1536) - hue %= 1536 - if(hue < 0) - hue += 1536 - if((hue & 0xFF) == 0xFF) - ++hue - if(hue >= 1536) - hue = 0 - if(sat < 0) - sat = 0 - if(sat > 255) - sat = 255 - if(val < 0) - val = 0 - if(val > 255) - val = 255 - . = "#" - . += TO_HEX_DIGIT(hue >> 8) - . += TO_HEX_DIGIT(hue >> 4) - . += TO_HEX_DIGIT(hue) - . += TO_HEX_DIGIT(sat >> 4) - . += TO_HEX_DIGIT(sat) - . += TO_HEX_DIGIT(val >> 4) - . += TO_HEX_DIGIT(val) - if(!isnull(alpha)) - if(alpha < 0) - alpha = 0 - if(alpha > 255) - alpha = 255 - . += TO_HEX_DIGIT(alpha >> 4) - . += TO_HEX_DIGIT(alpha) + if(length(hsv) == 3) + return rgb(hsv[1], hsv[2], hsv[3], space = COLORSPACE_HSV) + return rgb(hsv[1], hsv[2], hsv[3], hsv[4], space = COLORSPACE_HSV) /* - Smooth blend between HSV colors + Smooth blend between RGB colors interpreted as HSV + amount=0 is the first color amount=1 is the second color amount=0.5 is directly between the two colors + amount<0 or amount>1 are allowed */ /proc/BlendHSV(hsv1, hsv2, amount) - var/list/HSV1 = ReadHSV(hsv1) - var/list/HSV2 = ReadHSV(hsv2) - - // add missing alpha if needed - if(HSV1.len < HSV2.len) - HSV1 += 255 - else if(HSV2.len < HSV1.len) - HSV2 += 255 - var/usealpha = HSV1.len > 3 - - // normalize hsv values in case anything is screwy - if(HSV1[1] > 1536) - HSV1[1] %= 1536 - if(HSV2[1] > 1536) - HSV2[1] %= 1536 - if(HSV1[1] < 0) - HSV1[1] += 1536 - if(HSV2[1] < 0) - HSV2[1] += 1536 - if(!HSV1[3]) {HSV1[1] = 0; HSV1[2] = 0} - if(!HSV2[3]) {HSV2[1] = 0; HSV2[2] = 0} - - // no value for one color means don't change saturation - if(!HSV1[3]) - HSV1[2] = HSV2[2] - if(!HSV2[3]) - HSV2[2] = HSV1[2] - // no saturation for one color means don't change hues - if(!HSV1[2]) - HSV1[1] = HSV2[1] - if(!HSV2[2]) - HSV2[1] = HSV1[1] - - // Compress hues into easier-to-manage range - HSV1[1] -= HSV1[1] >> 8 - HSV2[1] -= HSV2[1] >> 8 - - var/hue_diff = HSV2[1] - HSV1[1] - if(hue_diff > 765) - hue_diff -= 1530 - else if(hue_diff <= -765) - hue_diff += 1530 - - var/hue = round(HSV1[1] + hue_diff * amount, 1) - var/sat = round(HSV1[2] + (HSV2[2] - HSV1[2]) * amount, 1) - var/val = round(HSV1[3] + (HSV2[3] - HSV1[3]) * amount, 1) - var/alpha = usealpha ? round(HSV1[4] + (HSV2[4] - HSV1[4]) * amount, 1) : null - - // normalize hue - if(hue < 0 || hue >= 1530) - hue %= 1530 - if(hue < 0) - hue += 1530 - // decompress hue - hue += round(hue / 255) - - return hsv(hue, sat, val, alpha) + return hsv_gradient(amount, 0, hsv1, 1, hsv2, "loop") /* Smooth blend between RGB colors + amount=0 is the first color amount=1 is the second color amount=0.5 is directly between the two colors + amount<0 or amount>1 are allowed */ /proc/BlendRGB(rgb1, rgb2, amount) - var/list/RGB1 = ReadRGB(rgb1) - var/list/RGB2 = ReadRGB(rgb2) - - // add missing alpha if needed - if(RGB1.len < RGB2.len) - RGB1 += 255 - else if(RGB2.len < RGB1.len) - RGB2 += 255 - var/usealpha = RGB1.len > 3 - - var/r = round(RGB1[1] + (RGB2[1] - RGB1[1]) * amount, 1) - var/g = round(RGB1[2] + (RGB2[2] - RGB1[2]) * amount, 1) - var/b = round(RGB1[3] + (RGB2[3] - RGB1[3]) * amount, 1) - var/alpha = usealpha ? round(RGB1[4] + (RGB2[4] - RGB1[4]) * amount, 1) : null - - return isnull(alpha) ? rgb(r, g, b) : rgb(r, g, b, alpha) - -/proc/BlendRGBasHSV(rgb1, rgb2, amount) - return HSVtoRGB(RGBtoHSV(rgb1), RGBtoHSV(rgb2), amount) + return rgb_gradient(amount, 0, rgb1, 1, rgb2, "loop") /proc/HueToAngle(hue) // normalize hsv in case anything is screwy @@ -596,10 +330,9 @@ world hue += round(hue / 255) return hue - // positive angle rotates forward through red->green->blue -/proc/RotateHue(hsv, angle) - var/list/HSV = ReadHSV(hsv) +/proc/RotateHue(rgb, angle) + var/list/HSV = rgb2hsv(rgb) // normalize hsv in case anything is screwy if(HSV[1] >= 1536) @@ -622,18 +355,18 @@ world // decompress hue HSV[1] += round(HSV[1] / 255) - return hsv(HSV[1], HSV[2], HSV[3], (HSV.len > 3 ? HSV[4] : null)) + return hsv2rgb(HSV) // Convert an rgb color to grayscale /proc/GrayScale(rgb) - var/list/RGB = ReadRGB(rgb) + var/list/RGB = rgb2num(rgb) var/gray = RGB[1]*0.3 + RGB[2]*0.59 + RGB[3]*0.11 return (RGB.len > 3) ? rgb(gray, gray, gray, RGB[4]) : rgb(gray, gray, gray) // Change grayscale color to black->tone->white range /proc/ColorTone(rgb, tone) - var/list/RGB = ReadRGB(rgb) - var/list/TONE = ReadRGB(tone) + var/list/RGB = rgb2num(rgb) + var/list/TONE = rgb2num(tone) var/gray = RGB[1]*0.3 + RGB[2]*0.59 + RGB[3]*0.11 var/tone_gray = TONE[1]*0.3 + TONE[2]*0.59 + TONE[3]*0.11 @@ -1013,7 +746,9 @@ GLOBAL_LIST_EMPTY(friendly_animal_types) var/static/list/humanoid_icon_cache = list() if(icon_id && humanoid_icon_cache[icon_id]) return humanoid_icon_cache[icon_id] + var/mob/living/carbon/human/dummy/body = generate_or_wait_for_human_dummy(dummy_key) + if(prefs) prefs.apply_prefs_to(body, TRUE) @@ -1021,7 +756,7 @@ GLOBAL_LIST_EMPTY(friendly_animal_types) if(job) body.dna.species.pre_equip_species_outfit(job, body, TRUE) if(outfit) - body.equip_outfit_and_loadout(outfit, prefs, TRUE) //NOVA EDIT CHANGE + body.equip_outfit_and_loadout(outfit, prefs, TRUE) // NOVA EDIT CHANGE - ORIGINAL: body.equipOutfit(outfit, TRUE) var/icon/out_icon = icon('icons/effects/effects.dmi', "nothing") for(var/direction in showDirs) @@ -1319,6 +1054,7 @@ GLOBAL_LIST_EMPTY(friendly_animal_types) GLOBAL_LIST_EMPTY(transformation_animation_objects) + /* * Creates animation that turns current icon into result appearance from top down. * @@ -1498,7 +1234,7 @@ GLOBAL_LIST_EMPTY(transformation_animation_objects) var/list/icon_dimensions = get_icon_dimensions(source.icon) var/width = icon_dimensions["width"] var/height = icon_dimensions["height"] - + if(width > world.icon_size) alert_overlay.pixel_x = -(world.icon_size / 2) * ((width - world.icon_size) / world.icon_size) if(height > world.icon_size) diff --git a/code/__HELPERS/matrices.dm b/code/__HELPERS/matrices.dm index e6a9e038849..68b94fc2fe6 100644 --- a/code/__HELPERS/matrices.dm +++ b/code/__HELPERS/matrices.dm @@ -178,7 +178,7 @@ round(cos_inv_third+sqrt3_sin, 0.001), round(cos_inv_third-sqrt3_sin, 0.001), ro if(!color) return COLOR_MATRIX_IDENTITY if(istext(color)) - var/list/L = ReadRGB(color) + var/list/L = rgb2num(color) if(!L) var/message = "Invalid/unsupported color ([color]) argument in color_to_full_rgba_matrix()" if(return_identity_on_fail) @@ -193,7 +193,7 @@ round(cos_inv_third+sqrt3_sin, 0.001), round(cos_inv_third-sqrt3_sin, 0.001), ro if(3 to 5) // row-by-row hexadecimals . = list() for(var/a in 1 to L.len) - var/list/rgb = ReadRGB(L[a]) + var/list/rgb = rgb2num(L[a]) for(var/b in rgb) . += b/255 if(length(rgb) % 4) // RGB has no alpha instruction diff --git a/code/__HELPERS/memory_helpers.dm b/code/__HELPERS/memory_helpers.dm index bc916b2d20f..807610af864 100644 --- a/code/__HELPERS/memory_helpers.dm +++ b/code/__HELPERS/memory_helpers.dm @@ -113,6 +113,11 @@ /datum/mind/proc/wipe_memory() QDEL_LIST_ASSOC_VAL(memories) +/// Helder to wipe the passed memory type ONLY from our list of memories +/datum/mind/proc/wipe_memory_type(memory_type) + qdel(memories[memory_type]) + memories -= memory_type + /// Helper to create quick copies of all of our memories /// Quick copies aren't full copies - just basic copies containing necessities. /// They cannot be used in stories. diff --git a/code/__HELPERS/mobs.dm b/code/__HELPERS/mobs.dm index c35c591bc7c..9f4fea5ed11 100644 --- a/code/__HELPERS/mobs.dm +++ b/code/__HELPERS/mobs.dm @@ -501,6 +501,19 @@ GLOBAL_LIST_EMPTY(species_list) if(!HAS_TRAIT(L, TRAIT_PASSTABLE)) L.pass_flags &= ~PASSTABLE +/proc/passwindow_on(target, source) + var/mob/living/target_mob = target + if (!HAS_TRAIT(target_mob, TRAIT_PASSWINDOW) && target_mob.pass_flags & PASSWINDOW) + ADD_TRAIT(target_mob, TRAIT_PASSWINDOW, INNATE_TRAIT) + ADD_TRAIT(target_mob, TRAIT_PASSWINDOW, source) + target_mob.pass_flags |= PASSWINDOW + +/proc/passwindow_off(target, source) + var/mob/living/target_mob = target + REMOVE_TRAIT(target_mob, TRAIT_PASSWINDOW, source) + if(!HAS_TRAIT(target_mob, TRAIT_PASSWINDOW)) + target_mob.pass_flags &= ~PASSWINDOW + /proc/dance_rotate(atom/movable/AM, datum/callback/callperrotate, set_original_dir=FALSE) set waitfor = FALSE var/originaldir = AM.dir diff --git a/code/__HELPERS/pronouns.dm b/code/__HELPERS/pronouns.dm index a099199cce0..df84c1cdcf4 100644 --- a/code/__HELPERS/pronouns.dm +++ b/code/__HELPERS/pronouns.dm @@ -386,3 +386,33 @@ temp_gender = gender if(temp_gender != PLURAL) return "es" + +/datum/mind/p_they(temp_gender) + return current?.p_they(temp_gender) || ..() + +/datum/mind/p_their(temp_gender) + return current?.p_their(temp_gender) || ..() + +/datum/mind/p_theirs(temp_gender) + return current?.p_theirs(temp_gender) || ..() + +/datum/mind/p_them(capitalized, temp_gender) + return current?.p_them(capitalized, temp_gender) || ..() + +/datum/mind/p_have(temp_gender) + return current?.p_have(temp_gender) || ..() + +/datum/mind/p_are(temp_gender) + return current?.p_are(temp_gender) || ..() + +/datum/mind/p_were(temp_gender) + return current?.p_were(temp_gender) || ..() + +/datum/mind/p_do(temp_gender) + return current?.p_do(temp_gender) || ..() + +/datum/mind/p_s(temp_gender) + return current?.p_s(temp_gender) || ..() + +/datum/mind/p_es(temp_gender) + return current?.p_es(temp_gender) || ..() diff --git a/code/__HELPERS/roundend.dm b/code/__HELPERS/roundend.dm index 03660568a7e..d8cff863625 100644 --- a/code/__HELPERS/roundend.dm +++ b/code/__HELPERS/roundend.dm @@ -508,11 +508,14 @@ GLOBAL_LIST_INIT(achievements_unlocked, list()) return "" /datum/controller/subsystem/ticker/proc/goal_report() + var/list/goals = SSstation.get_station_goals() + if(!length(goals)) + return null + var/list/parts = list() - if(GLOB.station_goals.len) - for(var/datum/station_goal/goal as anything in GLOB.station_goals) - parts += goal.get_result() - return "
    [parts.Join()]
" + for(var/datum/station_goal/goal as anything in SSstation.get_station_goals()) + parts += goal.get_result() + return "
    [parts.Join()]
" ///Generate a report for how much money is on station, as well as the richest crewmember on the station. /datum/controller/subsystem/ticker/proc/market_report() diff --git a/code/__HELPERS/spatial_info.dm b/code/__HELPERS/spatial_info.dm index 5a0d5c3f002..98e11b483ba 100644 --- a/code/__HELPERS/spatial_info.dm +++ b/code/__HELPERS/spatial_info.dm @@ -442,3 +442,31 @@ if(our_area == get_area(carbon)) return FALSE return TRUE + +/** + * Behaves like the orange() proc, but only looks in the outer range of the function (The "peel" of the orange). + * This is useful for things like checking if a mob is in a certain range, but not within a smaller range. + * + * @params outer_range - The outer range of the cicle to pull from. + * @params inner_range - The inner range of the circle to NOT pull from. + * @params center - The center of the circle to pull from, can be an atom (we'll apply get_turf() to it within circle_x_turfs procs.) + * @params view_based - If TRUE, we'll use circle_view_turfs instead of circle_range_turfs procs. + */ +/proc/turf_peel(outer_range, inner_range, center, view_based = FALSE) + if(inner_range > outer_range) // If the inner range is larger than the outer range, you're using this wrong. + CRASH("Turf peel inner range is larger than outer range!") + var/list/peel = list() + var/list/outer + var/list/inner + if(view_based) + outer = circle_view_turfs(center, outer_range) + inner = circle_view_turfs(center, inner_range) + else + outer = circle_range_turfs(center, outer_range) + inner = circle_range_turfs(center, inner_range) + for(var/turf/possible_spawn as anything in outer) + if(possible_spawn in inner) + continue + peel += possible_spawn + return peel + diff --git a/code/__HELPERS/text.dm b/code/__HELPERS/text.dm index d12ac9a2d50..ed239e65c10 100644 --- a/code/__HELPERS/text.dm +++ b/code/__HELPERS/text.dm @@ -1196,3 +1196,10 @@ GLOBAL_LIST_INIT(binary, list("0","1")) /proc/endswith(input_text, ending) var/input_length = LAZYLEN(ending) return !!findtext(input_text, ending, -input_length) + +/// Generate a grawlix string of length of the text argument. +/proc/grawlix(text) + var/grawlix = "" + for(var/iteration in 1 to length_char(text)) + grawlix += pick("@", "$", "?", "!", "#", "§", "*", "£", "%", "☠", "★", "☆", "¿", "⚡") + return grawlix diff --git a/code/__HELPERS/turfs.dm b/code/__HELPERS/turfs.dm index 069bf55576f..32a570ae8fc 100644 --- a/code/__HELPERS/turfs.dm +++ b/code/__HELPERS/turfs.dm @@ -228,13 +228,13 @@ Turf and target are separate in case you want to teleport some distance from a t //Find checked_atom's matrix so we can use it's X/Y pixel shifts var/matrix/atom_matrix = matrix(checked_atom.transform) - var/pixel_x_offset = checked_atom.pixel_x + atom_matrix.get_x_shift() - var/pixel_y_offset = checked_atom.pixel_y + atom_matrix.get_y_shift() + var/pixel_x_offset = checked_atom.pixel_x + checked_atom.pixel_w + atom_matrix.get_x_shift() + var/pixel_y_offset = checked_atom.pixel_y + checked_atom.pixel_z + atom_matrix.get_y_shift() //Irregular objects var/list/icon_dimensions = get_icon_dimensions(checked_atom.icon) - var/checked_atom_icon_height = icon_dimensions["width"] - var/checked_atom_icon_width = icon_dimensions["height"] + var/checked_atom_icon_height = icon_dimensions["height"] + var/checked_atom_icon_width = icon_dimensions["width"] if(checked_atom_icon_height != world.icon_size || checked_atom_icon_width != world.icon_size) pixel_x_offset += ((checked_atom_icon_width / world.icon_size) - 1) * (world.icon_size * 0.5) pixel_y_offset += ((checked_atom_icon_height / world.icon_size) - 1) * (world.icon_size * 0.5) diff --git a/code/__HELPERS/type2type.dm b/code/__HELPERS/type2type.dm index 98e48852094..7e97724b562 100644 --- a/code/__HELPERS/type2type.dm +++ b/code/__HELPERS/type2type.dm @@ -338,14 +338,15 @@ GLOBAL_LIST_INIT(modulo_angle_to_dir, list(NORTH,NORTHEAST,EAST,SOUTHEAST,SOUTH, var/length = length(string) if((length != 7 && length != 9) || length != length_char(string)) return COLOR_MATRIX_IDENTITY - var/r = hex2num(copytext(string, 2, 4))/255 - var/g = hex2num(copytext(string, 4, 6))/255 - var/b = hex2num(copytext(string, 6, 8))/255 + // For runtime safety + . = COLOR_MATRIX_IDENTITY + var/list/color = rgb2num(string) + var/r = color[1] / 255 + var/g = color[2] / 255 + var/b = color[3] / 255 var/a = 1 - if(length == 9) - a = hex2num(copytext(string, 8, 10))/255 - if(!isnum(r) || !isnum(g) || !isnum(b) || !isnum(a)) - return COLOR_MATRIX_IDENTITY + if(length(color) == 4) + a = color[4] / 255 return list(r,0,0,0, 0,g,0,0, 0,0,b,0, 0,0,0,a, 0,0,0,0) //will drop all values not on the diagonal diff --git a/code/__HELPERS/type_processing.dm b/code/__HELPERS/type_processing.dm index 117067a0578..dfd74f7e3c6 100644 --- a/code/__HELPERS/type_processing.dm +++ b/code/__HELPERS/type_processing.dm @@ -1,14 +1,60 @@ /proc/make_types_fancy(list/types) if (ispath(types)) types = list(types) - . = list() - for(var/type in types) - var/typename = "[type]" - // Longest paths comes first - var/static/list/TYPES_SHORTCUTS = list( - /obj/effect/decal/cleanable = "CLEANABLE", + var/static/list/types_to_replacement + var/static/list/replacement_to_text + if(!types_to_replacement) + // Longer paths come after shorter ones, try and keep the structure + var/list/work_from = list( + /datum = "DATUM", + /area = "AREA", + /atom/movable = "MOVABLE", + /obj = "OBJ", + /turf = "TURF", + /turf/closed = "CLOSED", + /turf/open = "OPEN", + + /mob = "MOB", + /mob/living = "LIVING", + /mob/living/carbon = "CARBON", + /mob/living/carbon/human = "HUMANOID", + /mob/living/simple_animal = "SIMPLE", + /mob/living/basic = "BASIC", + /mob/living/silicon = "SILICON", + /mob/living/silicon/robot = "CYBORG", + + /obj/item = "ITEM", + /obj/item/mecha_parts/mecha_equipment = "MECHA_EQUIP", + /obj/item/mecha_parts/mecha_equipment/weapon = "MECHA_WEAPON", + /obj/item/organ = "ORGAN", + /obj/item/mod/control = "MODSUIT", + /obj/item/mod/module = "MODSUIT_MOD", + /obj/item/gun = "GUN", + /obj/item/gun/magic = "GUN_MAGIC", + /obj/item/gun/energy = "GUN_ENERGY", + /obj/item/gun/energy/laser = "GUN_LASER", + /obj/item/gun/ballistic = "GUN_BALLISTIC", + /obj/item/gun/ballistic/automatic = "GUN_AUTOMATIC", + /obj/item/gun/ballistic/revolver = "GUN_REVOLVER", + /obj/item/gun/ballistic/rifle = "GUN_RIFLE", + /obj/item/gun/ballistic/shotgun = "GUN_SHOTGUN", + /obj/item/stack/sheet = "SHEET", + /obj/item/stack/sheet/mineral = "MINERAL_SHEET", + /obj/item/stack/ore = "ORE", + /obj/item/ai_module = "AI_LAW_MODULE", + /obj/item/circuitboard = "CIRCUITBOARD", + /obj/item/circuitboard/machine = "MACHINE_BOARD", + /obj/item/circuitboard/computer = "COMPUTER_BOARD", + /obj/item/reagent_containers = "REAGENT_CONTAINERS", + /obj/item/reagent_containers/pill = "PILL", + /obj/item/reagent_containers/pill/patch = "MEDPATCH", + /obj/item/reagent_containers/hypospray/medipen = "MEDIPEN", + /obj/item/reagent_containers/cup/glass = "DRINK", + /obj/item/food = "FOOD", /obj/item/bodypart = "BODYPART", + /obj/effect/decal/cleanable = "CLEANABLE", /obj/item/radio/headset = "HEADSET", + /obj/item/clothing = "CLOTHING", /obj/item/clothing/accessory = "ACCESSORY", /obj/item/clothing/mask/gas = "GASMASK", /obj/item/clothing/mask = "MASK", @@ -21,75 +67,45 @@ /obj/item/clothing/head/helmet = "HELMET", /obj/item/clothing/head = "HEAD", /obj/item/clothing/neck = "NECK", - /obj/item/clothing = "CLOTHING", /obj/item/storage/backpack = "BACKPACK", /obj/item/storage/belt = "BELT", - /obj/item/book/manual = "MANUAL", /obj/item/storage/pill_bottle = "PILL_BOTTLE", - /obj/item/reagent_containers/pill/patch = "MEDPATCH", - /obj/item/reagent_containers/pill = "PILL", - /obj/item/reagent_containers/hypospray/medipen = "MEDIPEN", - /obj/item/reagent_containers/cup/glass = "DRINK", - /obj/item/food = "FOOD", - /obj/item/reagent_containers = "REAGENT_CONTAINERS", - /obj/machinery/atmospherics = "ATMOS_MECH", - /obj/machinery/portable_atmospherics = "PORT_ATMOS", - /obj/item/mecha_parts/mecha_equipment/weapon = "MECHA_WEAPON", - /obj/item/mecha_parts/mecha_equipment = "MECHA_EQUIP", - /obj/item/organ = "ORGAN", - /obj/item/mod/control = "MODSUIT", - /obj/item/mod/module = "MODSUIT_MOD", - /obj/item/gun/ballistic/automatic = "GUN_AUTOMATIC", - /obj/item/gun/ballistic/revolver = "GUN_REVOLVER", - /obj/item/gun/ballistic/rifle = "GUN_RIFLE", - /obj/item/gun/ballistic/shotgun = "GUN_SHOTGUN", - /obj/item/gun/ballistic = "GUN_BALLISTIC", - /obj/item/gun/energy/laser = "GUN_LASER", - /obj/item/gun/energy = "GUN_ENERGY", - /obj/item/gun/magic = "GUN_MAGIC", - /obj/item/gun = "GUN", - /obj/item/stack/sheet/mineral = "MINERAL_SHEET", - /obj/item/stack/sheet = "SHEET", - /obj/item/stack/ore = "ORE", - /obj/item/ai_module = "AI_LAW_MODULE", - /obj/item/circuitboard/machine = "MACHINE_BOARD", - /obj/item/circuitboard/computer = "COMPUTER_BOARD", - /obj/item/circuitboard = "CIRCUITBOARD", - /obj/item = "ITEM", - /obj/structure/closet/crate/secure = "LOCKED_CRATE", + /obj/item/book/manual = "MANUAL", + + /obj/structure = "STRUCTURE", + /obj/structure/closet = "CLOSET", /obj/structure/closet/crate = "CRATE", + /obj/structure/closet/crate/secure = "LOCKED_CRATE", /obj/structure/closet/secure_closet = "LOCKED_CLOSET", - /obj/structure/closet = "CLOSET", - /obj/structure = "STRUCTURE", - /obj/machinery/door/airlock = "AIRLOCK", + + /obj/machinery = "MACHINERY", + /obj/machinery/atmospherics = "ATMOS_MECH", + /obj/machinery/portable_atmospherics = "PORT_ATMOS", /obj/machinery/door = "DOOR", + /obj/machinery/door/airlock = "AIRLOCK", /obj/machinery/rnd/production = "RND_FABRICATOR", - /obj/machinery/computer/camera_advanced/shuttle_docker = "DOCKING_COMPUTER", /obj/machinery/computer = "COMPUTER", - /obj/machinery/vending/wardrobe = "JOBDROBE", + /obj/machinery/computer/camera_advanced/shuttle_docker = "DOCKING_COMPUTER", /obj/machinery/vending = "VENDING", - /obj/machinery = "MACHINERY", + /obj/machinery/vending/wardrobe = "JOBDROBE", /obj/effect = "EFFECT", /obj/projectile = "PROJECTILE", - /obj = "O", - /datum = "D", - /turf/open = "OPEN", - /turf/closed = "CLOSED", - /turf = "T", - /mob/living/carbon/human = "HUMANOID", - /mob/living/carbon = "CARBON", - /mob/living/simple_animal = "SIMPLE", - /mob/living/basic = "BASIC", - /mob/living/silicon/robot = "CYBORG", - /mob/living/silicon = "SILICON", - /mob/living = "LIVING", - /mob = "M", ) - for (var/tn in TYPES_SHORTCUTS) - if(copytext(typename, 1, length("[tn]/") + 1) == "[tn]/" /*findtextEx(typename,"[tn]/",1,2)*/ ) - typename = TYPES_SHORTCUTS[tn] + copytext(typename, length("[tn]/")) - break - .[typename] = type + // ignore_root_path so we can draw the root normally + types_to_replacement = zebra_typecacheof(work_from, ignore_root_path = TRUE) + replacement_to_text = list() + for(var/key in work_from) + replacement_to_text[work_from[key]] = "[key]" + + . = list() + for(var/type in types) + var/replace_with = types_to_replacement[type] + if(!replace_with) + .["[type]"] = type + continue + var/cut_out = replacement_to_text[replace_with] + // + 1 to account for / + .[replace_with + copytext("[type]", length(cut_out) + 1)] = type /proc/get_fancy_list_of_atom_types() var/static/list/pre_generated_list diff --git a/code/__HELPERS/~nova_helpers/is_helpers.dm b/code/__HELPERS/~nova_helpers/is_helpers.dm index 6c46b9295b1..75aa3ca1001 100644 --- a/code/__HELPERS/~nova_helpers/is_helpers.dm +++ b/code/__HELPERS/~nova_helpers/is_helpers.dm @@ -17,6 +17,7 @@ #define ishemophage(A) (is_species(A, /datum/species/hemophage)) #define issnail(A) (is_species(A, /datum/species/snail)) #define isluminescent(A) (is_species(A, /datum/species/jelly/luminescent)) +#define isprimitivedemihuman(A) (is_species(A, /datum/species/human/felinid/primitive)) //Antags #define ishorrorling(A) (istype(A, /mob/living/simple_animal/hostile/true_changeling)) #define iscorticalborer(A) (istype(A, /mob/living/basic/cortical_borer)) diff --git a/code/__byond_version_compat.dm b/code/__byond_version_compat.dm index f3677cf2c64..5eb4bda14e7 100644 --- a/code/__byond_version_compat.dm +++ b/code/__byond_version_compat.dm @@ -2,11 +2,11 @@ //Update this whenever you need to take advantage of more recent byond features #define MIN_COMPILER_VERSION 515 -#define MIN_COMPILER_BUILD 1609 +#define MIN_COMPILER_BUILD 1621 #if (DM_VERSION < MIN_COMPILER_VERSION || DM_BUILD < MIN_COMPILER_BUILD) && !defined(SPACEMAN_DMM) //Don't forget to update this part #error Your version of BYOND is too out-of-date to compile this project. Go to https://secure.byond.com/download and update. -#error You need version 515.1609 or higher +#error You need version 515.1621 or higher #endif // Keep savefile compatibilty at minimum supported level diff --git a/code/_globalvars/bitfields.dm b/code/_globalvars/bitfields.dm index 276d4d7dce2..ba2177ef64c 100644 --- a/code/_globalvars/bitfields.dm +++ b/code/_globalvars/bitfields.dm @@ -83,7 +83,6 @@ DEFINE_BITFIELD(car_traits, list( DEFINE_BITFIELD(clothing_flags, list( "ANTI_TINFOIL_MANEUVER" = ANTI_TINFOIL_MANEUVER, - "BLOCKS_SHOVE_KNOCKDOWN" = BLOCKS_SHOVE_KNOCKDOWN, "BLOCKS_SPEECH" = BLOCKS_SPEECH, "BLOCK_GAS_SMOKE_EFFECT" = BLOCK_GAS_SMOKE_EFFECT, "CASTING_CLOTHES" = CASTING_CLOTHES, @@ -307,6 +306,7 @@ DEFINE_BITFIELD(pass_flags, list( "PASSGRILLE" = PASSGRILLE, "PASSMOB" = PASSMOB, "PASSTABLE" = PASSTABLE, + "PASSWINDOW" = PASSWINDOW, )) DEFINE_BITFIELD(resistance_flags, list( diff --git a/code/_globalvars/game_modes.dm b/code/_globalvars/game_modes.dm index 893d5de66ce..8a1493e383d 100644 --- a/code/_globalvars/game_modes.dm +++ b/code/_globalvars/game_modes.dm @@ -7,3 +7,5 @@ GLOBAL_DATUM(start_state, /datum/station_state) // Used in round-end report /// We want reality_smash_tracker to exist only once and be accessible from anywhere. GLOBAL_DATUM_INIT(reality_smash_track, /datum/reality_smash_tracker, new) + +GLOBAL_DATUM(deathmatch_game, /datum/deathmatch_controller) // Deathmatch Minigame controller diff --git a/code/_globalvars/lists/flavor_misc.dm b/code/_globalvars/lists/flavor_misc.dm index 1fceed44004..d6ec01e5912 100644 --- a/code/_globalvars/lists/flavor_misc.dm +++ b/code/_globalvars/lists/flavor_misc.dm @@ -26,8 +26,8 @@ GLOBAL_LIST_EMPTY(snouts_list) GLOBAL_LIST_EMPTY(horns_list) GLOBAL_LIST_EMPTY(frills_list) GLOBAL_LIST_EMPTY(spines_list) +GLOBAL_LIST_EMPTY(tail_spines_list) GLOBAL_LIST_EMPTY(legs_list) -GLOBAL_LIST_EMPTY(animated_spines_list) //Mutant Human bits GLOBAL_LIST_EMPTY(tails_list_human) diff --git a/code/_globalvars/lists/maintenance_loot.dm b/code/_globalvars/lists/maintenance_loot.dm index fe4d88468df..8fa866896b2 100644 --- a/code/_globalvars/lists/maintenance_loot.dm +++ b/code/_globalvars/lists/maintenance_loot.dm @@ -258,6 +258,8 @@ GLOBAL_LIST_INIT(uncommon_loot, list(//uncommon: useful items /obj/item/computer_disk/maintenance/scanner = 1, ///obj/item/computer_disk/maintenance/camera = 1, //NOVA EDIT REMOVAL - Available To Crew Now /obj/item/computer_disk/maintenance/modsuit_control = 1, + /obj/item/computer_disk/maintenance/spectre_meter = 1, + /obj/item/computer_disk/maintenance/arcade = 1, /obj/item/computer_disk/maintenance/theme = 3, ) = 3, //NOVA EDIT CHANGE - Original : 4 diff --git a/code/_globalvars/lists/mapping.dm b/code/_globalvars/lists/mapping.dm index 8ac2f0d3ddf..b77942bad87 100644 --- a/code/_globalvars/lists/mapping.dm +++ b/code/_globalvars/lists/mapping.dm @@ -107,6 +107,7 @@ GLOBAL_LIST_EMPTY(generic_event_spawns) /// essentially allowing a user to override generic job spawnpoints with a specific one GLOBAL_LIST_EMPTY(jobspawn_overrides) +GLOBAL_LIST_EMPTY(gorilla_start) GLOBAL_LIST_EMPTY(wizardstart) GLOBAL_LIST_EMPTY(nukeop_start) GLOBAL_LIST_EMPTY(nukeop_leader_start) diff --git a/code/_globalvars/lists/names.dm b/code/_globalvars/lists/names.dm index bc195bcf5f4..c51fbaa9eb7 100644 --- a/code/_globalvars/lists/names.dm +++ b/code/_globalvars/lists/names.dm @@ -25,6 +25,7 @@ GLOBAL_LIST_INIT(megacarp_first_names, world.file2list("strings/names/megacarp1. GLOBAL_LIST_INIT(megacarp_last_names, world.file2list("strings/names/megacarp2.txt")) GLOBAL_LIST_INIT(cyberauth_names, world.file2list("strings/names/cyberauth.txt")) GLOBAL_LIST_INIT(syndicate_monkey_names, world.file2list("strings/names/syndicate_monkey.txt")) +GLOBAL_LIST_INIT(cargorilla_names, world.file2list("strings/names/cargorilla.txt")) GLOBAL_LIST_INIT(guardian_first_names, world.file2list("strings/names/guardian_descriptions.txt")) GLOBAL_LIST_INIT(guardian_tech_surnames, world.file2list("strings/names/guardian_gamepieces.txt")) GLOBAL_LIST_INIT(guardian_fantasy_surnames, world.file2list("strings/names/guardian_tarot.txt")) diff --git a/code/_globalvars/lists/ores_spawned.dm b/code/_globalvars/lists/ores_spawned.dm new file mode 100644 index 00000000000..227e06061ad --- /dev/null +++ b/code/_globalvars/lists/ores_spawned.dm @@ -0,0 +1,35 @@ +/** + * Sets of global lists breaking down the base spawning distributions for various maps and stations. + * + * Currently used for ore vents on roundstart when the map is generated. (See ore_vent.dm, seedRuins() and ore_generation.dm) + * Ore vent lists here are copied to ore_vent_minerals on ruin seeding, + * in order to dynamically adjust the spawn rates as materials are picked and set a global ore distribution from vents. + * + * By default vents pull 4 unique materials each, but this can vary with subtypes. + */ + +GLOBAL_LIST_INIT(ore_vent_minerals_lavaland, list( + /datum/material/iron = 13, + /datum/material/glass = 12, + /datum/material/plasma = 9, + /datum/material/titanium = 6, + /datum/material/silver = 5, + /datum/material/gold = 5, + /datum/material/diamond = 3, + /datum/material/uranium = 3, + /datum/material/bluespace = 3, + /datum/material/plastic = 1, + )) + +GLOBAL_LIST_INIT(ore_vent_minerals_triple_z, list( + /datum/material/iron = 24, + /datum/material/glass = 23, + /datum/material/plasma = 16, + /datum/material/titanium = 10, + /datum/material/silver = 8, + /datum/material/gold = 7, + /datum/material/diamond = 4, + /datum/material/uranium = 4, + /datum/material/bluespace = 3, + /datum/material/plastic = 1, + )) diff --git a/code/_globalvars/lists/silo.dm b/code/_globalvars/lists/silo.dm new file mode 100644 index 00000000000..6cb4a7851d5 --- /dev/null +++ b/code/_globalvars/lists/silo.dm @@ -0,0 +1,2 @@ +///List of logs shared by all silos +GLOBAL_LIST_EMPTY(silo_access_logs) diff --git a/code/_globalvars/silo.dm b/code/_globalvars/silo.dm new file mode 100644 index 00000000000..07526caec20 --- /dev/null +++ b/code/_globalvars/silo.dm @@ -0,0 +1,2 @@ +///The global ore silo shared by all machines at round start +GLOBAL_DATUM(ore_silo_default, /obj/machinery/ore_silo) diff --git a/code/_globalvars/traits/_traits.dm b/code/_globalvars/traits/_traits.dm index 7075bf9912f..3d1087dcd6d 100644 --- a/code/_globalvars/traits/_traits.dm +++ b/code/_globalvars/traits/_traits.dm @@ -32,6 +32,7 @@ GLOBAL_LIST_INIT(traits_by_type, list( "TRAIT_AREA_SENSITIVE" = TRAIT_AREA_SENSITIVE, "TRAIT_ASHSTORM_IMMUNE" = TRAIT_ASHSTORM_IMMUNE, "TRAIT_BLOCKING_EXPLOSIVES" = TRAIT_BLOCKING_EXPLOSIVES, + "TRAIT_BOULDER_BREAKER" = TRAIT_BOULDER_BREAKER, "TRAIT_CASTABLE_LOC" = TRAIT_CASTABLE_LOC, "TRAIT_DEL_ON_SPACE_DUMP" = TRAIT_DEL_ON_SPACE_DUMP, "TRAIT_FISH_CASE_COMPATIBILE" = TRAIT_FISH_CASE_COMPATIBILE, @@ -52,6 +53,7 @@ GLOBAL_LIST_INIT(traits_by_type, list( "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_ENGRAVABLE" = TRAIT_NOT_ENGRAVABLE, "TRAIT_ODD_CUSTOMIZABLE_FOOD_INGREDIENT" = TRAIT_ODD_CUSTOMIZABLE_FOOD_INGREDIENT, "TRAIT_RUNECHAT_HIDDEN" = TRAIT_RUNECHAT_HIDDEN, @@ -62,13 +64,16 @@ GLOBAL_LIST_INIT(traits_by_type, list( "TRAIT_UNIQUE_IMMERSE" = TRAIT_UNIQUE_IMMERSE, "TRAIT_VOIDSTORM_IMMUNE" = TRAIT_VOIDSTORM_IMMUNE, "TRAIT_WAS_RENAMED" = TRAIT_WAS_RENAMED, + "TRAIT_WADDLING" = TRAIT_WADDLING, "TRAIT_WEATHER_IMMUNE" = TRAIT_WEATHER_IMMUNE, + "TRAIT_CHASM_STOPPER" = TRAIT_CHASM_STOPPER, ), /datum/controller/subsystem/economy = list( "TRAIT_MARKET_CRASHING" = TRAIT_MARKET_CRASHING, ), // AKA SSstation /datum/controller/subsystem/processing/station = list( + "STATION_TRAIT_ASSISTANT_GIMMICKS" = STATION_TRAIT_ASSISTANT_GIMMICKS, "STATION_TRAIT_BANANIUM_SHIPMENTS" = STATION_TRAIT_BANANIUM_SHIPMENTS, "STATION_TRAIT_BIGGER_PODS" = STATION_TRAIT_BIGGER_PODS, "STATION_TRAIT_BIRTHDAY" = STATION_TRAIT_BIRTHDAY, @@ -97,6 +102,9 @@ GLOBAL_LIST_INIT(traits_by_type, list( /datum/wound = list( "TRAIT_WOUND_SCANNED" = TRAIT_WOUND_SCANNED, ), + /obj = list( + "TRAIT_WALLMOUNTED" = TRAIT_WALLMOUNTED, + ), /mob = list( "TRAIT_ABDUCTOR_SCIENTIST_TRAINING" = TRAIT_ABDUCTOR_SCIENTIST_TRAINING, "TRAIT_ABDUCTOR_TRAINING" = TRAIT_ABDUCTOR_TRAINING, @@ -104,17 +112,18 @@ GLOBAL_LIST_INIT(traits_by_type, list( "TRAIT_ADVANCEDTOOLUSER" = TRAIT_ADVANCEDTOOLUSER, "TRAIT_AGENDER" = TRAIT_AGENDER, "TRAIT_AGEUSIA" = TRAIT_AGEUSIA, - "TRAIT_AI_BAGATTACK" = TRAIT_AI_BAGATTACK, "TRAIT_AIRLOCK_SHOCKIMMUNE" = TRAIT_AIRLOCK_SHOCKIMMUNE, + "TRAIT_AI_BAGATTACK" = TRAIT_AI_BAGATTACK, "TRAIT_ALCOHOL_TOLERANCE" = TRAIT_ALCOHOL_TOLERANCE, - "TRAIT_ALLOW_HERETIC_CASTING" = TRAIT_ALLOW_HERETIC_CASTING, "TRAIT_ALLOWED_HONORBOUND_ATTACK" = TRAIT_ALLOWED_HONORBOUND_ATTACK, + "TRAIT_ALLOW_HERETIC_CASTING" = TRAIT_ALLOW_HERETIC_CASTING, "TRAIT_ALWAYS_NO_ACCESS" = TRAIT_ALWAYS_NO_ACCESS, + "TRAIT_ALWAYS_WANTED" = TRAIT_ALWAYS_WANTED, "TRAIT_ANGELIC" = TRAIT_ANGELIC, "TRAIT_ANTENNAE" = TRAIT_ANTENNAE, "TRAIT_ANTICONVULSANT" = TRAIT_ANTICONVULSANT, - "TRAIT_ANTIMAGIC_NO_SELFBLOCK" = TRAIT_ANTIMAGIC_NO_SELFBLOCK, "TRAIT_ANTIMAGIC" = TRAIT_ANTIMAGIC, + "TRAIT_ANTIMAGIC_NO_SELFBLOCK" = TRAIT_ANTIMAGIC_NO_SELFBLOCK, "TRAIT_ANXIOUS" = TRAIT_ANXIOUS, "TRAIT_BADDNA" = TRAIT_BADDNA, "TRAIT_BADTOUCH" = TRAIT_BADTOUCH, @@ -122,37 +131,36 @@ GLOBAL_LIST_INIT(traits_by_type, list( "TRAIT_BATON_RESISTANCE" = TRAIT_BATON_RESISTANCE, "TRAIT_BEING_BLADE_SHIELDED" = TRAIT_BEING_BLADE_SHIELDED, "TRAIT_BLOB_ALLY" = TRAIT_BLOB_ALLY, - "TRAIT_BLOOD_CLANS" = TRAIT_BLOOD_CLANS, - "TRAIT_BLOOD_DEFICIENCY" = TRAIT_BLOOD_DEFICIENCY, "TRAIT_BLOODSHOT_EYES" = TRAIT_BLOODSHOT_EYES, "TRAIT_BLOODY_MESS" = TRAIT_BLOODY_MESS, + "TRAIT_BLOOD_CLANS" = TRAIT_BLOOD_CLANS, + "TRAIT_BLOOD_DEFICIENCY" = TRAIT_BLOOD_DEFICIENCY, "TRAIT_BOMBIMMUNE" = TRAIT_BOMBIMMUNE, "TRAIT_BONSAI" = TRAIT_BONSAI, "TRAIT_BOOZE_SLIDER" = TRAIT_BOOZE_SLIDER, "TRAIT_BRAINWASHING" = TRAIT_BRAINWASHING, "TRAIT_BYPASS_EARLY_IRRADIATED_CHECK" = TRAIT_BYPASS_EARLY_IRRADIATED_CHECK, "TRAIT_BYPASS_MEASURES" = TRAIT_BYPASS_MEASURES, - "TRAIT_CAN_HOLD_ITEMS" = TRAIT_CAN_HOLD_ITEMS, - "TRAIT_CAN_SIGN_ON_COMMS" = TRAIT_CAN_SIGN_ON_COMMS, - "TRAIT_CAN_STRIP" = TRAIT_CAN_STRIP, - "TRAIT_CAN_USE_NUKE" = TRAIT_CAN_USE_NUKE, "TRAIT_CANNOT_BE_UNBUCKLED" = TRAIT_CANNOT_BE_UNBUCKLED, "TRAIT_CANNOT_CRYSTALIZE" = TRAIT_CANNOT_CRYSTALIZE, "TRAIT_CANNOT_OPEN_PRESENTS" = TRAIT_CANNOT_OPEN_PRESENTS, "TRAIT_CANT_RIDE" = TRAIT_CANT_RIDE, + "TRAIT_CAN_HOLD_ITEMS" = TRAIT_CAN_HOLD_ITEMS, + "TRAIT_CAN_SIGN_ON_COMMS" = TRAIT_CAN_SIGN_ON_COMMS, + "TRAIT_CAN_STRIP" = TRAIT_CAN_STRIP, + "TRAIT_CAN_USE_NUKE" = TRAIT_CAN_USE_NUKE, "TRAIT_CATLIKE_GRACE" = TRAIT_CATLIKE_GRACE, "TRAIT_CHANGELING_HIVEMIND_MUTE" = TRAIT_CHANGELING_HIVEMIND_MUTE, "TRAIT_CHASM_DESTROYED" = TRAIT_CHASM_DESTROYED, "TRAIT_CHEF_KISS" = TRAIT_CHEF_KISS, - "TRAIT_CHUNKYFINGERS_IGNORE_BATON" = TRAIT_CHUNKYFINGERS_IGNORE_BATON, "TRAIT_CHUNKYFINGERS" = TRAIT_CHUNKYFINGERS, + "TRAIT_CHUNKYFINGERS_IGNORE_BATON" = TRAIT_CHUNKYFINGERS_IGNORE_BATON, "TRAIT_CLEANBOT_WHISPERER" = TRAIT_CLEANBOT_WHISPERER, "TRAIT_CLIFF_WALKER" = TRAIT_CLIFF_WALKER, "TRAIT_CLOWN_ENJOYER" = TRAIT_CLOWN_ENJOYER, "TRAIT_CLUMSY" = TRAIT_CLUMSY, "TRAIT_COAGULATING" = TRAIT_COAGULATING, "TRAIT_CORPSELOCKED" = TRAIT_CORPSELOCKED, - "TRAIT_ALWAYS_WANTED" = TRAIT_ALWAYS_WANTED, "TRAIT_CRITICAL_CONDITION" = TRAIT_CRITICAL_CONDITION, "TRAIT_CULT_HALO" = TRAIT_CULT_HALO, "TRAIT_CURSED" = TRAIT_CURSED, @@ -175,8 +183,8 @@ GLOBAL_LIST_INIT(traits_by_type, list( "TRAIT_DUMB" = TRAIT_DUMB, "TRAIT_DWARF" = TRAIT_DWARF, "TRAIT_EASILY_WOUNDED" = TRAIT_EASILY_WOUNDED, - "TRAIT_EASYDISMEMBER" = TRAIT_EASYDISMEMBER, "TRAIT_EASYBLEED" = TRAIT_EASYBLEED, + "TRAIT_EASYDISMEMBER" = TRAIT_EASYDISMEMBER, "TRAIT_ECHOLOCATION_EXTRA_RANGE" = TRAIT_ECHOLOCATION_EXTRA_RANGE, "TRAIT_ECHOLOCATION_RECEIVER" = TRAIT_ECHOLOCATION_RECEIVER, "TRAIT_ELDRITCH_PAINTING_EXAMINE" = TRAIT_ELDRITCH_PAINTING_EXAMINE, @@ -190,6 +198,8 @@ GLOBAL_LIST_INIT(traits_by_type, list( "TRAIT_FAKEDEATH" = TRAIT_FAKEDEATH, "TRAIT_FAST_TYING" = TRAIT_FAST_TYING, "TRAIT_FASTMED" = TRAIT_FASTMED, + "TRAIT_FAST_CUFFING" = TRAIT_FAST_CUFFING, + "TRAIT_FAST_TYING" = TRAIT_FAST_TYING, "TRAIT_FAT" = TRAIT_FAT, "TRAIT_FEARLESS" = TRAIT_FEARLESS, "TRAIT_FENCE_CLIMBER" = TRAIT_FENCE_CLIMBER, @@ -203,10 +213,10 @@ GLOBAL_LIST_INIT(traits_by_type, list( "TRAIT_FORCED_GRAVITY" = TRAIT_FORCED_GRAVITY, "TRAIT_FORCED_STANDING" = TRAIT_FORCED_STANDING, "TRAIT_FOV_APPLIED" = TRAIT_FOV_APPLIED, + "TRAIT_FREERUNNING" = TRAIT_FREERUNNING, "TRAIT_FREE_FLOAT_MOVEMENT" = TRAIT_FREE_FLOAT_MOVEMENT, "TRAIT_FREE_HYPERSPACE_MOVEMENT" = TRAIT_FREE_HYPERSPACE_MOVEMENT, "TRAIT_FREE_HYPERSPACE_SOFTCORDON_MOVEMENT" = TRAIT_FREE_HYPERSPACE_SOFTCORDON_MOVEMENT, - "TRAIT_FREERUNNING" = TRAIT_FREERUNNING, "TRAIT_FRIENDLY" = TRAIT_FRIENDLY, "TRAIT_FUGU_GLANDED" = TRAIT_FUGU_GLANDED, "TRAIT_GAMER" = TRAIT_GAMER, @@ -218,12 +228,13 @@ GLOBAL_LIST_INIT(traits_by_type, list( "TRAIT_GOOD_HEARING" = TRAIT_GOOD_HEARING, "TRAIT_GRABWEAKNESS" = TRAIT_GRABWEAKNESS, "TRAIT_GREENTEXT_CURSED" = TRAIT_GREENTEXT_CURSED, - "TRAIT_GUN_NATURAL" = TRAIT_GUN_NATURAL, "TRAIT_GUNFLIP" = TRAIT_GUNFLIP, + "TRAIT_GUN_NATURAL" = TRAIT_GUN_NATURAL, "TRAIT_HALT_RADIATION_EFFECTS" = TRAIT_HALT_RADIATION_EFFECTS, "TRAIT_HANDS_BLOCKED" = TRAIT_HANDS_BLOCKED, "TRAIT_HARDLY_WOUNDED" = TRAIT_HARDLY_WOUNDED, "TRAIT_HAS_BEEN_KIDNAPPED" = TRAIT_HAS_BEEN_KIDNAPPED, + "TRAIT_HAS_CRANIAL_FISSURE" = TRAIT_HAS_CRANIAL_FISSURE, "TRAIT_HAS_MARKINGS" = TRAIT_HAS_MARKINGS, "TRAIT_HATED_BY_DOGS" = TRAIT_HATED_BY_DOGS, "TRAIT_HEALS_FROM_CARP_RIFTS" = TRAIT_HEALS_FROM_CARP_RIFTS, @@ -244,36 +255,34 @@ GLOBAL_LIST_INIT(traits_by_type, list( "TRAIT_IGNORING_GRAVITY" = TRAIT_IGNORING_GRAVITY, "TRAIT_ILLITERATE" = TRAIT_ILLITERATE, "TRAIT_IMMOBILIZED" = TRAIT_IMMOBILIZED, - "TRAIT_IN_CALL" = TRAIT_IN_CALL, "TRAIT_INCAPACITATED" = TRAIT_INCAPACITATED, "TRAIT_INTROVERT" = TRAIT_INTROVERT, "TRAIT_INVISIBLE_MAN" = TRAIT_INVISIBLE_MAN, "TRAIT_INVISIMIN" = TRAIT_INVISIMIN, + "TRAIT_IN_CALL" = TRAIT_IN_CALL, "TRAIT_IWASBATONED" = TRAIT_IWASBATONED, "TRAIT_JOLLY" = TRAIT_JOLLY, "TRAIT_KISS_OF_DEATH" = TRAIT_KISS_OF_DEATH, "TRAIT_KNOCKEDOUT" = TRAIT_KNOCKEDOUT, "TRAIT_KNOW_ENGI_WIRES" = TRAIT_KNOW_ENGI_WIRES, "TRAIT_KNOW_ROBO_WIRES" = TRAIT_KNOW_ROBO_WIRES, + "TRAIT_LIGHTBULB_REMOVER" = TRAIT_LIGHTBULB_REMOVER, "TRAIT_LIGHT_DRINKER" = TRAIT_LIGHT_DRINKER, "TRAIT_LIGHT_STEP" = TRAIT_LIGHT_STEP, - "TRAIT_LIGHTBULB_REMOVER" = TRAIT_LIGHTBULB_REMOVER, "TRAIT_LIMBATTACHMENT" = TRAIT_LIMBATTACHMENT, "TRAIT_LITERATE" = TRAIT_LITERATE, "TRAIT_LIVERLESS_METABOLISM" = TRAIT_LIVERLESS_METABOLISM, - "TRAIT_LIVERLESS_METABOLISM" = TRAIT_LIVERLESS_METABOLISM, "TRAIT_MADNESS_IMMUNE" = TRAIT_MADNESS_IMMUNE, "TRAIT_MAGICALLY_GIFTED" = TRAIT_MAGICALLY_GIFTED, "TRAIT_MAGICALLY_PHASED" = TRAIT_MAGICALLY_PHASED, "TRAIT_MARTIAL_ARTS_IMMUNE" = TRAIT_MARTIAL_ARTS_IMMUNE, "TRAIT_MEDIBOTCOMINGTHROUGH" = TRAIT_MEDIBOTCOMINGTHROUGH, - "TRAIT_MEDIBOTCOMINGTHROUGH" = TRAIT_MEDIBOTCOMINGTHROUGH, "TRAIT_MEDICAL_HUD" = TRAIT_MEDICAL_HUD, "TRAIT_MESON_VISION" = TRAIT_MESON_VISION, "TRAIT_MIME_FAN" = TRAIT_MIME_FAN, "TRAIT_MIMING" = TRAIT_MIMING, - "TRAIT_MIND_TEMPORARILY_GONE" = TRAIT_MIND_TEMPORARILY_GONE, "TRAIT_MINDSHIELD" = TRAIT_MINDSHIELD, + "TRAIT_MIND_TEMPORARILY_GONE" = TRAIT_MIND_TEMPORARILY_GONE, "TRAIT_MOB_BREEDER" = TRAIT_MOB_BREEDER, "TRAIT_MOB_TIPPED" = TRAIT_MOB_TIPPED, "TRAIT_MORBID" = TRAIT_MORBID, @@ -288,11 +297,30 @@ GLOBAL_LIST_INIT(traits_by_type, list( "TRAIT_NICE_SHOT" = TRAIT_NICE_SHOT, "TRAIT_NIGHT_VISION" = TRAIT_NIGHT_VISION, "TRAIT_NO_ACCENT" = TRAIT_NO_ACCENT, //FF add - autoaccent + "TRAIT_NOBLOOD" = TRAIT_NOBLOOD, + "TRAIT_NOBREATH" = TRAIT_NOBREATH, + "TRAIT_NOCRITDAMAGE" = TRAIT_NOCRITDAMAGE, + "TRAIT_NOCRITOVERLAY" = TRAIT_NOCRITOVERLAY, + "TRAIT_NODEATH" = TRAIT_NODEATH, + "TRAIT_NODISMEMBER" = TRAIT_NODISMEMBER, + "TRAIT_NOFAT" = TRAIT_NOFAT, + "TRAIT_NOFEAR_HOLDUPS" = TRAIT_NOFEAR_HOLDUPS, + "TRAIT_NOFIRE" = TRAIT_NOFIRE, + "TRAIT_NOFIRE_SPREAD" = TRAIT_NOFIRE_SPREAD, + "TRAIT_NOFLASH" = TRAIT_NOFLASH, + "TRAIT_NOGUNS" = TRAIT_NOGUNS, + "TRAIT_NOHARDCRIT" = TRAIT_NOHARDCRIT, + "TRAIT_NOHUNGER" = TRAIT_NOHUNGER, + "TRAIT_NOLIMBDISABLE" = TRAIT_NOLIMBDISABLE, + "TRAIT_NOMOBSWAP" = TRAIT_NOMOBSWAP, + "TRAIT_NOSELFIGNITION_HEAD_ONLY" = TRAIT_NOSELFIGNITION_HEAD_ONLY, + "TRAIT_NOSOFTCRIT" = TRAIT_NOSOFTCRIT, "TRAIT_NO_AUGMENTS" = TRAIT_NO_AUGMENTS, "TRAIT_NO_BLOOD_OVERLAY" = TRAIT_NO_BLOOD_OVERLAY, "TRAIT_NO_DEBRAIN_OVERLAY" = TRAIT_NO_DEBRAIN_OVERLAY, "TRAIT_NO_DNA_COPY" = TRAIT_NO_DNA_COPY, "TRAIT_NO_DNA_SCRAMBLE" = TRAIT_NO_DNA_SCRAMBLE, + "TRAIT_NO_EXTINGUISH" = TRAIT_NO_EXTINGUISH, "TRAIT_NO_FLOATING_ANIM" = TRAIT_NO_FLOATING_ANIM, "TRAIT_NO_GLIDE" = TRAIT_NO_GLIDE, "TRAIT_NO_PLASMA_TRANSFORM" = TRAIT_NO_PLASMA_TRANSFORM, @@ -307,37 +335,20 @@ GLOBAL_LIST_INIT(traits_by_type, list( "TRAIT_NO_SLIP_SLIDE" = TRAIT_NO_SLIP_SLIDE, "TRAIT_NO_SLIP_WATER" = TRAIT_NO_SLIP_WATER, "TRAIT_NO_SOUL" = TRAIT_NO_SOUL, + "TRAIT_NO_STAGGER" = TRAIT_NO_STAGGER, "TRAIT_NO_STRIP" = TRAIT_NO_STRIP, "TRAIT_NO_TRANSFORM" = TRAIT_NO_TRANSFORM, "TRAIT_NO_TWOHANDING" = TRAIT_NO_TWOHANDING, "TRAIT_NOCRITDAMAGE" = TRAIT_NOCRITDAMAGE, "TRAIT_NO_UNDERWEAR" = TRAIT_NO_UNDERWEAR, "TRAIT_NO_ZOMBIFY" = TRAIT_NO_ZOMBIFY, - "TRAIT_NOBLOOD" = TRAIT_NOBLOOD, - "TRAIT_NOBREATH" = TRAIT_NOBREATH, - "TRAIT_NOCRITDAMAGE" = TRAIT_NOCRITDAMAGE, - "TRAIT_NOCRITOVERLAY" = TRAIT_NOCRITOVERLAY, - "TRAIT_NODEATH" = TRAIT_NODEATH, - "TRAIT_NODISMEMBER" = TRAIT_NODISMEMBER, - "TRAIT_NOFAT" = TRAIT_NOFAT, - "TRAIT_NOFEAR_HOLDUPS" = TRAIT_NOFEAR_HOLDUPS, - "TRAIT_NOFIRE_SPREAD" = TRAIT_NOFIRE_SPREAD, - "TRAIT_NOFIRE" = TRAIT_NOFIRE, - "TRAIT_NOFLASH" = TRAIT_NOFLASH, - "TRAIT_NOGUNS" = TRAIT_NOGUNS, - "TRAIT_NOHARDCRIT" = TRAIT_NOHARDCRIT, - "TRAIT_NOHUNGER" = TRAIT_NOHUNGER, - "TRAIT_NOLIMBDISABLE" = TRAIT_NOLIMBDISABLE, - "TRAIT_NOMOBSWAP" = TRAIT_NOMOBSWAP, - "TRAIT_NOSELFIGNITION_HEAD_ONLY" = TRAIT_NOSELFIGNITION_HEAD_ONLY, - "TRAIT_NOSOFTCRIT" = TRAIT_NOSOFTCRIT, "TRAIT_NUKEIMMUNE" = TRAIT_NUKEIMMUNE, "TRAIT_OIL_FRIED" = TRAIT_OIL_FRIED, "TRAIT_ON_ELEVATED_SURFACE" = TRAIT_ON_ELEVATED_SURFACE, "TRAIT_ORBITING_FORBIDDEN" = TRAIT_ORBITING_FORBIDDEN, "TRAIT_OVERDOSEIMMUNE" = TRAIT_OVERDOSEIMMUNE, - "TRAIT_OVERWATCH_IMMUNE" = TRAIT_OVERWATCH_IMMUNE, "TRAIT_OVERWATCHED" = TRAIT_OVERWATCHED, + "TRAIT_OVERWATCH_IMMUNE" = TRAIT_OVERWATCH_IMMUNE, "TRAIT_PACIFISM" = TRAIT_PACIFISM, "TRAIT_PARALYSIS_L_ARM" = TRAIT_PARALYSIS_L_ARM, "TRAIT_PARALYSIS_L_LEG" = TRAIT_PARALYSIS_L_LEG, @@ -345,9 +356,9 @@ GLOBAL_LIST_INIT(traits_by_type, list( "TRAIT_PARALYSIS_R_LEG" = TRAIT_PARALYSIS_R_LEG, "TRAIT_PARROT_PERCHED" = TRAIT_PARROT_PERCHED, "TRAIT_PASSTABLE" = TRAIT_PASSTABLE, + "TRAIT_PASSWINDOW" = TRAIT_PASSWINDOW, "TRAIT_PERFECT_ATTACKER" = TRAIT_PERFECT_ATTACKER, "TRAIT_PERMANENTLY_MORTAL" = TRAIT_PERMANENTLY_MORTAL, - "TRAIT_PERMANENTLY_ONFIRE" = TRAIT_PERMANENTLY_ONFIRE, "TRAIT_PHOTOGRAPHER" = TRAIT_PHOTOGRAPHER, "TRAIT_PIERCEIMMUNE" = TRAIT_PIERCEIMMUNE, "TRAIT_PLANT_SAFE" = TRAIT_PLANT_SAFE, @@ -360,9 +371,9 @@ GLOBAL_LIST_INIT(traits_by_type, list( "TRAIT_PROSOPAGNOSIA" = TRAIT_PROSOPAGNOSIA, "TRAIT_PULL_BLOCKED" = TRAIT_PULL_BLOCKED, "TRAIT_PUSHIMMUNE" = TRAIT_PUSHIMMUNE, + "TRAIT_QUICKER_CARRY" = TRAIT_QUICKER_CARRY, "TRAIT_QUICK_BUILD" = TRAIT_QUICK_BUILD, "TRAIT_QUICK_CARRY" = TRAIT_QUICK_CARRY, - "TRAIT_QUICKER_CARRY" = TRAIT_QUICKER_CARRY, "TRAIT_RADIMMUNE" = TRAIT_RADIMMUNE, "TRAIT_RDS_SUPPRESSED" = TRAIT_RDS_SUPPRESSED, "TRAIT_REAGENT_SCANNER" = TRAIT_REAGENT_SCANNER, @@ -392,7 +403,9 @@ GLOBAL_LIST_INIT(traits_by_type, list( "TRAIT_SHAVED" = TRAIT_SHAVED, "TRAIT_SHIFTY_EYES" = TRAIT_SHIFTY_EYES, "TRAIT_SHOCKIMMUNE" = TRAIT_SHOCKIMMUNE, + "TRAIT_SHOVE_KNOCKDOWN_BLOCKED" = TRAIT_SHOVE_KNOCKDOWN_BLOCKED, "TRAIT_SIGN_LANG" = TRAIT_SIGN_LANG, + "TRAIT_PAPER_MASTER" = TRAIT_PAPER_MASTER, "TRAIT_SILENT_FOOTSTEPS" = TRAIT_SILENT_FOOTSTEPS, "TRAIT_SIXTHSENSE" = TRAIT_SIXTHSENSE, "TRAIT_SKITTISH" = TRAIT_SKITTISH, @@ -422,6 +435,7 @@ GLOBAL_LIST_INIT(traits_by_type, list( "TRAIT_TACKLING_FRAIL_ATTACKER" = TRAIT_TACKLING_FRAIL_ATTACKER, "TRAIT_TACKLING_TAILED_DEFENDER" = TRAIT_TACKLING_TAILED_DEFENDER, "TRAIT_TACKLING_WINGED_ATTACKER" = TRAIT_TACKLING_WINGED_ATTACKER, + "TRAIT_TACTICALLY_CAMOUFLAGED" = TRAIT_TACTICALLY_CAMOUFLAGED, "TRAIT_TAGGER" = TRAIT_TAGGER, "TRAIT_TEMPORARY_BODY" = TRAIT_TEMPORARY_BODY, "TRAIT_TENACIOUS" = TRAIT_TENACIOUS, @@ -453,20 +467,21 @@ GLOBAL_LIST_INIT(traits_by_type, list( "TRAIT_VATGROWN" = TRAIT_VATGROWN, "TRAIT_VENTCRAWLER_ALWAYS" = TRAIT_VENTCRAWLER_ALWAYS, "TRAIT_VENTCRAWLER_NUDE" = TRAIT_VENTCRAWLER_NUDE, - "TRAIT_VIRUS_RESISTANCE" = TRAIT_VIRUS_RESISTANCE, "TRAIT_VIRUSIMMUNE" = TRAIT_VIRUSIMMUNE, + "TRAIT_VIRUS_RESISTANCE" = TRAIT_VIRUS_RESISTANCE, "TRAIT_VORACIOUS" = TRAIT_VORACIOUS, "TRAIT_WAS_EVOLVED" = TRAIT_WAS_EVOLVED, "TRAIT_WEAK_SOUL" = TRAIT_WEAK_SOUL, "TRAIT_WEB_SURFER" = TRAIT_WEB_SURFER, "TRAIT_WEB_WEAVER" = TRAIT_WEB_WEAVER, "TRAIT_WINE_TASTER" = TRAIT_WINE_TASTER, - "TRAIT_WING_BUFFET_TIRED" = TRAIT_WING_BUFFET_TIRED, "TRAIT_WING_BUFFET" = TRAIT_WING_BUFFET, + "TRAIT_WING_BUFFET_TIRED" = TRAIT_WING_BUFFET_TIRED, "TRAIT_XENO_HOST" = TRAIT_XENO_HOST, "TRAIT_XENO_IMMUNE" = TRAIT_XENO_IMMUNE, "TRAIT_XRAY_HEARING" = TRAIT_XRAY_HEARING, "TRAIT_XRAY_VISION" = TRAIT_XRAY_VISION, + "TRAIT_DISCO_DANCER" = TRAIT_DISCO_DANCER, ), /obj/item = list( "TRAIT_APC_SHOCKING" = TRAIT_APC_SHOCKING, @@ -493,6 +508,7 @@ GLOBAL_LIST_INIT(traits_by_type, list( "TRAIT_UNCATCHABLE" = TRAIT_UNCATCHABLE, "TRAIT_WIELDED" = TRAIT_WIELDED, "TRAIT_BAKEABLE" = TRAIT_BAKEABLE, + "TRAIT_INSTANTLY_PROCESSES_BOULDERS" = TRAIT_INSTANTLY_PROCESSES_BOULDERS, ), /obj/item/ammo_casing = list( "TRAIT_DART_HAS_INSERT" = TRAIT_DART_HAS_INSERT, @@ -500,6 +516,7 @@ GLOBAL_LIST_INIT(traits_by_type, list( /obj/item/bodypart = list( "TRAIT_DISABLED_BY_WOUND" = TRAIT_DISABLED_BY_WOUND, "TRAIT_IGNORED_BY_LIVING_FLESH" = TRAIT_IGNORED_BY_LIVING_FLESH, + "TRAIT_IMMUNE_TO_CRANIAL_FISSURE" = TRAIT_IMMUNE_TO_CRANIAL_FISSURE, ), /obj/item/bodypart = list( "TRAIT_PARALYSIS" = TRAIT_PARALYSIS, @@ -555,6 +572,9 @@ GLOBAL_LIST_INIT(traits_by_type, list( /obj/item/reagent_containers = list( "TRAIT_MAY_CONTAIN_BLENDED_DUST" = TRAIT_MAY_CONTAIN_BLENDED_DUST, ), + /obj/machinery/modular_computer = list( + "TRAIT_MODPC_INTERACTING_WITH_FRAME" = TRAIT_MODPC_INTERACTING_WITH_FRAME, + ), /obj/projectile = list( "TRAIT_ALWAYS_HIT_ZONE" = TRAIT_ALWAYS_HIT_ZONE, ), @@ -630,6 +650,7 @@ GLOBAL_LIST_INIT(traits_by_type, list( "TRAIT_REVIVES_BY_HEALING" = TRAIT_REVIVES_BY_HEALING, "TRAIT_RIGGER" = TRAIT_RIGGER, "TRAIT_ROBOTIC_DNA_ORGANS" = TRAIT_ROBOTIC_DNA_ORGANS, + "TRAIT_ROBOTIC_LIMBATTACHMENT" = TRAIT_ROBOTIC_LIMBATTACHMENT, "TRAIT_ROPEBUNNY" = TRAIT_ROPEBUNNY, "TRAIT_RSD_COMPATIBLE" = TRAIT_RSD_COMPATIBLE, "TRAIT_SACRIFICED" = TRAIT_SACRIFICED , @@ -649,6 +670,7 @@ GLOBAL_LIST_INIT(traits_by_type, list( "TRAIT_XENOARCH_QUALIFIED" = TRAIT_XENOARCH_QUALIFIED, "TRAIT_XENO_HEAL_AURA" = TRAIT_XENO_HEAL_AURA, "TRAIT_XENO_INNATE" = TRAIT_XENO_INNATE, + "TRAIT_TWITCH_ADAPTED" = TRAIT_TWITCH_ADAPTED, "TRAIT_CLOTHES_DAMAGED_BY_PIERCING" = TRAIT_CLOTHES_DAMAGED_BY_PIERCING, ), // NOVA EDIT ADDITION END diff --git a/code/_globalvars/traits/admin_tooling.dm b/code/_globalvars/traits/admin_tooling.dm index e73502c621c..54f9db6b89c 100644 --- a/code/_globalvars/traits/admin_tooling.dm +++ b/code/_globalvars/traits/admin_tooling.dm @@ -69,6 +69,7 @@ GLOBAL_LIST_INIT(admin_visible_traits, list( "TRAIT_EMPATH" = TRAIT_EMPATH, "TRAIT_EXPANDED_FOV" = TRAIT_EXPANDED_FOV, "TRAIT_FAKEDEATH" = TRAIT_FAKEDEATH, + "TRAIT_FAST_CUFFING" = TRAIT_FAST_CUFFING, "TRAIT_FAT" = TRAIT_FAT, "TRAIT_FEARLESS" = TRAIT_FEARLESS, "TRAIT_FENCE_CLIMBER" = TRAIT_FENCE_CLIMBER, @@ -112,7 +113,7 @@ GLOBAL_LIST_INIT(admin_visible_traits, list( "TRAIT_LIMBATTACHMENT" = TRAIT_LIMBATTACHMENT, "TRAIT_LITERATE" = TRAIT_LITERATE, "TRAIT_LIVERLESS_METABOLISM" = TRAIT_LIVERLESS_METABOLISM, - "TRAIT_LIVERLESS_METABOLISM" = TRAIT_LIVERLESS_METABOLISM, + "TRAIT_MAGICALLY_GIFTED" = TRAIT_MAGICALLY_GIFTED, "TRAIT_MEDICAL_HUD" = TRAIT_MEDICAL_HUD, "TRAIT_MIME_FAN" = TRAIT_MIME_FAN, "TRAIT_MIMING" = TRAIT_MIMING, @@ -128,6 +129,7 @@ GLOBAL_LIST_INIT(admin_visible_traits, list( "TRAIT_NO_AUGMENTS" = TRAIT_NO_AUGMENTS, "TRAIT_NO_BLOOD_OVERLAY" = TRAIT_NO_BLOOD_OVERLAY, "TRAIT_NO_DNA_COPY" = TRAIT_NO_DNA_COPY, + "TRAIT_NO_EXTINGUISH" = TRAIT_NO_EXTINGUISH, "TRAIT_NO_GLIDE" = TRAIT_NO_GLIDE, "TRAIT_NO_PLASMA_TRANSFORM" = TRAIT_NO_PLASMA_TRANSFORM, "TRAIT_NO_SLIP_ALL" = TRAIT_NO_SLIP_ALL, @@ -160,8 +162,8 @@ GLOBAL_LIST_INIT(admin_visible_traits, list( "TRAIT_PARALYSIS_R_ARM" = TRAIT_PARALYSIS_R_ARM, "TRAIT_PARALYSIS_R_LEG" = TRAIT_PARALYSIS_R_LEG, "TRAIT_PASSTABLE" = TRAIT_PASSTABLE, + "TRAIT_PASSWINDOW" = TRAIT_PASSWINDOW, "TRAIT_PERFECT_ATTACKER" = TRAIT_PERFECT_ATTACKER, - "TRAIT_PERMANENTLY_ONFIRE" = TRAIT_PERMANENTLY_ONFIRE, "TRAIT_PHOTOGRAPHER" = TRAIT_PHOTOGRAPHER, "TRAIT_PIERCEIMMUNE" = TRAIT_PIERCEIMMUNE, "TRAIT_PLANT_SAFE" = TRAIT_PLANT_SAFE, @@ -187,6 +189,7 @@ GLOBAL_LIST_INIT(admin_visible_traits, list( "TRAIT_SHIFTY_EYES" = TRAIT_SHIFTY_EYES, "TRAIT_SHOCKIMMUNE" = TRAIT_SHOCKIMMUNE, "TRAIT_SIGN_LANG" = TRAIT_SIGN_LANG, + "TRAIT_PAPER_MASTER" = TRAIT_PAPER_MASTER, "TRAIT_SILENT_FOOTSTEPS" = TRAIT_SILENT_FOOTSTEPS, "TRAIT_SIXTHSENSE" = TRAIT_SIXTHSENSE, "TRAIT_SKITTISH" = TRAIT_SKITTISH, @@ -346,6 +349,7 @@ GLOBAL_LIST_INIT(admin_visible_traits, list( "TRAIT_XENOARCH_QUALIFIED" = TRAIT_XENOARCH_QUALIFIED, "TRAIT_XENO_HEAL_AURA" = TRAIT_XENO_HEAL_AURA, "TRAIT_XENO_INNATE" = TRAIT_XENO_INNATE, + "TRAIT_TWITCH_ADAPTED" = TRAIT_TWITCH_ADAPTED, "TRAIT_CLOTHES_DAMAGED_BY_PIERCING" = TRAIT_CLOTHES_DAMAGED_BY_PIERCING, ), // NOVA EDIT ADDITION END diff --git a/code/_onclick/ai.dm b/code/_onclick/ai.dm index 7660b0c7bc3..067f2b013b7 100644 --- a/code/_onclick/ai.dm +++ b/code/_onclick/ai.dm @@ -11,7 +11,7 @@ return if(ismob(A)) - ai_tracking_tool.set_tracked_mob(src, A.name) + ai_tracking_tool.track_mob(src, A) else A.move_camera_by_click() diff --git a/code/_onclick/click.dm b/code/_onclick/click.dm index c907f45466d..3cb12ad8188 100644 --- a/code/_onclick/click.dm +++ b/code/_onclick/click.dm @@ -358,46 +358,26 @@ /atom/proc/CtrlClick(mob/user) SEND_SIGNAL(src, COMSIG_CLICK_CTRL, user) SEND_SIGNAL(user, COMSIG_MOB_CTRL_CLICKED, src) + var/mob/living/ML = user if(istype(ML)) ML.pulled(src) if(!can_interact(user)) return FALSE -/mob/living/CtrlClick(mob/user) +/mob/living/CtrlClick(mob/living/user) if(!isliving(user) || !user.CanReach(src) || user.incapacitated()) return ..() if(world.time < user.next_move) return FALSE - var/mob/living/user_living = user - if(user_living.apply_martial_art(src, null, is_grab=TRUE) == MARTIAL_ATTACK_SUCCESS) - user_living.changeNext_move(CLICK_CD_MELEE) + if(user.grab(src)) + user.changeNext_move(CLICK_CD_MELEE) return TRUE return ..() - -/mob/living/carbon/human/CtrlClick(mob/user) - if(!iscarbon(user) || !user.CanReach(src) || user.incapacitated()) - return ..() - - if(world.time < user.next_move) - return FALSE - - if (ishuman(user)) - var/mob/living/carbon/human/human_user = user - if(human_user.dna.species.grab(human_user, src, human_user.mind.martial_art)) - human_user.changeNext_move(CLICK_CD_MELEE) - return TRUE - else if(isalien(user)) - var/mob/living/carbon/alien/adult/alien_boy = user - if(alien_boy.grab(src)) - alien_boy.changeNext_move(CLICK_CD_MELEE) - return TRUE - return ..() - /mob/proc/CtrlMiddleClickOn(atom/A) if(check_rights_for(client, R_ADMIN)) client.toggle_tag_datum(A) diff --git a/code/_onclick/hud/action_button.dm b/code/_onclick/hud/action_button.dm index 533e8f1e8dd..92defc66101 100644 --- a/code/_onclick/hud/action_button.dm +++ b/code/_onclick/hud/action_button.dm @@ -18,6 +18,8 @@ /// A weakref of the last thing we hovered over /// God I hate how dragging works var/datum/weakref/last_hovored_ref + /// overlay for keybind maptext + var/mutable_appearance/keybind_maptext /atom/movable/screen/movable/action_button/Destroy() if(our_hud) @@ -48,6 +50,9 @@ return FALSE var/list/modifiers = params2list(params) + if(LAZYACCESS(modifiers, ALT_CLICK)) + begin_creating_bind(usr) + return TRUE if(LAZYACCESS(modifiers, SHIFT_CLICK)) var/datum/hud/our_hud = usr.hud_used our_hud.position_action(src, SCRN_OBJ_DEFAULT) @@ -61,6 +66,14 @@ linked_action.Trigger(trigger_flags = trigger_flags) return TRUE +/atom/movable/screen/movable/action_button/proc/begin_creating_bind(mob/user) + if(!isnull(linked_action.full_key)) + linked_action.full_key = null + linked_action.update_button_status(src) + return + linked_action.full_key = tgui_input_keycombo(user, "Please bind a key for this action.") + linked_action.update_button_status(src) + // Entered and Exited won't fire while you're dragging something, because you're still "holding" it // Very much byond logic, but I want nice behavior, so we fake it with drag /atom/movable/screen/movable/action_button/MouseDrag(atom/over_object, src_location, over_location, src_control, over_control, params) @@ -149,6 +162,15 @@ return user.client.prefs.action_buttons_screen_locs -= "[name]_[id]" +/atom/movable/screen/movable/action_button/proc/update_keybind_maptext(key) + cut_overlay(keybind_maptext) + if(!key) + return + keybind_maptext = new + keybind_maptext.maptext = MAPTEXT("[key]") + keybind_maptext.transform = keybind_maptext.transform.Translate(-4, length(key) > 1 ? -6 : 2) //with modifiers, its placed lower so cooldown is visible + add_overlay(keybind_maptext) + /** * This is a silly proc used in hud code code to determine what icon and icon state we should be using * for hud elements (such as action buttons) that don't have their own icon and icon state set. @@ -241,7 +263,7 @@ action.HideFrom(src) /atom/movable/screen/button_palette - desc = "Drag buttons to move them
Shift-click any button to reset it
Alt-click this to reset all buttons" + desc = "Drag buttons to move them
Shift-click any button to reset it
Alt-click any button to begin binding it to a key
Alt-click this to reset all buttons" icon = 'icons/hud/64x16_actions.dmi' icon_state = "screen_gen_palette" screen_loc = ui_action_palette diff --git a/code/_onclick/hud/alert.dm b/code/_onclick/hud/alert.dm index e73cebf14c0..1f5f7588162 100644 --- a/code/_onclick/hud/alert.dm +++ b/code/_onclick/hud/alert.dm @@ -464,7 +464,7 @@ or shoot a gun to move around via Newton's 3rd Law of Motion." var/mob/living/living_owner = owner var/last_whisper if(!HAS_TRAIT(living_owner, TRAIT_SUCCUMB_OVERRIDE)) - last_whisper = tgui_input_text(usr, "Do you have any last words?", "Goodnight, Sweet Prince") + last_whisper = tgui_input_text(usr, "Do you have any last words?", "Goodnight, Sweet Prince", encode = FALSE) // saycode already handles sanitization if(isnull(last_whisper)) if(!HAS_TRAIT(living_owner, TRAIT_SUCCUMB_OVERRIDE)) return diff --git a/code/_onclick/hud/fullscreen.dm b/code/_onclick/hud/fullscreen.dm index e928a2b8b3e..79f857e8cbe 100644 --- a/code/_onclick/hud/fullscreen.dm +++ b/code/_onclick/hud/fullscreen.dm @@ -223,4 +223,3 @@ icon_state = "noise" color = "#04a8d1" alpha = 80 - diff --git a/code/_onclick/hud/hud.dm b/code/_onclick/hud/hud.dm index aceb360c953..f18f44c2ecb 100644 --- a/code/_onclick/hud/hud.dm +++ b/code/_onclick/hud/hud.dm @@ -270,6 +270,7 @@ GLOBAL_LIST_INIT(available_erp_ui_styles, list( combo_display = null //NOVA EDIT START - SKYRAT HUD + ammo_counter = null wanted_lvl = null // NOVA EDIT END - SKYRAT HUD diff --git a/code/_onclick/hud/new_player.dm b/code/_onclick/hud/new_player.dm index 86735de1127..9cdf936fde0 100644 --- a/code/_onclick/hud/new_player.dm +++ b/code/_onclick/hud/new_player.dm @@ -1,38 +1,65 @@ -/* NOVA EDIT REMOVAL - Custom HTML Lobby Screen #define SHUTTER_MOVEMENT_DURATION 0.4 SECONDS #define SHUTTER_WAIT_DURATION 0.2 SECONDS +/// Maximum number of station trait buttons we will display, please think hard before creating scenarios where there are more than this +#define MAX_STATION_TRAIT_BUTTONS_VERTICAL 3 /datum/hud/new_player ///Whether the menu is currently on the client's screen or not var/menu_hud_status = TRUE /datum/hud/new_player/New(mob/owner) - ..() + . = ..() - if(!owner || !owner.client) + if (!owner || !owner.client) return - if(owner.client.interviewee) + if (owner.client.interviewee) return var/list/buttons = subtypesof(/atom/movable/screen/lobby) - for(var/button_type in buttons) - var/atom/movable/screen/lobby/lobbyscreen = new button_type(our_hud = src) + for (var/atom/movable/screen/lobby/lobbyscreen as anything in buttons) + if (!initial(lobbyscreen.always_available)) + continue + lobbyscreen = new lobbyscreen(our_hud = src) lobbyscreen.SlowInit() static_inventory += lobbyscreen - if(!lobbyscreen.always_shown) + if (!lobbyscreen.always_shown) lobbyscreen.RegisterSignal(src, COMSIG_HUD_LOBBY_COLLAPSED, TYPE_PROC_REF(/atom/movable/screen/lobby, collapse_button)) lobbyscreen.RegisterSignal(src, COMSIG_HUD_LOBBY_EXPANDED, TYPE_PROC_REF(/atom/movable/screen/lobby, expand_button)) - if(istype(lobbyscreen, /atom/movable/screen/lobby/button)) + if (istype(lobbyscreen, /atom/movable/screen/lobby/button)) var/atom/movable/screen/lobby/button/lobby_button = lobbyscreen lobby_button.owner = REF(owner) + add_station_trait_buttons() + +/// Display buttons for relevant station traits +/datum/hud/new_player/proc/add_station_trait_buttons() + if (!mymob?.client || mymob.client.interviewee || !length(GLOB.lobby_station_traits)) + return + var/buttons_created = 0 + var/y_offset = 397 + var/y_button_offset = 27 + for (var/datum/station_trait/trait as anything in GLOB.lobby_station_traits) + if (!trait.can_display_lobby_button(mymob.client)) + continue + var/atom/movable/screen/lobby/button/sign_up/sign_up_button = new(our_hud = src) + sign_up_button.SlowInit() + sign_up_button.owner = REF(mymob) + sign_up_button.screen_loc = offset_to_screen_loc(233, y_offset, mymob.client.view) + y_offset += y_button_offset + static_inventory += sign_up_button + trait.setup_lobby_button(sign_up_button) + buttons_created++ + if (buttons_created >= MAX_STATION_TRAIT_BUTTONS_VERTICAL) + return /atom/movable/screen/lobby plane = SPLASHSCREEN_PLANE layer = LOBBY_MENU_LAYER screen_loc = "TOP,CENTER" - ///Whether this HUD element can be hidden from the client's "screen" (moved off-screen) or not + /// Whether this HUD element can be hidden from the client's "screen" (moved off-screen) or not var/always_shown = FALSE + /// If true we will create this button every time the HUD is generated + var/always_available = TRUE ///Set the HUD in New, as lobby screens are made before Atoms are Initialized. /atom/movable/screen/lobby/New(loc, datum/hud/our_hud, ...) @@ -84,7 +111,7 @@ return flick("[base_icon_state]_pressed", src) update_appearance(UPDATE_ICON) - SEND_SOUND(hud.mymob, sound('modular_nova/master_files/sound/effects/save.ogg')) //NOVA EDIT ADDITION + SEND_SOUND(hud.mymob, sound('modular_nova/master_files/sound/effects/save.ogg')) // NOVA EDIT ADDITION return TRUE /atom/movable/screen/lobby/button/MouseEntered(location,control,params) @@ -184,12 +211,6 @@ return var/mob/dead/new_player/new_player = hud.mymob - // NOVA EDIT BEGIN - if(!is_admin(new_player.client) && length_char(new_player.client?.prefs?.read_preference(/datum/preference/text/flavor_text)) < FLAVOR_TEXT_CHAR_REQUIREMENT) - to_chat(new_player, span_notice("You need at least [FLAVOR_TEXT_CHAR_REQUIREMENT] characters of flavor text to ready up for the round. You have [length_char(new_player.client.prefs.read_preference(/datum/preference/text/flavor_text))] characters.")) - return - // NOVA EDIT END - ready = !ready if(ready) new_player.ready = PLAYER_READY_TO_PLAY @@ -253,18 +274,13 @@ to_chat(new_player, span_notice("You have been added to the queue to join the game. Your position in queue is [SSticker.queued_players.len].")) return - // NOVA EDIT BEGIN - if(length_char(new_player.client.prefs.read_preference(/datum/preference/text/flavor_text)) <= FLAVOR_TEXT_CHAR_REQUIREMENT) - to_chat(new_player, span_notice("You need at least [FLAVOR_TEXT_CHAR_REQUIREMENT] characters of flavor text to join the round. You have [length_char(new_player.client.prefs.read_preference(/datum/preference/text/flavor_text))] characters.")) - return - // NOVA EDIT END - if(!LAZYACCESS(params2list(params), CTRL_CLICK)) GLOB.latejoin_menu.ui_interact(new_player) else to_chat(new_player, span_warning("Opening emergency fallback late join menu! If THIS doesn't show, ahelp immediately!")) GLOB.latejoin_menu.fallback_ui(new_player) + /atom/movable/screen/lobby/button/join/proc/show_join_button() SIGNAL_HANDLER set_button_status(TRUE) @@ -413,6 +429,23 @@ var/mob/dead/new_player/new_player = hud.mymob new_player.handle_player_polling() +/// A generic "sign up" button used by station traits +/atom/movable/screen/lobby/button/sign_up + icon = 'icons/hud/lobby/signup_button.dmi' + icon_state = "signup" + base_icon_state = "signup" + always_available = FALSE + +/atom/movable/screen/lobby/button/sign_up/MouseEntered(location, control, params) + . = ..() + if(QDELETED(src) || !desc) + return + openToolTip(usr, tip_src = src, params = params, title = name, content = desc,) + +/atom/movable/screen/lobby/button/sign_up/MouseExited() + . = ..() + closeToolTip(usr) + /atom/movable/screen/lobby/button/collapse name = "Collapse Lobby Menu" icon = 'icons/hud/lobby/collapse_expand.dmi' @@ -540,5 +573,4 @@ #undef SHUTTER_MOVEMENT_DURATION #undef SHUTTER_WAIT_DURATION - -*/ // NOVA EDIT END +#undef MAX_STATION_TRAIT_BUTTONS_VERTICAL diff --git a/code/_onclick/hud/rendering/render_plate.dm b/code/_onclick/hud/rendering/render_plate.dm index f3d838f8594..d33162a5b5f 100644 --- a/code/_onclick/hud/rendering/render_plate.dm +++ b/code/_onclick/hud/rendering/render_plate.dm @@ -80,10 +80,6 @@ /atom/movable/screen/plane_master/rendering_plate/game_plate/Initialize(mapload, datum/hud/hud_owner) . = ..() add_filter("displacer", 1, displacement_map_filter(render_source = OFFSET_RENDER_TARGET(GRAVITY_PULSE_RENDER_TARGET, offset), size = 10)) - if(check_holidays(HALLOWEEN)) - // Makes things a tad greyscale (leaning purple) and drops low colors for vibes - // We're basically using alpha as better constant here btw - add_filter("spook_color", 2, color_matrix_filter(list(0.75,0.13,0.13,0, 0.13,0.7,0.13,0, 0.13,0.13,0.75,0, -0.06,-0.09,-0.08,1, 0,0,0,0))) /atom/movable/screen/plane_master/rendering_plate/game_plate/show_to(mob/mymob) . = ..() @@ -216,7 +212,7 @@
That's how lighting functions at base. Because it uses BLEND_MULTIPLY and occasionally color matrixes, it needs a backdrop of blackness.\
See This byond post\
Lemme see uh, we're masked by the emissive plane so it can actually function (IE: make things glow in the dark).\ -
We're also masked by the overlay lighting plane, which contains all the movable lights in the game. It draws to us and also the game plane.\ +
We're also masked by the overlay lighting plane, which contains all the well overlay lights in the game. It draws to us and also the game plane.\
Masks us out so it has the breathing room to apply its effect.\
Oh and we quite often have our alpha changed to achive night vision effects, or things of that sort." plane = RENDER_PLANE_LIGHTING diff --git a/code/_onclick/hud/screen_objects.dm b/code/_onclick/hud/screen_objects.dm index 372a32b3c68..ce5c97a63c7 100644 --- a/code/_onclick/hud/screen_objects.dm +++ b/code/_onclick/hud/screen_objects.dm @@ -55,6 +55,10 @@ /atom/movable/screen/proc/component_click(atom/movable/screen/component_button/component, params) return +/// Returns the mob this is being displayed to, if any +/atom/movable/screen/proc/get_mob() + return hud?.mymob + /atom/movable/screen/text icon = null icon_state = null diff --git a/code/_onclick/other_mobs.dm b/code/_onclick/other_mobs.dm index 04bbc048e66..ec79374cb4f 100644 --- a/code/_onclick/other_mobs.dm +++ b/code/_onclick/other_mobs.dm @@ -229,6 +229,9 @@ /mob/living/carbon/alien/larva/resolve_right_click_attack(atom/target, list/modifiers) return target.attack_larva_secondary(src, modifiers) +/mob/living/carbon/alien/larva/can_unarmed_attack() //We bite stuff, and our head is always free. + return TRUE + /atom/proc/attack_larva(mob/user, list/modifiers) return diff --git a/code/controllers/globals.dm b/code/controllers/globals.dm index a3520ab1ee3..9d5cce746a2 100644 --- a/code/controllers/globals.dm +++ b/code/controllers/globals.dm @@ -15,13 +15,12 @@ GLOBAL_REAL(GLOB, /datum/controller/global_vars) var/datum/controller/exclude_these = new // I know this is dumb but the nested vars list hangs a ref to the datum. This fixes that + // I have an issue report open, lummox has not responded. It might be a FeaTuRE + // Sooo we gotta be dumb var/list/controller_vars = exclude_these.vars.Copy() controller_vars["vars"] = null gvars_datum_in_built_vars = controller_vars + list(NAMEOF(src, gvars_datum_protected_varlist), NAMEOF(src, gvars_datum_in_built_vars), NAMEOF(src, gvars_datum_init_order)) -#if MIN_COMPILER_VERSION >= 515 && MIN_COMPILER_BUILD > 1620 - #warn datum.vars hanging a ref should now be fixed, there should be no reason to remove the vars list from our controller's vars list anymore -#endif QDEL_IN(exclude_these, 0) //signal logging isn't ready Initialize() diff --git a/code/controllers/master.dm b/code/controllers/master.dm index ce660ff512b..32093c12745 100644 --- a/code/controllers/master.dm +++ b/code/controllers/master.dm @@ -688,10 +688,16 @@ GLOBAL_REAL(Master, /datum/controller/master) queue_node.state = SS_RUNNING + if(queue_node.profiler_focused) + world.Profile(PROFILE_START) + tick_usage = TICK_USAGE var/state = queue_node.ignite(queue_node_paused) tick_usage = TICK_USAGE - tick_usage + if(queue_node.profiler_focused) + world.Profile(PROFILE_STOP) + if (state == SS_RUNNING) state = SS_IDLE current_tick_budget -= queue_node_priority diff --git a/code/controllers/subsystem.dm b/code/controllers/subsystem.dm index ddeb9368f50..b01f4b17b9d 100644 --- a/code/controllers/subsystem.dm +++ b/code/controllers/subsystem.dm @@ -38,6 +38,12 @@ ///Bitmap of what game states can this subsystem fire at. See [RUNLEVELS_DEFAULT] for more details. var/runlevels = RUNLEVELS_DEFAULT //points of the game at which the SS can fire + /** + * boolean set by admins. if TRUE then this subsystem will stop the world profiler after ignite() returns and start it again when called. + * used so that you can audit a specific subsystem or group of subsystems' synchronous call chain. + */ + var/profiler_focused = FALSE + /* * The following variables are managed by the MC and should not be modified directly. */ @@ -65,7 +71,7 @@ /// Tracks the current execution state of the subsystem. Used to handle subsystems that sleep in fire so the mc doesn't run them again while they are sleeping var/state = SS_IDLE - + /// Tracks how many times a subsystem has ever slept in fire(). var/slept_count = 0 diff --git a/code/controllers/subsystem/area_contents.dm b/code/controllers/subsystem/area_contents.dm index 904714f0ba0..054de9d8efc 100644 --- a/code/controllers/subsystem/area_contents.dm +++ b/code/controllers/subsystem/area_contents.dm @@ -1,4 +1,4 @@ -#define ALLOWED_LOOSE_TURFS 500 +#define ALLOWED_LOOSE_TURFS 100 /** * Responsible for managing the sizes of area.contained_turfs and area.turfs_to_uncontain * These lists do not check for duplicates, which is fine, but it also means they can balloon in size over time @@ -17,8 +17,11 @@ SUBSYSTEM_DEF(area_contents) var/total_clearing_from = 0 var/total_to_clear = 0 for(var/area/to_clear as anything in marked_for_clearing) - total_to_clear += length(to_clear.turfs_to_uncontain) - total_clearing_from += length(to_clear.contained_turfs) + for (var/area_zlevel in 1 to length(to_clear.turfs_to_uncontain_by_zlevel)) + if (length(to_clear.turfs_to_uncontain_by_zlevel[area_zlevel])) + total_to_clear += length(to_clear.turfs_to_uncontain_by_zlevel[area_zlevel]) + if (length(to_clear.turfs_by_zlevel) >= area_zlevel) //this should always be true, but stat_entry is no place for runtimes. fire() can handle that + total_clearing_from += length(to_clear.turfs_by_zlevel[area_zlevel]) msg = "A:[length(currentrun)] MR:[length(marked_for_clearing)] TC:[total_to_clear] CF:[total_clearing_from]" return ..() @@ -29,8 +32,10 @@ SUBSYSTEM_DEF(area_contents) while(length(currentrun)) var/area/test = currentrun[length(currentrun)] - if(length(test.turfs_to_uncontain) > ALLOWED_LOOSE_TURFS) - marked_for_clearing |= test + for (var/area_zlevel in 1 to length(test.turfs_to_uncontain_by_zlevel)) + if(length(test.turfs_to_uncontain_by_zlevel[area_zlevel]) > ALLOWED_LOOSE_TURFS) + marked_for_clearing |= test + break currentrun.len-- if(MC_TICK_CHECK) return @@ -39,19 +44,27 @@ SUBSYSTEM_DEF(area_contents) while(length(marked_for_clearing)) var/area/clear = marked_for_clearing[length(marked_for_clearing)] - // The operation of cutting large lists can be expensive - // It scales almost directly with the size of the list we're cutting with - // Because of this, we're gonna stick to cutting 1 entry at a time - // There's no reason to batch it I promise, this is faster. No overtime too - var/amount_cut = 0 - var/list/cut_from = clear.turfs_to_uncontain - for(amount_cut in 1 to length(cut_from)) - clear.contained_turfs -= cut_from[amount_cut] - if(MC_TICK_CHECK) - cut_from.Cut(1, amount_cut + 1) - return - - clear.turfs_to_uncontain = list() + for (var/area_zlevel in 1 to length(clear.turfs_to_uncontain_by_zlevel)) + if (!length(clear.turfs_to_uncontain_by_zlevel[area_zlevel])) + continue + if (length(clear.turfs_by_zlevel) < area_zlevel) + stack_trace("[clear]([clear.type])'s turfs_by_zlevel is length [length(clear.turfs_by_zlevel)] but we are being asked to remove turfs from zlevel [area_zlevel] from it.") + clear.turfs_to_uncontain_by_zlevel[area_zlevel] = list() + continue + + // The operation of cutting large lists can be expensive + // It scales almost directly with the size of the list we're cutting with + // Because of this, we're gonna stick to cutting 1 entry at a time + // There's no reason to batch it I promise, this is faster. No overtime too + var/amount_cut = 0 + var/list/cut_from = clear.turfs_to_uncontain_by_zlevel[area_zlevel] + for(amount_cut in 1 to length(cut_from)) + clear.turfs_by_zlevel[area_zlevel] -= cut_from[amount_cut] + if(MC_TICK_CHECK) + cut_from.Cut(1, amount_cut + 1) + return + + clear.turfs_to_uncontain_by_zlevel = list() marked_for_clearing.len-- #undef ALLOWED_LOOSE_TURFS diff --git a/code/controllers/subsystem/atoms.dm b/code/controllers/subsystem/atoms.dm index 916bbed6e4e..71eaed14ea2 100644 --- a/code/controllers/subsystem/atoms.dm +++ b/code/controllers/subsystem/atoms.dm @@ -1,4 +1,3 @@ -#define SUBSYSTEM_INIT_SOURCE "subsystem init" SUBSYSTEM_DEF(atoms) name = "Atoms" init_order = INIT_ORDER_ATOMS @@ -41,11 +40,16 @@ SUBSYSTEM_DEF(atoms) if(initialized == INITIALIZATION_INSSATOMS) return - set_tracked_initalized(INITIALIZATION_INNEW_MAPLOAD, SUBSYSTEM_INIT_SOURCE) + // Generate a unique mapload source for this run of InitializeAtoms + var/static/uid = 0 + uid = (uid + 1) % (SHORT_REAL_LIMIT - 1) + var/source = "subsystem init [uid]" + set_tracked_initalized(INITIALIZATION_INNEW_MAPLOAD, source) // This may look a bit odd, but if the actual atom creation runtimes for some reason, we absolutely need to set initialized BACK - CreateAtoms(atoms, atoms_to_return) - clear_tracked_initalize(SUBSYSTEM_INIT_SOURCE) + CreateAtoms(atoms, atoms_to_return, source) + clear_tracked_initalize(source) + SSicon_smooth.free_deferred(source) if(late_loaders.len) for(var/I in 1 to late_loaders.len) @@ -72,7 +76,7 @@ SUBSYSTEM_DEF(atoms) #endif /// Actually creates the list of atoms. Exists soley so a runtime in the creation logic doesn't cause initalized to totally break -/datum/controller/subsystem/atoms/proc/CreateAtoms(list/atoms, list/atoms_to_return = null) +/datum/controller/subsystem/atoms/proc/CreateAtoms(list/atoms, list/atoms_to_return = null, mapload_source = null) if (atoms_to_return) LAZYINITLIST(created_atoms) @@ -90,7 +94,12 @@ SUBSYSTEM_DEF(atoms) for(var/I in 1 to atoms.len) var/atom/A = atoms[I] if(!(A.flags_1 & INITIALIZED_1)) - CHECK_TICK + // Unrolled CHECK_TICK setup to let us enable/disable mapload based off source + if(TICK_CHECK) + clear_tracked_initalize(mapload_source) + stoplag() + if(mapload_source) + set_tracked_initalized(INITIALIZATION_INNEW_MAPLOAD, mapload_source) PROFILE_INIT_ATOM_BEGIN() InitAtom(A, TRUE, mapload_arg) PROFILE_INIT_ATOM_END(A) @@ -107,7 +116,11 @@ SUBSYSTEM_DEF(atoms) #ifdef TESTING ++count #endif - CHECK_TICK + if(TICK_CHECK) + clear_tracked_initalize(mapload_source) + stoplag() + if(mapload_source) + set_tracked_initalized(INITIALIZATION_INNEW_MAPLOAD, mapload_source) testing("Initialized [count] atoms") @@ -117,6 +130,13 @@ SUBSYSTEM_DEF(atoms) /datum/controller/subsystem/atoms/proc/map_loader_stop(source) clear_tracked_initalize(source) +/// Returns the source currently modifying SSatom's init behavior +/datum/controller/subsystem/atoms/proc/get_initialized_source() + var/state_length = length(initialized_state) + if(!state_length) + return null + return initialized_state[state_length][1] + /// Use this to set initialized to prevent error states where the old initialized is overriden, and we end up losing all context /// Accepts a state and a source, the most recent state is used, sources exist to prevent overriding old values accidentially /datum/controller/subsystem/atoms/proc/set_tracked_initalized(state, source) @@ -199,5 +219,3 @@ SUBSYSTEM_DEF(atoms) var/initlog = InitLog() if(initlog) text2file(initlog, "[GLOB.log_directory]/initialize.log") - -#undef SUBSYSTEM_INIT_SOURCE diff --git a/code/controllers/subsystem/dynamic/dynamic.dm b/code/controllers/subsystem/dynamic/dynamic.dm index fd6a5ecf9a5..053405ee936 100644 --- a/code/controllers/subsystem/dynamic/dynamic.dm +++ b/code/controllers/subsystem/dynamic/dynamic.dm @@ -329,16 +329,16 @@ SUBSYSTEM_DEF(dynamic) if(ruleset.weight <= 0 || ruleset.cost <= 0) continue min_threat = min(ruleset.cost, min_threat) - var/greenshift = GLOB.dynamic_forced_extended || (threat_level < min_threat && shown_threat < min_threat) //if both shown and real threat are below any ruleset, its extended time - generate_station_goals(greenshift ? INFINITY : CONFIG_GET(number/station_goal_budget)) + var/greenshift = GLOB.dynamic_forced_extended || (threat_level < min_threat && shown_threat < min_threat) //if both shown and real threat are below any ruleset, its extended time + SSstation.generate_station_goals(greenshift ? INFINITY : CONFIG_GET(number/station_goal_budget)) - if (GLOB.station_goals.len > 0) - var/list/texts = list("
Special Orders for [station_name()]:
") - for(var/datum/station_goal/station_goal as anything in GLOB.station_goals) + var/list/datum/station_goal/goals = SSstation.get_station_goals() + if(length(goals)) + var/list/texts = list("
Special Orders for [station_name()]:
") + for(var/datum/station_goal/station_goal as anything in goals) station_goal.on_report() texts += station_goal.get_report() - . += texts.Join("
") var/list/trait_list_strings = list() @@ -935,6 +935,9 @@ SUBSYSTEM_DEF(dynamic) stack_trace("Invalid dynamic configuration variable [variable] in [ruleset.ruletype] [ruleset.name].") continue ruleset.vars[variable] = rule_conf[variable] + ruleset.restricted_roles |= SSstation.antag_restricted_roles + if(length(ruleset.protected_roles)) //if we care to protect any role, we should protect station trait roles too + ruleset.protected_roles |= SSstation.antag_protected_roles if(CONFIG_GET(flag/protect_roles_from_antagonist)) ruleset.restricted_roles |= ruleset.protected_roles if(CONFIG_GET(flag/protect_assistant_from_antagonist)) diff --git a/code/controllers/subsystem/dynamic/dynamic_rulesets_midround.dm b/code/controllers/subsystem/dynamic/dynamic_rulesets_midround.dm index 9890f4c0425..036236b0a91 100644 --- a/code/controllers/subsystem/dynamic/dynamic_rulesets_midround.dm +++ b/code/controllers/subsystem/dynamic/dynamic_rulesets_midround.dm @@ -36,6 +36,8 @@ var/makeBody = TRUE /// The rule needs this many applicants to be properly executed. var/required_applicants = 1 + ///Path of an item to show up in ghost polls for applicants to sign up. + var/signup_item_path = /obj/structure/sign/poster/contraband/syndicate_recruitment /datum/dynamic_ruleset/midround/from_ghosts/check_candidates() var/dead_count = dead_players.len + list_observers.len @@ -141,7 +143,14 @@ return SSdynamic.log_dynamic_and_announce("Polling [possible_volunteers.len] players to apply for the [name] ruleset.") - candidates = SSpolling.poll_ghost_candidates("Looking for volunteers to become [antag_flag] for [name]", check_jobban = antag_flag_override, role = antag_flag || antag_flag_override, poll_time = 30 SECONDS, pic_source = /obj/structure/sign/poster/contraband/syndicate_recruitment, role_name_text = antag_flag) + candidates = SSpolling.poll_ghost_candidates( + question = "Looking for volunteers to become [antag_flag] for [name]", + check_jobban = antag_flag_override, + role = antag_flag || antag_flag_override, + poll_time = 30 SECONDS, + pic_source = signup_item_path, + role_name_text = antag_flag, + ) if(!candidates || candidates.len <= 0) SSdynamic.log_dynamic_and_announce("The ruleset [name] received no applications.") @@ -893,6 +902,7 @@ weight = 4 cost = 3 repeatable = TRUE + signup_item_path = /obj/effect/bluespace_stream var/list/possible_spawns = list() ///places the antag can spawn /datum/dynamic_ruleset/midround/from_ghosts/paradox_clone/forget_startup() diff --git a/code/controllers/subsystem/dynamic/dynamic_rulesets_roundstart.dm b/code/controllers/subsystem/dynamic/dynamic_rulesets_roundstart.dm index 290b7116162..b74483a2cb6 100644 --- a/code/controllers/subsystem/dynamic/dynamic_rulesets_roundstart.dm +++ b/code/controllers/subsystem/dynamic/dynamic_rulesets_roundstart.dm @@ -416,6 +416,8 @@ GLOBAL_VAR_INIT(revolutionary_win, FALSE) ruleset_lazy_templates = list(LAZY_TEMPLATE_KEY_NUKIEBASE) var/required_role = ROLE_NUCLEAR_OPERATIVE var/datum/team/nuclear/nuke_team + ///The job type to dress up our nuclear operative as. + var/datum/job/job_type = /datum/job/nuclear_operative /datum/dynamic_ruleset/roundstart/nuclear/ready(population, forced = FALSE) required_candidates = get_antag_cap(population) @@ -430,8 +432,8 @@ GLOBAL_VAR_INIT(revolutionary_win, FALSE) break var/mob/M = pick_n_take(candidates) assigned += M.mind - M.mind.set_assigned_role(SSjob.GetJobType(/datum/job/nuclear_operative)) - M.mind.special_role = ROLE_NUCLEAR_OPERATIVE + M.mind.set_assigned_role(SSjob.GetJobType(job_type)) + M.mind.special_role = required_role return TRUE /datum/dynamic_ruleset/roundstart/nuclear/execute() @@ -624,6 +626,7 @@ GLOBAL_VAR_INIT(revolutionary_win, FALSE) antag_leader_datum = /datum/antagonist/nukeop/leader/clownop requirements = list(101,101,101,101,101,101,101,101,101,101) required_role = ROLE_CLOWN_OPERATIVE + job_type = /datum/job/clown_operative /datum/dynamic_ruleset/roundstart/nuclear/clown_ops/pre_execute() . = ..() @@ -635,10 +638,6 @@ GLOBAL_VAR_INIT(revolutionary_win, FALSE) new /obj/machinery/nuclearbomb/syndicate/bananium(nuke.loc) qdel(nuke) - for(var/datum/mind/clowns in assigned) - clowns.set_assigned_role(SSjob.GetJobType(/datum/job/clown_operative)) - clowns.special_role = ROLE_CLOWN_OPERATIVE - ////////////////////////////////////////////// // // // METEOR // diff --git a/code/controllers/subsystem/economy.dm b/code/controllers/subsystem/economy.dm index f8377302bd3..7b3f93f5d82 100644 --- a/code/controllers/subsystem/economy.dm +++ b/code/controllers/subsystem/economy.dm @@ -29,6 +29,8 @@ SUBSYSTEM_DEF(economy) * A list of sole account datums can be obtained with flatten_list(), another variable would be redundant rn. */ var/list/bank_accounts_by_id = list() + /// A list of bank accounts indexed by their assigned job. + var/list/bank_accounts_by_job = list() ///List of the departmental budget cards in existance. var/list/dep_cards = list() /// A var that collects the total amount of credits owned in player accounts on station, reset and recounted on fire() diff --git a/code/controllers/subsystem/garbage.dm b/code/controllers/subsystem/garbage.dm index 4f11a3ee577..706b4e51d69 100644 --- a/code/controllers/subsystem/garbage.dm +++ b/code/controllers/subsystem/garbage.dm @@ -162,6 +162,9 @@ SUBSYSTEM_DEF(garbage) lastlevel = level +// 1 from the hard reference in the queue, and 1 from the variable used before this +#define REFS_WE_EXPECT 2 + //We do this rather then for(var/list/ref_info in queue) because that sort of for loop copies the whole list. //Normally this isn't expensive, but the gc queue can grow to 40k items, and that gets costly/causes overrun. for (var/i in 1 to length(queue)) @@ -179,9 +182,8 @@ SUBSYSTEM_DEF(garbage) var/datum/D = L[GC_QUEUE_ITEM_REF] - // 1 from the hard reference in the queue, and 1 from the variable used before this // If that's all we've got, send er off - if (refcount(D) == 2) + if (refcount(D) == REFS_WE_EXPECT) ++gcedlasttick ++totalgcs pass_counts[level]++ @@ -202,12 +204,15 @@ SUBSYSTEM_DEF(garbage) switch (level) if (GC_QUEUE_CHECK) #ifdef REFERENCE_TRACKING + // Decides how many refs to look for (potentially) + // Based off the remaining and the ones we can account for + var/remaining_refs = refcount(D) - REFS_WE_EXPECT if(reference_find_on_fail[text_ref(D)]) - INVOKE_ASYNC(D, TYPE_PROC_REF(/datum,find_references)) + INVOKE_ASYNC(D, TYPE_PROC_REF(/datum,find_references), remaining_refs) ref_searching = TRUE #ifdef GC_FAILURE_HARD_LOOKUP else - INVOKE_ASYNC(D, TYPE_PROC_REF(/datum,find_references)) + INVOKE_ASYNC(D, TYPE_PROC_REF(/datum,find_references), remaining_refs) ref_searching = TRUE #endif reference_find_on_fail -= text_ref(D) @@ -257,6 +262,8 @@ SUBSYSTEM_DEF(garbage) queue.Cut(1,count+1) count = 0 +#undef REFS_WE_EXPECT + /datum/controller/subsystem/garbage/proc/Queue(datum/D, level = GC_QUEUE_FILTER) if (isnull(D)) return diff --git a/code/controllers/subsystem/icon_smooth.dm b/code/controllers/subsystem/icon_smooth.dm index 4d5f3069eca..9e5e9ffa99d 100644 --- a/code/controllers/subsystem/icon_smooth.dm +++ b/code/controllers/subsystem/icon_smooth.dm @@ -9,6 +9,7 @@ SUBSYSTEM_DEF(icon_smooth) var/list/blueprint_queue = list() var/list/smooth_queue = list() var/list/deferred = list() + var/list/deferred_by_source = list() /datum/controller/subsystem/icon_smooth/fire() // We do not want to smooth icons of atoms whose neighbors are not initialized yet, @@ -61,16 +62,30 @@ SUBSYSTEM_DEF(icon_smooth) return SS_INIT_SUCCESS +/// Releases a pool of delayed smooth attempts from a particular source +/datum/controller/subsystem/icon_smooth/proc/free_deferred(source_to_free) + smooth_queue += deferred_by_source[source_to_free] + deferred_by_source -= source_to_free + if(!can_fire) + can_fire = TRUE /datum/controller/subsystem/icon_smooth/proc/add_to_queue(atom/thing) if(thing.smoothing_flags & SMOOTH_QUEUED) return thing.smoothing_flags |= SMOOTH_QUEUED + // If we're currently locked into mapload BY something + // Then put us in a deferred list that we release when this mapload run is finished + if(initialized && length(SSatoms.initialized_state) && SSatoms.initialized == INITIALIZATION_INNEW_MAPLOAD) + var/source = SSatoms.get_initialized_source() + LAZYADD(deferred_by_source[source], thing) + return smooth_queue += thing if(!can_fire) can_fire = TRUE /datum/controller/subsystem/icon_smooth/proc/remove_from_queues(atom/thing) + // Lack of removal from deferred_by_source is safe because the lack of SMOOTH_QUEUED will just free it anyway + // Hopefully this'll never cause a harddel (dies) thing.smoothing_flags &= ~SMOOTH_QUEUED smooth_queue -= thing if(blueprint_queue) diff --git a/code/controllers/subsystem/job.dm b/code/controllers/subsystem/job.dm index 38ef544e04c..d2a374f39cd 100644 --- a/code/controllers/subsystem/job.dm +++ b/code/controllers/subsystem/job.dm @@ -94,6 +94,18 @@ SUBSYSTEM_DEF(job) set_overflow_role(CONFIG_GET(string/overflow_job)) // this must always go after load_jobs_from_config() due to how the legacy systems operate, this always takes precedent. return SS_INIT_SUCCESS +/// Returns a list of jobs that we are allowed to fuck with during random events +/datum/controller/subsystem/job/proc/get_valid_overflow_jobs() + var/static/list/overflow_jobs + if (!isnull(overflow_jobs)) + return overflow_jobs + + overflow_jobs = list() + for (var/datum/job/check_job in joinable_occupations) + if (!check_job.allow_bureaucratic_error) + continue + overflow_jobs += check_job + return overflow_jobs /datum/controller/subsystem/job/proc/set_overflow_role(new_overflow_role) var/datum/job/new_overflow = ispath(new_overflow_role) ? GetJobType(new_overflow_role) : GetJob(new_overflow_role) @@ -714,13 +726,14 @@ SUBSYSTEM_DEF(job) var/area/shuttle/arrival/arrivals_area = GLOB.areas_by_type[/area/shuttle/arrival] if(!isnull(arrivals_area)) var/list/turf/available_turfs = list() - for(var/turf/arrivals_turf as anything in arrivals_area.get_contained_turfs()) - var/obj/structure/chair/shuttle_chair = locate() in arrivals_turf - if(!isnull(shuttle_chair)) - return shuttle_chair - if(arrivals_turf.is_blocked_turf(TRUE)) - continue - available_turfs += arrivals_turf + for (var/list/zlevel_turfs as anything in arrivals_area.get_zlevel_turf_lists()) + for (var/turf/arrivals_turf as anything in zlevel_turfs) + var/obj/structure/chair/shuttle_chair = locate() in arrivals_turf + if(!isnull(shuttle_chair)) + return shuttle_chair + if(arrivals_turf.is_blocked_turf(TRUE)) + continue + available_turfs += arrivals_turf if(length(available_turfs)) return pick(available_turfs) diff --git a/code/controllers/subsystem/mapping.dm b/code/controllers/subsystem/mapping.dm index 5881405da0b..7dd40a87a50 100644 --- a/code/controllers/subsystem/mapping.dm +++ b/code/controllers/subsystem/mapping.dm @@ -173,7 +173,7 @@ SUBSYSTEM_DEF(mapping) // Cache for sonic speed var/list/unused_turfs = src.unused_turfs var/list/world_contents = GLOB.areas_by_type[world.area].contents - var/list/world_turf_contents = GLOB.areas_by_type[world.area].contained_turfs + var/list/world_turf_contents_by_z = GLOB.areas_by_type[world.area].turfs_by_zlevel var/list/lists_to_reserve = src.lists_to_reserve var/index = 0 while(index < length(lists_to_reserve)) @@ -189,10 +189,12 @@ SUBSYSTEM_DEF(mapping) LAZYINITLIST(unused_turfs["[T.z]"]) unused_turfs["[T.z]"] |= T var/area/old_area = T.loc - old_area.turfs_to_uncontain += T + LISTASSERTLEN(old_area.turfs_to_uncontain_by_zlevel, T.z, list()) + old_area.turfs_to_uncontain_by_zlevel[T.z] += T T.turf_flags = UNUSED_RESERVATION_TURF world_contents += T - world_turf_contents += T + LISTASSERTLEN(world_turf_contents_by_z, T.z, list()) + world_turf_contents_by_z[T.z] += T packet.len-- packetlen = length(packet) @@ -245,23 +247,23 @@ SUBSYSTEM_DEF(mapping) // Generate mining ruins var/list/lava_ruins = levels_by_trait(ZTRAIT_LAVA_RUINS) if (lava_ruins.len) - seedRuins(lava_ruins, CONFIG_GET(number/lavaland_budget), list(/area/lavaland/surface/outdoors/unexplored), themed_ruins[ZTRAIT_LAVA_RUINS], clear_below = TRUE) + seedRuins(lava_ruins, CONFIG_GET(number/lavaland_budget), list(/area/lavaland/surface/outdoors/unexplored), themed_ruins[ZTRAIT_LAVA_RUINS], clear_below = TRUE, mineral_budget = 15, mineral_budget_update = OREGEN_PRESET_LAVALAND) var/list/ice_ruins = levels_by_trait(ZTRAIT_ICE_RUINS) if (ice_ruins.len) // needs to be whitelisted for underground too so place_below ruins work - seedRuins(ice_ruins, CONFIG_GET(number/icemoon_budget), list(/area/icemoon/surface/outdoors/unexplored, /area/icemoon/underground/unexplored), themed_ruins[ZTRAIT_ICE_RUINS], clear_below = TRUE) + seedRuins(ice_ruins, CONFIG_GET(number/icemoon_budget), list(/area/icemoon/surface/outdoors/unexplored, /area/icemoon/underground/unexplored), themed_ruins[ZTRAIT_ICE_RUINS], clear_below = TRUE, mineral_budget = 4, mineral_budget_update = OREGEN_PRESET_TRIPLE_Z) var/list/ice_ruins_underground = levels_by_trait(ZTRAIT_ICE_RUINS_UNDERGROUND) if (ice_ruins_underground.len) - seedRuins(ice_ruins_underground, CONFIG_GET(number/icemoon_budget), list(/area/icemoon/underground/unexplored), themed_ruins[ZTRAIT_ICE_RUINS_UNDERGROUND], clear_below = TRUE) + seedRuins(ice_ruins_underground, CONFIG_GET(number/icemoon_budget), list(/area/icemoon/underground/unexplored), themed_ruins[ZTRAIT_ICE_RUINS_UNDERGROUND], clear_below = TRUE, mineral_budget = 21) // Generate deep space ruins var/list/space_ruins = levels_by_trait(ZTRAIT_SPACE_RUINS) if (space_ruins.len) // Create a proportional budget by multiplying the amount of space ruin levels in the current map over the default amount var/proportional_budget = round(CONFIG_GET(number/space_budget) * (space_ruins.len / DEFAULT_SPACE_RUIN_LEVELS)) - seedRuins(space_ruins, proportional_budget, list(/area/space), themed_ruins[ZTRAIT_SPACE_RUINS]) + seedRuins(space_ruins, proportional_budget, list(/area/space), themed_ruins[ZTRAIT_SPACE_RUINS], mineral_budget = 0) /// Sets up rivers, and things that behave like rivers. So lava/plasma rivers, and chasms /// It is important that this happens AFTER generating mineral walls and such, since we rely on them for river logic @@ -835,12 +837,14 @@ GLOBAL_LIST_EMPTY(the_station_areas) // Faster if(space_guaranteed) var/area/global_area = GLOB.areas_by_type[world.area] - global_area.contained_turfs += Z_TURFS(z_level) + LISTASSERTLEN(global_area.turfs_by_zlevel, z_level, list()) + global_area.turfs_by_zlevel[z_level] = Z_TURFS(z_level) return for(var/turf/to_contain as anything in Z_TURFS(z_level)) var/area/our_area = to_contain.loc - our_area.contained_turfs += to_contain + LISTASSERTLEN(our_area.turfs_by_zlevel, z_level, list()) + our_area.turfs_by_zlevel[z_level] += to_contain /datum/controller/subsystem/mapping/proc/update_plane_tracking(datum/space_level/update_with) // We're essentially going to walk down the stack of connected z levels, and set their plane offset as we go diff --git a/code/controllers/subsystem/materials.dm b/code/controllers/subsystem/materials.dm index a9c807cc38a..4ae9272e970 100644 --- a/code/controllers/subsystem/materials.dm +++ b/code/controllers/subsystem/materials.dm @@ -154,13 +154,13 @@ SUBSYSTEM_DEF(materials) var/list/combo_params = list() for(var/x in materials_declaration) var/datum/material/mat = x - combo_params += "[istype(mat) ? mat.id : mat]=[materials_declaration[mat] * multiplier]" + combo_params += "[istype(mat) ? mat.id : mat]=[OPTIMAL_COST(materials_declaration[mat] * multiplier)]" sortTim(combo_params, GLOBAL_PROC_REF(cmp_text_asc)) // We have to sort now in case the declaration was not in order var/combo_index = combo_params.Join("-") var/list/combo = material_combos[combo_index] if(!combo) combo = list() for(var/mat in materials_declaration) - combo[GET_MATERIAL_REF(mat)] = materials_declaration[mat] * multiplier + combo[GET_MATERIAL_REF(mat)] = OPTIMAL_COST(materials_declaration[mat] * multiplier) material_combos[combo_index] = combo return combo diff --git a/code/controllers/subsystem/ore_generation.dm b/code/controllers/subsystem/ore_generation.dm new file mode 100644 index 00000000000..ca8aa09d611 --- /dev/null +++ b/code/controllers/subsystem/ore_generation.dm @@ -0,0 +1,75 @@ + +SUBSYSTEM_DEF(ore_generation) + name = "Ore Generation" + wait = 60 SECONDS + init_order = INIT_ORDER_DEFAULT + runlevels = RUNLEVEL_GAME + + /// All ore vents that are currently producing boulders. + var/list/obj/structure/ore_vent/processed_vents = list() + /// All the ore vents that are currently in the game, not just the ones that are producing boulders. + var/list/obj/structure/ore_vent/possible_vents = list() + /// All the boulders that have been produced by ore vents to be pulled by BRM machines. + var/list/obj/item/boulder/available_boulders = list() + /** + * A list of all the minerals that are being mined by ore vents. We reset this list every time cave generation is done. + * Generally Should be empty by the time initialize ends on lavaland. + * Each key value is the number of vents that will have this ore as a unique possible choice. + * If we call cave_generation more than once, we copy a list from the lists in lists/ores_spawned.dm + */ + var/list/ore_vent_minerals = list() + + /// A tracker of how many of each ore vent size we have in the game. Useful for tracking purposes. + var/list/ore_vent_sizes = list( + LARGE_VENT_TYPE = 0, + MEDIUM_VENT_TYPE = 0, + SMALL_VENT_TYPE = 0, + ) + /// Ores spawned by proximity to an ore vent. Useful for logging purposes. + var/list/post_ore_random = list( + "1" = 0, + "2" = 0, + "3" = 0, + "4" = 0, + "5" = 0, + ) + /// Ores spawned randomly on the map without proximity to an ore vent. Useful for logging purposes. + var/list/post_ore_manual = list( + "1" = 0, + "2" = 0, + "3" = 0, + "4" = 0, + "5" = 0, + ) + +/datum/controller/subsystem/ore_generation/Initialize() + //Basically, we're going to round robin through the list of ore vents and assign a mineral to them until complete. + while(length(ore_vent_minerals) > 0) //Keep looping if there's more to assign + var/stallbreaker = 0 + for(var/obj/structure/ore_vent/vent as anything in possible_vents) + if(length(ore_vent_minerals) <= 0) //But break early if there's none left. + break + if(vent.unique_vent) + continue //Ya'll already got your minerals. + if(length(difflist(first = ore_vent_minerals, second = vent.mineral_breakdown, skiprep = 1))) + vent.generate_mineral_breakdown(new_minerals = 1, map_loading = TRUE) + else + stallbreaker++ + if(stallbreaker >= length(possible_vents)) + return SS_INIT_SUCCESS //We've done all we can here. + continue + return SS_INIT_SUCCESS + +/datum/controller/subsystem/ore_generation/fire(resumed) + available_boulders.Cut() // reset upon new fire. + for(var/obj/structure/ore_vent/current_vent as anything in processed_vents) + + var/local_vent_count = 0 + for(var/obj/item/boulder/old_rock in current_vent.loc) + available_boulders += old_rock + local_vent_count++ + + if(local_vent_count >= MAX_BOULDERS_PER_VENT) + continue //We don't want to be accountable for literally hundreds of unprocessed boulders for no reason. + + available_boulders += current_vent.produce_boulder() diff --git a/code/controllers/subsystem/polling.dm b/code/controllers/subsystem/polling.dm index 1eab3fb8f0d..038050cfb7d 100644 --- a/code/controllers/subsystem/polling.dm +++ b/code/controllers/subsystem/polling.dm @@ -16,7 +16,38 @@ SUBSYSTEM_DEF(polling) if(running_poll.time_left() <= 0) polling_finished(running_poll) -/datum/controller/subsystem/polling/proc/poll_candidates(question, role, check_jobban, poll_time = 30 SECONDS, ignore_category = null, flash_window = TRUE, list/group = null, pic_source, role_name_text) +/** + * Starts a poll. + * + * Arguments + * * question: Optional, The question to ask the candidates. If null, a default question will be used. ("Do you want to play as role?") + * * role: Optional, An antag role (IE, ROLE_TRAITOR) to pass, it won't show to any candidates who don't have it in their preferences. + * * check_jobban: Optional, What jobban role / flag to check, it won't show to any candidates who have this jobban. + * * poll_time: How long the poll will last. + * * ignore_category: Optional, A poll category. If a candidate has this category in their ignore list, they won't be polled. + * * flash_window: If TRUE, the candidate's window will flash when they're polled. + * * list/group: A list of candidates to poll. + * * pic_source: Optional, An /atom or an /image to display on the poll alert. + * * role_name_text: Optional, A string to display in logging / the (default) question. If null, the role name will be used. + * * list/custom_response_messages: Optional, A list of strings to use as responses to the poll. If null, the default responses will be used. see __DEFINES/polls.dm for valid keys to use. + * * start_signed_up: If TRUE, all candidates will start signed up for the poll, making it opt-out rather than opt-in. + * + * Returns a list of all mobs who signed up for the poll. + */ +/datum/controller/subsystem/polling/proc/poll_candidates( + question, + role, + check_jobban, + poll_time = 30 SECONDS, + ignore_category = null, + flash_window = TRUE, + list/group = null, + pic_source, + role_name_text, + list/custom_response_messages, + start_signed_up = FALSE, +) + RETURN_TYPE(/list/mob) if(group.len == 0) return list() if(role && !role_name_text) @@ -32,7 +63,7 @@ SUBSYSTEM_DEF(polling) var/jumpable = isatom(pic_source) ? pic_source : null - var/datum/candidate_poll/new_poll = new(role_name_text, question, poll_time, ignore_category, jumpable) + var/datum/candidate_poll/new_poll = new(role_name_text, question, poll_time, ignore_category, jumpable, custom_response_messages) LAZYADD(currently_polling, new_poll) var/category = "[new_poll.poll_key]_poll_alert" @@ -40,16 +71,17 @@ SUBSYSTEM_DEF(polling) for(var/mob/candidate_mob as anything in group) if(!candidate_mob.client) continue - // Universal opt-out for all players. - if((!candidate_mob.client.prefs.read_preference(/datum/preference/toggle/ghost_roles))) + // Universal opt-out for all players if it's for a role. + if(role && (!candidate_mob.client.prefs.read_preference(/datum/preference/toggle/ghost_roles))) continue // Opt-out for admins whom are currently adminned. - if((!candidate_mob.client.prefs.read_preference(/datum/preference/toggle/ghost_roles_as_admin)) && candidate_mob.client.holder) + if(role && (!candidate_mob.client.prefs.read_preference(/datum/preference/toggle/ghost_roles_as_admin)) && candidate_mob.client.holder) continue - if(!is_eligible(candidate_mob, role, check_jobban, ignore_category)) + if(role && !is_eligible(candidate_mob, role, check_jobban, ignore_category)) continue - SEND_SOUND(candidate_mob, 'sound/misc/notice2.ogg') + if(start_signed_up) + new_poll.sign_up(candidate_mob, TRUE) if(flash_window) window_flash(candidate_mob.client) @@ -76,6 +108,8 @@ SUBSYSTEM_DEF(polling) poll_alert_button.poll = alert_poll poll_alert_button.set_role_overlay() poll_alert_button.update_stacks_overlay() + poll_alert_button.update_candidates_number_overlay() + poll_alert_button.update_signed_up_overlay() // Sign up inheritance and stacking @@ -111,12 +145,15 @@ SUBSYSTEM_DEF(polling) // Chat message var/act_jump = "" if(isatom(pic_source) && isobserver(candidate_mob)) - act_jump = "\[Teleport]" - var/act_signup = "\[Sign Up]" + act_jump = "\[Teleport\]" + var/act_signup = "\[[start_signed_up ? "Opt out" : "Sign Up"]\]" var/act_never = "" if(ignore_category) - act_never = "\[Never For This Round]" - to_chat(candidate_mob, span_boldnotice(examine_block("Now looking for candidates [role_name_text ? "to play as \an [role_name_text]." : "\"[question]\""] [act_jump] [act_signup] [act_never]"))) + act_never = "\[Never For This Round\]" + + if(!duplicate_message_check(alert_poll)) //Only notify people once. They'll notice if there are multiple and we don't want to spam people. + SEND_SOUND(candidate_mob, 'sound/misc/notice2.ogg') + to_chat(candidate_mob, span_boldnotice(examine_block("Now looking for candidates [role_name_text ? "to play as \an [role_name_text]." : "\"[question]\""] [act_jump] [act_signup] [act_never]"))) // Start processing it so it updates visually the timer START_PROCESSING(SSprocessing, poll_alert_button) @@ -197,13 +234,8 @@ SUBSYSTEM_DEF(polling) // Take care of updating the remaining screen alerts if a similar poll is found, or deleting them. if(length(finishing_poll.alert_buttons)) - var/polls_of_same_type_left = FALSE - for(var/datum/candidate_poll/running_poll as anything in currently_polling) - if(running_poll.poll_key == finishing_poll.poll_key && running_poll.time_left() > 0) - polls_of_same_type_left = TRUE - break for(var/atom/movable/screen/alert/poll_alert/alert as anything in finishing_poll.alert_buttons) - if(polls_of_same_type_left) + if(duplicate_message_check(finishing_poll)) alert.update_stacks_overlay() else alert.owner.clear_alert("[finishing_poll.poll_key]_poll_alert") @@ -218,6 +250,13 @@ SUBSYSTEM_DEF(polling) msg += " | Next: [DisplayTimeText(soonest_to_complete.time_left())] ([length(soonest_to_complete.signed_up)] candidates)" return ..() +///Is there a multiple of the given event type running right now? +/datum/controller/subsystem/polling/proc/duplicate_message_check(datum/candidate_poll/poll_to_check) + for(var/datum/candidate_poll/running_poll as anything in currently_polling) + if((running_poll.poll_key == poll_to_check.poll_key && running_poll != poll_to_check) && running_poll.time_left() > 0) + return TRUE + return FALSE + /datum/controller/subsystem/polling/proc/get_next_poll_to_finish() var/lowest_time_left = INFINITY var/next_poll_to_finish diff --git a/code/controllers/subsystem/processing/quirks.dm b/code/controllers/subsystem/processing/quirks.dm index d112cfe49e2..040276b5596 100644 --- a/code/controllers/subsystem/processing/quirks.dm +++ b/code/controllers/subsystem/processing/quirks.dm @@ -5,6 +5,7 @@ // Shifted to glob so they are generated at world start instead of risking players doing preference stuff before the subsystem inits GLOBAL_LIST_INIT_TYPED(quirk_blacklist, /list/datum/quirk, list( list(/datum/quirk/item_quirk/blindness, /datum/quirk/item_quirk/nearsighted), + list(/datum/quirk/item_quirk/blindness, /datum/quirk/touchy), list(/datum/quirk/jolly, /datum/quirk/depression, /datum/quirk/apathetic, /datum/quirk/hypersensitive), list(/datum/quirk/no_taste, /datum/quirk/vegetarian, /datum/quirk/deviant_tastes, /datum/quirk/gamer), list(/datum/quirk/pineapple_liker, /datum/quirk/pineapple_hater, /datum/quirk/gamer), diff --git a/code/controllers/subsystem/processing/station.dm b/code/controllers/subsystem/processing/station.dm index b30a276fc36..a31274787c8 100644 --- a/code/controllers/subsystem/processing/station.dm +++ b/code/controllers/subsystem/processing/station.dm @@ -11,13 +11,20 @@ PROCESSING_SUBSYSTEM_DEF(station) var/list/selectable_traits_by_types = list(STATION_TRAIT_POSITIVE = list(), STATION_TRAIT_NEUTRAL = list(), STATION_TRAIT_NEGATIVE = list()) ///Currently active announcer. Starts as a type but gets initialized after traits are selected var/datum/centcom_announcer/announcer = /datum/centcom_announcer/default + ///A list of trait roles that should be protected from antag + var/list/antag_protected_roles = list() + ///A list of trait roles that should never be able to roll antag + var/list/antag_restricted_roles = list() -/datum/controller/subsystem/processing/station/Initialize() + /// Assosciative list of station goal type -> goal instance + var/list/datum/station_goal/goals_by_type = list() +/datum/controller/subsystem/processing/station/Initialize() //If doing unit tests we don't do none of that trait shit ya know? // Autowiki also wants consistent outputs, for example making sure the vending machine page always reports the normal products #if !defined(UNIT_TESTS) && !defined(AUTOWIKI) SetupTraits() + display_lobby_traits() #endif announcer = new announcer() //Initialize the station's announcer datum @@ -25,6 +32,45 @@ PROCESSING_SUBSYSTEM_DEF(station) return SS_INIT_SUCCESS +/datum/controller/subsystem/processing/station/Recover() + station_traits = SSstation.station_traits + selectable_traits_by_types = SSstation.selectable_traits_by_types + announcer = SSstation.announcer + antag_protected_roles = SSstation.antag_protected_roles + antag_restricted_roles = SSstation.antag_restricted_roles + goals_by_type = SSstation.goals_by_type + ..() + +/// This gets called by SSdynamic during initial gamemode setup. +/// This is done because for a greenshift we want all goals to be generated +/datum/controller/subsystem/processing/station/proc/generate_station_goals(goal_budget) + var/list/possible = subtypesof(/datum/station_goal) + + var/goal_weights = 0 + var/chosen_goals = list() + var/is_planetary = SSmapping.is_planetary() + while(possible.len && goal_weights < goal_budget) + var/datum/station_goal/picked = pick_n_take(possible) + if(picked::requires_space && is_planetary) + continue + + goal_weights += initial(picked.weight) + chosen_goals += picked + + for(var/chosen in chosen_goals) + new chosen() + +/// Returns all station goals that are currently active +/datum/controller/subsystem/processing/station/proc/get_station_goals() + var/list/goals = list() + for(var/goal_type in goals_by_type) + goals += goals_by_type[goal_type] + return goals + +/// Returns a specific station goal by type +/datum/controller/subsystem/processing/station/proc/get_station_goal(goal_type) + return goals_by_type[goal_type] + ///Rolls for the amount of traits and adds them to the traits list /datum/controller/subsystem/processing/station/proc/SetupTraits() if (CONFIG_GET(flag/forbid_station_traits)) @@ -57,7 +103,7 @@ PROCESSING_SUBSYSTEM_DEF(station) setup_trait(trait_typepath) continue - if(initial(trait_typepath.trait_flags) & STATION_TRAIT_ABSTRACT) + if(initial(trait_typepath.abstract_type) == trait_typepath) continue //Dont add abstract ones to it if(!(initial(trait_typepath.trait_flags) & STATION_TRAIT_PLANETARY) && SSmapping.is_planetary()) // we're on a planet but we can't do planet ;_; @@ -96,3 +142,12 @@ PROCESSING_SUBSYSTEM_DEF(station) for(var/i in trait_instance.blacklist) var/datum/station_trait/trait_to_remove = i selectable_traits_by_types[initial(trait_to_remove.trait_type)] -= trait_to_remove + +/// Update station trait lobby buttons for clients who joined before we initialised this subsystem +/datum/controller/subsystem/processing/station/proc/display_lobby_traits() + for (var/mob/dead/new_player/player as anything in GLOB.new_player_list) + var/datum/hud/new_player/observer_hud = player.hud_used + if (!istype(observer_hud)) + continue + observer_hud.add_station_trait_buttons() + observer_hud.show_hud(observer_hud.hud_version) diff --git a/code/controllers/subsystem/radioactive_nebula.dm b/code/controllers/subsystem/radioactive_nebula.dm index 3b11a7870af..17c0cc9b3da 100644 --- a/code/controllers/subsystem/radioactive_nebula.dm +++ b/code/controllers/subsystem/radioactive_nebula.dm @@ -50,9 +50,10 @@ SUBSYSTEM_DEF(radioactive_nebula) /// Loop through radioactive space (with lag checks) and make it all radioactive! /datum/controller/subsystem/radioactive_nebula/proc/irradiate_everything() for (var/area/area as anything in get_areas(radioactive_nebula.radioactive_areas)) - for (var/turf/turf as anything in area.get_contained_turfs()) - for (var/atom/movable/target as anything in turf) - fake_irradiate(target) + for (var/list/zlevel_turfs as anything in area.get_zlevel_turf_lists()) + for (var/turf/area_turf as anything in zlevel_turfs) + for (var/atom/movable/target as anything in area_turf) + fake_irradiate(target) CHECK_TICK diff --git a/code/controllers/subsystem/research.dm b/code/controllers/subsystem/research.dm index 1d31582fc5f..8bba21500b5 100644 --- a/code/controllers/subsystem/research.dm +++ b/code/controllers/subsystem/research.dm @@ -38,9 +38,12 @@ SUBSYSTEM_DEF(research) /obj/item/assembly/signaler/anomaly = list(TECHWEB_POINT_TYPE_GENERIC = 10000) ) var/list/errored_datums = list() - var/list/point_types = list() //typecache style type = TRUE list + ///Associated list of all point types that techwebs will have and their respective 'abbreviated' name. + var/list/point_types = list(TECHWEB_POINT_TYPE_GENERIC = "Gen. Res.") //---------------------------------------------- - var/list/single_server_income = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_SINGLE_SERVER_INCOME) + var/list/single_server_income = list( + TECHWEB_POINT_TYPE_GENERIC = TECHWEB_SINGLE_SERVER_INCOME, + ) //^^^^^^^^ ALL OF THESE ARE PER SECOND! ^^^^^^^^ //Aiming for 1.5 hours to max R&D @@ -59,6 +62,7 @@ SUBSYSTEM_DEF(research) /obj/item/assembly/signaler/anomaly/hallucination = MAX_CORES_HALLUCINATION, /obj/item/assembly/signaler/anomaly/bioscrambler = MAX_CORES_BIOSCRAMBLER, /obj/item/assembly/signaler/anomaly/dimensional = MAX_CORES_DIMENSIONAL, + /obj/item/assembly/signaler/anomaly/ectoplasm = MAX_CORES_ECTOPLASMIC, ) /// Lookup list for ordnance briefers. @@ -67,13 +71,13 @@ SUBSYSTEM_DEF(research) var/list/datum/scientific_partner/scientific_partners = list() /datum/controller/subsystem/research/Initialize() - point_types = TECHWEB_POINT_TYPE_LIST_ASSOCIATIVE_NAMES initialize_all_techweb_designs() initialize_all_techweb_nodes() populate_ordnance_experiments() new /datum/techweb/science new /datum/techweb/admin new /datum/techweb/oldstation + new /datum/techweb/tarkon //NOVA EDIT autosort_categories() error_design = new error_node = new diff --git a/code/controllers/subsystem/server_maint.dm b/code/controllers/subsystem/server_maint.dm index 69a5edcca3a..f011d01ca67 100644 --- a/code/controllers/subsystem/server_maint.dm +++ b/code/controllers/subsystem/server_maint.dm @@ -19,6 +19,9 @@ SUBSYSTEM_DEF(server_maint) world.hub_password = "" //quickly! before the hubbies see us. /datum/controller/subsystem/server_maint/Initialize() + if (fexists("tmp/")) + fdel("tmp/") + if (CONFIG_GET(flag/hub)) world.update_hub_visibility(TRUE) //Keep in mind, because of how delay works adding a list here makes each list take wait * delay more time to clear @@ -82,6 +85,8 @@ SUBSYSTEM_DEF(server_maint) return /datum/controller/subsystem/server_maint/Shutdown() + if (fexists("tmp/")) + fdel("tmp/") kick_clients_in_lobby(span_boldannounce("The round came to an end with you in the lobby."), TRUE) //second parameter ensures only afk clients are kicked var/server = CONFIG_GET(string/server) for(var/thing in GLOB.clients) diff --git a/code/controllers/subsystem/shuttle.dm b/code/controllers/subsystem/shuttle.dm index bb88e8d6824..ce7645529cb 100644 --- a/code/controllers/subsystem/shuttle.dm +++ b/code/controllers/subsystem/shuttle.dm @@ -645,7 +645,7 @@ SUBSYSTEM_DEF(shuttle) var/datum/turf_reservation/proposal = SSmapping.request_turf_block_reservation( transit_width, transit_height, - 1, + z_size = 1, //if this is changed the turf uncontain code below has to be updated to support multiple zs reservation_type = /datum/turf_reservation/transit, turf_type_override = transit_path, ) @@ -679,17 +679,22 @@ SUBSYSTEM_DEF(shuttle) if(!midpoint) qdel(proposal) return FALSE + var/area/old_area = midpoint.loc - old_area.turfs_to_uncontain += proposal.reserved_turfs - var/area/shuttle/transit/A = new() - A.parallax_movedir = travel_dir - A.contents = proposal.reserved_turfs - A.contained_turfs = proposal.reserved_turfs + LISTASSERTLEN(old_area.turfs_to_uncontain_by_zlevel, bottomleft.z, list()) + old_area.turfs_to_uncontain_by_zlevel[bottomleft.z] += proposal.reserved_turfs + + var/area/shuttle/transit/new_area = new() + new_area.parallax_movedir = travel_dir + new_area.contents = proposal.reserved_turfs + LISTASSERTLEN(new_area.turfs_by_zlevel, bottomleft.z, list()) + new_area.turfs_by_zlevel[bottomleft.z] = proposal.reserved_turfs + var/obj/docking_port/stationary/transit/new_transit_dock = new(midpoint) new_transit_dock.reserved_area = proposal new_transit_dock.name = "Transit for [M.shuttle_id]/[M.name]" new_transit_dock.owner = M - new_transit_dock.assigned_area = A + new_transit_dock.assigned_area = new_area // Add 180, because ports point inwards, rather than outwards new_transit_dock.setDir(angle2dir(dock_angle)) diff --git a/code/controllers/subsystem/stock_market.dm b/code/controllers/subsystem/stock_market.dm index c0d85eaf85d..c9f632c7faf 100644 --- a/code/controllers/subsystem/stock_market.dm +++ b/code/controllers/subsystem/stock_market.dm @@ -13,14 +13,16 @@ SUBSYSTEM_DEF(stock_market) var/list/materials_trend_life = list() /// Associated list of materials alongside their available quantity. This is used to determine how much of a material is available to buy, and how much buying and selling affects the price. var/list/materials_quantity = list() + /// A list of all currently active stock market events. + var/list/active_events = list() /// HTML string that is used to display the market events to the player. var/news_string = "" /datum/controller/subsystem/stock_market/Initialize() for(var/datum/material/possible_market as anything in subtypesof(/datum/material)) // I need to make this work like this, but lets hardcode it for now - if(initial(possible_market.tradable)) + if(possible_market.tradable) materials_prices += possible_market - materials_prices[possible_market] = initial(possible_market.value_per_unit) * SHEET_MATERIAL_AMOUNT + materials_prices[possible_market] = possible_market.value_per_unit * SHEET_MATERIAL_AMOUNT materials_trends += possible_market materials_trends[possible_market] = rand(MARKET_TREND_DOWNWARD,MARKET_TREND_UPWARD) //aka -1 to 1 @@ -29,11 +31,14 @@ SUBSYSTEM_DEF(stock_market) materials_trend_life[possible_market] = rand(1,10) materials_quantity += possible_market - materials_quantity[possible_market] = initial(possible_market.tradable_base_quantity) + (rand(-initial(possible_market.tradable_base_quantity) * 0.5, initial(possible_market.tradable_base_quantity) * 0.5)) + materials_quantity[possible_market] = possible_market.tradable_base_quantity + (rand(-(possible_market.tradable_base_quantity) * 0.5, possible_market.tradable_base_quantity * 0.5)) return SS_INIT_SUCCESS + /datum/controller/subsystem/stock_market/fire(resumed) for(var/datum/material/market as anything in materials_prices) handle_trends_and_price(market) + for(var/datum/stock_market_event/event as anything in active_events) + event.handle() /** * Handles shifts in the cost of materials, and in what direction the material is most likely to move. @@ -41,17 +46,16 @@ SUBSYSTEM_DEF(stock_market) /datum/controller/subsystem/stock_market/proc/handle_trends_and_price(datum/material/mat) if(prob(MARKET_EVENT_PROBABILITY)) handle_market_event(mat) - return var/trend = materials_trends[mat] var/trend_life = materials_trend_life[mat] var/price_units = materials_prices[mat] - var/price_minimum = round(initial(mat.value_per_unit) * SHEET_MATERIAL_AMOUNT * 0.5) - if(!isnull(initial(mat.minimum_value_override))) - price_minimum = round(initial(mat.minimum_value_override) * SHEET_MATERIAL_AMOUNT) - var/price_maximum = round(initial(mat.value_per_unit) * SHEET_MATERIAL_AMOUNT * 3) - var/price_baseline = initial(mat.value_per_unit) * SHEET_MATERIAL_AMOUNT - var/quantity_baseline = initial(mat.tradable_base_quantity) + var/price_minimum = round(mat.value_per_unit * SHEET_MATERIAL_AMOUNT * 0.5) + if(!isnull(mat.minimum_value_override)) + price_minimum = round(mat.minimum_value_override * SHEET_MATERIAL_AMOUNT) + var/price_maximum = round(mat.value_per_unit * SHEET_MATERIAL_AMOUNT * 3) + var/price_baseline = mat.value_per_unit * SHEET_MATERIAL_AMOUNT + var/quantity_baseline = mat.tradable_base_quantity var/stock_quantity = materials_quantity[mat] @@ -76,7 +80,7 @@ SUBSYSTEM_DEF(stock_market) materials_trends[mat] = MARKET_TREND_DOWNWARD else materials_trends[mat] = MARKET_TREND_STABLE - materials_trend_life[mat] = rand(3,10) // Change our trend life for x number of cycles + materials_trend_life[mat] = rand(3,10) // Change our trend life for x number of fires of the subsystem else materials_trend_life[mat] -= 1 @@ -101,55 +105,7 @@ SUBSYSTEM_DEF(stock_market) * Events are also broadcast to the newscaster as a fun little fluff piece. Good way to tell some lore as well, or just make a joke. */ /datum/controller/subsystem/stock_market/proc/handle_market_event(datum/material/mat) - - var/company_name = list( // Pick a random company name from the list, I let copilot make a few up for me which is why some suck - "Nakamura Engineering", - "Robust Industries, LLC", - "MODular Solutions", - "SolGov", - "Australicus Industrial Mining", - "Vey-Medical", - "Aussec Armory", - "Dreamland Robotics" - ) - var/circumstance - var/event = rand(1,3) - - var/price_units = materials_prices[mat] - var/price_minimum = round(initial(mat.value_per_unit) * SHEET_MATERIAL_AMOUNT * 0.5) - if(!isnull(initial(mat.minimum_value_override))) - price_minimum = round(initial(mat.minimum_value_override) * SHEET_MATERIAL_AMOUNT) - var/price_maximum = round(initial(mat.value_per_unit) * SHEET_MATERIAL_AMOUNT * 3) - var/price_baseline = initial(mat.value_per_unit) * SHEET_MATERIAL_AMOUNT - - switch(event) - if(1) //Reset to stable - materials_prices[mat] = price_baseline - materials_trends[mat] = MARKET_TREND_STABLE - materials_trend_life[mat] = 1 - circumstance = pick(list( - "[pick(company_name)] has been bought out by a private investment firm. As a result, [initial(mat.name)] is now stable at [materials_prices[mat]] cr.", - "Due to a corporate restructuring, the largest supplier of [initial(mat.name)] has had the price changed to [materials_prices[mat]] cr.", - "[initial(mat.name)] is now under a monopoly by [pick(company_name)]. The price has been changed to [materials_prices[mat]] cr accordingly." - )) - if(2) //Big boost - materials_prices[mat] += round(gaussian(price_units * 0.5, price_units * 0.1)) - materials_prices[mat] = clamp(materials_prices[mat], price_minimum, price_maximum) - materials_trends[mat] = MARKET_TREND_UPWARD - materials_trend_life[mat] = rand(1,5) - circumstance = pick(list( - "[pick(company_name)] has just released a new product that uses [initial(mat.name)]! As a result, the price has been raised to [materials_prices[mat]] cr.", - "Due to [pick(company_name)] finding a new property of [initial(mat.name)], its price has been raised to [materials_prices[mat]] cr.", - "A study has found that [initial(mat.name)] may run out within the next 100 years. The price has raised to [materials_prices[mat]] cr due to panic." - )) - if(3) //Big drop - materials_prices[mat] -= round(gaussian(price_units * 1.5, price_units * 0.1)) - materials_prices[mat] = clamp(materials_prices[mat], price_minimum, price_maximum) - materials_trends[mat] = MARKET_TREND_DOWNWARD - materials_trend_life[mat] = rand(1,5) - circumstance = pick(list( - "[pick(company_name)]'s latest product has seen major controversy, and as a result, the price of [initial(mat.name)] has dropped to [materials_prices[mat]] cr.", - "Due to a new competitor, the price of [initial(mat.name)] has dropped to [materials_prices[mat]] cr.", - "[initial(mat.name)] has been found to be a carcinogen. The price has dropped to [materials_prices[mat]] cr due to panic." - )) - news_string += circumstance + "
" // Add the event to the news_string, formatted for newscasters. + var/datum/stock_market_event/event = pick(subtypesof(/datum/stock_market_event)) + event = new event + if(event.start_event(mat)) + active_events += event diff --git a/code/controllers/subsystem/ticker.dm b/code/controllers/subsystem/ticker.dm index 75b51b2babc..ca4cf154b8f 100644 --- a/code/controllers/subsystem/ticker.dm +++ b/code/controllers/subsystem/ticker.dm @@ -239,7 +239,6 @@ SUBSYSTEM_DEF(ticker) return TRUE return FALSE - /datum/controller/subsystem/ticker/proc/setup() to_chat(world, span_boldannounce("Starting game...")) var/init_start = world.timeofday @@ -249,6 +248,7 @@ SUBSYSTEM_DEF(ticker) var/can_continue = FALSE can_continue = SSdynamic.pre_setup() //Choose antagonists CHECK_TICK + SEND_GLOBAL_SIGNAL(COMSIG_GLOB_PRE_JOBS_ASSIGNED, src) can_continue = can_continue && SSjob.DivideOccupations() //Distribute jobs CHECK_TICK diff --git a/code/controllers/subsystem/timer.dm b/code/controllers/subsystem/timer.dm index 80ee843bf8b..bc894de9bee 100644 --- a/code/controllers/subsystem/timer.dm +++ b/code/controllers/subsystem/timer.dm @@ -4,8 +4,6 @@ #define BUCKET_POS(timer) (((ROUND_UP((timer.timeToRun - timer.timer_subsystem.head_offset) / world.tick_lag)+1) % BUCKET_LEN) || BUCKET_LEN) /// Gets the maximum time at which timers will be invoked from buckets, used for deferring to secondary queue #define TIMER_MAX(timer_ss) (timer_ss.head_offset + TICKS2DS(BUCKET_LEN + timer_ss.practical_offset - 1)) -/// Max float with integer precision -#define TIMER_ID_MAX (2**24) /** * # Timer Subsystem @@ -731,4 +729,3 @@ SUBSYSTEM_DEF(timer) #undef BUCKET_LEN #undef BUCKET_POS #undef TIMER_MAX -#undef TIMER_ID_MAX diff --git a/code/datums/achievements/_achievement_data.dm b/code/datums/achievements/_achievement_data.dm index 295770b89b5..8b78cf7c8f3 100644 --- a/code/datums/achievements/_achievement_data.dm +++ b/code/datums/achievements/_achievement_data.dm @@ -113,7 +113,7 @@ "name" = award.name, "desc" = award.desc, "category" = award.category, - "icon_class" = assets.icon_class_name(award.icon), + "icon_class" = assets.icon_class_name("achievement-[award.icon_state]"), "value" = data[achievement_type], ) award_data += award.get_ui_data(user.ckey) diff --git a/code/datums/achievements/_awards.dm b/code/datums/achievements/_awards.dm index 23ab5e81001..d99659ea780 100644 --- a/code/datums/achievements/_awards.dm +++ b/code/datums/achievements/_awards.dm @@ -2,8 +2,10 @@ ///Name of the achievement, If null it won't show up in the achievement browser. (Handy for inheritance trees) var/name var/desc = "You did it." - ///The icon state for this award. The icon file is found in ui_icons/achievements. - var/icon = "default" + ///The dmi icon file that holds the award's icon state. + var/icon = ACHIEVEMENTS_SET + ///The icon state for this award. + var/icon_state = "default" var/category = "Normal" @@ -80,7 +82,7 @@ ///Achievements are one-off awards for usually doing cool things. /datum/award/achievement desc = "Achievement for epic people" - icon = "" // This should warn contributors that do not declare an icon when contributing new achievements. + icon_state = "" // This should warn contributors that do not declare an icon when contributing new achievements. ///How many players have earned this achievement var/times_achieved = 0 @@ -171,7 +173,7 @@ /datum/award/score/achievements_score name = "Achievements Unlocked" desc = "Don't worry, metagaming is all that matters." - icon = "elephant" //Obey the reference + icon_state = "elephant" //Obey the reference database_id = ACHIEVEMENTS_SCORE /datum/award/score/achievements_score/get_ui_data(key) diff --git a/code/datums/achievements/boss_achievements.dm b/code/datums/achievements/boss_achievements.dm index a378b703e46..c02286b8f7a 100644 --- a/code/datums/achievements/boss_achievements.dm +++ b/code/datums/achievements/boss_achievements.dm @@ -5,119 +5,119 @@ name = "Tendril Exterminator" desc = "Watch your step" database_id = BOSS_MEDAL_TENDRIL - icon = "tendril" + icon_state = "tendril" /datum/award/achievement/boss/boss_killer name = "Boss Killer" desc = "You've come a long ways from asking how to switch hands." database_id = "Boss Killer" - icon = "firstboss" + icon_state = "firstboss" /datum/award/achievement/boss/blood_miner_kill name = "Blood-Drunk Miner Killer" desc = "I guess he couldn't handle his drink that well." database_id = BOSS_MEDAL_MINER - icon = "miner" + icon_state = "miner" /datum/award/achievement/boss/demonic_miner_kill name = "Demonic-Frost Miner Killer" desc = "Definitely harder than the Blood-Drunk Miner." database_id = BOSS_MEDAL_FROSTMINER - icon = "frostminer" + icon_state = "frostminer" /datum/award/achievement/boss/bubblegum_kill name = "Bubblegum Killer" desc = "I guess he wasn't made of candy after all" database_id = BOSS_MEDAL_BUBBLEGUM - icon = "bbgum" + icon_state = "bbgum" /datum/award/achievement/boss/colossus_kill name = "Colossus Killer" desc = "The bigger they are... the better the loot" database_id = BOSS_MEDAL_COLOSSUS - icon = "colossus" + icon_state = "colossus" /datum/award/achievement/boss/drake_kill name = "Drake Killer" desc = "Now I can wear Rune Platebodies!" database_id = BOSS_MEDAL_DRAKE - icon = "drake" + icon_state = "drake" /datum/award/achievement/boss/hierophant_kill name = "Hierophant Killer" desc = "Hierophant, but not triumphant." database_id = BOSS_MEDAL_HIEROPHANT - icon = "hierophant" + icon_state = "hierophant" /datum/award/achievement/boss/legion_kill name = "Legion Killer" desc = "We were many..now we are none." database_id = BOSS_MEDAL_LEGION - icon = "legion" + icon_state = "legion" /datum/award/achievement/boss/wendigo_kill name = "Wendigo Killer" desc = "You've now ruined years of mythical storytelling." database_id = BOSS_MEDAL_WENDIGO - icon = "wendigo" + icon_state = "wendigo" /datum/award/achievement/boss/blood_miner_crusher name = "Blood-Drunk Miner Crusher" desc = "I guess he couldn't handle his drink that well." database_id = BOSS_MEDAL_MINER_CRUSHER - icon = "miner" + icon_state = "miner" /datum/award/achievement/boss/demonic_miner_crusher name = "Demonic-Frost Miner Crusher" desc = "Definitely harder than the Blood-Drunk Miner." database_id = BOSS_MEDAL_FROSTMINER_CRUSHER - icon = "frostminer" + icon_state = "frostminer" /datum/award/achievement/boss/bubblegum_crusher name = "Bubblegum Crusher" desc = "I guess he wasn't made of candy after all" database_id = BOSS_MEDAL_BUBBLEGUM_CRUSHER - icon = "bbgum" + icon_state = "bbgum" /datum/award/achievement/boss/colossus_crusher name = "Colossus Crusher" desc = "The bigger they are... the better the loot" database_id = BOSS_MEDAL_COLOSSUS_CRUSHER - icon = "colossus" + icon_state = "colossus" /datum/award/achievement/boss/drake_crusher name = "Drake Crusher" desc = "Now I can wear Rune Platebodies!" database_id = BOSS_MEDAL_DRAKE_CRUSHER - icon = "drake" + icon_state = "drake" /datum/award/achievement/boss/hierophant_crusher name = "Hierophant Crusher" desc = "Hierophant, but not triumphant." database_id = BOSS_MEDAL_HIEROPHANT_CRUSHER - icon = "hierophant" + icon_state = "hierophant" /datum/award/achievement/boss/legion_crusher name = "Legion Crusher" desc = "We were many... now we are none." database_id = BOSS_MEDAL_LEGION_CRUSHER - icon = "legion" + icon_state = "legion" /datum/award/achievement/boss/wendigo_crusher name = "Wendigo Crusher" desc = "You've now ruined years of mythical storytelling." database_id = BOSS_MEDAL_WENDIGO_CRUSHER - icon = "wendigo" + icon_state = "wendigo" //should be removed soon /datum/award/achievement/boss/king_goat_kill name = "King Goat Killer" desc = "The king is dead, long live the king!" database_id = BOSS_MEDAL_KINGGOAT - icon = "goatboss" + icon_state = "goatboss" /datum/award/achievement/boss/king_goat_crusher name = "King Goat Crusher" desc = "The king is dead, long live the king!" database_id = BOSS_MEDAL_KINGGOAT_CRUSHER - icon = "goatboss" + icon_state = "goatboss" diff --git a/code/datums/achievements/job_achievements.dm b/code/datums/achievements/job_achievements.dm index 6aafbee8e68..bd37de7c0e1 100644 --- a/code/datums/achievements/job_achievements.dm +++ b/code/datums/achievements/job_achievements.dm @@ -8,7 +8,7 @@ name = "All Within Theoretical Limits" desc = "I never thought I'd see a resonance cascade, let alone prevent one..." database_id = MEDAL_THEORETICAL_LIMITS - icon = "theoreticallimits" + icon_state = "theoreticallimits" //medical @@ -16,13 +16,13 @@ name = "Mister Sandman" desc = "Mechanically speaking, there's no real benefit to being unconscious during surgery. Weird how insistent this doctor is about using the N2O anyway though, huh?" database_id = MEDAL_SANDMAN - icon = "basemisc" + icon_state = "basemisc" /datum/award/achievement/jobs/helbitaljanken name = "Helbitaljanken" desc = "You janked hard" database_id = MEDAL_HELBITALJANKEN - icon = "helbital" + icon_state = "helbital" //mining @@ -30,7 +30,7 @@ name = "Frenching" desc = "Just a taste, for science!" database_id = MEDAL_FRENCHING - icon = "frenchingthebubble" + icon_state = "frenchingthebubble" //science @@ -38,13 +38,13 @@ name = "Feat of Strength" desc = "If the rod is immovable, is it passing you or are you passing it?" database_id = MEDAL_RODSUPLEX - icon = "featofstrength" + icon_state = "featofstrength" /datum/award/achievement/jobs/snail name = "KKKiiilll mmmeee" desc = "You were a little too ambitious, but hey, I guess you're still alive?" database_id = MEDAL_SNAIL - icon = "snail" + icon_state = "snail" //all of service! hip hip! @@ -52,18 +52,18 @@ name = "Centcom Grade: Shitty Service" desc = "Well, you at least tried. How about trying harder?" database_id = MEDAL_BAD_SERVICE - icon = "service_bad" + icon_state = "service_bad" /datum/award/achievement/jobs/service_okay name = "Centcom Grade: Acceptable Service" desc = "Well, it'll do! You and your department did just fine." database_id = MEDAL_OKAY_SERVICE - icon = "service_okay" + icon_state = "service_okay" /datum/award/achievement/jobs/service_good name = "Centcom Grade: Exemplary Service" desc = "Centcom is very impressed with your department!" database_id = MEDAL_GOOD_SERVICE - icon = "service_good" + icon_state = "service_good" //civilian achievies! while not recognized by the code, it is recognized by our hearts diff --git a/code/datums/achievements/mafia_achievements.dm b/code/datums/achievements/mafia_achievements.dm index da70fb11e87..31462f7a0ce 100644 --- a/code/datums/achievements/mafia_achievements.dm +++ b/code/datums/achievements/mafia_achievements.dm @@ -7,103 +7,103 @@ name = "Assistant Victory" desc = "If you got killed instead of someone more important, you just flexed the true strength of your \"\"\"\"role\"\"\"\"." database_id = MAFIA_MEDAL_ASSISTANT - icon = "town" + icon_state = "town" /datum/award/achievement/mafia/detective name = "Detective Victory" desc = "If you did this with a Medical Doctor in the game, i'm not really that impressed." database_id = MAFIA_MEDAL_DETECTIVE - icon = "town" + icon_state = "town" /datum/award/achievement/mafia/psychologist name = "Psychologist Victory" desc = "You learned how to not reveal someone random night one! Or... maybe you're just a lucky bastard." database_id = MAFIA_MEDAL_PSYCHOLOGIST - icon = "town" + icon_state = "town" /datum/award/achievement/mafia/chaplain name = "Chaplain Victory" desc = "Useless... until the one night the thoughtfeeder confidently claims themselves as detective. Mafia's true bullshit detector." database_id = MAFIA_MEDAL_CHAPLAIN - icon = "town" + icon_state = "town" /datum/award/achievement/mafia/md name = "Medical Doctor Victory" desc = "Congratulations on learning how to not talk!" database_id = MAFIA_MEDAL_MD - icon = "town" + icon_state = "town" /datum/award/achievement/mafia/officer name = "Security Officer Victory" desc = "Don't worry, you can win this if you're dead! You... did use your ability to become dead, right?" database_id = MAFIA_MEDAL_OFFICER - icon = "town" + icon_state = "town" /datum/award/achievement/mafia/lawyer name = "Lawyer Victory" desc = "Oh don't mind me, i'm just the worst rol- Oops, I just instantly ended the game." database_id = MAFIA_MEDAL_LAWYER - icon = "town" + icon_state = "town" /datum/award/achievement/mafia/hop name = "Head of Personnel Victory" desc = "King of Assistants, waster of a single mafia's night, thrower of games." database_id = MAFIA_MEDAL_HOP - icon = "town" + icon_state = "town" /datum/award/achievement/mafia/warden name = "Warden Victory" desc = "Make changelings think you're detective, go on lockdown, actual detective investigates you and dies. Cha cha real smooth!" database_id = MAFIA_MEDAL_WARDEN - icon = "town" + icon_state = "town" /datum/award/achievement/mafia/hos name = "Head of Security Victory" desc = "Certified not shitcurity." database_id = MAFIA_MEDAL_HOS - icon = "town" + icon_state = "town" /datum/award/achievement/mafia/changeling name = "Changeling Victory" desc = "I think the changelings are metacomming." database_id = MAFIA_MEDAL_CHANGELING - icon = "mafia" + icon_state = "mafia" /datum/award/achievement/mafia/thoughtfeeder name = "Thoughtfeeder Victory" desc = "Clown's best friend. And Obsessed. And fugitive? Whose side are you on?!" database_id = MAFIA_MEDAL_THOUGHTFEEDER - icon = "mafia" + icon_state = "mafia" /datum/award/achievement/mafia/traitor name = "Traitor Victory" desc = "Guys, we still have two more changelings to ki-!! TRAITOR VICTORY !!" database_id = MAFIA_MEDAL_TRAITOR - icon = "neutral" + icon_state = "neutral" /datum/award/achievement/mafia/nightmare name = "Nightmare Victory" desc = "DID YOUR LIGHT FLICKER?!" database_id = MAFIA_MEDAL_NIGHTMARE - icon = "neutral" + icon_state = "neutral" /datum/award/achievement/mafia/fugitive name = "Fugitive Victory" desc = "I'm just the description on an achievement, but if you end up having to choose between town and changelings, go changelings." database_id = MAFIA_MEDAL_FUGITIVE - icon = "neutral" + icon_state = "neutral" /datum/award/achievement/mafia/obsessed name = "Obsessed Victory" desc = "You got your target lynched, so instead of being spiteful and annoying, you're just smug and annoying." database_id = MAFIA_MEDAL_OBSESSED - icon = "neutral" + icon_state = "neutral" /datum/award/achievement/mafia/clown name = "Clown Victory" desc = "Did you know this works on traitors, despite their immunity? If you hit the jackpot and manage to kill one, they'll salt into the next dimension. Clown tips!" database_id = MAFIA_MEDAL_CLOWN - icon = "neutral" + icon_state = "neutral" ///ALL THE ACHIEVEMENTS FOR MISC MAFIA ODDITIES/// @@ -111,4 +111,4 @@ name = "Universally Hated" desc = "Managed to get more than 12 votes when put up on trial, jesus christ." database_id = MAFIA_MEDAL_HATED - icon = "hated" + icon_state = "hated" diff --git a/code/datums/achievements/misc_achievements.dm b/code/datums/achievements/misc_achievements.dm index 3a62e6c940a..e92fc3bc56b 100644 --- a/code/datums/achievements/misc_achievements.dm +++ b/code/datums/achievements/misc_achievements.dm @@ -1,53 +1,54 @@ /datum/award/achievement/misc category = "Misc" - icon = "basemisc" //for those achievements that still need an actual icon, later. + icon_state = "basemisc" //for those achievements that still need an actual icon, later. /datum/award/achievement/misc/meteor_examine name = "Your Life Before Your Eyes" desc = "Take a close look at hurtling space debris" database_id = MEDAL_METEOR - icon = "meteors" + icon_state = "meteors" /datum/award/achievement/misc/pulse name = "Jackpot" desc = "Win a pulse rifle from an arcade machine" database_id = MEDAL_PULSE - icon = "jackpot" + icon_state = "jackpot" /datum/award/achievement/misc/time_waste name = "Time waster" desc = "Speak no evil, hear no evil, see just errors" database_id = MEDAL_TIMEWASTE - icon = "timewaste" + icon_state = "timewaste" /datum/award/achievement/misc/round_and_full name = "Round and Full" desc = "Well at least you aren't down the river, I hear they eat people there." database_id = MEDAL_CLOWNCARKING - icon = "clownking" + icon_state = "clownking" /datum/award/achievement/misc/the_best_driver name = "The Best Driver" desc = "100 honks later" database_id = MEDAL_THANKSALOT - icon = "clownthanks" + icon_state = "clownthanks" /datum/award/achievement/misc/getting_an_upgrade name = "Getting an upgrade" desc = "Make your first unique material item!" database_id = MEDAL_MATERIALCRAFT - icon = "upgrade" + icon_state = "upgrade" /datum/award/achievement/misc/rocket_holdup name = "Disk, Please!" desc = "Is the man currently pointing a loaded rocket launcher at your head point blank really dumb enough to pull the trigger? Do you really want to find out?" database_id = MEDAL_DISKPLEASE - icon = "rocket_holdup" + icon_state = "rocket_holdup" /datum/award/achievement/misc/gamer name = "My Watchlist Status is Not Important" desc = "You may be under the impression that violent video games are a harmless pastime, but the security and medical personnel swarming your location with batons and knockout gas look like they disagree." database_id = MEDAL_GAMER + icon_state = "live_sec_reaction" /datum/award/achievement/misc/vendor_squish name = "I Was a Teenage Anarchist" @@ -68,160 +69,161 @@ name = "One Lean, Mean, Cleaning Machine" desc = "How does it feel to know that your workplace values a mop bucket on wheels more than you?" // i can do better than this give me time database_id = MEDAL_CLEANBOSS + icon_state = "cleanboss" /datum/award/achievement/misc/rule8 name = "Rule 8" desc = "Call an admin this is ILLEGAL!!" database_id = MEDAL_RULE8 - icon = "rule8" + icon_state = "rule8" /datum/award/achievement/misc/speed_round name = "Long shift" desc = "Well, that didn't take long." database_id = MEDAL_LONGSHIFT - icon = "longshift" + icon_state = "longshift" /datum/award/achievement/misc/lookoutsir name = "Look Out, Sir!" desc = "Either awarded for making the ultimate sacrifice for your comrades, or a really dumb attempt at grenade jumping." database_id = MEDAL_LOOKOUTSIR - icon = "martyr" // purple heart on an explosive danger warning sign (well, sort of) + icon_state = "martyr" // purple heart on an explosive danger warning sign (well, sort of) /datum/award/achievement/misc/gottem name = "HA, GOTTEM" desc = "Made you look!" database_id = MEDAL_GOTTEM - icon = "gottem" + icon_state = "gottem" /datum/award/achievement/misc/ascension name = "Ascension" desc = "Caedite eos. Novit enim Dominus qui sunt eius." database_id = MEDAL_ASCENSION - icon = "ascension" + icon_state = "ascension" /datum/award/achievement/misc/ash_ascension name = "Nightwatcher's Eyes" desc = "You've risen above the flames, became one with the ashes. You've been reborn as one with the Nightwatcher." database_id = MEDAL_ASH_ASCENSION - icon = "ashascend" + icon_state = "ashascend" /datum/award/achievement/misc/flesh_ascension name = "Vortex of Arms" desc = "You've became something more, something greater. A piece of the emperor resides within you, and you within him." database_id = MEDAL_FLESH_ASCENSION - icon = "fleshascend" + icon_state = "fleshascend" /datum/award/achievement/misc/rust_ascension name = "Hills of Rust" desc = "You've summoned a piece of the Hill of rust, and so the Hills welcome you." database_id = MEDAL_RUST_ASCENSION - icon = "rustascend" + icon_state = "rustascend" /datum/award/achievement/misc/void_ascension name = "All that perish" desc = "Place of a different being, different time. Everything ends there... but maybe it is just the beginning?" database_id = MEDAL_VOID_ASCENSION - icon = "voidascend" + icon_state = "voidascend" /datum/award/achievement/misc/blade_ascension name = "Silver and Steel" desc = "You've become the master of all duellists - the paragon of blades." database_id = MEDAL_BLADE_ASCENSION - icon = "bladeascend" + icon_state = "bladeascend" /datum/award/achievement/misc/cosmic_ascension name = "It arrived" desc = "You managed to teleport an entity on the station that really shouldn't be there." database_id = MEDAL_COSMOS_ASCENSION - icon = "cosmicascend" + icon_state = "cosmicascend" /datum/award/achievement/misc/lock_ascension name = "Secrets of the Locked Labyrinth" desc = "You managed to open a gate into the mansus." database_id = MEDAL_LOCK_ASCENSION - icon = "lockascend" + icon_state = "lockascend" /datum/award/achievement/misc/moon_ascension name = "The Last Act" desc = "You managed to become the ringleader and slay the lie." database_id = MEDAL_MOON_ASCENSION - icon = "moonascend" + icon_state = "moonascend" /datum/award/achievement/misc/grand_ritual_finale name = "Archmage" desc = "Made a big impression on the station with your phenomenal cosmic power." database_id = MEDAL_ARCHMAGE - icon = "archmage" + icon_state = "archmage" /datum/award/achievement/misc/toolbox_soul name = "SOUL'd Out" desc = "My eternal soul was destroyed to make a toolbox look funny and all I got was this achievement..." database_id = MEDAL_TOOLBOX_SOUL - icon = "toolbox_soul" + icon_state = "toolbox_soul" /datum/award/achievement/misc/hot_damn name = "Hot Damn!" desc = "Sometimes you need to make some noise to make a point." database_id = MEDAL_HOT_DAMN - icon = "hotdamn" + icon_state = "hotdamn" /datum/award/achievement/misc/cayenne_disk name = "Very Important Piscis" desc = "You can rest well now." database_id = MEDAL_CAYENNE_DISK - icon = "cayenne_disk" + icon_state = "cayenne_disk" /datum/award/achievement/misc/tram_surfer name = "Tram Surfer" desc = "Lights out, guerilla radio!" database_id = MEDAL_TRAM_SURFER - icon = "tram_surfer" + icon_state = "tram_surfer" /datum/award/achievement/misc/cult_shuttle_omfg name = "WHAT JUST HAPPENED" desc = "As a blood cultist, be part of a team that summons 3 shuttle curses within 10 seconds. Imagine cleaning up after them, g r o s s!" database_id = MEDAL_CULT_SHUTTLE_OMFG - icon = "cult_shuttle_omfg" + icon_state = "cult_shuttle_omfg" /datum/award/achievement/misc/clickbait name = "Clickbait" desc = "Where's my free smartphone?!?" database_id = MEDAL_CLICKBAIT - icon = "bait" + icon_state = "bait" /datum/award/achievement/misc/narsupreme name = "If Nar'Sie is so good, why isn't there a..." desc = "Even interdimensional space deitys need a friend." database_id = MEDAL_NARSUPREME - icon = "narsupreme" + icon_state = "narsupreme" /datum/award/achievement/misc/springlock name = "The Man Inside the MODsuit" desc = "Ignore the warning label on a springlock MODsuit." database_id = MEDAL_SPRINGLOCK - icon = "springlock" + icon_state = "springlock" /datum/award/achievement/misc/healthy name = "The Picture of Health" desc = "Don't be such a baby, it's just a heart attack. You've bounced back from worse!" database_id = MEDAL_HEALTHY - icon = "picofhealth" + icon_state = "picofhealth" /datum/award/achievement/misc/gods_wrath name = "God's Wrath" desc = "Did you think you could get away with defiling the word of God?" database_id = MEDAL_GODS_WRATH - icon = "godswrath" + icon_state = "godswrath" /datum/award/achievement/misc/earthquake_victim name = "A Nasty Fall" desc = "...And the earth opened its mouth and swallowed them and their station- all the HOP's men and all their possessions." database_id = MEDAL_EARTHQUAKE_VICTIM - icon = "earthquake" + icon_state = "earthquake" /datum/award/achievement/misc/debt_extinguished name = "Outdebted" desc = "I've paid my dues, shift after shift... I've done my sentence but commited no griff..." database_id = MEDAL_DEBT_EXTINGUISHED - icon = "outdebted" + icon_state = "outdebted" diff --git a/code/datums/achievements/skill_achievements.dm b/code/datums/achievements/skill_achievements.dm index 6384b1b3db4..7e2f3f1a247 100644 --- a/code/datums/achievements/skill_achievements.dm +++ b/code/datums/achievements/skill_achievements.dm @@ -5,10 +5,10 @@ name = "Legendary miner" desc = "No mere rock can stop me!" database_id = MEDAL_LEGENDARY_MINER - icon = "mining" + icon_state = "mining" /datum/award/achievement/skill/legendary_fisher name = "Legendary fisher" desc = "Give a spaceman a fish and you feed him for a while; teach a spaceman to fish and you feed him until the shuttle arrives." database_id = MEDAL_LEGENDARY_FISHER - icon = "fishing_hat" + icon_state = "fishing_hat" diff --git a/code/datums/actions/action.dm b/code/datums/actions/action.dm index 69f8fd42dcf..39e69ba9fa8 100644 --- a/code/datums/actions/action.dm +++ b/code/datums/actions/action.dm @@ -47,6 +47,12 @@ /// This is the icon state for any FOREGROUND overlay icons on the button (such as borders) var/overlay_icon_state + /// full key we are bound to + var/full_key + + /// Toggles whether this action is usable or not + var/action_disabled = FALSE + /datum/action/New(Target) link_to(Target) @@ -108,6 +114,7 @@ RegisterSignals(owner, list(SIGNAL_ADDTRAIT(TRAIT_MAGICALLY_PHASED), SIGNAL_REMOVETRAIT(TRAIT_MAGICALLY_PHASED)), PROC_REF(update_status_on_signal)) if(owner_has_control) + RegisterSignal(grant_to, COMSIG_MOB_KEYDOWN, PROC_REF(keydown), override = TRUE) GiveAction(grant_to) /// Remove the passed mob from being owner of our action @@ -120,6 +127,7 @@ HideFrom(hud.mymob) LAZYREMOVE(remove_from?.actions, src) // We aren't always properly inserted into the viewers list, gotta make sure that action's cleared viewers = list() + UnregisterSignal(remove_from, COMSIG_MOB_KEYDOWN) if(isnull(owner)) return @@ -162,6 +170,8 @@ /datum/action/proc/IsAvailable(feedback = FALSE) if(!owner) return FALSE + if(action_disabled) + return FALSE if((check_flags & AB_CHECK_HANDS_BLOCKED) && HAS_TRAIT(owner, TRAIT_HANDS_BLOCKED)) if (feedback) owner.balloon_alert(owner, "hands blocked!") @@ -308,6 +318,7 @@ * force - whether an update is forced regardless of existing status */ /datum/action/proc/update_button_status(atom/movable/screen/movable/action_button/current_button, force = FALSE) + current_button.update_keybind_maptext(full_key) if(IsAvailable()) current_button.color = rgb(255,255,255,255) else @@ -407,3 +418,14 @@ /// Checks if our action is actively selected. Used for selecting icons primarily. /datum/action/proc/is_action_active(atom/movable/screen/movable/action_button/current_button) return FALSE + +/datum/action/proc/keydown(mob/source, key, client/client, full_key) + SIGNAL_HANDLER + if(isnull(full_key) || full_key != src.full_key) + return + if(istype(source)) + if(source.next_click > world.time) + return + else + source.next_click = world.time + CLICK_CD_RANGE + INVOKE_ASYNC(src, PROC_REF(Trigger)) diff --git a/code/datums/actions/cooldown_action.dm b/code/datums/actions/cooldown_action.dm index cb0d665a5cb..18fe9f22e80 100644 --- a/code/datums/actions/cooldown_action.dm +++ b/code/datums/actions/cooldown_action.dm @@ -187,6 +187,31 @@ else shared_ability.StartCooldownSelf(cooldown_time) +/// Resets the cooldown of this ability +/datum/action/cooldown/proc/ResetCooldown() + next_use_time = world.time + build_all_button_icons(UPDATE_BUTTON_STATUS) + +/// Re-enables this cooldown action +/datum/action/cooldown/proc/enable() + action_disabled = FALSE + build_all_button_icons(UPDATE_BUTTON_STATUS) + +/// Disables this cooldown action +/datum/action/cooldown/proc/disable() + action_disabled = TRUE + build_all_button_icons(UPDATE_BUTTON_STATUS) + +/// Re-enables all cooldown actions +/datum/action/cooldown/proc/enable_cooldown_actions() + for(var/datum/action/cooldown/cd_action in owner.actions) + cd_action.enable() + +/// Disables all cooldown actions +/datum/action/cooldown/proc/disable_cooldown_actions() + for(var/datum/action/cooldown/cd_action in owner.actions) + cd_action.disable() + /datum/action/cooldown/Trigger(trigger_flags, atom/target) . = ..() if(!.) diff --git a/code/datums/actions/mobs/assume_form.dm b/code/datums/actions/mobs/assume_form.dm index b10a91c5d65..03a1a38d3c8 100644 --- a/code/datums/actions/mobs/assume_form.dm +++ b/code/datums/actions/mobs/assume_form.dm @@ -29,9 +29,10 @@ return ..() /datum/action/cooldown/mob_cooldown/assume_form/Activate(atom/target_atom) - StartCooldown(360 SECONDS, 360 SECONDS) + disable_cooldown_actions() determine_intent(target_atom) StartCooldown() + enable_cooldown_actions() return TRUE /// Rapid proc to test if we can assume the form of a given atom. Returns TRUE if we can, FALSE if we can't. Done like this so we can be nice and explicit. @@ -63,7 +64,7 @@ // important: do this at the very end because we might have SIGNAL_ADDTRAIT for this on the mob that's dependent on the above logic SEND_SIGNAL(owner, COMSIG_ACTION_DISGUISED_APPEARANCE, target_atom) - ADD_TRAIT(owner, TRAIT_DISGUISED, REF(src)) + ADD_TRAIT(owner, TRAIT_DISGUISED, ACTION_TRAIT) /// Resets the appearances of the mob to the default. /datum/action/cooldown/mob_cooldown/assume_form/proc/reset_appearances() @@ -84,4 +85,4 @@ owner.cut_overlays() // important: do this very end because we might have SIGNAL_REMOVETRAIT for this on the mob that's dependent on the above logic - REMOVE_TRAIT(owner, TRAIT_DISGUISED, REF(src)) + REMOVE_TRAIT(owner, TRAIT_DISGUISED, ACTION_TRAIT) diff --git a/code/datums/actions/mobs/blood_warp.dm b/code/datums/actions/mobs/blood_warp.dm index 823f756d7af..8503b360954 100644 --- a/code/datums/actions/mobs/blood_warp.dm +++ b/code/datums/actions/mobs/blood_warp.dm @@ -12,8 +12,10 @@ var/remove_inner_pools = TRUE /datum/action/cooldown/mob_cooldown/blood_warp/Activate(atom/target_atom) + disable_cooldown_actions() blood_warp(target_atom) StartCooldown() + enable_cooldown_actions() return TRUE /datum/action/cooldown/mob_cooldown/blood_warp/proc/blood_warp(atom/target) diff --git a/code/datums/actions/mobs/charge.dm b/code/datums/actions/mobs/charge.dm index d235b4d50ab..9b8e1c36ef8 100644 --- a/code/datums/actions/mobs/charge.dm +++ b/code/datums/actions/mobs/charge.dm @@ -22,9 +22,10 @@ var/list/charging = list() /datum/action/cooldown/mob_cooldown/charge/Activate(atom/target_atom) - StartCooldown(360 SECONDS, 360 SECONDS) + disable_cooldown_actions() charge_sequence(owner, target_atom, charge_delay, charge_past) StartCooldown() + enable_cooldown_actions() return TRUE /datum/action/cooldown/mob_cooldown/charge/proc/charge_sequence(atom/movable/charger, atom/target_atom, delay, past) @@ -48,10 +49,10 @@ charging += charger actively_moving = FALSE SEND_SIGNAL(owner, COMSIG_STARTED_CHARGE) - RegisterSignal(charger, COMSIG_MOVABLE_BUMP, PROC_REF(on_bump), TRUE) - RegisterSignal(charger, COMSIG_MOVABLE_PRE_MOVE, PROC_REF(on_move), TRUE) - RegisterSignal(charger, COMSIG_MOVABLE_MOVED, PROC_REF(on_moved), TRUE) - RegisterSignal(charger, COMSIG_LIVING_DEATH, PROC_REF(charge_end)) + RegisterSignal(charger, COMSIG_MOVABLE_BUMP, PROC_REF(on_bump), override = TRUE) + RegisterSignal(charger, COMSIG_MOVABLE_PRE_MOVE, PROC_REF(on_move), override = TRUE) + RegisterSignal(charger, COMSIG_MOVABLE_MOVED, PROC_REF(on_moved), override = TRUE) + RegisterSignal(charger, COMSIG_LIVING_DEATH, PROC_REF(charge_end), override = TRUE) charger.setDir(dir) do_charge_indicator(charger, target) @@ -62,9 +63,9 @@ var/datum/move_loop/new_loop = SSmove_manager.home_onto(charger, target, delay = charge_speed, timeout = time_to_hit, priority = MOVEMENT_ABOVE_SPACE_PRIORITY) if(!new_loop) return - RegisterSignal(new_loop, COMSIG_MOVELOOP_PREPROCESS_CHECK, PROC_REF(pre_move)) - RegisterSignal(new_loop, COMSIG_MOVELOOP_POSTPROCESS, PROC_REF(post_move)) - RegisterSignal(new_loop, COMSIG_QDELETING, PROC_REF(charge_end)) + RegisterSignal(new_loop, COMSIG_MOVELOOP_PREPROCESS_CHECK, PROC_REF(pre_move), override = TRUE) + RegisterSignal(new_loop, COMSIG_MOVELOOP_POSTPROCESS, PROC_REF(post_move), override = TRUE) + RegisterSignal(new_loop, COMSIG_QDELETING, PROC_REF(charge_end), override = TRUE) // Yes this is disgusting. But we need to queue this stuff, and this code just isn't setup to support that right now. So gotta do it with sleeps sleep(time_to_hit + charge_speed) diff --git a/code/datums/actions/mobs/chase_target.dm b/code/datums/actions/mobs/chase_target.dm new file mode 100644 index 00000000000..c88285dd636 --- /dev/null +++ b/code/datums/actions/mobs/chase_target.dm @@ -0,0 +1,42 @@ +/datum/action/cooldown/mob_cooldown/chase_target + name = "Chase Target" + button_icon = 'icons/mob/actions/actions_items.dmi' + button_icon_state = "sniper_zoom" + desc = "Gain a burst of speed to chase down a target." + cooldown_time = 6 SECONDS + /// Affects volume of the charge tell depending on the size of the mob charging + var/size = 1 + +/datum/action/cooldown/mob_cooldown/chase_target/Activate(atom/target_atom) + disable_cooldown_actions() + charge(target_atom) + StartCooldown() + enable_cooldown_actions() + return TRUE + +/// Causes the mob to gain speed and charge at a target +/datum/action/cooldown/mob_cooldown/chase_target/proc/charge(atom/target) + var/mob/living/living_mob = target + if(istype(living_mob) && living_mob.stat == DEAD) + return + owner.visible_message(span_boldwarning("[owner] charges!")) + owner.SpinAnimation(speed = 20, loops = 3, parallel = FALSE) + if(ishostile(owner)) + var/mob/living/simple_animal/hostile/hostile_mob = owner + hostile_mob.retreat_distance = 0 + hostile_mob.minimum_distance = 0 + hostile_mob.set_varspeed(0) + addtimer(CALLBACK(src, PROC_REF(reset_charge)), 6 SECONDS) + addtimer(CALLBACK(src, PROC_REF(throw_thyself)), 2 SECONDS) + +/// This is the proc that actually does the throwing. Charge only adds a timer for this. +/datum/action/cooldown/mob_cooldown/chase_target/proc/throw_thyself() + playsound(owner, 'sound/weapons/sonic_jackhammer.ogg', 50, TRUE) + owner.throw_at(target, 7, 1.1, owner, FALSE, FALSE, CALLBACK(GLOBAL_PROC, GLOBAL_PROC_REF(playsound), owner, 'sound/effects/meteorimpact.ogg', 50 * size, TRUE, 2), INFINITY) + +/// Resets the charge buffs. +/datum/action/cooldown/mob_cooldown/chase_target/proc/reset_charge() + var/mob/living/simple_animal/hostile/hostile_mob = owner + hostile_mob.retreat_distance = 5 + hostile_mob.minimum_distance = 5 + hostile_mob.set_varspeed(2) diff --git a/code/datums/actions/mobs/create_legion_skull.dm b/code/datums/actions/mobs/create_legion_skull.dm new file mode 100644 index 00000000000..341ef2d8203 --- /dev/null +++ b/code/datums/actions/mobs/create_legion_skull.dm @@ -0,0 +1,19 @@ +/datum/action/cooldown/mob_cooldown/create_legion_skull + name = "Create Legion Skull" + button_icon = 'icons/mob/simple/lavaland/lavaland_monsters.dmi' + button_icon_state = "legion_head" + desc = "Create a legion skull to chase down a targeted enemy" + cooldown_time = 2 SECONDS + +/datum/action/cooldown/mob_cooldown/create_legion_skull/Activate(atom/target_atom) + disable_cooldown_actions() + create(target_atom) + StartCooldown() + enable_cooldown_actions() + return TRUE + +/// Creates a new skull assigned to the owner of this action +/datum/action/cooldown/mob_cooldown/create_legion_skull/proc/create(atom/target) + var/mob/living/basic/legion_brood/minion = new(owner.loc) + minion.assign_creator(owner) + minion.ai_controller.blackboard[BB_BASIC_MOB_CURRENT_TARGET] = target diff --git a/code/datums/actions/mobs/create_legion_turrets.dm b/code/datums/actions/mobs/create_legion_turrets.dm new file mode 100644 index 00000000000..5fb668ebc36 --- /dev/null +++ b/code/datums/actions/mobs/create_legion_turrets.dm @@ -0,0 +1,116 @@ +/datum/action/cooldown/mob_cooldown/create_legion_turrets + name = "Create Sentinels" + button_icon = 'icons/mob/simple/lavaland/lavaland_monsters.dmi' + button_icon_state = "legion_turret" + desc = "Create legion sentinels that fire at any enemies." + cooldown_time = 2 SECONDS + /// Minimum number of turrets that can be spawned + var/minimum_turrets = 2 + /// Maximum number of turrets that can be spawned + var/maximum_turrets = 2 + +/datum/action/cooldown/mob_cooldown/create_legion_turrets/Activate(atom/target_atom) + disable_cooldown_actions() + create(target_atom) + StartCooldown() + enable_cooldown_actions() + return TRUE + +/// Creates new legion turrets around the owner between the minimum and maximum +/datum/action/cooldown/mob_cooldown/create_legion_turrets/proc/create(atom/target) + playsound(owner, 'sound/magic/RATTLEMEBONES.ogg', 100, TRUE) + var/list/possible_locations = list() + for(var/turf/checked_turf in oview(owner, 4)) //Only place the turrets on open turfs + if(checked_turf.is_blocked_turf()) + continue + possible_locations += checked_turf + for(var/i in 1 to min(rand(minimum_turrets, maximum_turrets), length(possible_locations))) //Makes sure aren't spawning in nullspace. + var/chosen = pick_n_take(possible_locations) + new /obj/structure/legionturret(chosen) + +/// A basic turret that shoots at nearby mobs. Intended to be used for the legion megafauna. +/obj/structure/legionturret + name = "\improper Legion sentinel" + desc = "The eye pierces your soul." + icon = 'icons/mob/simple/lavaland/lavaland_monsters.dmi' + icon_state = "legion_turret" + light_power = 0.5 + light_range = 2 + max_integrity = 80 + luminosity = 6 + anchored = TRUE + density = TRUE + layer = ABOVE_OBJ_LAYER + armor_type = /datum/armor/structure_legionturret + //Compared with the targeted mobs. If they have the faction, turret won't shoot. + faction = list(FACTION_MINING) + ///What kind of projectile the actual damaging part should be. + var/projectile_type = /obj/projectile/beam/legion + ///Time until the tracer gets shot + var/initial_firing_time = 1.8 SECONDS + ///How long it takes between shooting the tracer and the projectile. + var/shot_delay = 0.8 SECONDS + +/datum/armor/structure_legionturret + laser = 100 + +/obj/structure/legionturret/Initialize(mapload) + . = ..() + addtimer(CALLBACK(src, PROC_REF(set_up_shot)), initial_firing_time) + ADD_TRAIT(src, TRAIT_NO_FLOATING_ANIM, INNATE_TRAIT) + +/// Handles an extremely basic AI +/obj/structure/legionturret/proc/set_up_shot() + for(var/mob/living/possible_target in oview(9, src)) + if(possible_target.stat == DEAD || possible_target.stat == UNCONSCIOUS) + continue + if(faction_check(faction, possible_target.faction)) + continue + fire(possible_target) + return + fire(get_edge_target_turf(src, pick(GLOB.cardinals))) + +/// Called when attacking a target. Shoots a projectile at the turf underneath the target. +/obj/structure/legionturret/proc/fire(atom/target) + var/turf/target_turf = get_turf(target) + var/turf/our_turf = get_turf(src) + if(!target_turf || !our_turf) + return + //Now we generate the tracer. + var/angle = get_angle(our_turf, target_turf) + var/datum/point/vector/V = new(our_turf.x, our_turf.y, our_turf.z, 0, 0, angle) + generate_tracer_between_points(V, V.return_vector_after_increments(6), /obj/effect/projectile/tracer/legion/tracer, 0, shot_delay, 0, 0, 0, null) + playsound(src, 'sound/machines/airlockopen.ogg', 100, TRUE) + addtimer(CALLBACK(src, PROC_REF(fire_beam), angle), shot_delay) + +/// Called shot_delay after the turret shot the tracer. Shoots a projectile into the same direction. +/obj/structure/legionturret/proc/fire_beam(angle) + var/obj/projectile/ouchie = new projectile_type(loc) + ouchie.firer = src + ouchie.fire(angle) + playsound(src, 'sound/effects/bin_close.ogg', 100, TRUE) + QDEL_IN(src, 0.5 SECONDS) + +/// Used for the legion turret. +/obj/projectile/beam/legion + name = "blood pulse" + hitsound = 'sound/magic/magic_missile.ogg' + damage = 19 + range = 6 + light_color = COLOR_SOFT_RED + impact_effect_type = /obj/effect/temp_visual/kinetic_blast + tracer_type = /obj/effect/projectile/tracer/legion + muzzle_type = /obj/effect/projectile/tracer/legion + impact_type = /obj/effect/projectile/tracer/legion + hitscan = TRUE + projectile_piercing = ALL + +/// Used for the legion turret tracer. +/obj/effect/projectile/tracer/legion/tracer + icon = 'icons/effects/beam.dmi' + icon_state = "blood_light" + +/// Used for the legion turret beam. +/obj/effect/projectile/tracer/legion + icon = 'icons/effects/beam.dmi' + icon_state = "blood" diff --git a/code/datums/actions/mobs/dash.dm b/code/datums/actions/mobs/dash.dm index ddb814eb24f..81d6f8165d9 100644 --- a/code/datums/actions/mobs/dash.dm +++ b/code/datums/actions/mobs/dash.dm @@ -10,9 +10,10 @@ var/pick_range = 5 /datum/action/cooldown/mob_cooldown/dash/Activate(atom/target_atom) - StartCooldown(360 SECONDS, 360 SECONDS) + disable_cooldown_actions() dash_to(target_atom) StartCooldown() + enable_cooldown_actions() return TRUE /datum/action/cooldown/mob_cooldown/dash/proc/dash_to(atom/dash_target) diff --git a/code/datums/actions/mobs/defensive_mode.dm b/code/datums/actions/mobs/defensive_mode.dm index a73d6bb25d1..6030afea137 100644 --- a/code/datums/actions/mobs/defensive_mode.dm +++ b/code/datums/actions/mobs/defensive_mode.dm @@ -19,9 +19,10 @@ return ..() /datum/action/cooldown/mob_cooldown/defensive_mode/Activate(atom/target_atom) - StartCooldown(360 SECONDS, 360 SECONDS) + disable_cooldown_actions() activate_defence(owner) StartCooldown() + enable_cooldown_actions() return TRUE /datum/action/cooldown/mob_cooldown/defensive_mode/proc/activate_defence(mob/living/basic/owner_mob) diff --git a/code/datums/actions/mobs/fire_breath.dm b/code/datums/actions/mobs/fire_breath.dm index b3673b2f96c..e52fa14d0d9 100644 --- a/code/datums/actions/mobs/fire_breath.dm +++ b/code/datums/actions/mobs/fire_breath.dm @@ -20,8 +20,10 @@ var/mech_damage = 45 /datum/action/cooldown/mob_cooldown/fire_breath/Activate(atom/target_atom) + disable_cooldown_actions() attack_sequence(target_atom) StartCooldown() + enable_cooldown_actions() return TRUE /// Apply our specific fire breathing shape, in proc form so we can override it in subtypes @@ -91,7 +93,7 @@ button_icon = 'icons/effects/fire.dmi' button_icon_state = "1" desc = "Breathe flames in all directions." - cooldown_time = 3 SECONDS + cooldown_time = 10.5 SECONDS click_to_activate = FALSE /// How many fire lines do we produce to turn a full circle? var/sectors = 12 diff --git a/code/datums/actions/mobs/lava_swoop.dm b/code/datums/actions/mobs/lava_swoop.dm index a5acc29bab6..a6c8282fd10 100644 --- a/code/datums/actions/mobs/lava_swoop.dm +++ b/code/datums/actions/mobs/lava_swoop.dm @@ -14,16 +14,17 @@ /datum/action/cooldown/mob_cooldown/lava_swoop/Grant(mob/M) . = ..() - M.add_traits(list(TRAIT_LAVA_IMMUNE, TRAIT_NOFIRE), REF(src)) + M.add_traits(list(TRAIT_LAVA_IMMUNE, TRAIT_NOFIRE), ACTION_TRAIT) /datum/action/cooldown/mob_cooldown/lava_swoop/Remove(mob/M) . = ..() - M.remove_traits(list(TRAIT_LAVA_IMMUNE, TRAIT_NOFIRE), REF(src)) + M.remove_traits(list(TRAIT_LAVA_IMMUNE, TRAIT_NOFIRE), ACTION_TRAIT) /datum/action/cooldown/mob_cooldown/lava_swoop/Activate(atom/target_atom) - StartCooldown(360 SECONDS, 360 SECONDS) + disable_cooldown_actions() attack_sequence(target_atom) StartCooldown() + enable_cooldown_actions() return TRUE /datum/action/cooldown/mob_cooldown/lava_swoop/proc/attack_sequence(atom/target) diff --git a/code/datums/actions/mobs/meteors.dm b/code/datums/actions/mobs/meteors.dm index 0c95b6c8e17..11cdac43864 100644 --- a/code/datums/actions/mobs/meteors.dm +++ b/code/datums/actions/mobs/meteors.dm @@ -6,9 +6,10 @@ cooldown_time = 3 SECONDS /datum/action/cooldown/mob_cooldown/meteors/Activate(atom/target_atom) - StartCooldown(360 SECONDS, 360 SECONDS) + disable_cooldown_actions() create_meteors(target_atom) StartCooldown() + enable_cooldown_actions() return TRUE /datum/action/cooldown/mob_cooldown/meteors/proc/create_meteors(atom/target) diff --git a/code/datums/actions/mobs/projectileattack.dm b/code/datums/actions/mobs/projectileattack.dm index 19d0d9f076c..be7eff89633 100644 --- a/code/datums/actions/mobs/projectileattack.dm +++ b/code/datums/actions/mobs/projectileattack.dm @@ -18,9 +18,10 @@ var/projectile_speed_multiplier = 1 /datum/action/cooldown/mob_cooldown/projectile_attack/Activate(atom/target_atom) - StartCooldown(360 SECONDS, 360 SECONDS) + disable_cooldown_actions() attack_sequence(owner, target_atom) StartCooldown() + enable_cooldown_actions() return TRUE /datum/action/cooldown/mob_cooldown/projectile_attack/proc/attack_sequence(mob/living/firer, atom/target) diff --git a/code/datums/actions/mobs/sign_language.dm b/code/datums/actions/mobs/sign_language.dm index da375fd1f85..20c1157f326 100644 --- a/code/datums/actions/mobs/sign_language.dm +++ b/code/datums/actions/mobs/sign_language.dm @@ -42,17 +42,17 @@ SIGNAL_ADDTRAIT(TRAIT_MUTE), SIGNAL_REMOVETRAIT(TRAIT_MUTE) )) - REMOVE_TRAIT(grant_to, TRAIT_SIGN_LANG, TRAIT_GENERIC) + REMOVE_TRAIT(grant_to, TRAIT_SIGN_LANG, ACTION_TRAIT) /datum/action/innate/sign_language/Activate() active = TRUE - ADD_TRAIT(owner, TRAIT_SIGN_LANG, TRAIT_GENERIC) + ADD_TRAIT(owner, TRAIT_SIGN_LANG, ACTION_TRAIT) to_chat(owner, span_green("You are now communicating with sign language.")) build_all_button_icons(UPDATE_BUTTON_BACKGROUND) /datum/action/innate/sign_language/Deactivate() active = FALSE - REMOVE_TRAIT(owner, TRAIT_SIGN_LANG, TRAIT_GENERIC) + REMOVE_TRAIT(owner, TRAIT_SIGN_LANG, ACTION_TRAIT) to_chat(owner, span_green("You have stopped using sign language.")) build_all_button_icons(UPDATE_BUTTON_BACKGROUND) diff --git a/code/datums/actions/mobs/sneak.dm b/code/datums/actions/mobs/sneak.dm index 738bb7b70cf..521181fa19b 100644 --- a/code/datums/actions/mobs/sneak.dm +++ b/code/datums/actions/mobs/sneak.dm @@ -16,7 +16,7 @@ /datum/action/cooldown/mob_cooldown/sneak/Remove(mob/living/remove_from) if(HAS_TRAIT(remove_from, TRAIT_SNEAK)) remove_from.alpha = initial(remove_from.alpha) - REMOVE_TRAIT(remove_from, TRAIT_SNEAK, name) + REMOVE_TRAIT(remove_from, TRAIT_SNEAK, ACTION_TRAIT) return ..() @@ -26,11 +26,11 @@ // Otherwise we get permanent invisbility exploits. animate(owner, alpha = initial(owner.alpha), time = animation_time) owner.balloon_alert(owner, "you reveal yourself") - REMOVE_TRAIT(owner, TRAIT_SNEAK, name) + REMOVE_TRAIT(owner, TRAIT_SNEAK, ACTION_TRAIT) else animate(owner, alpha = sneak_alpha, time = animation_time) owner.balloon_alert(owner, "you blend into the environment") - ADD_TRAIT(owner, TRAIT_SNEAK, name) + ADD_TRAIT(owner, TRAIT_SNEAK, ACTION_TRAIT) return TRUE diff --git a/code/datums/actions/mobs/transform_weapon.dm b/code/datums/actions/mobs/transform_weapon.dm index 3abeed5dfbf..b268fac6414 100644 --- a/code/datums/actions/mobs/transform_weapon.dm +++ b/code/datums/actions/mobs/transform_weapon.dm @@ -9,9 +9,10 @@ var/max_cooldown_time = 10 SECONDS /datum/action/cooldown/mob_cooldown/transform_weapon/Activate(atom/target_atom) - StartCooldown(360 SECONDS, 360 SECONDS) + disable_cooldown_actions() do_transform(target_atom) StartCooldown(rand(cooldown_time, max_cooldown_time), 0) + enable_cooldown_actions() return TRUE /datum/action/cooldown/mob_cooldown/transform_weapon/proc/do_transform(atom/target) diff --git a/code/datums/ai/basic_mobs/basic_ai_behaviors/travel_towards.dm b/code/datums/ai/basic_mobs/basic_ai_behaviors/travel_towards.dm index 55f6ef4c4c0..6eb7c36dadd 100644 --- a/code/datums/ai/basic_mobs/basic_ai_behaviors/travel_towards.dm +++ b/code/datums/ai/basic_mobs/basic_ai_behaviors/travel_towards.dm @@ -8,13 +8,15 @@ behavior_flags = AI_BEHAVIOR_REQUIRE_MOVEMENT | AI_BEHAVIOR_CAN_PLAN_DURING_EXECUTION /// If true we will get rid of our target on completion var/clear_target = FALSE + ///should we use a different movement type? + var/new_movement_type /datum/ai_behavior/travel_towards/setup(datum/ai_controller/controller, target_key) . = ..() var/atom/target = controller.blackboard[target_key] if(QDELETED(target)) return FALSE - set_movement_target(controller, target) + set_movement_target(controller, target, new_movement_type) /datum/ai_behavior/travel_towards/perform(seconds_per_tick, datum/ai_controller/controller, target_key) . = ..() @@ -24,6 +26,8 @@ . = ..() if (clear_target) controller.clear_blackboard_key(target_key) + if(new_movement_type) + controller.change_ai_movement_type(initial(controller.ai_movement)) /datum/ai_behavior/travel_towards/stop_on_arrival clear_target = TRUE diff --git a/code/datums/ai/generic/find_and_set.dm b/code/datums/ai/generic/find_and_set.dm index 84a007c2559..fbddc33075c 100644 --- a/code/datums/ai/generic/find_and_set.dm +++ b/code/datums/ai/generic/find_and_set.dm @@ -11,12 +11,15 @@ if (controller.blackboard_key_exists(set_key)) finish_action(controller, TRUE) return + if(QDELETED(controller.pawn)) + finish_action(controller, FALSE) + return var/find_this_thing = search_tactic(controller, locate_path, search_range) - if(find_this_thing) - controller.set_blackboard_key(set_key, find_this_thing) - finish_action(controller, TRUE) - else + if(isnull(find_this_thing)) finish_action(controller, FALSE) + return + controller.set_blackboard_key(set_key, find_this_thing) + finish_action(controller, TRUE) /datum/ai_behavior/find_and_set/proc/search_tactic(datum/ai_controller/controller, locate_path, search_range) return locate(locate_path) in oview(search_range, controller.pawn) diff --git a/code/datums/ai/hunting_behavior/hunting_behaviors.dm b/code/datums/ai/hunting_behavior/hunting_behaviors.dm index 3e747640be3..1615a28d53b 100644 --- a/code/datums/ai/hunting_behavior/hunting_behaviors.dm +++ b/code/datums/ai/hunting_behavior/hunting_behaviors.dm @@ -160,3 +160,19 @@ var/datum/action/cooldown/ability = hunter.ai_controller.blackboard[ability_key] ability.InterceptClickOn(hunter, null, hunted) + +/datum/ai_behavior/hunt_target/latch_onto + +/datum/ai_behavior/hunt_target/latch_onto/setup(datum/ai_controller/controller, hunting_target_key, hunting_cooldown_key) + . = ..() + var/mob/living/living_pawn = controller.pawn + if(living_pawn.buckled) + return FALSE + +/datum/ai_behavior/hunt_target/latch_onto/target_caught(mob/living/hunter, obj/hunted) + if(hunter.buckled) + return FALSE + if(!hunted.buckle_mob(hunter, force = TRUE)) + return FALSE + hunted.visible_message(span_notice("[hunted] has been latched onto by [hunter]!")) + return TRUE diff --git a/code/datums/ai/hunting_behavior/hunting_mouse.dm b/code/datums/ai/hunting_behavior/hunting_mouse.dm index d4160f826dd..d0e7161fd2d 100644 --- a/code/datums/ai/hunting_behavior/hunting_mouse.dm +++ b/code/datums/ai/hunting_behavior/hunting_mouse.dm @@ -11,7 +11,7 @@ finding_behavior = /datum/ai_behavior/find_hunt_target/mouse_cable hunt_targets = list(/obj/structure/cable) hunt_range = 0 // Only look below us - hunt_chance = 5 + hunt_chance = 1 // When looking for a cable, we can only bite things we can reach. /datum/ai_behavior/find_hunt_target/mouse_cable diff --git a/code/datums/ai/monkey/monkey_controller.dm b/code/datums/ai/monkey/monkey_controller.dm index 8be754f8d4b..ecfedb86daf 100644 --- a/code/datums/ai/monkey/monkey_controller.dm +++ b/code/datums/ai/monkey/monkey_controller.dm @@ -5,6 +5,7 @@ have ways of interacting with a specific mob and control it. ///OOK OOK OOK /datum/ai_controller/monkey + ai_movement = /datum/ai_movement/basic_avoidance movement_delay = 0.4 SECONDS planning_subtrees = list( /datum/ai_planning_subtree/generic_resist, diff --git a/code/datums/ai/movement/ai_movement_jps.dm b/code/datums/ai/movement/ai_movement_jps.dm index 3644869140d..6024b7e7562 100644 --- a/code/datums/ai/movement/ai_movement_jps.dm +++ b/code/datums/ai/movement/ai_movement_jps.dm @@ -39,7 +39,7 @@ /datum/ai_movement/jps/bot max_pathing_attempts = 25 - maximum_length = AI_BOT_PATH_LENGTH + maximum_length = 25 diagonal_flags = DIAGONAL_REMOVE_ALL /datum/ai_movement/jps/bot/start_moving_towards(datum/ai_controller/controller, atom/current_movement_target, min_distance) @@ -48,3 +48,6 @@ if(isnull(our_pawn)) return our_pawn.RegisterSignal(loop, COMSIG_MOVELOOP_JPS_FINISHED_PATHING, TYPE_PROC_REF(/mob/living/basic/bot, generate_bot_path)) + +/datum/ai_movement/jps/bot/travel_to_beacon + maximum_length = AI_BOT_PATH_LENGTH diff --git a/code/datums/ai/objects/vending_machines/vending_machine_controller.dm b/code/datums/ai/objects/vending_machines/vending_machine_controller.dm index cd779b7d691..50523db946c 100644 --- a/code/datums/ai/objects/vending_machines/vending_machine_controller.dm +++ b/code/datums/ai/objects/vending_machines/vending_machine_controller.dm @@ -14,7 +14,7 @@ return AI_CONTROLLER_INCOMPATIBLE var/obj/machinery/vending/vendor_pawn = new_pawn vendor_pawn.tiltable = FALSE //Not manually tiltable by hitting it anymore. We are now aggressively doing it ourselves. - vendor_pawn.AddElement(/datum/element/waddling) + vendor_pawn.AddElementTrait(TRAIT_WADDLING, REF(src), /datum/element/waddling) vendor_pawn.AddElement(/datum/element/footstep, FOOTSTEP_OBJ_MACHINE, 1, -6, sound_vary = TRUE) vendor_pawn.squish_damage = 15 return ..() //Run parent at end @@ -22,7 +22,7 @@ /datum/ai_controller/vending_machine/UnpossessPawn(destroy) var/obj/machinery/vending/vendor_pawn = pawn vendor_pawn.tiltable = TRUE - vendor_pawn.RemoveElement(/datum/element/waddling) + REMOVE_TRAIT(vendor_pawn, TRAIT_WADDLING, REF(src)) vendor_pawn.squish_damage = initial(vendor_pawn.squish_damage) RemoveElement(/datum/element/footstep, FOOTSTEP_OBJ_MACHINE, 1, -6, sound_vary = TRUE) return ..() //Run parent at end diff --git a/code/datums/ai_laws/ai_laws.dm b/code/datums/ai_laws/ai_laws.dm index 9b9f9c62841..971dc118f3a 100644 --- a/code/datums/ai_laws/ai_laws.dm +++ b/code/datums/ai_laws/ai_laws.dm @@ -139,7 +139,7 @@ GLOBAL_VAR(round_default_lawset) /// These laws will go away when an AI is reset var/list/hacked = list() -/datum/ai_laws/Destroy(force = FALSE, ...) +/datum/ai_laws/Destroy(force = FALSE) if(!QDELETED(owner)) //Stopgap to help with laws randomly being lost. This stack_trace will hopefully help find the real issues. if(force) //Unless we're forced... stack_trace("AI law datum for [owner] has been forcefully destroyed incorrectly; the owner variable should be cleared first!") @@ -149,6 +149,18 @@ GLOBAL_VAR(round_default_lawset) owner = null return ..() +/// Makes a copy of the lawset and returns a new law datum. +/datum/ai_laws/proc/copy_lawset() + var/datum/ai_laws/new_lawset = new type() + new_lawset.protected_zeroth = protected_zeroth + new_lawset.zeroth = zeroth + new_lawset.zeroth_borg = zeroth_borg + new_lawset.inherent = inherent.Copy() + new_lawset.supplied = supplied.Copy() + new_lawset.ion = ion.Copy() + new_lawset.hacked = hacked.Copy() + return new_lawset + /datum/ai_laws/pai name = "pAI Directives" zeroth = ("Serve your master.") @@ -429,8 +441,10 @@ GLOBAL_VAR(round_default_lawset) to_chat(to_who, examine_block(jointext(printable_laws, "\n"))) /datum/ai_laws/proc/associate(mob/living/silicon/M) - if(!owner) - owner = M + if(owner) + CRASH("AI law datum linked to [owner] attempted to associate with another mob [M]") + + owner = M /** * Generates a list of all laws on this datum, including rendered HTML tags if required diff --git a/code/datums/brain_damage/special.dm b/code/datums/brain_damage/special.dm index d9348f98f4b..651881292e9 100644 --- a/code/datums/brain_damage/special.dm +++ b/code/datums/brain_damage/special.dm @@ -245,14 +245,15 @@ /datum/brain_trauma/special/psychotic_brawling/on_gain() ..() - psychotic_brawling = new(null) + psychotic_brawling = new() + psychotic_brawling.allow_temp_override = FALSE if(!psychotic_brawling.teach(owner, TRUE)) to_chat(owner, span_notice("But your martial knowledge keeps you grounded.")) qdel(src) /datum/brain_trauma/special/psychotic_brawling/on_lose() ..() - psychotic_brawling.remove(owner) + psychotic_brawling.fully_remove(owner) QDEL_NULL(psychotic_brawling) /datum/brain_trauma/special/psychotic_brawling/bath_salts diff --git a/code/datums/candidate_poll.dm b/code/datums/candidate_poll.dm index 1856858accd..6ccd43c01fd 100644 --- a/code/datums/candidate_poll.dm +++ b/code/datums/candidate_poll.dm @@ -20,8 +20,23 @@ var/finished = FALSE /// Used to categorize in the alerts system and identify polls of same question+role so we can stack the alert buttons var/poll_key + ///Response messages sent in specific key areas for full customization of polling. + var/list/response_messages = list( + POLL_RESPONSE_SIGNUP = "You have signed up for %ROLE%! A candidate will be picked randomly soon.", + POLL_RESPONSE_ALREADY_SIGNED = "You have already signed up for this!", + POLL_RESPONSE_NOT_SIGNED = "You aren't signed up for this!", + POLL_RESPONSE_TOO_LATE_TO_UNREGISTER = "It's too late to unregister yourself, selection has already begun!", + POLL_RESPONSE_UNREGISTERED = "You have been unregistered as a candidate for %ROLE%. You can sign up again before the poll ends.", + ) -/datum/candidate_poll/New(polled_role, polled_question, poll_duration, poll_ignoring_category, poll_jumpable) +/datum/candidate_poll/New( + polled_role, + polled_question, + poll_duration, + poll_ignoring_category, + poll_jumpable, + list/custom_response_messages = list(), +) role = polled_role question = polled_question duration = poll_duration @@ -30,6 +45,10 @@ signed_up = list() time_started = world.time poll_key = "[question]_[role ? role : "0"]" + if(custom_response_messages.len) + response_messages = custom_response_messages + for(var/individual_message in response_messages) + response_messages[individual_message] = replacetext(response_messages[individual_message], "%ROLE%", role) return ..() /datum/candidate_poll/Destroy() @@ -49,7 +68,7 @@ return FALSE if(candidate in signed_up) if(!silent) - to_chat(candidate, span_warning("You have already signed up for this!")) + to_chat(candidate, span_warning(response_messages[POLL_RESPONSE_ALREADY_SIGNED])) return FALSE if(time_left() <= 0) if(!silent) @@ -59,7 +78,7 @@ signed_up += candidate if(!silent) - to_chat(candidate, span_notice("You have signed up for [role]! A candidate will be picked randomly soon.")) + to_chat(candidate, span_notice(response_messages[POLL_RESPONSE_SIGNUP])) // Sign them up for any other polls with the same mob type for(var/datum/candidate_poll/existing_poll as anything in SSpolling.currently_polling) if(src != existing_poll && poll_key == existing_poll.poll_key && !(candidate in existing_poll.signed_up)) @@ -73,17 +92,17 @@ return FALSE if(!(candidate in signed_up)) if(!silent) - to_chat(candidate, span_warning("You aren't signed up for this!")) + to_chat(candidate, span_warning(response_messages[POLL_RESPONSE_NOT_SIGNED])) return FALSE if(time_left() <= 0) if(!silent) - to_chat(candidate, span_danger("It's too late to unregister yourself, selection has already begun!")) + to_chat(candidate, span_danger(response_messages[POLL_RESPONSE_TOO_LATE_TO_UNREGISTER])) return FALSE signed_up -= candidate if(!silent) - to_chat(candidate, span_danger("You have been unregistered as a candidate for [role]. You can sign up again before the poll ends.")) + to_chat(candidate, span_danger(response_messages[POLL_RESPONSE_UNREGISTERED])) for(var/datum/candidate_poll/existing_poll as anything in SSpolling.currently_polling) if(src != existing_poll && poll_key == existing_poll.poll_key && (candidate in existing_poll.signed_up)) diff --git a/code/datums/components/chasm.dm b/code/datums/components/chasm.dm index 76538bcb315..b4406857ac1 100644 --- a/code/datums/components/chasm.dm +++ b/code/datums/components/chasm.dm @@ -32,6 +32,7 @@ /obj/singularity, /obj/structure/lattice, /obj/structure/stone_tile, + /obj/structure/ore_vent, )) /datum/component/chasm/Initialize(turf/target, mapload) @@ -108,6 +109,9 @@ return CHASM_NOT_DROPPING if(dropped_thing.throwing || (dropped_thing.movement_type & MOVETYPES_NOT_TOUCHING_GROUND)) return CHASM_REGISTER_SIGNALS + for(var/atom/thing_to_check as anything in parent) + if(HAS_TRAIT(thing_to_check, TRAIT_CHASM_STOPPER)) + return CHASM_NOT_DROPPING //Flies right over the chasm if(ismob(dropped_thing)) diff --git a/code/datums/components/crafting/tools.dm b/code/datums/components/crafting/tools.dm index 15cc565d5e0..252e168ef2d 100644 --- a/code/datums/components/crafting/tools.dm +++ b/code/datums/components/crafting/tools.dm @@ -55,3 +55,26 @@ ) result = /obj/item/stack/medical/bandage/makeshift category = CAT_TOOLS + +/datum/crafting_recipe/bone_rod + name = "Bone Fishing Rod" + result = /obj/item/fishing_rod/bone + time = 5 SECONDS + reqs = list(/obj/item/stack/sheet/leather = 1, + /obj/item/stack/sheet/sinew = 2, + /obj/item/stack/sheet/bone = 2) + category = CAT_TOOLS + +/datum/crafting_recipe/sinew_line + name = "Sinew Fishing Line Reel" + result = /obj/item/fishing_line/sinew + reqs = list(/obj/item/stack/sheet/sinew = 2) + time = 2 SECONDS + category = CAT_TOOLS + +/datum/crafting_recipe/bone_hook + name = "Goliath Bone Hook" + result = /obj/item/fishing_hook/bone + reqs = list(/obj/item/stack/sheet/bone = 1) + time = 2 SECONDS + category = CAT_TOOLS diff --git a/code/datums/components/customizable_reagent_holder.dm b/code/datums/components/customizable_reagent_holder.dm index 7bffb3d9ada..bd88508bec0 100644 --- a/code/datums/components/customizable_reagent_holder.dm +++ b/code/datums/components/customizable_reagent_holder.dm @@ -57,6 +57,7 @@ /datum/component/customizable_reagent_holder/Destroy(force) QDEL_NULL(top_overlay) + LAZYCLEARLIST(ingredients) return ..() @@ -64,6 +65,7 @@ . = ..() RegisterSignal(parent, COMSIG_ATOM_ATTACKBY, PROC_REF(customizable_attack)) RegisterSignal(parent, COMSIG_ATOM_EXAMINE, PROC_REF(on_examine)) + RegisterSignal(parent, COMSIG_ATOM_EXITED, PROC_REF(food_exited)) RegisterSignal(parent, COMSIG_ATOM_PROCESSED, PROC_REF(on_processed)) RegisterSignal(parent, COMSIG_ATOM_REQUESTING_CONTEXT_FROM_ITEM, PROC_REF(on_requesting_context_from_item)) ADD_TRAIT(parent, TRAIT_CUSTOMIZABLE_REAGENT_HOLDER, REF(src)) @@ -74,6 +76,7 @@ UnregisterSignal(parent, list( COMSIG_ATOM_ATTACKBY, COMSIG_ATOM_EXAMINE, + COMSIG_ATOM_EXITED, COMSIG_ATOM_PROCESSED, COMSIG_ATOM_REQUESTING_CONTEXT_FROM_ITEM, )) @@ -91,20 +94,13 @@ SIGNAL_HANDLER var/atom/atom_parent = parent - var/ingredients_listed = "" - if (LAZYLEN(ingredients)) - for (var/i in 1 to ingredients.len) - var/obj/item/ingredient = ingredients[i] - var/ending = ", " - switch(length(ingredients)) - if (2) - if (i == 1) - ending = " and " - if (3 to INFINITY) - if (i == ingredients.len - 1) - ending = ", and " - ingredients_listed += "\a [ingredient.name][ending]" - examine_list += "It [LAZYLEN(ingredients) ? "contains [ingredients_listed]making a [custom_adjective()]-sized [initial(atom_parent.name)]" : "does not contain any ingredients"]." + var/list/ingredients_listed = list() + for(var/obj/item/ingredient as anything in ingredients) + ingredients_listed += "\a [ingredient.name]" + + examine_list += "It [LAZYLEN(ingredients) \ + ? "contains [english_list(ingredients_listed)] making a [custom_adjective()]-sized [initial(atom_parent.name)]" \ + : "does not contain any ingredients"]." //// Proc that checks if an ingredient is valid or not, returning false if it isnt and true if it is. /datum/component/customizable_reagent_holder/proc/valid_ingredient(obj/ingredient) @@ -289,3 +285,8 @@ context[SCREENTIP_CONTEXT_LMB] = "[screentip_verb] [held_item]" return CONTEXTUAL_SCREENTIP_SET + +/// Clear refs if our food "goes away" somehow +/datum/component/customizable_reagent_holder/proc/food_exited(datum/source, atom/movable/gone) + SIGNAL_HANDLER + LAZYREMOVE(ingredients, gone) diff --git a/code/datums/components/fishing_spot.dm b/code/datums/components/fishing_spot.dm index 05456380235..c8a00ce74cd 100644 --- a/code/datums/components/fishing_spot.dm +++ b/code/datums/components/fishing_spot.dm @@ -33,7 +33,7 @@ var/obj/item/fishing_rod/rod = possibly_rod if(!istype(rod)) return - if(HAS_TRAIT(user,TRAIT_GONE_FISHING) || rod.currently_hooked_item) + if(HAS_TRAIT(user,TRAIT_GONE_FISHING) || rod.fishing_line) user.balloon_alert(user, "already fishing") return COMPONENT_NO_AFTERATTACK var/denial_reason = fish_source.reason_we_cant_fish(rod, user, parent) diff --git a/code/datums/components/food/edible.dm b/code/datums/components/food/edible.dm index b7b6bda2f5a..ded8b8c4161 100644 --- a/code/datums/components/food/edible.dm +++ b/code/datums/components/food/edible.dm @@ -580,8 +580,10 @@ Behavior that's still missing from this component that original food items had t food_quality = min(food_quality, FOOD_QUALITY_TOP) var/atom/owner = parent var/timeout_mod = owner.reagents.get_average_purity(/datum/reagent/consumable) * 2 // mood event duration is 100% at average purity of 50% - var/event = GLOB.food_quality_events[food_quality] - gourmand.add_mood_event("quality_food", event, timeout_mod) + var/datum/mood_event/event = GLOB.food_quality_events[food_quality] + event = new event.type + event.timeout *= timeout_mod + gourmand.add_mood_event("quality_food", event) gourmand.adjust_disgust(-5 + -2 * food_quality * fraction) var/quality_label = GLOB.food_quality_description[food_quality] to_chat(gourmand, span_notice("That's \an [quality_label] meal.")) diff --git a/code/datums/components/food/ice_cream_holder.dm b/code/datums/components/food/ice_cream_holder.dm index 29625a8a321..f3db67efab5 100644 --- a/code/datums/components/food/ice_cream_holder.dm +++ b/code/datums/components/food/ice_cream_holder.dm @@ -138,19 +138,12 @@ /datum/component/ice_cream_holder/proc/on_item_attack_obj(obj/item/source, obj/target, mob/user) SIGNAL_HANDLER if(!istype(target, /obj/machinery/icecream_vat)) - return + return COMPONENT_CANCEL_ATTACK_CHAIN + if(length(scoops) >= max_scoops) + target.balloon_alert(user, "too many scoops!") + return COMPONENT_CANCEL_ATTACK_CHAIN var/obj/machinery/icecream_vat/dispenser = target - if(length(scoops) < max_scoops) - if(dispenser.product_types[dispenser.selected_flavour] > 0) - var/datum/ice_cream_flavour/flavour = GLOB.ice_cream_flavours[dispenser.selected_flavour] - if(flavour.add_flavour(src, dispenser.beaker?.reagents.total_volume ? dispenser.beaker.reagents : null)) - dispenser.visible_message("[icon2html(dispenser, viewers(source))] [span_info("[user] scoops delicious [dispenser.selected_flavour] ice cream into [source].")]") - dispenser.product_types[dispenser.selected_flavour]-- - INVOKE_ASYNC(dispenser, TYPE_PROC_REF(/obj/machinery/icecream_vat, updateDialog)) - else - to_chat(user, span_warning("There is not enough ice cream left!")) - else - to_chat(user, span_warning("[source] can't hold anymore ice cream!")) + dispenser.add_flavor_to_cone(src, user, source) return COMPONENT_CANCEL_ATTACK_CHAIN /datum/component/ice_cream_holder/proc/check_food_order(obj/item/source, datum/custom_order/our_order) @@ -221,21 +214,21 @@ GLOBAL_LIST_INIT_TYPED(ice_cream_flavours, /datum/ice_cream_flavour, init_ice_cr var/reagent_amount = 3 /// Is this flavour shown in the ice cream vat menu or not? var/hidden = FALSE + ///Whether this type of ice cream will take custom ingredients from a beaker in the ice cream vat. + var/takes_custom_ingredients = FALSE /datum/ice_cream_flavour/New() if(ingredients) - ingredients_text = "(Ingredients: [reagent_paths_list_to_text(ingredients, ingredients_text)])" + ingredients_text = "Requires: [reagent_paths_list_to_text(ingredients, ingredients_text)]" /// Adds a new flavour to the ice cream cone. -/datum/ice_cream_flavour/proc/add_flavour(datum/component/ice_cream_holder/target, datum/reagents/R, custom_name) +/datum/ice_cream_flavour/proc/add_flavour(datum/component/ice_cream_holder/target, datum/reagents/custom_ingredients) var/atom/owner = target.parent - LAZYADD(target.scoops, custom_name || name) - if(color) + LAZYADD(target.scoops, name) + if(!takes_custom_ingredients && color) var/image/flavoring = image('icons/obj/service/kitchen.dmi', "icecream_custom") flavoring.color = color LAZYADD(target.scoop_overlays, flavoring) - if(custom_name) - LAZYSET(target.special_scoops, custom_name, name) owner.reagents.maximum_volume += EXTRA_MAX_VOLUME_PER_SCOOP if(reagent_type) @@ -336,10 +329,11 @@ GLOBAL_LIST_INIT_TYPED(ice_cream_flavours, /datum/ice_cream_flavour, init_ice_cr /datum/ice_cream_flavour/custom name = ICE_CREAM_CUSTOM - color = "" //has its own mutable appearance overlay + color = COLOR_STARLIGHT //has its own mutable appearance overlay it will be overwritten with anyways. desc = "filled with artisanal icecream. Made with real $CUSTOM_NAME. Ain't that something." ingredients = list(/datum/reagent/consumable/milk, /datum/reagent/consumable/ice) ingredients_text = "optional flavorings" + takes_custom_ingredients = TRUE /datum/ice_cream_flavour/custom/korta name = ICE_CREAM_KORTA_CUSTOM @@ -347,16 +341,15 @@ GLOBAL_LIST_INIT_TYPED(ice_cream_flavours, /datum/ice_cream_flavour, init_ice_cr ingredients = list(/datum/reagent/consumable/korta_milk, /datum/reagent/consumable/ice) ingredients_text = "optional flavorings" -/datum/ice_cream_flavour/custom/add_flavour(datum/component/ice_cream_holder/target, datum/reagents/R, custom_name) - if(!R || R.total_volume < 4) //consumable reagents have stronger taste so higher volume are required to allow non-food flavourings to break through better. +/datum/ice_cream_flavour/custom/add_flavour(datum/component/ice_cream_holder/target, datum/reagents/custom_ingredients) + if(!custom_ingredients || custom_ingredients.total_volume < 4) //consumable reagents have stronger taste so higher volume are required to allow non-food flavourings to break through better. return GLOB.ice_cream_flavours[ICE_CREAM_BLAND].add_flavour(target) //Bland, sugary ice and milk. var/image/flavoring = image('icons/obj/service/kitchen.dmi', "icecream_custom") - var/datum/reagent/master = R.get_master_reagent() - custom_name = lowertext(master.name) // reagent names are capitalized, while items' aren't. + var/datum/reagent/master = custom_ingredients.get_master_reagent() flavoring.color = master.color LAZYADD(target.scoop_overlays, flavoring) . = ..() // Make some space for reagents before attempting to transfer some to the target. - R.trans_to(target.parent, 4) + custom_ingredients.trans_to(target.parent, 4) /datum/ice_cream_flavour/bland name = ICE_CREAM_BLAND diff --git a/code/datums/components/ghost_direct_control.dm b/code/datums/components/ghost_direct_control.dm index 83c893b6dca..a131a2d3ca7 100644 --- a/code/datums/components/ghost_direct_control.dm +++ b/code/datums/components/ghost_direct_control.dm @@ -30,7 +30,7 @@ src.ban_type = ban_type src.assumed_control_message = assumed_control_message || "You are [parent]!" src.extra_control_checks = extra_control_checks - src.after_assumed_control= after_assumed_control + src.after_assumed_control = after_assumed_control var/mob/mob_parent = parent LAZYADD(GLOB.joinable_mobs[format_text("[initial(mob_parent.name)]")], mob_parent) @@ -42,9 +42,10 @@ . = ..() RegisterSignal(parent, COMSIG_ATOM_ATTACK_GHOST, PROC_REF(on_ghost_clicked)) RegisterSignal(parent, COMSIG_ATOM_EXAMINE, PROC_REF(on_examined)) + RegisterSignal(parent, COMSIG_MOB_LOGIN, PROC_REF(on_login)) /datum/component/ghost_direct_control/UnregisterFromParent() - UnregisterSignal(parent, list(COMSIG_ATOM_ATTACK_GHOST, COMSIG_ATOM_EXAMINE)) + UnregisterSignal(parent, list(COMSIG_ATOM_ATTACK_GHOST, COMSIG_ATOM_EXAMINE, COMSIG_MOB_LOGIN)) return ..() /datum/component/ghost_direct_control/Destroy(force) @@ -140,3 +141,8 @@ to_chat(new_body, span_boldnotice(assumed_control_message)) after_assumed_control?.Invoke(harbinger) qdel(src) + +/// When someone else assumes control via some other means, get rid of our component +/datum/component/ghost_direct_control/proc/on_login() + SIGNAL_HANDLER + qdel(src) diff --git a/code/datums/components/gunpoint.dm b/code/datums/components/gunpoint.dm index cb8dfb1ec8d..ed4142f41ce 100644 --- a/code/datums/components/gunpoint.dm +++ b/code/datums/components/gunpoint.dm @@ -45,7 +45,7 @@ COMSIG_LIVING_START_PULL), PROC_REF(trigger_reaction)) RegisterSignal(targ, COMSIG_ATOM_EXAMINE, PROC_REF(examine_target)) RegisterSignal(targ, COMSIG_LIVING_PRE_MOB_BUMP, PROC_REF(block_bumps_target)) - RegisterSignals(targ, list(COMSIG_HUMAN_DISARM_HIT, COMSIG_LIVING_GET_PULLED), PROC_REF(cancel)) + RegisterSignals(targ, list(COMSIG_LIVING_DISARM_HIT, COMSIG_LIVING_GET_PULLED), PROC_REF(cancel)) RegisterSignals(weapon, list(COMSIG_ITEM_DROPPED, COMSIG_ITEM_EQUIPPED), PROC_REF(cancel)) var/distance = min(get_dist(shooter, target), 1) // treat 0 distance as adjacent @@ -88,7 +88,7 @@ RegisterSignals(parent, list(COMSIG_LIVING_START_PULL, COMSIG_MOVABLE_BUMP), PROC_REF(check_bump)) RegisterSignal(parent, COMSIG_ATOM_EXAMINE, PROC_REF(examine)) RegisterSignal(parent, COMSIG_LIVING_PRE_MOB_BUMP, PROC_REF(block_bumps_parent)) - RegisterSignal(parent, COMSIG_HUMAN_DISARM_HIT, PROC_REF(cancel)) + RegisterSignal(parent, COMSIG_LIVING_DISARM_HIT, PROC_REF(cancel)) /datum/component/gunpoint/UnregisterFromParent() UnregisterSignal(parent, COMSIG_MOVABLE_MOVED) @@ -98,7 +98,7 @@ UnregisterSignal(parent, list(COMSIG_LIVING_START_PULL, COMSIG_MOVABLE_BUMP)) UnregisterSignal(parent, COMSIG_ATOM_EXAMINE) UnregisterSignal(parent, COMSIG_LIVING_PRE_MOB_BUMP) - UnregisterSignal(parent, COMSIG_HUMAN_DISARM_HIT) + UnregisterSignal(parent, COMSIG_LIVING_DISARM_HIT) ///If the shooter bumps the target, cancel the holdup to avoid cheesing and forcing the charged shot /datum/component/gunpoint/proc/check_bump(atom/B, atom/A) diff --git a/code/datums/components/infective.dm b/code/datums/components/infective.dm index 6d89f6e5cd9..97df6342aeb 100644 --- a/code/datums/components/infective.dm +++ b/code/datums/components/infective.dm @@ -161,3 +161,20 @@ /datum/component/infective/proc/try_infect(mob/living/L, target_zone) for(var/V in diseases) L.ContactContractDisease(V, target_zone) + +/datum/component/infective/UnregisterFromParent() + . = ..() + UnregisterSignal(parent, list( + COMSIG_FOOD_EATEN, + COMSIG_PILL_CONSUMED, + COMSIG_COMPONENT_CLEAN_ACT, + COMSIG_MOVABLE_BUMP, + COMSIG_MOVABLE_IMPACT_ZONE, + COMSIG_ITEM_ATTACK_ZONE, + COMSIG_ITEM_ATTACK, + COMSIG_ITEM_EQUIPPED, + COMSIG_GLASS_DRANK, + COMSIG_ORGAN_IMPLANTED, + COMSIG_GIBS_STREAK, + )) + qdel(GetComponent(/datum/component/connect_loc_behalf)) diff --git a/code/datums/components/jetpack.dm b/code/datums/components/jetpack.dm index 3e0fd28ed80..437660abc82 100644 --- a/code/datums/components/jetpack.dm +++ b/code/datums/components/jetpack.dm @@ -116,7 +116,7 @@ return if(user.throwing)//You don't must use jet if you thrown return - if(length(user.client.keys_held & user.client.movement_keys))//You use jet when press keys. yes. + if(user.client.intended_direction)//You use jet when press keys. yes. thrust() /datum/component/jetpack/proc/pre_move_react(mob/user) diff --git a/code/datums/components/jukebox.dm b/code/datums/components/jukebox.dm new file mode 100644 index 00000000000..545b9daab0b --- /dev/null +++ b/code/datums/components/jukebox.dm @@ -0,0 +1,406 @@ +/// Checks if the mob has jukebox muted in their preferences +#define IS_PREF_MUTED(mob) (!isnull(mob.client) && !mob.client.prefs.read_preference(/datum/preference/toggle/sound_jukebox)) + +// Reasons for appling STATUS_MUTE to a mob's sound status +/// The mob is deaf +#define MUTE_DEAF (1<<0) +/// The mob has disabled jukeboxes in their preferences +#define MUTE_PREF (1<<1) +/// The mob is out of range of the jukebox +#define MUTE_RANGE (1<<2) + +/** + * ## Jukebox datum + * + * Plays music to nearby mobs when hosted in a movable or a turf. + */ +/datum/jukebox + /// Atom that hosts the jukebox. Can be a turf or a movable. + VAR_FINAL/atom/parent + /// List of /datum/tracks we can play. Set via get_songs(). + VAR_FINAL/list/songs = list() + /// Current song track selected + VAR_FINAL/datum/track/selection + /// Current song datum playing + VAR_FINAL/sound/active_song_sound + /// Whether the jukebox requires a connect_range component to check for new listeners + VAR_PROTECTED/requires_range_check = TRUE + + /// Assoc list of all mobs listening to the jukebox to their sound status. + VAR_PRIVATE/list/mob/listeners = list() + + /// Volume of the songs played. Also serves as the max volume. + /// Do not set directly, use set_new_volume() instead. + VAR_PROTECTED/volume = 50 + + /// Range at which the sound plays to players, can also be a view "XxY" string + VAR_PROTECTED/sound_range + /// How far away horizontally from the jukebox can you be before you stop hearing it + VAR_PRIVATE/x_cutoff + /// How far away vertically from the jukebox can you be before you stop hearing it + VAR_PRIVATE/z_cutoff + /// Whether the music loops when done. + /// If FALSE, you must handle ending music yourself. + var/sound_loops = FALSE + +/datum/jukebox/New(atom/new_parent) + if(!ismovable(new_parent) && !isturf(new_parent)) + stack_trace("[type] created on non-turf or non-movable: [new_parent ? "[new_parent] ([new_parent.type])" : "null"])") + qdel(src) + return + + parent = new_parent + + if(isnull(sound_range)) + sound_range = world.view + var/list/worldviewsize = getviewsize(sound_range) + x_cutoff = ceil(worldviewsize[1] * 1.25 / 2) // * 1.25 gives us some extra range to fade out with + z_cutoff = ceil(worldviewsize[2] * 1.25 / 2) // and / 2 is because world view is the whole screen, and we want the centre + + if(requires_range_check) + var/static/list/connections = list(COMSIG_ATOM_ENTERED = PROC_REF(check_new_listener)) + AddComponent(/datum/component/connect_range, parent, connections, max(x_cutoff, z_cutoff)) + + songs = init_songs() + if(length(songs)) + selection = songs[pick(songs)] + + RegisterSignal(parent, COMSIG_ENTER_AREA, PROC_REF(on_enter_area)) + RegisterSignal(parent, COMSIG_MOVABLE_MOVED, PROC_REF(on_moved)) + RegisterSignal(parent, COMSIG_QDELETING, PROC_REF(parent_delete)) + +/datum/jukebox/Destroy() + unlisten_all() + parent = null + selection = null + songs.Cut() + active_song_sound = null + return ..() + +/// When our parent is deleted, we should go too. +/datum/jukebox/proc/parent_delete(datum/source) + SIGNAL_HANDLER + qdel(src) + +/** + * Initializes the track list. + * + * By default, this loads all tracks from the config datum. + * + * Returns + * * An assoc list of track names to /datum/track. Track names must be unique. + */ +/datum/jukebox/proc/init_songs() + return load_songs_from_config() + +/// Loads the config sounds once, and returns a copy of them. +/datum/jukebox/proc/load_songs_from_config() + var/static/list/config_songs + if(isnull(config_songs)) + config_songs = list() + var/list/tracks = flist("[global.config.directory]/jukebox_music/sounds/") + for(var/track_file in tracks) + var/datum/track/new_track = new() + new_track.song_path = file("[global.config.directory]/jukebox_music/sounds/[track_file]") + var/list/track_data = splittext(track_file, "+") + if(length(track_data) != 3) + continue + new_track.song_name = track_data[1] + new_track.song_length = text2num(track_data[2]) + new_track.song_beat = text2num(track_data[3]) + config_songs[new_track.song_name] = new_track + + if(!length(config_songs)) + var/datum/track/default/default_track = new() + config_songs[default_track.song_name] = default_track + + // returns a copy so it can mutate if desired. + return config_songs.Copy() + +/** + * Returns a set of general data relating to the jukebox for use in TGUI. + * + * Returns + * * A list of UI data + */ +/datum/jukebox/proc/get_ui_data() + var/list/data = list() + var/list/songs_data = list() + for(var/song_name in songs) + var/datum/track/one_song = songs[song_name] + UNTYPED_LIST_ADD(songs_data, list( \ + "name" = song_name, \ + "length" = DisplayTimeText(one_song.song_length), \ + "beat" = one_song.song_beat, \ + )) + + data["active"] = !!active_song_sound + data["songs"] = songs_data + data["track_selected"] = selection?.song_name + data["looping"] = sound_loops + data["volume"] = volume + return data + +/** + * Sets the sound's range to a new value. This can be a number or a view size string "XxY". + * Then updates any mobs listening to it. + */ +/datum/jukebox/proc/set_sound_range(new_range) + if(sound_range == new_range) + return + sound_range = new_range + var/list/worldviewsize = getviewsize(sound_range) + x_cutoff = ceil(worldviewsize[1] / 2) + z_cutoff = ceil(worldviewsize[2] / 2) + update_all() + +/** + * Sets the sound's volume to a new value. + * Then updates any mobs listening to it. + */ +/datum/jukebox/proc/set_new_volume(new_vol) + new_vol = clamp(new_vol, 0, initial(volume)) + if(volume == new_vol) + return + volume = new_vol + if(!active_song_sound) + return + active_song_sound.volume = volume + update_all() + +/// Sets volume to the maximum possible value, the initial volume value. +/datum/jukebox/proc/set_volume_to_max() + set_new_volume(initial(volume)) + +/** + * Sets the sound's environment to a new value. + * Then updates any mobs listening to it. + */ +/datum/jukebox/proc/set_new_environment(new_env) + if(!active_song_sound || active_song_sound.environment == new_env) + return + active_song_sound.environment = new_env + update_all() + +/// Helper to stop the music for all mobs listening to the music. +/datum/jukebox/proc/unlisten_all() + for(var/mob/listening as anything in listeners) + deregister_listener(listening) + active_song_sound = null + +/// Helper to update all mobs currently listening to the music. +/datum/jukebox/proc/update_all() + for(var/mob/listening as anything in listeners) + update_listener(listening) + +/// Helper to kickstart the music for all mobs in hearing range of the jukebox. +/datum/jukebox/proc/start_music() + for(var/mob/nearby in hearers(sound_range, parent)) + register_listener(nearby) + +/// Helper to get all mobs currently, ACTIVELY listening to the jukebox. +/datum/jukebox/proc/get_active_listeners() + var/list/all_listeners = list() + for(var/mob/listener as anything in listeners) + if(listeners[listener] & SOUND_MUTE) + continue + all_listeners += listener + return all_listeners + +/// Registers the passed mob as a new listener to the jukebox. +/datum/jukebox/proc/register_listener(mob/new_listener) + PROTECTED_PROC(TRUE) + + listeners[new_listener] = NONE + RegisterSignal(new_listener, COMSIG_QDELETING, PROC_REF(listener_deleted)) + + if(isnull(new_listener.client)) + RegisterSignal(new_listener, COMSIG_MOB_LOGIN, PROC_REF(listener_login)) + return + + RegisterSignal(new_listener, COMSIG_MOVABLE_MOVED, PROC_REF(listener_moved)) + RegisterSignals(new_listener, list(SIGNAL_ADDTRAIT(TRAIT_DEAF), SIGNAL_REMOVETRAIT(TRAIT_DEAF)), PROC_REF(listener_deaf)) + + if(HAS_TRAIT(new_listener, TRAIT_DEAF) || IS_PREF_MUTED(new_listener)) + listeners[new_listener] |= SOUND_MUTE + + if(isnull(active_song_sound)) + var/area/juke_area = get_area(parent) + active_song_sound = sound(selection.song_path) + active_song_sound.channel = CHANNEL_JUKEBOX + active_song_sound.priority = 255 + active_song_sound.falloff = 2 + active_song_sound.volume = volume + active_song_sound.y = 1 + active_song_sound.environment = juke_area.sound_environment || SOUND_ENVIRONMENT_NONE + active_song_sound.repeat = sound_loops + + update_listener(new_listener) + // if you have a sound with status SOUND_UPDATE, + // and try to play it to a client who is not listening to the sound already, + // it will not work. + // so we only add this status AFTER the first update, which plays the first sound. + // and after that it's fine to keep it on the sound so it updates as the x/z does. + listeners[new_listener] |= SOUND_UPDATE + +/// Deregisters mobs on deletion. +/datum/jukebox/proc/listener_deleted(mob/source) + SIGNAL_HANDLER + deregister_listener(source) + +/// Updates the sound's position on mob movement. +/datum/jukebox/proc/listener_moved(mob/source) + SIGNAL_HANDLER + update_listener(source) + +/// Allows mobs who are clientless when the music starts to hear it when they log in. +/datum/jukebox/proc/listener_login(mob/source) + SIGNAL_HANDLER + deregister_listener(source) + register_listener(source) + +/// Updates the sound's mute status when the mob's deafness updates. +/datum/jukebox/proc/listener_deaf(mob/source) + SIGNAL_HANDLER + + if(HAS_TRAIT(source, TRAIT_DEAF)) + listeners[source] |= SOUND_MUTE + else if(!unmute_listener(source, MUTE_DEAF)) + return + update_listener(source) + +/** + * Unmutes the passed mob's sound from the passed reason. + * + * Arguments + * * mob/listener - The mob to unmute. + * * reason - The reason to unmute them for. Can be a combination of MUTE_DEAF, MUTE_PREF, MUTE_RANGE. + */ +/datum/jukebox/proc/unmute_listener(mob/listener, reason) + // We need to check everything BUT the reason we're unmuting for + // Because if we're muted for a different reason we don't wanna touch it + reason = ~reason + + if((reason & MUTE_DEAF) && HAS_TRAIT(listener, TRAIT_DEAF)) + return FALSE + + if((reason & MUTE_PREF) && IS_PREF_MUTED(listener)) + return FALSE + + if(reason & MUTE_RANGE) + var/turf/sound_turf = get_turf(parent) + var/turf/listener_turf = get_turf(listener) + if(isnull(sound_turf) || isnull(listener_turf)) + return FALSE + if(sound_turf.z != listener_turf.z) + return FALSE + if(abs(sound_turf.x - listener_turf.x) > x_cutoff) + return FALSE + if(abs(sound_turf.y - listener_turf.y) > z_cutoff) + return FALSE + + listeners[listener] &= ~SOUND_MUTE + return TRUE + +/// Deregisters the passed mob as a listener to the jukebox, stopping the music. +/datum/jukebox/proc/deregister_listener(mob/no_longer_listening) + PROTECTED_PROC(TRUE) + + listeners -= no_longer_listening + no_longer_listening.stop_sound_channel(CHANNEL_JUKEBOX) + UnregisterSignal(no_longer_listening, list( + COMSIG_MOB_LOGIN, + COMSIG_QDELETING, + COMSIG_MOVABLE_MOVED, + SIGNAL_ADDTRAIT(TRAIT_DEAF), + SIGNAL_REMOVETRAIT(TRAIT_DEAF), + )) + +/// Updates the passed mob's sound in according to their position and status. +/datum/jukebox/proc/update_listener(mob/listener) + PROTECTED_PROC(TRUE) + + active_song_sound.status = listeners[listener] || NONE + + var/turf/sound_turf = get_turf(parent) + var/turf/listener_turf = get_turf(listener) + if(isnull(sound_turf) || isnull(listener_turf)) // ?? + active_song_sound.x = 0 + active_song_sound.z = 0 + + else if(sound_turf.z != listener_turf.z) // Could MAYBE model multi-z jukeboxes but that's too complex for now + listeners[listener] |= SOUND_MUTE + + else + // keep in mind sound XYZ is different to world XYZ. sound +-z = world +-y + var/new_x = sound_turf.x - listener_turf.x + var/new_z = sound_turf.y - listener_turf.y + + if((abs(new_x) > x_cutoff || abs(new_z) > z_cutoff)) + listeners[listener] |= SOUND_MUTE + + else if(listeners[listener] & SOUND_MUTE) + unmute_listener(listener, MUTE_RANGE) + + active_song_sound.x = new_x + active_song_sound.z = new_z + + SEND_SOUND(listener, active_song_sound) + +/// When the jukebox moves, we need to update all listeners. +/datum/jukebox/proc/on_moved(datum/source, ...) + SIGNAL_HANDLER + update_all() + +/// When the jukebox enters a new area entirely, we need to update the environment to the new area's. +/datum/jukebox/proc/on_enter_area(datum/source, area/area_to_register) + SIGNAL_HANDLER + set_new_environment(area_to_register.sound_environment || SOUND_ENVIRONMENT_NONE) + +/// Check for new mobs entering the jukebox's range. +/datum/jukebox/proc/check_new_listener(datum/source, atom/movable/entered) + SIGNAL_HANDLER + + if(isnull(active_song_sound)) + return + if(!ismob(entered)) + return + if(entered in listeners) + return + register_listener(entered) + +/** + * Subtype which only plays the music to the mob you pass in via start_music(). + * + * Multiple mobs can still listen at once, but you must register them all manually via start_music(). + */ +/datum/jukebox/single_mob + requires_range_check = FALSE + +/datum/jukebox/single_mob/start_music(mob/solo_listener) + register_listener(solo_listener) + +#undef IS_PREF_MUTED + +#undef MUTE_DEAF +#undef MUTE_PREF +#undef MUTE_RANGE + +/// Track datums, used in jukeboxes +/datum/track + /// Readable name, used in the jukebox menu + var/song_name = "generic" + /// Filepath of the song + var/song_path = null + /// How long is the song in deciseconds + var/song_length = 0 + /// How long is a beat of the song in decisconds + /// Used to determine time between effects when played + var/song_beat = 0 + +// Default track supplied for testing and also because it's a banger +/datum/track/default + song_path = 'sound/ambience/title3.ogg' + song_name = "Tintin on the Moon" + song_length = 3 MINUTES + 52 SECONDS + song_beat = 1 SECONDS diff --git a/code/datums/components/knockoff.dm b/code/datums/components/knockoff.dm index b5563433c72..db72072789c 100644 --- a/code/datums/components/knockoff.dm +++ b/code/datums/components/knockoff.dm @@ -29,11 +29,11 @@ var/obj/item/item_parent = parent if(ismob(item_parent.loc)) - UnregisterSignal(item_parent.loc, list(COMSIG_HUMAN_DISARM_HIT, COMSIG_LIVING_STATUS_KNOCKDOWN)) + UnregisterSignal(item_parent.loc, list(COMSIG_LIVING_DISARM_HIT, COMSIG_LIVING_STATUS_KNOCKDOWN)) -/// Signal proc for [COMSIG_HUMAN_DISARM_HIT] on the mob who's equipped our parent +/// Signal proc for [COMSIG_LIVING_DISARM_HIT] on the mob who's equipped our parent /// Rolls a chance for knockoff whenever we're disarmed -/datum/component/knockoff/proc/on_equipped_mob_disarm(mob/living/carbon/human/source, mob/living/attacker, zone) +/datum/component/knockoff/proc/on_equipped_mob_disarm(mob/living/source, mob/living/attacker, zone, obj/item/weapon) SIGNAL_HANDLER if(!istype(source)) @@ -85,10 +85,10 @@ return if(slots_knockoffable && !(slot & slots_knockoffable)) - UnregisterSignal(equipper, list(COMSIG_HUMAN_DISARM_HIT, COMSIG_LIVING_STATUS_KNOCKDOWN)) + UnregisterSignal(equipper, list(COMSIG_LIVING_DISARM_HIT, COMSIG_LIVING_STATUS_KNOCKDOWN)) return - RegisterSignal(equipper, COMSIG_HUMAN_DISARM_HIT, PROC_REF(on_equipped_mob_disarm), TRUE) + RegisterSignal(equipper, COMSIG_LIVING_DISARM_HIT, PROC_REF(on_equipped_mob_disarm), TRUE) RegisterSignal(equipper, COMSIG_LIVING_STATUS_KNOCKDOWN, PROC_REF(on_equipped_mob_knockdown), TRUE) /// Signal proc for [COMSIG_ITEM_DROPPED] @@ -96,4 +96,4 @@ /datum/component/knockoff/proc/on_dropped(datum/source, mob/living/dropper) SIGNAL_HANDLER - UnregisterSignal(dropper, list(COMSIG_HUMAN_DISARM_HIT, COMSIG_LIVING_STATUS_KNOCKDOWN)) + UnregisterSignal(dropper, list(COMSIG_LIVING_DISARM_HIT, COMSIG_LIVING_STATUS_KNOCKDOWN)) diff --git a/code/datums/components/marionette.dm b/code/datums/components/marionette.dm new file mode 100644 index 00000000000..a2f58031768 --- /dev/null +++ b/code/datums/components/marionette.dm @@ -0,0 +1,77 @@ +/** + * Marionette component + * + * Upon being grabbed, we will align the direction of the parent with the direction of the grabber when they rotate. + * While grabbed, will also speak out whatever the original person says + */ +/datum/component/marionette + ///Reference to the mob that is grabbing us, which we hook signals to for marionette stuff. + var/mob/grabber + +/datum/component/marionette/Destroy() + if(grabber) + UnregisterSignal(grabber, list(COMSIG_MOVABLE_KEYBIND_FACE_DIR, COMSIG_MOB_SAY, COMSIG_QDELETING)) + grabber = null + return ..() + +/datum/component/marionette/RegisterWithParent() + RegisterSignal(parent, COMSIG_LIVING_TRYING_TO_PULL, PROC_REF(on_pull)) + RegisterSignal(parent, COMSIG_ATOM_NO_LONGER_PULLED, PROC_REF(on_stop_pull)) + +/datum/component/marionette/UnregisterFromParent() + UnregisterSignal(parent, list( + COMSIG_LIVING_TRYING_TO_PULL, + COMSIG_ATOM_NO_LONGER_PULLED, + )) + return ..() + +///Called when something starts pulling us, we now listen in to that thing for rotation. +/datum/component/marionette/proc/on_pull(atom/movable/source, atom/movable/puller, force) + SIGNAL_HANDLER + + if(!puller) + return + grabber = puller + RegisterSignal(grabber, COMSIG_MOVABLE_KEYBIND_FACE_DIR, PROC_REF(on_puller_turn)) + RegisterSignal(grabber, COMSIG_MOB_SAY, PROC_REF(on_puller_speech)) + RegisterSignal(grabber, COMSIG_QDELETING, PROC_REF(on_puller_qdel)) + +///Stopped pulling, we clear out signals and references. +/datum/component/marionette/proc/on_stop_pull(datum/source, atom/movable/was_pulling) + SIGNAL_HANDLER + if(grabber) + UnregisterSignal(grabber, list(COMSIG_MOVABLE_KEYBIND_FACE_DIR, COMSIG_MOB_SAY, COMSIG_QDELETING)) + grabber = null + +///Callled when the person grabbin us turns, we rotate to match their direction. +/datum/component/marionette/proc/on_puller_turn(mob/living/source, direction) + SIGNAL_HANDLER + var/atom/movable/parent_movable = parent + parent_movable.setDir(direction) + +///Called when the person grabbing us speaks, we lower their volume to 1 tile and speak what they said through us. +/datum/component/marionette/proc/on_puller_speech(datum/source, list/speech_args) + SIGNAL_HANDLER + + if(HAS_TRAIT(grabber, TRAIT_SIGN_LANG)) + return + + var/message = speech_args[SPEECH_MESSAGE] + var/list/spans = speech_args[SPEECH_SPANS] + var/language = speech_args[SPEECH_LANGUAGE] + var/saymode = speech_args[SPEECH_SAYMODE] + var/atom/movable/movable_parent = parent + movable_parent.say( + message = message, + spans = spans.Copy(), + language = language, + forced = "[source]'s marionette", + saymode = saymode, + ) + speech_args[SPEECH_RANGE] = WHISPER_RANGE + +///Called when our puller is somehow deleted, we simply clear the reference to them. +/datum/component/marionette/proc/on_puller_qdel() + SIGNAL_HANDLER + + grabber = null diff --git a/code/datums/components/material/material_container.dm b/code/datums/components/material/material_container.dm index e84e3a46c82..69f67d46df3 100644 --- a/code/datums/components/material/material_container.dm +++ b/code/datums/components/material/material_container.dm @@ -66,6 +66,9 @@ for(var/signal in container_signals) parent.RegisterSignal(src, signal, container_signals[signal]) + //drop sheets when the object is deconstructed but not deleted + RegisterSignal(parent, COMSIG_OBJ_DECONSTRUCT, PROC_REF(drop_sheets)) + if(_mat_container_flags & MATCONTAINER_NO_INSERT) return @@ -75,7 +78,6 @@ RegisterSignal(atom_target, COMSIG_ATOM_REQUESTING_CONTEXT_FROM_ITEM, PROC_REF(on_requesting_context_from_item)) /datum/component/material_container/Destroy(force) - retrieve_all() materials = null allowed_materials = null return ..() @@ -88,6 +90,11 @@ if(mat_container_flags & MATCONTAINER_EXAMINE) RegisterSignal(parent, COMSIG_ATOM_EXAMINE, PROC_REF(on_examine)) +/datum/component/material_container/proc/drop_sheets() + SIGNAL_HANDLER + + retrieve_all() + /datum/component/material_container/proc/on_examine(datum/source, mob/user, list/examine_texts) SIGNAL_HANDLER @@ -268,10 +275,9 @@ var/inserted = 0 //All messages to be displayed to chat var/list/chat_msgs = list() - //differs from held_item when using TK var/active_held = user.get_active_held_item() - + //storage items to retrive items from var/static/list/storage_items if(isnull(storage_items)) storage_items = list( @@ -281,7 +287,7 @@ ) //1st iteration consumes all items that do not have contents inside - //2nd iteration consumes items who do have contents inside(but they were consumed in the 1st iteration si its empty now) + //2nd iteration consumes items who do have contents inside(but they were consumed in the 1st iteration so its empty now) for(var/i in 1 to 2) //no point inserting more items if(inserted == MATERIAL_INSERT_ITEM_NO_SPACE) @@ -304,15 +310,11 @@ //can't allow abstract, hologram items if((target_item.item_flags & ABSTRACT) || (target_item.flags_1 & HOLOGRAM_1)) continue - //untouchable, move it out the way, code copied from recycler - if(target_item.resistance_flags & INDESTRUCTIBLE) - target_item.forceMove(get_turf(parent)) - continue //user defined conditions if(SEND_SIGNAL(src, COMSIG_MATCONTAINER_PRE_USER_INSERT, target_item, user) & MATCONTAINER_BLOCK_INSERT) continue - //item is either not allowed for redemption, not in the allowed types - if((target_item.item_flags & NO_MAT_REDEMPTION) || (allowed_item_typecache && !is_type_in_typecache(target_item, allowed_item_typecache))) + //item is either indestructible, not allowed for redemption or not in the allowed types + if((target_item.resistance_flags & INDESTRUCTIBLE) || (target_item.item_flags & NO_MAT_REDEMPTION) || (allowed_item_typecache && !is_type_in_typecache(target_item, allowed_item_typecache))) if(!(mat_container_flags & MATCONTAINER_SILENT) && i == 1) //count only child items the 1st time around var/list/status_data = chat_msgs["[MATERIAL_INSERT_ITEM_FAILURE]"] || list() var/list/item_data = status_data[target_item.name] || list() @@ -320,6 +322,10 @@ status_data[target_item.name] = item_data chat_msgs["[MATERIAL_INSERT_ITEM_FAILURE]"] = status_data + if(target_item.resistance_flags & INDESTRUCTIBLE) + if(i == 1 && target_item != active_held) //move it out of any storage medium its in so it doesn't get consumed with its parent, but only if that storage medium is not our hand + target_item.forceMove(get_turf(context)) + continue //storage items usually come here but we make the exception only on the 1st iteration //this is so players can insert items from their bags into machines for convinience if(!is_type_in_list(target_item, storage_items)) @@ -459,15 +465,15 @@ if(MATERIAL_INSERT_ITEM_SUCCESS) //no problems full item was consumed if(chat_data["stack"]) var/sheets = min(count, amount) //minimum between sheets inserted vs sheets consumed(values differ for alloys) - to_chat(user, span_notice("[sheets > 1 ? sheets : ""] [item_name][sheets > 1 ? "'s" : ""] was consumed by [parent]")) + to_chat(user, span_notice("[sheets > 1 ? sheets : ""] [item_name][sheets > 1 ? "s were" : " was"] added to [parent].")) else - to_chat(user, span_notice("[count > 1 ? count : ""] [item_name][count > 1 ? "'s" : ""] worth [amount] sheets of material was consumed by [parent]")) + to_chat(user, span_notice("[count > 1 ? count : ""] [item_name][count > 1 ? "s" : ""], worth [amount] sheets, [count > 1 ? "were" : "was"] added to [parent].")) if(MATERIAL_INSERT_ITEM_NO_SPACE) //no space - to_chat(user, span_warning("[parent] has no space to accept [item_name]")) + to_chat(user, span_warning("[parent] has no space to accept [item_name]!")) if(MATERIAL_INSERT_ITEM_NO_MATS) //no materials inside these items - to_chat(user, span_warning("[count > 1 ? count : ""] [item_name][count > 1 ? "'s" : ""] has no materials to be accepted by [parent]")) + to_chat(user, span_warning("[item_name][count > 1 ? "s have" : " has"] no materials that can be accepted by [parent]!")) if(MATERIAL_INSERT_ITEM_FAILURE) //could be because the material type was not accepted or other stuff - to_chat(user, span_warning("[count > 1 ? count : ""] [item_name][count > 1 ? "'s" : ""] was rejected by [parent]")) + to_chat(user, span_warning("[item_name][count > 1 ? "s were" : " was"] rejected by [parent]!")) /// Proc that allows players to fill the parent with mats /datum/component/material_container/proc/on_attackby(datum/source, obj/item/weapon, mob/living/user) @@ -581,7 +587,9 @@ return FALSE for(var/x in mats) //Loop through all required materials - if(!has_enough_of_material(x, OPTIMAL_COST(mats[x] * coefficient) * multiplier))//Not a category, so just check the normal way + var/wanted = OPTIMAL_COST(mats[x] * coefficient) * multiplier + if(!has_enough_of_material(x, wanted))//Not a category, so just check the normal way + testing("didnt have: [x] wanted: [wanted]") return FALSE return TRUE diff --git a/code/datums/components/material/remote_materials.dm b/code/datums/components/material/remote_materials.dm index 33d85a5376f..e418d4276be 100644 --- a/code/datums/components/material/remote_materials.dm +++ b/code/datums/components/material/remote_materials.dm @@ -74,8 +74,8 @@ handles linking back and forth. if (silo) silo.ore_connected_machines -= src silo.holds -= src - silo.updateUsrDialog() silo = null + UnregisterSignal(parent, COMSIG_ATOM_ATTACKBY) mat_container = null return ..() @@ -118,6 +118,12 @@ handles linking back and forth. else silo.holds -= src +/** + * Sets the storage size for local materials when not linked with silo + * Arguments + * + * * size - the new size for local storage. measured in SHEET_MATERIAL_SIZE units + */ /datum/component/remote_materials/proc/set_local_size(size) local_size = size if (!silo && mat_container) @@ -135,6 +141,7 @@ handles linking back and forth. silo.ore_connected_machines -= src silo = null mat_container = null + UnregisterSignal(parent, COMSIG_ATOM_ATTACKBY) if (allow_standalone) _MakeLocal() @@ -170,7 +177,6 @@ handles linking back and forth. if (silo) silo.ore_connected_machines -= src silo.holds -= src - silo.updateUsrDialog() else if (mat_container) //transfer all mats to silo. whatever cannot be transfered is dumped out as sheets if(mat_container.total_amount()) @@ -183,12 +189,11 @@ handles linking back and forth. qdel(mat_container) silo = new_silo silo.ore_connected_machines += src - silo.updateUsrDialog() mat_container = new_container if(!(mat_container_flags & MATCONTAINER_NO_INSERT)) RegisterSignal(parent, COMSIG_ATOM_ATTACKBY, TYPE_PROC_REF(/datum/component/remote_materials, SiloAttackBy)) to_chat(user, span_notice("You connect [parent] to [silo] from the multitool's buffer.")) - return ITEM_INTERACT_BLOCKING + return ITEM_INTERACT_SUCCESS /** * Checks if the param silo is in the same level as this components parent i.e. connected machine, rcd, etc @@ -210,7 +215,7 @@ handles linking back and forth. return check_z_level() ? silo.holds[src] : FALSE /** - * Internal proc to check if this connection can use any materials from the silo + * Check if this connection can use any materials from the silo * Returns true only if * - The parent is of type movable atom * - A mat container is actually present @@ -218,9 +223,7 @@ handles linking back and forth. * Arguments * * check_hold - should we check if the silo is on hold */ -/datum/component/remote_materials/proc/_can_use_resource(check_hold = TRUE) - PRIVATE_PROC(TRUE) - +/datum/component/remote_materials/proc/can_use_resource(check_hold = TRUE) var/atom/movable/movable_parent = parent if (!istype(movable_parent)) return FALSE @@ -244,7 +247,7 @@ handles linking back and forth. * name- For logging only. the design you are trying to build e.g. matter bin, etc. */ /datum/component/remote_materials/proc/use_materials(list/mats, coefficient = 1, multiplier = 1, action = "build", name = "design") - if(!_can_use_resource()) + if(!can_use_resource()) return 0 var/amount_consumed = mat_container.use_materials(mats, coefficient, multiplier) @@ -266,7 +269,7 @@ handles linking back and forth. * [drop_target][atom]- optional where to drop the sheets. null means it is dropped at this components parent location */ /datum/component/remote_materials/proc/eject_sheets(datum/material/material_ref, eject_amount, atom/drop_target = null) - if(!_can_use_resource()) + if(!can_use_resource()) return 0 var/atom/movable/movable_parent = parent @@ -283,7 +286,7 @@ handles linking back and forth. * * multiplier - the multiplier applied on the materials consumed */ /datum/component/remote_materials/proc/insert_item(obj/item/weapon, multiplier = 1) - if(!_can_use_resource(FALSE)) + if(!can_use_resource(FALSE)) return MATERIAL_INSERT_ITEM_FAILURE return mat_container.insert_item(weapon, multiplier, parent) diff --git a/code/datums/components/omen.dm b/code/datums/components/omen.dm index 56af8e6a9db..e4094ba679a 100644 --- a/code/datums/components/omen.dm +++ b/code/datums/components/omen.dm @@ -308,6 +308,7 @@ * While it lasts, parent gets a cursed aura filter. */ /datum/component/omen/bible + incidents_left = 1 /datum/component/omen/bible/RegisterWithParent() . = ..() diff --git a/code/datums/components/overlay_lighting.dm b/code/datums/components/overlay_lighting.dm index 180c65b2239..efff82b703a 100644 --- a/code/datums/components/overlay_lighting.dm +++ b/code/datums/components/overlay_lighting.dm @@ -78,8 +78,8 @@ return COMPONENT_INCOMPATIBLE var/atom/movable/movable_parent = parent - if(movable_parent.light_system != MOVABLE_LIGHT && movable_parent.light_system != MOVABLE_LIGHT_DIRECTIONAL && movable_parent.light_system != MOVABLE_LIGHT_BEAM) - stack_trace("[type] added to [parent], with [movable_parent.light_system] value for the light_system var. Use [MOVABLE_LIGHT], [MOVABLE_LIGHT_DIRECTIONAL] or [MOVABLE_LIGHT_BEAM] instead.") + if(movable_parent.light_system != OVERLAY_LIGHT && movable_parent.light_system != OVERLAY_LIGHT_DIRECTIONAL && movable_parent.light_system != OVERLAY_LIGHT_BEAM) + stack_trace("[type] added to [parent], with [movable_parent.light_system] value for the light_system var. Use [OVERLAY_LIGHT], [OVERLAY_LIGHT_DIRECTIONAL] or [OVERLAY_LIGHT_BEAM] instead.") return COMPONENT_INCOMPATIBLE . = ..() diff --git a/code/datums/components/rotation.dm b/code/datums/components/rotation.dm index 4bcfa8b01c9..7c55579c999 100644 --- a/code/datums/components/rotation.dm +++ b/code/datums/components/rotation.dm @@ -1,6 +1,6 @@ /datum/component/simple_rotation /// Additional stuff to do after rotation - var/datum/callback/AfterRotation + var/datum/callback/post_rotation /// Rotation flags for special behavior var/rotation_flags = NONE @@ -9,9 +9,9 @@ * * args: * * rotation_flags (optional) Bitflags that determine behavior for rotation (defined at the top of this file) - * * AfterRotation (optional) Callback proc that is used after the object is rotated (sound effects, balloon alerts, etc.) -**/ -/datum/component/simple_rotation/Initialize(rotation_flags = NONE, AfterRotation) + * * post_rotation (optional) Callback proc that is used after the object is rotated (sound effects, balloon alerts, etc.) + **/ +/datum/component/simple_rotation/Initialize(rotation_flags = NONE, post_rotation) if(!ismovable(parent)) return COMPONENT_INCOMPATIBLE @@ -19,19 +19,13 @@ source.flags_1 |= HAS_CONTEXTUAL_SCREENTIPS_1 src.rotation_flags = rotation_flags - src.AfterRotation = AfterRotation || CALLBACK(src, PROC_REF(DefaultAfterRotation)) + src.post_rotation = post_rotation || CALLBACK(src, PROC_REF(default_post_rotation)) -/datum/component/simple_rotation/proc/AddSignals() - RegisterSignal(parent, COMSIG_CLICK_ALT, PROC_REF(RotateLeft)) - RegisterSignal(parent, COMSIG_CLICK_ALT_SECONDARY, PROC_REF(RotateRight)) +/datum/component/simple_rotation/RegisterWithParent() + RegisterSignal(parent, COMSIG_CLICK_ALT, PROC_REF(rotate_left)) + RegisterSignal(parent, COMSIG_CLICK_ALT_SECONDARY, PROC_REF(rotate_right)) RegisterSignal(parent, COMSIG_ATOM_EXAMINE, PROC_REF(ExamineMessage)) RegisterSignal(parent, COMSIG_ATOM_REQUESTING_CONTEXT_FROM_ITEM, PROC_REF(on_requesting_context_from_item)) - -/datum/component/simple_rotation/proc/RemoveSignals() - UnregisterSignal(parent, list(COMSIG_CLICK_ALT, COMSIG_CLICK_ALT_SECONDARY, COMSIG_ATOM_EXAMINE, COMSIG_ATOM_REQUESTING_CONTEXT_FROM_ITEM)) - -/datum/component/simple_rotation/RegisterWithParent() - AddSignals() return ..() /datum/component/simple_rotation/PostTransfer() @@ -41,15 +35,16 @@ return COMPONENT_NOTRANSFER /datum/component/simple_rotation/UnregisterFromParent() - RemoveSignals() + UnregisterSignal(parent, list( + COMSIG_CLICK_ALT, + COMSIG_CLICK_ALT_SECONDARY, + COMSIG_ATOM_EXAMINE, + COMSIG_ATOM_REQUESTING_CONTEXT_FROM_ITEM, + )) return ..() /datum/component/simple_rotation/Destroy() - AfterRotation = null - //Signals + verbs removed via UnRegister - return ..() - -/datum/component/simple_rotation/ClearFromParent() + post_rotation = null return ..() /datum/component/simple_rotation/proc/ExamineMessage(datum/source, mob/user, list/examine_list) @@ -57,15 +52,15 @@ if(rotation_flags & ROTATION_REQUIRE_WRENCH) examine_list += span_notice("This requires a wrench to be rotated.") -/datum/component/simple_rotation/proc/RotateRight(datum/source, mob/user) +/datum/component/simple_rotation/proc/rotate_right(datum/source, mob/user) SIGNAL_HANDLER - Rotate(user, ROTATION_CLOCKWISE) + rotate(user, ROTATION_CLOCKWISE) -/datum/component/simple_rotation/proc/RotateLeft(datum/source, mob/user) +/datum/component/simple_rotation/proc/rotate_left(datum/source, mob/user) SIGNAL_HANDLER - Rotate(user, ROTATION_COUNTERCLOCKWISE) + rotate(user, ROTATION_COUNTERCLOCKWISE) -/datum/component/simple_rotation/proc/Rotate(mob/user, degrees) +/datum/component/simple_rotation/proc/rotate(mob/user, degrees) if(QDELETED(user)) CRASH("[src] is being rotated [user ? "with a qdeleting" : "without a"] user") if(!istype(user)) @@ -73,7 +68,7 @@ if(!isnum(degrees)) CRASH("[src] is being rotated without providing the amount of degrees needed") - if(!CanBeRotated(user, degrees) || !CanUserRotate(user, degrees)) + if(!can_be_rotated(user, degrees) || !can_user_rotate(user, degrees)) return var/obj/rotated_obj = parent @@ -81,16 +76,16 @@ if(rotation_flags & ROTATION_REQUIRE_WRENCH) playsound(rotated_obj, 'sound/items/ratchet.ogg', 50, TRUE) - AfterRotation.Invoke(user, degrees) + post_rotation.Invoke(user, degrees) -/datum/component/simple_rotation/proc/CanUserRotate(mob/user, degrees) +/datum/component/simple_rotation/proc/can_user_rotate(mob/user, degrees) if(isliving(user) && user.can_perform_action(parent, NEED_DEXTERITY)) return TRUE if((rotation_flags & ROTATION_GHOSTS_ALLOWED) && isobserver(user) && CONFIG_GET(flag/ghost_interaction)) return TRUE return FALSE -/datum/component/simple_rotation/proc/CanBeRotated(mob/user, degrees, silent=FALSE) +/datum/component/simple_rotation/proc/can_be_rotated(mob/user, degrees, silent=FALSE) var/obj/rotated_obj = parent if(!rotated_obj.Adjacent(user)) silent = TRUE @@ -120,7 +115,7 @@ return FALSE return TRUE -/datum/component/simple_rotation/proc/DefaultAfterRotation(mob/user, degrees) +/datum/component/simple_rotation/proc/default_post_rotation(mob/user, degrees) return // maybe we don't need the item context proc but instead the hand one? since we don't need to check held_item @@ -129,10 +124,10 @@ var/rotation_screentip = FALSE - if(CanBeRotated(user, ROTATION_CLOCKWISE, silent=TRUE)) + if(can_be_rotated(user, ROTATION_CLOCKWISE, silent=TRUE)) context[SCREENTIP_CONTEXT_ALT_LMB] = "Rotate left" rotation_screentip = TRUE - if(CanBeRotated(user, ROTATION_COUNTERCLOCKWISE, silent=TRUE)) + if(can_be_rotated(user, ROTATION_COUNTERCLOCKWISE, silent=TRUE)) context[SCREENTIP_CONTEXT_ALT_RMB] = "Rotate right" rotation_screentip = TRUE diff --git a/code/datums/components/scope.dm b/code/datums/components/scope.dm index b413b6f8e51..531ff9e9962 100644 --- a/code/datums/components/scope.dm +++ b/code/datums/components/scope.dm @@ -60,7 +60,7 @@ stop_zooming(user_mob) return tracker.calculate_params() - if(!length(user_client.keys_held & user_client.movement_keys)) + if(!user_client.intended_direction) user_mob.face_atom(tracker.given_turf) animate(user_client, world.tick_lag, pixel_x = tracker.given_x, pixel_y = tracker.given_y) diff --git a/code/datums/components/shell.dm b/code/datums/components/shell.dm index a436a40d516..4646d30fc31 100644 --- a/code/datums/components/shell.dm +++ b/code/datums/components/shell.dm @@ -1,6 +1,6 @@ /// Makes an atom a shell that is able to take in an attached circuit. /datum/component/shell - dupe_mode = COMPONENT_DUPE_UNIQUE + dupe_mode = COMPONENT_DUPE_UNIQUE_PASSARGS /// The circuitboard attached to this shell var/obj/item/integrated_circuit/attached_circuit @@ -60,12 +60,15 @@ unremovable_circuit_components = list() for(var/obj/item/circuit_component/circuit_component as anything in components) - if(ispath(circuit_component)) - circuit_component = new circuit_component() - circuit_component.removable = FALSE - circuit_component.set_circuit_size(0) - RegisterSignal(circuit_component, COMSIG_CIRCUIT_COMPONENT_SAVE, PROC_REF(save_component)) - unremovable_circuit_components += circuit_component + add_unremovable_circuit_component(circuit_component) + +/datum/component/shell/proc/add_unremovable_circuit_component(obj/item/circuit_component/component) + if(ispath(component)) + component = new component() + component.removable = FALSE + component.set_circuit_size(0) + RegisterSignal(component, COMSIG_CIRCUIT_COMPONENT_SAVE, PROC_REF(save_component)) + unremovable_circuit_components += component /datum/component/shell/proc/save_component(datum/source, list/objects) SIGNAL_HANDLER @@ -154,7 +157,7 @@ */ /datum/component/shell/proc/on_set_anchored(atom/movable/source, previous_value) SIGNAL_HANDLER - attached_circuit?.on = source.anchored + attached_circuit?.set_on(source.anchored) /** * Called when an item hits the parent. This is the method to add the circuitboard to the component. @@ -305,6 +308,7 @@ return locked = FALSE attached_circuit = circuitboard + SEND_SIGNAL(src, COMSIG_SHELL_CIRCUIT_ATTACHED) if(!(shell_flags & SHELL_FLAG_CIRCUIT_UNREMOVABLE) && !circuitboard.admin_only) RegisterSignal(circuitboard, COMSIG_MOVABLE_MOVED, PROC_REF(on_circuit_moved)) if(shell_flags & SHELL_FLAG_REQUIRE_ANCHOR) @@ -318,20 +322,21 @@ parent_atom.name = "[initial(parent_atom.name)] ([attached_circuit.display_name])" attached_circuit.set_locked(FALSE) - if(shell_flags & SHELL_FLAG_REQUIRE_ANCHOR) - attached_circuit.on = parent_atom.anchored - if((shell_flags & SHELL_FLAG_CIRCUIT_UNREMOVABLE) || circuitboard.admin_only) circuitboard.moveToNullspace() else if(circuitboard.loc != parent_atom) circuitboard.forceMove(parent_atom) attached_circuit.set_shell(parent_atom) + + // call after set_shell() sets on to true + if(shell_flags & SHELL_FLAG_REQUIRE_ANCHOR) + attached_circuit.set_on(parent_atom.anchored) /** * Removes the circuit from the component. Doesn't do any checks to see for an existing circuit so that should be done beforehand. */ /datum/component/shell/proc/remove_circuit() - attached_circuit.on = TRUE + // remove_current_shell() also turns off the circuit attached_circuit.remove_current_shell() UnregisterSignal(attached_circuit, list( COMSIG_MOVABLE_MOVED, @@ -347,6 +352,7 @@ attached_circuit.remove_component(to_remove) to_remove.moveToNullspace() attached_circuit.set_locked(FALSE) + SEND_SIGNAL(src, COMSIG_SHELL_CIRCUIT_REMOVED) attached_circuit = null /datum/component/shell/proc/on_atom_usb_cable_try_attach(atom/source, obj/item/usb_cable/usb_cable, mob/user) diff --git a/code/datums/components/spawner.dm b/code/datums/components/spawner.dm index 3f660d5fcbd..a9bb9b4432b 100644 --- a/code/datums/components/spawner.dm +++ b/code/datums/components/spawner.dm @@ -11,10 +11,15 @@ var/list/faction /// List of weak references to things we have already created var/list/spawned_things = list() - /// Time until we next spawn + /// How many mobs can we spawn maximum each time we try to spawn? (1 - max) + var/max_spawn_per_attempt + /// Distance from the spawner to spawn mobs + var/spawn_distance + /// Distance from the spawner to exclude mobs from spawning + var/spawn_distance_exclude COOLDOWN_DECLARE(spawn_delay) -/datum/component/spawner/Initialize(spawn_types = list(), spawn_time = 30 SECONDS, max_spawned = 5, faction = list(FACTION_MINING), spawn_text = null) +/datum/component/spawner/Initialize(spawn_types = list(), spawn_time = 30 SECONDS, max_spawned = 5, max_spawn_per_attempt = 2 , faction = list(FACTION_MINING), spawn_text = null, spawn_distance = 1, spawn_distance_exclude = 0) if (!islist(spawn_types)) CRASH("invalid spawn_types to spawn specified for spawner component!") src.spawn_time = spawn_time @@ -22,8 +27,12 @@ src.faction = faction src.spawn_text = spawn_text src.max_spawned = max_spawned + src.max_spawn_per_attempt = max_spawn_per_attempt + src.spawn_distance = spawn_distance + src.spawn_distance_exclude = spawn_distance_exclude RegisterSignal(parent, COMSIG_QDELETING, PROC_REF(stop_spawning)) + RegisterSignal(parent, COMSIG_VENT_WAVE_CONCLUDED, PROC_REF(stop_spawning)) START_PROCESSING((spawn_time < 2 SECONDS ? SSfastprocess : SSprocessing), src) /datum/component/spawner/process() @@ -47,22 +56,41 @@ return var/atom/spawner = parent COOLDOWN_START(src, spawn_delay, spawn_time) - var/chosen_mob_type = pick(spawn_types) - var/atom/created = new chosen_mob_type(spawner.loc) - created.flags_1 |= (spawner.flags_1 & ADMIN_SPAWNED_1) - spawned_things += WEAKREF(created) - if (isliving(created)) - var/mob/living/created_mob = created - created_mob.faction = src.faction - RegisterSignal(created, COMSIG_MOB_STATCHANGE, PROC_REF(mob_stat_changed)) + var/adjusted_spawn_count = 1 + if (max_spawn_per_attempt > 1) + adjusted_spawn_count = rand(1, max_spawn_per_attempt) + for(var/i in 1 to adjusted_spawn_count) + var/atom/created + var/turf/picked_spot + + if(spawn_distance == 1) + created = new chosen_mob_type(spawner.loc) + else if(spawn_distance >= 1 && spawn_distance_exclude >= 1) + picked_spot = pick(turf_peel(spawn_distance, spawn_distance_exclude, spawner.loc, view_based = TRUE)) + if(!picked_spot) + picked_spot = pick(circle_range_turfs(spawner.loc, spawn_distance)) + created = new chosen_mob_type(picked_spot) + else if (spawn_distance >= 1) + picked_spot = pick(circle_range_turfs(spawner.loc, spawn_distance)) + created = new chosen_mob_type(picked_spot) + + created.flags_1 |= (spawner.flags_1 & ADMIN_SPAWNED_1) + spawned_things += WEAKREF(created) + + if (isliving(created)) + var/mob/living/created_mob = created + created_mob.faction = src.faction + RegisterSignal(created, COMSIG_MOB_STATCHANGE, PROC_REF(mob_stat_changed)) + + SEND_SIGNAL(src, COMSIG_SPAWNER_SPAWNED, created) + RegisterSignal(created, COMSIG_QDELETING, PROC_REF(on_deleted)) if (spawn_text) - spawner.visible_message(span_danger("[created] [spawn_text] [spawner].")) + spawner.visible_message(span_danger("A creature [spawn_text] [spawner].")) + - SEND_SIGNAL(src, COMSIG_SPAWNER_SPAWNED, created) - RegisterSignal(created, COMSIG_QDELETING, PROC_REF(on_deleted)) /// Remove weakrefs to atoms which have been killed or deleted without us picking it up somehow /datum/component/spawner/proc/validate_references() diff --git a/code/datums/components/swabbing.dm b/code/datums/components/swabbing.dm index 12d851afe39..34a2283677c 100644 --- a/code/datums/components/swabbing.dm +++ b/code/datums/components/swabbing.dm @@ -106,7 +106,7 @@ This component is used in vat growing to swab for microbiological samples which LAZYINITLIST(swabbed_items) //If it isn't initialized, initialize it. As we need to pass it by reference if(SEND_SIGNAL(target, COMSIG_SWAB_FOR_SAMPLES, swabbed_items) == NONE) //If we found something to swab now we let the swabbed thing handle what it would do, we just sit back and relax now. - to_chat(user, span_warning("You do not manage to find a anything on [target]!")) + to_chat(user, span_warning("You do not manage to find anything on [target]!")) return to_chat(user, span_nicegreen("You manage to collect a microbiological sample from [target]!")) diff --git a/code/datums/components/tackle.dm b/code/datums/components/tackle.dm index d93a6e3d3c5..2a23deec611 100644 --- a/code/datums/components/tackle.dm +++ b/code/datums/components/tackle.dm @@ -234,7 +234,7 @@ target.Knockdown(3 SECONDS) target.adjust_staggered_up_to(STAGGERED_SLOWDOWN_LENGTH * 2, 10 SECONDS) if(ishuman(target) && ishuman(user)) - INVOKE_ASYNC(human_sacker.dna.species, TYPE_PROC_REF(/datum/species, grab), human_sacker, human_target) + INVOKE_ASYNC(human_sacker, TYPE_PROC_REF(/mob/living, grab), human_sacker, human_target) human_sacker.setGrabState(GRAB_PASSIVE) if(50 to INFINITY) // absolutely BODIED @@ -260,7 +260,7 @@ target.Knockdown(3 SECONDS) target.adjust_staggered_up_to(STAGGERED_SLOWDOWN_LENGTH * 3, 10 SECONDS) if(ishuman(target) && ishuman(user)) - INVOKE_ASYNC(human_sacker.dna.species, TYPE_PROC_REF(/datum/species, grab), human_sacker, human_target) + INVOKE_ASYNC(human_sacker, TYPE_PROC_REF(/mob/living, grab), human_sacker, human_target) human_sacker.setGrabState(GRAB_AGGRESSIVE) /** @@ -400,7 +400,7 @@ defense_mod += 2 if(tackle_target.mob_negates_gravity()) defense_mod += 1 - if(tackle_target.is_shove_knockdown_blocked()) // riot armor and such + if(HAS_TRAIT(tackle_target, TRAIT_SHOVE_KNOCKDOWN_BLOCKED)) // riot armor and such defense_mod += 5 var/obj/item/organ/external/tail/lizard/el_tail = tackle_target.get_organ_slot(ORGAN_SLOT_EXTERNAL_TAIL) @@ -451,7 +451,7 @@ attack_mod += 15 human_sacker.adjustStaminaLoss(100) //AHAHAHAHAHAHAHAHA - if(human_sacker.is_shove_knockdown_blocked()) // tackling with riot specialized armor, like riot armor, is effective but tiring + if(HAS_TRAIT(human_sacker, TRAIT_SHOVE_KNOCKDOWN_BLOCKED)) // tackling with riot specialized armor, like riot armor, is effective but tiring attack_mod += 2 human_sacker.adjustStaminaLoss(20) diff --git a/code/datums/components/tactical.dm b/code/datums/components/tactical.dm index e8e54926949..e0f131258e7 100644 --- a/code/datums/components/tactical.dm +++ b/code/datums/components/tactical.dm @@ -1,5 +1,8 @@ +///A simple component that replacess the user's appearance with that of the parent item when equipped. /datum/component/tactical + ///The allowed slot(s) for the effect. var/allowed_slot + ///A cached of where the item is currently equipped. var/current_slot /datum/component/tactical/Initialize(allowed_slot) @@ -11,50 +14,63 @@ /datum/component/tactical/RegisterWithParent() RegisterSignal(parent, COMSIG_ITEM_EQUIPPED, PROC_REF(modify)) RegisterSignal(parent, COMSIG_ITEM_DROPPED, PROC_REF(unmodify)) + RegisterSignal(parent, COMSIG_ATOM_UPDATED_ICON, PROC_REF(tactical_update)) + var/obj/item/item = parent + if(ismob(item.loc)) + var/mob/holder = item.loc + modify(item, holder, holder.get_slot_by_item(item)) /datum/component/tactical/UnregisterFromParent() - UnregisterSignal(parent, list(COMSIG_ITEM_EQUIPPED, COMSIG_ITEM_DROPPED)) + UnregisterSignal(parent, list( + COMSIG_ITEM_EQUIPPED, + COMSIG_ITEM_DROPPED, + COMSIG_ATOM_UPDATED_ICON, + )) unmodify() /datum/component/tactical/Destroy() unmodify() return ..() -/datum/component/tactical/proc/on_z_move(datum/source) - SIGNAL_HANDLER - var/obj/item/master = parent - if(!ismob(master.loc)) - return - var/old_slot = current_slot - unmodify(master, master.loc) - modify(master, master.loc, old_slot) - /datum/component/tactical/proc/modify(obj/item/source, mob/user, slot) SIGNAL_HANDLER if(allowed_slot && !(slot & allowed_slot)) - unmodify() + if(current_slot) + unmodify(source, user) return + if(current_slot) //If the current slot is set, this means the icon was updated or the item changed z-levels. + user.remove_alt_appearance("sneaking_mission[REF(src)]") + else + RegisterSignal(parent, COMSIG_MOVABLE_Z_CHANGED, PROC_REF(tactical_update)) + current_slot = slot var/obj/item/master = parent - var/image/I = image(icon = master.icon, icon_state = master.icon_state, loc = user) - I.copy_overlays(master) - I.override = TRUE - source.add_alt_appearance(/datum/atom_hud/alternate_appearance/basic/everyone, "sneaking_mission", I) - I.layer = ABOVE_MOB_LAYER - RegisterSignal(parent, COMSIG_MOVABLE_Z_CHANGED, PROC_REF(on_z_move)) + var/image/image = image(master, loc = user) + image.copy_overlays(master) + image.override = TRUE + image.layer = ABOVE_MOB_LAYER + image.plane = FLOAT_PLANE + source.add_alt_appearance(/datum/atom_hud/alternate_appearance/basic/everyone, "sneaking_mission[REF(src)]", image) /datum/component/tactical/proc/unmodify(obj/item/source, mob/user) SIGNAL_HANDLER - var/obj/item/master = source || parent + var/obj/item/master = parent if(!user) if(!ismob(master.loc)) return user = master.loc - user.remove_alt_appearance("sneaking_mission") + user.remove_alt_appearance("sneaking_mission[REF(src)]") current_slot = null UnregisterSignal(parent, COMSIG_MOVABLE_Z_CHANGED) + +/datum/component/tactical/proc/tactical_update(datum/source) + SIGNAL_HANDLER + var/obj/item/master = parent + if(!ismob(master.loc)) + return + modify(master, master.loc, current_slot) diff --git a/code/datums/components/tameable.dm b/code/datums/components/tameable.dm index 3da6d616149..67325b489d3 100644 --- a/code/datums/components/tameable.dm +++ b/code/datums/components/tameable.dm @@ -70,18 +70,28 @@ return living_parent.faction.Find(REF(potential_friend)) ///Ran once taming succeeds -/datum/component/tameable/proc/on_tame(datum/source, mob/living/tamer, atom/food, inform_tamer = FALSE) +/datum/component/tameable/proc/on_tame(atom/source, mob/living/tamer, atom/food, inform_tamer = FALSE) SIGNAL_HANDLER after_tame?.Invoke(tamer, food)//Run custom behavior if needed if(isliving(parent) && isliving(tamer)) - var/mob/living/tamed = parent - INVOKE_ASYNC(tamed, TYPE_PROC_REF(/mob/living, befriend), tamer) + INVOKE_ASYNC(source, TYPE_PROC_REF(/mob/living, befriend), tamer) if(inform_tamer) - var/atom/atom_parent = source - atom_parent.balloon_alert(tamer, "tamed") + source.balloon_alert(tamer, "tamed") + if(HAS_TRAIT(tamer, TRAIT_SETTLER)) + INVOKE_ASYNC(src, PROC_REF(rename_pet), source, tamer) if(unique) qdel(src) else current_tame_chance = tame_chance + +/datum/component/tameable/proc/rename_pet(mob/living/animal, mob/living/tamer) + var/chosen_name = sanitize_name(tgui_input_text(tamer, "Choose your pet's name!", "Name pet", animal.name, MAX_NAME_LEN), allow_numbers = TRUE) + if(QDELETED(animal) || chosen_name == animal.name) + return + if(!chosen_name) + to_chat(tamer, span_warning("Please enter a valid name.")) + rename_pet(animal, tamer) + return + animal.fully_replace_character_name(animal.name, chosen_name) diff --git a/code/datums/components/twohanded.dm b/code/datums/components/twohanded.dm index 6d033469cc2..464f1a58a07 100644 --- a/code/datums/components/twohanded.dm +++ b/code/datums/components/twohanded.dm @@ -173,17 +173,25 @@ /datum/component/two_handed/proc/wield(mob/living/carbon/user) if(wielded) return + var/atom/atom_parent = parent + if(HAS_TRAIT(user, TRAIT_NO_TWOHANDING)) + if(require_twohands) + atom_parent.balloon_alert(user, "too weak to wield!") + user.dropItemToGround(parent, force = TRUE) + else + atom_parent.balloon_alert(user, "too weak to wield with both hands!") + return if(user.get_inactive_held_item()) if(require_twohands) - to_chat(user, span_notice("[parent] is too cumbersome to carry in one hand!")) - user.dropItemToGround(parent, force=TRUE) + atom_parent.balloon_alert(user, "can't carry in one hand!") + user.dropItemToGround(parent, force = TRUE) else - to_chat(user, span_warning("You need your other hand to be empty!")) + atom_parent.balloon_alert(user, "holding something in other hand!") return if(user.usable_hands < 2) if(require_twohands) user.dropItemToGround(parent, force=TRUE) - to_chat(user, span_warning("You don't have enough intact hands.")) + atom_parent.balloon_alert(user, "not enough hands!") return // wield update status diff --git a/code/datums/components/uplink.dm b/code/datums/components/uplink.dm index adb10f128ae..e4e6e611ebc 100644 --- a/code/datums/components/uplink.dm +++ b/code/datums/components/uplink.dm @@ -113,15 +113,6 @@ new /obj/effect/decal/cleanable/ash(get_turf(uplink_item)) qdel(uplink_item) -/// Adds telecrystals to the uplink. It is bad practice to use this outside of the component itself. -/datum/component/uplink/proc/add_telecrystals(telecrystals_added) - set_telecrystals(uplink_handler.telecrystals + telecrystals_added) - -/// Sets the telecrystals of the uplink. It is bad practice to use this outside of the component itself. -/datum/component/uplink/proc/set_telecrystals(new_telecrystal_amount) - uplink_handler.telecrystals = new_telecrystal_amount - uplink_handler.on_update() - /datum/component/uplink/InheritComponent(datum/component/uplink/uplink) lockable |= uplink.lockable active |= uplink.active @@ -135,7 +126,7 @@ if(!silent) to_chat(user, span_notice("You slot [telecrystals] into [parent] and charge its internal uplink.")) var/amt = telecrystals.amount - uplink_handler.telecrystals += amt + uplink_handler.add_telecrystals(amt) telecrystals.use(amt) log_uplink("[key_name(user)] loaded [amt] telecrystals into [parent]'s uplink") @@ -384,17 +375,18 @@ // PDA signal responses -/datum/component/uplink/proc/new_ringtone(datum/source, mob/living/user, new_ring_text) +/datum/component/uplink/proc/new_ringtone(datum/source, atom/source, new_ring_text) SIGNAL_HANDLER if(trim(lowertext(new_ring_text)) != trim(lowertext(unlock_code))) if(trim(lowertext(new_ring_text)) == trim(lowertext(failsafe_code))) - failsafe(user) + failsafe(source) return COMPONENT_STOP_RINGTONE_CHANGE return locked = FALSE - interact(null, user) - to_chat(user, span_hear("The computer softly beeps.")) + if(ismob(source)) + interact(null, source) + to_chat(source, span_hear("The computer softly beeps.")) return COMPONENT_STOP_RINGTONE_CHANGE /datum/component/uplink/proc/check_detonate() @@ -500,14 +492,22 @@ locked = FALSE replacement_uplink.balloon_alert_to_viewers("beep", vision_distance = COMBAT_MESSAGE_RANGE) -/datum/component/uplink/proc/failsafe(mob/living/carbon/user) +/datum/component/uplink/proc/failsafe(atom/source) if(!parent) return var/turf/T = get_turf(parent) if(!T) return - message_admins("[ADMIN_LOOKUPFLW(user)] has triggered an uplink failsafe explosion at [AREACOORD(T)] The owner of the uplink was [ADMIN_LOOKUPFLW(owner)].") - user.log_message("triggered an uplink failsafe explosion. Uplink owner: [key_name(owner)].", LOG_ATTACK) + var/user_deets = "an uplink failsafe explosion has been triggered" + if(ismob(source)) + user_deets = "[ADMIN_LOOKUPFLW(source)] has triggered an uplink failsafe explosion" + source.log_message("triggered an uplink failsafe explosion. Uplink owner: [key_name(owner)].", LOG_ATTACK) + else if(istype(source, /obj/item/circuit_component)) + var/obj/item/circuit_component/circuit = source + user_deets = "[circuit.parent.get_creator_admin()] has triggered an uplink failsafe explosion" + else + source?.log_message("somehow triggered an uplink failsafe explosion. Uplink owner: [key_name(owner)].", LOG_ATTACK) + message_admins("[user_deets] at [AREACOORD(T)] The owner of the uplink was [ADMIN_LOOKUPFLW(owner)].") explosion(parent, devastation_range = 1, heavy_impact_range = 2, light_impact_range = 3) qdel(parent) //Alternatively could brick the uplink. diff --git a/code/datums/components/wall_mounted.dm b/code/datums/components/wall_mounted.dm index 62af35dc974..a10fb246833 100644 --- a/code/datums/components/wall_mounted.dm +++ b/code/datums/components/wall_mounted.dm @@ -16,12 +16,14 @@ on_drop = on_drop_callback /datum/component/wall_mounted/RegisterWithParent() + ADD_TRAIT(parent, TRAIT_WALLMOUNTED, REF(src)) RegisterSignal(hanging_wall_turf, COMSIG_ATOM_EXAMINE, PROC_REF(on_examine)) RegisterSignal(hanging_wall_turf, COMSIG_TURF_CHANGE, PROC_REF(on_turf_changing)) RegisterSignal(parent, COMSIG_MOVABLE_MOVED, PROC_REF(on_move)) RegisterSignal(parent, COMSIG_QDELETING, PROC_REF(on_linked_destroyed)) /datum/component/wall_mounted/UnregisterFromParent() + REMOVE_TRAIT(parent, TRAIT_WALLMOUNTED, REF(src)) UnregisterSignal(hanging_wall_turf, list(COMSIG_ATOM_EXAMINE, COMSIG_TURF_CHANGE)) UnregisterSignal(parent, list(COMSIG_QDELETING, COMSIG_MOVABLE_MOVED)) hanging_wall_turf = null diff --git a/code/datums/datum.dm b/code/datums/datum.dm index 07fad7092a3..e98f0941d64 100644 --- a/code/datums/datum.dm +++ b/code/datums/datum.dm @@ -60,8 +60,12 @@ var/list/filter_data #ifdef REFERENCE_TRACKING - var/running_find_references + /// When was this datum last touched by a reftracker? + /// If this value doesn't match with the start of the search + /// We know this datum has never been seen before, and we should check it var/last_find_references = 0 + /// How many references we're trying to find when searching + var/references_to_clear = 0 #ifdef REFERENCE_TRACKING_DEBUG ///Stores info about where refs are found, used for sanity checks and testing var/list/found_refs diff --git a/code/datums/diseases/wizarditis.dm b/code/datums/diseases/wizarditis.dm index c497c0be039..fe0502387f9 100644 --- a/code/datums/diseases/wizarditis.dm +++ b/code/datums/diseases/wizarditis.dm @@ -161,8 +161,10 @@ random_spells += sneeze_spacetime var/datum/action/cooldown/spell/timestop/sneeze_timestop = new(src) - sneeze_timestop.timestop_range = 1 // heh + sneeze_timestop.timestop_range = 0 // heh sneeze_timestop.timestop_duration = 5 SECONDS + sneeze_timestop.owner_is_immune_to_all_timestop = FALSE + sneeze_timestop.owner_is_immune_to_self_timestop = FALSE random_spells += sneeze_timestop var/datum/action/cooldown/spell/aoe/repulse/sneeze_repulse = new(src) diff --git a/code/datums/elements/ELEMENT_TEMPLATE.md b/code/datums/elements/ELEMENT_TEMPLATE.md index 8dedfbaef43..4bc1f72f2dc 100644 --- a/code/datums/elements/ELEMENT_TEMPLATE.md +++ b/code/datums/elements/ELEMENT_TEMPLATE.md @@ -5,8 +5,8 @@ See _element.dm for detailed explanations ```dm /datum/element/myelement - element_flags = ELEMENT_BESPOKE | ELEMENT_COMPLEX_DETACH | ELEMENT_DETACH_ON_HOST_DESTROY | ELEMENT_NOTAREALFLAG // code/__DEFINES/dcs/flags.dm - //argument_hash_start_idx = 2 // Use with ELEMENT_BESPOKE + element_flags = ELEMENT_BESPOKE | ELEMENT_COMPLEX_DETACH | ELEMENT_DETACH_ON_HOST_DESTROY | ELEMENT_NOTAREALFLAG // code/__DEFINES/dcs/flags.dm + //argument_hash_start_idx = 2 // Use with ELEMENT_BESPOKE var/list/myvar = list() /datum/element/myelement/Attach(datum/target) diff --git a/code/datums/elements/_element.dm b/code/datums/elements/_element.dm index ae4cb55330d..b2e021ad2be 100644 --- a/code/datums/elements/_element.dm +++ b/code/datums/elements/_element.dm @@ -28,7 +28,7 @@ if(element_flags & ELEMENT_DETACH_ON_HOST_DESTROY) RegisterSignal(target, COMSIG_QDELETING, PROC_REF(OnTargetDelete), override = TRUE) -/datum/element/proc/OnTargetDelete(datum/source, force) +/datum/element/proc/OnTargetDelete(datum/source) SIGNAL_HANDLER Detach(source) @@ -51,7 +51,10 @@ /// Finds the singleton for the element type given and attaches it to src /datum/proc/_AddElement(list/arguments) if(QDELING(src)) - CRASH("We just tried to add an element to a qdeleted datum, something is fucked") + var/datum/element/element_type = arguments[1] + stack_trace("We just tried to add the element [element_type] to a qdeleted datum, something is fucked") + return + var/datum/element/ele = SSdcs.GetElement(arguments) if(!ele) // We couldn't fetch the element, likely because it was not an element. return // the crash message has already been sent @@ -72,3 +75,29 @@ ele.Detach(arglist(arguments)) else ele.Detach(src) + +/** + * Used to manage (typically non_bespoke) elements with multiple sources through traits + * so we don't have to make them a components again. + * The element will be later removed once all trait sources are gone, there's no need of a + * "RemoveElementTrait" counterpart. + */ +/datum/proc/AddElementTrait(trait, source, datum/element/eletype, ...) + if(!ispath(eletype, /datum/element)) + CRASH("AddElementTrait called, but [eletype] is not of a /datum/element path") + ADD_TRAIT(src, trait, source) + if(HAS_TRAIT_NOT_FROM(src, trait, source)) + return + var/list/arguments = list(eletype) + /// 3 is the length of fixed args of this proc, any further one is passed down to AddElement. + if(length(args) > 3) + arguments += args.Copy(4) + /// We actually pass down a copy of the arguments since it's manipulated by the end of the proc. + _AddElement(arguments.Copy()) + var/datum/ele = SSdcs.GetElement(arguments) + ele.RegisterSignal(src, SIGNAL_REMOVETRAIT(trait), TYPE_PROC_REF(/datum/element, _detach_on_trait_removed)) + +/datum/element/proc/_detach_on_trait_removed(datum/source, trait) + SIGNAL_HANDLER + Detach(source) + UnregisterSignal(source, SIGNAL_REMOVETRAIT(trait)) diff --git a/code/datums/elements/connect_loc.dm b/code/datums/elements/connect_loc.dm index 32b3b50b783..2e34d1d37b9 100644 --- a/code/datums/elements/connect_loc.dm +++ b/code/datums/elements/connect_loc.dm @@ -24,7 +24,7 @@ /datum/element/connect_loc/proc/update_signals(atom/movable/listener) var/atom/listener_loc = listener.loc - if(isnull(listener_loc)) + if(QDELETED(listener) || QDELETED(listener_loc)) return for (var/signal in connections) diff --git a/code/datums/elements/disarm_attack.dm b/code/datums/elements/disarm_attack.dm new file mode 100644 index 00000000000..a788cd9f35e --- /dev/null +++ b/code/datums/elements/disarm_attack.dm @@ -0,0 +1,35 @@ +///An element that allows items to be used to shove people around just like right-clicking would. +/datum/element/disarm_attack + +/datum/element/disarm_attack/Attach(datum/target) + . = ..() + if(!isitem(target)) + return ELEMENT_INCOMPATIBLE + + RegisterSignal(target, COMSIG_ITEM_ATTACK_SECONDARY, PROC_REF(secondary_attack)) + RegisterSignal(target, COMSIG_ATOM_EXAMINE, PROC_REF(examine)) + +/datum/element/disarm_attack/Detach(datum/source) + UnregisterSignal(source, list(COMSIG_ATOM_EXAMINE, COMSIG_ITEM_ATTACK_SECONDARY)) + return ..() + +/datum/element/disarm_attack/proc/secondary_attack(obj/item/source, mob/living/victim, mob/living/user, params) + SIGNAL_HANDLER + if(!user.can_disarm(victim) || !can_disarm_attack(source, victim, user)) + return COMPONENT_SECONDARY_CANCEL_ATTACK_CHAIN + if(victim.check_block(source, 0, "the [source.name]", MELEE_ATTACK, 0)) + return COMPONENT_SECONDARY_CANCEL_ATTACK_CHAIN + user.disarm(victim, source) + user.changeNext_move(source.secondary_attack_speed || source.attack_speed) + return COMPONENT_SECONDARY_CANCEL_ATTACK_CHAIN + +///check if the item conditions for the disarm action are met. +/datum/element/disarm_attack/proc/can_disarm_attack(obj/item/source, mob/living/victim, mob/living/user, message = TRUE) + if(SEND_SIGNAL(source, COMSIG_ITEM_CAN_DISARM_ATTACK, victim, user, message) & COMPONENT_BLOCK_ITEM_DISARM_ATTACK) + return FALSE + return TRUE + +/datum/element/disarm_attack/proc/examine(obj/item/source, mob/user, list/examine_list) + SIGNAL_HANDLER + if(can_disarm_attack(source, user, user, FALSE)) + examine_list += span_notice("You can use it to shove people with right-click.") diff --git a/code/datums/elements/immerse.dm b/code/datums/elements/immerse.dm index d4171588c31..89148fad7e2 100644 --- a/code/datums/elements/immerse.dm +++ b/code/datums/elements/immerse.dm @@ -32,7 +32,7 @@ if(!isturf(target) || !icon || !icon_state || !mask_icon) return ELEMENT_INCOMPATIBLE - if(!movables_to_ignore) + if(isnull(movables_to_ignore)) movables_to_ignore = typecacheof(list( /obj/effect, /mob/dead, @@ -96,8 +96,8 @@ /datum/element/immerse/proc/stop_immersion(turf/source) SIGNAL_HANDLER UnregisterSignal(source, list(COMSIG_ATOM_ABSTRACT_ENTERED, COMSIG_ATOM_AFTER_SUCCESSFUL_INITIALIZED_ON, COMSIG_ATOM_ABSTRACT_EXITED)) - for(var/datum/weakref/movable as anything in attached_turfs_and_movables[source]) - remove_from_element(source, movable.resolve()) + for(var/atom/movable/movable as anything in attached_turfs_and_movables[source]) + remove_from_element(source, movable) attached_turfs_and_movables -= source /** @@ -122,7 +122,7 @@ try_immerse(movable, buckled) RegisterSignal(movable, COMSIG_QDELETING, PROC_REF(on_movable_qdel)) - LAZYADD(attached_turfs_and_movables[source], WEAKREF(movable)) + LAZYADD(attached_turfs_and_movables[source], movable) ADD_TRAIT(movable, TRAIT_IMMERSED, ELEMENT_TRAIT(src)) /datum/element/immerse/proc/on_movable_qdel(atom/movable/source) @@ -170,7 +170,7 @@ movable.vis_contents |= vis_overlay - LAZYSET(immersed_movables, WEAKREF(movable), vis_overlay) + LAZYSET(immersed_movables, movable, vis_overlay) ///Initializes and caches a new visual overlay given parameters such as width, height and whether it should appear fully underwater. /datum/element/immerse/proc/generate_vis_overlay(width, height, is_below_water) @@ -212,16 +212,14 @@ ///This proc removes the vis_overlay, the keep together trait and some signals from the movable. /datum/element/immerse/proc/remove_immerse_overlay(atom/movable/movable) - var/atom/movable/immerse_overlay/vis_overlay = LAZYACCESS(immersed_movables, WEAKREF(movable)) - if(!vis_overlay) - return + var/atom/movable/immerse_overlay/vis_overlay = LAZYACCESS(immersed_movables, movable) + LAZYREMOVE(immersed_movables, movable) + REMOVE_KEEP_TOGETHER(movable, ELEMENT_TRAIT(src)) movable.vis_contents -= vis_overlay - LAZYREMOVE(immersed_movables, WEAKREF(movable)) if(HAS_TRAIT(movable, TRAIT_UNIQUE_IMMERSE)) - UnregisterSignal(movable, list(COMSIG_ATOM_SPIN_ANIMATION, COMSIG_LIVING_POST_UPDATE_TRANSFORM)) - qdel(vis_overlay) - REMOVE_KEEP_TOGETHER(movable, ELEMENT_TRAIT(src)) - + UnregisterSignal(movable, list(COMSIG_ATOM_SPIN_ANIMATION, COMSIG_LIVING_POST_UPDATE_TRANSFORM, COMSIG_QDELETING)) + if(!QDELETED(vis_overlay)) + qdel(vis_overlay) /** * Called by init_or_entered() and on_set_buckled(). * This applies the overlay if neither the movable or whatever is buckled to (exclusive to living mobs) are flying @@ -298,8 +296,8 @@ if(!(exited.loc in attached_turfs_and_movables)) remove_from_element(source, exited) else - LAZYREMOVE(attached_turfs_and_movables[source], WEAKREF(exited)) - LAZYADD(attached_turfs_and_movables[exited.loc], WEAKREF(exited)) + LAZYREMOVE(attached_turfs_and_movables[source], exited) + LAZYADD(attached_turfs_and_movables[exited.loc], exited) ///Remove any signal, overlay, trait given to the movable and reference to it within the element. /datum/element/immerse/proc/remove_from_element(turf/source, atom/movable/movable) @@ -309,9 +307,9 @@ buckled = living_mob.buckled try_unimmerse(movable, buckled) + LAZYREMOVE(attached_turfs_and_movables[source], movable) UnregisterSignal(movable, list(COMSIG_LIVING_SET_BUCKLED, COMSIG_QDELETING)) REMOVE_TRAIT(movable, TRAIT_IMMERSED, ELEMENT_TRAIT(src)) - LAZYREMOVE(attached_turfs_and_movables[source], WEAKREF(movable)) /// A band-aid to keep the (unique) visual overlay from scaling and rotating along with its owner. I'm sorry. /datum/element/immerse/proc/on_update_transform(mob/living/source, resize, new_lying_angle, is_opposite_angle) @@ -320,7 +318,7 @@ new_transform.Scale(1/source.current_size) new_transform.Turn(-new_lying_angle) - var/atom/movable/immerse_overlay/vis_overlay = immersed_movables[WEAKREF(source)] + var/atom/movable/immerse_overlay/vis_overlay = immersed_movables[source] if(is_opposite_angle) vis_overlay.transform = new_transform vis_overlay.adjust_living_overlay_offset(source) @@ -361,7 +359,7 @@ ///Spin the overlay in the opposite direction so it doesn't look like it's spinning at all. /datum/element/immerse/proc/on_spin_animation(atom/source, speed, loops, segments, segment) SIGNAL_HANDLER - var/atom/movable/immerse_overlay/vis_overlay = immersed_movables[WEAKREF(source)] + var/atom/movable/immerse_overlay/vis_overlay = immersed_movables[source] vis_overlay.do_spin_animation(speed, loops, segments, -segment) ///We need to make sure to remove hard refs from the element when deleted. diff --git a/code/datums/elements/light_eaten.dm b/code/datums/elements/light_eaten.dm index 39550a99124..e3bcc079318 100644 --- a/code/datums/elements/light_eaten.dm +++ b/code/datums/elements/light_eaten.dm @@ -15,9 +15,9 @@ RegisterSignal(atom_target, COMSIG_ATOM_SET_LIGHT_ON, PROC_REF(block_light_on)) RegisterSignal(atom_target, COMSIG_ATOM_EXAMINE, PROC_REF(on_examine)) - /// Because the lighting system does not like movable lights getting set_light() called. + /// Because the lighting system does not like overlay lights getting set_light() called. switch(atom_target.light_system) - if(STATIC_LIGHT) + if(COMPLEX_LIGHT) target.set_light(0, 0, null, l_on = FALSE) else target.set_light_power(0) diff --git a/code/datums/elements/permanent_fire_overlay.dm b/code/datums/elements/permanent_fire_overlay.dm new file mode 100644 index 00000000000..514d0f121a4 --- /dev/null +++ b/code/datums/elements/permanent_fire_overlay.dm @@ -0,0 +1,24 @@ +/// When applied to a mob, they will always have a fire overlay regardless of if they are *actually* on fire. +/datum/element/perma_fire_overlay + +/datum/element/perma_fire_overlay/Attach(atom/target) + . = ..() + if(!isliving(target)) + return ELEMENT_INCOMPATIBLE + + RegisterSignal(target, COMSIG_ATOM_UPDATE_OVERLAYS, PROC_REF(add_fire_overlay)) + target.update_appearance(UPDATE_OVERLAYS) + +/datum/element/perma_fire_overlay/Detach(atom/target) + . = ..() + UnregisterSignal(target, COMSIG_ATOM_UPDATE_OVERLAYS) + target.update_appearance(UPDATE_OVERLAYS) + +/datum/element/perma_fire_overlay/proc/add_fire_overlay(mob/living/source, list/overlays) + SIGNAL_HANDLER + + var/mutable_appearance/created_overlay = source.get_fire_overlay(stacks = MAX_FIRE_STACKS, on_fire = TRUE) + if(isnull(created_overlay)) + return + + overlays |= created_overlay diff --git a/code/datums/elements/squish_sound.dm b/code/datums/elements/squish_sound.dm new file mode 100644 index 00000000000..a245bb48a73 --- /dev/null +++ b/code/datums/elements/squish_sound.dm @@ -0,0 +1,27 @@ +///Plays a sound when walked into, lower sounding if the person walking into it has light stepping. +/datum/element/squish_sound + element_flags = ELEMENT_BESPOKE + argument_hash_start_idx = 2 + ///The sound to play when something holding this element is entered. + var/sound_to_play + +/datum/element/squish_sound/Attach( + datum/target, + sound = 'sound/effects/footstep/gib_step.ogg', +) + . = ..() + sound_to_play = sound + RegisterSignal(target, COMSIG_MOVABLE_CROSS, PROC_REF(on_cross)) + +///Plays the set sound upon being entered, as long as the person walking into it can actually walk. +/datum/element/squish_sound/proc/on_cross(atom/movable/source, atom/movable/crossed) + SIGNAL_HANDLER + + if(!isliving(crossed) || (crossed.movement_type & MOVETYPES_NOT_TOUCHING_GROUND) || crossed.throwing) + return + playsound( + source = source, + soundin = sound_to_play, + vol = HAS_TRAIT(crossed, TRAIT_LIGHT_STEP) ? 20 : 50, + vary = TRUE, + ) diff --git a/code/datums/elements/uplink_reimburse.dm b/code/datums/elements/uplink_reimburse.dm index 3ff182ec231..73a2032fee1 100644 --- a/code/datums/elements/uplink_reimburse.dm +++ b/code/datums/elements/uplink_reimburse.dm @@ -22,7 +22,7 @@ RegisterSignal(target, COMSIG_ATOM_EXAMINE, PROC_REF(on_examine)) RegisterSignal(target, COMSIG_ITEM_ATTEMPT_TC_REIMBURSE, PROC_REF(reimburse)) RegisterSignal(target,COMSIG_TRAITOR_ITEM_USED(target.type), PROC_REF(used)) - + /datum/element/uplink_reimburse/Detach(datum/target) UnregisterSignal(target, list(COMSIG_ATOM_EXAMINE, COMSIG_TRAITOR_ITEM_USED(target.type), COMSIG_ITEM_ATTEMPT_TC_REIMBURSE)) @@ -47,10 +47,11 @@ to_chat(user, span_notice("You tap [uplink_comp.uplink_handler] with [refund_item], and a moment after [refund_item] disappears in a puff of red smoke!")) do_sparks(2, source = uplink_comp.uplink_handler) - uplink_comp.add_telecrystals(refundable_tc) + uplink_comp.uplink_handler.add_telecrystals(refundable_tc) qdel(refund_item) + /// If the item is used, it needs to no longer be refundable /datum/element/uplink_reimburse/proc/used(datum/target) SIGNAL_HANDLER - + Detach(target) diff --git a/code/datums/elements/waddling.dm b/code/datums/elements/waddling.dm index c51a1759768..e63d0329bb6 100644 --- a/code/datums/elements/waddling.dm +++ b/code/datums/elements/waddling.dm @@ -4,6 +4,8 @@ . = ..() if(!ismovable(target)) return ELEMENT_INCOMPATIBLE + if(!HAS_TRAIT(target, TRAIT_WADDLING)) + stack_trace("[type] added to [target] without adding TRAIT_WADDLING first. Please use AddElementTrait instead.") RegisterSignal(target, COMSIG_MOVABLE_MOVED, PROC_REF(Waddle)) /datum/element/waddling/Detach(datum/source) diff --git a/code/datums/elements/window_smash.dm b/code/datums/elements/window_smash.dm new file mode 100644 index 00000000000..fbe2674b86c --- /dev/null +++ b/code/datums/elements/window_smash.dm @@ -0,0 +1,30 @@ +/** + * # Window Smashing + * An element you put on mobs to let them smash through walls on movement + * For example, throwing someone through a glass window + */ +/datum/element/window_smashing + +/datum/element/window_smashing/Attach(datum/target, duration = 1.5 SECONDS) + . = ..() + if(!isliving(target)) + return ELEMENT_INCOMPATIBLE + var/mob/living/living_target = target + RegisterSignal(living_target, COMSIG_MOVABLE_MOVED, PROC_REF(flying_window_smash)) + passwindow_on(target, TRAM_PASSENGER_TRAIT) + addtimer(CALLBACK(src, PROC_REF(Detach), living_target), duration) + +/// Smash any windows that the mob is flying through +/datum/element/window_smashing/proc/flying_window_smash(atom/movable/flying_mob, atom/old_loc, direction) + SIGNAL_HANDLER + var/turf/target_turf = get_turf(flying_mob) + for(var/obj/structure/tram/tram_wall in target_turf) + tram_wall.smash_and_injure(flying_mob, old_loc, direction) + + for(var/obj/structure/window/window in target_turf) + window.smash_and_injure(flying_mob, old_loc, direction) + +/datum/element/window_smashing/Detach(datum/source) + UnregisterSignal(source, COMSIG_MOVABLE_MOVED) + passwindow_off(source, TRAM_PASSENGER_TRAIT) + return ..() diff --git a/code/datums/greyscale/config_types/greyscale_configs/greyscale_clothes.dm b/code/datums/greyscale/config_types/greyscale_configs/greyscale_clothes.dm index a277ec50544..9860bbff9a7 100644 --- a/code/datums/greyscale/config_types/greyscale_configs/greyscale_clothes.dm +++ b/code/datums/greyscale/config_types/greyscale_configs/greyscale_clothes.dm @@ -150,6 +150,43 @@ NOVA EDIT END */ icon_file = 'icons/mob/inhands/clothing/masks_righthand.dmi' json_config = 'code/datums/greyscale/json_configs/bandanaskull_inhands.json' +/datum/greyscale_config/facescarf + name = "Facescarf" + icon_file = 'icons/obj/clothing/masks.dmi' + json_config = 'code/datums/greyscale/json_configs/facescarf.json' + +/datum/greyscale_config/facescarf/worn + name = "Facescarf (Worn)" + icon_file = 'icons/mob/clothing/mask.dmi' + +/datum/greyscale_config/facescarf/inhands_left + name = "Facescarf (Held, Left)" + icon_file = 'icons/mob/inhands/clothing/masks_lefthand.dmi' + json_config = 'code/datums/greyscale/json_configs/facescarf_inhands.json' + +/datum/greyscale_config/facescarf/inhands_right + name = "Facescarf (Held, Right)" + icon_file = 'icons/mob/inhands/clothing/masks_righthand.dmi' + json_config = 'code/datums/greyscale/json_configs/facescarf_inhands.json' + +/datum/greyscale_config/kitsune + name = "Kitsune mask" + icon_file = 'icons/obj/clothing/masks.dmi' + json_config = 'code/datums/greyscale/json_configs/kitsune.json' + +/datum/greyscale_config/kitsune/worn + name = "Kitsune mask (Worn)" + icon_file = 'icons/mob/clothing/mask.dmi' + +/datum/greyscale_config/rebellion_mask + name = "Rebellion mask" + icon_file = 'icons/obj/clothing/masks.dmi' + json_config = 'code/datums/greyscale/json_configs/rebellion_mask.json' + +/datum/greyscale_config/rebellion_mask/worn + name = "Rebellion mask (Worn)" + icon_file = 'icons/mob/clothing/mask.dmi' + // // NECK // diff --git a/code/datums/greyscale/json_configs/facescarf.json b/code/datums/greyscale/json_configs/facescarf.json new file mode 100644 index 00000000000..eadb07dd927 --- /dev/null +++ b/code/datums/greyscale/json_configs/facescarf.json @@ -0,0 +1,18 @@ +{ + "facescarf": [ + { + "type": "icon_state", + "icon_state": "facescarf", + "blend_mode": "overlay", + "color_ids": [ 1 ] + } + ], + "facescarf_up": [ + { + "type": "icon_state", + "icon_state": "facescarf_up", + "blend_mode": "overlay", + "color_ids": [ 1 ] + } + ] +} diff --git a/code/datums/greyscale/json_configs/facescarf_inhands.json b/code/datums/greyscale/json_configs/facescarf_inhands.json new file mode 100644 index 00000000000..eee4225a050 --- /dev/null +++ b/code/datums/greyscale/json_configs/facescarf_inhands.json @@ -0,0 +1,10 @@ +{ + "greyscale_facescarf": [ + { + "type": "icon_state", + "icon_state": "greyscale_bandana", + "blend_mode": "overlay", + "color_ids": [ 1 ] + } + ] +} diff --git a/code/datums/greyscale/json_configs/kitsune.json b/code/datums/greyscale/json_configs/kitsune.json new file mode 100644 index 00000000000..bee64183213 --- /dev/null +++ b/code/datums/greyscale/json_configs/kitsune.json @@ -0,0 +1,16 @@ +{ + "kitsune": [ + { + "type": "icon_state", + "icon_state": "kitsune_base", + "blend_mode": "overlay", + "color_ids": [ 1 ] + }, + { + "type": "icon_state", + "icon_state": "kitsune_stripe", + "blend_mode": "overlay", + "color_ids": [ 2 ] + } + ] +} diff --git a/code/datums/greyscale/json_configs/rebellion_mask.json b/code/datums/greyscale/json_configs/rebellion_mask.json new file mode 100644 index 00000000000..1c421b00b79 --- /dev/null +++ b/code/datums/greyscale/json_configs/rebellion_mask.json @@ -0,0 +1,10 @@ +{ + "rebellion_mask": [ + { + "type": "icon_state", + "icon_state": "rebellion_mask", + "blend_mode": "overlay", + "color_ids": [ 1 ] + } + ] +} diff --git a/code/datums/helper_datums/teleport.dm b/code/datums/helper_datums/teleport.dm index 6ea1a8121f0..b979c9cda0f 100644 --- a/code/datums/helper_datums/teleport.dm +++ b/code/datums/helper_datums/teleport.dm @@ -65,10 +65,14 @@ return FALSE if(!forced) - if(!check_teleport_valid(teleatom, destination, channel)) - teleatom.balloon_alert(teleatom, "something holds you back!") + if(!check_teleport_valid(teleatom, destturf, channel, original_destination = destination)) + if(ismob(teleatom)) + teleatom.balloon_alert(teleatom, "something holds you back!") return FALSE + SEND_SIGNAL(teleatom, COMSIG_MOVABLE_TELEPORTED, destination, channel) + SEND_SIGNAL(destturf, COMSIG_ATOM_INTERCEPT_TELEPORTED, channel, curturf, destturf) + if(isobserver(teleatom)) teleatom.abstract_move(destturf) return TRUE @@ -84,7 +88,7 @@ teleatom.log_message("teleported from [loc_name(curturf)] to [loc_name(destturf)].", LOG_GAME, log_globally = FALSE) M.cancel_camera() - SEND_SIGNAL(teleatom, COMSIG_MOVABLE_POST_TELEPORT) + SEND_SIGNAL(teleatom, COMSIG_MOVABLE_POST_TELEPORT, destination, channel) return TRUE @@ -184,7 +188,7 @@ return pick(turfs) /// Validates that the teleport being attempted is valid or not -/proc/check_teleport_valid(atom/teleported_atom, atom/destination, channel) +/proc/check_teleport_valid(atom/teleported_atom, atom/destination, channel, atom/original_destination = null) var/area/origin_area = get_area(teleported_atom) var/turf/origin_turf = get_turf(teleported_atom) @@ -194,6 +198,11 @@ if(HAS_TRAIT(teleported_atom, TRAIT_NO_TELEPORT)) return FALSE + // prevent unprecise teleports from landing you outside of the destination's reserved area + if(is_reserved_level(destination_turf.z) && istype(original_destination) \ + && SSmapping.get_reservation_from_turf(destination_turf) != SSmapping.get_reservation_from_turf(get_turf(original_destination))) + return FALSE + if((origin_area.area_flags & NOTELEPORT) || (destination_area.area_flags & NOTELEPORT)) return FALSE @@ -203,7 +212,4 @@ if(SEND_SIGNAL(destination_turf, COMSIG_ATOM_INTERCEPT_TELEPORTING, channel, origin_turf, destination_turf) & COMPONENT_BLOCK_TELEPORT) return FALSE - SEND_SIGNAL(teleported_atom, COMSIG_MOVABLE_TELEPORTED, destination, channel) - SEND_SIGNAL(destination_turf, COMSIG_ATOM_INTERCEPT_TELEPORTED, channel, origin_turf, destination_turf) - return TRUE diff --git a/code/datums/id_trim/jobs.dm b/code/datums/id_trim/jobs.dm index 72a23adf768..ea46cc91319 100644 --- a/code/datums/id_trim/jobs.dm +++ b/code/datums/id_trim/jobs.dm @@ -203,6 +203,28 @@ ) job = /datum/job/botanist +/datum/id_trim/job/bridge_assistant + assignment = "Bridge Assistant" + trim_state = "trim_assistant" + department_color = COLOR_COMMAND_BLUE + subdepartment_color = COLOR_COMMAND_BLUE + sechud_icon_state = SECHUD_BRIDGE_ASSISTANT + minimal_access = list( + ACCESS_COMMAND, + ACCESS_EVA, + ACCESS_GATEWAY, + ACCESS_MAINT_TUNNELS, + ACCESS_RC_ANNOUNCE, + ACCESS_TELEPORTER, + ACCESS_WEAPONS, + ) + extra_access = list() + template_access = list( + ACCESS_CAPTAIN, + ACCESS_CHANGE_IDS, + ) + job = /datum/job/bridge_assistant + /datum/id_trim/job/captain assignment = "Captain" intern_alt_name = "Captain-in-Training" diff --git a/code/datums/keybinding/mob.dm b/code/datums/keybinding/mob.dm index def4ec36fb2..4963e87266c 100644 --- a/code/datums/keybinding/mob.dm +++ b/code/datums/keybinding/mob.dm @@ -80,6 +80,8 @@ switch(keybind_signal) if(COMSIG_KB_MOB_TARGETCYCLEHEAD_DOWN) user.body_toggle_head() + if(COMSIG_KB_MOB_TARGETHEAD_DOWN) + user.body_head() if(COMSIG_KB_MOB_TARGETEYES_DOWN) user.body_eyes() if(COMSIG_KB_MOB_TARGETMOUTH_DOWN) @@ -108,6 +110,13 @@ description = "Pressing this key targets the head, and continued presses will cycle to the eyes and mouth. This will impact where you hit people, and can be used for surgery." keybind_signal = COMSIG_KB_MOB_TARGETCYCLEHEAD_DOWN +/datum/keybinding/mob/target/head + hotkey_keys = list("Unbound") + name = "target_head" + full_name = "Target: Head" + description = "Pressing this key targets the head. This will impact where you hit people, and can be used for surgery." + keybind_signal = COMSIG_KB_MOB_TARGETHEAD_DOWN + /datum/keybinding/mob/target/eyes hotkey_keys = list("Numpad7") name = "target_eyes" diff --git a/code/datums/mapgen/CaveGenerator.dm b/code/datums/mapgen/CaveGenerator.dm index 123b66ea13c..001d22293d6 100644 --- a/code/datums/mapgen/CaveGenerator.dm +++ b/code/datums/mapgen/CaveGenerator.dm @@ -35,7 +35,7 @@ ///Base chance of spawning flora var/flora_spawn_chance = 2 ///Base chance of spawning features - var/feature_spawn_chance = 0.15 + var/feature_spawn_chance = 0.25 ///Unique ID for this spawner var/string_gen @@ -73,7 +73,10 @@ ) flora_spawn_list = expand_weights(weighted_flora_spawn_list) if(!weighted_feature_spawn_list) - weighted_feature_spawn_list = list(/obj/structure/geyser/random = 1) + weighted_feature_spawn_list = list( + /obj/structure/geyser/random = 1, + /obj/structure/ore_vent/random = 1, + ) feature_spawn_list = expand_weights(weighted_feature_spawn_list) open_turf_types = expand_weights(weighted_open_turf_types) closed_turf_types = expand_weights(weighted_closed_turf_types) diff --git a/code/datums/mapgen/Cavegens/IcemoonCaves.dm b/code/datums/mapgen/Cavegens/IcemoonCaves.dm index 96d30fbd359..b477b16e116 100644 --- a/code/datums/mapgen/Cavegens/IcemoonCaves.dm +++ b/code/datums/mapgen/Cavegens/IcemoonCaves.dm @@ -1,6 +1,9 @@ /datum/map_generator/cave_generator/icemoon weighted_open_turf_types = list(/turf/open/misc/asteroid/snow/icemoon = 19, /turf/open/misc/ice/icemoon = 1) - weighted_closed_turf_types = list(/turf/closed/mineral/random/snow = 1) + weighted_closed_turf_types = list( + /turf/closed/mineral/random/snow = 100, + //turf/closed/mineral/gibtonite/ice/icemoon = 4, // NOVA EDIT REMOVAL - Removes additional gibtonite call + ) weighted_mob_spawn_list = list( @@ -26,6 +29,7 @@ /obj/structure/geyser/protozine = 10, /obj/structure/geyser/random = 2, /obj/structure/geyser/wittel = 10, + /obj/structure/ore_vent/boss/icebox = 1, ) /datum/map_generator/cave_generator/icemoon/surface @@ -35,6 +39,13 @@ birth_limit = 5 death_limit = 4 smoothing_iterations = 10 + weighted_feature_spawn_list = list( + /obj/structure/geyser/hollowwater = 10, + /obj/structure/geyser/plasma_oxide = 10, + /obj/structure/geyser/protozine = 10, + /obj/structure/geyser/random = 2, + /obj/structure/geyser/wittel = 10, + ) /// Surface snow generator variant for forested station trait, WITH FORESTSSSS /datum/map_generator/cave_generator/icemoon/surface/forested @@ -59,7 +70,7 @@ /datum/map_generator/cave_generator/icemoon/surface/noruins //use this for when you don't want ruins to spawn in a certain area /datum/map_generator/cave_generator/icemoon/deep - weighted_closed_turf_types = list(/turf/closed/mineral/random/snow/underground = 1) + weighted_closed_turf_types = list(/turf/closed/mineral/random/snow = 1) weighted_mob_spawn_list = list( SPAWN_MEGAFAUNA = 1, /mob/living/basic/mining/ice_demon = 100, diff --git a/code/datums/mapgen/Cavegens/LavalandGenerator.dm b/code/datums/mapgen/Cavegens/LavalandGenerator.dm index 6f8aa7ed1bb..846e23181e0 100644 --- a/code/datums/mapgen/Cavegens/LavalandGenerator.dm +++ b/code/datums/mapgen/Cavegens/LavalandGenerator.dm @@ -33,6 +33,7 @@ /obj/structure/geyser/protozine = 10, /obj/structure/geyser/random = 2, /obj/structure/geyser/wittel = 10, + /obj/structure/ore_vent/boss = 1, ) initial_closed_chance = 45 @@ -42,4 +43,4 @@ /datum/map_generator/cave_generator/lavaland/ruin_version weighted_open_turf_types = list(/turf/open/misc/asteroid/basalt/lava_land_surface/no_ruins = 1) - weighted_closed_turf_types = list(/turf/closed/mineral/random/volcanic/do_not_chasm = 1) + weighted_closed_turf_types = list(/turf/closed/mineral/volcanic/lava_land_surface/do_not_chasm = 1) diff --git a/code/datums/martial/_martial.dm b/code/datums/martial/_martial.dm index 2af604cd8fe..e5dc7860b0b 100644 --- a/code/datums/martial/_martial.dm +++ b/code/datums/martial/_martial.dm @@ -1,20 +1,41 @@ /datum/martial_art + /// Player readable name of the martial art var/name = "Martial Art" - var/id = "" //ID, used by mind/has_martialart + /// ID of the martial art + var/id = "" + /// The streak of attacks the user has performed var/streak = "" + /// The maximum length of streaks allowed var/max_streak_length = 6 - var/current_target - var/datum/martial_art/base // The permanent style. This will be null unless the martial art is temporary + + /// The current mob associated with this martial art datum. Do not set directly. + VAR_PRIVATE/mob/living/holder + /// Weakref to the last mob we attacked, for determining when to reset streaks + VAR_PRIVATE/datum/weakref/current_target + /// Used for temporary martial arts. + /// This is a reference to the last martial art that was replaced by this one. + VAR_PRIVATE/datum/martial_art/base + + /// Path to verb to display help text for this martial art. var/help_verb - var/allow_temp_override = TRUE //if this martial art can be overridden by temporary martial arts - var/smashes_tables = FALSE //If the martial art smashes tables when performing table slams and head smashes - var/datum/weakref/holder //owner of the martial art - var/display_combos = FALSE //shows combo meter if true - var/combo_timer = 6 SECONDS // period of time after which the combo streak is reset. + /// If TRUE, this martial art can be overridden and stored (via base) by other martial arts if deemed "temporary" via teach(). + var/allow_temp_override = TRUE + /// If TRUE, this martial art smashes tables when performing table slams and head smashes + var/smashes_tables = FALSE + /// If TRUE, a combo meter will be displayed on the HUD for the current streak + var/display_combos = FALSE + /// The length of time until streaks are auto-reset. + var/combo_timer = 6 SECONDS + /// Timer ID for the combo reset timer. var/timerid - /// If set to true this style allows you to punch people despite being a pacifist (for instance Boxing, which does no damage) + /// If TRUE, this style allows you to punch people despite being a pacifist (IE: Boxing, which does no damage) var/pacifist_style = FALSE +/datum/martial_art/Destroy() + if(!isnull(holder)) + remove(holder) + return ..() + /datum/martial_art/serialize_list(list/options, list/semvers) . = ..() @@ -25,78 +46,317 @@ SET_SERIALIZATION_SEMVER(semvers, "1.0.0") return . +/// Signal proc for [COMSIG_LIVING_UNARMED_ATTACK] to hook into the appropriate proc +/datum/martial_art/proc/unarmed_strike(mob/living/source, atom/attack_target, proximity, modifiers) + SIGNAL_HANDLER + + if(!proximity || !isliving(attack_target)) + return NONE + + if(HAS_TRAIT(attack_target, TRAIT_MARTIAL_ARTS_IMMUNE)) + return NONE + + if(!can_use(source)) + return NONE + + if(LAZYACCESS(modifiers, RIGHT_CLICK)) + return disarm_act(source, attack_target) + + if(source.combat_mode) + if(HAS_TRAIT(source, TRAIT_PACIFISM) && !pacifist_style) + return NONE + + return harm_act(source, attack_target) + + return help_act(source, attack_target) + +/// Signal proc for [COMSIG_LIVING_GRAB] to hook into the grab +/datum/martial_art/proc/attempt_grab(mob/living/source, mob/living/grabbing) + SIGNAL_HANDLER + + if(HAS_TRAIT(grabbing, TRAIT_MARTIAL_ARTS_IMMUNE)) + return NONE + + if(!source.can_unarmed_attack()) // For parity with unarmed attacks + return NONE + + if(!can_use(source)) + return NONE + + return grab_act(source, grabbing) + +/** + * Called when help-intenting on someone + * + * What is checked going into this: + * Adjacency, [TRAIT_MARTIAL_ARTS_IMMUNE], attacker incapacitated, can_unarmed_attack, can_use + * + * What is NOT: + * check_block + * + * Arguments + * * mob/living/attacker - The mob attacking + * * mob/living/defender - The mob being attacked + * + * Returns + * * MARTIAL_ATTACK_INVALID - The attack is not valid, do normal unarmed attack + * * MARTIAL_ATTACK_FAIL - The attack is valid, but failed. No followup attack is made. + * * MARTIAL_ATTACK_SUCCESS - The attack is valid, and succeeded. No followup attack is made. + */ /datum/martial_art/proc/help_act(mob/living/attacker, mob/living/defender) + SHOULD_CALL_PARENT(FALSE) + PROTECTED_PROC(TRUE) return MARTIAL_ATTACK_INVALID +/** + * Called when disarm-intenting on someone + * + * What is checked going into this: + * Adjacency, [TRAIT_MARTIAL_ARTS_IMMUNE], attacker incapacitated, can_unarmed_attack, can_use + * + * What is NOT: + * check_block + * + * Arguments + * * mob/living/attacker - The mob attacking + * * mob/living/defender - The mob being attacked + * + * Returns + * * MARTIAL_ATTACK_INVALID - The attack is not valid, do normal unarmed attack + * * MARTIAL_ATTACK_FAIL - The attack is valid, but failed. No followup attack is made. + * * MARTIAL_ATTACK_SUCCESS - The attack is valid, and succeeded. No followup attack is made. + */ /datum/martial_art/proc/disarm_act(mob/living/attacker, mob/living/defender) + SHOULD_CALL_PARENT(FALSE) + PROTECTED_PROC(TRUE) return MARTIAL_ATTACK_INVALID +/** + * Called when harm-intenting on someone + * + * What is checked going into this: + * Adjacency, [TRAIT_MARTIAL_ARTS_IMMUNE], attacker incapacitated, can_unarmed_attack, can_use + * + * What is NOT: + * check_block + * + * Arguments + * * mob/living/attacker - The mob attacking + * * mob/living/defender - The mob being attacked + * + * Returns + * * MARTIAL_ATTACK_INVALID - The attack is not valid, do normal unarmed attack + * * MARTIAL_ATTACK_FAIL - The attack is valid, but failed. No followup attack is made. + * * MARTIAL_ATTACK_SUCCESS - The attack is valid, and succeeded. No followup attack is made. + */ /datum/martial_art/proc/harm_act(mob/living/attacker, mob/living/defender) + SHOULD_CALL_PARENT(FALSE) + PROTECTED_PROC(TRUE) return MARTIAL_ATTACK_INVALID +/** + * Called when grabbing someone + * + * What is checked going into this: + * Adjacency, [TRAIT_MARTIAL_ARTS_IMMUNE], attacker incapacitated, can_unarmed_attack, can_use + * + * What is NOT: + * check_block + * + * Arguments + * * mob/living/attacker - The mob attacking + * * mob/living/defender - The mob being attacked + * + * Returns + * * MARTIAL_ATTACK_INVALID - The attack is not valid, do normal unarmed attack + * * MARTIAL_ATTACK_FAIL - The attack is valid, but failed. No followup attack is made. + * * MARTIAL_ATTACK_SUCCESS - The attack is valid, and succeeded. No followup attack is made. + */ /datum/martial_art/proc/grab_act(mob/living/attacker, mob/living/defender) + SHOULD_CALL_PARENT(FALSE) + PROTECTED_PROC(TRUE) return MARTIAL_ATTACK_INVALID -/datum/martial_art/proc/can_use(mob/living/L) +/** + * Checks if the passed mob can use this martial art. + * + * Arguments + * * mob/living/martial_artist - The mob to check + * + * Returns + * * TRUE - The mob can use this martial art + * * FALSE - The mob cannot use this martial art + */ +/datum/martial_art/proc/can_use(mob/living/martial_artist) return TRUE +/** + * Adds the passed element to the current streak, resetting it if the target is not the same as the last target. + * + * Arguments + * * element - The element to add to the streak. This is some one letter string. + * * mob/living/defender - The mob being attacked + */ /datum/martial_art/proc/add_to_streak(element, mob/living/defender) - if(defender != current_target) + if(!IS_WEAKREF_OF(defender, current_target)) reset_streak(defender) - streak = streak+element + streak += element if(length(streak) > max_streak_length) streak = copytext(streak, 1 + length(streak[1])) - if (display_combos) - var/mob/living/holder_living = holder.resolve() + if(display_combos) timerid = addtimer(CALLBACK(src, PROC_REF(reset_streak), null, FALSE), combo_timer, TIMER_UNIQUE | TIMER_STOPPABLE) - holder_living?.hud_used?.combo_display.update_icon_state(streak, combo_timer - 2 SECONDS) + holder.hud_used?.combo_display.update_icon_state(streak, combo_timer - 2 SECONDS) +/** + * Resets the current streak. + * + * Arguments + * * mob/living/new_target - (Optional) The mob being attacked while the reset is occuring. + * * update_icon - If TRUE, the combo display will be updated. + */ /datum/martial_art/proc/reset_streak(mob/living/new_target, update_icon = TRUE) if(timerid) deltimer(timerid) - current_target = new_target + current_target = WEAKREF(new_target) streak = "" - if(update_icon) - var/mob/living/holder_living = holder?.resolve() - holder_living?.hud_used?.combo_display.update_icon_state(streak) + if(display_combos && update_icon) + holder.hud_used?.combo_display.update_icon_state(streak) -/datum/martial_art/proc/teach(mob/living/holder_living, make_temporary=FALSE) - if(!istype(holder_living) || !holder_living.mind) +/** + * Teaches the passed mob this martial art. + * + * Arguments + * * mob/living/new_holder - The mob to teach this martial art to. + * * make_temporary - If FALSE, this martial art will completely replace any existing martial arts. + * If TRUE, any existing martial art will be stored in the base variable, and will be restored when this martial art is removed. + * This can only occur if allow_temp_override is TRUE. + * + * Returns + * * TRUE - The martial art was successfully taught. + * * FALSE - The mob failed to learn the martial art, for whatever reason. + */ +/datum/martial_art/proc/teach(mob/living/new_holder, make_temporary = FALSE) + SHOULD_CALL_PARENT(TRUE) + + if(!istype(new_holder) || isnull(new_holder.mind)) return FALSE - if(holder_living.mind.martial_art) - if(make_temporary) - if(!holder_living.mind.martial_art.allow_temp_override) - return FALSE - store(holder_living.mind.martial_art, holder_living) - else - holder_living.mind.martial_art.on_remove(holder_living) - else if(make_temporary) - base = holder_living.mind.default_martial_art - if(help_verb) - add_verb(holder_living, help_verb) - holder_living.mind.martial_art = src - holder = WEAKREF(holder_living) + + var/datum/martial_art/existing_martial = new_holder.mind.martial_art + if(!isnull(existing_martial)) + if(make_temporary && !existing_martial.allow_temp_override) + return FALSE + + if(!isnull(existing_martial.base)) + store_martial_art(existing_martial.base) + existing_martial.unstore_martial_art() + else if(make_temporary) + store_martial_art(existing_martial) + + // Nulls out any existing martial art, it'll get GC'd if nothing owns it + existing_martial.remove(new_holder) + + new_holder.mind.martial_art = src + holder = new_holder + on_teach(new_holder) return TRUE -/datum/martial_art/proc/store(datum/martial_art/old, mob/living/holder_living) - old.on_remove(holder_living) - if (old.base) //Checks if old is temporary, if so it will not be stored. - base = old.base - else //Otherwise, old is stored. - base = old +/// Stores the passed martial art in the base var. +/datum/martial_art/proc/store_martial_art(datum/martial_art/martial) + if(!isnull(base)) + UnregisterSignal(base, COMSIG_QDELETING) -/datum/martial_art/proc/remove(mob/living/holder_living) - if(!istype(holder_living) || !holder_living.mind || holder_living.mind.martial_art != src) - return - on_remove(holder_living) - if(base) - base.teach(holder_living) - else - var/datum/martial_art/default = holder_living.mind.default_martial_art - default.teach(holder_living) + base = martial + RegisterSignal(base, COMSIG_QDELETING, PROC_REF(base_deleted)) + +/// Unstores the base var. +/datum/martial_art/proc/unstore_martial_art() + UnregisterSignal(base, COMSIG_QDELETING) + base = null + +/datum/martial_art/proc/base_deleted(datum/source) + SIGNAL_HANDLER + base = null + +/** + * Removes this martial art from the passed mob AND their mind. + * + * Arguments + * * mob/living/old_holder - The mob to remove this martial art from. + */ +/datum/martial_art/proc/remove(mob/living/old_holder) + SHOULD_CALL_PARENT(TRUE) + + ASSERT(old_holder == holder) + ASSERT(old_holder.mind.martial_art == src) + + on_remove(old_holder) + old_holder.mind.martial_art = null + if(!isnull(base)) + base.teach(old_holder) + unstore_martial_art() holder = null -/datum/martial_art/proc/on_remove(mob/living/holder_living) +/** + * A helper proc to remove the martial art from the passed mob fully, e + * ven if stored in another martial art's base. + * + * Arguments + * * mob/living/maybe_holder - The mob to check. + * + * Returns + * * TRUE - If the martial art was removed in some way + * * FALSE - If nothing happened + */ +/datum/martial_art/proc/fully_remove(mob/living/maybe_holder) + var/datum/martial_art/holder_art = maybe_holder.mind?.martial_art + if(isnull(holder_art)) + return FALSE + + if(holder_art == src) + remove(maybe_holder) + return TRUE + + if(holder_art.base == src) + holder_art.unstore_martial_art() + return TRUE + + return FALSE + +/** + * Called when this martial art is added to a mob. + */ +/datum/martial_art/proc/on_teach(mob/living/new_holder) + if(help_verb) + add_verb(new_holder, help_verb) + RegisterSignal(new_holder, COMSIG_QDELETING, PROC_REF(holder_deleted)) + RegisterSignal(new_holder, COMSIG_LIVING_UNARMED_ATTACK, PROC_REF(unarmed_strike)) + RegisterSignal(new_holder, COMSIG_LIVING_GRAB, PROC_REF(attempt_grab)) + RegisterSignal(new_holder, COMSIG_MOB_MIND_TRANSFERRED_OUT_OF, PROC_REF(transfer_martial_arts)) + +/** + * Called when this martial art is removed from a mob. + */ +/datum/martial_art/proc/on_remove(mob/living/remove_from) if(help_verb) - remove_verb(holder_living, help_verb) - return + remove_verb(remove_from, help_verb) + UnregisterSignal(remove_from, list(COMSIG_QDELETING, COMSIG_LIVING_UNARMED_ATTACK, COMSIG_LIVING_GRAB, COMSIG_MOB_MIND_TRANSFERRED_OUT_OF)) + +/datum/martial_art/proc/holder_deleted(datum/source) + SIGNAL_HANDLER + holder = null + +/// Signal proc for [COMSIG_MOB_MIND_TRANSFERRED_OUT_OF] to pass martial arts between bodies on mind transfer +/// By this point the martial art's holder is the old body, but the mind that owns it is in the new body +/datum/martial_art/proc/transfer_martial_arts(mob/living/old_body, mob/living/new_body) + SIGNAL_HANDLER + + // This has some notable issues in that martial arts granted by items like Krav Maga + // will follow the body swap, the easiest fix would be to move martial arts off of the mind + + if(!isnull(base)) // If we're home to a temporary one just don't touch it, give the base to the new body and leave it at that + base.teach(new_body) + unstore_martial_art() + return + + on_remove(old_body) // on_remove rather than remove, because by this point the mind is already in the new body, which remove handles. + teach(new_body) diff --git a/code/datums/martial/boxing.dm b/code/datums/martial/boxing.dm index da30104c9af..8ef30db63aa 100644 --- a/code/datums/martial/boxing.dm +++ b/code/datums/martial/boxing.dm @@ -3,69 +3,78 @@ id = MARTIALART_BOXING pacifist_style = TRUE -/datum/martial_art/boxing/disarm_act(mob/living/attacker, mob/living/defender) - to_chat(attacker, span_warning("Can't disarm while boxing!")) - return TRUE - -/datum/martial_art/boxing/grab_act(mob/living/attacker, mob/living/defender) - to_chat(attacker, span_warning("Can't grab while boxing!")) - return TRUE +/datum/martial_art/boxing/teach(mob/living/new_holder, make_temporary) + if(!ishuman(new_holder)) + return FALSE + return ..() -/datum/martial_art/boxing/harm_act(mob/living/attacker, mob/living/defender) +/datum/martial_art/boxing/disarm_act(mob/living/carbon/human/attacker, mob/living/defender) + attacker.balloon_alert(attacker, "can't disarm while boxing!") + return MARTIAL_ATTACK_FAIL - var/mob/living/carbon/human/attacker_human = attacker - var/obj/item/bodypart/arm/active_arm = attacker_human.get_active_hand() +/datum/martial_art/boxing/grab_act(mob/living/carbon/human/attacker, mob/living/defender) + attacker.balloon_alert(attacker, "can't grab while boxing!") + return MARTIAL_ATTACK_FAIL +/datum/martial_art/boxing/harm_act(mob/living/carbon/human/attacker, mob/living/defender) + var/obj/item/bodypart/arm/active_arm = attacker.get_active_hand() attacker.do_attack_animation(defender, ATTACK_EFFECT_PUNCH) - var/atk_verb = pick("left hook","right hook","straight punch") - var/damage = rand(5, 8) + active_arm.unarmed_damage_low - if(!damage) - playsound(defender.loc, active_arm.unarmed_miss_sound, 25, TRUE, -1) - defender.visible_message(span_warning("[attacker]'s [atk_verb] misses [defender]!"), \ - span_danger("You avoid [attacker]'s [atk_verb]!"), span_hear("You hear a swoosh!"), COMBAT_MESSAGE_RANGE, attacker) + var/atk_verb = pick("left hook", "right hook", "straight punch") + if(damage <= 0) + playsound(defender, active_arm.unarmed_miss_sound, 25, TRUE, -1) + defender.visible_message( + span_warning("[attacker]'s [atk_verb] misses [defender]!"), + span_danger("You avoid [attacker]'s [atk_verb]!"), + span_hear("You hear a swoosh!"), + COMBAT_MESSAGE_RANGE, + attacker, + ) to_chat(attacker, span_warning("Your [atk_verb] misses [defender]!")) log_combat(attacker, defender, "attempted to hit", atk_verb) - return FALSE + return MARTIAL_ATTACK_FAIL + if(defender.check_block(attacker, damage, "[attacker]'s [atk_verb]", UNARMED_ATTACK)) + return MARTIAL_ATTACK_FAIL var/obj/item/bodypart/affecting = defender.get_bodypart(defender.get_random_valid_zone(attacker.zone_selected)) var/armor_block = defender.run_armor_check(affecting, MELEE) - // NOVA EDIT CHANGE - var/sound/attack_sound - if(!active_arm.unarmed_attack_sound) - attack_sound = get_sfx("punch") - else - attack_sound = active_arm.unarmed_attack_sound - playsound(defender.loc, attack_sound, 25, TRUE, -1) - //NOVA EDIT END - - defender.visible_message(span_danger("[attacker] [atk_verb]ed [defender]!"), \ - span_userdanger("You're [atk_verb]ed by [attacker]!"), span_hear("You hear a sickening sound of flesh hitting flesh!"), COMBAT_MESSAGE_RANGE, attacker) + playsound(defender, active_arm.unarmed_attack_sound, 25, TRUE, -1) + defender.visible_message( + span_danger("[attacker] [atk_verb]ed [defender]!"), + span_userdanger("You're [atk_verb]ed by [attacker]!"), + span_hear("You hear a sickening sound of flesh hitting flesh!"), + COMBAT_MESSAGE_RANGE, + attacker, + ) to_chat(attacker, span_danger("You [atk_verb]ed [defender]!")) - defender.apply_damage(damage, STAMINA, affecting, armor_block) log_combat(attacker, defender, "punched (boxing) ") if(defender.getStaminaLoss() > 50 && istype(defender.mind?.martial_art, /datum/martial_art/boxing)) - var/knockout_prob = defender.getStaminaLoss() + rand(-15,15) - if((defender.stat != DEAD) && prob(knockout_prob)) - defender.visible_message(span_danger("[attacker] knocks [defender] out with a haymaker!"), \ - span_userdanger("You're knocked unconscious by [attacker]!"), span_hear("You hear a sickening sound of flesh hitting flesh!"), COMBAT_MESSAGE_RANGE, attacker) + var/knockout_prob = defender.getStaminaLoss() + rand(-15, 15) + if(defender.stat != DEAD && prob(knockout_prob)) + defender.visible_message( + span_danger("[attacker] knocks [defender] out with a haymaker!"), + span_userdanger("You're knocked unconscious by [attacker]!"), + span_hear("You hear a sickening sound of flesh hitting flesh!"), + COMBAT_MESSAGE_RANGE, + attacker, + ) to_chat(attacker, span_danger("You knock [defender] out with a haymaker!")) - defender.apply_effect(20 SECONDS,EFFECT_KNOCKDOWN, armor_block) + defender.apply_effect(20 SECONDS, EFFECT_KNOCKDOWN, armor_block) defender.SetSleeping(10 SECONDS) log_combat(attacker, defender, "knocked out (boxing) ") - return TRUE + return MARTIAL_ATTACK_SUCCESS -/datum/martial_art/boxing/can_use(mob/living/owner) - if(!ishuman(owner)) +/datum/martial_art/boxing/can_use(mob/living/martial_artist) + if(!ishuman(martial_artist)) return FALSE return ..() /obj/item/clothing/gloves/boxing - var/datum/martial_art/boxing/style = new + var/datum/martial_art/boxing/style /obj/item/clothing/gloves/boxing/Initialize(mapload) . = ..() @@ -76,18 +85,18 @@ slapcraft_recipes = slapcraft_recipe_list,\ ) + style = new() + style.allow_temp_override = FALSE + +/obj/item/clothing/gloves/boxing/Destroy() + QDEL_NULL(style) + return ..() + /obj/item/clothing/gloves/boxing/equipped(mob/user, slot) - ..() - // boxing requires human - if(!ishuman(user)) - return + . = ..() if(slot & ITEM_SLOT_GLOVES) - var/mob/living/student = user - style.teach(student, 1) + style.teach(user, TRUE) /obj/item/clothing/gloves/boxing/dropped(mob/user) - ..() - if(!ishuman(user)) - return - var/mob/living/owner = user - style.remove(owner) + . = ..() + style.fully_remove(user) diff --git a/code/datums/martial/cqc.dm b/code/datums/martial/cqc.dm index de609a82015..8e33ac5a851 100644 --- a/code/datums/martial/cqc.dm +++ b/code/datums/martial/cqc.dm @@ -10,19 +10,19 @@ help_verb = /mob/living/proc/CQC_help smashes_tables = TRUE display_combos = TRUE - var/old_grab_state = null - var/mob/restraining_mob + /// Weakref to a mob we're currently restraining (with grab-grab combo) + VAR_PRIVATE/datum/weakref/restraining_mob /// Probability of successfully blocking attacks while on throw mode var/block_chance = 75 -/datum/martial_art/cqc/teach(mob/living/cqc_user, make_temporary) +/datum/martial_art/cqc/on_teach(mob/living/new_holder) . = ..() - RegisterSignal(cqc_user, COMSIG_ATOM_ATTACKBY, PROC_REF(on_attackby)) - RegisterSignal(cqc_user, COMSIG_LIVING_CHECK_BLOCK, PROC_REF(check_block)) + RegisterSignal(new_holder, COMSIG_ATOM_ATTACKBY, PROC_REF(on_attackby)) + RegisterSignal(new_holder, COMSIG_LIVING_CHECK_BLOCK, PROC_REF(check_block)) -/datum/martial_art/cqc/on_remove(mob/living/cqc_user) - UnregisterSignal(cqc_user, list(COMSIG_ATOM_ATTACKBY, COMSIG_LIVING_CHECK_BLOCK)) - . = ..() +/datum/martial_art/cqc/on_remove(mob/living/remove_from) + UnregisterSignal(remove_from, list(COMSIG_ATOM_ATTACKBY, COMSIG_LIVING_CHECK_BLOCK)) + return ..() ///Signal from getting attacked with an item, for a special interaction with touch spells /datum/martial_art/cqc/proc/on_attackby(mob/living/cqc_user, obj/item/attack_weapon, mob/attacker, params) @@ -69,13 +69,11 @@ /datum/martial_art/cqc/reset_streak(mob/living/new_target) - if(new_target && new_target != restraining_mob) + if(!IS_WEAKREF_OF(new_target, restraining_mob)) restraining_mob = null return ..() /datum/martial_art/cqc/proc/check_streak(mob/living/attacker, mob/living/defender) - if(!can_use(attacker)) - return FALSE if(findtext(streak, SLAM_COMBO)) reset_streak() return Slam(attacker, defender) @@ -94,125 +92,159 @@ return FALSE /datum/martial_art/cqc/proc/Slam(mob/living/attacker, mob/living/defender) - if(!can_use(attacker)) + if(defender.body_position != STANDING_UP) return FALSE - if(defender.body_position == STANDING_UP) - defender.visible_message(span_danger("[attacker] slams [defender] into the ground!"), \ - span_userdanger("You're slammed into the ground by [attacker]!"), span_hear("You hear a sickening sound of flesh hitting flesh!"), null, attacker) - to_chat(attacker, span_danger("You slam [defender] into the ground!")) - playsound(get_turf(attacker), 'sound/weapons/slam.ogg', 50, TRUE, -1) - defender.apply_damage(10, BRUTE) - defender.Paralyze(12 SECONDS) - log_combat(attacker, defender, "slammed (CQC)") - return TRUE + + attacker.do_attack_animation(defender) + defender.visible_message( + span_danger("[attacker] slams [defender] into the ground!"), + span_userdanger("You're slammed into the ground by [attacker]!"), + span_hear("You hear a sickening sound of flesh hitting flesh!"), + null, + attacker, + ) + to_chat(attacker, span_danger("You slam [defender] into the ground!")) + playsound(attacker, 'sound/weapons/slam.ogg', 50, TRUE, -1) + defender.apply_damage(10, BRUTE) + defender.Paralyze(12 SECONDS) + log_combat(attacker, defender, "slammed (CQC)") + return TRUE /datum/martial_art/cqc/proc/Kick(mob/living/attacker, mob/living/defender) - if(!can_use(attacker) || defender.stat != CONSCIOUS) + if(defender.stat != CONSCIOUS) return FALSE + attacker.do_attack_animation(defender) if(defender.body_position == LYING_DOWN && !defender.IsUnconscious() && defender.getStaminaLoss() >= 100) log_combat(attacker, defender, "knocked out (Head kick)(CQC)") - defender.visible_message(span_danger("[attacker] kicks [defender]'s head, knocking [defender.p_them()] out!"), \ - span_userdanger("You're knocked unconscious by [attacker]!"), span_hear("You hear a sickening sound of flesh hitting flesh!"), null, attacker) + defender.visible_message( + span_danger("[attacker] kicks [defender]'s head, knocking [defender.p_them()] out!"), + span_userdanger("You're knocked unconscious by [attacker]!"), + span_hear("You hear a sickening sound of flesh hitting flesh!"), + null, + attacker, + ) to_chat(attacker, span_danger("You kick [defender]'s head, knocking [defender.p_them()] out!")) - playsound(get_turf(attacker), 'sound/weapons/genhit1.ogg', 50, TRUE, -1) + playsound(attacker, 'sound/weapons/genhit1.ogg', 50, TRUE, -1) var/helmet_protection = defender.run_armor_check(BODY_ZONE_HEAD, MELEE) defender.apply_effect(20 SECONDS, EFFECT_KNOCKDOWN, helmet_protection) defender.apply_effect(10 SECONDS, EFFECT_UNCONSCIOUS, helmet_protection) defender.adjustOrganLoss(ORGAN_SLOT_BRAIN, 15, 150) + else - defender.visible_message(span_danger("[attacker] kicks [defender] back!"), \ - span_userdanger("You're kicked back by [attacker]!"), span_hear("You hear a sickening sound of flesh hitting flesh!"), COMBAT_MESSAGE_RANGE, attacker) + defender.visible_message( + span_danger("[attacker] kicks [defender] back!"), + span_userdanger("You're kicked back by [attacker]!"), + span_hear("You hear a sickening sound of flesh hitting flesh!"), + COMBAT_MESSAGE_RANGE, + attacker, + ) to_chat(attacker, span_danger("You kick [defender] back!")) - playsound(get_turf(attacker), 'sound/weapons/cqchit1.ogg', 50, TRUE, -1) + playsound(attacker, 'sound/weapons/cqchit1.ogg', 50, TRUE, -1) var/atom/throw_target = get_edge_target_turf(defender, attacker.dir) defender.throw_at(throw_target, 1, 14, attacker) defender.apply_damage(10, attacker.get_attack_type()) if(defender.body_position == LYING_DOWN && !defender.IsUnconscious()) defender.adjustStaminaLoss(45) log_combat(attacker, defender, "kicked (CQC)") - . = TRUE + + return TRUE /datum/martial_art/cqc/proc/Pressure(mob/living/attacker, mob/living/defender) - if(!can_use(attacker)) - return FALSE + attacker.do_attack_animation(defender) log_combat(attacker, defender, "pressured (CQC)") - defender.visible_message(span_danger("[attacker] punches [defender]'s neck!"), \ - span_userdanger("Your neck is punched by [attacker]!"), span_hear("You hear a sickening sound of flesh hitting flesh!"), COMBAT_MESSAGE_RANGE, attacker) + defender.visible_message( + span_danger("[attacker] punches [defender]'s neck!"), + span_userdanger("Your neck is punched by [attacker]!"), + span_hear("You hear a sickening sound of flesh hitting flesh!"), + COMBAT_MESSAGE_RANGE, + attacker, + ) to_chat(attacker, span_danger("You punch [defender]'s neck!")) defender.adjustStaminaLoss(60) - playsound(get_turf(attacker), 'sound/weapons/cqchit1.ogg', 50, TRUE, -1) + playsound(attacker, 'sound/weapons/cqchit1.ogg', 50, TRUE, -1) return TRUE /datum/martial_art/cqc/proc/Restrain(mob/living/attacker, mob/living/defender) - if(restraining_mob) - return - if(!can_use(attacker)) + if(restraining_mob?.resolve()) return FALSE - if(!defender.stat) - log_combat(attacker, defender, "restrained (CQC)") - defender.visible_message(span_warning("[attacker] locks [defender] into a restraining position!"), \ - span_userdanger("You're locked into a restraining position by [attacker]!"), span_hear("You hear shuffling and a muffled groan!"), null, attacker) - to_chat(attacker, span_danger("You lock [defender] into a restraining position!")) - defender.adjustStaminaLoss(20) - defender.Stun(10 SECONDS) - restraining_mob = defender - addtimer(VARSET_CALLBACK(src, restraining_mob, null), 50, TIMER_UNIQUE) - return TRUE + if(defender.stat != CONSCIOUS) + return FALSE + + log_combat(attacker, defender, "restrained (CQC)") + defender.visible_message( + span_warning("[attacker] locks [defender] into a restraining position!"), + span_userdanger("You're locked into a restraining position by [attacker]!"), + span_hear("You hear shuffling and a muffled groan!"), + null, + attacker, + ) + to_chat(attacker, span_danger("You lock [defender] into a restraining position!")) + defender.adjustStaminaLoss(20) + defender.Stun(10 SECONDS) + restraining_mob = WEAKREF(defender) + addtimer(VARSET_CALLBACK(src, restraining_mob, null), 5 SECONDS, TIMER_UNIQUE) + return TRUE /datum/martial_art/cqc/proc/Consecutive(mob/living/attacker, mob/living/defender) - if(!can_use(attacker)) + if(defender.stat != CONSCIOUS) return FALSE - if(!defender.stat) - log_combat(attacker, defender, "consecutive CQC'd (CQC)") - defender.visible_message(span_danger("[attacker] strikes [defender]'s abdomen, neck and back consecutively"), \ - span_userdanger("Your abdomen, neck and back are struck consecutively by [attacker]!"), span_hear("You hear a sickening sound of flesh hitting flesh!"), COMBAT_MESSAGE_RANGE, attacker) - to_chat(attacker, span_danger("You strike [defender]'s abdomen, neck and back consecutively!")) - playsound(get_turf(defender), 'sound/weapons/cqchit2.ogg', 50, TRUE, -1) - var/obj/item/held_item = defender.get_active_held_item() - if(held_item && defender.temporarilyRemoveItemFromInventory(held_item)) - attacker.put_in_hands(held_item) - defender.adjustStaminaLoss(50) - defender.apply_damage(25, attacker.get_attack_type()) - return TRUE + + attacker.do_attack_animation(defender) + log_combat(attacker, defender, "consecutive CQC'd (CQC)") + defender.visible_message( + span_danger("[attacker] strikes [defender]'s abdomen, neck and back consecutively"), \ + span_userdanger("Your abdomen, neck and back are struck consecutively by [attacker]!"), + span_hear("You hear a sickening sound of flesh hitting flesh!"), + COMBAT_MESSAGE_RANGE, + attacker, + ) + to_chat(attacker, span_danger("You strike [defender]'s abdomen, neck and back consecutively!")) + playsound(defender, 'sound/weapons/cqchit2.ogg', 50, TRUE, -1) + var/obj/item/held_item = defender.get_active_held_item() + if(held_item && defender.temporarilyRemoveItemFromInventory(held_item)) + attacker.put_in_hands(held_item) + defender.adjustStaminaLoss(50) + defender.apply_damage(25, attacker.get_attack_type()) + return TRUE /datum/martial_art/cqc/grab_act(mob/living/attacker, mob/living/defender) - if(attacker != defender && can_use(attacker)) // attacker != defender prevents grabbing yourself - add_to_streak("G", defender) - if(check_streak(attacker, defender)) //if a combo is made no grab upgrade is done - return TRUE - old_grab_state = attacker.grab_state - defender.grabbedby(attacker, 1) - if(old_grab_state == GRAB_PASSIVE) - defender.drop_all_held_items() - attacker.setGrabState(GRAB_AGGRESSIVE) //Instant aggressive grab if on grab intent - log_combat(attacker, defender, "grabbed", addition="aggressively") - defender.visible_message(span_warning("[attacker] violently grabs [defender]!"), \ - span_userdanger("You're grabbed violently by [attacker]!"), span_hear("You hear sounds of aggressive fondling!"), COMBAT_MESSAGE_RANGE, attacker) - to_chat(attacker, span_danger("You violently grab [defender]!")) - return TRUE - else - return FALSE + if(attacker == defender) + return MARTIAL_ATTACK_INVALID + if(defender.check_block(attacker, 0, attacker.name, UNARMED_ATTACK)) + return MARTIAL_ATTACK_FAIL + + add_to_streak("G", defender) + if(check_streak(attacker, defender)) //if a combo is made no grab upgrade is done + return MARTIAL_ATTACK_SUCCESS + if(attacker.body_position == LYING_DOWN) + return MARTIAL_ATTACK_INVALID + + var/old_grab_state = attacker.grab_state + defender.grabbedby(attacker, TRUE) + if(old_grab_state == GRAB_PASSIVE) + defender.drop_all_held_items() + attacker.setGrabState(GRAB_AGGRESSIVE) //Instant aggressive grab if on grab intent + log_combat(attacker, defender, "grabbed", addition="aggressively") + defender.visible_message( + span_warning("[attacker] violently grabs [defender]!"), + span_userdanger("You're grabbed violently by [attacker]!"), + span_hear("You hear sounds of aggressive fondling!"), + COMBAT_MESSAGE_RANGE, + attacker, + ) + to_chat(attacker, span_danger("You violently grab [defender]!")) + return MARTIAL_ATTACK_SUCCESS /datum/martial_art/cqc/harm_act(mob/living/attacker, mob/living/defender) - if(!can_use(attacker)) - return FALSE - - if(attacker.resting && defender.stat != DEAD && defender.body_position == STANDING_UP) - defender.visible_message(span_danger("[attacker] leg sweeps [defender]!"), \ - span_userdanger("Your legs are sweeped by [attacker]!"), span_hear("You hear a sickening sound of flesh hitting flesh!"), null, attacker) - to_chat(attacker, span_danger("You leg sweep [defender]!")) - playsound(get_turf(attacker), 'sound/effects/hit_kick.ogg', 50, TRUE, -1) - attacker.do_attack_animation(defender) - defender.apply_damage(10, BRUTE) - defender.Knockdown(5 SECONDS) - log_combat(attacker, defender, "sweeped (CQC)") - reset_streak() - return TRUE - if((attacker.grab_state == GRAB_KILL) && attacker.zone_selected == BODY_ZONE_HEAD && defender.stat != DEAD) - var/obj/item/bodypart/head = defender.get_bodypart("head") - if(head) + if(attacker.grab_state == GRAB_KILL \ + && attacker.zone_selected == BODY_ZONE_HEAD \ + && attacker.pulling == defender \ + && defender.stat != DEAD \ + ) + var/obj/item/bodypart/head = defender.get_bodypart(BODY_ZONE_HEAD) + if(!isnull(head)) playsound(defender, 'sound/effects/wounds/crack1.ogg', 100) defender.visible_message( span_danger("[attacker] snaps the neck of [defender]!"), @@ -226,66 +258,109 @@ if(!HAS_TRAIT(defender, TRAIT_NODEATH)) defender.death() defender.investigate_log("has had [defender.p_their()] neck snapped by [attacker].", INVESTIGATE_DEATHS) + return MARTIAL_ATTACK_SUCCESS - return TRUE + if(defender.check_block(attacker, 10, attacker.name, UNARMED_ATTACK)) + return MARTIAL_ATTACK_FAIL + + if(attacker.resting && defender.stat != DEAD && defender.body_position == STANDING_UP) + defender.visible_message( + span_danger("[attacker] leg sweeps [defender]!"), + span_userdanger("Your legs are sweeped by [attacker]!"), + span_hear("You hear a sickening sound of flesh hitting flesh!"), + null, + attacker, + ) + to_chat(attacker, span_danger("You leg sweep [defender]!")) + playsound(attacker, 'sound/effects/hit_kick.ogg', 50, TRUE, -1) + attacker.do_attack_animation(defender) + defender.apply_damage(10, BRUTE) + defender.Knockdown(5 SECONDS) + log_combat(attacker, defender, "sweeped (CQC)") + reset_streak() + return MARTIAL_ATTACK_SUCCESS add_to_streak("H", defender) if(check_streak(attacker, defender)) - return TRUE - log_combat(attacker, defender, "attacked (CQC)") + return MARTIAL_ATTACK_SUCCESS attacker.do_attack_animation(defender) var/picked_hit_type = pick("CQC", "Big Boss") var/bonus_damage = 13 if(defender.body_position == LYING_DOWN) bonus_damage += 5 - picked_hit_type = "stomp" + picked_hit_type = pick("kick", "stomp") defender.apply_damage(bonus_damage, BRUTE) - if(picked_hit_type == "kick" || picked_hit_type == "stomp") - playsound(get_turf(defender), 'sound/weapons/cqchit2.ogg', 50, TRUE, -1) - else - playsound(get_turf(defender), 'sound/weapons/cqchit1.ogg', 50, TRUE, -1) - defender.visible_message(span_danger("[attacker] [picked_hit_type]ed [defender]!"), \ - span_userdanger("You're [picked_hit_type]ed by [attacker]!"), span_hear("You hear a sickening sound of flesh hitting flesh!"), COMBAT_MESSAGE_RANGE, attacker) - to_chat(attacker, span_danger("You [picked_hit_type] [defender]!")) - log_combat(attacker, defender, "[picked_hit_type]s (CQC)") - return TRUE + playsound(defender, (picked_hit_type == "kick" || picked_hit_type == "stomp") ? 'sound/weapons/cqchit2.ogg' : 'sound/weapons/cqchit1.ogg', 50, TRUE, -1) + + defender.visible_message( + span_danger("[attacker] [picked_hit_type]ed [defender]!"), + span_userdanger("You're [picked_hit_type]ed by [attacker]!"), + span_hear("You hear a sickening sound of flesh hitting flesh!"), + COMBAT_MESSAGE_RANGE, + attacker, + ) + to_chat(attacker, span_danger("You [picked_hit_type] [defender]!")) + log_combat(attacker, defender, "attacked ([picked_hit_type]'d)(CQC)") + return MARTIAL_ATTACK_SUCCESS /datum/martial_art/cqc/disarm_act(mob/living/attacker, mob/living/defender) - if(!can_use(attacker)) - return FALSE + if(defender.check_block(attacker, 0, attacker.name, UNARMED_ATTACK)) + return MARTIAL_ATTACK_FAIL + add_to_streak("D", defender) - var/obj/item/held_item = null if(check_streak(attacker, defender)) - return TRUE - log_combat(attacker, defender, "disarmed (CQC)", "[held_item ? " grabbing \the [held_item]" : ""]") - if(restraining_mob && attacker.pulling == restraining_mob) - log_combat(attacker, defender, "knocked out (Chokehold)(CQC)") - defender.visible_message(span_danger("[attacker] puts [defender] into a chokehold!"), \ - span_userdanger("You're put into a chokehold by [attacker]!"), span_hear("You hear shuffling and a muffled groan!"), null, attacker) + return MARTIAL_ATTACK_SUCCESS + + if(IS_WEAKREF_OF(attacker.pulling, restraining_mob)) + log_combat(attacker, defender, "disarmed (CQC)", addition = "knocked out (CQC Chokehold)") + defender.visible_message( + span_danger("[attacker] puts [defender] into a chokehold!"), + span_userdanger("You're put into a chokehold by [attacker]!"), + span_hear("You hear shuffling and a muffled groan!"), + null, + attacker, + ) to_chat(attacker, span_danger("You put [defender] into a chokehold!")) defender.SetSleeping(40 SECONDS) restraining_mob = null if(attacker.grab_state < GRAB_NECK && !HAS_TRAIT(attacker, TRAIT_PACIFISM)) attacker.setGrabState(GRAB_NECK) - return TRUE - if(prob(65)) - if(!defender.stat || !defender.IsParalyzed() || !restraining_mob) - held_item = defender.get_active_held_item() - defender.visible_message(span_danger("[attacker] strikes [defender]'s jaw with their hand!"), \ - span_userdanger("Your jaw is struck by [attacker], you feel disoriented!"), span_hear("You hear a sickening sound of flesh hitting flesh!"), COMBAT_MESSAGE_RANGE, attacker) - to_chat(attacker, span_danger("You strike [defender]'s jaw, leaving [defender.p_them()] disoriented!")) - playsound(get_turf(defender), 'sound/weapons/cqchit1.ogg', 50, TRUE, -1) - if(held_item && defender.temporarilyRemoveItemFromInventory(held_item)) - attacker.put_in_hands(held_item) - defender.set_jitter_if_lower(4 SECONDS) - defender.apply_damage(5, attacker.get_attack_type()) - else - defender.visible_message(span_danger("[attacker] fails to disarm [defender]!"), \ - span_userdanger("You're nearly disarmed by [attacker]!"), span_hear("You hear a swoosh!"), COMBAT_MESSAGE_RANGE, attacker) - to_chat(attacker, span_warning("You fail to disarm [defender]!")) - playsound(defender, 'sound/weapons/punchmiss.ogg', 25, TRUE, -1) - return FALSE + return MARTIAL_ATTACK_SUCCESS + + attacker.do_attack_animation(defender, ATTACK_EFFECT_DISARM) + if(prob(65) && (defender.stat == CONSCIOUS || !defender.IsParalyzed() || !restraining_mob?.resolve())) + var/obj/item/disarmed_item = defender.get_active_held_item() + if(disarmed_item && defender.temporarilyRemoveItemFromInventory(disarmed_item)) + attacker.put_in_hands(disarmed_item) + else + disarmed_item = null + + defender.visible_message( + span_danger("[attacker] strikes [defender]'s jaw with their hand[disarmed_item ? ", disarming [defender.p_them()] of [disarmed_item]" : ""]!"), + span_userdanger("[attacker] strikes your jaw,[disarmed_item ? " disarming you of [disarmed_item] and" : ""] leaving you disoriented!"), + span_hear("You hear a sickening sound of flesh hitting flesh!"), + COMBAT_MESSAGE_RANGE, + attacker, + ) + to_chat(attacker, span_danger("You strike [defender]'s jaw,[disarmed_item ? " disarming [defender.p_them()] of [disarmed_item] and" : ""] leaving [defender.p_them()] disoriented!")) + playsound(defender, 'sound/weapons/cqchit1.ogg', 50, TRUE, -1) + defender.set_jitter_if_lower(4 SECONDS) + defender.apply_damage(5, attacker.get_attack_type()) + log_combat(attacker, defender, "disarmed (CQC)", addition = disarmed_item ? "(disarmed of [disarmed_item])" : null) + return MARTIAL_ATTACK_SUCCESS + + defender.visible_message( + span_danger("[attacker] fails to disarm [defender]!"), \ + span_userdanger("You're nearly disarmed by [attacker]!"), + span_hear("You hear a swoosh!"), + COMBAT_MESSAGE_RANGE, + attacker, + ) + to_chat(attacker, span_warning("You fail to disarm [defender]!")) + playsound(defender, 'sound/weapons/punchmiss.ogg', 25, TRUE, -1) + log_combat(attacker, defender, "failed to disarm (CQC)") + return MARTIAL_ATTACK_FAIL /mob/living/proc/CQC_help() @@ -327,8 +402,8 @@ kitchen_areas |= path /// Limits where the chef's CQC can be used to only whitelisted areas. -/datum/martial_art/cqc/under_siege/can_use(mob/living/owner) - if(!is_type_in_list(get_area(owner), kitchen_areas)) +/datum/martial_art/cqc/under_siege/can_use(mob/living/martial_artist) + if(!is_type_in_list(get_area(martial_artist), kitchen_areas)) return FALSE return ..() diff --git a/code/datums/martial/hugs_of_the_gondola.dm b/code/datums/martial/hugs_of_the_gondola.dm deleted file mode 100644 index a1fae03a35a..00000000000 --- a/code/datums/martial/hugs_of_the_gondola.dm +++ /dev/null @@ -1,20 +0,0 @@ -/// Gondola love, makes hugs inject pax if the arms are exposed -/datum/martial_art/hugs_of_the_gondola - name = "Hugs of the Gondola" - id = MARTIALART_HUGS_OF_THE_GONDOLA - -/datum/martial_art/hugs_of_the_gondola/help_act(mob/living/attacker, mob/living/defender) - if(ishuman(defender) && ishuman(attacker)) - var/mob/living/carbon/human/human_attacker = attacker - var/mob/living/carbon/human/human_defender = defender - var/list/covered_body_zones = human_attacker.get_covered_body_zones() - var/pax_injected = 4 - if(BODY_ZONE_L_ARM in covered_body_zones) - pax_injected -= 2 - if(BODY_ZONE_R_ARM in covered_body_zones) - pax_injected -= 2 - if(pax_injected) - human_defender.reagents.add_reagent(/datum/reagent/pax, pax_injected) - to_chat(defender, span_warning("You feel a tiny prick!")) - //this is so it hugs/shakes up as usual - return MARTIAL_ATTACK_INVALID diff --git a/code/datums/martial/krav_maga.dm b/code/datums/martial/krav_maga.dm index fcc432d41f8..66d092e886e 100644 --- a/code/datums/martial/krav_maga.dm +++ b/code/datums/martial/krav_maga.dm @@ -1,18 +1,31 @@ /datum/martial_art/krav_maga name = "Krav Maga" id = MARTIALART_KRAVMAGA - var/datum/action/neck_chop/neckchop = new/datum/action/neck_chop() - var/datum/action/leg_sweep/legsweep = new/datum/action/leg_sweep() - var/datum/action/lung_punch/lungpunch = new/datum/action/lung_punch() + VAR_PRIVATE/datum/action/neck_chop/neckchop + VAR_PRIVATE/datum/action/leg_sweep/legsweep + VAR_PRIVATE/datum/action/lung_punch/lungpunch + +/datum/martial_art/krav_maga/New() + . = ..() + neckchop = new(src) + legsweep = new(src) + lungpunch = new(src) + +/datum/martial_art/krav_maga/Destroy() + neckchop = null + legsweep = null + lungpunch = null + return ..() /datum/action/neck_chop name = "Neck Chop - Injures the neck, stopping the victim from speaking for a while." button_icon = 'icons/mob/actions/actions_items.dmi' button_icon_state = "neckchop" + check_flags = AB_CHECK_INCAPACITATED|AB_CHECK_HANDS_BLOCKED|AB_CHECK_CONSCIOUS /datum/action/neck_chop/Trigger(trigger_flags) - if(owner.incapacitated()) - to_chat(owner, span_warning("You can't use [name] while you're incapacitated.")) + . = ..() + if(!.) return if (owner.mind.martial_art.streak == "neck_chop") owner.visible_message(span_danger("[owner] assumes a neutral stance."), "Your next attack is cleared.") @@ -25,10 +38,11 @@ name = "Leg Sweep - Trips the victim, knocking them down for a brief moment." button_icon = 'icons/mob/actions/actions_items.dmi' button_icon_state = "legsweep" + check_flags = AB_CHECK_INCAPACITATED|AB_CHECK_HANDS_BLOCKED|AB_CHECK_CONSCIOUS /datum/action/leg_sweep/Trigger(trigger_flags) - if(owner.incapacitated()) - to_chat(owner, span_warning("You can't use [name] while you're incapacitated.")) + . = ..() + if(!.) return if (owner.mind.martial_art.streak == "leg_sweep") owner.visible_message(span_danger("[owner] assumes a neutral stance."), "Your next attack is cleared.") @@ -41,10 +55,11 @@ name = "Lung Punch - Delivers a strong punch just above the victim's abdomen, constraining the lungs. The victim will be unable to breathe for a short time." button_icon = 'icons/mob/actions/actions_items.dmi' button_icon_state = "lungpunch" + check_flags = AB_CHECK_INCAPACITATED|AB_CHECK_HANDS_BLOCKED|AB_CHECK_CONSCIOUS /datum/action/lung_punch/Trigger(trigger_flags) - if(owner.incapacitated()) - to_chat(owner, span_warning("You can't use [name] while you're incapacitated.")) + . = ..() + if(!.) return if (owner.mind.martial_art.streak == "quick_choke") owner.visible_message(span_danger("[owner] assumes a neutral stance."), "Your next attack is cleared.") @@ -53,19 +68,20 @@ owner.visible_message(span_danger("[owner] assumes the Lung Punch stance!"), "Your next attack will be a Lung Punch.") owner.mind.martial_art.streak = "quick_choke"//internal name for lung punch -/datum/martial_art/krav_maga/teach(mob/living/owner, make_temporary=FALSE) - if(..()) - to_chat(owner, span_userdanger("You know the arts of [name]!")) - to_chat(owner, span_danger("Place your cursor over a move at the top of the screen to see what it does.")) - neckchop.Grant(owner) - legsweep.Grant(owner) - lungpunch.Grant(owner) +/datum/martial_art/krav_maga/on_teach(mob/living/new_holder) + . = ..() + to_chat(new_holder, span_userdanger("You know the arts of [name]!")) + to_chat(new_holder, span_danger("Place your cursor over a move at the top of the screen to see what it does.")) + neckchop.Grant(new_holder) + legsweep.Grant(new_holder) + lungpunch.Grant(new_holder) -/datum/martial_art/krav_maga/on_remove(mob/living/owner) - to_chat(owner, span_userdanger("You suddenly forget the arts of [name]...")) - neckchop.Remove(owner) - legsweep.Remove(owner) - lungpunch.Remove(owner) +/datum/martial_art/krav_maga/on_remove(mob/living/remove_from) + to_chat(remove_from, span_userdanger("You suddenly forget the arts of [name]...")) + neckchop?.Remove(remove_from) + legsweep?.Remove(remove_from) + lungpunch?.Remove(remove_from) + return ..() /datum/martial_art/krav_maga/proc/check_streak(mob/living/attacker, mob/living/defender) switch(streak) @@ -84,80 +100,125 @@ return FALSE /datum/martial_art/krav_maga/proc/leg_sweep(mob/living/attacker, mob/living/defender) - if(defender.stat || defender.IsParalyzed()) - return FALSE - defender.visible_message(span_warning("[attacker] leg sweeps [defender]!"), \ - span_userdanger("Your legs are sweeped by [attacker]!"), span_hear("You hear a sickening sound of flesh hitting flesh!"), null, attacker) + if(defender.stat != CONSCIOUS || defender.IsParalyzed()) + return MARTIAL_ATTACK_INVALID + if(HAS_TRAIT(attacker, TRAIT_PACIFISM)) + return MARTIAL_ATTACK_INVALID // Does 5 damage, so we can't let pacifists leg sweep. + defender.visible_message( + span_warning("[attacker] leg sweeps [defender]!"), + span_userdanger("Your legs are sweeped by [attacker]!"), + span_hear("You hear a sickening sound of flesh hitting flesh!"), + null, + attacker, + ) to_chat(attacker, span_danger("You leg sweep [defender]!")) - playsound(get_turf(attacker), 'sound/effects/hit_kick.ogg', 50, TRUE, -1) + playsound(attacker, 'sound/effects/hit_kick.ogg', 50, TRUE, -1) defender.apply_damage(5, BRUTE, BODY_ZONE_CHEST) defender.Knockdown(6 SECONDS) log_combat(attacker, defender, "leg sweeped") - return TRUE + return MARTIAL_ATTACK_SUCCESS /datum/martial_art/krav_maga/proc/quick_choke(mob/living/attacker, mob/living/defender)//is actually lung punch - defender.visible_message(span_warning("[attacker] pounds [defender] on the chest!"), \ - span_userdanger("Your chest is slammed by [attacker]! You can't breathe!"), span_hear("You hear a sickening sound of flesh hitting flesh!"), COMBAT_MESSAGE_RANGE, attacker) + attacker.do_attack_animation(defender) + defender.visible_message( + span_warning("[attacker] pounds [defender] on the chest!"), + span_userdanger("Your chest is slammed by [attacker]! You can't breathe!"), + span_hear("You hear a sickening sound of flesh hitting flesh!"), + COMBAT_MESSAGE_RANGE, + attacker, + ) to_chat(attacker, span_danger("You pound [defender] on the chest!")) - playsound(get_turf(attacker), 'sound/effects/hit_punch.ogg', 50, TRUE, -1) + playsound(attacker, 'sound/effects/hit_punch.ogg', 50, TRUE, -1) if(defender.losebreath <= 10) defender.losebreath = clamp(defender.losebreath + 5, 0, 10) defender.adjustOxyLoss(10) log_combat(attacker, defender, "quickchoked") - return TRUE + return MARTIAL_ATTACK_SUCCESS /datum/martial_art/krav_maga/proc/neck_chop(mob/living/attacker, mob/living/defender) - defender.visible_message(span_warning("[attacker] karate chops [defender]'s neck!"), \ - span_userdanger("Your neck is karate chopped by [attacker], rendering you unable to speak!"), span_hear("You hear a sickening sound of flesh hitting flesh!"), COMBAT_MESSAGE_RANGE, attacker) + if(HAS_TRAIT(attacker, TRAIT_PACIFISM)) + return MARTIAL_ATTACK_INVALID // Does 10 damage, so we can't let pacifists neck chop. + attacker.do_attack_animation(defender) + defender.visible_message( + span_warning("[attacker] karate chops [defender]'s neck!"), + span_userdanger("Your neck is karate chopped by [attacker], rendering you unable to speak!"), + span_hear("You hear a sickening sound of flesh hitting flesh!"), + COMBAT_MESSAGE_RANGE, + attacker, + ) to_chat(attacker, span_danger("You karate chop [defender]'s neck, rendering [defender.p_them()] unable to speak!")) - playsound(get_turf(attacker), 'sound/effects/hit_punch.ogg', 50, TRUE, -1) + playsound(attacker, 'sound/effects/hit_punch.ogg', 50, TRUE, -1) defender.apply_damage(10, attacker.get_attack_type(), BODY_ZONE_HEAD) defender.adjust_silence_up_to(20 SECONDS, 20 SECONDS) log_combat(attacker, defender, "neck chopped") - return TRUE + return MARTIAL_ATTACK_SUCCESS /datum/martial_art/krav_maga/harm_act(mob/living/attacker, mob/living/defender) - if(check_streak(attacker, defender)) - return TRUE - log_combat(attacker, defender, "punched") - var/obj/item/bodypart/affecting = defender.get_bodypart(defender.get_random_valid_zone(attacker.zone_selected)) var/picked_hit_type = pick("punch", "kick") var/bonus_damage = 0 if(defender.body_position == LYING_DOWN) bonus_damage += 5 picked_hit_type = "stomp" + + if(defender.check_block(attacker, 10 + bonus_damage, "[attacker]'s [picked_hit_type]", UNARMED_ATTACK)) + return MARTIAL_ATTACK_FAIL + if(check_streak(attacker, defender)) + return MARTIAL_ATTACK_SUCCESS + + log_combat(attacker, defender, "[picked_hit_type]ed") + var/obj/item/bodypart/affecting = defender.get_bodypart(defender.get_random_valid_zone(attacker.zone_selected)) defender.apply_damage(10 + bonus_damage, attacker.get_attack_type(), affecting) if(picked_hit_type == "kick" || picked_hit_type == "stomp") attacker.do_attack_animation(defender, ATTACK_EFFECT_KICK) - playsound(get_turf(defender), 'sound/effects/hit_kick.ogg', 50, TRUE, -1) + playsound(defender, 'sound/effects/hit_kick.ogg', 50, TRUE, -1) else attacker.do_attack_animation(defender, ATTACK_EFFECT_PUNCH) - playsound(get_turf(defender), 'sound/effects/hit_punch.ogg', 50, TRUE, -1) - defender.visible_message(span_danger("[attacker] [picked_hit_type]s [defender]!"), \ - span_userdanger("You're [picked_hit_type]ed by [attacker]!"), span_hear("You hear a sickening sound of flesh hitting flesh!"), COMBAT_MESSAGE_RANGE, attacker) + playsound(defender, 'sound/effects/hit_punch.ogg', 50, TRUE, -1) + defender.visible_message( + span_danger("[attacker] [picked_hit_type]s [defender]!"), + span_userdanger("You're [picked_hit_type]ed by [attacker]!"), + span_hear("You hear a sickening sound of flesh hitting flesh!"), + COMBAT_MESSAGE_RANGE, + attacker, + ) to_chat(attacker, span_danger("You [picked_hit_type] [defender]!")) log_combat(attacker, defender, "[picked_hit_type] with [name]") - return TRUE + return MARTIAL_ATTACK_SUCCESS /datum/martial_art/krav_maga/disarm_act(mob/living/attacker, mob/living/defender) + if(defender.check_block(attacker, 0, attacker.name, UNARMED_ATTACK)) + return MARTIAL_ATTACK_FAIL if(check_streak(attacker, defender)) - return TRUE - var/obj/item/stuff_in_hand = null - stuff_in_hand = defender.get_active_held_item() - if(prob(60) && stuff_in_hand) - if(defender.temporarilyRemoveItemFromInventory(stuff_in_hand)) - attacker.put_in_hands(stuff_in_hand) - defender.visible_message("[attacker] disarms [defender]!", \ - "You're disarmed by [attacker]!", "You hear aggressive shuffling!", COMBAT_MESSAGE_RANGE, attacker) - to_chat(attacker, "You disarm [defender]!") - playsound(defender, 'sound/weapons/thudswoosh.ogg', 50, TRUE, -1) - log_combat(attacker, defender, "shoved (Krav Maga)", "[stuff_in_hand ? " removing \the [stuff_in_hand]" : ""]") - return FALSE + return MARTIAL_ATTACK_SUCCESS + var/obj/item/stuff_in_hand = defender.get_active_held_item() + if(prob(60) && stuff_in_hand && defender.temporarilyRemoveItemFromInventory(stuff_in_hand)) + attacker.put_in_hands(stuff_in_hand) + defender.visible_message( + span_danger("[attacker] disarms [defender]!"), + span_userdanger("You're disarmed by [attacker]!"), + span_hear("You hear aggressive shuffling!"), + COMBAT_MESSAGE_RANGE, + attacker, + ) + to_chat(attacker, span_danger("You disarm [defender]!")) + playsound(defender, 'sound/weapons/thudswoosh.ogg', 50, TRUE, -1) + log_combat(attacker, defender, "disarmed (Krav Maga)", addition = "(disarmed of [stuff_in_hand])") + return MARTIAL_ATTACK_INVALID // normal shove //Krav Maga Gloves /obj/item/clothing/gloves/krav_maga - var/datum/martial_art/krav_maga/style = new + var/datum/martial_art/krav_maga/style + clothing_traits = list(TRAIT_FAST_CUFFING) + +/obj/item/clothing/gloves/krav_maga/Initialize(mapload) + . = ..() + style = new() + style.allow_temp_override = FALSE + +/obj/item/clothing/gloves/krav_maga/Destroy() + QDEL_NULL(style) + return ..() /obj/item/clothing/gloves/krav_maga/equipped(mob/user, slot) . = ..() @@ -166,8 +227,7 @@ /obj/item/clothing/gloves/krav_maga/dropped(mob/user) . = ..() - if(user.get_item_by_slot(ITEM_SLOT_GLOVES) == src) - style.remove(user) + style.fully_remove(user) /obj/item/clothing/gloves/krav_maga/sec//more obviously named, given to sec name = "krav maga gloves" diff --git a/code/datums/martial/mushpunch.dm b/code/datums/martial/mushpunch.dm index eea4439691f..e571f46be35 100644 --- a/code/datums/martial/mushpunch.dm +++ b/code/datums/martial/mushpunch.dm @@ -2,39 +2,56 @@ name = "Mushroom Punch" id = MARTIALART_MUSHPUNCH -/datum/martial_art/mushpunch/harm_act(mob/living/A, mob/living/D) - var/atk_verb - to_chat(A, span_spiderbroodmother("You begin to wind up an attack...")) - if(!do_after(A, 2.5 SECONDS, target = D)) - to_chat(A, span_spiderbroodmother("Your attack was interrupted!")) - return TRUE //martial art code was a mistake - A.do_attack_animation(D, ATTACK_EFFECT_PUNCH) - atk_verb = pick("punch", "smash", "crack") - D.visible_message(span_danger("[A] [atk_verb]ed [D] with such inhuman strength that it sends [D.p_them()] flying backwards!"), \ - span_userdanger("You're [atk_verb]ed by [A] with such inhuman strength that it sends you flying backwards!"), span_hear("You hear a sickening sound of flesh hitting flesh!"), null, A) - to_chat(A, span_danger("You [atk_verb] [D] with such inhuman strength that it sends [D.p_them()] flying backwards!")) - D.apply_damage(rand(15,30), A.get_attack_type()) - playsound(D, 'sound/effects/meteorimpact.ogg', 25, TRUE, -1) - var/throwtarget = get_edge_target_turf(A, get_dir(A, get_step_away(D, A))) - D.throw_at(throwtarget, 4, 2, A)//So stuff gets tossed around at the same time. - D.Paralyze(2 SECONDS) - if(atk_verb) - log_combat(A, D, "[atk_verb] (Mushroom Punch)") - return TRUE +/datum/martial_art/mushpunch/harm_act(mob/living/attacker, mob/living/defender) + INVOKE_ASYNC(src, PROC_REF(charge_up_attack), attacker, defender) + return MARTIAL_ATTACK_SUCCESS + +/datum/martial_art/mushpunch/proc/charge_up_attack(mob/living/attacker, mob/living/defender) + + to_chat(attacker, span_spiderbroodmother("You begin to wind up an attack...")) + if(!do_after(attacker, 2.5 SECONDS, defender)) + to_chat(attacker, span_spiderbroodmother("Your attack was interrupted!")) + return + + var/final_damage = rand(15, 30) + var/atk_verb = pick("punch", "smash", "crack") + if(defender.check_block(attacker, final_damage, "[attacker]'s [atk_verb]", UNARMED_ATTACK)) + return + + attacker.do_attack_animation(defender, ATTACK_EFFECT_PUNCH) + defender.visible_message( + span_danger("[attacker] [atk_verb]ed [defender] with such inhuman strength that it sends [defender.p_them()] flying backwards!"), \ + span_userdanger("You're [atk_verb]ed by [attacker] with such inhuman strength that it sends you flying backwards!"), + span_hear("You hear a sickening sound of flesh hitting flesh!"), + null, + attacker, + ) + to_chat(attacker, span_danger("You [atk_verb] [defender] with such inhuman strength that it sends [defender.p_them()] flying backwards!")) + defender.apply_damage(final_damage, attacker.get_attack_type()) + playsound(defender, 'sound/effects/meteorimpact.ogg', 25, TRUE, -1) + var/throwtarget = get_edge_target_turf(attacker, get_dir(attacker, get_step_away(defender, attacker))) + defender.throw_at(throwtarget, 4, 2, attacker)//So stuff gets tossed around at the same time. + defender.Paralyze(2 SECONDS) + log_combat(attacker, defender, "[atk_verb] (Mushroom Punch)") /obj/item/mushpunch name = "odd mushroom" - desc = "Sapienza Ophioglossoides:An odd mushroom from the flesh of a mushroom person. It has apparently retained some innate power of its owner, as it quivers with barely-contained POWER!" + desc = "Sapienza Ophioglossoides:An odd mushroom from the flesh of a mushroom person. \ + It has apparently retained some innate power of its owner, as it quivers with barely-contained POWER!" icon = 'icons/obj/service/hydroponics/seeds.dmi' icon_state = "mycelium-angel" /obj/item/mushpunch/attack_self(mob/living/user) - if(!istype(user) || !user) + if(!istype(user)) return - var/message = span_spiderbroodmother("You devour [src], and a confluence of skill and power from the mushroom enhances your punches! You do need a short moment to charge these powerful punches.") - to_chat(user, message) - var/datum/martial_art/mushpunch/mush = new(null) + to_chat(user, span_spiderbroodmother("You devour [src], \ + and a confluence of skill and power from the mushroom enhances your punches! \ + You do need a short moment to charge these powerful punches.")) + var/datum/martial_art/mushpunch/mush = new() mush.teach(user) + visible_message( + span_warning("[user] devours [src]."), + span_notice("You devour [src]."), + ) + qdel(src) - visible_message(span_warning("[user] devours [src]."), \ - span_notice("You devour [src].")) diff --git a/code/datums/martial/plasma_fist.dm b/code/datums/martial/plasma_fist.dm index ce2b2e6e2d3..1e278414936 100644 --- a/code/datums/martial/plasma_fist.dm +++ b/code/datums/martial/plasma_fist.dm @@ -10,60 +10,71 @@ var/plasma_power = 1 //starts at a 1, 2, 4 explosion. var/plasma_increment = 1 //how much explosion power gets added per kill (1 = 1, 2, 4. 2 = 2, 4, 8 and so on) var/plasma_cap = 12 //max size explosion level + var/datum/action/cooldown/spell/aoe/repulse/tornado_spell display_combos = TRUE +/datum/martial_art/plasma_fist/New() + . = ..() + tornado_spell = new(src) + +/datum/martial_art/plasma_fist/Destroy() + tornado_spell = null + return ..() + /datum/martial_art/plasma_fist/proc/check_streak(mob/living/attacker, mob/living/defender) if(findtext(streak,TORNADO_COMBO)) if(attacker == defender)//helps using apotheosis return FALSE reset_streak() - Tornado(attacker, defender) - return TRUE + return Tornado(attacker, defender) if(findtext(streak,THROWBACK_COMBO)) if(attacker == defender)//helps using apotheosis return FALSE reset_streak() - Throwback(attacker, defender) - return TRUE + return Throwback(attacker, defender) if(findtext(streak,PLASMA_COMBO)) reset_streak() if(attacker == defender && !nobomb) - Apotheosis(attacker, defender) - else - Plasma(attacker, defender) - return TRUE + return Apotheosis(attacker, defender) + return Plasma(attacker, defender) return FALSE /datum/martial_art/plasma_fist/proc/Tornado(mob/living/attacker, mob/living/defender) attacker.say("TORNADO SWEEP!", forced="plasma fist") - dance_rotate(attacker, CALLBACK(GLOBAL_PROC, GLOBAL_PROC_REF(playsound), attacker.loc, 'sound/weapons/punch1.ogg', 15, TRUE, -1)) - - var/datum/action/cooldown/spell/aoe/repulse/tornado_spell = new(src) + dance_rotate(attacker, CALLBACK(GLOBAL_PROC, GLOBAL_PROC_REF(playsound), attacker, 'sound/weapons/punch1.ogg', 15, TRUE, -1)) tornado_spell.cast(attacker) - qdel(tornado_spell) - - log_combat(attacker, defender, "tornado sweeped(Plasma Fist)") - return + log_combat(attacker, defender, "tornado sweeped (Plasma Fist)") + return TRUE /datum/martial_art/plasma_fist/proc/Throwback(mob/living/attacker, mob/living/defender) - defender.visible_message(span_danger("[attacker] hits [defender] with Plasma Punch!"), \ - span_userdanger("You're hit with a Plasma Punch by [attacker]!"), span_hear("You hear a sickening sound of flesh hitting flesh!"), null, attacker) + defender.visible_message( + span_danger("[attacker] hits [defender] with Plasma Punch!"), + span_userdanger("You're hit with a Plasma Punch by [attacker]!"), + span_hear("You hear a sickening sound of flesh hitting flesh!"), + null, + attacker, + ) to_chat(attacker, span_danger("You hit [defender] with Plasma Punch!")) - playsound(defender.loc, 'sound/weapons/punch1.ogg', 50, TRUE, -1) + playsound(defender, 'sound/weapons/punch1.ogg', 50, TRUE, -1) var/atom/throw_target = get_edge_target_turf(defender, get_dir(defender, get_step_away(defender, attacker))) defender.throw_at(throw_target, 200, 4,attacker) attacker.say("HYAH!", forced="plasma fist") log_combat(attacker, defender, "threw back (Plasma Fist)") - return + return TRUE /datum/martial_art/plasma_fist/proc/Plasma(mob/living/attacker, mob/living/defender) - var/hasclient = defender.client ? TRUE : FALSE + var/hasclient = !!defender.client attacker.do_attack_animation(defender, ATTACK_EFFECT_PUNCH) - playsound(defender.loc, 'sound/weapons/punch1.ogg', 50, TRUE, -1) + playsound(defender, 'sound/weapons/punch1.ogg', 50, TRUE, -1) attacker.say("PLASMA FIST!", forced="plasma fist") - defender.visible_message(span_danger("[attacker] hits [defender] with THE PLASMA FIST TECHNIQUE!"), \ - span_userdanger("You're suddenly hit with THE PLASMA FIST TECHNIQUE by [attacker]!"), span_hear("You hear a sickening sound of flesh hitting flesh!"), null, attacker) + defender.visible_message( + span_danger("[attacker] hits [defender] with THE PLASMA FIST TECHNIQUE!"), + span_userdanger("You're suddenly hit with THE PLASMA FIST TECHNIQUE by [attacker]!"), + span_hear("You hear a sickening sound of flesh hitting flesh!"), + null, + attacker, + ) to_chat(attacker, span_danger("You hit [defender] with THE PLASMA FIST TECHNIQUE!")) log_combat(attacker, defender, "gibbed (Plasma Fist)") var/turf/Dturf = get_turf(defender) @@ -71,13 +82,15 @@ defender.gib(DROP_ALL_REMAINS) if(nobomb) return + if(!hasclient) to_chat(attacker, span_warning("Taking this plasma energy for your [span_notice("Apotheosis")] would bring dishonor to the clan!")) new /obj/effect/temp_visual/plasma_soul(Dturf)//doesn't beam to you, so it just hangs around and poofs. - return + else if(plasma_power >= plasma_cap) to_chat(attacker, span_warning("You cannot power up your [span_notice("Apotheosis")] any more!")) new /obj/effect/temp_visual/plasma_soul(Dturf)//doesn't beam to you, so it just hangs around and poofs. + else plasma_power += plasma_increment to_chat(attacker, span_nicegreen("Power increasing! Your [span_notice("Apotheosis")] is now at power level [plasma_power]!")) @@ -87,6 +100,7 @@ flash_color(attacker, flash_color = "#9C00FF", flash_time = 3 SECONDS) animate(attacker, color = oldcolor, time = 3 SECONDS) + return TRUE /datum/martial_art/plasma_fist/proc/Apotheosis(mob/living/user, mob/living/target) user.say("APOTHEOSIS!!", forced="plasma fist") @@ -109,12 +123,13 @@ to_chat(user, span_userdanger("The explosion knocks your soul out of your body!")) user.ghostize(FALSE) //prevents... horrible memes just believe me - user.apply_damage(rand(50,70), BRUTE) + user.apply_damage(rand(50, 70), BRUTE, wound_bonus = CANT_WOUND) addtimer(CALLBACK(src, PROC_REF(Apotheosis_end), user), 6 SECONDS) playsound(boomspot, 'sound/weapons/punch1.ogg', 50, TRUE, -1) explosion(user, devastation_range = plasma_power, heavy_impact_range = plasma_power*2, light_impact_range = plasma_power*4, ignorecap = TRUE, explosion_cause = src) plasma_power = 1 //just in case there is any clever way to cause it to happen again + return TRUE /datum/martial_art/plasma_fist/proc/Apotheosis_end(mob/living/dying) dying.remove_traits(list(TRAIT_FORCED_STANDING, TRAIT_BOMBIMMUNE), type) @@ -124,24 +139,29 @@ dying.death() /datum/martial_art/plasma_fist/harm_act(mob/living/attacker, mob/living/defender) + if(defender.check_block(attacker, 10, attacker.name, UNARMED_ATTACK)) + return MARTIAL_ATTACK_FAIL + add_to_streak("H", defender) - if(check_streak(attacker, defender)) - return TRUE - return FALSE + return check_streak(attacker, defender) ? MARTIAL_ATTACK_SUCCESS : MARTIAL_ATTACK_INVALID /datum/martial_art/plasma_fist/disarm_act(mob/living/attacker, mob/living/defender) + if(defender.check_block(attacker, 0, attacker.name, UNARMED_ATTACK)) + return MARTIAL_ATTACK_FAIL add_to_streak("D", defender) if(check_streak(attacker, defender)) - return TRUE + return MARTIAL_ATTACK_SUCCESS if(attacker == defender)//there is no disarming yourself, so we need to let plasma fist user know to_chat(attacker, span_notice("You have added a disarm to your streak.")) - return FALSE + return MARTIAL_ATTACK_FAIL + return MARTIAL_ATTACK_INVALID /datum/martial_art/plasma_fist/grab_act(mob/living/attacker, mob/living/defender) + if(defender.check_block(attacker, 0, "[attacker]'s grab", UNARMED_ATTACK)) + return MARTIAL_ATTACK_FAIL + add_to_streak("G", defender) - if(check_streak(attacker, defender)) - return TRUE - return FALSE + return check_streak(attacker, defender) ? MARTIAL_ATTACK_SUCCESS : MARTIAL_ATTACK_INVALID /mob/living/proc/plasma_fist_help() set name = "Recall Teachings" diff --git a/code/datums/martial/psychotic_brawl.dm b/code/datums/martial/psychotic_brawl.dm index 671867f4252..9ba78f9ef45 100644 --- a/code/datums/martial/psychotic_brawl.dm +++ b/code/datums/martial/psychotic_brawl.dm @@ -24,6 +24,11 @@ attacker.Stun(2 SECONDS) atk_verb = "cried looking at" if(3) + if(defender.check_block(attacker, 0, "[attacker]'s grab", UNARMED_ATTACK)) + return MARTIAL_ATTACK_FAIL + if(attacker.body_position == LYING_DOWN) + return MARTIAL_ATTACK_INVALID + if(attacker.grab_state >= GRAB_AGGRESSIVE) defender.grabbedby(attacker, 1) else @@ -33,22 +38,37 @@ defender.stop_pulling() if(grab_attack) log_combat(attacker, defender, "grabbed", addition="aggressively") - defender.visible_message(span_warning("[attacker] violently grabs [defender]!"), \ - span_userdanger("You're violently grabbed by [attacker]!"), span_hear("You hear sounds of aggressive fondling!"), null, attacker) + defender.visible_message( + span_warning("[attacker] violently grabs [defender]!"), + span_userdanger("You're violently grabbed by [attacker]!"), + span_hear("You hear sounds of aggressive fondling!"), + null, + attacker, + ) to_chat(attacker, span_danger("You violently grab [defender]!")) attacker.setGrabState(GRAB_AGGRESSIVE) //Instant aggressive grab else log_combat(attacker, defender, "grabbed", addition="passively") attacker.setGrabState(GRAB_PASSIVE) if(4) - attacker.do_attack_animation(defender, ATTACK_EFFECT_PUNCH) atk_verb = "headbutt" - defender.visible_message(span_danger("[attacker] [atk_verb]s [defender]!"), \ - span_userdanger("You're [atk_verb]ed by [attacker]!"), span_hear("You hear a sickening sound of flesh hitting flesh!"), null, attacker) + var/defender_damage = rand(5, 10) + if(defender.check_block(attacker, defender_damage, "[attacker]'s [atk_verb]", UNARMED_ATTACK)) + return MARTIAL_ATTACK_FAIL + + attacker.do_attack_animation(defender, ATTACK_EFFECT_PUNCH) + attacker.emote("flip") + defender.visible_message( + span_danger("[attacker] [atk_verb]s [defender]!"), + span_userdanger("You're [atk_verb]ed by [attacker]!"), + span_hear("You hear a sickening sound of flesh hitting flesh!"), + null, + attacker, + ) to_chat(attacker, span_danger("You [atk_verb] [defender]!")) - playsound(get_turf(defender), 'sound/weapons/punch1.ogg', 40, TRUE, -1) - defender.apply_damage(rand(5,10), attacker.get_attack_type(), BODY_ZONE_HEAD) - attacker.apply_damage(rand(5,10), attacker.get_attack_type(), BODY_ZONE_HEAD) + playsound(defender, 'sound/weapons/punch1.ogg', 40, TRUE, -1) + defender.apply_damage(defender_damage, attacker.get_attack_type(), BODY_ZONE_HEAD) + attacker.apply_damage(rand(5, 10), attacker.get_attack_type(), BODY_ZONE_HEAD) if(iscarbon(defender)) var/mob/living/carbon/carbon_defender = defender if(!istype(carbon_defender.head, /obj/item/clothing/head/helmet/) && !istype(carbon_defender.head, /obj/item/clothing/head/utility/hardhat)) @@ -56,19 +76,29 @@ attacker.Stun(rand(1 SECONDS, 4.5 SECONDS)) defender.Stun(rand(0.5 SECONDS, 3 SECONDS)) if(5,6) - attacker.do_attack_animation(defender, ATTACK_EFFECT_PUNCH) atk_verb = pick("kick", "hit", "slam") - defender.visible_message(span_danger("[attacker] [atk_verb]s [defender] with such inhuman strength that it sends [defender.p_them()] flying backwards!"), \ - span_userdanger("You're [atk_verb]ed by [attacker] with such inhuman strength that it sends you flying backwards!"), span_hear("You hear a sickening sound of flesh hitting flesh!"), null, attacker) + if(defender.check_block(attacker, 0, "[attacker]'s [atk_verb]", UNARMED_ATTACK)) + return MARTIAL_ATTACK_FAIL + + attacker.do_attack_animation(defender, ATTACK_EFFECT_PUNCH) + defender.visible_message( + span_danger("[attacker] [atk_verb]s [defender] with such inhuman strength that it sends [defender.p_them()] flying backwards!"), + span_userdanger("You're [atk_verb]ed by [attacker] with such inhuman strength that it sends you flying backwards!"), + span_hear("You hear a sickening sound of flesh hitting flesh!"), + null, + attacker, + ) to_chat(attacker, span_danger("You [atk_verb] [defender] with such inhuman strength that it sends [defender.p_them()] flying backwards!")) - defender.apply_damage(rand(15,30), attacker.get_attack_type()) - playsound(get_turf(defender), 'sound/effects/meteorimpact.ogg', 25, TRUE, -1) + defender.apply_damage(rand(15, 30), attacker.get_attack_type()) + playsound(defender, 'sound/effects/meteorimpact.ogg', 25, TRUE, -1) var/throwtarget = get_edge_target_turf(attacker, get_dir(attacker, get_step_away(defender, attacker))) defender.throw_at(throwtarget, 4, 2, attacker)//So stuff gets tossed around at the same time. defender.Paralyze(6 SECONDS) if(7,8) - return FALSE //Resume default behaviour + return MARTIAL_ATTACK_INVALID //Resume default behaviour if(atk_verb) log_combat(attacker, defender, "[atk_verb] (Psychotic Brawling)") - return TRUE + return MARTIAL_ATTACK_SUCCESS + + return MARTIAL_ATTACK_FAIL diff --git a/code/datums/martial/sleeping_carp.dm b/code/datums/martial/sleeping_carp.dm index 272cb54c8db..0dd7b6dd327 100644 --- a/code/datums/martial/sleeping_carp.dm +++ b/code/datums/martial/sleeping_carp.dm @@ -8,69 +8,77 @@ allow_temp_override = FALSE help_verb = /mob/living/proc/sleeping_carp_help display_combos = TRUE + /// List of traits applied to users of this martial art. var/list/scarp_traits = list(TRAIT_NOGUNS, TRAIT_HARDLY_WOUNDED, TRAIT_NODISMEMBER, TRAIT_HEAVY_SLEEPER) -/datum/martial_art/the_sleeping_carp/teach(mob/living/target, make_temporary = FALSE) - . = ..() - if(!.) - return - target.add_traits(scarp_traits, SLEEPING_CARP_TRAIT) - RegisterSignal(target, COMSIG_ATOM_ATTACKBY, PROC_REF(on_attackby)) - RegisterSignal(target, COMSIG_ATOM_PRE_BULLET_ACT, PROC_REF(hit_by_projectile)) - target.faction |= FACTION_CARP //:D - -/datum/martial_art/the_sleeping_carp/on_remove(mob/living/target) - target.remove_traits(scarp_traits, SLEEPING_CARP_TRAIT) - UnregisterSignal(target, COMSIG_ATOM_ATTACKBY) - UnregisterSignal(target, COMSIG_ATOM_PRE_BULLET_ACT) - target.faction -= FACTION_CARP //:( +/datum/martial_art/the_sleeping_carp/on_teach(mob/living/new_holder) . = ..() + new_holder.add_traits(scarp_traits, SLEEPING_CARP_TRAIT) + RegisterSignal(new_holder, COMSIG_ATOM_ATTACKBY, PROC_REF(on_attackby)) + RegisterSignal(new_holder, COMSIG_ATOM_PRE_BULLET_ACT, PROC_REF(hit_by_projectile)) + new_holder.faction |= FACTION_CARP //:D + +/datum/martial_art/the_sleeping_carp/on_remove(mob/living/remove_from) + remove_from.remove_traits(scarp_traits, SLEEPING_CARP_TRAIT) + UnregisterSignal(remove_from, list(COMSIG_ATOM_ATTACKBY, COMSIG_ATOM_PRE_BULLET_ACT)) + remove_from.faction -= FACTION_CARP //:( + return ..() /datum/martial_art/the_sleeping_carp/proc/check_streak(mob/living/attacker, mob/living/defender) if(findtext(streak,STRONG_PUNCH_COMBO)) reset_streak() - strongPunch(attacker, defender) - return TRUE + return strongPunch(attacker, defender) + if(findtext(streak,LAUNCH_KICK_COMBO)) reset_streak() - launchKick(attacker, defender) - return TRUE + return launchKick(attacker, defender) + if(findtext(streak,DROP_KICK_COMBO)) reset_streak() - dropKick(attacker, defender) - return TRUE + return dropKick(attacker, defender) + return FALSE ///Gnashing Teeth: Harm Harm, consistent 20 force punch on every second harm punch /datum/martial_art/the_sleeping_carp/proc/strongPunch(mob/living/attacker, mob/living/defender) - ///this var is so that the strong punch is always aiming for the body part the user is targeting and not trying to apply to the chest before deviating + // this var is so that the strong punch is always aiming for the body part the user is targeting and not trying to apply to the chest before deviating var/obj/item/bodypart/affecting = defender.get_bodypart(defender.get_random_valid_zone(attacker.zone_selected)) attacker.do_attack_animation(defender, ATTACK_EFFECT_PUNCH) var/atk_verb = pick("precisely kick", "brutally chop", "cleanly hit", "viciously slam") - defender.visible_message(span_danger("[attacker] [atk_verb]s [defender]!"), \ - span_userdanger("[attacker] [atk_verb]s you!"), null, null, attacker) + defender.visible_message( + span_danger("[attacker] [atk_verb]s [defender]!"), + span_userdanger("[attacker] [atk_verb]s you!"), + span_hear("You hear a sickening sound of flesh hitting flesh!"), + null, + attacker, + ) to_chat(attacker, span_danger("You [atk_verb] [defender]!")) playsound(defender, 'sound/weapons/punch1.ogg', 25, TRUE, -1) log_combat(attacker, defender, "strong punched (Sleeping Carp)") defender.apply_damage(20, attacker.get_attack_type(), affecting) - return + return TRUE ///Crashing Wave Kick: Harm Disarm combo, throws people seven tiles backwards /datum/martial_art/the_sleeping_carp/proc/launchKick(mob/living/attacker, mob/living/defender) attacker.do_attack_animation(defender, ATTACK_EFFECT_KICK) - defender.visible_message(span_warning("[attacker] kicks [defender] square in the chest, sending them flying!"), \ - span_userdanger("You are kicked square in the chest by [attacker], sending you flying!"), span_hear("You hear a sickening sound of flesh hitting flesh!"), COMBAT_MESSAGE_RANGE, attacker) - playsound(get_turf(attacker), 'sound/effects/hit_kick.ogg', 50, TRUE, -1) + defender.visible_message( + span_warning("[attacker] kicks [defender] square in the chest, sending them flying!"), + span_userdanger("You are kicked square in the chest by [attacker], sending you flying!"), + span_hear("You hear a sickening sound of flesh hitting flesh!"), + COMBAT_MESSAGE_RANGE, + attacker, + ) + playsound(attacker, 'sound/effects/hit_kick.ogg', 50, TRUE, -1) var/atom/throw_target = get_edge_target_turf(defender, attacker.dir) defender.throw_at(throw_target, 7, 4, attacker) defender.apply_damage(15, attacker.get_attack_type(), BODY_ZONE_CHEST, wound_bonus = CANT_WOUND) log_combat(attacker, defender, "launchkicked (Sleeping Carp)") - return + return TRUE ///Keelhaul: Disarm Disarm combo, knocks people down and deals substantial stamina damage, and also discombobulates them. Knocks objects out of their hands if they're already on the ground. /datum/martial_art/the_sleeping_carp/proc/dropKick(mob/living/attacker, mob/living/defender) attacker.do_attack_animation(defender, ATTACK_EFFECT_KICK) - playsound(get_turf(attacker), 'sound/effects/hit_kick.ogg', 50, TRUE, -1) + playsound(attacker, 'sound/effects/hit_kick.ogg', 50, TRUE, -1) if(defender.body_position == STANDING_UP) defender.Knockdown(4 SECONDS) defender.visible_message(span_warning("[attacker] kicks [defender] in the head, sending them face first into the floor!"), \ @@ -83,33 +91,41 @@ defender.adjust_dizzy_up_to(10 SECONDS, 10 SECONDS) defender.adjust_temp_blindness_up_to(2 SECONDS, 10 SECONDS) log_combat(attacker, defender, "dropkicked (Sleeping Carp)") - return + return TRUE /datum/martial_art/the_sleeping_carp/grab_act(mob/living/attacker, mob/living/defender) if(!can_deflect(attacker)) //allows for deniability - return ..() + return MARTIAL_ATTACK_INVALID + + if(defender.check_block(attacker, 0, "[attacker]'s grab", UNARMED_ATTACK)) + return MARTIAL_ATTACK_FAIL add_to_streak("G", defender) if(check_streak(attacker, defender)) - return TRUE + return MARTIAL_ATTACK_SUCCESS + var/grab_log_description = "grabbed" attacker.do_attack_animation(defender, ATTACK_EFFECT_PUNCH) playsound(defender, 'sound/weapons/punch1.ogg', 25, TRUE, -1) if(defender.stat != DEAD && !defender.IsUnconscious() && defender.getStaminaLoss() >= 80) //We put our target to sleep. defender.visible_message( - span_danger("[attacker] carefully pinch a nerve in [defender]'s neck, knocking them out cold"), + span_danger("[attacker] carefully pinch a nerve in [defender]'s neck, knocking them out cold!"), span_userdanger("[attacker] pinches something in your neck, and you fall unconscious!"), ) grab_log_description = "grabbed and nerve pinched" defender.Unconscious(10 SECONDS) defender.apply_damage(20, STAMINA) log_combat(attacker, defender, "[grab_log_description] (Sleeping Carp)") - return ..() + return MARTIAL_ATTACK_INVALID // normal grab /datum/martial_art/the_sleeping_carp/harm_act(mob/living/attacker, mob/living/defender) - if((attacker.grab_state == GRAB_KILL) && attacker.zone_selected == BODY_ZONE_HEAD && defender.stat != DEAD) - var/obj/item/bodypart/head = defender.get_bodypart("head") - if(head) + if(attacker.grab_state == GRAB_KILL \ + && attacker.zone_selected == BODY_ZONE_HEAD \ + && attacker.pulling == defender \ + && defender.stat != DEAD \ + ) + var/obj/item/bodypart/head = defender.get_bodypart(BODY_ZONE_HEAD) + if(!isnull(head)) playsound(defender, 'sound/effects/wounds/crack1.ogg', 100) defender.visible_message( span_danger("[attacker] snaps the neck of [defender]!"), @@ -123,37 +139,47 @@ if(!HAS_TRAIT(defender, TRAIT_NODEATH)) defender.death() defender.investigate_log("has had [defender.p_their()] neck snapped by [attacker].", INVESTIGATE_DEATHS) + return MARTIAL_ATTACK_SUCCESS + + var/atk_verb = pick("kick", "chop", "hit", "slam") + var/final_damage = rand(10, 15) + if(defender.check_block(attacker, final_damage, "[attacker]'s [atk_verb]", UNARMED_ATTACK)) + return MARTIAL_ATTACK_FAIL + add_to_streak("H", defender) if(check_streak(attacker, defender)) - return TRUE + return MARTIAL_ATTACK_SUCCESS var/obj/item/bodypart/affecting = defender.get_bodypart(defender.get_random_valid_zone(attacker.zone_selected)) attacker.do_attack_animation(defender, ATTACK_EFFECT_PUNCH) - var/atk_verb = pick("kick", "chop", "hit", "slam") - defender.visible_message(span_danger("[attacker] [atk_verb]s [defender]!"), \ - span_userdanger("[attacker] [atk_verb]s you!"), null, null, attacker) + defender.visible_message( + span_danger("[attacker] [atk_verb]s [defender]!"), + span_userdanger("[attacker] [atk_verb]s you!"), + span_hear("You hear a sickening sound of flesh hitting flesh!"), + null, + attacker, + ) to_chat(attacker, span_danger("You [atk_verb] [defender]!")) - - defender.apply_damage(rand(10,15), attacker.get_attack_type(), affecting, wound_bonus = CANT_WOUND) + defender.apply_damage(final_damage, attacker.get_attack_type(), affecting, wound_bonus = CANT_WOUND) playsound(defender, 'sound/weapons/punch1.ogg', 25, TRUE, -1) log_combat(attacker, defender, "punched (Sleeping Carp)") - - return TRUE + return MARTIAL_ATTACK_SUCCESS /datum/martial_art/the_sleeping_carp/disarm_act(mob/living/attacker, mob/living/defender) if(!can_deflect(attacker)) //allows for deniability - return ..() + return MARTIAL_ATTACK_INVALID + if(defender.check_block(attacker, 0, attacker.name, UNARMED_ATTACK)) + return MARTIAL_ATTACK_FAIL add_to_streak("D", defender) if(check_streak(attacker, defender)) - return TRUE + return MARTIAL_ATTACK_SUCCESS attacker.do_attack_animation(defender, ATTACK_EFFECT_PUNCH) playsound(defender, 'sound/weapons/punch1.ogg', 25, TRUE, -1) defender.apply_damage(20, STAMINA) log_combat(attacker, defender, "disarmed (Sleeping Carp)") - - return ..() + return MARTIAL_ATTACK_INVALID // normal disarm /datum/martial_art/the_sleeping_carp/proc/can_deflect(mob/living/carp_user) if(!can_use(carp_user) || !carp_user.throw_mode) //FF EDIT, old: if(!can_use(carp_user) || !carp_user.throw_mode) @@ -297,6 +323,37 @@ return ..() return FALSE +/obj/item/clothing/gloves/the_sleeping_carp + name = "carp gloves" + desc = "This gloves are capable of making people use The Sleeping Carp." + icon_state = "black" + greyscale_colors = "#000000" + cold_protection = HANDS + min_cold_protection_temperature = GLOVES_MIN_TEMP_PROTECT + heat_protection = HANDS + max_heat_protection_temperature = GLOVES_MAX_TEMP_PROTECT + resistance_flags = NONE + var/datum/martial_art/the_sleeping_carp/style + +/obj/item/clothing/gloves/the_sleeping_carp/Initialize(mapload) + . = ..() + style = new() + style.allow_temp_override = FALSE + +/obj/item/clothing/gloves/the_sleeping_carp/Destroy() + QDEL_NULL(style) + return ..() + +/obj/item/clothing/gloves/the_sleeping_carp/equipped(mob/user, slot) + . = ..() + if(slot & ITEM_SLOT_GLOVES) + style.teach(user, TRUE) + +/obj/item/clothing/gloves/the_sleeping_carp/dropped(mob/user) + . = ..() + if(!isnull(style)) + style.fully_remove(user) + #undef STRONG_PUNCH_COMBO #undef LAUNCH_KICK_COMBO #undef DROP_KICK_COMBO diff --git a/code/datums/martial/wrestling.dm b/code/datums/martial/wrestling.dm index a28c2e75646..23591852ec9 100644 --- a/code/datums/martial/wrestling.dm +++ b/code/datums/martial/wrestling.dm @@ -18,13 +18,32 @@ If you make a derivative work from this code, you must include this notification /datum/martial_art/wrestling name = "Wrestling" id = MARTIALART_WRESTLING - var/datum/action/slam/slam = new/datum/action/slam() - var/datum/action/throw_wrassle/throw_wrassle = new/datum/action/throw_wrassle() - var/datum/action/kick/kick = new/datum/action/kick() - var/datum/action/strike/strike = new/datum/action/strike() - var/datum/action/drop/drop = new/datum/action/drop() + VAR_PRIVATE/datum/action/slam/slam + VAR_PRIVATE/datum/action/throw_wrassle/throw_wrassle + VAR_PRIVATE/datum/action/kick/kick + VAR_PRIVATE/datum/action/strike/strike + VAR_PRIVATE/datum/action/drop/drop + +/datum/martial_art/wrestling/New() + . = ..() + slam = new(src) + throw_wrassle = new(src) + kick = new(src) + strike = new(src) + drop = new(src) + +/datum/martial_art/wrestling/Destroy() + slam = null + throw_wrassle = null + kick = null + strike = null + drop = null + return ..() /datum/martial_art/wrestling/proc/check_streak(mob/living/attacker, mob/living/defender) + if(defender.check_block(attacker, 10, "[attacker]'s [streak]", UNARMED_ATTACK)) + return FALSE + switch(streak) if("drop") streak = "" @@ -51,10 +70,11 @@ If you make a derivative work from this code, you must include this notification /datum/action/slam name = "Slam (Cinch) - Slam a grappled opponent into the floor." button_icon_state = "wrassle_slam" + check_flags = AB_CHECK_INCAPACITATED|AB_CHECK_HANDS_BLOCKED|AB_CHECK_CONSCIOUS /datum/action/slam/Trigger(trigger_flags) - if(owner.incapacitated()) - to_chat(owner, span_warning("You can't WRESTLE while you're OUT FOR THE COUNT.")) + . = ..() + if(!.) return owner.visible_message(span_danger("[owner] prepares to BODY SLAM!"), "Your next attack will be a BODY SLAM.") owner.mind.martial_art.streak = "slam" @@ -62,10 +82,11 @@ If you make a derivative work from this code, you must include this notification /datum/action/throw_wrassle name = "Throw (Cinch) - Spin a cinched opponent around and throw them." button_icon_state = "wrassle_throw" + check_flags = AB_CHECK_INCAPACITATED|AB_CHECK_HANDS_BLOCKED|AB_CHECK_CONSCIOUS /datum/action/throw_wrassle/Trigger(trigger_flags) - if(owner.incapacitated()) - to_chat(owner, span_warning("You can't WRESTLE while you're OUT FOR THE COUNT.")) + . = ..() + if(!.) return owner.visible_message(span_danger("[owner] prepares to THROW!"), "Your next attack will be a THROW.") owner.mind.martial_art.streak = "throw" @@ -73,10 +94,11 @@ If you make a derivative work from this code, you must include this notification /datum/action/kick name = "Kick - A powerful kick, sends people flying away from you. Also useful for escaping from bad situations." button_icon_state = "wrassle_kick" + check_flags = AB_CHECK_INCAPACITATED|AB_CHECK_CONSCIOUS // This is supposed to be usable while cuffed but it probably isn't /datum/action/kick/Trigger(trigger_flags) - if(owner.incapacitated()) - to_chat(owner, span_warning("You can't WRESTLE while you're OUT FOR THE COUNT.")) + . = ..() + if(!.) return owner.visible_message(span_danger("[owner] prepares to KICK!"), "Your next attack will be a KICK.") owner.mind.martial_art.streak = "kick" @@ -84,10 +106,11 @@ If you make a derivative work from this code, you must include this notification /datum/action/strike name = "Strike - Hit a neaby opponent with a quick attack." button_icon_state = "wrassle_strike" + check_flags = AB_CHECK_INCAPACITATED|AB_CHECK_HANDS_BLOCKED|AB_CHECK_CONSCIOUS /datum/action/strike/Trigger(trigger_flags) - if(owner.incapacitated()) - to_chat(owner, span_warning("You can't WRESTLE while you're OUT FOR THE COUNT.")) + . = ..() + if(!.) return owner.visible_message(span_danger("[owner] prepares to STRIKE!"), "Your next attack will be a STRIKE.") owner.mind.martial_art.streak = "strike" @@ -95,37 +118,36 @@ If you make a derivative work from this code, you must include this notification /datum/action/drop name = "Drop - Smash down onto an opponent." button_icon_state = "wrassle_drop" + check_flags = AB_CHECK_INCAPACITATED|AB_CHECK_HANDS_BLOCKED /datum/action/drop/Trigger(trigger_flags) - if(owner.incapacitated()) - to_chat(owner, span_warning("You can't WRESTLE while you're OUT FOR THE COUNT.")) + . = ..() + if(!.) return owner.visible_message(span_danger("[owner] prepares to LEG DROP!"), "Your next attack will be a LEG DROP.") owner.mind.martial_art.streak = "drop" -/datum/martial_art/wrestling/teach(mob/living/owner, make_temporary=FALSE) - if(..()) - to_chat(owner, span_userdanger("SNAP INTO A THIN TIM!")) - to_chat(owner, span_danger("Place your cursor over a move at the top of the screen to see what it does.")) - drop.Grant(owner) - kick.Grant(owner) - slam.Grant(owner) - throw_wrassle.Grant(owner) - strike.Grant(owner) - -/datum/martial_art/wrestling/on_remove(mob/living/owner) - to_chat(owner, span_userdanger("You no longer feel that the tower of power is too sweet to be sour...")) - drop.Remove(owner) - kick.Remove(owner) - slam.Remove(owner) - throw_wrassle.Remove(owner) - strike.Remove(owner) +/datum/martial_art/wrestling/on_teach(mob/living/new_holder) + . = ..() + to_chat(new_holder, span_userdanger("SNAP INTO A THIN TIM!")) + to_chat(new_holder, span_danger("Place your cursor over a move at the top of the screen to see what it does.")) + drop.Grant(new_holder) + kick.Grant(new_holder) + slam.Grant(new_holder) + throw_wrassle.Grant(new_holder) + strike.Grant(new_holder) + +/datum/martial_art/wrestling/on_remove(mob/living/remove_from) + to_chat(remove_from, span_userdanger("You no longer feel that the tower of power is too sweet to be sour...")) + drop?.Remove(remove_from) + kick?.Remove(remove_from) + slam?.Remove(remove_from) + throw_wrassle?.Remove(remove_from) + strike?.Remove(remove_from) + return ..() /datum/martial_art/wrestling/harm_act(mob/living/attacker, mob/living/defender) - if(check_streak(attacker, defender)) - return 1 - log_combat(attacker, defender, "punched with wrestling") - ..() + return check_streak(attacker, defender) ? MARTIAL_ATTACK_SUCCESS : MARTIAL_ATTACK_INVALID /datum/martial_art/wrestling/proc/throw_wrassle(mob/living/attacker, mob/living/defender) if(!defender) @@ -444,36 +466,46 @@ If you make a derivative work from this code, you must include this notification return /datum/martial_art/wrestling/disarm_act(mob/living/attacker, mob/living/defender) - if(check_streak(attacker, defender)) - return 1 - log_combat(attacker, defender, "wrestling-disarmed") - ..() + return check_streak(attacker, defender) ? MARTIAL_ATTACK_SUCCESS : MARTIAL_ATTACK_INVALID /datum/martial_art/wrestling/grab_act(mob/living/attacker, mob/living/defender) if(check_streak(attacker, defender)) - return 1 + return MARTIAL_ATTACK_SUCCESS + if(defender.check_block(attacker, 0, "[attacker]'s grab", UNARMED_ATTACK)) + return MARTIAL_ATTACK_FAIL if(attacker.pulling == defender) - return 1 + return MARTIAL_ATTACK_FAIL attacker.start_pulling(defender) - defender.visible_message(span_danger("[attacker] gets [defender] in a cinch!"), \ - span_userdanger("You're put into a cinch by [attacker]!"), span_hear("You hear aggressive shuffling!"), COMBAT_MESSAGE_RANGE, attacker) + defender.visible_message( + span_danger("[attacker] gets [defender] in a cinch!"), + span_userdanger("You're put into a cinch by [attacker]!"), + span_hear("You hear aggressive shuffling!"), + COMBAT_MESSAGE_RANGE, + attacker, + ) to_chat(attacker, span_danger("You get [defender] in a cinch!")) defender.Stun(rand(6 SECONDS, 10 SECONDS)) log_combat(attacker, defender, "cinched") - return 1 + return MARTIAL_ATTACK_SUCCESS /obj/item/storage/belt/champion/wrestling name = "Wrestling Belt" - var/datum/martial_art/wrestling/style = new + var/datum/martial_art/wrestling/style + +/obj/item/storage/belt/champion/wrestling/Initialize(mapload) + . = ..() + style = new() + style.allow_temp_override = FALSE + +/obj/item/storage/belt/champion/wrestling/Destroy() + QDEL_NULL(style) + return ..() /obj/item/storage/belt/champion/wrestling/equipped(mob/user, slot) . = ..() if(slot & ITEM_SLOT_BELT) style.teach(user, TRUE) - return /obj/item/storage/belt/champion/wrestling/dropped(mob/user) . = ..() - if(user.get_item_by_slot(ITEM_SLOT_BELT) == src) - style.remove(user) - return + style.fully_remove(user) diff --git a/code/datums/materials/_material.dm b/code/datums/materials/_material.dm index 396b902b73f..da5a15b8d31 100644 --- a/code/datums/materials/_material.dm +++ b/code/datums/materials/_material.dm @@ -29,6 +29,8 @@ Simple datum which is instanced once per type and is used for every object of sa var/list/categories = list() ///The type of sheet this material creates. This should be replaced as soon as possible by greyscale sheets var/sheet_type + /// What type of ore is this material associated with? Used for mining, and not every material has one. + var/obj/item/ore_type ///This is a modifier for force, and resembles the strength of the material var/strength_modifier = 1 ///This is a modifier for integrity, and resembles the strength of the material @@ -59,6 +61,10 @@ Simple datum which is instanced once per type and is used for every object of sa var/obj/item/shard_type ///What type of debris the tile will leave behind when shattered. var/obj/effect/decal/debris_type + /// How likely this mineral is to be found in a boulder during mining. + var/mineral_rarity = MATERIAL_RARITY_COMMON + /// How many points per units of ore does this grant? + var/points_per_unit = 1 /** Handles initializing the material. * diff --git a/code/datums/materials/basemats.dm b/code/datums/materials/basemats.dm index f79b9f7e422..3c5f6ab62d0 100644 --- a/code/datums/materials/basemats.dm +++ b/code/datums/materials/basemats.dm @@ -6,7 +6,10 @@ greyscale_colors = "#878687" categories = list(MAT_CATEGORY_ORE = TRUE, MAT_CATEGORY_RIGID = TRUE, MAT_CATEGORY_BASE_RECIPES = TRUE, MAT_CATEGORY_ITEM_MATERIAL=TRUE) sheet_type = /obj/item/stack/sheet/iron + ore_type = /obj/item/stack/ore/iron value_per_unit = 5 / SHEET_MATERIAL_AMOUNT + mineral_rarity = MATERIAL_RARITY_COMMON + points_per_unit = 1 / SHEET_MATERIAL_AMOUNT minimum_value_override = 0 tradable = TRUE tradable_base_quantity = MATERIAL_QUANTITY_COMMON @@ -25,6 +28,7 @@ categories = list(MAT_CATEGORY_RIGID = TRUE, MAT_CATEGORY_BASE_RECIPES = TRUE, MAT_CATEGORY_ITEM_MATERIAL=TRUE) integrity_modifier = 0.1 sheet_type = /obj/item/stack/sheet/glass + ore_type = /obj/item/stack/ore/glass shard_type = /obj/item/shard debris_type = /obj/effect/decal/cleanable/glass value_per_unit = 5 / SHEET_MATERIAL_AMOUNT @@ -33,6 +37,8 @@ tradable_base_quantity = MATERIAL_QUANTITY_COMMON beauty_modifier = 0.05 armor_modifiers = list(MELEE = 0.2, BULLET = 0.2, ENERGY = 1, BIO = 0.2, FIRE = 1, ACID = 0.2) + mineral_rarity = MATERIAL_RARITY_COMMON + points_per_unit = 1 / SHEET_MATERIAL_AMOUNT /datum/material/glass/on_accidental_mat_consumption(mob/living/carbon/victim, obj/item/source_item) victim.apply_damage(10, BRUTE, BODY_ZONE_HEAD, wound_bonus = 5, sharpness = TRUE) //cronch @@ -61,10 +67,13 @@ Unless you know what you're doing, only use the first three numbers. They're in greyscale_colors = "#e3f1f8" categories = list(MAT_CATEGORY_ORE = TRUE, MAT_CATEGORY_RIGID = TRUE, MAT_CATEGORY_BASE_RECIPES = TRUE, MAT_CATEGORY_ITEM_MATERIAL=TRUE) sheet_type = /obj/item/stack/sheet/mineral/silver + ore_type = /obj/item/stack/ore/silver value_per_unit = 50 / SHEET_MATERIAL_AMOUNT tradable = TRUE tradable_base_quantity = MATERIAL_QUANTITY_UNCOMMON beauty_modifier = 0.075 + mineral_rarity = MATERIAL_RARITY_SEMIPRECIOUS + points_per_unit = 16 / SHEET_MATERIAL_AMOUNT /datum/material/silver/on_accidental_mat_consumption(mob/living/carbon/victim, obj/item/source_item) victim.apply_damage(10, BRUTE, BODY_ZONE_HEAD, wound_bonus = 5) @@ -79,11 +88,14 @@ Unless you know what you're doing, only use the first three numbers. They're in strength_modifier = 1.2 categories = list(MAT_CATEGORY_ORE = TRUE, MAT_CATEGORY_RIGID = TRUE, MAT_CATEGORY_BASE_RECIPES = TRUE, MAT_CATEGORY_ITEM_MATERIAL=TRUE) sheet_type = /obj/item/stack/sheet/mineral/gold + ore_type = /obj/item/stack/ore/gold value_per_unit = 125 / SHEET_MATERIAL_AMOUNT tradable = TRUE tradable_base_quantity = MATERIAL_QUANTITY_RARE beauty_modifier = 0.15 armor_modifiers = list(MELEE = 1.1, BULLET = 1.1, LASER = 1.15, ENERGY = 1.15, BOMB = 1, BIO = 1, FIRE = 0.7, ACID = 1.1) + mineral_rarity = MATERIAL_RARITY_PRECIOUS + points_per_unit = 18 / SHEET_MATERIAL_AMOUNT /datum/material/gold/on_accidental_mat_consumption(mob/living/carbon/victim, obj/item/source_item) victim.apply_damage(10, BRUTE, BODY_ZONE_HEAD, wound_bonus = 5) @@ -97,6 +109,7 @@ Unless you know what you're doing, only use the first three numbers. They're in greyscale_colors = "#71c8f784" categories = list(MAT_CATEGORY_ORE = TRUE, MAT_CATEGORY_RIGID = TRUE, MAT_CATEGORY_BASE_RECIPES = TRUE, MAT_CATEGORY_ITEM_MATERIAL=TRUE) sheet_type = /obj/item/stack/sheet/mineral/diamond + ore_type = /obj/item/stack/ore/diamond alpha = 132 starlight_color = COLOR_BLUE_LIGHT value_per_unit = 500 / SHEET_MATERIAL_AMOUNT @@ -104,6 +117,8 @@ Unless you know what you're doing, only use the first three numbers. They're in tradable_base_quantity = MATERIAL_QUANTITY_EXOTIC beauty_modifier = 0.3 armor_modifiers = list(MELEE = 1.3, BULLET = 1.3, LASER = 0.6, ENERGY = 1, BOMB = 1.2, BIO = 1, FIRE = 1, ACID = 1) + mineral_rarity = MATERIAL_RARITY_RARE + points_per_unit = 50 / SHEET_MATERIAL_AMOUNT /datum/material/diamond/on_accidental_mat_consumption(mob/living/carbon/victim, obj/item/source_item) victim.apply_damage(15, BRUTE, BODY_ZONE_HEAD, wound_bonus = 7) @@ -117,11 +132,14 @@ Unless you know what you're doing, only use the first three numbers. They're in greyscale_colors = rgb(48, 237, 26) categories = list(MAT_CATEGORY_ORE = TRUE, MAT_CATEGORY_RIGID = TRUE, MAT_CATEGORY_BASE_RECIPES = TRUE, MAT_CATEGORY_ITEM_MATERIAL=TRUE) sheet_type = /obj/item/stack/sheet/mineral/uranium + ore_type = /obj/item/stack/ore/uranium value_per_unit = 100 / SHEET_MATERIAL_AMOUNT tradable = TRUE tradable_base_quantity = MATERIAL_QUANTITY_RARE beauty_modifier = 0.3 //It shines so beautiful armor_modifiers = list(MELEE = 1.5, BULLET = 1.4, LASER = 0.5, ENERGY = 0.5, FIRE = 1, ACID = 1) + mineral_rarity = MATERIAL_RARITY_SEMIPRECIOUS + points_per_unit = 30 / SHEET_MATERIAL_AMOUNT /datum/material/uranium/on_applied(atom/source, amount, material_flags) . = ..() @@ -154,9 +172,12 @@ Unless you know what you're doing, only use the first three numbers. They're in greyscale_colors = "#c162ec" categories = list(MAT_CATEGORY_ORE = TRUE, MAT_CATEGORY_RIGID = TRUE, MAT_CATEGORY_BASE_RECIPES = TRUE, MAT_CATEGORY_ITEM_MATERIAL=TRUE) sheet_type = /obj/item/stack/sheet/mineral/plasma + ore_type = /obj/item/stack/ore/plasma value_per_unit = 200 / SHEET_MATERIAL_AMOUNT beauty_modifier = 0.15 armor_modifiers = list(MELEE = 1.4, BULLET = 0.7, ENERGY = 1.2, BIO = 1.2, ACID = 0.5) + mineral_rarity = MATERIAL_RARITY_PRECIOUS + points_per_unit = 15 / SHEET_MATERIAL_AMOUNT /datum/material/plasma/on_applied(atom/source, amount, material_flags) . = ..() @@ -186,7 +207,10 @@ Unless you know what you're doing, only use the first three numbers. They're in categories = list(MAT_CATEGORY_ORE = TRUE, MAT_CATEGORY_ITEM_MATERIAL = TRUE) beauty_modifier = 0.5 sheet_type = /obj/item/stack/sheet/bluespace_crystal + ore_type = /obj/item/stack/ore/bluespace_crystal value_per_unit = 300 / SHEET_MATERIAL_AMOUNT + mineral_rarity = MATERIAL_RARITY_RARE + points_per_unit = 50 / SHEET_MATERIAL_AMOUNT tradable = TRUE tradable_base_quantity = MATERIAL_QUANTITY_EXOTIC @@ -203,9 +227,12 @@ Unless you know what you're doing, only use the first three numbers. They're in greyscale_colors = "#ffff00" categories = list(MAT_CATEGORY_ORE = TRUE, MAT_CATEGORY_RIGID = TRUE, MAT_CATEGORY_BASE_RECIPES = TRUE, MAT_CATEGORY_ITEM_MATERIAL=TRUE) sheet_type = /obj/item/stack/sheet/mineral/bananium + ore_type = /obj/item/stack/ore/bananium value_per_unit = 1000 / SHEET_MATERIAL_AMOUNT beauty_modifier = 0.5 armor_modifiers = list(BOMB = 100, FIRE = 10) //Clowns cant be blown away. + mineral_rarity = MATERIAL_RARITY_UNDISCOVERED + points_per_unit = 60 / SHEET_MATERIAL_AMOUNT /datum/material/bananium/on_applied(atom/source, amount, material_flags) . = ..() @@ -231,11 +258,13 @@ Unless you know what you're doing, only use the first three numbers. They're in strength_modifier = 1.3 categories = list(MAT_CATEGORY_ORE = TRUE, MAT_CATEGORY_RIGID = TRUE, MAT_CATEGORY_BASE_RECIPES = TRUE, MAT_CATEGORY_ITEM_MATERIAL=TRUE) sheet_type = /obj/item/stack/sheet/mineral/titanium + ore_type = /obj/item/stack/ore/titanium value_per_unit = 125 / SHEET_MATERIAL_AMOUNT tradable = TRUE tradable_base_quantity = MATERIAL_QUANTITY_UNCOMMON beauty_modifier = 0.05 armor_modifiers = list(MELEE = 1.35, BULLET = 1.3, LASER = 1.3, ENERGY = 1.25, BOMB = 1.25, BIO = 1, FIRE = 0.7, ACID = 1) + mineral_rarity = MATERIAL_RARITY_SEMIPRECIOUS /datum/material/titanium/on_accidental_mat_consumption(mob/living/carbon/victim, obj/item/source_item) victim.apply_damage(15, BRUTE, BODY_ZONE_HEAD, wound_bonus = 7) @@ -252,6 +281,8 @@ Unless you know what you're doing, only use the first three numbers. They're in value_per_unit = 600 / SHEET_MATERIAL_AMOUNT beauty_modifier = 0.5 armor_modifiers = list(MELEE = 1.35, BULLET = 2, LASER = 0.5, ENERGY = 1.25, BOMB = 1.25, BIO = 1, FIRE = 1.4, ACID = 1) //rune is weak against magic lasers but strong against bullets. This is the combat triangle. + mineral_rarity = MATERIAL_RARITY_UNDISCOVERED + points_per_unit = 100 / SHEET_MATERIAL_AMOUNT /datum/material/runite/on_accidental_mat_consumption(mob/living/carbon/victim, obj/item/source_item) victim.apply_damage(20, BRUTE, BODY_ZONE_HEAD, wound_bonus = 10) @@ -265,10 +296,13 @@ Unless you know what you're doing, only use the first three numbers. They're in greyscale_colors = "#caccd9" 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_RIGID = TRUE, MAT_CATEGORY_BASE_RECIPES = TRUE, MAT_CATEGORY_ITEM_MATERIAL=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) + mineral_rarity = MATERIAL_RARITY_UNDISCOVERED //Nobody's found oil on lavaland yet. + points_per_unit = 4 / SHEET_MATERIAL_AMOUNT /datum/material/plastic/on_accidental_mat_consumption(mob/living/carbon/eater, obj/item/food) eater.reagents.add_reagent(/datum/reagent/plastic_polymers, rand(6, 8)) @@ -328,6 +362,8 @@ Unless you know what you're doing, only use the first three numbers. They're in value_per_unit = 500 / SHEET_MATERIAL_AMOUNT beauty_modifier = 0.4 armor_modifiers = list(MELEE = 1.5, BULLET = 1.5, LASER = 1.3, ENERGY = 1.3, BOMB = 1, BIO = 1, FIRE = 2.5, ACID = 1) + mineral_rarity = MATERIAL_RARITY_UNDISCOVERED //Doesn't naturally spawn on lavaland. + points_per_unit = 100 / SHEET_MATERIAL_AMOUNT /datum/material/adamantine/on_accidental_mat_consumption(mob/living/carbon/victim, obj/item/source_item) victim.apply_damage(20, BRUTE, BODY_ZONE_HEAD, wound_bonus = 10) @@ -345,6 +381,8 @@ Unless you know what you're doing, only use the first three numbers. They're in strength_modifier = 1.2 armor_modifiers = list(MELEE = 1.5, BULLET = 1.5, LASER = 1.5, ENERGY = 1.5, BOMB = 1.5, BIO = 1.5, FIRE = 1.5, ACID = 1.5) beauty_modifier = 0.5 + 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) . = ..() diff --git a/code/datums/mind/_mind.dm b/code/datums/mind/_mind.dm index e33065651a3..eaac3221998 100644 --- a/code/datums/mind/_mind.dm +++ b/code/datums/mind/_mind.dm @@ -53,7 +53,6 @@ /// Martial art on this mind var/datum/martial_art/martial_art - var/static/default_martial_art = new/datum/martial_art /// List of antag datums on this mind var/list/antag_datums /// this mind's ANTAG_HUD should have this icon_state @@ -107,7 +106,6 @@ /datum/mind/New(_key) key = _key - martial_art = default_martial_art init_known_skills() set_assigned_role(SSjob.GetJobType(/datum/job/unassigned)) // Unassigned by default. @@ -181,9 +179,9 @@ new_character.mind.set_current(null) var/mob/living/old_current = current - if(current) + if(old_current) //transfer anyone observing the old character to the new one - current.transfer_observers_to(new_character) + old_current.transfer_observers_to(new_character) // Offload all mind languages from the old holder to a temp one var/datum/language_holder/empty/temp_holder = new() @@ -205,7 +203,7 @@ if(iscarbon(new_character)) var/mob/living/carbon/carbon_character = new_character carbon_character.last_mind = src - transfer_martial_arts(new_character) + RegisterSignal(new_character, COMSIG_LIVING_DEATH, PROC_REF(set_death_time)) if(active || force_key_move) new_character.key = key //now transfer the key to link the client to our new body @@ -214,7 +212,9 @@ new_character.client.init_verbs() // re-initialize character specific verbs SEND_SIGNAL(src, COMSIG_MIND_TRANSFERRED, old_current) - SEND_SIGNAL(current, COMSIG_MOB_MIND_TRANSFERRED_INTO) + SEND_SIGNAL(current, COMSIG_MOB_MIND_TRANSFERRED_INTO, old_current) + if(!isnull(old_current)) + SEND_SIGNAL(old_current, COMSIG_MOB_MIND_TRANSFERRED_OUT_OF, current) //I cannot trust you fucks to do this properly /datum/mind/proc/set_original_character(new_original_character) @@ -451,15 +451,20 @@ current.dropItemToGround(W, TRUE) //The TRUE forces all items to drop, since this is an admin undress. if("takeuplink") take_uplink() - wipe_memory()//Remove any memory they may have had. + wipe_memory_type(/datum/memory/key/traitor_uplink/implant) log_admin("[key_name(usr)] removed [current]'s uplink.") if("crystals") if(check_rights(R_FUN)) var/datum/component/uplink/U = find_syndicate_uplink() if(U) - var/crystals = input("Amount of telecrystals for [key]","Syndicate uplink", U.uplink_handler.telecrystals) as null | num - if(!isnull(crystals)) - U.uplink_handler.telecrystals = crystals + var/crystals = tgui_input_number( + user = usr, + message = "Amount of telecrystals for [key]", + title = "Syndicate uplink", + default = U.uplink_handler.telecrystals, + ) + if(isnum(crystals)) + U.uplink_handler.set_telecrystals(crystals) message_admins("[key_name_admin(usr)] changed [current]'s telecrystal count to [crystals].") log_admin("[key_name(usr)] changed [current]'s telecrystal count to [crystals].") if("progression") @@ -517,19 +522,6 @@ usr = current traitor_panel() -/datum/mind/proc/transfer_martial_arts(mob/living/new_character) - if(!ishuman(new_character)) - return - if(martial_art) - if(martial_art.base) //Is the martial art temporary? - martial_art.remove(new_character) - else - martial_art.teach(new_character) - -/datum/mind/proc/has_martialart(string) - if(martial_art && martial_art.id == string) - return martial_art - return FALSE /datum/mind/proc/get_ghost(even_if_they_cant_reenter, ghosts_with_clients) for(var/mob/dead/observer/G in (ghosts_with_clients ? GLOB.player_list : GLOB.dead_mob_list)) diff --git a/code/datums/mind/antag.dm b/code/datums/mind/antag.dm index 81a0a939a9c..46344c4a0a6 100644 --- a/code/datums/mind/antag.dm +++ b/code/datums/mind/antag.dm @@ -216,7 +216,7 @@ enslaved_to = WEAKREF(creator) current.faction |= creator.faction - creator.faction |= current.faction + creator.faction |= "[REF(current)]" current.log_message("has been enslaved to [key_name(creator)].", LOG_GAME) log_admin("[key_name(current)] has been enslaved to [key_name(creator)].") diff --git a/code/datums/minigames_menu.dm b/code/datums/minigames_menu.dm index 13e4112daca..cb083026b2f 100644 --- a/code/datums/minigames_menu.dm +++ b/code/datums/minigames_menu.dm @@ -37,6 +37,10 @@ ui.close() basketball() return TRUE + if("deathmatch") + ui.close() + deathmatch() + return TRUE /datum/minigames_menu/proc/mafia() var/datum/mafia_controller/game = GLOB.mafia_game //this needs to change if you want multiple mafia games up at once. @@ -55,3 +59,8 @@ if(!game) game = create_basketball_game() game.ui_interact(usr) + +/datum/minigames_menu/proc/deathmatch() + if(isnull(GLOB.deathmatch_game)) + GLOB.deathmatch_game = new + GLOB.deathmatch_game.ui_interact(usr) diff --git a/code/datums/mood.dm b/code/datums/mood.dm index d8e7a1bbf9b..f7f0a8fbccb 100644 --- a/code/datums/mood.dm +++ b/code/datums/mood.dm @@ -139,9 +139,16 @@ * Arguments: * * category - (text) category of the mood event - see /datum/mood_event for category explanation * * type - (path) any /datum/mood_event - * * timeout_mod - (number) /datum/mood_event timeout modifier */ -/datum/mood/proc/add_mood_event(category, type, timeout_mod = 1, ...) +/datum/mood/proc/add_mood_event(category, type, ...) + // we may be passed an instantiated mood datum with a modified timeout + // it is to be used as a vehicle to copy data from and then cleaned up afterwards. + // why do it this way? because the params list may contain numbers, and we may not necessarily want those to be interpreted as a timeout modifier. + // this is only used by the food quality system currently + var/datum/mood_event/mood_to_copy_from + if (istype(type, /datum/mood_event)) + mood_to_copy_from = type + type = mood_to_copy_from.type if (!ispath(type, /datum/mood_event)) CRASH("A non path ([type]), was used to add a mood event. This shouldn't be happening.") if (!istext(category)) @@ -154,8 +161,10 @@ clear_mood_event(category) else if (the_event.timeout) - the_event.timeout = initial(the_event.timeout) * timeout_mod + if (!isnull(mood_to_copy_from)) + the_event.timeout = mood_to_copy_from.timeout addtimer(CALLBACK(src, PROC_REF(clear_mood_event), category), the_event.timeout, (TIMER_UNIQUE|TIMER_OVERRIDE)) + qdel(mood_to_copy_from) return // Don't need to update the event. var/list/params = args.Copy(3) @@ -164,8 +173,10 @@ if (QDELETED(the_event)) // the mood event has been deleted for whatever reason (requires a job, etc) return - the_event.timeout *= timeout_mod the_event.category = category + if (!isnull(mood_to_copy_from)) + the_event.timeout = mood_to_copy_from.timeout + qdel(mood_to_copy_from) mood_events[category] = the_event update_mood() diff --git a/code/datums/mood_events/generic_negative_events.dm b/code/datums/mood_events/generic_negative_events.dm index cc3af071eef..afcb5d688ed 100644 --- a/code/datums/mood_events/generic_negative_events.dm +++ b/code/datums/mood_events/generic_negative_events.dm @@ -112,8 +112,8 @@ /datum/mood_event/table/add_effects() if(isfelinid(owner)) //Holy snowflake batman! - var/mob/living/carbon/human/H = owner - SEND_SIGNAL(H, COMSIG_ORGAN_WAG_TAIL, TRUE, 3 SECONDS) + var/mob/living/carbon/human/feline = owner + feline.wag_tail(3 SECONDS) description = "They want to play on the table!" mood_change = 2 diff --git a/code/datums/outfit.dm b/code/datums/outfit.dm index 6289ea13f38..61ac828644a 100644 --- a/code/datums/outfit.dm +++ b/code/datums/outfit.dm @@ -416,7 +416,7 @@ for(var/skillpath in skillchips) preload += skillpath - preload -= typesof(/obj/item/clothing/under/color/random) // NOVA EDIT - Don't preload random jumpsuit spawners that delete themselves + preload -= typesof(/obj/item/clothing/under/color/random, /obj/item/camera) // NOVA EDIT - Don't preload random jumpsuit spawners that delete themselves return preload diff --git a/code/datums/quirks/negative_quirks/all_nighter.dm b/code/datums/quirks/negative_quirks/all_nighter.dm index 798add0539f..253ce12b41f 100644 --- a/code/datums/quirks/negative_quirks/all_nighter.dm +++ b/code/datums/quirks/negative_quirks/all_nighter.dm @@ -14,7 +14,7 @@ mail_goodies = list( /obj/item/clothing/glasses/blindfold, - /obj/item/bedsheet/random, + /obj/effect/spawner/random/bedsheet/any, /obj/item/clothing/under/misc/pj/red, /obj/item/clothing/head/costume/nightcap/red, /obj/item/clothing/under/misc/pj/blue, diff --git a/code/datums/quirks/negative_quirks/photophobia.dm b/code/datums/quirks/negative_quirks/photophobia.dm index b543aeda076..ea9ef428a50 100644 --- a/code/datums/quirks/negative_quirks/photophobia.dm +++ b/code/datums/quirks/negative_quirks/photophobia.dm @@ -40,13 +40,15 @@ /datum/quirk/photophobia/proc/update_eyes(obj/item/organ/internal/eyes/target_eyes) if(!istype(target_eyes)) return - target_eyes.flash_protect = max(target_eyes.flash_protect - 1, FLASH_PROTECTION_HYPER_SENSITIVE) + target_eyes.flash_protect = max(target_eyes.flash_protect - severity, FLASH_PROTECTION_HYPER_SENSITIVE) // NOVA EDIT CHANGE - ORIGINAL: target_eyes.flash_protect = max(target_eyes.flash_protect - 1, FLASH_PROTECTION_HYPER_SENSITIVE) + target_eyes.refresh() // NOVA EDIT ADDITION /datum/quirk/photophobia/proc/restore_eyes(obj/item/organ/internal/eyes/normal_eyes) SIGNAL_HANDLER if(!istype(normal_eyes)) return normal_eyes.flash_protect = initial(normal_eyes.flash_protect) + normal_eyes.refresh() // NOVA EDIT ADDITION /datum/quirk/photophobia/proc/on_holder_moved(mob/living/source, atom/old_loc, dir, forced) SIGNAL_HANDLER diff --git a/code/datums/quirks/negative_quirks/unusual.dm b/code/datums/quirks/negative_quirks/unusual.dm new file mode 100644 index 00000000000..79cfac06c13 --- /dev/null +++ b/code/datums/quirks/negative_quirks/unusual.dm @@ -0,0 +1,22 @@ +/datum/quirk/touchy + name = "Touchy" + desc = "You are very touchy and have to physically be able to touch something to examine it." + icon = FA_ICON_HAND + value = -2 + gain_text = span_danger("You feel like you can't examine things from a distance.") + lose_text = span_notice("You feel like you can examine things from a distance.") + medical_record_text = "Patient is unable to tell objects apart from a distance." + hardcore_value = 4 + +/datum/quirk/touchy/add(client/client_source) + RegisterSignal(quirk_holder, COMSIG_CLICK_SHIFT, PROC_REF(examinate_check)) + +/datum/quirk/touchy/remove() + UnregisterSignal(quirk_holder, COMSIG_CLICK_SHIFT) + +///Checks if the mob is besides the thing being examined, if they aren't then we cancel their examinate. +/datum/quirk/touchy/proc/examinate_check(mob/examiner, atom/examined) + SIGNAL_HANDLER + + if(!examined.Adjacent(examiner)) + return COMSIG_MOB_CANCEL_CLICKON diff --git a/code/datums/quirks/neutral_quirks/transhumanist.dm b/code/datums/quirks/neutral_quirks/transhumanist.dm index 573b70cf21b..88923d463f6 100644 --- a/code/datums/quirks/neutral_quirks/transhumanist.dm +++ b/code/datums/quirks/neutral_quirks/transhumanist.dm @@ -39,7 +39,12 @@ calculate_bodypart_score() /datum/quirk/transhumanist/remove() - UnregisterSignal(quirk_holder, list(COMSIG_CARBON_REMOVE_LIMB, COMSIG_CARBON_ATTACH_LIMB)) + UnregisterSignal(quirk_holder, list( + COMSIG_CARBON_POST_ATTACH_LIMB, + COMSIG_CARBON_POST_REMOVE_LIMB, + COMSIG_CARBON_GAIN_ORGAN, + COMSIG_CARBON_LOSE_ORGAN, + )) /datum/quirk/transhumanist/proc/get_bodypart_score(mob/living/carbon/target, limbs_only = FALSE) var/organic_bodytypes = 0 diff --git a/code/datums/quirks/positive_quirks/night_vision.dm b/code/datums/quirks/positive_quirks/night_vision.dm index 808a213db51..db94ab57555 100644 --- a/code/datums/quirks/positive_quirks/night_vision.dm +++ b/code/datums/quirks/positive_quirks/night_vision.dm @@ -22,7 +22,7 @@ /datum/quirk/night_vision/proc/refresh_quirk_holder_eyes() var/mob/living/carbon/human/human_quirk_holder = quirk_holder var/obj/item/organ/internal/eyes/eyes = human_quirk_holder.get_organ_by_type(/obj/item/organ/internal/eyes) - if(!eyes || eyes.lighting_cutoff) + if(!eyes) // NOVA EDIT CHANGE - ORIGINAL: if(!eyes || eyes.lighting_cutoff) return // We've either added or removed TRAIT_NIGHT_VISION before calling this proc. Just refresh the eyes. eyes.refresh() diff --git a/code/datums/quirks/positive_quirks/spacer.dm b/code/datums/quirks/positive_quirks/spacer.dm index 83157352901..641c010407a 100644 --- a/code/datums/quirks/positive_quirks/spacer.dm +++ b/code/datums/quirks/positive_quirks/spacer.dm @@ -13,7 +13,7 @@ quirk_flags = QUIRK_CHANGES_APPEARANCE //NOVA EDIT CHANGE - ORIGINAL: quirk_flags = QUIRK_HUMAN_ONLY|QUIRK_CHANGES_APPEARANCE medical_record_text = "Patient is well-adapted to non-terrestrial environments." mail_goodies = list( - /obj/item/storage/pill_bottle/ondansetron, + /obj/item/reagent_containers/hypospray/medipen/deforest/psifinil, // NOVA EDIT CHANGE - ORIGINAL: /obj/item/storage/pill_bottle/ondansetron, /obj/item/reagent_containers/pill/gravitum, ) /// How high spacers get bumped up to @@ -63,10 +63,10 @@ you are awarded with a 25% hazard pay bonus due to your [on_a_planet ? "station" : "occupational"] assignment.")) // Supply them with some patches to help out on their new assignment - var/obj/item/storage/pill_bottle/ondansetron/disgust_killers = new() - disgust_killers.desc += " Best to take one when travelling to a planet's surface." + var/obj/item/storage/medkit/civil_defense/comfort/stocked/disgust_killers = new() // NOVA EDIT CHANGE - a custom deforest cheesekit filled with much better meds - ORIGINAL: var/obj/item/storage/pill_bottle/ondansetron/disgust_killers = new() + //disgust_killers.desc += " Best to take one when travelling to a planet's surface." NOVA EDIT REMOVAL - remove extra blurb, unneeded if(quirk_holder.equip_to_slot_if_possible(disgust_killers, ITEM_SLOT_BACKPACK, qdel_on_fail = TRUE, initial = TRUE, indirect_action = TRUE)) - to_chat(quirk_holder, span_info("You have[isnull(spacer_account) ? " " : " also "]been given some anti-emetic patches to assist in adjusting to planetary gravity.")) + to_chat(quirk_holder, span_info("You have[isnull(spacer_account) ? " " : " also "]been given a kit of symptom-alleviating autoinjectors to aid in adjusting to planetary gravity.")) // NOVA EDIT CHANGE - rewords to make sense - ORIGINAL: to_chat(quirk_holder, span_info("You have[isnull(spacer_account) ? " " : " also "]been given some anti-emetic patches to assist in adjusting to planetary gravity.")) /datum/quirk/spacer_born/remove() UnregisterSignal(quirk_holder, COMSIG_MOVABLE_Z_CHANGED) diff --git a/code/datums/records/manifest.dm b/code/datums/records/manifest.dm index febd6374f7f..1ba59b72d86 100644 --- a/code/datums/records/manifest.dm +++ b/code/datums/records/manifest.dm @@ -174,3 +174,36 @@ GLOBAL_DATUM_INIT(manifest, /datum/manifest, new) target.rank = assignment target.trim = trim + +/datum/manifest/ui_state(mob/user) + return GLOB.always_state + +/datum/manifest/ui_status(mob/user, datum/ui_state/state) + return (isnewplayer(user) || isobserver(user) || isAI(user) || ispAI(user) || user.client?.holder) ? UI_INTERACTIVE : UI_CLOSE + +/datum/manifest/ui_interact(mob/user, datum/tgui/ui) + ui = SStgui.try_update_ui(user, src, ui) + if (!ui) + ui = new(user, src, "CrewManifest") + ui.open() + +/datum/manifest/ui_data(mob/user) + var/list/positions = list() + for(var/datum/job_department/department as anything in SSjob.joinable_departments) + var/open = 0 + var/list/exceptions = list() + for(var/datum/job/job as anything in department.department_jobs) + if(job.total_positions == -1) + exceptions += job.title + continue + var/open_slots = job.total_positions - job.current_positions + if(open_slots < 1) + continue + open += open_slots + positions[department.department_name] = list("exceptions" = exceptions, "open" = open) + + return list( + "manifest" = get_manifest(), + "positions" = positions + ) + diff --git a/code/datums/ruins.dm b/code/datums/ruins.dm index 2a7b73d1f7e..703991f596e 100644 --- a/code/datums/ruins.dm +++ b/code/datums/ruins.dm @@ -6,17 +6,27 @@ How is there a wooden container filled with 18th century coinage in the middle of a lavawracked hellscape? \ It is clearly a mystery." - var/unpickable = FALSE //If TRUE these won't be placed automatically (can still be forced or loaded with another ruin) - var/always_place = FALSE //Will skip the whole weighting process and just plop this down, ideally you want the ruins of this kind to have no cost. - var/placement_weight = 1 //How often should this ruin appear - var/cost = 0 //Cost in ruin budget placement system + ///If TRUE these won't be placed automatically (can still be forced or loaded with another ruin) + var/unpickable = FALSE + ///Will skip the whole weighting process and just plop this down, ideally you want the ruins of this kind to have no cost. + var/always_place = FALSE + ///How often should this ruin appear + var/placement_weight = 1 + ///Cost in ruin budget placement system + var/cost = 0 + /// Cost in the ruin budget placement system associated with mineral spawning. We use a different budget for mineral sources like ore vents. For practical use see seedRuins + var/mineral_cost = 0 + /// If TRUE, this ruin can be placed multiple times in the same map var/allow_duplicates = TRUE - var/list/always_spawn_with = null //These ruin types will be spawned along with it (where dependent on the flag) eg list(/datum/map_template/ruin/space/teleporter_space = SPACERUIN_Z) - var/list/never_spawn_with = null //If this ruin is spawned these will not eg list(/datum/map_template/ruin/base_alternate) - + ///These ruin types will be spawned along with it (where dependent on the flag) eg list(/datum/map_template/ruin/space/teleporter_space = SPACERUIN_Z) + var/list/always_spawn_with = null + ///If this ruin is spawned these will not eg list(/datum/map_template/ruin/base_alternate) + var/list/never_spawn_with = null + ///Static part of the ruin path eg "_maps\RandomRuins\LavaRuins\" var/prefix = null + ///The dynamic part of the ruin path eg "lavaland_surface_ruinfile.dmm" var/suffix = null - + ///What flavor or ruin is this? eg ZTRAIT_SPACE_RUINS var/ruin_type = null /datum/map_template/ruin/New() diff --git a/code/datums/ruins/icemoon.dm b/code/datums/ruins/icemoon.dm index 406f4f46d0d..4048be758fc 100644 --- a/code/datums/ruins/icemoon.dm +++ b/code/datums/ruins/icemoon.dm @@ -7,7 +7,7 @@ ruin_type = ZTRAIT_ICE_RUINS default_area = /area/icemoon/surface/outdoors/unexplored has_ceiling = TRUE - ceiling_turf = /turf/closed/mineral/random/snow/do_not_chasm + ceiling_turf = /turf/closed/mineral/snowmountain/do_not_chasm ceiling_baseturfs = list(/turf/open/misc/asteroid/snow/icemoon/do_not_chasm) // above ground only @@ -179,3 +179,23 @@ id = "hotsprings" description = "Just relax and take a dip, nothing will go wrong, I swear!" suffix = "icemoon_underground_hotsprings.dmm" + +/datum/map_template/ruin/icemoon/underground/vent + name = "Icemoon Ore Vent" + id = "ore_vent_i" + description = "A vent that spews out ore. Seems to be a natural phenomenon." //Make this a subtype that only spawns medium and large vents. Some smalls will go to the top level. + suffix = "icemoon_underground_ore_vent.dmm" + allow_duplicates = TRUE + cost = 0 + mineral_cost = 1 + always_place = TRUE + +/datum/map_template/ruin/icemoon/ruin/vent + name = "Surface Icemoon Ore Vent" + id = "ore_vent_i" + description = "A vent that spews out ore. Seems to be a natural phenomenon. Smaller than the underground ones." + suffix = "icemoon_surface_ore_vent.dmm" + allow_duplicates = TRUE + cost = 0 + mineral_cost = 1 + always_place = TRUE diff --git a/code/datums/ruins/lavaland.dm b/code/datums/ruins/lavaland.dm index d30dd296372..e39a0841edb 100644 --- a/code/datums/ruins/lavaland.dm +++ b/code/datums/ruins/lavaland.dm @@ -288,6 +288,16 @@ allow_duplicates = TRUE cost = 3 +/datum/map_template/ruin/lavaland/vent + name = "Ore Vent" + id = "ore_vent" + description = "A vent that spews out ore. Seems to be a natural phenomenon." + suffix = "lavaland_surface_ore_vent.dmm" + allow_duplicates = TRUE + cost = 0 + mineral_cost = 1 + always_place = TRUE + /datum/map_template/ruin/lavaland/watcher_grave name = "Watchers' Grave" id = "watcher-grave" diff --git a/code/datums/saymode.dm b/code/datums/saymode.dm index 363f484a415..3598bd764ca 100644 --- a/code/datums/saymode.dm +++ b/code/datums/saymode.dm @@ -20,7 +20,7 @@ if(user.mind.has_antag_datum(/datum/antagonist/fallen_changeling)) to_chat(user, span_changeling("We're cut off from the hivemind! We've lost everything! EVERYTHING!!")) return FALSE - var/datum/antagonist/changeling/ling_sender = user.mind.has_antag_datum(/datum/antagonist/changeling) + var/datum/antagonist/changeling/ling_sender = IS_CHANGELING(user) if(!ling_sender) return FALSE if(HAS_TRAIT(user, TRAIT_CHANGELING_HIVEMIND_MUTE)) diff --git a/code/datums/shuttles/emergency.dm b/code/datums/shuttles/emergency.dm index 38dccb62295..edee8a35e1b 100644 --- a/code/datums/shuttles/emergency.dm +++ b/code/datums/shuttles/emergency.dm @@ -38,7 +38,7 @@ var/path = pick_weight(events) events -= path mobile.event_list.Add(new path(mobile)) - + /datum/map_template/shuttle/emergency/backup prefix = "_maps/shuttles/" suffix = "backup" @@ -146,7 +146,7 @@ suffix = "medisim" name = "Medieval Reality Simulation Dome" description = "A state of the art simulation dome, loaded onto your shuttle! Watch and laugh at how petty humanity used to be before it reached the stars. Guaranteed to be at least 40% historically accurate." - prerequisites = "A special holodeck simulation might allow this shuttle to be loaded." + prerequisites = "A special holodeck simulation must be loaded before this shuttle can be purchased." admin_notes = "Ghosts can spawn in and fight as knights or archers. The CTF auto restarts, so no admin intervention necessary." credit_cost = 20000 occupancy_limit = "30" @@ -275,6 +275,7 @@ admin_notes = "An abomination with no functional medbay, sections missing, and some very fragile windows. Surprisingly airtight. When bought, gives a good influx of money, but can only be bought if the budget is literally 0 credits." movement_force = list("KNOCKDOWN" = 3, "THROW" = 2) occupancy_limit = "30" + prerequisites = "This shuttle is only offered for purchase when the station is low on funds." /datum/map_template/shuttle/emergency/scrapheap/prerequisites_met() return SSshuttle.shuttle_purchase_requirements_met[SHUTTLE_UNLOCK_SCRAPHEAP] @@ -285,7 +286,7 @@ description = "Looks like this shuttle may have wandered into the darkness between the stars on route to the station. Let's not think too hard about where all the bodies came from." admin_notes = "Contains real cult ruins, mob eyeballs, and inactive constructs. Cult mobs will automatically be sentienced by fun balloon. \ Cloning pods in 'medbay' area are showcases and nonfunctional." - prerequisites = "Mysterious cult runes may need to be banished before this shuttle can be summoned." + prerequisites = "A mysterious cult rune will need to be banished before this shuttle can be summoned." credit_cost = 6667 ///The joke is the number so no defines occupancy_limit = "666" @@ -371,6 +372,7 @@ admin_notes = "If the crew can solve the puzzle, they will wake the wabbajack statue. It will likely not end well. There's a reason it's boarded up. Maybe they should have just left it alone." credit_cost = CARGO_CRATE_VALUE * 30 occupancy_limit = "30" + prerequisites = "This shuttle requires an act of magical polymorphism to occur before it can be purchased." /datum/map_template/shuttle/emergency/wabbajack/prerequisites_met() return SSshuttle.shuttle_purchase_requirements_met[SHUTTLE_UNLOCK_WABBAJACK] @@ -485,7 +487,7 @@ name = "Tr%nPo2r& Z3TA" description = "A glitch appears on your monitor, flickering in and out of the options laid before you. \ It seems strange and alien..." - prerequisites = "You may need a special technology to access the signal." + prerequisites = "You will need to research special alien technology to access the signal." admin_notes = "Has alien surgery tools, and a void core that provides unlimited power." credit_cost = CARGO_CRATE_VALUE * 16 occupancy_limit = "xxx" diff --git a/code/datums/spawners_menu.dm b/code/datums/spawners_menu.dm index 06b6dbc76a8..c6b64cc3a7a 100644 --- a/code/datums/spawners_menu.dm +++ b/code/datums/spawners_menu.dm @@ -30,9 +30,9 @@ this["important_warning"] = "" this["amount_left"] = 0 for(var/spawner_obj in GLOB.mob_spawners[spawner]) + var/obj/effect/mob_spawn/ghost_role/mob_spawner = spawner_obj if(!this["desc"]) if(istype(spawner_obj, /obj/effect/mob_spawn)) - var/obj/effect/mob_spawn/ghost_role/mob_spawner = spawner_obj if(!mob_spawner.allow_spawn(user, silent = TRUE)) continue this["you_are_text"] = mob_spawner.you_are_text @@ -41,8 +41,9 @@ else var/obj/object = spawner_obj this["desc"] = object.desc - this["amount_left"] += 1 - if(this["amount_left"] > 0) + this["amount_left"] += mob_spawner.uses + this["infinite"] += mob_spawner.infinite_use + if(this["amount_left"] > 0 || this["infinite"]) data["spawners"] += list(this) for(var/mob_type in GLOB.joinable_mobs) var/list/this = list() diff --git a/code/datums/sprite_accessories.dm b/code/datums/sprite_accessories.dm index 02e12504576..c356ef669f7 100644 --- a/code/datums/sprite_accessories.dm +++ b/code/datums/sprite_accessories.dm @@ -1756,9 +1756,12 @@ /datum/sprite_accessory/tails em_block = TRUE + /// Describes which tail spine sprites to use, if any. + var/spine_key = NONE /datum/sprite_accessory/tails/lizard icon = 'icons/mob/human/species/lizard/lizard_tails.dmi' + spine_key = SPINE_KEY_LIZARD /datum/sprite_accessory/tails/lizard/smooth name = "Smooth" @@ -1779,6 +1782,7 @@ /datum/sprite_accessory/tails/lizard/short name = "Short" icon_state = "short" + spine_key = NONE /datum/sprite_accessory/tails/human/cat name = "Cat" @@ -2087,7 +2091,7 @@ icon = 'icons/mob/human/species/lizard/lizard_spines.dmi' em_block = TRUE -/datum/sprite_accessory/spines_animated +/datum/sprite_accessory/tail_spines icon = 'icons/mob/human/species/lizard/lizard_spines.dmi' em_block = TRUE @@ -2095,7 +2099,7 @@ name = "None" icon_state = "none" -/datum/sprite_accessory/spines_animated/none +/datum/sprite_accessory/tail_spines/none name = "None" icon_state = "none" @@ -2103,7 +2107,7 @@ name = "Short" icon_state = "short" -/datum/sprite_accessory/spines_animated/short +/datum/sprite_accessory/tail_spines/short name = "Short" icon_state = "short" @@ -2111,7 +2115,7 @@ name = "Short + Membrane" icon_state = "shortmeme" -/datum/sprite_accessory/spines_animated/shortmeme +/datum/sprite_accessory/tail_spines/shortmeme name = "Short + Membrane" icon_state = "shortmeme" @@ -2119,7 +2123,7 @@ name = "Long" icon_state = "long" -/datum/sprite_accessory/spines_animated/long +/datum/sprite_accessory/tail_spines/long name = "Long" icon_state = "long" @@ -2127,7 +2131,7 @@ name = "Long + Membrane" icon_state = "longmeme" -/datum/sprite_accessory/spines_animated/longmeme +/datum/sprite_accessory/tail_spines/longmeme name = "Long + Membrane" icon_state = "longmeme" @@ -2135,7 +2139,7 @@ name = "Aquatic" icon_state = "aqua" -/datum/sprite_accessory/spines_animated/aquatic +/datum/sprite_accessory/tail_spines/aquatic name = "Aquatic" icon_state = "aqua" diff --git a/code/datums/station_traits/_station_trait.dm b/code/datums/station_traits/_station_trait.dm index 8e8303c0366..7130f1c896b 100644 --- a/code/datums/station_traits/_station_trait.dm +++ b/code/datums/station_traits/_station_trait.dm @@ -1,3 +1,6 @@ +/// Station traits displayed in the lobby +GLOBAL_LIST_EMPTY(lobby_station_traits) + ///Base class of station traits. These are used to influence rounds in one way or the other by influencing the levers of the station. /datum/station_trait ///Name of the trait @@ -8,6 +11,8 @@ var/trait_processes = FALSE ///Chance relative to other traits of its type to be picked var/weight = 10 + ///The cost of the trait, which is removed from the budget. + var/cost = STATION_TRAIT_COST_FULL ///Whether this trait is always enabled; generally used for debugging var/force = FALSE ///Does this trait show in the centcom report? @@ -22,10 +27,16 @@ var/trait_flags = STATION_TRAIT_MAP_UNRESTRICTED /// Whether or not this trait can be reverted by an admin var/can_revert = TRUE + /// If set to true we'll show a button on the lobby to notify people about this trait + var/sign_up_button = FALSE + /// Lobby buttons controlled by this trait + var/list/lobby_buttons = list() /// The ID that we look for in dynamic.json. Not synced with 'name' because I can already see this go wrong var/dynamic_threat_id /// If ran during dynamic, do we reduce the total threat? Will be overriden by config if set var/threat_reduction = 0 + /// Trait should not be instantiated in a round if its type matches this type + var/abstract_type = /datum/station_trait /datum/station_trait/New() . = ..() @@ -34,7 +45,8 @@ if(threat_reduction) GLOB.dynamic_station_traits[src] = threat_reduction - + if(sign_up_button) + GLOB.lobby_station_traits += src if(trait_processes) START_PROCESSING(SSstation, src) if(trait_to_give) @@ -43,14 +55,10 @@ /datum/station_trait/Destroy() SSstation.station_traits -= src GLOB.dynamic_station_traits.Remove(src) + destroy_lobby_buttons() return ..() -/// Proc ran when round starts. Use this for roundstart effects. -/datum/station_trait/proc/on_round_start() - SIGNAL_HANDLER - return - -///type of info the centcom report has on this trait, if any. +/// Returns the type of info the centcom report has on this trait, if any. /datum/station_trait/proc/get_report() return "[name] - [report_message]" @@ -64,7 +72,7 @@ qdel(src) -///Called by decals if they can be colored, to see if we got some cool colors for them. Only takes the first station trait +/// Called by decals if they can be colored, to see if we got some cool colors for them. Only takes the first station trait /proc/request_station_colors(atom/thing_to_color, pattern) for(var/datum/station_trait/trait in SSstation.station_traits) var/decal_color = trait.get_decal_color(thing_to_color, pattern || PATTERN_DEFAULT) @@ -72,6 +80,50 @@ return decal_color return null -///Return a color for the decals, if any +/// Return a color for the decals, if any /datum/station_trait/proc/get_decal_color(thing_to_color, pattern) return + +/// Return TRUE if we want to show a lobby button, by default we assume we don't want it after the round begins +/datum/station_trait/proc/can_display_lobby_button(client/player) + return sign_up_button && !SSticker.HasRoundStarted() + +/// Apply any additional handling we need to our lobby button +/datum/station_trait/proc/setup_lobby_button(atom/movable/screen/lobby/button/sign_up/lobby_button) + SHOULD_CALL_PARENT(TRUE) + lobby_buttons |= lobby_button + RegisterSignal(lobby_button, COMSIG_ATOM_UPDATE_ICON, PROC_REF(on_lobby_button_update_icon)) + RegisterSignal(lobby_button, COMSIG_CLICK, PROC_REF(on_lobby_button_click)) + RegisterSignal(lobby_button, COMSIG_QDELETING, PROC_REF(on_lobby_button_destroyed)) + lobby_button.update_appearance(UPDATE_ICON) + +/// Called when our lobby button is clicked on +/datum/station_trait/proc/on_lobby_button_click(atom/movable/screen/lobby/button/sign_up/lobby_button, location, control, params, mob/dead/new_player/user) + SIGNAL_HANDLER + return + +/// Called when our lobby button tries to update its appearance +/datum/station_trait/proc/on_lobby_button_update_icon(atom/movable/screen/lobby/button/sign_up/lobby_button, updates) + SIGNAL_HANDLER + return + +/// Don't hold references to deleted buttons +/datum/station_trait/proc/on_lobby_button_destroyed(atom/movable/screen/lobby/button/sign_up/lobby_button) + SIGNAL_HANDLER + lobby_buttons -= lobby_button + +/// Proc ran when round starts. Use this for roundstart effects. By default we clean up our buttons here. +/datum/station_trait/proc/on_round_start() + SIGNAL_HANDLER + destroy_lobby_buttons() + +/// Remove all of our active lobby buttons +/datum/station_trait/proc/destroy_lobby_buttons() + for (var/atom/movable/screen/button as anything in lobby_buttons) + var/mob/hud_owner = button.get_mob() + qdel(button) + if (QDELETED(hud_owner)) + continue + var/datum/hud/using_hud = hud_owner.hud_used + using_hud?.show_hud(using_hud?.hud_version) + lobby_buttons = list() diff --git a/code/datums/station_traits/job_traits.dm b/code/datums/station_traits/job_traits.dm new file mode 100644 index 00000000000..8dea2f96bbf --- /dev/null +++ b/code/datums/station_traits/job_traits.dm @@ -0,0 +1,169 @@ +#define CAN_ROLL_ALWAYS 1 //always can roll for antag +#define CAN_ROLL_PROTECTED 2 //can roll if config lets protected roles roll +#define CAN_ROLL_NEVER 3 //never roll antag + +/** + * A station trait which enables a temporary job + * Generally speaking these should always all be mutually exclusive, don't have too many at once + */ +/datum/station_trait/job + sign_up_button = TRUE + abstract_type = /datum/station_trait/job + /// What tooltip to show on the button + var/button_desc = "Sign up to gain some kind of unusual job, not available in most rounds." + /// Can this job roll antag? + var/can_roll_antag = CAN_ROLL_ALWAYS + /// How many positions to spawn? + var/position_amount = 1 + /// Type of job to enable + var/datum/job/job_to_add = /datum/job/clown + /// Who signed up to this in the lobby + var/list/lobby_candidates + +/datum/station_trait/job/New() + . = ..() + switch(can_roll_antag) + if(CAN_ROLL_PROTECTED) + SSstation.antag_protected_roles += job_to_add::title + if(CAN_ROLL_NEVER) + SSstation.antag_restricted_roles += job_to_add::title + blacklist += subtypesof(/datum/station_trait/job) - type // All but ourselves + RegisterSignal(SSdcs, COMSIG_GLOB_PRE_JOBS_ASSIGNED, PROC_REF(pre_jobs_assigned)) + +/datum/station_trait/job/setup_lobby_button(atom/movable/screen/lobby/button/sign_up/lobby_button) + RegisterSignal(lobby_button, COMSIG_ATOM_UPDATE_OVERLAYS, PROC_REF(on_lobby_button_update_overlays)) + lobby_button.desc = button_desc + return ..() + +/datum/station_trait/job/on_lobby_button_click(atom/movable/screen/lobby/button/sign_up/lobby_button, location, control, params, mob/dead/new_player/user) + if (LAZYFIND(lobby_candidates, user)) + LAZYREMOVE(lobby_candidates, user) + else + LAZYADD(lobby_candidates, user) + +/datum/station_trait/job/on_lobby_button_update_icon(atom/movable/screen/lobby/button/sign_up/lobby_button, updates) + if (LAZYFIND(lobby_candidates, lobby_button.get_mob())) + lobby_button.base_icon_state = "signup_on" + else + lobby_button.base_icon_state = "signup" + +/// Add an overlay based on whether you are actively signed up for this role +/datum/station_trait/job/proc/on_lobby_button_update_overlays(atom/movable/screen/lobby/button/sign_up/lobby_button, list/overlays) + SIGNAL_HANDLER + overlays += LAZYFIND(lobby_candidates, lobby_button.get_mob()) ? "tick" : "cross" + +/// Called before we start assigning roles, assign ours first +/datum/station_trait/job/proc/pre_jobs_assigned() + SIGNAL_HANDLER + sign_up_button = FALSE + destroy_lobby_buttons() + for (var/mob/dead/new_player/signee as anything in lobby_candidates) + if (isnull(signee) || !signee.client || !signee.mind || signee.ready != PLAYER_READY_TO_PLAY) + LAZYREMOVE(lobby_candidates, signee) + if (!LAZYLEN(lobby_candidates)) + on_failed_assignment() + return // Nobody signed up :( + for(var/_ in 1 to position_amount) + var/mob/dead/new_player/picked_player = pick_n_take(lobby_candidates) + picked_player.mind.assigned_role = new job_to_add() + lobby_candidates = null + +/// Called if we didn't assign a role before the round began, we add it to the latejoin menu instead +/datum/station_trait/job/proc/on_failed_assignment() + var/datum/job/our_job = SSjob.GetJob(job_to_add::title) + our_job.total_positions = position_amount + +/datum/station_trait/job/can_display_lobby_button(client/player) + var/datum/job/our_job = SSjob.GetJob(job_to_add::title) + return our_job.player_old_enough(player) && ..() + +/// Adds a gorilla to the cargo department, replacing the sloth and the mech +/datum/station_trait/job/cargorilla + name = "Cargo Gorilla" + button_desc = "Sign up to become the Cargo Gorilla, a peaceful shepherd of boxes." + weight = 1 + show_in_report = FALSE // Selective attention test. Did you spot the gorilla? + can_roll_antag = CAN_ROLL_NEVER + job_to_add = /datum/job/cargo_gorilla + +/datum/station_trait/job/cargorilla/New() + . = ..() + RegisterSignal(SSatoms, COMSIG_SUBSYSTEM_POST_INITIALIZE, PROC_REF(replace_cargo)) + +/datum/station_trait/job/cargorilla/on_lobby_button_update_overlays(atom/movable/screen/lobby/button/sign_up/lobby_button, list/overlays) + . = ..() + overlays += LAZYFIND(lobby_candidates, lobby_button.get_mob()) ? "gorilla_on" : "gorilla_off" + +/// Remove the cargo equipment and personnel that are being replaced by a gorilla. +/datum/station_trait/job/cargorilla/proc/replace_cargo(datum/source) + SIGNAL_HANDLER + var/mob/living/basic/sloth/cargo_sloth = GLOB.cargo_sloth + if(isnull(cargo_sloth)) + lobby_candidates = list() + destroy_lobby_buttons() // Sorry folks + sign_up_button = FALSE + return + + // hmm our sloth looks funny today + qdel(cargo_sloth) + // monkey carries the crates, the age of robot is over + if(GLOB.cargo_ripley) + qdel(GLOB.cargo_ripley) + +/datum/station_trait/job/bridge_assistant + name = "Bridge Assistant" + button_desc = "Sign up to become the Bridge Assistant and watch over the Bridge." + weight = 2 + report_message = "We have installed a Bridge Assistant on your station." + show_in_report = TRUE + can_roll_antag = CAN_ROLL_PROTECTED + job_to_add = /datum/job/bridge_assistant + +/datum/station_trait/job/bridge_assistant/New() + . = ..() + RegisterSignal(SSatoms, COMSIG_SUBSYSTEM_POST_INITIALIZE, PROC_REF(add_coffeemaker)) + +/datum/station_trait/job/bridge_assistant/on_lobby_button_update_overlays(atom/movable/screen/lobby/button/sign_up/lobby_button, list/overlays) + . = ..() + overlays += "bridge_assistant" + +/// Creates a coffeemaker in the bridge, if we don't have one yet. +/datum/station_trait/job/bridge_assistant/proc/add_coffeemaker(datum/source) + SIGNAL_HANDLER + var/area/bridge = GLOB.areas_by_type[/area/station/command/bridge] + if(isnull(bridge)) //no bridge, what will he assist? + return + var/list/possible_coffeemaker_positions = list(/area/station/command/bridge, /area/station/command/meeting_room) + var/list/coffeemakers = SSmachines.get_machines_by_type_and_subtypes(/obj/machinery/coffeemaker) + for(var/obj/machinery/coffeemaker as anything in coffeemakers) //don't spawn a coffeemaker if there is already one on the bridge + if(is_type_in_list(get_area(coffeemaker), possible_coffeemaker_positions)) + return + var/list/tables = list() + for(var/turf/area_turf as anything in bridge.get_turfs_from_all_zlevels()) + var/obj/structure/table/table = locate() in area_turf + if(isnull(table)) + continue + if(area_turf.is_blocked_turf(ignore_atoms = list(table))) //don't spawn a coffeemaker on a fax machine or smth + continue + tables += table + if(!length(tables)) + return + var/picked_table = pick_n_take(tables) + var/picked_turf = get_turf(picked_table) + if(length(tables)) + var/another_table = pick(tables) + for(var/obj/thing_on_table in picked_turf) //if there's paper bins or other shit on the table, get that off + if(thing_on_table == picked_table) + continue + if(HAS_TRAIT(thing_on_table, TRAIT_WALLMOUNTED) || (thing_on_table.flags_1 & ON_BORDER_1) || thing_on_table.layer < TABLE_LAYER) + continue + if(thing_on_table.invisibility || !thing_on_table.alpha || !thing_on_table.mouse_opacity) + continue + thing_on_table.forceMove(get_turf(another_table)) + new /obj/machinery/coffeemaker/impressa(picked_turf) + new /obj/item/reagent_containers/cup/coffeepot(picked_turf) + new /obj/item/storage/box/coffeepack(picked_turf) + +#undef CAN_ROLL_ALWAYS +#undef CAN_ROLL_PROTECTED +#undef CAN_ROLL_NEVER diff --git a/code/datums/station_traits/negative_traits.dm b/code/datums/station_traits/negative_traits.dm index 7b0ecf5b097..5858f34aeab 100644 --- a/code/datums/station_traits/negative_traits.dm +++ b/code/datums/station_traits/negative_traits.dm @@ -147,7 +147,7 @@ /datum/station_trait/overflow_job_bureaucracy/proc/set_overflow_job_override(datum/source) SIGNAL_HANDLER - var/datum/job/picked_job = pick(SSjob.joinable_occupations) + var/datum/job/picked_job = pick(SSjob.get_valid_overflow_jobs()) chosen_job_name = lowertext(picked_job.title) // like Chief Engineers vs like chief engineers SSjob.set_overflow_role(picked_job.type) @@ -278,7 +278,7 @@ name = "Random Event Modifier" report_message = "A random event has been modified this shift! Someone forgot to set this!" show_in_report = TRUE - trait_flags = STATION_TRAIT_ABSTRACT + abstract_type = /datum/station_trait/random_event_weight_modifier weight = 0 /// The path to the round_event_control that we modify. @@ -301,7 +301,6 @@ name = "Ionic Stormfront" report_message = "An ionic stormfront is passing over your station's system. Expect an increased likelihood of ion storms afflicting your station's silicon units." trait_type = STATION_TRAIT_NEGATIVE - trait_flags = STATION_TRAIT_MAP_UNRESTRICTED weight = 3 event_control_path = /datum/round_event_control/ion_storm weight_multiplier = 2 @@ -310,7 +309,6 @@ name = "Radiation Stormfront" report_message = "A radioactive stormfront is passing through your station's system. Expect an increased likelihood of radiation storms passing over your station, as well the potential for multiple radiation storms to occur during your shift." trait_type = STATION_TRAIT_NEGATIVE - trait_flags = STATION_TRAIT_MAP_UNRESTRICTED weight = 2 event_control_path = /datum/round_event_control/radiation_storm weight_multiplier = 1.5 @@ -320,7 +318,6 @@ name = "Dust Stormfront" report_message = "The space around your station is clouded by heavy pockets of space dust. Expect an increased likelyhood of space dust storms damaging the station hull." trait_type = STATION_TRAIT_NEGATIVE - trait_flags = STATION_TRAIT_MAP_UNRESTRICTED weight = 2 event_control_path = /datum/round_event_control/meteor_wave/dust_storm weight_multiplier = 2 @@ -381,74 +378,74 @@ /datum/station_trait/revolutionary_trashing/proc/trash_this_place() for(var/area/station/command/area_to_trash in GLOB.areas) - - for(var/turf/current_turf as anything in area_to_trash.get_contained_turfs()) - if(isclosedturf(current_turf)) - continue - if(prob(25)) - var/obj/effect/decal/cleanable/crayon/created_art - created_art = new(current_turf, RANDOM_COLOUR, pick(trash_talk)) - created_art.pixel_x = rand(-10, 10) - created_art.pixel_y = rand(-10, 10) - - if(prob(0.01)) - new /obj/effect/mob_spawn/corpse/human/assistant(current_turf) - continue - - for(var/atom/current_thing as anything in current_turf.contents) - if(istype(current_thing, /obj/machinery/light) && prob(40)) - var/obj/machinery/light/light_to_smash = current_thing - light_to_smash.break_light_tube(skip_sound_and_sparks = TRUE) + for (var/list/zlevel_turfs as anything in area_to_trash.get_zlevel_turf_lists()) + for (var/turf/current_turf as anything in zlevel_turfs) + if(isclosedturf(current_turf)) continue - - if(istype(current_thing, /obj/structure/window)) - if(prob(15)) - current_thing.take_damage(rand(30, 90)) + if(prob(25)) + var/obj/effect/decal/cleanable/crayon/created_art + created_art = new(current_turf, RANDOM_COLOUR, pick(trash_talk)) + created_art.pixel_x = rand(-10, 10) + created_art.pixel_y = rand(-10, 10) + + if(prob(0.01)) + new /obj/effect/mob_spawn/corpse/human/assistant(current_turf) continue - if(istype(current_thing, /obj/structure/table) && prob(40)) - current_thing.take_damage(100) - continue + for(var/atom/current_thing as anything in current_turf.contents) + if(istype(current_thing, /obj/machinery/light) && prob(40)) + var/obj/machinery/light/light_to_smash = current_thing + light_to_smash.break_light_tube(skip_sound_and_sparks = TRUE) + continue - if(istype(current_thing, /obj/structure/chair) && prob(60)) - current_thing.take_damage(150) - continue + if(istype(current_thing, /obj/structure/window)) + if(prob(15)) + current_thing.take_damage(rand(30, 90)) + continue - if(istype(current_thing, /obj/machinery/computer) && prob(30)) - if(istype(current_thing, /obj/machinery/computer/communications)) - continue //To prevent the shuttle from getting autocalled at the start of the round - current_thing.take_damage(160) - continue + if(istype(current_thing, /obj/structure/table) && prob(40)) + current_thing.take_damage(100) + continue - if(istype(current_thing, /obj/machinery/vending) && prob(45)) - var/obj/machinery/vending/vendor_to_trash = current_thing - if(prob(50)) - vendor_to_trash.tilt(get_turf(vendor_to_trash), 0) // crit effects can do some real weird shit, lets disable it + if(istype(current_thing, /obj/structure/chair) && prob(60)) + current_thing.take_damage(150) + continue - if(prob(50)) - vendor_to_trash.take_damage(150) - continue + if(istype(current_thing, /obj/machinery/computer) && prob(30)) + if(istype(current_thing, /obj/machinery/computer/communications)) + continue //To prevent the shuttle from getting autocalled at the start of the round + current_thing.take_damage(160) + continue - if(istype(current_thing, /obj/structure/fireaxecabinet)) //A staple of revolutionary behavior - current_thing.take_damage(90) - continue + if(istype(current_thing, /obj/machinery/vending) && prob(45)) + var/obj/machinery/vending/vendor_to_trash = current_thing + if(prob(50)) + vendor_to_trash.tilt(get_turf(vendor_to_trash), 0) // crit effects can do some real weird shit, lets disable it - if(istype(current_thing, /obj/item/bedsheet/captain)) - new /obj/item/bedsheet/rev(current_thing.loc) - qdel(current_thing) - continue + if(prob(50)) + vendor_to_trash.take_damage(150) + continue - if(istype(current_thing, /obj/item/bedsheet/captain/double)) - new /obj/item/bedsheet/rev/double(current_thing.loc) - qdel(current_thing) - continue + if(istype(current_thing, /obj/structure/fireaxecabinet)) //A staple of revolutionary behavior + current_thing.take_damage(90) + continue + + if(istype(current_thing, /obj/item/bedsheet/captain)) + new /obj/item/bedsheet/rev(current_thing.loc) + qdel(current_thing) + continue + + if(istype(current_thing, /obj/item/bedsheet/captain/double)) + new /obj/item/bedsheet/rev/double(current_thing.loc) + qdel(current_thing) + continue - CHECK_TICK + CHECK_TICK ///Station traits that influence the space background and apply some unique effects! /datum/station_trait/nebula name = "Nebula" - trait_flags = STATION_TRAIT_ABSTRACT + abstract_type = /datum/station_trait/nebula weight = 0 show_in_report = TRUE @@ -469,7 +466,7 @@ ///Station nebula that incur some sort of effect if no shielding is created /datum/station_trait/nebula/hostile - trait_flags = STATION_TRAIT_ABSTRACT + abstract_type = /datum/station_trait/nebula/hostile trait_processes = TRUE ///Intensity of the nebula @@ -699,7 +696,7 @@ ///Starts a storm on roundstart /datum/station_trait/storm - trait_flags = STATION_TRAIT_ABSTRACT + abstract_type = /datum/station_trait/storm var/datum/weather/storm_type /datum/station_trait/storm/on_round_start() diff --git a/code/datums/station_traits/neutral_traits.dm b/code/datums/station_traits/neutral_traits.dm index d3eba73bdc1..dd940b3b821 100644 --- a/code/datums/station_traits/neutral_traits.dm +++ b/code/datums/station_traits/neutral_traits.dm @@ -2,7 +2,7 @@ name = "Bananium Shipment" trait_type = STATION_TRAIT_NEUTRAL weight = 5 - report_message = "Rumors has it that the clown planet has been sending support packages to clowns in this system" + report_message = "Rumors has it that the clown planet has been sending support packages to clowns in this system." trait_to_give = STATION_TRAIT_BANANIUM_SHIPMENTS /datum/station_trait/unnatural_atmosphere @@ -10,7 +10,7 @@ trait_type = STATION_TRAIT_NEUTRAL weight = 5 show_in_report = TRUE - report_message = "System's local planet has irregular atmospherical properties" + report_message = "System's local planet has irregular atmospherical properties." trait_to_give = STATION_TRAIT_UNNATURAL_ATMOSPHERE // This station trait modifies the atmosphere, which is too far past the time admins are able to revert it @@ -134,6 +134,7 @@ weight = 10 show_in_report = TRUE report_message = "Due to a shortage in standard issue jumpsuits, we have provided your assistants with one of our backup supplies." + blacklist = list(/datum/station_trait/assistant_gimmicks) /datum/station_trait/colored_assistants/New() . = ..() @@ -141,60 +142,6 @@ var/new_colored_assistant_type = pick(subtypesof(/datum/colored_assistant) - get_configured_colored_assistant_type()) GLOB.colored_assistant = new new_colored_assistant_type -/datum/station_trait/cargorilla - name = "Cargo Gorilla" - trait_type = STATION_TRAIT_NEUTRAL - weight = 1 - show_in_report = FALSE // Selective attention test. Did you spot the gorilla? - - /// The gorilla we created, we only hold this ref until the round starts. - var/mob/living/basic/gorilla/cargorilla/cargorilla - -/datum/station_trait/cargorilla/New() - . = ..() - RegisterSignal(SSatoms, COMSIG_SUBSYSTEM_POST_INITIALIZE, PROC_REF(replace_cargo)) - -/// Replace some cargo equipment and 'personnel' with a gorilla. -/datum/station_trait/cargorilla/proc/replace_cargo(datum/source) - SIGNAL_HANDLER - - var/mob/living/basic/sloth/cargo_sloth = GLOB.cargo_sloth - if(isnull(cargo_sloth)) - return - - cargorilla = new(cargo_sloth.loc) - cargorilla.name = cargo_sloth.name - // We do a poll on roundstart, don't let ghosts in early - INVOKE_ASYNC(src, PROC_REF(make_id_for_gorilla)) - // hm our sloth looks funny today - qdel(cargo_sloth) - - // monkey carries the crates, the age of robot is over - if(GLOB.cargo_ripley) - qdel(GLOB.cargo_ripley) - -/// Makes an ID card for the gorilla -/datum/station_trait/cargorilla/proc/make_id_for_gorilla() - var/obj/item/card/id/advanced/cargo_gorilla/gorilla_id = new(cargorilla.loc) - gorilla_id.registered_name = cargorilla.name - gorilla_id.update_label() - - cargorilla.put_in_hands(gorilla_id, del_on_fail = TRUE) - -/datum/station_trait/cargorilla/on_round_start() - if(!cargorilla) - return - - addtimer(CALLBACK(src, PROC_REF(get_ghost_for_gorilla), cargorilla), 12 SECONDS) // give ghosts a bit of time to funnel in - cargorilla = null - -/// Get us a ghost for the gorilla. -/datum/station_trait/cargorilla/proc/get_ghost_for_gorilla(mob/living/basic/gorilla/cargorilla/gorilla) - if(QDELETED(gorilla)) - return - - gorilla.poll_for_gorilla() - /datum/station_trait/birthday name = "Employee Birthday" trait_type = STATION_TRAIT_NEUTRAL @@ -251,7 +198,7 @@ /datum/station_trait/birthday/proc/announce_birthday() - report_message = "We here at Nanotrasen would all like to wish [birthday_person ? birthday_person_name : "Employee Name"] a very happy birthday" + report_message = "We here at Nanotrasen would all like to wish [birthday_person ? birthday_person_name : "Employee Name"] a very happy birthday." priority_announce("Happy birthday to [birthday_person ? birthday_person_name : "Employee Name"]! Nanotrasen wishes you a very happy [birthday_person ? thtotext(birthday_person.age + 1) : "255th"] birthday.") if(birthday_person) playsound(birthday_person, 'sound/items/party_horn.ogg', 50) diff --git a/code/datums/station_traits/positive_traits.dm b/code/datums/station_traits/positive_traits.dm index c652c55400a..0f470dd893b 100644 --- a/code/datums/station_traits/positive_traits.dm +++ b/code/datums/station_traits/positive_traits.dm @@ -100,7 +100,7 @@ name = "deathrattled department" trait_type = STATION_TRAIT_POSITIVE show_in_report = TRUE - trait_flags = STATION_TRAIT_ABSTRACT + abstract_type = /datum/station_trait/deathrattle_department blacklist = list(/datum/station_trait/deathrattle_all) var/department_to_apply_to @@ -128,49 +128,42 @@ /datum/station_trait/deathrattle_department/service name = "Deathrattled Service" - trait_flags = STATION_TRAIT_MAP_UNRESTRICTED weight = 1 department_to_apply_to = DEPARTMENT_BITFLAG_SERVICE department_name = "Service" /datum/station_trait/deathrattle_department/cargo name = "Deathrattled Cargo" - trait_flags = STATION_TRAIT_MAP_UNRESTRICTED weight = 1 department_to_apply_to = DEPARTMENT_BITFLAG_CARGO department_name = "Cargo" /datum/station_trait/deathrattle_department/engineering name = "Deathrattled Engineering" - trait_flags = STATION_TRAIT_MAP_UNRESTRICTED weight = 1 department_to_apply_to = DEPARTMENT_BITFLAG_ENGINEERING department_name = "Engineering" /datum/station_trait/deathrattle_department/command name = "Deathrattled Command" - trait_flags = STATION_TRAIT_MAP_UNRESTRICTED weight = 1 department_to_apply_to = DEPARTMENT_BITFLAG_COMMAND department_name = "Command" /datum/station_trait/deathrattle_department/science name = "Deathrattled Science" - trait_flags = STATION_TRAIT_MAP_UNRESTRICTED weight = 1 department_to_apply_to = DEPARTMENT_BITFLAG_SCIENCE department_name = "Science" /datum/station_trait/deathrattle_department/security name = "Deathrattled Security" - trait_flags = STATION_TRAIT_MAP_UNRESTRICTED weight = 1 department_to_apply_to = DEPARTMENT_BITFLAG_SECURITY department_name = "Security" /datum/station_trait/deathrattle_department/medical name = "Deathrattled Medical" - trait_flags = STATION_TRAIT_MAP_UNRESTRICTED weight = 1 department_to_apply_to = DEPARTMENT_BITFLAG_MEDICAL department_name = "Medical" @@ -357,5 +350,15 @@ trim_state = "trim_stationengineer" department_color = COLOR_ASSISTANT_GRAY +/// Spawns assistants with some gear, either gimmicky or functional. Maybe, one day, it will inspire an assistant to do something productive or fun +/datum/station_trait/assistant_gimmicks + name = "Geared Assistants Pilot" + report_message = "The Nanotrassen Assistant Affairs division is performing a pilot to see if different assistant equipments help improve productivity!" + trait_type = STATION_TRAIT_POSITIVE + weight = 3 + trait_to_give = STATION_TRAIT_ASSISTANT_GIMMICKS + show_in_report = TRUE + blacklist = list(/datum/station_trait/colored_assistants) + #undef PARTY_COOLDOWN_LENGTH_MIN #undef PARTY_COOLDOWN_LENGTH_MAX diff --git a/code/datums/status_effects/debuffs/debuffs.dm b/code/datums/status_effects/debuffs/debuffs.dm index a3c52f2e204..6fa59c1c2d3 100644 --- a/code/datums/status_effects/debuffs/debuffs.dm +++ b/code/datums/status_effects/debuffs/debuffs.dm @@ -795,6 +795,8 @@ processing_speed = STATUS_EFFECT_NORMAL_PROCESS /// Will act as the main timer as well as changing how much damage the ants do. var/ants_remaining = 0 + /// Amount of damage done per ant on the victim + var/damage_per_ant = 0.0016 /// Common phrases people covered in ants scream var/static/list/ant_debuff_speech = list( "GET THEM OFF ME!!", @@ -841,7 +843,7 @@ /datum/status_effect/ants/tick(seconds_between_ticks) var/mob/living/carbon/human/victim = owner var/need_mob_update - need_mob_update = victim.adjustBruteLoss(max(0.1, round((ants_remaining * 0.0016) * seconds_between_ticks,0.1)), updating_health = FALSE) //Scales with # of ants (lowers with time). Roughly 10 brute over 50 seconds. + need_mob_update = victim.adjustBruteLoss(max(0.1, round((ants_remaining * damage_per_ant) * seconds_between_ticks,0.1)), updating_health = FALSE) //Scales with # of ants (lowers with time). Roughly 10 brute over 50 seconds. if(victim.stat <= SOFT_CRIT) //Makes sure people don't scratch at themselves while they're in a critical condition if(prob(15)) switch(rand(1,2)) @@ -871,7 +873,7 @@ if(need_mob_update) victim.updatehealth() if(ants_remaining <= 0 || victim.stat >= HARD_CRIT) - victim.remove_status_effect(/datum/status_effect/ants) //If this person has no more ants on them or are dead, they are no longer affected. + victim.remove_status_effect(type) //If this person has no more ants on them or are dead, they are no longer affected. /atom/movable/screen/alert/status_effect/ants name = "Ants!" @@ -889,6 +891,15 @@ to_chat(living, span_notice("You manage to get some of the ants off!")) ant_covered.ants_remaining -= 10 // 5 Times more ants removed per second than just waiting in place +/datum/status_effect/ants/fire + id = "fire_ants" + alert_type = /atom/movable/screen/alert/status_effect/ants/fire + damage_per_ant = 0.0064 + +/atom/movable/screen/alert/status_effect/ants/fire + name = "Fire Ants!" + desc = span_warning("JESUS FUCKING CHRIST IT BURNS! CLICK TO GET THOSE THINGS OFF!") + /datum/status_effect/stagger id = "stagger" status_type = STATUS_EFFECT_REFRESH diff --git a/code/datums/status_effects/debuffs/fire_stacks.dm b/code/datums/status_effects/debuffs/fire_stacks.dm index 4a6e7b6b730..2f32ff5b3be 100644 --- a/code/datums/status_effects/debuffs/fire_stacks.dm +++ b/code/datums/status_effects/debuffs/fire_stacks.dm @@ -7,7 +7,7 @@ /// Current amount of stacks we have var/stacks /// Maximum of stacks that we could possibly get - var/stack_limit = 20 + var/stack_limit = MAX_FIRE_STACKS /// What status effect types do we remove uppon being applied. These are just deleted without any deduction from our or their stacks when forced. var/list/enemy_types /// What status effect types do we merge into if they exist. Ignored when forced. @@ -116,12 +116,8 @@ owner.clear_alert(ALERT_FIRE) else if(!was_on_fire && owner.on_fire) owner.throw_alert(ALERT_FIRE, /atom/movable/screen/alert/fire) - -/** - * Used to update owner's effect overlay - */ - -/datum/status_effect/fire_handler/proc/update_overlay() + owner.update_appearance(UPDATE_OVERLAYS) + update_particles() /datum/status_effect/fire_handler/fire_stacks id = "fire_stacks" //fire_stacks and wet_stacks should have different IDs or else has_status_effect won't work @@ -132,8 +128,6 @@ /// If we're on fire var/on_fire = FALSE - /// Stores current fire overlay icon state, for optimisation purposes - var/last_icon_state /// Reference to the mob light emitter itself var/obj/effect/dummy/lighting_obj/moblight /// Type of mob light emitter we use when on fire @@ -160,8 +154,6 @@ return TRUE deal_damage(seconds_between_ticks) - update_overlay() - update_particles() /datum/status_effect/fire_handler/fire_stacks/update_particles() if(on_fire) @@ -239,8 +231,6 @@ moblight = new moblight_type(owner) cache_stacks() - update_overlay() - update_particles() SEND_SIGNAL(owner, COMSIG_LIVING_IGNITED, owner) return TRUE @@ -254,8 +244,6 @@ owner.clear_mood_event("on_fire") SEND_SIGNAL(owner, COMSIG_LIVING_EXTINGUISHED, owner) cache_stacks() - update_overlay() - update_particles() for(var/obj/item/equipped in owner.get_equipped_items()) equipped.extinguish() @@ -263,16 +251,26 @@ if(on_fire) extinguish() set_stacks(0) - update_overlay() - update_particles() + UnregisterSignal(owner, COMSIG_ATOM_UPDATE_OVERLAYS) + owner.update_appearance(UPDATE_OVERLAYS) return ..() -/datum/status_effect/fire_handler/fire_stacks/update_overlay() - last_icon_state = owner.update_fire_overlay(stacks, on_fire, last_icon_state) - /datum/status_effect/fire_handler/fire_stacks/on_apply() . = ..() - update_overlay() + RegisterSignal(owner, COMSIG_ATOM_UPDATE_OVERLAYS, PROC_REF(add_fire_overlay)) + owner.update_appearance(UPDATE_OVERLAYS) + +/datum/status_effect/fire_handler/fire_stacks/proc/add_fire_overlay(mob/living/source, list/overlays) + SIGNAL_HANDLER + + if(stacks <= 0 || !on_fire) + return + + var/mutable_appearance/created_overlay = owner.get_fire_overlay(stacks, on_fire) + if(isnull(created_overlay)) + return + + overlays |= created_overlay /obj/effect/dummy/lighting_obj/moblight/fire name = "fire" diff --git a/code/datums/status_effects/debuffs/hooked.dm b/code/datums/status_effects/debuffs/hooked.dm new file mode 100644 index 00000000000..9280303209a --- /dev/null +++ b/code/datums/status_effects/debuffs/hooked.dm @@ -0,0 +1,63 @@ +///Status effect applied when casting a fishing rod at someone, provided the attached fishing hook allows it. +/datum/status_effect/grouped/hooked + id = "hooked" + duration = -1 + tick_interval = -1 + status_type = STATUS_EFFECT_MULTIPLE + alert_type = /atom/movable/screen/alert/status_effect/hooked + +/datum/status_effect/grouped/hooked/proc/try_unhook() + return do_after(owner, 2 SECONDS, timed_action_flags = IGNORE_USER_LOC_CHANGE, extra_checks = CALLBACK(src, PROC_REF(still_exists)), interaction_key = DOAFTER_SOURCE_REMOVING_HOOK) + +/datum/status_effect/grouped/hooked/proc/still_exists() + return !QDELETED(src) + +/datum/status_effect/grouped/hooked/on_creation(mob/living/new_owner, datum/beam/fishing_line/source) + . = ..() + if(!.) //merged with an existing effect + return + RegisterSignal(source, COMSIG_QDELETING, PROC_REF(on_fishing_line_deleted)) + +/datum/status_effect/grouped/hooked/merge_with_existing(datum/status_effect/grouped/hooked/existing, datum/beam/fishing_line/source) + existing.RegisterSignal(source, COMSIG_QDELETING, PROC_REF(on_fishing_line_deleted)) + +/datum/status_effect/grouped/hooked/proc/on_fishing_line_deleted(datum/source) + SIGNAL_HANDLER + owner.remove_status_effect(type, source) + +/atom/movable/screen/alert/status_effect/hooked + name = "Snagged By Hook" + desc = "You're being caught like a fish by some asshat! Click to safely remove the hook or move away far enough to snap it off." + icon_state = "hooked" + +/atom/movable/screen/alert/status_effect/hooked/Click() + if(!owner.can_resist()) + return + owner.balloon_alert(owner, "removing hook...") + var/datum/status_effect/grouped/hooked/effect = owner.has_status_effect(attached_effect.type) + if(!effect.try_unhook()) + return + owner.balloon_alert(owner, "hook removed") + var/datum/beam/fishing_line/rand_source = pick(effect.sources) + qdel(rand_source) + +///Version used by the jawed fishing hook, which also applies slowdown +/datum/status_effect/grouped/hooked/jaws + id = "hooked_jaws" + alert_type = /atom/movable/screen/alert/status_effect/hooked/jaws + +/datum/status_effect/grouped/hooked/jaws/on_apply() + . = ..() + owner.add_movespeed_modifier(/datum/movespeed_modifier/hook_jawed) + +/datum/status_effect/grouped/hooked/jaws/on_remove() + . = ..() + owner.remove_movespeed_modifier(/datum/movespeed_modifier/hook_jawed) + +/datum/status_effect/grouped/hooked/jaws/try_unhook() + return do_after(owner, 10 SECONDS, extra_checks = CALLBACK(src, PROC_REF(still_exists)), interaction_key = DOAFTER_SOURCE_REMOVING_HOOK) + +/atom/movable/screen/alert/status_effect/hooked/jaws + name = "Snagged By Jaws" + desc = "You've been snagged by some sort of beartrap-slash-fishing-hook-gizmo! Click to safely remove the hook or move away far enough to snap it off." + icon_state = "hooked_jaws" diff --git a/code/datums/status_effects/debuffs/staggered.dm b/code/datums/status_effects/debuffs/staggered.dm index 0ffde66b1f1..89cf4943c19 100644 --- a/code/datums/status_effects/debuffs/staggered.dm +++ b/code/datums/status_effects/debuffs/staggered.dm @@ -10,7 +10,7 @@ /datum/status_effect/staggered/on_apply() //you can't stagger the dead. - if(owner.stat == DEAD) + if(owner.stat == DEAD || HAS_TRAIT(owner, TRAIT_NO_STAGGER)) return FALSE RegisterSignal(owner, COMSIG_LIVING_DEATH, PROC_REF(clear_staggered)) @@ -31,10 +31,12 @@ /datum/status_effect/staggered/tick(seconds_between_ticks) //you can't stagger the dead - in case somehow you die mid-stagger - if(owner.stat == DEAD || HAS_TRAIT(owner, TRAIT_FAKEDEATH)) + if(owner.stat == DEAD || HAS_TRAIT(owner, TRAIT_NO_STAGGER)) + qdel(src) return - else - owner.do_stagger_animation() + if(HAS_TRAIT(owner, TRAIT_FAKEDEATH)) + return + owner.do_stagger_animation() /// Helper proc that causes the mob to do a stagger animation. /// Doesn't change significantly, just meant to represent swaying back and forth diff --git a/code/datums/status_effects/grouped_effect.dm b/code/datums/status_effects/grouped_effect.dm index ade0a187e0d..601945b83aa 100644 --- a/code/datums/status_effects/grouped_effect.dm +++ b/code/datums/status_effects/grouped_effect.dm @@ -9,12 +9,16 @@ var/datum/status_effect/grouped/existing = new_owner.has_status_effect(type) if(existing) existing.sources |= source + merge_with_existing(existing, source) qdel(src) return FALSE sources |= source return ..() +/datum/status_effect/grouped/proc/merge_with_existing(datum/status_effect/grouped/existing, source) + return + /datum/status_effect/grouped/before_remove(source) sources -= source return !length(sources) diff --git a/code/datums/status_effects/neutral.dm b/code/datums/status_effects/neutral.dm index 84f30ab7855..3f267cb3bad 100644 --- a/code/datums/status_effects/neutral.dm +++ b/code/datums/status_effects/neutral.dm @@ -61,6 +61,7 @@ /datum/atom_hud/alternate_appearance/basic/one_person, "in_love", image(icon = 'icons/effects/effects.dmi', icon_state = "love_hearts", loc = date), + null, new_owner, )) diff --git a/code/datums/stock_market_events.dm b/code/datums/stock_market_events.dm new file mode 100644 index 00000000000..81142d23002 --- /dev/null +++ b/code/datums/stock_market_events.dm @@ -0,0 +1,115 @@ +/datum/stock_market_event + /// The name of the event, used to describe it in the news. + var/name = "Stock Market Event!" + /// A list of company names to use for the event and the circumstance. + var/static/list/company_name = list( + "Nakamura Engineering", + "Robust Industries, LLC", + "MODular Solutions", + "SolGov", + "Australicus Industrial Mining", + "Vey-Medical", + "Aussec Armory", + "Dreamland Robotics" + ) + /// A list of strings selected from the event that's used to describe the event in the news. + var/list/circumstance = list() + /// What material is affected by the event? + var/datum/material/mat + /// Constant to multiply the original material value by to get the new minimum value, unless the material has a minimum override. + var/price_minimum = SHEET_MATERIAL_AMOUNT * 0.5 + /// Constant to multiply the original material value by to get the new maximum value. + var/price_maximum = SHEET_MATERIAL_AMOUNT * 3 + + /// When this event is ongoing, what direction will the price trend in? + var/trend_value + /// When this event is triggered, for how long will it's effects last? + var/trend_duration + +/** + * When a new stock_market_event is created, this proc is called to set up the event if there's anything that needs to happen upon it starting. + * @param _mat The material that this event will affect. + */ +/datum/stock_market_event/proc/start_event(datum/material/mat) + if(istype(mat, /datum/material)) + return FALSE + src.mat = mat + if(!isnull(trend_value)) + SSstock_market.materials_trends[mat] = trend_value + if(!isnull(trend_duration)) + SSstock_market.materials_trend_life[mat] = trend_duration + return TRUE + +/** + * This proc is called every tick while the event is ongoing by SSstock_market. + */ +/datum/stock_market_event/proc/handle() + trend_duration-- + if(trend_duration <= 0) + end_event() + return + +/** + * When a stock_market_event is ended, this proc is called to apply any final effects and clean up anything that needs to be cleaned up. + */ +/datum/stock_market_event/proc/end_event() + SSstock_market.active_events -= src + qdel(src) + +/** + * This proc is called to create a news string for the event, which is passed along to SSstock_market to be appended to the automatic newscaster messages. + */ +/datum/stock_market_event/proc/create_news() + var/temp_company = pick(company_name) + var/temp_circumstance = pick(circumstance) + SSstock_market.news_string += "[name] [temp_company] [temp_circumstance][mat.name].
" + + +/datum/stock_market_event/market_reset + name = "Market Reset!" + trend_value = MARKET_TREND_STABLE + trend_duration = 1 + circumstance = list( + "was purchased by a private investment firm, resetting the price of ", + "restructured, resetting the price of ", + "has been rolled into a larger company, resetting the price of ", + ) + +/datum/stock_market_event/market_reset/start_event() + . = ..() + SSstock_market.materials_prices[mat] = (initial(mat.value_per_unit)) * SHEET_MATERIAL_AMOUNT + create_news() + +/datum/stock_market_event/large_boost + name = "Large Boost!" + trend_value = MARKET_TREND_UPWARD + trend_duration = 3 + circumstance = list( + "has just released a new product that raised the price of ", + "discovered a new valuable use for ", + "has produced a report that raised the price of ", + ) + +/datum/stock_market_event/large_boost/start_event() + . = ..() + var/price_units = SSstock_market.materials_prices[mat] + SSstock_market.materials_prices[mat] += round(gaussian(price_units * 0.5, price_units * 0.1)) + SSstock_market.materials_prices[mat] = clamp(SSstock_market.materials_prices[mat], price_minimum * mat.value_per_unit, price_maximum * mat.value_per_unit) + create_news() + +/datum/stock_market_event/large_drop + name = "Large Drop!" + trend_value = MARKET_TREND_DOWNWARD + trend_duration = 5 + circumstance = list( + "'s latest product has seen major controversy, and resulted in a price drop for ", + "has been hit with a major lawsuit, resulting in a price drop for ", + "has produced a report that lowered the price of ", + ) + +/datum/stock_market_event/large_drop/start_event() + . = ..() + var/price_units = SSstock_market.materials_prices[mat] + SSstock_market.materials_prices[mat] -= round(gaussian(price_units * 1.5, price_units * 0.1)) + SSstock_market.materials_prices[mat] = clamp(SSstock_market.materials_prices[mat], price_minimum * mat.value_per_unit, price_maximum * mat.value_per_unit) + create_news() diff --git a/code/datums/storage/storage.dm b/code/datums/storage/storage.dm index acfa2e40f18..8213bf347ab 100644 --- a/code/datums/storage/storage.dm +++ b/code/datums/storage/storage.dm @@ -5,142 +5,134 @@ * If you're looking to create custom storage type behaviors, check ../subtypes */ /datum/storage - /// the actual item we're attached to - var/datum/weakref/parent - /// the actual item we're storing in - var/datum/weakref/real_location - - /// if this is set, only items, and their children, will fit - var/list/can_hold - /// if this is set, items, and their children, won't fit - var/list/cant_hold - /// if set, these items will be the exception to the max size of object that can fit. - var/list/exception_hold - /// if exception_hold is set, how many exception items can we hold at any one time? - var/exception_max = INFINITE - /// if set can only contain stuff with this single trait present. - var/list/can_hold_trait - - /// whether or not we should have those cute little animations + /** + * A reference to the atom linked to this storage object + * If the parent goes, we go. Will never be null. + */ + VAR_FINAL/atom/parent + /** + * A reference to the atom where the items are actually stored. + * By default this is parent. Should generally never be null. + * Sometimes it's not the parent, that's what is called "dissassociated storage". + * + * Do NOT set this directly, use set_real_location. + */ + VAR_FINAL/atom/real_location + + /// List of all the mobs currently viewing the contents of this storage. + VAR_PRIVATE/list/mob/is_using = list() + + /// The storage display screen object. + VAR_PRIVATE/atom/movable/screen/storage/boxes + /// The 'close button' screen object. + VAR_PRIVATE/atom/movable/screen/close/closer + + /// Typecache of items that can be inserted into this storage. + /// By default, all item types can be inserted (assuming other conditions are met). + /// Do not set directly, use set_holdable + VAR_FINAL/list/obj/item/can_hold + /// Typecache of items that cannot be inserted into this storage. + /// By default, no item types are barred from insertion. + /// Do not set directly, use set_holdable + VAR_FINAL/list/obj/item/cant_hold + /// Typecache of items that can always be inserted into this storage, regardless of size. + VAR_FINAL/list/obj/item/exception_hold + /// For use with an exception typecache: + /// The maximum amount of items of the exception type that can be inserted into this storage. + var/exception_max = INFINITY + + /// Determines whether we play a rustle animation when inserting/removing items. var/animated = TRUE + /// Determines whether we play a rustle sound when inserting/removing items. + var/rustle_sound = TRUE + /// The maximum amount of items that can be inserted into this storage. var/max_slots = 7 - /// max weight class for a single item being inserted + /// The largest weight class that can be inserted into this storage, inclusive. var/max_specific_storage = WEIGHT_CLASS_NORMAL - /// max combined weight classes the storage can hold - var/max_total_storage = 14 - - /// list of all the mobs currently viewing the contents - var/list/is_using = list() + /// Determines the maximum amount of weight that can be inserted into this storage. + /// Weight is calculated by the sum of all of our content's weight classes. + var/max_total_storage = WEIGHT_CLASS_SMALL * 7 + /// Whether the storage is currently locked (inaccessible). See [code/__DEFINES/storage.dm] var/locked = STORAGE_NOT_LOCKED - /// whether or not we should open when clicked + + /// Whether we open when attack_handed (clicked on with an empty hand). var/attack_hand_interact = TRUE - /// whether or not we allow storage objects of the same size inside + + /// Whether we allow storage objects of the same size inside. var/allow_big_nesting = FALSE - /// should we be allowed to pickup an object by clicking it + /// If TRUE, we can click on items with the storage object to pick them up and insert them. var/allow_quick_gather = FALSE - /// show we allow emptying all contents by using the storage object in hand + /// The mode for collection when allow_quick_gather is enabled. See [code/__DEFINES/storage.dm] + var/collection_mode = COLLECT_EVERYTHING + + /// If TRUE, we can use-in-hand the storage object to dump all of its contents. var/allow_quick_empty = FALSE - /// the mode for collection when allow_quick_gather is enabled - var/collection_mode = COLLECT_ONE + /// If we support smartly removing/inserting things from ourselves var/supports_smart_equip = TRUE - /// shows what we can hold in examine text + /// An additional description shown on double-examine. + /// Is autogenerated to the can_hold list if not set. var/can_hold_description - /// contents shouldn't be emped - var/emp_shielded - - /// you put things *in* a bag, but *on* a plate + /// The preposition used when inserting items into this storage. + /// IE: You put things *in* a bag, but *on* a plate. var/insert_preposition = "in" - /// don't show any chat messages regarding inserting items + /// If TRUE, chat messages for inserting/removing items will not be shown. var/silent = FALSE - /// same as above but only for the user, useful to cut on chat spam without removing feedback for other players + /// Same as above but only for the user. + /// Useful to cut on chat spam without removing feedback for other players. var/silent_for_user = FALSE - /// play a rustling sound when interacting with the bag - var/rustle_sound = TRUE - /// alt click takes an item out instead of opening up storage + /// if TRUE, alt-click takes an item out instantly rather than opening up storage. var/quickdraw = FALSE - /// instead of displaying multiple items of the same type, display them as numbered contents + /// Instead of displaying multiple items of the same type, display them as numbered contents. var/numerical_stacking = FALSE - /// storage display object - var/atom/movable/screen/storage/boxes - /// close button object - var/atom/movable/screen/close/closer - - /// maximum amount of columns a storage object can have + /// Maximum amount of columns a storage object can have var/screen_max_columns = 7 + /// Maximum amount of rows a storage object can have var/screen_max_rows = INFINITY - /// pixel location of the boxes and close button + /// X-pixel location of the boxes and close button var/screen_pixel_x = 16 + /// Y-pixel location of the boxes and close button var/screen_pixel_y = 16 - /// where storage starts being rendered, screen_loc wise + /// Where storage starts being rendered, x-screen_loc wise var/screen_start_x = 4 + /// Where storage starts being rendered, y-screen_loc wise var/screen_start_y = 2 - var/datum/weakref/modeswitch_action_ref + /// Ref to the item action that toggles collectmode. + VAR_PRIVATE/datum/action/item_action/storage_gather_mode/modeswitch_action - /// If true shows the contents of the storage in open_storage + /// If TRUE, shows the contents of the storage in open_storage var/display_contents = TRUE -/datum/storage/New(atom/parent, max_slots, max_specific_storage, max_total_storage, numerical_stacking, allow_quick_gather, allow_quick_empty, collection_mode, attack_hand_interact) - boxes = new(null, null, src) - closer = new(null, null, src) - - src.parent = WEAKREF(parent) - src.real_location = src.parent - src.max_slots = max_slots || src.max_slots - src.max_specific_storage = max_specific_storage || src.max_specific_storage - src.max_total_storage = max_total_storage || src.max_total_storage - src.numerical_stacking = numerical_stacking || src.numerical_stacking - src.allow_quick_gather = allow_quick_gather || src.allow_quick_gather - src.allow_quick_empty = allow_quick_empty || src.allow_quick_empty - src.collection_mode = collection_mode || src.collection_mode - src.attack_hand_interact = attack_hand_interact || src.attack_hand_interact - - var/atom/resolve_parent = src.parent?.resolve() - var/atom/resolve_location = src.real_location?.resolve() - - if(!resolve_parent) - stack_trace("storage could not resolve parent weakref") +/datum/storage/New( + atom/parent, + max_slots = src.max_slots, + max_specific_storage = src.max_specific_storage, + max_total_storage = src.max_total_storage, +) + if(!istype(parent)) + stack_trace("Storage datum ([type]) created without a [isnull(parent) ? "null parent" : "invalid parent ([parent.type])"]!") qdel(src) return - if(!resolve_location) - stack_trace("storage could not resolve location weakref") - qdel(src) - return - - RegisterSignals(resolve_parent, list(COMSIG_ATOM_ATTACK_PAW, COMSIG_ATOM_ATTACK_HAND), PROC_REF(on_attack)) - RegisterSignal(resolve_parent, COMSIG_MOUSEDROP_ONTO, PROC_REF(on_mousedrop_onto)) - RegisterSignal(resolve_parent, COMSIG_MOUSEDROPPED_ONTO, PROC_REF(on_mousedropped_onto)) - - RegisterSignal(resolve_parent, COMSIG_ATOM_EMP_ACT, PROC_REF(on_emp_act)) - RegisterSignal(resolve_parent, COMSIG_ATOM_ATTACKBY, PROC_REF(on_attackby)) - RegisterSignal(resolve_parent, COMSIG_ITEM_PRE_ATTACK, PROC_REF(on_preattack)) - RegisterSignal(resolve_parent, COMSIG_OBJ_DECONSTRUCT, PROC_REF(on_deconstruct)) - - RegisterSignal(resolve_parent, COMSIG_ITEM_ATTACK_SELF, PROC_REF(mass_empty)) - - RegisterSignals(resolve_parent, list(COMSIG_CLICK_ALT, COMSIG_ATOM_ATTACK_GHOST, COMSIG_ATOM_ATTACK_HAND_SECONDARY), PROC_REF(open_storage_on_signal)) - RegisterSignal(resolve_parent, COMSIG_ATOM_ATTACKBY_SECONDARY, PROC_REF(open_storage_attackby_secondary)) - - RegisterSignal(resolve_location, COMSIG_ATOM_ENTERED, PROC_REF(handle_enter)) - RegisterSignal(resolve_location, COMSIG_ATOM_EXITED, PROC_REF(handle_exit)) - RegisterSignal(resolve_parent, COMSIG_MOVABLE_MOVED, PROC_REF(close_distance)) - RegisterSignal(resolve_parent, COMSIG_ITEM_EQUIPPED, PROC_REF(update_actions)) + boxes = new(null, null, src) + closer = new(null, null, src) - RegisterSignal(resolve_parent, COMSIG_TOPIC, PROC_REF(topic_handle)) + set_parent(parent) + set_real_location(parent) - RegisterSignal(resolve_parent, COMSIG_ATOM_EXAMINE, PROC_REF(handle_examination)) - RegisterSignal(resolve_parent, COMSIG_ATOM_EXAMINE_MORE, PROC_REF(handle_extra_examination)) + src.max_slots = max_slots + src.max_specific_storage = max_specific_storage + src.max_total_storage = max_total_storage orient_to_hud() @@ -173,15 +165,11 @@ if(!istype(arrived)) return - var/atom/resolve_parent = parent?.resolve() - if(!resolve_parent) - return - - resolve_parent.update_appearance(UPDATE_ICON_STATE) - arrived.item_flags |= IN_STORAGE refresh_views() arrived.on_enter_storage(src) + SEND_SIGNAL(arrived, COMSIG_ITEM_STORED, src) + parent.update_appearance() /// Automatically ran on all object removals: flag marking and view refreshing. /datum/storage/proc/handle_exit(datum/source, obj/item/gone) @@ -190,67 +178,97 @@ if(!istype(gone)) return - var/atom/resolve_parent = parent?.resolve() - if(!resolve_parent) - return - - resolve_parent.update_appearance(UPDATE_ICON_STATE) - gone.item_flags &= ~IN_STORAGE remove_and_refresh(gone) gone.on_exit_storage(src) + SEND_SIGNAL(gone, COMSIG_ITEM_UNSTORED, src) + parent.update_appearance() + +/// Set the passed atom as the parent +/datum/storage/proc/set_parent(atom/new_parent) + PRIVATE_PROC(TRUE) + + ASSERT(isnull(parent)) + + parent = new_parent + // a few of theses should probably be on the real_location rather than the parent + RegisterSignals(parent, list(COMSIG_ATOM_ATTACK_PAW, COMSIG_ATOM_ATTACK_HAND), PROC_REF(on_attack)) + RegisterSignal(parent, COMSIG_MOUSEDROP_ONTO, PROC_REF(on_mousedrop_onto)) + RegisterSignal(parent, COMSIG_MOUSEDROPPED_ONTO, PROC_REF(on_mousedropped_onto)) + RegisterSignal(parent, COMSIG_ATOM_ATTACKBY, PROC_REF(on_attackby)) + RegisterSignal(parent, COMSIG_ITEM_PRE_ATTACK, PROC_REF(on_preattack)) + RegisterSignal(parent, COMSIG_ITEM_ATTACK_SELF, PROC_REF(mass_empty)) + RegisterSignals(parent, list(COMSIG_CLICK_ALT, COMSIG_ATOM_ATTACK_GHOST, COMSIG_ATOM_ATTACK_HAND_SECONDARY), PROC_REF(open_storage_on_signal)) + RegisterSignal(parent, COMSIG_ATOM_ATTACKBY_SECONDARY, PROC_REF(open_storage_attackby_secondary)) + RegisterSignal(parent, COMSIG_MOVABLE_MOVED, PROC_REF(close_distance)) + RegisterSignal(parent, COMSIG_ITEM_EQUIPPED, PROC_REF(update_actions)) + RegisterSignal(parent, COMSIG_TOPIC, PROC_REF(topic_handle)) + RegisterSignal(parent, COMSIG_ATOM_EXAMINE, PROC_REF(handle_examination)) + RegisterSignal(parent, COMSIG_ATOM_EXAMINE_MORE, PROC_REF(handle_extra_examination)) + RegisterSignal(parent, COMSIG_OBJ_DECONSTRUCT, PROC_REF(on_deconstruct)) + RegisterSignal(parent, COMSIG_ATOM_EMP_ACT, PROC_REF(on_emp_act)) /** * Sets where items are physically being stored in the case it shouldn't be on the parent. * - * @param atom/real the new real location of the datum - * @param should_drop if TRUE, all the items in the old real location will be dropped + * Does not handle moving any existing items, that must be done manually. + * + * Arguments + * * atom/new_real_location - the new real location of the datum + * * should_drop - if TRUE, all the items in the old real location will be dropped. */ -/datum/storage/proc/set_real_location(atom/real, should_drop = FALSE) - if(!real) - return - - var/atom/resolve_location = src.real_location?.resolve() - if(!resolve_location) - return - - var/atom/resolve_parent = src.parent?.resolve() - if(!resolve_parent) +/datum/storage/proc/set_real_location(atom/new_real_location, should_drop = FALSE) + if(!isnull(real_location)) + UnregisterSignal(real_location, list( + COMSIG_ATOM_ENTERED, + COMSIG_ATOM_EXITED, + COMSIG_QDELETING, + COMSIG_ATOM_EMP_ACT, + )) + real_location.flags_1 &= ~HAS_DISASSOCIATED_STORAGE_1 + if(should_drop) + remove_all() + + if(isnull(new_real_location)) return - if(should_drop) - remove_all(get_turf(resolve_parent)) + real_location = new_real_location + if(real_location != parent) + real_location.flags_1 |= HAS_DISASSOCIATED_STORAGE_1 + RegisterSignal(real_location, COMSIG_ATOM_ENTERED, PROC_REF(handle_enter)) + RegisterSignal(real_location, COMSIG_ATOM_EXITED, PROC_REF(handle_exit)) + RegisterSignal(real_location, COMSIG_QDELETING, PROC_REF(real_location_deleted)) - resolve_location.flags_1 &= ~HAS_DISASSOCIATED_STORAGE_1 - real.flags_1 |= HAS_DISASSOCIATED_STORAGE_1 - - UnregisterSignal(resolve_location, list(COMSIG_ATOM_ENTERED, COMSIG_ATOM_EXITED)) - - RegisterSignal(real, COMSIG_ATOM_ENTERED, PROC_REF(handle_enter)) - RegisterSignal(real, COMSIG_ATOM_EXITED, PROC_REF(handle_exit)) +/// Signal handler for when the real location is deleted. +/datum/storage/proc/real_location_deleted(datum/deleting_real_location) + SIGNAL_HANDLER - real_location = WEAKREF(real) + set_real_location(null) /datum/storage/proc/topic_handle(datum/source, user, href_list) SIGNAL_HANDLER + if(isnull(can_hold_description)) + return + if(href_list["show_valid_pocket_items"]) - handle_show_valid_items(source, user) + to_chat(user, span_notice("[source] can hold: [can_hold_description]")) /datum/storage/proc/handle_examination(datum/source, mob/user, list/examine_list) SIGNAL_HANDLER - if(!isnull(can_hold_description)) - examine_list += span_notice("You can examine this further to check what kind of extra items it can hold.") + if(isnull(can_hold_description)) + return + + examine_list += span_notice("You can examine this further to check what kind of extra items it can hold.") /datum/storage/proc/handle_extra_examination(datum/source, mob/user, list/examine_list) SIGNAL_HANDLER - if(!isnull(can_hold_description)) - examine_list += handle_show_valid_items(source, user) + if(isnull(can_hold_description)) + return -/datum/storage/proc/handle_show_valid_items(datum/source, user) - to_chat(user, span_notice("[source] can hold: [can_hold_description]")) + examine_list += span_notice("[source] can hold: [can_hold_description]") /// Almost 100% of the time the lists passed into set_holdable are reused for each instance /// Just fucking cache it 4head @@ -261,21 +279,22 @@ /// ~Lemon GLOBAL_LIST_EMPTY(cached_storage_typecaches) -/datum/storage/proc/set_holdable(list/can_hold_list = null, list/cant_hold_list = null) - if(!islist(can_hold_list)) +/datum/storage/proc/set_holdable(list/can_hold_list, list/cant_hold_list) + if(!isnull(can_hold_list) && !islist(can_hold_list)) can_hold_list = list(can_hold_list) - if(!islist(cant_hold_list)) + if(!isnull(cant_hold_list) && !islist(cant_hold_list)) cant_hold_list = list(cant_hold_list) - can_hold_description = generate_hold_desc(can_hold_list) + if (!isnull(can_hold_list)) + if(isnull(can_hold_description)) + can_hold_description = generate_hold_desc(can_hold_list) - if (can_hold_list) var/unique_key = can_hold_list.Join("-") if(!GLOB.cached_storage_typecaches[unique_key]) GLOB.cached_storage_typecaches[unique_key] = typecacheof(can_hold_list) can_hold = GLOB.cached_storage_typecaches[unique_key] - if (cant_hold_list != null) + if (!isnull(cant_hold_list)) var/unique_key = cant_hold_list.Join("-") if(!GLOB.cached_storage_typecaches[unique_key]) GLOB.cached_storage_typecaches[unique_key] = typecacheof(cant_hold_list) @@ -285,8 +304,7 @@ GLOBAL_LIST_EMPTY(cached_storage_typecaches) /datum/storage/proc/generate_hold_desc(can_hold_list) var/list/desc = list() - for(var/valid_type in can_hold_list) - var/obj/item/valid_item = valid_type + for(var/obj/item/valid_item as anything in can_hold_list) desc += "\a [initial(valid_item.name)]" return "\n\t[span_notice("[desc.Join("\n\t")]")]" @@ -295,21 +313,18 @@ GLOBAL_LIST_EMPTY(cached_storage_typecaches) /datum/storage/proc/update_actions(atom/source, mob/equipper, slot) SIGNAL_HANDLER - var/obj/item/resolve_parent = parent?.resolve() - if(!resolve_parent) + if(!allow_quick_gather) + QDEL_NULL(modeswitch_action) return - - if(!istype(resolve_parent) || !allow_quick_gather) - QDEL_NULL(modeswitch_action_ref) + if(!isnull(modeswitch_action)) return - - var/datum/action/existing = modeswitch_action_ref?.resolve() - if(!QDELETED(existing)) + if(!isitem(parent)) return - var/datum/action/modeswitch_action = resolve_parent.add_item_action(/datum/action/item_action/storage_gather_mode) + var/obj/item/item_parent = parent + modeswitch_action = item_parent.add_item_action(/datum/action/item_action/storage_gather_mode) RegisterSignal(modeswitch_action, COMSIG_ACTION_TRIGGER, PROC_REF(action_trigger)) - modeswitch_action_ref = WEAKREF(modeswitch_action) + RegisterSignal(modeswitch_action, COMSIG_QDELETING, PROC_REF(action_deleted)) /// Refreshes and item to be put back into the real world, out of storage. /datum/storage/proc/reset_item(obj/item/thing) @@ -321,33 +336,23 @@ GLOBAL_LIST_EMPTY(cached_storage_typecaches) thing.maptext = "" /** - * Checks if an item is capable of being inserted into the storage + * Checks if an item is capable of being inserted into the storage. * - * @param obj/item/to_insert the item we're checking - * @param messages if TRUE, will print out a message if the item is not valid - * @param force bypass locked storage up to a certain level. See [code/__DEFINES/storage.dm] + * Arguments + * * obj/item/to_insert - the item we're checking + * * messages - if TRUE, will print out a message if the item is not valid + * * force - bypass locked storage up to a certain level. See [code/__DEFINES/storage.dm] */ /datum/storage/proc/can_insert(obj/item/to_insert, mob/user, messages = TRUE, force = STORAGE_NOT_LOCKED) - var/obj/item/resolve_parent = parent?.resolve() - if(!resolve_parent) - return - - var/obj/item/resolve_location = real_location?.resolve() - if(!resolve_location) - return - - if(QDELETED(to_insert)) - return FALSE - - if(!isitem(to_insert)) + if(QDELETED(to_insert) || !istype(to_insert)) return FALSE if(locked > force) - if(user && messages) + if(messages && user) user.balloon_alert(user, "closed!") return FALSE - if((to_insert == resolve_parent) || (to_insert == real_location)) + if((to_insert == parent) || (to_insert == real_location)) return FALSE if(to_insert.w_class > max_specific_storage) @@ -355,52 +360,45 @@ GLOBAL_LIST_EMPTY(cached_storage_typecaches) if(messages && user) user.balloon_alert(user, "too big!") return FALSE - if(exception_max != INFINITE && exception_max <= exception_count()) + if(exception_max <= get_exception_count()) if(messages && user) user.balloon_alert(user, "no room!") return FALSE - if(resolve_location.contents.len >= max_slots) + if(real_location.contents.len >= max_slots) if(messages && user && !silent_for_user) user.balloon_alert(user, "no room!") return FALSE - var/total_weight = to_insert.w_class - - for(var/obj/item/thing in resolve_location) - total_weight += thing.w_class - - if(total_weight > max_total_storage) + if(to_insert.w_class + get_total_weight() > max_total_storage) if(messages && user && !silent_for_user) user.balloon_alert(user, "no room!") return FALSE - if(length(can_hold)) - if(!is_type_in_typecache(to_insert, can_hold)) - if(messages && user) - user.balloon_alert(user, "can't hold!") - return FALSE - - if(is_type_in_typecache(to_insert, cant_hold) || HAS_TRAIT(to_insert, TRAIT_NO_STORAGE_INSERT) || (can_hold_trait && !HAS_TRAIT(to_insert, can_hold_trait))) + var/can_hold_it = isnull(can_hold) || is_type_in_typecache(to_insert, can_hold) + var/cant_hold_it = is_type_in_typecache(to_insert, cant_hold) + var/trait_says_no = HAS_TRAIT(to_insert, TRAIT_NO_STORAGE_INSERT) + if(!can_hold_it || cant_hold_it || trait_says_no) if(messages && user) user.balloon_alert(user, "can't hold!") return FALSE if(HAS_TRAIT(to_insert, TRAIT_NODROP)) - if(messages) + if(messages && user) user.balloon_alert(user, "stuck on your hand!") return FALSE - var/datum/storage/biggerfish = resolve_parent.loc.atom_storage // this is valid if the container our resolve_parent is being held in is a storage item - - if(biggerfish && biggerfish.max_specific_storage < max_specific_storage) + // this is valid if the container our location is being held in is a storage item + var/datum/storage/bigger_fish = parent.loc.atom_storage + if(bigger_fish && bigger_fish.max_specific_storage < max_specific_storage) if(messages && user) - user.balloon_alert(user, "[lowertext(resolve_parent.loc.name)] is in the way!") + user.balloon_alert(user, "[lowertext(parent.loc.name)] is in the way!") return FALSE - if(istype(resolve_parent)) - var/datum/storage/item_storage = to_insert.atom_storage - if((to_insert.w_class >= resolve_parent.w_class) && item_storage && !allow_big_nesting) + if(isitem(parent)) + var/obj/item/item_parent = parent + var/datum/storage/smaller_fish = to_insert.atom_storage + if(smaller_fish && !allow_big_nesting && to_insert.w_class >= item_parent.w_class) if(messages && user) user.balloon_alert(user, "too big!") return FALSE @@ -408,63 +406,60 @@ GLOBAL_LIST_EMPTY(cached_storage_typecaches) return TRUE /// Returns a count of how many items held due to exception_hold we have -/datum/storage/proc/exception_count() - var/obj/item/storage = real_location?.resolve() +/datum/storage/proc/get_exception_count() var/count = 0 - for(var/obj/item/thing in storage) + for(var/obj/item/thing in real_location) if(thing.w_class > max_specific_storage && is_type_in_typecache(thing, exception_hold)) count += 1 return count +/// Returns a sum of all of our content's weight classes +/datum/storage/proc/get_total_weight() + var/total_weight = 0 + for(var/obj/item/thing in real_location) + total_weight += thing.w_class + return total_weight + /** * Attempts to insert an item into the storage * - * @param datum/source used by the signal handler - * @param obj/item/to_insert the item we're inserting - * @param mob/user the user who is inserting the item - * @param override see item_insertion_feedback() - * @param force bypass locked storage up to a certain level. See [code/__DEFINES/storage.dm] + * Arguments + * * obj/item/to_insert - the item we're inserting + * * mob/user - (optional) the user who is inserting the item. + * * override - see item_insertion_feedback() + * * force - bypass locked storage up to a certain level. See [code/__DEFINES/storage.dm] */ /datum/storage/proc/attempt_insert(obj/item/to_insert, mob/user, override = FALSE, force = STORAGE_NOT_LOCKED) - var/obj/item/resolve_location = real_location?.resolve() - if(!resolve_location) - return FALSE + SHOULD_NOT_SLEEP(TRUE) if(!can_insert(to_insert, user, force = force)) return FALSE - SEND_SIGNAL(resolve_location, COMSIG_STORAGE_STORED_ITEM, to_insert, user, force) - - to_insert.item_flags |= IN_STORAGE - to_insert.forceMove(resolve_location) + SEND_SIGNAL(parent, COMSIG_STORAGE_STORED_ITEM, to_insert, user, force) + to_insert.forceMove(real_location) item_insertion_feedback(user, to_insert, override) - resolve_location.update_appearance() - SEND_SIGNAL(to_insert, COMSIG_ITEM_STORED) + parent.update_appearance() return TRUE /** * Inserts every item in a given list, with a progress bar * - * @param mob/user the user who is inserting the items - * @param list/things the list of items to insert - * @param atom/thing_loc the location of the items (used to make sure an item hasn't moved during pickup) - * @param list/rejections a list used to make sure we only complain once about an invalid insertion - * @param datum/progressbar/progress the progressbar used to show the progress of the insertion + * Arguments + * * mob/user - the user who is inserting the items + * * list/things - the list of items to insert + * * atom/thing_loc - the location of the items (used to make sure an item hasn't moved during pickup) + * * list/rejections - a list used to make sure we only complain once about an invalid insertion + * * datum/progressbar/progress - the progressbar used to show the progress of the insertion */ /datum/storage/proc/handle_mass_pickup(mob/user, list/things, atom/thing_loc, list/rejections, datum/progressbar/progress) - var/obj/item/resolve_parent = parent?.resolve() - var/obj/item/resolve_location = real_location?.resolve() - if(!resolve_parent || !resolve_location) - return - for(var/obj/item/thing in things) things -= thing if(thing.loc != thing_loc) continue if(thing.type in rejections) // To limit bag spamming: any given type only complains once continue - if(!attempt_insert(thing, user, TRUE)) // Note can_be_inserted still makes noise when the answer is no - if(resolve_location.contents.len >= max_slots) + if(!attempt_insert(thing, user, override = TRUE)) // Note can_be_inserted still makes noise when the answer is no + if(real_location.contents.len >= max_slots) break rejections += thing.type // therefore full bags are still a little spammy continue @@ -479,15 +474,12 @@ GLOBAL_LIST_EMPTY(cached_storage_typecaches) /** * Provides visual feedback in chat for an item insertion * - * @param mob/user the user who is inserting the item - * @param obj/item/thing the item we're inserting - * @param override skip feedback, only do animation check + * Arguments + * * mob/user - the user who is inserting the item + * * obj/item/thing - the item we're inserting + * * override - skip feedback, only do animation check */ /datum/storage/proc/item_insertion_feedback(mob/user, obj/item/thing, override = FALSE) - var/obj/item/resolve_parent = parent?.resolve() - if(!resolve_parent) - return - if(animated) animate_parent() @@ -498,117 +490,94 @@ GLOBAL_LIST_EMPTY(cached_storage_typecaches) return if(rustle_sound) - playsound(resolve_parent, SFX_RUSTLE, 50, TRUE, -5) + playsound(parent, SFX_RUSTLE, 50, TRUE, -5) if(!silent_for_user) - to_chat(user, span_notice("You put [thing] [insert_preposition]to [resolve_parent].")) + to_chat(user, span_notice("You put [thing] [insert_preposition]to [parent].")) + + for(var/mob/viewing in oviewers(user)) + if(in_range(user, viewing) || (thing?.w_class >= WEIGHT_CLASS_NORMAL)) + viewing.show_message(span_notice("[user] puts [thing] [insert_preposition]to [parent]."), MSG_VISUAL) - for(var/mob/viewing in oviewers(user, null)) - if(in_range(user, viewing)) - viewing.show_message(span_notice("[user] puts [thing] [insert_preposition]to [resolve_parent]."), MSG_VISUAL) - return - if(thing && thing.w_class >= 3) - viewing.show_message(span_notice("[user] puts [thing] [insert_preposition]to [resolve_parent]."), MSG_VISUAL) - return /** * Attempts to remove an item from the storage * Ignores removal do_afters. Only use this if you're doing it as part of a dumping action * - * @param obj/item/thing the object we're removing - * @param atom/newLoc where we're placing the item - * @param silent if TRUE, we won't play any exit sounds + * Arguments + * * obj/item/thing - the object we're removing + * * atom/remove_to_loc - where we're placing the item + * * silent - if TRUE, we won't play any exit sounds */ -/datum/storage/proc/attempt_remove(obj/item/thing, atom/newLoc, silent = FALSE) - var/obj/item/resolve_parent = parent?.resolve() - if(!resolve_parent) - return +/datum/storage/proc/attempt_remove(obj/item/thing, atom/remove_to_loc, silent = FALSE) + SHOULD_NOT_SLEEP(TRUE) - if(istype(thing)) - if(ismob(resolve_parent.loc)) - var/mob/mobparent = resolve_parent.loc - thing.dropped(mobparent, TRUE) + if(istype(thing) && ismob(parent.loc)) + var/mob/mob_parent = parent.loc + thing.dropped(mob_parent, /*silent = */TRUE) - if(newLoc) + if(remove_to_loc) reset_item(thing) - thing.forceMove(newLoc) + thing.forceMove(remove_to_loc) if(rustle_sound && !silent) - playsound(resolve_parent, SFX_RUSTLE, 50, TRUE, -5) + playsound(parent, SFX_RUSTLE, 50, TRUE, -5) else thing.moveToNullspace() - thing.item_flags &= ~IN_STORAGE - if(animated) animate_parent() refresh_views() - - if(isobj(resolve_parent)) - resolve_parent.update_appearance() - + parent.update_appearance() return TRUE /** * Removes everything inside of our storage * - * @param atom/target where we're placing the item + * Arguments + * * atom/drop_loc - where we're placing the item */ -/datum/storage/proc/remove_all(atom/target) - var/obj/item/resolve_parent = parent?.resolve() - var/obj/item/resolve_location = real_location?.resolve() - if(!resolve_parent || !resolve_location) - return - - if(!target) - target = get_turf(resolve_parent) - - for(var/obj/item/thing in resolve_location) - if(thing.loc != resolve_location) - continue - if(!attempt_remove(thing, target, silent = TRUE)) +/datum/storage/proc/remove_all(atom/drop_loc = parent.drop_location()) + for(var/obj/item/thing in real_location) + if(!attempt_remove(thing, drop_loc, silent = TRUE)) continue thing.pixel_x = thing.base_pixel_x + rand(-8, 8) thing.pixel_y = thing.base_pixel_y + rand(-8, 8) - /** * Allows a mob to attempt to remove a single item from the storage * Allows for hooks into things like removal delays * - * @param mob/removing the mob doing the removing - * @param obj/item/thing the object we're removing - * @param atom/newLoc where we're placing the item - * @param silent if TRUE, we won't play any exit sounds + * Arguments + * * mob/removing - the mob doing the removing + * * obj/item/thing - the object we're removing + * * atom/remove_to_loc - where we're placing the item + * * silent - if TRUE, we won't play any exit sounds */ -/datum/storage/proc/remove_single(mob/removing, obj/item/thing, atom/newLoc, silent = FALSE) - if(!attempt_remove(thing, newLoc, silent)) - return FALSE - return TRUE +/datum/storage/proc/remove_single(mob/removing, obj/item/thing, atom/remove_to_loc, silent = FALSE) + return attempt_remove(thing, remove_to_loc, silent) /** * Removes only a specific type of item from our storage * - * @param type the type of item to remove - * @param amount how many we should attempt to pick up at one time - * @param check_adjacent if TRUE, we'll check adjacent locations for the item type - * @param force if TRUE, we'll bypass the check_adjacent check all together - * @param mob/user the user who is removing the items - * @param list/inserted a list passed to attempt_remove for ultimate removal + * Arguments + * * type - the type of item to remove + * * amount - how many we should attempt to pick up at one time + * * check_adjacent - if TRUE, we'll check adjacent locations for the item type + * * force - if TRUE, we'll bypass the check_adjacent check all together + * * mob/user - the user who is removing the items + * * list/inserted - (optional) allows consumers to pass a list to be filled with all removed items. */ /datum/storage/proc/remove_type(type, atom/destination, amount = INFINITY, check_adjacent = FALSE, force = FALSE, mob/user, list/inserted) - var/obj/item/resolve_location = real_location?.resolve() - if(!resolve_location) - return + if(!force && check_adjacent) + if(isnull(user) || !user.CanReach(destination) || !user.CanReach(parent)) + return FALSE - if(!force) - if(check_adjacent) - if(!user || !user.CanReach(destination) || !user.CanReach(resolve_location)) - return FALSE - var/list/taking = typecache_filter_list(resolve_location.contents, typecacheof(type)) + var/list/taking = typecache_filter_list(real_location.contents, typecacheof(type)) if(taking.len > amount) taking.len = amount + if(inserted) //duplicated code for performance, don't bother checking retval/checking for list every item. for(var/i in taking) if(attempt_remove(i, destination)) @@ -616,41 +585,33 @@ GLOBAL_LIST_EMPTY(cached_storage_typecaches) else for(var/i in taking) attempt_remove(i, destination) + return TRUE /// Signal handler for remove_all() -/datum/storage/proc/mass_empty(datum/source, atom/location, force) +/datum/storage/proc/mass_empty(datum/source, mob/user) SIGNAL_HANDLER - if(!allow_quick_empty && !force) + if(!allow_quick_empty) return - remove_all(get_turf(location)) + remove_all(user.drop_location()) /** * Recursive proc to get absolutely EVERYTHING inside a storage item, including the contents of inner items. * - * @param list/interface the list we're adding objects to - * @param recursive whether or not we're checking inside of inner items + * Arguments + * * recursive - whether or not we're checking inside of inner items */ -/datum/storage/proc/return_inv(list/interface, recursive = TRUE) - if(!islist(interface)) - return FALSE - - var/obj/item/resolve_location = real_location?.resolve() - if(!resolve_location) - return - +/datum/storage/proc/return_inv(recursive = TRUE) var/list/ret = list() - ret |= resolve_location.contents - if(recursive) - for(var/i in ret.Copy()) - var/atom/atom = i - atom.atom_storage?.return_inv(ret, TRUE) - interface |= ret + for(var/atom/found_thing as anything in real_location) + ret |= found_thing + if(recursive && found_thing.atom_storage) + ret |= found_thing.atom_storage.return_inv(recursive = TRUE) - return TRUE + return ret /** * Resets an object, removes it from our screen, and refreshes the view. @@ -668,18 +629,14 @@ GLOBAL_LIST_EMPTY(cached_storage_typecaches) reset_item(gone) refresh_views() -/// Signal handler for the emp_act() of all contents -/datum/storage/proc/on_emp_act(datum/source, severity) +/// Signal handler for emp_act to emp all contents +/datum/storage/proc/on_emp_act(datum/source, severity, protection) SIGNAL_HANDLER - var/obj/item/resolve_location = real_location?.resolve() - if(!resolve_location) + if(protection & EMP_PROTECT_CONTENTS) return - if(emp_shielded) - return - - for(var/atom/thing in resolve_location) + for(var/obj/item/thing in real_location) thing.emp_act(severity) /// Signal handler for preattack from an object. @@ -706,10 +663,6 @@ GLOBAL_LIST_EMPTY(cached_storage_typecaches) * @param mob/user the user who is picking up the items */ /datum/storage/proc/collect_on_turf(obj/item/thing, mob/user) - var/obj/item/resolve_parent = parent?.resolve() - if(!resolve_parent) - return - var/atom/holder = thing.loc var/list/pick_up = holder.contents.Copy() @@ -718,13 +671,13 @@ GLOBAL_LIST_EMPTY(cached_storage_typecaches) var/amount = length(pick_up) if(!amount) - resolve_parent.balloon_alert(user, "nothing to pick up!") + parent.balloon_alert(user, "nothing to pick up!") return var/datum/progressbar/progress = new(user, amount, thing.loc) var/list/rejections = list() - while(do_after(user, 1 SECONDS, resolve_parent, NONE, FALSE, CALLBACK(src, PROC_REF(handle_mass_pickup), user, pick_up.Copy(), thing.loc, rejections, progress))) + while(do_after(user, 1 SECONDS, parent, NONE, FALSE, CALLBACK(src, PROC_REF(handle_mass_pickup), user, pick_up.Copy(), thing.loc, rejections, progress))) stoplag(1) progress.end_progress() @@ -732,29 +685,23 @@ GLOBAL_LIST_EMPTY(cached_storage_typecaches) var/list/current_contents = holder.contents.Copy() if(length(pick_up | current_contents) == length(current_contents)) return - resolve_parent.balloon_alert(user, "picked up") + parent.balloon_alert(user, "picked up") /// Signal handler for whenever we drag the storage somewhere. /datum/storage/proc/on_mousedrop_onto(datum/source, atom/over_object, mob/user) SIGNAL_HANDLER - var/obj/item/resolve_parent = parent?.resolve() - var/obj/item/resolve_location = real_location?.resolve() - if(!resolve_parent || !resolve_location) - return - if(ismecha(user.loc) || user.incapacitated() || !user.canUseStorage()) return - resolve_parent.add_fingerprint(user) + parent.add_fingerprint(user) if(istype(over_object, /atom/movable/screen/inventory/hand)) - - if(resolve_parent.loc != user) + if(real_location.loc != user) return var/atom/movable/screen/inventory/hand/hand = over_object - user.putItemFromInventoryInHandIfPossible(resolve_parent, hand.held_index) + user.putItemFromInventoryInHandIfPossible(parent, hand.held_index) else if(ismob(over_object)) if(over_object != user) @@ -772,30 +719,25 @@ GLOBAL_LIST_EMPTY(cached_storage_typecaches) * @param mob/user the user who is dumping the contents */ /datum/storage/proc/dump_content_at(atom/dest_object, mob/user) - var/obj/item/resolve_parent = parent.resolve() - var/obj/item/resolve_location = real_location.resolve() - if(locked) user.balloon_alert(user, "closed!") return - if(!user.CanReach(resolve_parent) || !user.CanReach(dest_object)) + if(!user.CanReach(parent) || !user.CanReach(dest_object)) return - if(SEND_SIGNAL(dest_object, COMSIG_STORAGE_DUMP_CONTENT, resolve_location, user) & STORAGE_DUMP_HANDLED) + if(SEND_SIGNAL(dest_object, COMSIG_STORAGE_DUMP_CONTENT, src, user) & STORAGE_DUMP_HANDLED) return // Storage to storage transfer is instant if(dest_object.atom_storage) - to_chat(user, span_notice("You dump the contents of [resolve_parent] into [dest_object].")) + to_chat(user, span_notice("You dump the contents of [parent] into [dest_object].")) if(rustle_sound) - playsound(resolve_parent, SFX_RUSTLE, 50, TRUE, -5) + playsound(parent, SFX_RUSTLE, 50, TRUE, -5) - for(var/obj/item/to_dump in resolve_location) - if(to_dump.loc != resolve_location) - continue + for(var/obj/item/to_dump in real_location) dest_object.atom_storage.attempt_insert(to_dump, user) - resolve_parent.update_appearance() + parent.update_appearance() SEND_SIGNAL(src, COMSIG_STORAGE_DUMP_POST_TRANSFER, dest_object, user) return @@ -804,7 +746,7 @@ GLOBAL_LIST_EMPTY(cached_storage_typecaches) return // Storage to loc transfer requires a do_after - to_chat(user, span_notice("You start dumping out the contents of [resolve_parent] onto [dest_object]...")) + to_chat(user, span_notice("You start dumping out the contents of [parent] onto [dest_object]...")) if(!do_after(user, 2 SECONDS, target = dest_object)) return @@ -814,10 +756,6 @@ GLOBAL_LIST_EMPTY(cached_storage_typecaches) /datum/storage/proc/on_mousedropped_onto(datum/source, obj/item/dropping, mob/user) SIGNAL_HANDLER - var/obj/item/resolve_parent = parent?.resolve() - if(!resolve_parent) - return - if(!istype(dropping)) return if(dropping != user.get_active_held_item()) @@ -837,11 +775,7 @@ GLOBAL_LIST_EMPTY(cached_storage_typecaches) /datum/storage/proc/on_attackby(datum/source, obj/item/thing, mob/user, params) SIGNAL_HANDLER - var/obj/item/resolve_parent = parent?.resolve() - if(!resolve_parent) - return - - if(!thing.attackby_storage_insert(src, resolve_parent, user)) + if(!thing.attackby_storage_insert(src, parent, user)) return if(iscyborg(user)) @@ -854,39 +788,32 @@ GLOBAL_LIST_EMPTY(cached_storage_typecaches) /datum/storage/proc/on_attack(datum/source, mob/user) SIGNAL_HANDLER - var/obj/item/resolve_parent = parent?.resolve() - if(!resolve_parent) - return if(!attack_hand_interact) return - if(user.active_storage == src && resolve_parent.loc == user) + if(user.active_storage == src && parent.loc == user) user.active_storage.hide_contents(user) hide_contents(user) return COMPONENT_CANCEL_ATTACK_CHAIN if(ishuman(user)) var/mob/living/carbon/human/hum = user - if(hum.l_store == resolve_parent && !hum.get_active_held_item()) - INVOKE_ASYNC(hum, TYPE_PROC_REF(/mob, put_in_hands), resolve_parent) + if(hum.l_store == parent && !hum.get_active_held_item()) + INVOKE_ASYNC(hum, TYPE_PROC_REF(/mob, put_in_hands), parent) hum.l_store = null return - if(hum.r_store == resolve_parent && !hum.get_active_held_item()) - INVOKE_ASYNC(hum, TYPE_PROC_REF(/mob, put_in_hands), resolve_parent) + if(hum.r_store == parent && !hum.get_active_held_item()) + INVOKE_ASYNC(hum, TYPE_PROC_REF(/mob, put_in_hands), parent) hum.r_store = null return - if(resolve_parent.loc == user) + if(parent.loc == user) INVOKE_ASYNC(src, PROC_REF(open_storage), user) return COMPONENT_CANCEL_ATTACK_CHAIN /// Generates the numbers on an item in storage to show stacking. /datum/storage/proc/process_numerical_display() - var/obj/item/resolve_location = real_location?.resolve() - if(!resolve_location) - return - var/list/toreturn = list() - for(var/obj/item/thing in resolve_location.contents) + for(var/obj/item/thing in real_location) var/total_amnt = 1 if(isstack(thing)) @@ -903,11 +830,7 @@ GLOBAL_LIST_EMPTY(cached_storage_typecaches) /// Updates the storage UI to fit all objects inside storage. /datum/storage/proc/orient_to_hud() - var/obj/item/resolve_location = real_location?.resolve() - if(!resolve_location) - return - - var/adjusted_contents = resolve_location.contents.len + var/adjusted_contents = real_location.contents.len //Numbered contents display var/list/datum/numbered_display/numbered_contents @@ -924,14 +847,10 @@ GLOBAL_LIST_EMPTY(cached_storage_typecaches) /// Generates the actual UI objects, their location, and alignments whenever we open storage up. /datum/storage/proc/orient_item_boxes(rows, cols, list/obj/item/numerical_display_contents) - var/obj/item/resolve_location = real_location?.resolve() - if(!resolve_location) - return - boxes.screen_loc = "[screen_start_x]:[screen_pixel_x],[screen_start_y]:[screen_pixel_y] to [screen_start_x+cols-1]:[screen_pixel_x],[screen_start_y+rows-1]:[screen_pixel_y]" var/current_x = screen_start_x var/current_y = screen_start_y - var/turf/our_turf = get_turf(resolve_location) + var/turf/our_turf = get_turf(real_location) if(islist(numerical_display_contents)) for(var/type in numerical_display_contents) @@ -953,7 +872,7 @@ GLOBAL_LIST_EMPTY(cached_storage_typecaches) break else - for(var/obj/item in resolve_location) + for(var/obj/item in real_location) item.mouse_opacity = MOUSE_OPACITY_OPAQUE item.screen_loc = "[current_x]:[screen_pixel_x],[current_y]:[screen_pixel_y]" item.maptext = "" @@ -991,20 +910,12 @@ GLOBAL_LIST_EMPTY(cached_storage_typecaches) /// Opens the storage to the mob, showing them the contents to their UI. /datum/storage/proc/open_storage(mob/to_show) - var/obj/item/resolve_parent = parent?.resolve() - if(!resolve_parent) - return FALSE - - var/obj/item/resolve_location = real_location?.resolve() - if(!resolve_location) - return FALSE - if(isobserver(to_show)) show_contents(to_show) return FALSE - if(!to_show.CanReach(resolve_parent)) - resolve_parent.balloon_alert(to_show, "can't reach!") + if(!to_show.CanReach(parent)) + parent.balloon_alert(to_show, "can't reach!") return FALSE if(!isliving(to_show) || to_show.incapacitated()) @@ -1012,12 +923,12 @@ GLOBAL_LIST_EMPTY(cached_storage_typecaches) if(locked) if(!silent) - resolve_parent.balloon_alert(to_show, "closed!") + parent.balloon_alert(to_show, "closed!") return FALSE // If we're quickdrawing boys if(quickdraw && !to_show.get_active_held_item()) - var/obj/item/to_remove = locate() in resolve_location + var/obj/item/to_remove = locate() in real_location if(!to_remove) return TRUE @@ -1025,8 +936,8 @@ GLOBAL_LIST_EMPTY(cached_storage_typecaches) INVOKE_ASYNC(src, PROC_REF(put_in_hands_async), to_show, to_remove) if(!silent) to_show.visible_message( - span_warning("[to_show] draws [to_remove] from [resolve_parent]!"), - span_notice("You draw [to_remove] from [resolve_parent]."), + span_warning("[to_show] draws [to_remove] from [parent]!"), + span_notice("You draw [to_remove] from [parent]."), ) return TRUE @@ -1038,7 +949,7 @@ GLOBAL_LIST_EMPTY(cached_storage_typecaches) animate_parent() if(rustle_sound) - playsound(resolve_parent, SFX_RUSTLE, 50, TRUE, -5) + playsound(parent, SFX_RUSTLE, 50, TRUE, -5) return TRUE @@ -1054,12 +965,8 @@ GLOBAL_LIST_EMPTY(cached_storage_typecaches) /datum/storage/proc/close_distance(datum/source) SIGNAL_HANDLER - var/obj/item/resolve_parent = parent?.resolve() - if(!resolve_parent) - return - for(var/mob/user in can_see_contents()) - if (!user.CanReach(resolve_parent)) + if (!user.CanReach(parent)) hide_contents(user) /// Close the storage UI for everyone viewing us. @@ -1085,15 +992,14 @@ GLOBAL_LIST_EMPTY(cached_storage_typecaches) /** * Show our storage to a mob. * - * @param mob/toshow the mob to show the storage to + * Arguments + * * mob/toshow - the mob to show the storage to * - * @returns FALSE if the show failed, TRUE otherwise + * Returns + * * FALSE if the show failed + * * TRUE otherwise */ /datum/storage/proc/show_contents(mob/toshow) - var/obj/item/resolve_location = real_location?.resolve() - if(!resolve_location) - return FALSE - if(!toshow.client) return FALSE @@ -1102,7 +1008,7 @@ GLOBAL_LIST_EMPTY(cached_storage_typecaches) return FALSE if(toshow.active_storage != src && (toshow.stat == CONSCIOUS)) - for(var/obj/item/thing in resolve_location) + for(var/obj/item/thing in real_location) if(thing.on_found(toshow)) toshow.active_storage.hide_contents(toshow) @@ -1111,8 +1017,8 @@ GLOBAL_LIST_EMPTY(cached_storage_typecaches) toshow.active_storage = src - if(ismovable(resolve_location)) - var/atom/movable/movable_loc = resolve_location + if(ismovable(real_location)) + var/atom/movable/movable_loc = real_location movable_loc.become_active_storage(src) orient_to_hud() @@ -1121,39 +1027,41 @@ GLOBAL_LIST_EMPTY(cached_storage_typecaches) toshow.client.screen |= boxes toshow.client.screen |= closer - toshow.client.screen |= resolve_location.contents + toshow.client.screen |= real_location.contents return TRUE /** * Hide our storage from a mob. * - * @param mob/toshow the mob to hide the storage from + * Arguments + * * mob/toshow - the mob to hide the storage from */ -/datum/storage/proc/hide_contents(mob/toshow) - var/obj/item/resolve_location = real_location?.resolve() - if(!resolve_location) - return - - if(!toshow.client) +/datum/storage/proc/hide_contents(mob/to_hide) + if(!to_hide.client) return TRUE - if(toshow.active_storage == src) - toshow.active_storage = null + if(to_hide.active_storage == src) + to_hide.active_storage = null - if(!length(is_using) && ismovable(resolve_location)) - var/atom/movable/movable_loc = resolve_location + if(!length(is_using) && ismovable(real_location)) + var/atom/movable/movable_loc = real_location movable_loc.lose_active_storage(src) - is_using -= toshow + is_using -= to_hide - toshow.client.screen -= boxes - toshow.client.screen -= closer - toshow.client.screen -= resolve_location.contents + to_hide.client.screen -= boxes + to_hide.client.screen -= closer + to_hide.client.screen -= real_location.contents + return TRUE -/datum/storage/proc/action_trigger(datum/signal_source, datum/action/source) +/datum/storage/proc/action_trigger(datum/source, datum/action/triggered) SIGNAL_HANDLER - toggle_collection_mode(source.owner) - return TRUE + toggle_collection_mode(triggered.owner) + +/datum/storage/proc/action_deleted(datum/source) + SIGNAL_HANDLER + + modeswitch_action = null /** * Toggles the collectmode of our storage. @@ -1161,25 +1069,17 @@ GLOBAL_LIST_EMPTY(cached_storage_typecaches) * @param mob/toshow the mob toggling us */ /datum/storage/proc/toggle_collection_mode(mob/user) - var/obj/item/resolve_parent = parent?.resolve() - if(!resolve_parent) - return - - collection_mode = (collection_mode+1)%3 + collection_mode = (collection_mode + 1) % 3 switch(collection_mode) if(COLLECT_SAME) - resolve_parent.balloon_alert(user, "will now only pick up a single type") + parent.balloon_alert(user, "will now only pick up a single type") if(COLLECT_EVERYTHING) - resolve_parent.balloon_alert(user, "will now pick up everything") + parent.balloon_alert(user, "will now pick up everything") if(COLLECT_ONE) - resolve_parent.balloon_alert(user, "will now pick up one at a time") + parent.balloon_alert(user, "will now pick up one at a time") /// Gives a spiffy animation to our parent to represent opening and closing. /datum/storage/proc/animate_parent() - var/obj/item/resolve_parent = parent?.resolve() - if(!resolve_parent) - return - - var/matrix/old_matrix = resolve_parent.transform - animate(resolve_parent, time = 1.5, loop = 0, transform = resolve_parent.transform.Scale(1.07, 0.9)) + var/matrix/old_matrix = parent.transform + animate(parent, time = 1.5, loop = 0, transform = parent.transform.Scale(1.07, 0.9)) animate(time = 2, transform = old_matrix) diff --git a/code/datums/storage/subtypes/bag_of_holding.dm b/code/datums/storage/subtypes/bag_of_holding.dm index 9e3a486cdcd..5abc171e2cb 100644 --- a/code/datums/storage/subtypes/bag_of_holding.dm +++ b/code/datums/storage/subtypes/bag_of_holding.dm @@ -5,33 +5,40 @@ allow_big_nesting = TRUE /datum/storage/bag_of_holding/attempt_insert(obj/item/to_insert, mob/user, override, force) - var/obj/item/resolve_parent = parent?.resolve() - if(!resolve_parent) - return - var/list/obj/item/storage/backpack/holding/matching = typecache_filter_list(to_insert.get_all_contents(), typecacheof(/obj/item/storage/backpack/holding)) - matching -= resolve_parent + matching -= parent + matching -= real_location - if((istype(to_insert, /obj/item/storage/backpack/holding) || matching.len) && can_insert(to_insert, user)) - INVOKE_ASYNC(src, PROC_REF(recursive_insertion), to_insert, user, resolve_parent) - return + if((istype(to_insert, /obj/item/storage/backpack/holding) || length(matching)) && can_insert(to_insert, user)) + INVOKE_ASYNC(src, PROC_REF(recursive_insertion), to_insert, user) + return FALSE return ..() -/datum/storage/bag_of_holding/proc/recursive_insertion(obj/item/to_insert, mob/living/user, atom/resolve_parent) +/datum/storage/bag_of_holding/proc/recursive_insertion(obj/item/to_insert, mob/living/user) var/safety = tgui_alert(user, "Doing this will have extremely dire consequences for the station and its crew. Be sure you know what you're doing.", "Put in [to_insert.name]?", list("Proceed", "Abort")) - if(safety != "Proceed" || QDELETED(to_insert) || QDELETED(resolve_parent) || QDELETED(user) || !iscarbon(user) || !user.can_perform_action(resolve_parent, NEED_DEXTERITY) || !can_insert(to_insert, user)) + if(safety != "Proceed" \ + || QDELETED(to_insert) \ + || QDELETED(parent) \ + || QDELETED(real_location) \ + || QDELETED(user) \ + || !user.can_perform_action(parent, NEED_DEXTERITY) \ + || !can_insert(to_insert, user) \ + ) return - var/turf/loccheck = get_turf(resolve_parent) - to_chat(user, span_danger("The Bluespace interfaces of the two devices catastrophically malfunction!")) - qdel(to_insert) - playsound(loccheck,'sound/effects/supermatter.ogg', 200, TRUE) + var/turf/rift_loc = get_turf(parent) + user.visible_message( + span_userdanger("The Bluespace interfaces of the two devices catastrophically malfunction!"), + span_danger("The Bluespace interfaces of the two devices catastrophically malfunction!"), + ) + playsound(rift_loc, 'sound/effects/supermatter.ogg', 200, TRUE) - message_admins("[ADMIN_LOOKUPFLW(user)] detonated a bag of holding at [ADMIN_VERBOSEJMP(loccheck)].") - user.log_message("detonated a bag of holding at [loc_name(loccheck)].", LOG_ATTACK, color="red") + message_admins("[ADMIN_LOOKUPFLW(user)] detonated a bag of holding at [ADMIN_VERBOSEJMP(rift_loc)].") + user.log_message("detonated a bag of holding at [loc_name(rift_loc)].", LOG_ATTACK, color = "red") user.investigate_log("has been gibbed by a bag of holding recursive insertion.", INVESTIGATE_DEATHS) user.gib() - new/obj/boh_tear(loccheck) - qdel(resolve_parent) + new /obj/boh_tear(rift_loc) + qdel(to_insert) + qdel(parent) diff --git a/code/datums/storage/subtypes/cards.dm b/code/datums/storage/subtypes/cards.dm index 19360651dd3..8e6a2bfb369 100644 --- a/code/datums/storage/subtypes/cards.dm +++ b/code/datums/storage/subtypes/cards.dm @@ -5,61 +5,52 @@ max_specific_storage = WEIGHT_CLASS_TINY max_slots = 30 max_total_storage = WEIGHT_CLASS_TINY * 30 - -/datum/storage/tcg/New() - . = ..() - set_holdable(list(/obj/item/tcgcard)) -/datum/storage/tcg/attempt_remove(obj/item/thing, atom/newLoc, silent = FALSE) +/datum/storage/tcg/New( + atom/parent, + max_slots, + max_specific_storage, + max_total_storage, +) . = ..() - handle_empty_deck() + set_holdable(/obj/item/tcgcard) -/datum/storage/tcg/show_contents(mob/to_show) +/datum/storage/tcg/attempt_remove(obj/item/thing, atom/remove_to_loc, silent = FALSE) . = ..() - - var/obj/item/resolve_parent = parent?.resolve() - if(!resolve_parent) + if(!.) return - to_show.visible_message(span_notice("[to_show] starts to look through the contents of \the [resolve_parent]!"), \ - span_notice("You begin looking into the contents of \the [resolve_parent]!")) + var/obj/item/tcgcard_deck/deck = parent + var/obj/item/tcgcard/card = thing + card.flipped = deck.flipped + card.update_appearance(UPDATE_ICON_STATE) -/datum/storage/tcg/hide_contents() - . = ..() - var/obj/item/resolve_parent = parent?.resolve() - if(!resolve_parent) - return + if(length(real_location.contents) == 0) + qdel(parent) - var/obj/item/resolve_location = real_location?.resolve() - if(!resolve_location) - return - - resolve_location.visible_message(span_notice("\the [resolve_parent] is shuffled after looking through it.")) - resolve_location.contents = shuffle(resolve_location.contents) - -/datum/storage/tcg/dump_content_at(atom/dest_object, mob/user) +/datum/storage/tcg/show_contents(mob/to_show) + // sometimes, show contents is called when the mob is already seeing the contents of the deck, to refresh the view. + // to avoid spam, we only show the message if they weren't already seeing the contents. + var/was_already_seeing = to_show.active_storage == src . = ..() - var/obj/item/resolve_parent = parent?.resolve() - if(!resolve_parent) - return - - if(!resolve_parent.contents.len) - qdel(resolve_parent) - -/datum/storage/tcg/proc/handle_empty_deck() - var/obj/item/resolve_parent = parent?.resolve() - if(!resolve_parent) - return - - var/obj/item/resolve_location = real_location?.resolve() - if(!real_location) - return - - //You can't have a deck of one card! - if(resolve_location.contents.len == 1) - var/obj/item/tcgcard_deck/deck = resolve_location - var/obj/item/tcgcard/card = resolve_location.contents[1] - attempt_remove(card, card.drop_location()) - card.flipped = deck.flipped - card.update_icon_state() - qdel(resolve_parent) + if(!.) + return . + if(!was_already_seeing) + to_show.visible_message( + span_notice("[to_show] starts to look through the contents of [parent]!"), + span_notice("You begin looking into the contents of [parent]."), + ) + return . + +/datum/storage/tcg/hide_contents(mob/to_hide) + // see above + var/was_actually_seeing = to_hide.active_storage == src + . = ..() + if(!.) + return . + if(QDELING(src)) + return . + if(was_actually_seeing) + real_location.visible_message(span_notice("[parent] is shuffled after looking through it.")) + real_location.contents = shuffle(real_location.contents) + return . diff --git a/code/datums/storage/subtypes/duffel_bag.dm b/code/datums/storage/subtypes/duffel_bag.dm index 02c3e99b78e..cfa073da5e5 100644 --- a/code/datums/storage/subtypes/duffel_bag.dm +++ b/code/datums/storage/subtypes/duffel_bag.dm @@ -10,7 +10,12 @@ silent = TRUE exception_max = 2 -/datum/storage/duffel/syndicate/New() +/datum/storage/duffel/syndicate/New( + atom/parent, + max_slots, + max_specific_storage, + max_total_storage, +) . = ..() var/static/list/exception_type_list = list( diff --git a/code/datums/storage/subtypes/extract_inventory.dm b/code/datums/storage/subtypes/extract_inventory.dm index 8c571dbda1a..0fea7ffed63 100644 --- a/code/datums/storage/subtypes/extract_inventory.dm +++ b/code/datums/storage/subtypes/extract_inventory.dm @@ -8,31 +8,28 @@ rustle_sound = FALSE silent = TRUE -/datum/storage/extract_inventory/New() +/datum/storage/extract_inventory/New( + atom/parent, + max_slots, + max_specific_storage, + max_total_storage, +) . = ..() set_holdable(/obj/item/food/monkeycube) - var/obj/item/slimecross/reproductive/parentSlimeExtract = parent?.resolve() - if(!parentSlimeExtract) - return - - if(!istype(parentSlimeExtract, /obj/item/slimecross/reproductive)) - stack_trace("storage subtype extract_inventory incompatible with [parentSlimeExtract]") + var/obj/item/slimecross/reproductive/parent_slime = parent + if(!istype(parent_slime, /obj/item/slimecross/reproductive)) + stack_trace("storage subtype ([type]) incompatible with [parent_slime] ([parent_slime.type])") qdel(src) /datum/storage/extract_inventory/proc/processCubes(mob/user) - var/obj/item/slimecross/reproductive/parentSlimeExtract = parent?.resolve() - if(!parentSlimeExtract) - return - - if(parentSlimeExtract.contents.len >= max_slots) + var/obj/item/slimecross/reproductive/parentSlimeExtract = parent + if(real_location.contents.len >= max_slots) QDEL_LIST(parentSlimeExtract.contents) createExtracts(user) /datum/storage/extract_inventory/proc/createExtracts(mob/user) - var/obj/item/slimecross/reproductive/parentSlimeExtract = parent?.resolve() - if(!parentSlimeExtract) - return + var/obj/item/slimecross/reproductive/parentSlimeExtract = parent var/cores = rand(1,4) playsound(parentSlimeExtract, 'sound/effects/splat.ogg', 40, TRUE) diff --git a/code/datums/storage/subtypes/fish_case.dm b/code/datums/storage/subtypes/fish_case.dm index bc16f1607bf..dbbb15f47eb 100644 --- a/code/datums/storage/subtypes/fish_case.dm +++ b/code/datums/storage/subtypes/fish_case.dm @@ -1,33 +1,48 @@ /datum/storage/fish_case max_slots = 1 max_specific_storage = WEIGHT_CLASS_HUGE - can_hold_trait = TRAIT_FISH_CASE_COMPATIBILE - can_hold_description = "fish and aquarium equipment" + can_hold_description = "Fish and aquarium equipment" -/** +/datum/storage/fish_case/can_insert(obj/item/to_insert, mob/user, messages, force) + . = ..() + if(!.) + return . + if(!HAS_TRAIT(to_insert, TRAIT_FISH_CASE_COMPATIBILE)) + if(messages && user) + user.balloon_alert(user, "can't hold!") + return FALSE + return . + +/* * Change the size of the storage item to match the inserted item's * Because of that, we also check if conditions to keep it inside another storage or pockets are still met. */ -/datum/storage/fish_case/handle_enter(obj/item/storage/fish_case/source, obj/item/arrived) +/datum/storage/fish_case/handle_enter(datum/source, obj/item/arrived) . = ..() - if(!istype(arrived) || arrived.w_class == source.w_class) + if(!isitem(parent) || !istype(arrived)) + return + var/obj/item/item_parent = parent + if(arrived.w_class <= item_parent.w_class) return - source.w_class = arrived.w_class - var/obj/item/resolve_parent = parent?.resolve() - if(resolve_parent?.item_flags & IN_STORAGE) - source.moveToNullspace() //temporarily remove source from its location so that attempt_insert may work correctly. - if(!resolve_parent.atom_storage?.attempt_insert(source, override = TRUE)) - source.forceMove(resolve_parent.drop_location()) - source.visible_message("[source] spills out of [resolve_parent] as it expands to hold [arrived]", vision_distance = 1) - else if(!isliving(source.loc)) + item_parent.w_class = arrived.w_class + // Since we're changing weight class we need to check if our storage's loc's storage can still hold us + // in the future we need a generic solution to this to solve a bunch of other exploits + var/datum/storage/loc_storage = item_parent.loc.atom_storage + if(!isnull(loc_storage) && !loc_storage.can_insert(item_parent)) + item_parent.forceMove(item_parent.loc.drop_location()) + item_parent.visible_message(span_warning("[item_parent] spills out of [item_parent.loc] as it expands to hold [arrived]!"), vision_distance = 1) return - var/mob/living/living_loc = source.loc - var/equipped_slot = living_loc.get_slot_by_item(source) - if(equipped_slot & (ITEM_SLOT_RPOCKET|ITEM_SLOT_LPOCKET) && source.w_class > WEIGHT_CLASS_SMALL) - source.forceMove(living_loc.drop_location()) - to_chat(living_loc, "[source] drops out of your pockets as it expands to hold [arrived]") -/datum/storage/fish_case/handle_exit(obj/item/storage/fish_case/source, obj/item/gone) + if(isliving(item_parent.loc)) + var/mob/living/living_loc = item_parent.loc + if((living_loc.get_slot_by_item(item_parent) & (ITEM_SLOT_RPOCKET|ITEM_SLOT_LPOCKET)) && item_parent.w_class > WEIGHT_CLASS_SMALL) + item_parent.forceMove(living_loc.drop_location()) + to_chat(living_loc, span_warning("[item_parent] drops out of your pockets as it expands to hold [arrived]!")) + return + +/datum/storage/fish_case/handle_exit(datum/source, obj/item/gone) . = ..() - if(istype(gone)) - source.w_class = initial(source.w_class) + if(!isitem(parent) || !istype(gone)) + return + var/obj/item/item_parent = parent + item_parent.w_class = initial(item_parent.w_class) diff --git a/code/datums/storage/subtypes/implant.dm b/code/datums/storage/subtypes/implant.dm index 998e19a587c..547e79ba81c 100644 --- a/code/datums/storage/subtypes/implant.dm +++ b/code/datums/storage/subtypes/implant.dm @@ -5,6 +5,11 @@ silent = TRUE allow_big_nesting = TRUE -/datum/storage/implant/New() +/datum/storage/implant/New( + atom/parent, + max_slots, + max_specific_storage, + max_total_storage, +) . = ..() - set_holdable(cant_hold_list = list(/obj/item/disk/nuclear)) + set_holdable(cant_hold_list = /obj/item/disk/nuclear) diff --git a/code/datums/storage/subtypes/pockets.dm b/code/datums/storage/subtypes/pockets.dm index 4bd60ba57b6..67a8b2dda78 100644 --- a/code/datums/storage/subtypes/pockets.dm +++ b/code/datums/storage/subtypes/pockets.dm @@ -9,17 +9,13 @@ if(!.) return - var/obj/item/resolve_parent = parent?.resolve() - if(!resolve_parent) - return - if(!silent || override) return if(quickdraw) - to_chat(user, span_notice("You discreetly slip [to_insert] into [resolve_parent]. Right-click [resolve_parent] to remove it.")) + to_chat(user, span_notice("You discreetly slip [to_insert] into [parent]. Right-click to remove it.")) else - to_chat(user, span_notice("You discreetly slip [to_insert] into [resolve_parent].")) + to_chat(user, span_notice("You discreetly slip [to_insert] into [parent].")) /datum/storage/pockets/small max_slots = 1 @@ -31,7 +27,12 @@ max_specific_storage = WEIGHT_CLASS_TINY attack_hand_interact = FALSE -/datum/storage/pockets/small/fedora/New() +/datum/storage/pockets/small/fedora/New( + atom/parent, + max_slots, + max_specific_storage, + max_total_storage, +) . = ..() var/static/list/exception_cache = typecacheof(list( /obj/item/katana, @@ -50,7 +51,12 @@ max_slots = 1 max_specific_storage = WEIGHT_CLASS_NORMAL -/datum/storage/pockets/chefhat/New() +/datum/storage/pockets/chefhat/New( + atom/parent, + max_slots, + max_specific_storage, + max_total_storage, +) . = ..() set_holdable(list( /obj/item/clothing/head/mob_holder, @@ -71,7 +77,12 @@ quickdraw = TRUE silent = TRUE -/datum/storage/pockets/shoes/New() +/datum/storage/pockets/shoes/New( + atom/parent, + max_slots, + max_specific_storage, + max_total_storage, +) . = ..() set_holdable(list( /obj/item/knife, @@ -108,61 +119,80 @@ /obj/item/toy/crayon/spraycan) ) -/datum/storage/pockets/shoes/clown/New() +/datum/storage/pockets/shoes/clown/New( + atom/parent, + max_slots, + max_specific_storage, + max_total_storage, +) . = ..() - set_holdable(list( - /obj/item/knife, - /obj/item/spess_knife, - /obj/item/switchblade, - /obj/item/pen, - /obj/item/scalpel, - /obj/item/reagent_containers/syringe, - /obj/item/dnainjector, - /obj/item/reagent_containers/hypospray/medipen, - /obj/item/reagent_containers/dropper, - /obj/item/implanter, - /obj/item/screwdriver, - /obj/item/weldingtool/mini, - /obj/item/firing_pin, - /obj/item/suppressor, - /obj/item/ammo_box/magazine/m9mm, - /obj/item/ammo_box/magazine/m10mm, - /obj/item/ammo_box/magazine/m45, - /obj/item/ammo_casing, - /obj/item/lipstick, - /obj/item/clothing/mask/cigarette, - /obj/item/lighter, - /obj/item/match, - /obj/item/holochip, - /obj/item/toy/crayon, - /obj/item/bikehorn, - /obj/item/reagent_containers/cup/glass/flask), - list(/obj/item/screwdriver/power, - /obj/item/ammo_casing/rocket, - /obj/item/clothing/mask/cigarette/pipe, - /obj/item/toy/crayon/spraycan) - ) + set_holdable( + can_hold_list = list( + /obj/item/ammo_box/magazine/m10mm, + /obj/item/ammo_box/magazine/m45, + /obj/item/ammo_box/magazine/m9mm, + /obj/item/ammo_casing, + /obj/item/bikehorn, + /obj/item/clothing/mask/cigarette, + /obj/item/dnainjector, + /obj/item/firing_pin, + /obj/item/holochip, + /obj/item/implanter, + /obj/item/knife, + /obj/item/lighter, + /obj/item/lipstick, + /obj/item/match, + /obj/item/pen, + /obj/item/reagent_containers/cup/glass/flask, + /obj/item/reagent_containers/dropper, + /obj/item/reagent_containers/hypospray/medipen, + /obj/item/reagent_containers/syringe, + /obj/item/scalpel, + /obj/item/screwdriver, + /obj/item/spess_knife, + /obj/item/suppressor, + /obj/item/switchblade, + /obj/item/toy/crayon, + /obj/item/weldingtool/mini, + ), + cant_hold_list = list( + /obj/item/ammo_casing/rocket, + /obj/item/clothing/mask/cigarette/pipe, + /obj/item/screwdriver/power, + /obj/item/toy/crayon/spraycan, + ), + ) /datum/storage/pockets/pocketprotector max_slots = 3 max_specific_storage = WEIGHT_CLASS_TINY -/datum/storage/pockets/pocketprotector/New() +/datum/storage/pockets/pocketprotector/New( + atom/parent, + max_slots, + max_specific_storage, + max_total_storage, +) . = ..() set_holdable(list( //Same items as a PDA /obj/item/pen, /obj/item/toy/crayon, /obj/item/lipstick, /obj/item/flashlight/pen, - /obj/item/clothing/mask/cigarette) - ) + /obj/item/lipstick, + )) /datum/storage/pockets/helmet max_slots = 2 quickdraw = TRUE max_total_storage = 6 -/datum/storage/pockets/helmet/New() +/datum/storage/pockets/helmet/New( + atom/parent, + max_slots, + max_specific_storage, + max_total_storage, +) . = ..() set_holdable(list(/obj/item/reagent_containers/cup/glass/bottle/vodka, /obj/item/reagent_containers/cup/glass/bottle/molotov, @@ -175,7 +205,12 @@ max_total_storage = 5 // 2 small items + 1 tiny item, or 1 normal item + 1 small item max_slots = 3 -/datum/storage/pockets/void_cloak/New() +/datum/storage/pockets/void_cloak/New( + atom/parent, + max_slots, + max_specific_storage, + max_total_storage, +) . = ..() set_holdable(list( /obj/item/ammo_box/strilka310/lionhunter, diff --git a/code/datums/storage/subtypes/rped.dm b/code/datums/storage/subtypes/rped.dm index 599d63fd7db..9931cff7372 100644 --- a/code/datums/storage/subtypes/rped.dm +++ b/code/datums/storage/subtypes/rped.dm @@ -32,13 +32,10 @@ /obj/item/stack/sheet/bluespace_crystal, ) -/datum/storage/rped/New(atom/parent, max_slots, max_specific_storage, max_total_storage, numerical_stacking, allow_quick_gather, allow_quick_empty, collection_mode, attack_hand_interact) - . = ..() - var/atom/resolve_parent = src.parent?.resolve() - RegisterSignal(resolve_parent, COMSIG_ITEM_ATTACK_SELF, PROC_REF(rped_mass_empty), TRUE) - /datum/storage/rped/can_insert(obj/item/to_insert, mob/user, messages = TRUE, force = FALSE) . = ..() + if(!.) + return . //we check how much of glass,plasteel & cable the user can insert if(isstack(to_insert)) @@ -49,12 +46,8 @@ var/obj/item/stack/the_stack = to_insert var/present_amount = 0 - var/obj/item/resolve_location = real_location?.resolve() - if(!resolve_location) - return FALSE - //we try to count & limit how much the user can insert of each type to prevent them from using it as an normal storage medium - for(var/obj/item/stack/stack_content in resolve_location.contents) + for(var/obj/item/stack/stack_content in real_location) //is user trying to insert any of these listed bluespace stuff if(is_type_in_list(to_insert, allowed_bluespace_types)) //if yes count total bluespace stuff is the RPED and then compare the total amount to the value the user is trying to insert @@ -83,44 +76,35 @@ return . -/// overridden mass_empty, so as to dump only the lowest tier of parts currently in the RPED -/datum/storage/rped/proc/rped_mass_empty(datum/source, atom/location, force) - SIGNAL_HANDLER - - if(!allow_quick_empty && !force) +/datum/storage/rped/mass_empty(datum/source, mob/user) + if(!allow_quick_empty) return - remove_lowest_tier(get_turf(location)) + remove_lowest_tier(user.drop_location()) /** * Searches through everything currently in storage, calculates the lowest tier of parts inside of it, * and then dumps out every part that has the equal tier of parts. Likely a worse implementation of remove_all. * - * @param atom/target where we're placing the item + * Arguments + * * atom/dump_loc - where we're placing the item */ -/datum/storage/rped/proc/remove_lowest_tier(atom/target) // look whatever happens here i'm not proud of this. at all. - var/obj/item/resolve_parent = parent?.resolve() - var/obj/item/resolve_location = real_location?.resolve() +/datum/storage/rped/proc/remove_lowest_tier(atom/dump_loc = parent.drop_location()) var/list/obj/item/parts_list = list() var/current_lowest_tier = INFINITY - if(!resolve_parent || !resolve_location) - return - if(!target) - target = get_turf(resolve_parent) + for(var/obj/item/thing in real_location) + parts_list += thing - for(var/obj/item/thing in resolve_location) - if(thing.loc != resolve_location) - continue - parts_list.Add(thing) if(parts_list.len > 0) parts_list = reverse_range(sortTim(parts_list, GLOBAL_PROC_REF(cmp_rped_sort))) current_lowest_tier = parts_list[1].get_part_rating() - resolve_parent.balloon_alert(resolve_parent.loc, "dropping lowest rated parts...") + if(ismob(parent.loc)) + parent.balloon_alert(parent.loc, "dropping lowest rated parts...") for(var/obj/item/part in parts_list) if(part.get_part_rating() != current_lowest_tier) break - if(!attempt_remove(part, target, silent = TRUE)) + if(!attempt_remove(part, dump_loc, silent = TRUE)) continue part.pixel_x = part.base_pixel_x + rand(-8, 8) part.pixel_y = part.base_pixel_y + rand(-8, 8) diff --git a/code/datums/storage/subtypes/surgery_tray.dm b/code/datums/storage/subtypes/surgery_tray.dm index c5b07b15fe4..ef4c45efe90 100644 --- a/code/datums/storage/subtypes/surgery_tray.dm +++ b/code/datums/storage/subtypes/surgery_tray.dm @@ -4,7 +4,12 @@ max_slots = 14 animated = FALSE -/datum/storage/surgery_tray/New() +/datum/storage/surgery_tray/New( + atom/parent, + max_slots, + max_specific_storage, + max_total_storage, +) . = ..() set_holdable(list( /obj/item/autopsy_scanner, @@ -13,6 +18,7 @@ /obj/item/cautery, /obj/item/circular_saw, /obj/item/clothing/mask/surgical, + /obj/item/clothing/suit/toggle/labcoat/hospitalgown, // NOVA EDIT ADDITION /obj/item/hemostat, /obj/item/razor, /obj/item/retractor, diff --git a/code/datums/storage/subtypes/trash.dm b/code/datums/storage/subtypes/trash.dm index 650dcf4bb49..b4f0e4353e3 100644 --- a/code/datums/storage/subtypes/trash.dm +++ b/code/datums/storage/subtypes/trash.dm @@ -1,14 +1,11 @@ /datum/storage/trash -/datum/storage/trash/remove_single(mob/removing, obj/item/thing, atom/newLoc, silent) - var/obj/item/resolve_location = real_location?.resolve() - if(!resolve_location) - return - - resolve_location.visible_message(span_notice("[removing] starts fishing around inside \the [resolve_location]."), - span_notice("You start digging around in \the [resolve_location] to try and pull something out.")) - if(!do_after(removing, 1.5 SECONDS, resolve_location)) - return +/datum/storage/trash/remove_single(mob/removing, obj/item/thing, atom/remove_to_loc, silent) + real_location.visible_message( + span_notice("[removing] starts fishing around inside [parent]."), + span_notice("You start digging around in [parent] to try and pull something out."), + ) + if(!do_after(removing, 1.5 SECONDS, parent)) + return FALSE return ..() - diff --git a/code/datums/voice_of_god_command.dm b/code/datums/voice_of_god_command.dm index 1be31c33d2a..052af9d060b 100644 --- a/code/datums/voice_of_god_command.dm +++ b/code/datums/voice_of_god_command.dm @@ -295,8 +295,13 @@ GLOBAL_LIST_INIT(voice_of_god_commands, init_voice_of_god_commands()) /datum/voice_of_god_command/say_my_name/execute(list/listeners, mob/living/user, power_multiplier = 1, message) var/iteration = 1 + var/regex/smartass_regex = regex(@"^say my name[.!]*$") for(var/mob/living/target as anything in listeners) - addtimer(CALLBACK(target, TYPE_PROC_REF(/atom/movable, say), user.name), 0.5 SECONDS * iteration) + var/to_say = user.name + // 0.1% chance to be a smartass + if(findtext(lowertext(message), smartass_regex) && prob(0.1)) + to_say = "My name" + addtimer(CALLBACK(target, TYPE_PROC_REF(/atom/movable, say), to_say), 0.5 SECONDS * iteration) iteration++ /// This command forces the listeners to say "Who's there?". diff --git a/code/datums/votes/map_vote.dm b/code/datums/votes/map_vote.dm index e30451c5d5e..f50c43d6c52 100644 --- a/code/datums/votes/map_vote.dm +++ b/code/datums/votes/map_vote.dm @@ -1,7 +1,7 @@ /datum/vote/map_vote name = "Map" message = "Vote for next round's map!" - count_method = VOTE_COUNT_METHOD_MULTI + count_method = VOTE_COUNT_METHOD_SINGLE winner_method = VOTE_WINNER_METHOD_WEIGHTED_RANDOM /datum/vote/map_vote/New() diff --git a/code/datums/weather/weather_types/radiation_storm.dm b/code/datums/weather/weather_types/radiation_storm.dm index 0b300214fdc..942a747361e 100644 --- a/code/datums/weather/weather_types/radiation_storm.dm +++ b/code/datums/weather/weather_types/radiation_storm.dm @@ -87,7 +87,7 @@ /// Used by the radioactive nebula when the station doesnt have enough shielding /datum/weather/rad_storm/nebula - protected_areas = list(/area/shuttle) + protected_areas = list(/area/shuttle, /area/station/maintenance/radshelter) weather_overlay = "nebula_radstorm" weather_duration_lower = 100 HOURS diff --git a/code/datums/wounds/burns.dm b/code/datums/wounds/burns.dm index 2e655018517..18d710ca0d3 100644 --- a/code/datums/wounds/burns.dm +++ b/code/datums/wounds/burns.dm @@ -129,8 +129,7 @@ if(0) to_chat(victim, span_deadsay("The last of the nerve endings in your [limb.plaintext_zone] wither away, as the infection completely paralyzes your joint connector.")) threshold_penalty = 120 // piss easy to destroy - var/datum/brain_trauma/severe/paralysis/sepsis = new (limb.body_zone) - victim.gain_trauma(sepsis) + set_disabling(TRUE) /datum/wound/burn/flesh/get_wound_description(mob/user) if(strikes_to_lose_limb <= 0) diff --git a/code/datums/wounds/cranial_fissure.dm b/code/datums/wounds/cranial_fissure.dm index f73f263ff50..362b31bfab2 100644 --- a/code/datums/wounds/cranial_fissure.dm +++ b/code/datums/wounds/cranial_fissure.dm @@ -7,7 +7,7 @@ wound_series = WOUND_SERIES_CRANIAL_FISSURE threshold_minimum = 150 - weight = 10 + weight = 0 //FLUFFY FRONTIER EDIT. ORIGINAL //weight = 10 viable_zones = list(BODY_ZONE_HEAD) diff --git a/code/game/area/areas.dm b/code/game/area/areas.dm index e6002412339..64b4ee9bca4 100644 --- a/code/game/area/areas.dm +++ b/code/game/area/areas.dm @@ -13,14 +13,16 @@ mouse_opacity = MOUSE_OPACITY_TRANSPARENT invisibility = INVISIBILITY_LIGHTING - /// List of all turfs currently inside this area. Acts as a filtered bersion of area.contents - /// For faster lookup (area.contents is actually a filtered loop over world) + /// List of all turfs currently inside this area as nested lists indexed by zlevel. + /// Acts as a filtered version of area.contents For faster lookup + /// (area.contents is actually a filtered loop over world) /// Semi fragile, but it prevents stupid so I think it's worth it - var/list/turf/contained_turfs = list() - /// Contained turfs is a MASSIVE list, so rather then adding/removing from it each time we have a problem turf + var/list/list/turf/turfs_by_zlevel = list() + /// turfs_by_z_level can hold MASSIVE lists, so rather then adding/removing from it each time we have a problem turf /// We should instead store a list of turfs to REMOVE from it, then hook into a getter for it /// There is a risk of this and contained_turfs leaking, so a subsystem will run it down to 0 incrementally if it gets too large - var/list/turf/turfs_to_uncontain = list() + /// This uses the same nested list format as turfs_by_zlevel + var/list/list/turf/turfs_to_uncontain_by_zlevel = list() var/area_flags = VALID_TERRITORY | BLOBS_ALLOWED | UNIQUE_AREA | CULT_PERMITTED @@ -36,6 +38,10 @@ var/list/firealarms = list() ///Alarm type to count of sources. Not usable for ^ because we handle fires differently var/list/active_alarms = list() + /// The current alarm fault status + var/fault_status = AREA_FAULT_NONE + /// The source machinery for the area's fault status + var/fault_location ///List of all lights in our area var/list/lights = list() ///We use this just for fire alarms, because they're area based right now so one alarm going poof shouldn't prevent you from clearing your alarms listing. Fire alarms and fire locks will set and clear alarms. @@ -224,24 +230,94 @@ GLOBAL_LIST_EMPTY(teleportlocs) turfs += T map_generator.generate_terrain(turfs, src) -/area/proc/get_contained_turfs() - if(length(turfs_to_uncontain)) +/// Returns the highest zlevel that this area contains turfs for +/area/proc/get_highest_zlevel() + for (var/area_zlevel in length(turfs_by_zlevel) to 1 step -1) + if (length(turfs_to_uncontain_by_zlevel) >= area_zlevel) + if (length(turfs_by_zlevel[area_zlevel]) - length(turfs_to_uncontain_by_zlevel[area_zlevel]) > 0) + return area_zlevel + else + if (length(turfs_by_zlevel[area_zlevel])) + return area_zlevel + return 0 + +/// Returns a nested list of lists with all turfs split by zlevel. +/// only zlevels with turfs are returned. The order of the list is not guaranteed. +/area/proc/get_zlevel_turf_lists() + if(length(turfs_to_uncontain_by_zlevel)) cannonize_contained_turfs() - return contained_turfs + + var/list/zlevel_turf_lists = list() + + for (var/list/zlevel_turfs as anything in turfs_by_zlevel) + if (length(zlevel_turfs)) + zlevel_turf_lists += list(zlevel_turfs) + + return zlevel_turf_lists + +/// Returns a list with all turfs in this zlevel. +/area/proc/get_turfs_by_zlevel(zlevel) + if (length(turfs_to_uncontain_by_zlevel) >= zlevel && length(turfs_to_uncontain_by_zlevel[zlevel])) + cannonize_contained_turfs_by_zlevel(zlevel) + + if (length(turfs_by_zlevel) < zlevel) + return list() + + return turfs_by_zlevel[zlevel] + + +/// Merges a list containing all of the turfs zlevel lists from get_zlevel_turf_lists inside one list. Use get_zlevel_turf_lists() or get_turfs_by_zlevel() unless you need all the turfs in one list to avoid generating large lists +/area/proc/get_turfs_from_all_zlevels() + . = list() + for (var/list/zlevel_turfs as anything in get_zlevel_turf_lists()) + . += zlevel_turfs /// Ensures that the contained_turfs list properly represents the turfs actually inside us -/area/proc/cannonize_contained_turfs() +/area/proc/cannonize_contained_turfs_by_zlevel(zlevel_to_clean, _autoclean = TRUE) // This is massively suboptimal for LARGE removal lists // Try and keep the mass removal as low as you can. We'll do this by ensuring // We only actually add to contained turfs after large changes (Also the management subsystem) // Do your damndest to keep turfs out of /area/space as a stepping stone - // That sucker gets HUGE and will make this take actual tens of seconds if you stuff turfs_to_uncontain - contained_turfs -= turfs_to_uncontain - turfs_to_uncontain = list() + // That sucker gets HUGE and will make this take actual seconds + if (zlevel_to_clean <= length(turfs_by_zlevel) && zlevel_to_clean <= length(turfs_to_uncontain_by_zlevel)) + turfs_by_zlevel[zlevel_to_clean] -= turfs_to_uncontain_by_zlevel[zlevel_to_clean] + + if (!_autoclean) // Removes empty lists from the end of this list + turfs_to_uncontain_by_zlevel[zlevel_to_clean] = list() + return + + var/new_length = length(turfs_to_uncontain_by_zlevel) + // Walk backwards thru the list + for (var/i in length(turfs_to_uncontain_by_zlevel) to 0 step -1) + if (i && length(turfs_to_uncontain_by_zlevel[i])) + break // Stop the moment we find a useful list + new_length = i + + if (new_length < length(turfs_to_uncontain_by_zlevel)) + turfs_to_uncontain_by_zlevel.len = new_length + + if (new_length >= zlevel_to_clean) + turfs_to_uncontain_by_zlevel[zlevel_to_clean] = list() + + +/// Ensures that the contained_turfs list properly represents the turfs actually inside us +/area/proc/cannonize_contained_turfs() + for (var/area_zlevel in 1 to length(turfs_to_uncontain_by_zlevel)) + cannonize_contained_turfs_by_zlevel(area_zlevel, _autoclean = FALSE) + + turfs_to_uncontain_by_zlevel = list() + /// Returns TRUE if we have contained turfs, FALSE otherwise /area/proc/has_contained_turfs() - return length(contained_turfs) - length(turfs_to_uncontain) > 0 + for (var/area_zlevel in 1 to length(turfs_by_zlevel)) + if (length(turfs_to_uncontain_by_zlevel) >= area_zlevel) + if (length(turfs_by_zlevel[area_zlevel]) - length(turfs_to_uncontain_by_zlevel[area_zlevel]) > 0) + return TRUE + else + if (length(turfs_by_zlevel[area_zlevel])) + return TRUE + return FALSE /** * Register this area as belonging to a z level @@ -286,8 +362,8 @@ GLOBAL_LIST_EMPTY(teleportlocs) air_vents = null air_scrubbers = null //turf cleanup - contained_turfs = null - turfs_to_uncontain = null + turfs_by_zlevel = null + turfs_to_uncontain_by_zlevel = null //parent cleanup return ..() @@ -322,10 +398,15 @@ GLOBAL_LIST_EMPTY(teleportlocs) * * Allows interested parties (lights and fire alarms) to react */ -/area/proc/set_fire_effect(new_fire) +/area/proc/set_fire_effect(new_fire, fault_type, fault_source) if(new_fire == fire) return fire = new_fire + fault_status = fault_type + if(fire) + fault_location = fault_source + else + fault_location = null SEND_SIGNAL(src, COMSIG_AREA_FIRE_CHANGED, fire) /** @@ -464,8 +545,6 @@ GLOBAL_LIST_EMPTY(teleportlocs) ///Tries to play looping ambience to the mobs. /mob/proc/refresh_looping_ambience() - SIGNAL_HANDLER - var/area/my_area = get_area(src) if(!(client?.prefs.read_preference(/datum/preference/toggle/sound_ship_ambience)) || !my_area.ambient_buzz) @@ -521,8 +600,9 @@ GLOBAL_LIST_EMPTY(teleportlocs) if(outdoors) return FALSE areasize = 0 - for(var/turf/open/T in get_contained_turfs()) - areasize++ + for(var/list/zlevel_turfs as anything in get_zlevel_turf_lists()) + for(var/turf/open/thisvarisunused in zlevel_turfs) + areasize++ /** * Causes a runtime error diff --git a/code/game/area/areas/away_content.dm b/code/game/area/areas/away_content.dm index b5f63c41398..395cd85c87e 100644 --- a/code/game/area/areas/away_content.dm +++ b/code/game/area/areas/away_content.dm @@ -23,6 +23,18 @@ Unused icons for new areas are "awaycontent1" ~ "awaycontent30" has_gravity = STANDARD_GRAVITY ambientsounds = list('sound/ambience/shore.ogg', 'sound/ambience/seag1.ogg','sound/ambience/seag2.ogg','sound/ambience/seag2.ogg','sound/ambience/ambiodd.ogg','sound/ambience/ambinice.ogg') +/area/awaymission/museum + name = "Nanotrasen Museum" + icon_state = "awaycontent28" + sound_environment = SOUND_ENVIRONMENT_CONCERT_HALL + +/area/awaymission/museum/mothroachvoid + static_lighting = FALSE + base_lighting_alpha = 200 + base_lighting_color = "#FFF4AA" + sound_environment = SOUND_ENVIRONMENT_PLAIN + ambientsounds = list('sound/ambience/shore.ogg', 'sound/ambience/ambiodd.ogg','sound/ambience/ambinice.ogg') + /area/awaymission/errorroom name = "Super Secret Room" static_lighting = FALSE diff --git a/code/game/area/areas/misc.dm b/code/game/area/areas/misc.dm index e6c4224c820..8aa6adc738c 100644 --- a/code/game/area/areas/misc.dm +++ b/code/game/area/areas/misc.dm @@ -34,6 +34,7 @@ static_lighting = FALSE base_lighting_alpha = 255 has_gravity = STANDARD_GRAVITY + ambient_buzz = null /area/misc/testroom requires_power = FALSE diff --git a/code/game/area/areas/ruins/space.dm b/code/game/area/areas/ruins/space.dm index 9004969f916..773922d6670 100644 --- a/code/game/area/areas/ruins/space.dm +++ b/code/game/area/areas/ruins/space.dm @@ -33,7 +33,7 @@ // Ruins of "onehalf" ship /area/ruin/space/has_grav/onehalf/hallway - name = "\improper Hallway" + name = "\improper Half-Station Hallway" /area/ruin/space/has_grav/onehalf/drone_bay name = "\improper Mining Drone Bay" @@ -42,7 +42,7 @@ name = "\improper Crew Quarters" /area/ruin/space/has_grav/onehalf/bridge - name = "\improper Bridge" + name = "\improper Half-Station Bridge" /area/ruin/space/has_grav/powered/dinner_for_two name = "Dinner for Two" @@ -639,25 +639,25 @@ name = "Waystation Maintenance" /area/ruin/space/has_grav/waystation/qm - name = "Quartermaster Office" + name = "Waystation Quartermaster Office" /area/ruin/space/has_grav/waystation/dorms - name = "Living Space" + name = "Waystation Living Space" /area/ruin/space/has_grav/waystation/kitchen - name = "Kitchen" + name = "Waystation Kitchen" /area/ruin/space/has_grav/waystation/cargobay - name = "Cargo Bay" + name = "Waystation Cargo Bay" /area/ruin/space/has_grav/waystation/securestorage - name = "Secure Storage" + name = "Waystation Secure Storage" /area/ruin/space/has_grav/waystation/cargooffice - name = "Cargo Office" + name = "Waystation Cargo Office" /area/ruin/space/has_grav/powered/waystation/assaultpod - name = "Assault Pod" + name = "Waystation Assault Pod" /area/ruin/space/has_grav/waystation/power name = "Waystation Electrical" diff --git a/code/game/area/areas/station/cargo.dm b/code/game/area/areas/station/cargo.dm index faa9f2f6299..323a564c495 100644 --- a/code/game/area/areas/station/cargo.dm +++ b/code/game/area/areas/station/cargo.dm @@ -53,3 +53,7 @@ /area/station/cargo/miningoffice name = "\improper Mining Office" icon_state = "mining" + +/area/station/cargo/miningfoundry + name = "\improper Mining Foundry" + icon_state = "mining_foundry" diff --git a/code/game/atom/_atom.dm b/code/game/atom/_atom.dm index 66ed2048665..4a7d113ba65 100644 --- a/code/game/atom/_atom.dm +++ b/code/game/atom/_atom.dm @@ -65,7 +65,7 @@ var/datum/wires/wires = null ///Light systems, both shouldn't be active at the same time. - var/light_system = STATIC_LIGHT + var/light_system = COMPLEX_LIGHT ///Range of the light in tiles. Zero means no light. var/light_range = 0 ///Intensity of the light. The stronger, the less shadows you will see on the lit area. @@ -296,7 +296,7 @@ if(mobile_docking_port.launch_status != check_for_launch_status) continue for(var/area/shuttle/shuttle_area as anything in mobile_docking_port.shuttle_areas) - if(current_turf in shuttle_area.get_contained_turfs()) + if(shuttle_area == current_turf.loc) return TRUE return FALSE diff --git a/code/game/atom/alternate_appearance.dm b/code/game/atom/alternate_appearance.dm index 86732dd9ed4..228462f7936 100644 --- a/code/game/atom/alternate_appearance.dm +++ b/code/game/atom/alternate_appearance.dm @@ -166,8 +166,8 @@ GLOBAL_LIST_EMPTY(active_alternate_appearances) return TRUE return FALSE -/datum/atom_hud/alternate_appearance/basic/one_person/New(key, image/I, mob/living/M) - ..(key, I, FALSE) - seer = M +/datum/atom_hud/alternate_appearance/basic/one_person/New(key, image/I, options = NONE, mob/living/seer) + src.seer = seer + return ..() /datum/atom_hud/alternate_appearance/basic/food_demands diff --git a/code/game/atom/atom_examine.dm b/code/game/atom/atom_examine.dm index 0f1d4fc4e6a..d19b0a143d5 100644 --- a/code/game/atom/atom_examine.dm +++ b/code/game/atom/atom_examine.dm @@ -43,7 +43,7 @@ if(reagents.flags & TRANSPARENT) if(reagents.total_volume) . += "It contains [reagents.total_volume] units of various reagents[user_sees_reagents ? ":" : "."]" - if(user_sees_reagents) //Show each individual reagent for detailed examination + if(user_sees_reagents || (reagent_sigreturn & ALLOW_GENERIC_REAGENT_EXAMINE)) //Show each individual reagent for detailed examination for(var/datum/reagent/current_reagent as anything in reagents.reagent_list) . += "• [round(current_reagent.volume, CHEMICAL_VOLUME_ROUNDING)] units of [current_reagent.name]" if(reagents.is_reacting) diff --git a/code/game/atom/atom_materials.dm b/code/game/atom/atom_materials.dm index 803a79110a1..345a8486dd6 100644 --- a/code/game/atom/atom_materials.dm +++ b/code/game/atom/atom_materials.dm @@ -12,7 +12,7 @@ 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, custom_materials[current_material] * material_modifier, material_flags) //Remove the current materials + custom_material.on_removed(src, OPTIMAL_COST(custom_materials[current_material] * material_modifier), material_flags) //Remove the current materials if(!length(materials)) custom_materials = null @@ -21,7 +21,7 @@ if(material_flags & MATERIAL_EFFECTS) for(var/current_material in materials) var/datum/material/custom_material = GET_MATERIAL_REF(current_material) - custom_material.on_applied(src, materials[current_material] * multiplier * material_modifier, material_flags) + custom_material.on_applied(src, OPTIMAL_COST(materials[current_material] * multiplier * material_modifier), material_flags) custom_materials = SSmaterials.FindOrCreateMaterialCombo(materials, multiplier) diff --git a/code/game/atom/atom_storage.dm b/code/game/atom/atom_storage.dm index 6273c28fc2e..24ab0887742 100644 --- a/code/game/atom/atom_storage.dm +++ b/code/game/atom/atom_storage.dm @@ -7,32 +7,34 @@ max_slots, max_specific_storage, max_total_storage, - numerical_stacking = FALSE, - allow_quick_gather = FALSE, - allow_quick_empty = FALSE, - collection_mode = COLLECT_ONE, - attack_hand_interact = TRUE, list/canhold, list/canthold, storage_type = /datum/storage, ) + RETURN_TYPE(/datum/storage) if(atom_storage) QDEL_NULL(atom_storage) - atom_storage = new storage_type(src, max_slots, max_specific_storage, max_total_storage, numerical_stacking, allow_quick_gather, collection_mode, attack_hand_interact) + atom_storage = new storage_type(src, max_slots, max_specific_storage, max_total_storage) if(canhold || canthold) atom_storage.set_holdable(canhold, canthold) return atom_storage -/// A quick and easy way to /clone/ a storage datum for an atom (does not copy over contents, only the datum details) +/** + * A quick and easy way to /clone/ a storage datum for an atom (does not copy over contents, only the datum details) + * + * Imperfect, does not copy over ALL variables, only important ones (max storage size, etc) + */ /atom/proc/clone_storage(datum/storage/cloning) + RETURN_TYPE(/datum/storage) + if(atom_storage) QDEL_NULL(atom_storage) - atom_storage = new cloning.type(src, cloning.max_slots, cloning.max_specific_storage, cloning.max_total_storage, cloning.numerical_stacking, cloning.allow_quick_gather, cloning.collection_mode, cloning.attack_hand_interact) + atom_storage = new cloning.type(src, cloning.max_slots, cloning.max_specific_storage, cloning.max_total_storage) if(cloning.can_hold || cloning.cant_hold) if(!atom_storage.can_hold && !atom_storage.cant_hold) //In the event that the can/can't hold lists are already in place (such as from storage objects added on initialize). diff --git a/code/game/atom/atom_vv.dm b/code/game/atom/atom_vv.dm index b5a572749a6..8830a4af2f4 100644 --- a/code/game/atom/atom_vv.dm +++ b/code/game/atom/atom_vv.dm @@ -222,37 +222,37 @@ light_flags &= ~LIGHT_FROZEN switch(var_name) if(NAMEOF(src, light_range)) - if(light_system == STATIC_LIGHT) + if(light_system == COMPLEX_LIGHT) set_light(l_range = var_value) else set_light_range(var_value) . = TRUE if(NAMEOF(src, light_power)) - if(light_system == STATIC_LIGHT) + if(light_system == COMPLEX_LIGHT) set_light(l_power = var_value) else set_light_power(var_value) . = TRUE if(NAMEOF(src, light_color)) - if(light_system == STATIC_LIGHT) + if(light_system == COMPLEX_LIGHT) set_light(l_color = var_value) else set_light_color(var_value) . = TRUE if(NAMEOF(src, light_angle)) - if(light_system == STATIC_LIGHT) + if(light_system == COMPLEX_LIGHT) set_light(l_angle = var_value) . = TRUE if(NAMEOF(src, light_dir)) - if(light_system == STATIC_LIGHT) + if(light_system == COMPLEX_LIGHT) set_light(l_dir = var_value) . = TRUE if(NAMEOF(src, light_height)) - if(light_system == STATIC_LIGHT) + if(light_system == COMPLEX_LIGHT) set_light(l_height = var_value) . = TRUE if(NAMEOF(src, light_on)) - if(light_system == STATIC_LIGHT) + if(light_system == COMPLEX_LIGHT) set_light(l_on = var_value) else set_light_on(var_value) diff --git a/code/game/atom/atoms_initializing_EXPENSIVE.dm b/code/game/atom/atoms_initializing_EXPENSIVE.dm index 2a3a442e04d..ea8bf9b125d 100644 --- a/code/game/atom/atoms_initializing_EXPENSIVE.dm +++ b/code/game/atom/atoms_initializing_EXPENSIVE.dm @@ -128,7 +128,7 @@ if(color) add_atom_colour(color, FIXED_COLOUR_PRIORITY) - if (light_system == STATIC_LIGHT && light_power && light_range) + if (light_system == COMPLEX_LIGHT && light_power && light_range) update_light() SETUP_SMOOTHING() diff --git a/code/game/atoms_movable.dm b/code/game/atoms_movable.dm index 7966417a9ee..f82fb690405 100644 --- a/code/game/atoms_movable.dm +++ b/code/game/atoms_movable.dm @@ -21,6 +21,7 @@ /// The list of factions this atom belongs to var/list/faction + /// Use get_default_say_verb() in say.dm instead of reading verb_say. var/verb_say = "says" var/verb_ask = "asks" var/verb_exclaim = "exclaims" @@ -68,7 +69,7 @@ var/movement_type = GROUND var/atom/movable/pulling - var/grab_state = 0 + var/grab_state = GRAB_PASSIVE /// The strongest grab we can acomplish var/max_grab = GRAB_KILL var/throwforce = 0 @@ -180,11 +181,11 @@ if(opacity) AddElement(/datum/element/light_blocking) switch(light_system) - if(MOVABLE_LIGHT) + if(OVERLAY_LIGHT) AddComponent(/datum/component/overlay_lighting) - if(MOVABLE_LIGHT_DIRECTIONAL) + if(OVERLAY_LIGHT_DIRECTIONAL) AddComponent(/datum/component/overlay_lighting, is_directional = TRUE) - if(MOVABLE_LIGHT_BEAM) + if(OVERLAY_LIGHT_BEAM) AddComponent(/datum/component/overlay_lighting, is_directional = TRUE, is_beam = TRUE) /atom/movable/Destroy(force) @@ -1266,9 +1267,11 @@ return hit_atom.hitby(src, throwingdatum=throwingdatum, hitpush=hitpush) /atom/movable/hitby(atom/movable/hitting_atom, skipcatch, hitpush = TRUE, blocked, datum/thrownthing/throwingdatum) + if(HAS_TRAIT(src, TRAIT_NO_THROW_HITPUSH)) + hitpush = FALSE if(!anchored && hitpush && (!throwingdatum || (throwingdatum.force >= (move_resist * MOVE_FORCE_PUSH_RATIO)))) step(src, hitting_atom.dir) - ..() + return ..() /atom/movable/proc/safe_throw_at(atom/target, range, speed, mob/thrower, spin = TRUE, diagonals_first = FALSE, datum/callback/callback, force = MOVE_FORCE_STRONG, gentle = FALSE) if((force < (move_resist * MOVE_FORCE_THROW_RATIO)) || (move_resist == INFINITY)) diff --git a/code/game/gamemodes/objective.dm b/code/game/gamemodes/objective.dm index ba0d7b931cd..f8a2cbede01 100644 --- a/code/game/gamemodes/objective.dm +++ b/code/game/gamemodes/objective.dm @@ -792,7 +792,7 @@ GLOBAL_LIST_EMPTY(possible_items) n_p ++ else if (SSticker.IsRoundInProgress()) for(var/mob/living/carbon/human/P in GLOB.player_list) - if(!(P.mind.has_antag_datum(/datum/antagonist/changeling)) && !(P.mind in owners)) + if(!(IS_CHANGELING(P)) && !(P.mind in owners)) n_p ++ target_amount = min(target_amount, n_p) diff --git a/code/game/machinery/PDApainter.dm b/code/game/machinery/PDApainter.dm index c4cf5bb125a..679a3182a57 100644 --- a/code/game/machinery/PDApainter.dm +++ b/code/game/machinery/PDApainter.dm @@ -67,7 +67,7 @@ QDEL_NULL(stored_id_card) return ..() -/obj/machinery/pdapainter/on_deconstruction() +/obj/machinery/pdapainter/on_deconstruction(disassembled) // Don't use ejection procs as we're gonna be destroyed anyway, so no need to update icons or anything. if(stored_pda) stored_pda.forceMove(loc) diff --git a/code/game/machinery/_machinery.dm b/code/game/machinery/_machinery.dm index f8d05a885d6..3ce26e0d4e1 100644 --- a/code/game/machinery/_machinery.dm +++ b/code/game/machinery/_machinery.dm @@ -198,9 +198,8 @@ end_processing() clear_components() - dump_contents() - unset_static_power() + return ..() /** @@ -669,6 +668,9 @@ /obj/machinery/ui_act(action, list/params) add_fingerprint(usr) update_last_used(usr) + if(isAI(usr) && !GLOB.cameranet.checkTurfVis(get_turf(src))) //We check if they're an AI specifically here, so borgs can still access off-camera stuff. + to_chat(usr, span_warning("You can no longer connect to this device!")) + return FALSE return ..() /obj/machinery/Topic(href, href_list) @@ -816,11 +818,15 @@ deconstruct(TRUE) /obj/machinery/deconstruct(disassembled = TRUE) + SHOULD_NOT_OVERRIDE(TRUE) + if(obj_flags & NO_DECONSTRUCTION) + dump_contents() //drop everything inside us return ..() //Just delete us, no need to call anything else. - on_deconstruction() + on_deconstruction(disassembled) if(!LAZYLEN(component_parts)) + dump_contents() //drop everything inside us return ..() //we don't have any parts. spawn_frame(disassembled) @@ -839,8 +845,12 @@ continue var/obj/item/stack/stack_path = component new stack_path(loc, board.req_components[component]) - LAZYCLEARLIST(component_parts) + + //drop everything inside us. we do this last to give machines a chance + //to handle their contents before we dump them + dump_contents() + return ..() /** @@ -1126,8 +1136,14 @@ /obj/machinery/proc/on_construction(mob/user) return -//called on deconstruction before the final deletion -/obj/machinery/proc/on_deconstruction() +/** + * called on deconstruction before the final deletion + * Arguments + * + * * disassembled - if TRUE means we used tools to deconstruct it, FALSE means it got destroyed by other means + */ +/obj/machinery/proc/on_deconstruction(disassembled) + PROTECTED_PROC(TRUE) return /obj/machinery/proc/can_be_overridden() diff --git a/code/game/machinery/autolathe.dm b/code/game/machinery/autolathe.dm index 0a01b325149..ba9667b3e58 100644 --- a/code/game/machinery/autolathe.dm +++ b/code/game/machinery/autolathe.dm @@ -7,24 +7,24 @@ active_power_usage = BASE_MACHINE_ACTIVE_CONSUMPTION * 0.5 circuit = /obj/item/circuitboard/machine/autolathe layer = BELOW_OBJ_LAYER + processing_flags = NONE + ///Is the autolathe hacked via wiring var/hacked = FALSE + ///Is the autolathe disabled via wiring var/disabled = FALSE + ///Did we recently shock a mob who medled with the wiring var/shocked = FALSE + ///Are we currently printing something var/busy = FALSE - - /// Coefficient applied to consumed materials. Lower values result in lower material consumption. + ///Coefficient applied to consumed materials. Lower values result in lower material consumption. var/creation_efficiency = 1.6 - - var/datum/design/being_built + ///Designs related to the autolathe var/datum/techweb/autounlocking/stored_research - ///Designs imported from technology disks that we can print. var/list/imported_designs = list() - ///The container to hold materials var/datum/component/material_container/materials - ///direction we output onto (if 0, on top of us) var/drop_direction = 0 @@ -43,17 +43,70 @@ GLOB.autounlock_techwebs[/datum/techweb/autounlocking/autolathe] = new /datum/techweb/autounlocking/autolathe stored_research = GLOB.autounlock_techwebs[/datum/techweb/autounlocking/autolathe] + register_context() + /obj/machinery/autolathe/Destroy() materials = null QDEL_NULL(wires) return ..() +/obj/machinery/autolathe/examine(mob/user) + . = ..() + if(!in_range(user, src) && !isobserver(user)) + return + + . += span_notice("Material usage cost at [creation_efficiency * 100]%") + if(drop_direction) + . += span_notice("Currently configured to drop printed objects [dir2text(drop_direction)].") + . += span_notice("[EXAMINE_HINT("Alt-click")] to reset.") + else + . += span_notice("[EXAMINE_HINT("Drag")] towards a direction (while next to it) to change drop direction.") + + . += span_notice("Its maintainence panel can be [EXAMINE_HINT("screwed")] [panel_open ? "closed" : "open"].") + if(panel_open) + . += span_notice("The machine can be [EXAMINE_HINT("pried")] apart.") + +/obj/machinery/autolathe/add_context(atom/source, list/context, obj/item/held_item, mob/user) + if(drop_direction) + context[SCREENTIP_CONTEXT_ALT_LMB] = "Reset Drop" + return CONTEXTUAL_SCREENTIP_SET + + if(isnull(held_item)) + return NONE + + if(held_item.tool_behaviour == TOOL_SCREWDRIVER) + context[SCREENTIP_CONTEXT_RMB] = "[panel_open ? "Close" : "Open"] Panel" + return CONTEXTUAL_SCREENTIP_SET + + if(panel_open && held_item.tool_behaviour == TOOL_CROWBAR) + context[SCREENTIP_CONTEXT_LMB] = "Deconstruct" + return CONTEXTUAL_SCREENTIP_SET + +/obj/machinery/autolathe/crowbar_act(mob/living/user, obj/item/tool) + . = ITEM_INTERACT_BLOCKING + if(default_deconstruction_crowbar(tool)) + return ITEM_INTERACT_SUCCESS + +/obj/machinery/autolathe/screwdriver_act_secondary(mob/living/user, obj/item/tool) + . = ITEM_INTERACT_BLOCKING + if(default_deconstruction_screwdriver(user, "autolathe_t", "autolathe", tool)) + return ITEM_INTERACT_SUCCESS + +/obj/machinery/autolathe/proc/AfterMaterialInsert(container, obj/item/item_inserted, last_inserted_id, mats_consumed, amount_inserted, atom/context) + SIGNAL_HANDLER + + flick("autolathe_[item_inserted.has_material_type(/datum/material/glass) ? "r" : "o"]", src) + + //we use initial(active_power_usage) because higher tier parts will have higher active usage but we have no benifit from it + directly_use_power(ROUND_UP((amount_inserted / (MAX_STACK_SIZE * SHEET_MATERIAL_AMOUNT)) * 0.01 * initial(active_power_usage))) + /obj/machinery/autolathe/ui_interact(mob/user, datum/tgui/ui) if(!is_operational) return if(shocked && !(machine_stat & NOPOWER)) shock(user, 50) + return ui = SStgui.try_update_ui(user, src, ui) @@ -61,66 +114,40 @@ ui = new(user, src, "Autolathe") ui.open() -/obj/machinery/autolathe/ui_static_data(mob/user) - var/list/data = materials.ui_static_data() - - var/max_available = materials.total_amount() - for(var/datum/material/container_mat as anything in materials.materials) - var/available = materials.materials[container_mat] - if(available) - max_available = max(max_available, available) - - data["designs"] = handle_designs(stored_research.researched_designs, max_available) - if(imported_designs.len) - data["designs"] += handle_designs(imported_designs, max_available) - if(hacked) - data["designs"] += handle_designs(stored_research.hacked_designs, max_available) - - return data - -/obj/machinery/autolathe/ui_data(mob/user) - var/list/data = list() - data["materials"] = list() - data["materialtotal"] = materials.total_amount() - data["materialsmax"] = materials.max_amount - data["active"] = busy - data["materials"] = materials.ui_data() - - return data +/** + * Converts all the designs supported by this autolathe into UI data + * Arguments + * + * * list/designs - the list of techweb designs we are trying to send to the UI + */ +/obj/machinery/autolathe/proc/handle_designs(list/designs) + PRIVATE_PROC(TRUE) -/obj/machinery/autolathe/proc/handle_designs(list/designs, max_available) var/list/output = list() var/datum/asset/spritesheet/research_designs/spritesheet = get_asset_datum(/datum/asset/spritesheet/research_designs) var/size32x32 = "[spritesheet.name]32x32" - var/max_multiplier = INFINITY for(var/design_id in designs) var/datum/design/design = SSresearch.techweb_design_by_id(design_id) if(design.make_reagent) continue //compute cost & maximum number of printable items - max_multiplier = INFINITY var/coeff = (ispath(design.build_path, /obj/item/stack) ? 1 : creation_efficiency) var/list/cost = list() + var/customMaterials = FALSE for(var/i in design.materials) var/datum/material/mat = i var/design_cost = OPTIMAL_COST(design.materials[i] * coeff) if(istype(mat)) cost[mat.name] = design_cost + customMaterials = FALSE else cost[i] = design_cost - - var/mat_available - if(istype(mat)) //regular mat - mat_available = materials.get_material_amount(mat) - else //category mat means we can make it from any mat, use largest available mat - mat_available = max_available - - max_multiplier = min(max_multiplier, 50, round(mat_available / design_cost)) + customMaterials = TRUE //create & send ui data var/icon_size = spritesheet.icon_size_id(design.id) @@ -131,110 +158,224 @@ "id" = design.id, "categories" = design.category, "icon" = "[icon_size == size32x32 ? "" : "[icon_size] "][design.id]", - "constructionTime" = -1, - "maxmult" = max_multiplier + "customMaterials" = customMaterials ) output += list(design_data) return output +/obj/machinery/autolathe/ui_static_data(mob/user) + var/list/data = materials.ui_static_data() + + data["designs"] = handle_designs(stored_research.researched_designs) + if(imported_designs.len) + data["designs"] += handle_designs(imported_designs) + if(hacked) + data["designs"] += handle_designs(stored_research.hacked_designs) + + return data + + /obj/machinery/autolathe/ui_assets(mob/user) return list( get_asset_datum(/datum/asset/spritesheet/sheetmaterials), get_asset_datum(/datum/asset/spritesheet/research_designs), ) -/obj/machinery/autolathe/ui_act(action, list/params) +/obj/machinery/autolathe/ui_data(mob/user) + var/list/data = list() + + data["materials"] = list() + data["materialtotal"] = materials.total_amount() + data["materialsmax"] = materials.max_amount + data["active"] = busy + data["materials"] = materials.ui_data() + + return data + +/obj/machinery/autolathe/ui_act(action, list/params, datum/tgui/ui) . = ..() if(.) return - if(action == "make") - if(disabled) - say("The autolathe wires are disabled.") - return - if(busy) - say("The autolathe is busy. Please wait for completion of previous operation.") - return + //sanity checks to start printing + if(action != "make") + stack_trace("unknown autolathe ui_act: [action]") + return + if(disabled) + say("Unable to print, voltage mismatch in internal wiring.") + return + if(busy) + say("currently printing.") + return - if(isclosedturf(get_step(src, drop_direction))) - say("Output is obstructed.") - return + //validate design + var/design_id = params["id"] + if(!design_id) + return + var/valid_design = stored_research.researched_designs[design_id] + valid_design ||= stored_research.hacked_designs[design_id] + valid_design ||= imported_designs[design_id] + if(!valid_design) + return + var/datum/design/design = SSresearch.techweb_design_by_id(design_id) + if(isnull(design)) + stack_trace("got passed an invalid design id: [design_id] and somehow made it past all checks") + return + if(!(design.build_type & AUTOLATHE)) + say("This fabricator does not have the necessary keys to decrypt this design.") + return - var/design_id = params["id"] - if(!istext(design_id)) - return - if(!stored_research.researched_designs.Find(design_id) && !stored_research.hacked_designs.Find(design_id) && !imported_designs.Find(design_id)) - return - var/datum/design/design = SSresearch.techweb_design_by_id(design_id) - if(!(design.build_type & AUTOLATHE) || design.id != design_id) + //validate print quantity + var/build_count = params["multiplier"] + if(isnull(build_count)) + return + build_count = text2num(build_count) + if(isnull(build_count)) + return + build_count = clamp(build_count, 1, 50) + + //check for materials required. For custom material items decode their required materials + var/list/materials_needed = list() + for(var/material in design.materials) + var/amount_needed = design.materials[material] + 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) + continue + choices[valid_candidate.name] = valid_candidate + if(!length(choices)) + say("No valid materials with applicable amounts detected for design.") + return + var/chosen = tgui_input_list( + ui.user, + "Select the material to use", + "Material Selection", + sort_list(choices), + ) + if(isnull(chosen)) + return // user cancelled + material = choices[chosen] + + if(isnull(material)) + stack_trace("got passed an invalid material id: [material]") return + materials_needed[material] = amount_needed - being_built = design - var/is_stack = ispath(being_built.build_path, /obj/item/stack) - var/coeff = (is_stack ? 1 : creation_efficiency) // Stacks are unaffected by production coefficient + //checks for available materials + var/material_cost_coefficient = ispath(design.build_path, /obj/item/stack) ? 1 : creation_efficiency + if(!materials.has_materials(materials_needed, material_cost_coefficient, build_count)) + say("Not enough materials to begin production.") + return - var/multiplier = round(text2num(params["multiplier"])) - if(!multiplier || !IS_FINITE(multiplier)) - return - multiplier = clamp(multiplier, 1, 50) - - //check for materials - var/list/materials_used = list() - var/list/custom_materials = list() // These will apply their material effect, should usually only be one. - for(var/mat in being_built.materials) - var/datum/material/used_material = mat - - var/amount_needed = being_built.materials[mat] - if(istext(used_material)) // This means its a category - var/list/list_to_show = list() - //list all materials in said category - for(var/i in SSmaterials.materials_by_category[used_material]) - if(materials.materials[i] > 0) - list_to_show += i - //ask user to pick specific material from list - used_material = tgui_input_list( - usr, - "Choose [used_material]", - "Custom Material", - sort_list(list_to_show, GLOBAL_PROC_REF(cmp_typepaths_asc)) - ) - if(isnull(used_material)) - return - //the item composition will be made of these materials - custom_materials[used_material] += amount_needed - materials_used[used_material] = amount_needed - - if(!materials.has_materials(materials_used, coeff, multiplier)) - say("Not enough materials for this operation!.") - return + //compute power & time to print 1 item + var/charge_per_item = 0 + for(var/material in design.materials) + charge_per_item += design.materials[material] + charge_per_item = ROUND_UP((charge_per_item / (MAX_STACK_SIZE * SHEET_MATERIAL_AMOUNT)) * material_cost_coefficient * 0.05 * active_power_usage) + var/build_time_per_item = (design.construction_time * design.lathe_time_factor) ** 0.8 - //use power - var/total_amount = 0 - for(var/material in being_built.materials) - total_amount += being_built.materials[material] - use_power(max(active_power_usage, (total_amount) * multiplier / 5)) + //do the printing sequentially + busy = TRUE + icon_state = "autolathe_n" + SStgui.update_uis(src) + var/turf/target_location + if(drop_direction) + target_location = get_step(src, drop_direction) + if(isclosedturf(target_location)) + target_location = get_turf(src) + else + target_location = get_turf(src) + addtimer(CALLBACK(src, PROC_REF(do_make_item), design, build_count, build_time_per_item, material_cost_coefficient, charge_per_item, materials_needed, target_location), build_time_per_item) + + return TRUE + +/** + * Callback for start_making, actually makes the item + * Arguments + * + * * datum/design/design - the design we are trying to print + * * items_remaining - the number of designs left out to print + * * build_time_per_item - the time taken to print 1 item + * * material_cost_coefficient - the cost efficiency to print 1 design + * * charge_per_item - the amount of power to print 1 item + * * list/materials_needed - the list of materials to print 1 item + * * turf/target - the location to drop the printed item on +*/ +/obj/machinery/autolathe/proc/do_make_item(datum/design/design, items_remaining, build_time_per_item, material_cost_coefficient, charge_per_item, list/materials_needed, turf/target) + PROTECTED_PROC(TRUE) + + if(items_remaining <= 0) // how + finalize_build() + return - //use materials - materials.use_materials(materials_used, coeff, multiplier) - to_chat(usr, span_notice("You print [multiplier] item(s) from the [src]")) - update_static_data_for_all_viewers() + if(!is_operational || !directly_use_power(charge_per_item)) + say("Unable to continue production, power failure.") + finalize_build() + return - //print item - icon_state = "autolathe_n" - var/time_per_item = is_stack ? 32 : ((32 * coeff * multiplier) ** 0.8) / multiplier - make_items(custom_materials, multiplier, is_stack, usr, time_per_item) + var/is_stack = ispath(design.build_path, /obj/item/stack) + if(!materials.has_materials(materials_needed, material_cost_coefficient, is_stack ? items_remaining : 1)) + say("Unable to continue production, missing materials.") + return + materials.use_materials(materials_needed, material_cost_coefficient, is_stack ? items_remaining : 1) - return TRUE + var/atom/movable/created + if(is_stack) + created = new design.build_path(target, items_remaining) + else + created = new design.build_path(target) + split_materials_uniformly(materials_needed, material_cost_coefficient, created) -/obj/machinery/autolathe/crowbar_act(mob/living/user, obj/item/tool) - if(default_deconstruction_crowbar(tool)) - return ITEM_INTERACT_SUCCESS + created.pixel_x = created.base_pixel_x + rand(-6, 6) + created.pixel_y = created.base_pixel_y + rand(-6, 6) + created.forceMove(target) -/obj/machinery/autolathe/screwdriver_act_secondary(mob/living/user, obj/item/tool) - if(default_deconstruction_screwdriver(user, "autolathe_t", "autolathe", tool)) - return ITEM_INTERACT_SUCCESS + if(is_stack) + items_remaining = 0 + else + items_remaining -= 1 + + if(items_remaining <= 0) + finalize_build() + return + addtimer(CALLBACK(src, PROC_REF(do_make_item), design, items_remaining, build_time_per_item, material_cost_coefficient, charge_per_item, materials_needed, target), build_time_per_item) + +/** + * Resets the icon state and busy flag + * Called at the end of do_make_item's timer loop +*/ +/obj/machinery/autolathe/proc/finalize_build() + PROTECTED_PROC(TRUE) + + icon_state = initial(icon_state) + busy = FALSE + SStgui.update_uis(src) + +/obj/machinery/autolathe/MouseDrop(atom/over, src_location, over_location, src_control, over_control, params) + . = ..() + if((!issilicon(usr) && !isAdminGhostAI(usr)) && !Adjacent(usr)) + return + if(busy) + balloon_alert(usr, "printing started!") + return + var/direction = get_dir(src, over_location) + if(!direction) + return + drop_direction = direction + balloon_alert(usr, "dropping [dir2text(drop_direction)]") + +/obj/machinery/autolathe/AltClick(mob/user) + . = ..() + if(!drop_direction || !can_interact(user)) + return + if(busy) + balloon_alert(user, "busy printing!") + return + balloon_alert(user, "drop direction reset") + drop_direction = 0 /obj/machinery/autolathe/attackby(obj/item/attacking_item, mob/living/user, params) if(user.combat_mode) //so we can hit the machine @@ -263,7 +404,7 @@ if(!blueprint) continue if(blueprint.build_type & AUTOLATHE) - imported_designs += blueprint.id + imported_designs[blueprint.id] = TRUE else LAZYADD(not_imported, blueprint.name) if(not_imported) @@ -278,60 +419,6 @@ return ..() -/obj/machinery/autolathe/proc/AfterMaterialInsert(container, obj/item/item_inserted, last_inserted_id, mats_consumed, amount_inserted, atom/context) - SIGNAL_HANDLER - - flick("autolathe_[item_inserted.has_material_type(/datum/material/glass) ? "r" : "o"]", src) - - use_power(min(active_power_usage * 0.25, amount_inserted / 100)) - - update_static_data_for_all_viewers() - -/obj/machinery/autolathe/MouseDrop(atom/over, src_location, over_location, src_control, over_control, params) - . = ..() - if((!issilicon(usr) && !isAdminGhostAI(usr)) && !Adjacent(usr)) - return - var/direction = get_dir(src, over_location) - if(!direction) - return - drop_direction = direction - balloon_alert(usr, "dropping [dir2text(drop_direction)]") - -/obj/machinery/autolathe/proc/make_items(list/picked_materials, multiplier, is_stack, mob/user, time_per_item) - var/atom/our_loc = drop_location() - var/atom/drop_loc = get_step(src, drop_direction) - - busy = TRUE - SStgui.update_uis(src) //so ui immediatly knows its busy - while(multiplier > 0) - if(!busy) - break - stoplag(time_per_item) - var/obj/item/new_item - if(is_stack) - new_item = new being_built.build_path(our_loc, multiplier) - else - new_item = new being_built.build_path(our_loc) - - //custom materials for toolboxes - if(length(picked_materials)) - new_item.set_custom_materials(picked_materials) //Ensure we get the non multiplied amount - for(var/datum/material/mat in picked_materials) - if(!istype(mat, /datum/material/glass) && !istype(mat, /datum/material/iron)) - user.client.give_award(/datum/award/achievement/misc/getting_an_upgrade, user) - - //no need to call if ontop of us - if(drop_direction) - new_item.Move(drop_loc) - //multiplier already applied in stack initialization. work done - if(is_stack) - break - - multiplier-- - - icon_state = "autolathe" - busy = FALSE - /obj/machinery/autolathe/RefreshParts() . = ..() var/mat_capacity = 0 @@ -344,22 +431,12 @@ efficiency -= new_servo.tier * 0.2 creation_efficiency = max(1,efficiency) // creation_efficiency goes 1.6 -> 1.4 -> 1.2 -> 1 per level of servo efficiency -/obj/machinery/autolathe/examine(mob/user) - . += ..() - if(in_range(user, src) || isobserver(user)) - . += span_notice("The status display reads: Storing up to [materials.max_amount] material units.
Material consumption at [creation_efficiency*100]%.") - if(drop_direction) - . += span_notice("Currently configured to drop printed objects [dir2text(drop_direction)].") - . += span_notice("Alt-click to reset.") - else - . += span_notice("Drag towards a direction (while next to it) to change drop direction.") - -/obj/machinery/autolathe/AltClick(mob/user) - . = ..() - if(drop_direction) - balloon_alert(user, "drop direction reset") - drop_direction = 0 - +/** + * Cut a wire in the autolathe + * Arguments + * + * * wire - the wire we are trying to cut + */ /obj/machinery/autolathe/proc/reset(wire) switch(wire) if(WIRE_HACK) @@ -372,6 +449,13 @@ if(!wires.is_cut(wire)) disabled = FALSE +/** + * Shock a mob who is trying to interact with the autolathe + * Arguments + * + * * mob/user - the mob we are trying to shock + * * prb - the probability of getting shocked + */ /obj/machinery/autolathe/proc/shock(mob/user, prb) if(machine_stat & (BROKEN|NOPOWER)) // unpowered, no shock return FALSE @@ -380,11 +464,14 @@ var/datum/effect_system/spark_spread/s = new /datum/effect_system/spark_spread s.set_up(5, 1, src) s.start() - if (electrocute_mob(user, get_area(src), src, 0.7, TRUE)) - return TRUE - else - return FALSE - + return electrocute_mob(user, get_area(src), src, 0.7, TRUE) + +/** + * Is the autolathe hacked. Allowing us to acess hidden designs + * Arguments + * + * state - TRUE/FALSE for is the autolathe hacked + */ /obj/machinery/autolathe/proc/adjust_hacked(state) hacked = state update_static_data_for_all_viewers() diff --git a/code/game/machinery/barsigns.dm b/code/game/machinery/barsigns.dm index 8bdd3ab3b17..faa29c2673e 100644 --- a/code/game/machinery/barsigns.dm +++ b/code/game/machinery/barsigns.dm @@ -91,15 +91,12 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/machinery/barsign, 32) if((machine_stat & BROKEN) && !(obj_flags & NO_DECONSTRUCTION)) set_sign(new /datum/barsign/hiddensigns/signoff) -/obj/machinery/barsign/deconstruct(disassembled = TRUE) - if(!(obj_flags & NO_DECONSTRUCTION)) - if(disassembled) - new disassemble_result(drop_location()) - else - new /obj/item/stack/sheet/iron(drop_location(), 2) - new /obj/item/stack/cable_coil(drop_location(), 2) - - qdel(src) +/obj/machinery/barsign/on_deconstruction(disassembled) + if(disassembled) + new disassemble_result(drop_location()) + else + new /obj/item/stack/sheet/iron(drop_location(), 2) + new /obj/item/stack/cable_coil(drop_location(), 2) /obj/machinery/barsign/play_attack_sound(damage_amount, damage_type = BRUTE, damage_flag = 0) switch(damage_type) @@ -478,6 +475,30 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/machinery/barsign, 32) desc = "First stop out of hell, last stop before heaven." neon_color = COLOR_RED +/datum/barsign/the_red_mons + name = "The Red Mons" + icon_state = "the-red-mons" + desc = "Drinks from the Red Planet." + neon_color = COLOR_RED + +/datum/barsign/the_rune + name = "The Rune" + icon_state = "therune" + desc = "Reality Shifting drinks." + neon_color = COLOR_RED + +/datum/barsign/the_wizard + name = "The Wizard" + icon_state = "the-wizard" + desc = "Magical mixes." + neon_color = COLOR_RED + +/datum/barsign/months_moths_moths + name = "Moths Moths Moths" + icon_state = "moths-moths-moths" + desc = "LIVE MOTHS!" + neon_color = COLOR_RED + // Hidden signs list below this point /datum/barsign/hiddensigns diff --git a/code/game/machinery/camera/camera.dm b/code/game/machinery/camera/camera.dm index f3008ca4ebc..69c01a22f62 100644 --- a/code/game/machinery/camera/camera.dm +++ b/code/game/machinery/camera/camera.dm @@ -115,6 +115,11 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/machinery/camera/xray, 0) /obj/machinery/camera/proc/create_prox_monitor() if(!proximity_monitor) proximity_monitor = new(src, 1) + RegisterSignal(proximity_monitor, COMSIG_QDELETING, PROC_REF(proximity_deleted)) + +/obj/machinery/camera/proc/proximity_deleted() + SIGNAL_HANDLER + proximity_monitor = null /obj/machinery/camera/proc/set_area_motion(area/A) area_motion = A @@ -438,21 +443,20 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/machinery/camera/xray, 0) triggerCameraAlarm() toggle_cam(null, 0) -/obj/machinery/camera/deconstruct(disassembled = TRUE) - if(!(obj_flags & NO_DECONSTRUCTION)) - if(disassembled) - var/obj/structure/camera_assembly/assembly = assembly_ref?.resolve() - if(!assembly) - assembly = new() - assembly.forceMove(drop_location()) - assembly.state = 1 - assembly.setDir(dir) - assembly_ref = null - else - var/obj/item/I = new /obj/item/wallframe/camera (loc) - I.update_integrity(I.max_integrity * 0.5) - new /obj/item/stack/cable_coil(loc, 2) - qdel(src) +/obj/machinery/camera/on_deconstruction(disassembled) + if(disassembled) + var/obj/structure/camera_assembly/assembly = assembly_ref?.resolve() + if(!assembly) + assembly = new() + assembly.forceMove(drop_location()) + assembly.state = 1 + assembly.setDir(dir) + assembly_ref = null + return + + var/obj/item/I = new /obj/item/wallframe/camera (loc) + I.update_integrity(I.max_integrity * 0.5) + new /obj/item/stack/cable_coil(loc, 2) /obj/machinery/camera/update_icon_state() //TO-DO: Make panel open states, xray camera, and indicator lights overlays instead. var/xray_module diff --git a/code/game/machinery/camera/trackable.dm b/code/game/machinery/camera/trackable.dm index 884f38f750b..7155dc10e8e 100644 --- a/code/game/machinery/camera/trackable.dm +++ b/code/game/machinery/camera/trackable.dm @@ -2,13 +2,13 @@ #define CAMERA_TICK_LIMIT 10 /datum/trackable - ///Boolean on whether or not we are currently trying to track something. - var/tracking = FALSE ///Reference to the atom that owns us, used for tracking. var/atom/tracking_holder - ///If there is a mob currently being tracked, this will be the weakref to it. - var/datum/weakref/tracked_mob + ///What mob are we currently tracking, if any + var/mob/living/tracked_mob + ///If we're currently rechecking our target's trackability in hopes of something changing + var/rechecking = FALSE ///How many times we've failed to locate our target. var/cameraticks = 0 @@ -24,7 +24,7 @@ /datum/trackable/New(atom/source) . = ..() tracking_holder = source - RegisterSignal(tracking_holder, COMSIG_MOB_RESET_PERSPECTIVE, PROC_REF(cancel_target_tracking)) + RegisterSignal(tracking_holder, COMSIG_MOB_RESET_PERSPECTIVE, PROC_REF(perspective_reset)) /datum/trackable/Destroy(force) tracking_holder = null @@ -32,27 +32,6 @@ STOP_PROCESSING(SSprocessing, src) return ..() -/datum/trackable/process() - var/mob/living/tracked_target = tracked_mob?.resolve() - if(!tracked_target || !tracking) - set_tracking(FALSE) - return - - if(tracked_target.can_track(tracking_holder)) - cameraticks = initial(cameraticks) - SEND_SIGNAL(tracking_holder, COMSIG_TRACKABLE_TRACKING_TARGET, tracked_target) - return - - if(cameraticks < CAMERA_TICK_LIMIT) - if(!cameraticks) - to_chat(tracking_holder, span_warning("Target is not near any active cameras. Attempting to reacquire...")) - cameraticks++ - return - - to_chat(tracking_holder, span_warning("Unable to reacquire, cancelling track...")) - cameraticks = initial(cameraticks) - set_tracking(FALSE) - ///Generates a list of trackable people by name, returning a list of Humans + Non-Humans that can be tracked. /datum/trackable/proc/find_trackable_mobs() RETURN_TYPE(/list) @@ -82,47 +61,140 @@ var/list/targets = sort_list(humans) + sort_list(others) return targets -///Toggles whether or not we're tracking something. Arg is whether it's on or off. -/datum/trackable/proc/set_tracking(on = FALSE) - if(on) +/// Takes a mob to track, resets our state and begins trying to follow it +/// Best we can at least +/datum/trackable/proc/set_tracked_mob(mob/living/track) + set_rechecking(FALSE) + if(tracked_mob) + UnregisterSignal(tracked_mob, list(COMSIG_QDELETING, COMSIG_MOVABLE_MOVED, COMSIG_MOVABLE_UPDATE_GLIDE_SIZE)) + if(track && !isliving(track)) + tracked_mob = null + return + tracked_mob = track + if(tracked_mob) + RegisterSignal(tracked_mob, COMSIG_QDELETING, PROC_REF(target_deleted)) + RegisterSignal(tracked_mob, COMSIG_MOVABLE_MOVED, PROC_REF(target_moved)) + RegisterSignal(tracked_mob, COMSIG_MOVABLE_UPDATE_GLIDE_SIZE, PROC_REF(glide_size_changed)) + attempt_track() + +/datum/trackable/proc/target_deleted(datum/source) + SIGNAL_HANDLER + reset_tracking() + +/datum/trackable/proc/perspective_reset(atom/source) + SIGNAL_HANDLER + reset_tracking() + +/datum/trackable/proc/target_moved(datum/source) + SIGNAL_HANDLER + if(attempt_track()) + return + set_rechecking(TRUE) + +/// Controls if we're processing to recheck the conditions that prevent tracking or not +/datum/trackable/proc/set_rechecking(should_check) + if(should_check) START_PROCESSING(SSprocessing, src) - tracking = TRUE + cameraticks = initial(cameraticks) + rechecking = TRUE else STOP_PROCESSING(SSprocessing, src) - tracking = FALSE - tracked_mob = null + rechecking = FALSE + +/datum/trackable/process() + if(!rechecking) + return PROCESS_KILL + + if(attempt_track()) + set_rechecking(FALSE) + return + + if(cameraticks < CAMERA_TICK_LIMIT) + if(!cameraticks) + to_chat(tracking_holder, span_warning("Target is not near any active cameras. Attempting to reacquire...")) + cameraticks++ + return -///Called by Signals, used to cancel tracking of a target. -/datum/trackable/proc/cancel_target_tracking(atom/source) + to_chat(tracking_holder, span_warning("Unable to reacquire, cancelling track...")) + reset_tracking() + +/// Tries to track onto our target mob. Returns true if it succeeds, false otherwise +/datum/trackable/proc/attempt_track() + if(!tracked_mob) + reset_tracking() + return FALSE + + if(!tracked_mob.can_track(tracking_holder)) + return FALSE + // In case we've been checking + set_rechecking(FALSE) + SEND_SIGNAL(src, COMSIG_TRACKABLE_TRACKING_TARGET, tracked_mob) + return TRUE + +/datum/trackable/proc/glide_size_changed(datum/source, new_glide_size) SIGNAL_HANDLER - set_tracking(FALSE) + SEND_SIGNAL(src, COMSIG_TRACKABLE_GLIDE_CHANGED, tracked_mob, new_glide_size) /** - * set_tracked_mob + * reset_tracking * - * Sets a mob as being tracked, if a target is already provided then it will track that directly, - * otherwise it will give a tgui input list to find targets to track. + * Resets our tracking + */ +/datum/trackable/proc/reset_tracking() + set_tracked_mob(null) + +/** + * track_input + * + * Sets a mob as being tracked, will give a tgui input list to find targets to track. * Args: * tracker - The person trying to track, used for feedback messages. This is not the same as tracking_holder - * tracked_mob_name - (Optional) The person being tracked, to skip the input list. */ -/datum/trackable/proc/set_tracked_mob(mob/living/tracker, tracked_mob_name) +/datum/trackable/proc/track_input(mob/living/tracker) if(!tracker || tracker.stat == DEAD) return - if(tracked_mob_name) - find_trackable_mobs() //this is in case the tracked mob is newly/no-longer in camera field of view. - tracked_mob = isnull(humans[tracked_mob_name]) ? others[tracked_mob_name] : humans[tracked_mob_name] - if(isnull(tracked_mob)) - to_chat(tracker, span_notice("Target is not on or near any active cameras. Tracking failed.")) - return - to_chat(tracker, span_notice("Now tracking [tracked_mob_name] on camera.")) - else - var/target_name = tgui_input_list(tracker, "Select a target", "Tracking", find_trackable_mobs()) - if(!target_name || isnull(target_name)) - return - tracked_mob = isnull(humans[target_name]) ? others[target_name] : humans[target_name] + var/target_name = tgui_input_list(tracker, "Select a target", "Tracking", find_trackable_mobs()) + if(!target_name || isnull(target_name)) + return + var/datum/weakref/mob_ref = isnull(humans[target_name]) ? others[target_name] : humans[target_name] + if(isnull(mob_ref)) + to_chat(tracker, span_notice("Target is not on or near any active cameras. Tracking failed.")) + return + set_tracked_mob(mob_ref.resolve()) + +/** + * track_name + * + * Sets a mob as being tracked, will track the passed in target name's target + * Args: + * tracker - The person trying to track, used for feedback messages. This is not the same as tracking_holder + * tracked_mob_name - The person being tracked. + */ +/datum/trackable/proc/track_name(mob/living/tracker, tracked_mob_name) + if(!tracker || tracker.stat == DEAD) + return + + find_trackable_mobs() //this is in case the tracked mob is newly/no-longer in camera field of view. + var/datum/weakref/mob_ref = isnull(humans[tracked_mob_name]) ? others[tracked_mob_name] : humans[tracked_mob_name] + if(isnull(mob_ref)) + to_chat(tracker, span_notice("Target is not on or near any active cameras. Tracking failed.")) + return + to_chat(tracker, span_notice("Now tracking [tracked_mob_name] on camera.")) + set_tracked_mob(mob_ref.resolve()) - set_tracking(TRUE) +/** + * track_mob + * + * Sets a mob as being tracked, will track the passed in target + * Args: + * tracker - The person trying to track, used for feedback messages. This is not the same as tracking_holder + * tracked - The person being tracked. + */ +/datum/trackable/proc/track_mob(mob/living/tracker, mob/living/tracked) + if(!tracker || tracker.stat == DEAD) + return + // Need to make sure the tracked mob is in our list + track_name(tracker, tracked.name) #undef CAMERA_TICK_LIMIT diff --git a/code/game/machinery/cell_charger.dm b/code/game/machinery/cell_charger.dm index 8d3e4b3e661..c9acc0de7c9 100644 --- a/code/game/machinery/cell_charger.dm +++ b/code/game/machinery/cell_charger.dm @@ -80,10 +80,9 @@ return return ..() -/obj/machinery/cell_charger/deconstruct() +/obj/machinery/cell_charger/on_deconstruction(disassembled) if(charging) charging.forceMove(drop_location()) - return ..() /obj/machinery/cell_charger/Destroy() QDEL_NULL(charging) diff --git a/code/game/machinery/computer/_computer.dm b/code/game/machinery/computer/_computer.dm index a9954a71f12..116b8ff062e 100644 --- a/code/game/machinery/computer/_computer.dm +++ b/code/game/machinery/computer/_computer.dm @@ -98,33 +98,25 @@ if(prob(10)) atom_break(ENERGY) -/obj/machinery/computer/deconstruct(disassembled = TRUE, mob/user) - on_deconstruction() - if(!(obj_flags & NO_DECONSTRUCTION)) - if(circuit) //no circuit, no computer frame - var/obj/structure/frame/computer/A = new /obj/structure/frame/computer(src.loc) - A.setDir(dir) - A.circuit = circuit - // Circuit removal code is handled in /obj/machinery/Exited() - circuit.forceMove(A) - A.set_anchored(TRUE) - if(machine_stat & BROKEN) - if(user) - to_chat(user, span_notice("The broken glass falls out.")) - else - playsound(src, 'sound/effects/hit_on_shattered_glass.ogg', 70, TRUE) - new /obj/item/shard(drop_location()) - new /obj/item/shard(drop_location()) - A.state = 3 - A.icon_state = "3" - else - if(user) - to_chat(user, span_notice("You disconnect the monitor.")) - A.state = 4 - A.icon_state = "4" - for(var/obj/C in src) - C.forceMove(loc) - qdel(src) +/obj/machinery/computer/spawn_frame(disassembled) + if(QDELETED(circuit)) //no circuit, no computer frame + return + + var/obj/structure/frame/computer/A = new /obj/structure/frame/computer(src.loc) + A.setDir(dir) + A.circuit = circuit + // Circuit removal code is handled in /obj/machinery/Exited() + circuit.forceMove(A) + A.set_anchored(TRUE) + if(machine_stat & BROKEN) + playsound(src, 'sound/effects/hit_on_shattered_glass.ogg', 70, TRUE) + new /obj/item/shard(drop_location()) + new /obj/item/shard(drop_location()) + A.state = 3 + A.icon_state = "3" + else + A.state = 4 + A.icon_state = "4" /obj/machinery/computer/AltClick(mob/user) . = ..() diff --git a/code/game/machinery/computer/aifixer.dm b/code/game/machinery/computer/aifixer.dm index 2ddbb3baadd..74632b926b1 100644 --- a/code/game/machinery/computer/aifixer.dm +++ b/code/game/machinery/computer/aifixer.dm @@ -138,6 +138,6 @@ QDEL_NULL(occupier) return ..() -/obj/machinery/computer/aifixer/on_deconstruction() +/obj/machinery/computer/aifixer/on_deconstruction(disassembled) if(occupier) QDEL_NULL(occupier) diff --git a/code/game/machinery/computer/crew.dm b/code/game/machinery/computer/crew.dm index a2b5db099e9..0a49365e1ee 100644 --- a/code/game/machinery/computer/crew.dm +++ b/code/game/machinery/computer/crew.dm @@ -1,7 +1,7 @@ /// How often the sensor data is updated #define SENSORS_UPDATE_PERIOD (10 SECONDS) //How often the sensor data updates. /// The job sorting ID associated with otherwise unknown jobs -#define UNKNOWN_JOB_ID 81 +#define UNKNOWN_JOB_ID 998 /obj/machinery/computer/crew name = "crew monitoring console" @@ -136,7 +136,7 @@ GLOBAL_DATUM_INIT(crewmonitor, /datum/crewmonitor, new) JOB_CARGO_TECHNICIAN = 52, JOB_BITRUNNER = 53, JOB_CUSTOMS_AGENT = 54, // NOVA EDIT ADDITION - // 60+: Civilian/other + // 60+: Service JOB_HEAD_OF_PERSONNEL = 60, JOB_BARTENDER = 61, JOB_COOK = 62, @@ -245,7 +245,7 @@ GLOBAL_DATUM_INIT(crewmonitor, /datum/crewmonitor, new) var/list/entry = list( "ref" = REF(tracked_living_mob), "name" = "Unknown", - "ijob" = UNKNOWN_JOB_ID + "ijob" = UNKNOWN_JOB_ID, ) // ID and id-related data @@ -301,7 +301,7 @@ GLOBAL_DATUM_INIT(crewmonitor, /datum/crewmonitor, new) var/mob/living/silicon/ai/AI = usr if(!istype(AI)) return - AI.ai_tracking_tool.set_tracked_mob(AI, params["name"]) + AI.ai_tracking_tool.track_name(AI, params["name"]) #undef SENSORS_UPDATE_PERIOD #undef UNKNOWN_JOB_ID diff --git a/code/game/machinery/computer/dna_console.dm b/code/game/machinery/computer/dna_console.dm index 1fe999010b7..0982c98dd1c 100644 --- a/code/game/machinery/computer/dna_console.dm +++ b/code/game/machinery/computer/dna_console.dm @@ -548,6 +548,7 @@ var/truegenes = GET_SEQUENCE(path) newgene = truegenes[genepos] joker_ready = world.time + JOKER_TIMEOUT - (JOKER_UPGRADE * (connected_scanner.precision_coeff-1)) + tgui_view_state["jokerActive"] = FALSE else var/current_letter = gene_letters.Find(sequence[genepos]) newgene = (current_letter == gene_letter_count) ? gene_letters[1] : gene_letters[current_letter + 1] diff --git a/code/game/machinery/computer/orders/order_items/mining/order_consumables.dm b/code/game/machinery/computer/orders/order_items/mining/order_consumables.dm index b219062932a..de2f3d82275 100644 --- a/code/game/machinery/computer/orders/order_items/mining/order_consumables.dm +++ b/code/game/machinery/computer/orders/order_items/mining/order_consumables.dm @@ -3,20 +3,20 @@ /datum/orderable_item/consumables/survival_pen item_path = /obj/item/reagent_containers/hypospray/medipen/survival - cost_per_order = 500 + cost_per_order = 250 /datum/orderable_item/consumables/luxury_pen item_path = /obj/item/reagent_containers/hypospray/medipen/survival/luxury - cost_per_order = 1000 + cost_per_order = 750 /datum/orderable_item/consumables/medkit item_path = /obj/item/storage/medkit/brute - cost_per_order = 600 + cost_per_order = 400 /datum/orderable_item/consumables/medkit_fire item_path = /obj/item/storage/medkit/fire desc = "For emergency magmatic burn relief." - cost_per_order = 700 + cost_per_order = 500 /datum/orderable_item/consumables/whiskey item_path = /obj/item/reagent_containers/cup/glass/bottle/whiskey diff --git a/code/game/machinery/computer/orders/order_items/mining/order_golem.dm b/code/game/machinery/computer/orders/order_items/mining/order_golem.dm index 891c6b9f358..cbd037230f2 100644 --- a/code/game/machinery/computer/orders/order_items/mining/order_golem.dm +++ b/code/game/machinery/computer/orders/order_items/mining/order_golem.dm @@ -3,33 +3,33 @@ /datum/orderable_item/golem/mining_id item_path = /obj/item/card/id/advanced/mining - cost_per_order = 250 + cost_per_order = 200 /datum/orderable_item/golem/science_goggles item_path = /obj/item/clothing/glasses/science - cost_per_order = 250 + cost_per_order = 200 /datum/orderable_item/golem/monkeycubes item_path = /obj/item/food/monkeycube - cost_per_order = 300 + cost_per_order = 250 /datum/orderable_item/golem/belt item_path = /obj/item/storage/belt/utility - cost_per_order = 350 + cost_per_order = 300 /datum/orderable_item/golem/royal_cape item_path = /obj/item/bedsheet/rd/royal_cape - cost_per_order = 500 + cost_per_order = 400 /datum/orderable_item/golem/grey_extract item_path = /obj/item/slime_extract/grey - cost_per_order = 1000 + cost_per_order = 800 /datum/orderable_item/golem/trigger_guard item_path = /obj/item/borg/upgrade/modkit/trigger_guard - cost_per_order = 1700 + cost_per_order = 750 /datum/orderable_item/golem/rnd_boards item_path = /obj/item/storage/box/rndboards - cost_per_order = 2000 + cost_per_order = 1000 diff --git a/code/game/machinery/computer/orders/order_items/mining/order_mining.dm b/code/game/machinery/computer/orders/order_items/mining/order_mining.dm index 09bbeed2bed..686f8312671 100644 --- a/code/game/machinery/computer/orders/order_items/mining/order_mining.dm +++ b/code/game/machinery/computer/orders/order_items/mining/order_mining.dm @@ -3,52 +3,52 @@ /datum/orderable_item/mining/marker_beacon item_path = /obj/item/stack/marker_beacon/ten - cost_per_order = 100 + cost_per_order = 80 /datum/orderable_item/mining/skeleton_key item_path = /obj/item/skeleton_key - cost_per_order = 777 + cost_per_order = 675 /datum/orderable_item/mining/mining_stabilizer item_path = /obj/item/mining_stabilizer - cost_per_order = 400 + cost_per_order = 320 /datum/orderable_item/mining/fulton_core item_path = /obj/item/fulton_core - cost_per_order = 400 + cost_per_order = 320 /datum/orderable_item/mining/mining_modsuit item_path = /obj/item/mod/control/pre_equipped/mining desc = "A mining-themed MODsuit that works best when in a mining environment." - cost_per_order = 3000 + cost_per_order = 2500 /datum/orderable_item/mining/mining_belt item_path = /obj/item/storage/belt/mining - cost_per_order = 500 + cost_per_order = 450 /datum/orderable_item/mining/jaunter item_path = /obj/item/wormhole_jaunter - cost_per_order = 750 + cost_per_order = 650 /datum/orderable_item/mining/crusher item_path = /obj/item/kinetic_crusher - cost_per_order = 750 + cost_per_order = 650 /datum/orderable_item/mining/resonator item_path = /obj/item/resonator - cost_per_order = 800 + cost_per_order = 710 /datum/orderable_item/mining/resonator_advanced item_path = /obj/item/resonator/upgraded - cost_per_order = 2500 + cost_per_order = 2000 /datum/orderable_item/mining/mining_scanner item_path = /obj/item/t_scanner/adv_mining_scanner - cost_per_order = 800 + cost_per_order = 675 /datum/orderable_item/mining/fulton item_path = /obj/item/extraction_pack - cost_per_order = 1000 + cost_per_order = 800 /datum/orderable_item/mining/lazarus item_path = /obj/item/lazarus_injector @@ -69,40 +69,45 @@ /datum/orderable_item/mining/conscription_kit item_path = /obj/item/storage/backpack/duffelbag/mining_conscript desc = "A kit containing everything a crewmember needs to support a shaft miner in the field." - cost_per_order = 1500 + cost_per_order = 1200 /datum/orderable_item/mining/capsule item_path = /obj/item/survivalcapsule - cost_per_order = 400 + cost_per_order = 350 /datum/orderable_item/mining/capsule/bathroom item_path = /obj/item/survivalcapsule/bathroom - cost_per_order = 375 + cost_per_order = 300 /datum/orderable_item/mining/capsule_luxury item_path = /obj/item/survivalcapsule/luxury - cost_per_order = 3000 + cost_per_order = 2300 /datum/orderable_item/mining/capsule_luxuryelite item_path = /obj/item/survivalcapsule/luxuryelite - cost_per_order = 10000 + cost_per_order = 7000 /datum/orderable_item/mining/kheiralcuffs item_path = /obj/item/kheiral_cuffs - cost_per_order = 750 + cost_per_order = 675 /datum/orderable_item/mining/bhop item_path = /obj/item/clothing/shoes/bhop - cost_per_order = 2500 + cost_per_order = 2000 /datum/orderable_item/mining/hiking_boots item_path = /obj/item/clothing/shoes/winterboots/ice_boots - cost_per_order = 2500 + cost_per_order = 2000 /datum/orderable_item/mining/style_meter item_path = /obj/item/style_meter - cost_per_order = 1500 + cost_per_order = 1200 /datum/orderable_item/mining/weather_radio item_path = /obj/item/radio/weather_monitor - cost_per_order = 400 + cost_per_order = 320 + +/datum/orderable_item/mining/boulder_processing + item_path = /obj/item/boulder_beacon + desc = "A Bouldertech brand all-in-one boulder processing beacon. Each use will teleport in a component of a full boulder processing assembly line. Good for when you need to process additional boulders." + cost_per_order = 875 diff --git a/code/game/machinery/computer/orders/order_items/mining/order_pka.dm b/code/game/machinery/computer/orders/order_items/mining/order_pka.dm index 7ba37721e36..251343e6f8e 100644 --- a/code/game/machinery/computer/orders/order_items/mining/order_pka.dm +++ b/code/game/machinery/computer/orders/order_items/mining/order_pka.dm @@ -3,19 +3,19 @@ /datum/orderable_item/accelerator/gun item_path = /obj/item/gun/energy/recharge/kinetic_accelerator - cost_per_order = 750 + cost_per_order = 600 /datum/orderable_item/accelerator/range item_path = /obj/item/borg/upgrade/modkit/range - cost_per_order = 1000 + cost_per_order = 675 /datum/orderable_item/accelerator/damage item_path = /obj/item/borg/upgrade/modkit/damage - cost_per_order = 1000 + cost_per_order = 675 /datum/orderable_item/accelerator/cooldown item_path = /obj/item/borg/upgrade/modkit/cooldown - cost_per_order = 1000 + cost_per_order = 675 /datum/orderable_item/accelerator/chasis item_path = /obj/item/borg/upgrade/modkit/chassis_mod @@ -35,8 +35,8 @@ /datum/orderable_item/accelerator/aoe_mobs item_path = /obj/item/borg/upgrade/modkit/aoe/mobs - cost_per_order = 2000 + cost_per_order = 1500 /datum/orderable_item/accelerator/minebot_passthrough item_path = /obj/item/borg/upgrade/modkit/minebot_passthrough - cost_per_order = 1000 + cost_per_order = 800 diff --git a/code/game/machinery/computer/orders/order_items/mining/order_toys.dm b/code/game/machinery/computer/orders/order_items/mining/order_toys.dm index cd1dbf5c674..5ce92f7b84f 100644 --- a/code/game/machinery/computer/orders/order_items/mining/order_toys.dm +++ b/code/game/machinery/computer/orders/order_items/mining/order_toys.dm @@ -3,29 +3,29 @@ /datum/orderable_item/toys_drones/soap item_path = /obj/item/soap/nanotrasen - cost_per_order = 200 + cost_per_order = 180 /datum/orderable_item/toys_drones/laser_pointer item_path = /obj/item/laser_pointer - cost_per_order = 300 + cost_per_order = 275 /datum/orderable_item/toys_drones/facehugger item_path = /obj/item/clothing/mask/facehugger/toy - cost_per_order = 300 + cost_per_order = 275 /datum/orderable_item/toys_drones/mining_drone item_path = /mob/living/basic/mining_drone - cost_per_order = 800 + cost_per_order = 675 /datum/orderable_item/toys_drones/drone_health item_path = /obj/item/mine_bot_upgrade/health - cost_per_order = 400 + cost_per_order = 350 /datum/orderable_item/toys_drones/drone_pka item_path = /obj/item/borg/upgrade/modkit/cooldown/minebot - cost_per_order = 600 + cost_per_order = 525 /datum/orderable_item/toys_drones/drone_sentience item_path = /obj/item/slimepotion/slime/sentience/mining - cost_per_order = 1000 + cost_per_order = 850 diff --git a/code/game/machinery/computer/prisoner/_prisoner.dm b/code/game/machinery/computer/prisoner/_prisoner.dm index 16369302c66..f1ce2555936 100644 --- a/code/game/machinery/computer/prisoner/_prisoner.dm +++ b/code/game/machinery/computer/prisoner/_prisoner.dm @@ -1,11 +1,10 @@ /obj/machinery/computer/prisoner - interaction_flags_machine = INTERACT_MACHINE_ALLOW_SILICON|INTERACT_MACHINE_SET_MACHINE|INTERACT_MACHINE_REQUIRES_LITERACY + interaction_flags_machine = INTERACT_MACHINE_ALLOW_SILICON|INTERACT_MACHINE_REQUIRES_LITERACY /// ID card currently inserted into the computer. VAR_FINAL/obj/item/card/id/advanced/prisoner/contained_id -/obj/machinery/computer/prisoner/deconstruct(disassembled, mob/user) +/obj/machinery/computer/prisoner/on_deconstruction(disassembled) contained_id?.forceMove(drop_location()) - return ..() /obj/machinery/computer/prisoner/Destroy() QDEL_NULL(contained_id) diff --git a/code/game/machinery/computer/records/records.dm b/code/game/machinery/computer/records/records.dm index 531e1725e33..4a13dc17cd5 100644 --- a/code/game/machinery/computer/records/records.dm +++ b/code/game/machinery/computer/records/records.dm @@ -67,6 +67,10 @@ if("purge_records") // Don't let people off station futz with the station network. + //NOVA EDIT BEGIN: disable record purging/expunging to stop people messing around with the AI effortlessly + balloon_alert(usr, "access denied!") + return TRUE + /* if(!is_station_level(z)) balloon_alert(usr, "out of range!") return TRUE @@ -86,6 +90,8 @@ balloon_alert(usr, "interrupted!") return TRUE + */ + //NOVA EDIT END if("view_record") if(!target) diff --git a/code/game/machinery/computer/telescreen.dm b/code/game/machinery/computer/telescreen.dm index 90e53c2f452..7b1e62e2cb7 100644 --- a/code/game/machinery/computer/telescreen.dm +++ b/code/game/machinery/computer/telescreen.dm @@ -21,10 +21,8 @@ result_path = /obj/machinery/computer/security/telescreen pixel_shift = 32 -/obj/machinery/computer/security/telescreen/deconstruct(disassembled = TRUE) - if(!(obj_flags & NO_DECONSTRUCTION)) - new frame_type(loc) - qdel(src) +/obj/machinery/computer/security/telescreen/on_deconstruction(disassembled) + new frame_type(loc) /obj/machinery/computer/security/telescreen/update_icon_state() icon_state = initial(icon_state) diff --git a/code/game/machinery/dance_machine.dm b/code/game/machinery/dance_machine.dm index 66be2dc2450..098c887f2a2 100644 --- a/code/game/machinery/dance_machine.dm +++ b/code/game/machinery/dance_machine.dm @@ -1,122 +1,60 @@ -/* NOVA EDIT REMOVAL BEGIN - JUKEBOX - MOVED TO 'modular_nova/modules/jukebox/code/dance_machine.dm' -/// Helper macro to check if the passed mob has jukebox sound preference enabled -#define HAS_JUKEBOX_PREF(mob) (!QDELETED(mob) && !isnull(mob.client) && mob.client.prefs.read_preference(/datum/preference/toggle/sound_jukebox)) - /obj/machinery/jukebox name = "jukebox" desc = "A classic music player." icon = 'icons/obj/machines/music.dmi' icon_state = "jukebox" + base_icon_state = "jukebox" verb_say = "states" density = TRUE req_access = list(ACCESS_BAR) - /// Whether we're actively playing music - var/active = FALSE - /// List of weakrefs to mobs listening to the current song - var/list/datum/weakref/rangers = list() - /// World.time when the current song will stop playing, but also a cooldown between activations - var/stop = 0 - /// List of /datum/tracks we can play - /// Inited from config every time a jukebox is instantiated - var/list/songs = list() - /// Current song selected - var/datum/track/selection = null - /// Volume of the songs played - var/volume = 50 + processing_flags = START_PROCESSING_MANUALLY /// Cooldown between "Error" sound effects being played COOLDOWN_DECLARE(jukebox_error_cd) - -/obj/machinery/jukebox/disco - name = "radiant dance machine mark IV" - desc = "The first three prototypes were discontinued after mass casualty incidents." - icon_state = "disco" - req_access = list(ACCESS_ENGINEERING) - anchored = FALSE - var/list/spotlights = list() - var/list/sparkles = list() - -/obj/machinery/jukebox/disco/indestructible - name = "radiant dance machine mark V" - desc = "Now redesigned with data gathered from the extensive disco and plasma research." - req_access = null - anchored = TRUE - resistance_flags = INDESTRUCTIBLE | LAVA_PROOF | FIRE_PROOF | UNACIDABLE | ACID_PROOF - obj_flags = /obj::obj_flags | NO_DECONSTRUCTION - -/datum/track - var/song_name = "generic" - var/song_path = null - var/song_length = 0 - var/song_beat = 0 - -/datum/track/default - song_path = 'sound/ambience/title3.ogg' - song_name = "Tintin on the Moon" - song_length = 3 MINUTES + 52 SECONDS - song_beat = 1 SECONDS + /// Cooldown between being allowed to play another song + COOLDOWN_DECLARE(jukebox_song_cd) + /// TimerID to when the current song ends + var/song_timerid + /// The actual music player datum that handles the music + var/datum/jukebox/music_player /obj/machinery/jukebox/Initialize(mapload) . = ..() - songs = load_songs_from_config() - if(length(songs)) - selection = pick(songs) - -/// Loads the config sounds once, and returns a copy of them. -/obj/machinery/jukebox/proc/load_songs_from_config() - var/static/list/config_songs - if(isnull(config_songs)) - config_songs = list() - var/list/tracks = flist("[global.config.directory]/jukebox_music/sounds/") - for(var/track_file in tracks) - var/datum/track/new_track = new() - new_track.song_path = file("[global.config.directory]/jukebox_music/sounds/[track_file]") - var/list/track_data = splittext(track_file, "+") - if(length(track_data) != 3) - continue - new_track.song_name = track_data[1] - new_track.song_length = text2num(track_data[2]) - new_track.song_beat = text2num(track_data[3]) - config_songs += new_track - - if(!length(config_songs)) - // Includes title3 as a default for testing / "no config" support, also because it's a banger - config_songs += new /datum/track/default() - - // returns a copy so it can mutate if desired. - return config_songs.Copy() + music_player = new(src) /obj/machinery/jukebox/Destroy() - dance_over() - selection = null - songs.Cut() + stop_music() + QDEL_NULL(music_player) return ..() -/obj/machinery/jukebox/attackby(obj/item/O, mob/user, params) - if(!active && !(obj_flags & NO_DECONSTRUCTION)) - if(O.tool_behaviour == TOOL_WRENCH) - if(!anchored && !isinspace()) - to_chat(user,span_notice("You secure [src] to the floor.")) - set_anchored(TRUE) - else if(anchored) - to_chat(user,span_notice("You unsecure and disconnect [src].")) - set_anchored(FALSE) - playsound(src, 'sound/items/deconstruct.ogg', 50, TRUE) - return - return ..() +/obj/machinery/jukebox/no_access + req_access = null + +/obj/machinery/jukebox/wrench_act(mob/living/user, obj/item/tool) + if(!isnull(music_player.active_song_sound)) + return NONE + if(obj_flags & NO_DECONSTRUCTION) + return NONE + + if(default_unfasten_wrench(user, tool) == SUCCESSFUL_UNFASTEN) + return ITEM_INTERACT_SUCCESS + + return ITEM_INTERACT_BLOCKING /obj/machinery/jukebox/update_icon_state() - icon_state = "[initial(icon_state)][active ? "-active" : null]" + icon_state = "[base_icon_state][music_player.active_song_sound ? "-active" : null]" return ..() /obj/machinery/jukebox/ui_status(mob/user) + if(isobserver(user)) + return ..() if(!anchored) to_chat(user,span_warning("This device must be anchored by a wrench!")) return UI_CLOSE - if(!allowed(user) && !isobserver(user)) + if(!allowed(user)) to_chat(user,span_warning("Error: Access Denied.")) user.playsound_local(src, 'sound/misc/compiler-failure.ogg', 25, TRUE) return UI_CLOSE - if(!songs.len && !isobserver(user)) + if(!length(music_player.songs)) to_chat(user,span_warning("Error: No music tracks have been authorized for your station. Petition Central Command to resolve this issue.")) user.playsound_local(src, 'sound/misc/compiler-failure.ogg', 25, TRUE) return UI_CLOSE @@ -129,23 +67,7 @@ ui.open() /obj/machinery/jukebox/ui_data(mob/user) - var/list/data = list() - data["active"] = active - data["songs"] = list() - for(var/datum/track/S in songs) - var/list/track_data = list( - name = S.song_name - ) - data["songs"] += list(track_data) - data["track_selected"] = null - data["track_length"] = null - data["track_beat"] = null - if(selection) - data["track_selected"] = selection.song_name - data["track_length"] = DisplayTimeText(selection.song_length) - data["track_beat"] = selection.song_beat - data["volume"] = volume - return data + return music_player.get_ui_data() /obj/machinery/jukebox/ui_act(action, list/params) . = ..() @@ -154,60 +76,120 @@ switch(action) if("toggle") - if(QDELETED(src)) - return - if(!active) - if(stop > world.time) - to_chat(usr, span_warning("Error: The device is still resetting from the last activation, it will be ready again in [DisplayTimeText(stop-world.time)].")) - if(!COOLDOWN_FINISHED(src, jukebox_error_cd)) - return - playsound(src, 'sound/misc/compiler-failure.ogg', 50, TRUE) - COOLDOWN_START(src, jukebox_error_cd, 15 SECONDS) - return + if(isnull(music_player.active_song_sound)) + if(!COOLDOWN_FINISHED(src, jukebox_song_cd)) + to_chat(usr, span_warning("Error: The device is still resetting from the last activation, \ + it will be ready again in [DisplayTimeText(COOLDOWN_TIMELEFT(src, jukebox_song_cd))].")) + if(COOLDOWN_FINISHED(src, jukebox_error_cd)) + playsound(src, 'sound/misc/compiler-failure.ogg', 33, TRUE) + COOLDOWN_START(src, jukebox_error_cd, 15 SECONDS) + return TRUE + activate_music() - START_PROCESSING(SSobj, src) - return TRUE else - stop = 0 - return TRUE + stop_music() + + return TRUE + if("select_track") - if(active) + if(!isnull(music_player.active_song_sound)) to_chat(usr, span_warning("Error: You cannot change the song until the current one is over.")) - return - var/list/available = list() - for(var/datum/track/S in songs) - available[S.song_name] = S - var/selected = params["track"] - if(QDELETED(src) || !selected || !istype(available[selected], /datum/track)) - return - selection = available[selected] + return TRUE + + var/datum/track/new_song = music_player.songs[params["track"]] + if(QDELETED(src) || !istype(new_song, /datum/track)) + return TRUE + + music_player.selection = new_song return TRUE + if("set_volume") var/new_volume = params["volume"] - if(new_volume == "reset") - volume = initial(volume) - return TRUE + if(new_volume == "reset" || new_volume == "max") + music_player.set_volume_to_max() else if(new_volume == "min") - volume = 0 - return TRUE - else if(new_volume == "max") - volume = initial(volume) - return TRUE - else if(text2num(new_volume) != null) - volume = text2num(new_volume) - return TRUE + music_player.set_new_volume(0) + else if(isnum(text2num(new_volume))) + music_player.set_new_volume(text2num(new_volume)) + return TRUE + + if("loop") + music_player.sound_loops = !!params["looping"] + return TRUE /obj/machinery/jukebox/proc/activate_music() - active = TRUE + if(!isnull(music_player.active_song_sound)) + return FALSE + + music_player.start_music() update_use_power(ACTIVE_POWER_USE) update_appearance(UPDATE_ICON_STATE) - START_PROCESSING(SSobj, src) - stop = world.time + selection.song_length + if(!music_player.sound_loops) + song_timerid = addtimer(CALLBACK(src, PROC_REF(stop_music)), music_player.selection.song_length, TIMER_UNIQUE|TIMER_STOPPABLE|TIMER_DELETE_ME) + return TRUE + +/obj/machinery/jukebox/proc/stop_music() + if(!isnull(song_timerid)) + deltimer(song_timerid) + + music_player.unlisten_all() + + if(!QDELING(src)) + COOLDOWN_START(src, jukebox_song_cd, 10 SECONDS) + playsound(src,'sound/machines/terminal_off.ogg',50,TRUE) + update_use_power(IDLE_POWER_USE) + update_appearance(UPDATE_ICON_STATE) + return TRUE + +/obj/machinery/jukebox/on_set_is_operational(old_value) + if(!is_operational) + stop_music() + +/obj/machinery/jukebox/disco + name = "radiant dance machine mark IV" + desc = "The first three prototypes were discontinued after mass casualty incidents." + icon_state = "disco" + base_icon_state = "disco" + req_access = list(ACCESS_ENGINEERING) + anchored = FALSE + + /// Spotlight effects being played + VAR_PRIVATE/list/obj/item/flashlight/spotlight/spotlights = list() + /// Sparkle effects being played + VAR_PRIVATE/list/obj/effect/overlay/sparkles/sparkles = list() + +/obj/machinery/jukebox/disco/indestructible + name = "radiant dance machine mark V" + desc = "Now redesigned with data gathered from the extensive disco and plasma research." + req_access = null + anchored = TRUE + resistance_flags = INDESTRUCTIBLE | LAVA_PROOF | FIRE_PROOF | UNACIDABLE | ACID_PROOF + obj_flags = parent_type::obj_flags | NO_DECONSTRUCTION /obj/machinery/jukebox/disco/activate_music() - ..() + . = ..() + if(!.) + return dance_setup() lights_spin() + begin_processing() + +/obj/machinery/jukebox/disco/stop_music() + . = ..() + if(!.) + return + QDEL_LIST(spotlights) + QDEL_LIST(sparkles) + end_processing() + +/obj/machinery/jukebox/disco/process() + var/dance_num = rand(1, 4) //all will do the same dance + for(var/mob/living/dancer in music_player.get_active_listeners()) + if(!(dancer.mobility_flags & MOBILITY_MOVE)) + continue + if(HAS_TRAIT(dancer, TRAIT_DISCO_DANCER)) + continue + dance(dancer, dance_num) /obj/machinery/jukebox/disco/proc/dance_setup() var/turf/cen = get_turf(src) @@ -248,7 +230,7 @@ /obj/machinery/jukebox/disco/proc/lights_spin() for(var/i in 1 to 25) - if(QDELETED(src) || !active) + if(QDELETED(src) || isnull(music_player.active_song_sound)) return var/obj/effect/overlay/sparkles/S = new /obj/effect/overlay/sparkles(src) S.alpha = 0 @@ -264,12 +246,10 @@ S.pixel_y = 7 S.forceMove(get_turf(src)) sleep(0.7 SECONDS) - if(selection.song_name == "Engineering's Ultimate High-Energy Hustle") - sleep(28 SECONDS) for(var/s in sparkles) var/obj/effect/overlay/sparkles/reveal = s reveal.alpha = 255 - while(active) + while(!isnull(music_player.active_song_sound)) for(var/g in spotlights) // The multiples reflects custom adjustments to each colors after dozens of tests var/obj/item/flashlight/spotlight/glow = g if(QDELETED(glow)) @@ -337,190 +317,72 @@ glow.even_cycle = !glow.even_cycle if(prob(2)) // Unique effects for the dance floor that show up randomly to mix things up INVOKE_ASYNC(src, PROC_REF(hierofunk)) - sleep(selection.song_beat) + sleep(music_player.selection.song_beat) if(QDELETED(src)) return #undef DISCO_INFENO_RANGE -/obj/machinery/jukebox/disco/proc/dance(mob/living/M) //Show your moves - set waitfor = FALSE - switch(rand(0,9)) - if(0 to 1) - dance2(M) - if(2 to 3) - dance3(M) - if(4 to 6) - dance4(M) - if(7 to 9) - dance5(M) - -/obj/machinery/jukebox/disco/proc/dance2(mob/living/M) - for(var/i in 0 to 9) - dance_rotate(M, CALLBACK(M, TYPE_PROC_REF(/mob, dance_flip))) - sleep(2 SECONDS) +/obj/machinery/jukebox/disco/proc/dance(mob/living/dancer, dance_num) //Show your moves + ADD_TRAIT(dancer, TRAIT_DISCO_DANCER, REF(src)) + switch(dance_num) + if(1) + dance1(dancer) + if(2) + dance2(dancer) + if(3) + start_dance3(dancer) + if(4) + dance4(dancer) /mob/proc/dance_flip() if(dir == WEST) emote("flip") -/obj/machinery/jukebox/disco/proc/dance3(mob/living/M) - var/matrix/initial_matrix = matrix(M.transform) - for (var/i in 1 to 75) - if (!M) - return - switch(i) - if (1 to 15) - initial_matrix = matrix(M.transform) - initial_matrix.Translate(0,1) - animate(M, transform = initial_matrix, time = 1, loop = 0) - if (16 to 30) - initial_matrix = matrix(M.transform) - initial_matrix.Translate(1,-1) - animate(M, transform = initial_matrix, time = 1, loop = 0) - if (31 to 45) - initial_matrix = matrix(M.transform) - initial_matrix.Translate(-1,-1) - animate(M, transform = initial_matrix, time = 1, loop = 0) - if (46 to 60) - initial_matrix = matrix(M.transform) - initial_matrix.Translate(-1,1) - animate(M, transform = initial_matrix, time = 1, loop = 0) - if (61 to 75) - initial_matrix = matrix(M.transform) - initial_matrix.Translate(1,0) - animate(M, transform = initial_matrix, time = 1, loop = 0) - M.setDir(turn(M.dir, 90)) - switch (M.dir) - if (NORTH) - initial_matrix = matrix(M.transform) - initial_matrix.Translate(0,3) - animate(M, transform = initial_matrix, time = 1, loop = 0) - if (SOUTH) - initial_matrix = matrix(M.transform) - initial_matrix.Translate(0,-3) - animate(M, transform = initial_matrix, time = 1, loop = 0) - if (EAST) - initial_matrix = matrix(M.transform) - initial_matrix.Translate(3,0) - animate(M, transform = initial_matrix, time = 1, loop = 0) - if (WEST) - initial_matrix = matrix(M.transform) - initial_matrix.Translate(-3,0) - animate(M, transform = initial_matrix, time = 1, loop = 0) - sleep(0.1 SECONDS) - M.lying_fix() - -/obj/machinery/jukebox/disco/proc/dance4(mob/living/lead_dancer) - var/speed = rand(1,3) - set waitfor = 0 - var/time = 30 - while(time) - sleep(speed) - for(var/i in 1 to speed) - lead_dancer.setDir(pick(GLOB.cardinals)) - // makes people dance with us nearby - for(var/datum/weakref/weak_dancer as anything in rangers) - var/mob/living/carbon/dancer = weak_dancer.resolve() - if(!istype(dancer)) - continue - dancer.set_resting(!dancer.resting, silent = TRUE, instant = TRUE) - time-- - -/obj/machinery/jukebox/disco/proc/dance5(mob/living/M) - animate(M, transform = matrix(180, MATRIX_ROTATE), time = 1, loop = 0) - var/matrix/initial_matrix = matrix(M.transform) - for (var/i in 1 to 60) - if (!M) - return - if (i<31) - initial_matrix = matrix(M.transform) - initial_matrix.Translate(0,1) - animate(M, transform = initial_matrix, time = 1, loop = 0) - if (i>30) - initial_matrix = matrix(M.transform) - initial_matrix.Translate(0,-1) - animate(M, transform = initial_matrix, time = 1, loop = 0) - M.setDir(turn(M.dir, 90)) - switch (M.dir) - if (NORTH) - initial_matrix = matrix(M.transform) - initial_matrix.Translate(0,3) - animate(M, transform = initial_matrix, time = 1, loop = 0) - if (SOUTH) - initial_matrix = matrix(M.transform) - initial_matrix.Translate(0,-3) - animate(M, transform = initial_matrix, time = 1, loop = 0) - if (EAST) - initial_matrix = matrix(M.transform) - initial_matrix.Translate(3,0) - animate(M, transform = initial_matrix, time = 1, loop = 0) - if (WEST) - initial_matrix = matrix(M.transform) - initial_matrix.Translate(-3,0) - animate(M, transform = initial_matrix, time = 1, loop = 0) - sleep(1 SECONDS) - M.lying_fix() - -/mob/living/proc/lying_fix() - animate(src, transform = null, time = 1, loop = 0) - lying_prev = 0 - -/obj/machinery/jukebox/proc/dance_over() - for(var/datum/weakref/weak_to_hide_from as anything in rangers) - var/mob/to_hide_from = weak_to_hide_from?.resolve() - to_hide_from?.stop_sound_channel(CHANNEL_JUKEBOX) - - rangers.Cut() - -/obj/machinery/jukebox/disco/dance_over() - ..() - QDEL_LIST(spotlights) - QDEL_LIST(sparkles) - -/obj/machinery/jukebox/process() - if(world.time < stop && active) - var/sound/song_played = sound(selection.song_path) - - // Goes through existing mobs in rangers to determine if they should not be played to - for(var/datum/weakref/weak_to_hide_from as anything in rangers) - var/mob/to_hide_from = weak_to_hide_from?.resolve() - if(!HAS_JUKEBOX_PREF(to_hide_from) || get_dist(src, get_turf(to_hide_from)) > 10) - rangers -= weak_to_hide_from - to_hide_from?.stop_sound_channel(CHANNEL_JUKEBOX) - - // Collect mobs to play the song to, stores weakrefs of them in rangers - for(var/mob/to_play_to in range(world.view, src)) - if(!HAS_JUKEBOX_PREF(to_play_to)) - continue - var/datum/weakref/weak_playing_to = WEAKREF(to_play_to) - if(rangers[weak_playing_to]) - continue - rangers[weak_playing_to] = TRUE - // This plays the sound directly underneath the mob because otherwise it'd get stuck in their left ear or whatever - // Would be neat if it sourced from the box itself though - to_play_to.playsound_local(get_turf(to_play_to), null, volume, channel = CHANNEL_JUKEBOX, sound_to_use = song_played, use_reverb = FALSE) - - else if(active) - active = FALSE - update_use_power(IDLE_POWER_USE) - STOP_PROCESSING(SSobj, src) - dance_over() - playsound(src,'sound/machines/terminal_off.ogg',50,TRUE) - update_appearance(UPDATE_ICON_STATE) - stop = world.time + 100 - -/obj/machinery/jukebox/disco/process() - . = ..() - if(!active) - return - - for(var/datum/weakref/weak_dancer as anything in rangers) - var/mob/living/to_dance = weak_dancer.resolve() - if(!istype(to_dance) || !(to_dance.mobility_flags & MOBILITY_MOVE)) - continue - if(prob(5 + (allowed(to_dance) * 4))) - dance(to_dance) - -#undef HAS_JUKEBOX_PREF -*/ //NOVA EDIT REMOVAL END +/obj/machinery/jukebox/disco/proc/dance1(mob/living/dancer) + addtimer(TRAIT_CALLBACK_REMOVE(dancer, TRAIT_DISCO_DANCER, REF(src)), 6.5 SECONDS, TIMER_CLIENT_TIME) + for(var/i in 0 to (6 SECONDS) step (1.5 SECONDS)) + addtimer(CALLBACK(GLOBAL_PROC, GLOBAL_PROC_REF(dance_rotate), dancer, CALLBACK(dancer, TYPE_PROC_REF(/mob, dance_flip))), i, TIMER_CLIENT_TIME) + +/obj/machinery/jukebox/disco/proc/dance2(mob/living/dancer, dance_length = 2.5 SECONDS) + var/matrix/initial_matrix = matrix(dancer.transform) + var/list/transforms = list( + "[NORTH]" = matrix(dancer.transform).Translate(0, 3), + "[EAST]" = matrix(dancer.transform).Translate(3, 0), + "[SOUTH]" = matrix(dancer.transform).Translate(0, -3), + "[WEST]" = matrix(dancer.transform).Translate(-1, -1), + ) + addtimer(VARSET_CALLBACK(dancer, transform, initial_matrix), dance_length + 0.5 SECONDS, TIMER_CLIENT_TIME) + addtimer(TRAIT_CALLBACK_REMOVE(dancer, TRAIT_DISCO_DANCER, REF(src)), dance_length + 0.5 SECONDS) + for (var/i in 1 to dance_length) + addtimer(CALLBACK(src, PROC_REF(animate_dance2), dancer, transforms, initial_matrix), i, TIMER_CLIENT_TIME) + +/obj/machinery/jukebox/disco/proc/animate_dance2(mob/living/dancer, list/transforms, matrix/initial_matrix) + dancer.setDir(turn(dancer.dir, 90)) + animate(dancer, transform = transforms[num2text(dancer.dir)], time = 1, loop = 0) + animate(transform = initial_matrix, time = 2, loop = 0) + +/obj/machinery/jukebox/disco/proc/start_dance3(mob/living/dancer, dance_length = 3 SECONDS) + var/initially_resting = dancer.resting + var/direction_index = 1 //this should allow everyone to dance in the same direction + addtimer(TRAIT_CALLBACK_REMOVE(dancer, TRAIT_DISCO_DANCER, REF(src)), dance_length + 0.2 SECONDS) + addtimer(CALLBACK(dancer, TYPE_PROC_REF(/mob/living, set_resting), initially_resting, TRUE, TRUE), dance_length + 0.2 SECONDS, TIMER_CLIENT_TIME) + for (var/i in 1 to dance_length step 2) // 1 = 0.1 seconds + addtimer(CALLBACK(src, PROC_REF(dance3), dancer, GLOB.cardinals[direction_index]), i, TIMER_CLIENT_TIME) + direction_index++ + if(direction_index > GLOB.cardinals.len) + direction_index = 1 + +/obj/machinery/jukebox/disco/proc/dance3(mob/living/dancer, dir) + dancer.setDir(dir) + dancer.set_resting(!dancer.resting, silent = TRUE, instant = TRUE) + +/obj/machinery/jukebox/disco/proc/dance4(mob/living/dancer, dance_length = 1.5 SECONDS) + var/matrix/initial_matrix = matrix(dancer.transform) + animate(dancer, transform = matrix(dancer.transform).Turn(180), time = 2, loop = 0) + dancer.emote("spin") + addtimer(CALLBACK(src, PROC_REF(dance4_revert), dancer, initial_matrix), dance_length, TIMER_CLIENT_TIME) + +/obj/machinery/jukebox/disco/proc/dance4_revert(mob/living/dancer, matrix/starting_matrix) + animate(dancer, transform = starting_matrix, time = 5, loop = 0) + REMOVE_TRAIT(dancer, TRAIT_DISCO_DANCER, REF(src)) diff --git a/code/game/machinery/digital_clock.dm b/code/game/machinery/digital_clock.dm index a0dc87dba08..febc6a4b091 100644 --- a/code/game/machinery/digital_clock.dm +++ b/code/game/machinery/digital_clock.dm @@ -69,16 +69,13 @@ . = ..() emag_act() -/obj/machinery/digital_clock/deconstruct(disassembled = TRUE) - if(obj_flags & NO_DECONSTRUCTION) - return +/obj/machinery/digital_clock/on_deconstruction(disassembled) if(disassembled) new /obj/item/wallframe/digital_clock(drop_location()) else new /obj/item/stack/sheet/iron(drop_location(), 2) new /obj/item/shard(drop_location()) new /obj/item/shard(drop_location()) - qdel(src) /obj/machinery/digital_clock/Initialize(mapload) . = ..() diff --git a/code/game/machinery/dna_infuser/organ_sets/gondola_organs.dm b/code/game/machinery/dna_infuser/organ_sets/gondola_organs.dm index 2a5c776709c..70dd58f9f27 100644 --- a/code/game/machinery/dna_infuser/organ_sets/gondola_organs.dm +++ b/code/game/machinery/dna_infuser/organ_sets/gondola_organs.dm @@ -79,15 +79,12 @@ Fluoride Stare: After someone says 5 words, blah blah blah... icon_state = "liver" greyscale_config = /datum/greyscale_config/mutant_organ greyscale_colors = GONDOLA_COLORS - /// instance of the martial art granted on insertion - var/datum/martial_art/hugs_of_the_gondola/pax_hugs /obj/item/organ/internal/liver/gondola/Initialize(mapload) . = ..() AddElement(/datum/element/organ_set_bonus, /datum/status_effect/organ_set_bonus/gondola) AddElement(/datum/element/noticable_organ, "left arm has small needles breaching the skin all over it.", BODY_ZONE_L_ARM) AddElement(/datum/element/noticable_organ, "right arm has small needles breaching the skin all over it.", BODY_ZONE_R_ARM) - pax_hugs = new /obj/item/organ/internal/liver/gondola/Insert(mob/living/carbon/liver_owner, special, movement_flags) . = ..() @@ -100,14 +97,13 @@ Fluoride Stare: After someone says 5 words, blah blah blah... else to_chat(liver_owner, span_warning("You feel like something would be happening to your arms right now... if you still had them.")) to_chat(liver_owner, span_notice("Hugging a target will pacify them, but you won't be able to carry much of anything anymore.")) - pax_hugs.teach(liver_owner) RegisterSignal(liver_owner, COMSIG_HUMAN_EQUIPPING_ITEM, PROC_REF(on_owner_equipping_item)) RegisterSignal(liver_owner, COMSIG_LIVING_TRY_PULL, PROC_REF(on_owner_try_pull)) + RegisterSignal(liver_owner, COMSIG_CARBON_HELPED, PROC_REF(on_hug)) /obj/item/organ/internal/liver/gondola/Remove(mob/living/carbon/liver_owner, special, movement_flags) . = ..() - pax_hugs.remove(liver_owner) - UnregisterSignal(liver_owner, list(COMSIG_HUMAN_EQUIPPING_ITEM, COMSIG_LIVING_TRY_PULL)) + UnregisterSignal(liver_owner, list(COMSIG_HUMAN_EQUIPPING_ITEM, COMSIG_LIVING_TRY_PULL, COMSIG_CARBON_HELPED)) /// signal sent when prompting if an item can be equipped /obj/item/organ/internal/liver/gondola/proc/on_owner_equipping_item(mob/living/carbon/human/owner, obj/item/equip_target, slot) @@ -130,6 +126,18 @@ Fluoride Stare: After someone says 5 words, blah blah blah... item_target.balloon_alert(owner, "too weak to pull this!") return COMSIG_LIVING_CANCEL_PULL +/obj/item/organ/internal/liver/gondola/proc/on_hug(mob/living/carbon/human/source, mob/living/carbon/hugged) + SIGNAL_HANDLER + + var/list/covered_body_zones = source.get_covered_body_zones() + var/pax_injected = 4 + if(BODY_ZONE_L_ARM in covered_body_zones) + pax_injected -= 2 + if(BODY_ZONE_R_ARM in covered_body_zones) + pax_injected -= 2 + if(pax_injected > 0 && hugged.reagents?.add_reagent(/datum/reagent/pax, pax_injected)) + to_chat(hugged, span_warning("You feel a tiny prick!")) + #undef GONDOLA_ORGAN_COLOR #undef GONDOLA_SCLERA_COLOR #undef GONDOLA_PUPIL_COLOR diff --git a/code/game/machinery/doors/airlock.dm b/code/game/machinery/doors/airlock.dm index 3a2d828205c..566c4eb360c 100644 --- a/code/game/machinery/doors/airlock.dm +++ b/code/game/machinery/doors/airlock.dm @@ -308,9 +308,6 @@ for(var/obj/machinery/door/airlock/otherlock as anything in close_others) otherlock.close_others -= src close_others.Cut() - if(id_tag) - for(var/obj/machinery/door_buttons/D as anything in SSmachines.get_machines_by_type_and_subtypes(/obj/machinery/door_buttons)) - D.removeMe(src) QDEL_NULL(note) QDEL_NULL(seal) for(var/datum/atom_hud/data/diagnostic/diag_hud in GLOB.huds) @@ -1530,38 +1527,32 @@ assembly.update_name() assembly.update_appearance() -/obj/machinery/door/airlock/deconstruct(disassembled = TRUE, mob/user) - if(!(obj_flags & NO_DECONSTRUCTION)) - var/obj/structure/door_assembly/A - if(assemblytype) - A = new assemblytype(loc) - else - A = new /obj/structure/door_assembly(loc) - //If you come across a null assemblytype, it will produce the default assembly instead of disintegrating. - prepare_deconstruction_assembly(A) - - if(!disassembled) - A?.update_integrity(A.max_integrity * 0.5) - else if(obj_flags & EMAGGED) - if(user) - to_chat(user, span_warning("You discard the damaged electronics.")) - else - if(user) - to_chat(user, span_notice("You remove the airlock electronics.")) - - var/obj/item/electronics/airlock/ae - if(!electronics) - ae = new/obj/item/electronics/airlock(loc) - if(length(req_one_access)) - ae.one_access = 1 - ae.accesses = req_one_access - else - ae.accesses = req_access +/obj/machinery/door/airlock/on_deconstruction(disassembled) + var/obj/structure/door_assembly/A + if(assemblytype) + A = new assemblytype(loc) + else + A = new /obj/structure/door_assembly(loc) + //If you come across a null assemblytype, it will produce the default assembly instead of disintegrating. + prepare_deconstruction_assembly(A) + + if(!disassembled) + A?.update_integrity(A.max_integrity * 0.5) + else if(obj_flags & EMAGGED) + //no electronics nothing + else + var/obj/item/electronics/airlock/ae + if(!electronics) + ae = new/obj/item/electronics/airlock(loc) + if(length(req_one_access)) + ae.one_access = 1 + ae.accesses = req_one_access else - ae = electronics - electronics = null - ae.forceMove(drop_location()) - qdel(src) + ae.accesses = req_access + else + ae = electronics + electronics = null + ae.forceMove(drop_location()) /obj/machinery/door/airlock/rcd_vals(mob/user, obj/item/construction/rcd/the_rcd) switch(the_rcd.mode) @@ -1822,6 +1813,7 @@ /obj/machinery/door/airlock/security name = "security airlock" icon = 'icons/obj/doors/airlocks/station/security.dmi' + var/id = null assemblytype = /obj/structure/door_assembly/door_assembly_sec normal_integrity = 450 diff --git a/code/game/machinery/doors/brigdoors.dm b/code/game/machinery/doors/brigdoors.dm index 2dfff746d37..e17d9f22c91 100644 --- a/code/game/machinery/doors/brigdoors.dm +++ b/code/game/machinery/doors/brigdoors.dm @@ -47,6 +47,10 @@ if (M.id == id) doors += WEAKREF(M) + for(var/obj/machinery/door/airlock/security/M in urange(20, src)) + if (M.id == id) + doors += WEAKREF(M) + for(var/obj/machinery/flasher/F in urange(20, src)) if(F.id == id) flashers += WEAKREF(F) diff --git a/code/game/machinery/doors/firedoor.dm b/code/game/machinery/doors/firedoor.dm index 8c6e5174a28..279119bd21e 100644 --- a/code/game/machinery/doors/firedoor.dm +++ b/code/game/machinery/doors/firedoor.dm @@ -74,9 +74,12 @@ /obj/machinery/door/firedoor/Initialize(mapload) . = ..() + id_tag = assign_random_name() soundloop = new(src, FALSE) CalculateAffectingAreas() my_area = get_area(src) + if(name == initial(name)) + update_name() if(!merger_typecache) merger_typecache = typecacheof(/obj/machinery/door/firedoor) @@ -180,6 +183,10 @@ return . +/obj/machinery/door/firedoor/update_name(updates) + . = ..() + name = "[get_area_name(my_area)] [initial(name)] [id_tag]" + /** * Calculates what areas we should worry about. * @@ -272,11 +279,14 @@ /obj/machinery/door/firedoor/proc/check_atmos(turf/checked_turf) var/datum/gas_mixture/environment = checked_turf.return_air() + if(!environment) + stack_trace("We tried to check a gas_mixture that doesn't exist for its firetype, what are you DOING") + return var/pressure = environment?.return_pressure() //NOVA EDIT ADDITION - Micro optimisation - if(environment?.temperature >= BODYTEMP_HEAT_DAMAGE_LIMIT || pressure > WARNING_HIGH_PRESSURE) //NOVA EDIT CHANGE - BETTER LOCKS + if(environment.temperature >= FIRE_MINIMUM_TEMPERATURE_TO_EXIST || pressure > WARNING_HIGH_PRESSURE) //NOVA EDIT CHANGE ADDITION - ORIGINAL: if(environment.temperature >= FIRE_MINIMUM_TEMPERATURE_TO_EXIST) return FIRELOCK_ALARM_TYPE_HOT - if(environment?.temperature <= BODYTEMP_COLD_DAMAGE_LIMIT || pressure < WARNING_LOW_PRESSURE) //NOVA EDIT CHANGE - BETTER LOCKS + if(environment.temperature <= BODYTEMP_COLD_DAMAGE_LIMIT || pressure < WARNING_LOW_PRESSURE) //NOVA EDIT CHANGE ADDITION - ORIGINAL: if(environment.temperature <= BODYTEMP_COLD_DAMAGE_LIMIT) return FIRELOCK_ALARM_TYPE_COLD return @@ -321,6 +331,8 @@ return //We're already active soundloop.start() is_playing_alarm = TRUE + my_area.fault_status = AREA_FAULT_AUTOMATIC + my_area.fault_location = name var/datum/merger/merge_group = GetMergeGroup(merger_id, merger_typecache) for(var/obj/machinery/door/firedoor/buddylock as anything in merge_group.members) buddylock.activate(code) @@ -333,6 +345,8 @@ /obj/machinery/door/firedoor/proc/start_deactivation_process() soundloop.stop() is_playing_alarm = FALSE + my_area.fault_status = AREA_FAULT_NONE + my_area.fault_location = null var/datum/merger/merge_group = GetMergeGroup(merger_id, merger_typecache) for(var/obj/machinery/door/firedoor/buddylock as anything in merge_group.members) buddylock.reset() @@ -369,7 +383,7 @@ if(LAZYLEN(place.active_firelocks) != 1) continue //if we're the first to activate in this particular area - place.set_fire_effect(TRUE) //bathe in red + place.set_fire_effect(TRUE, AREA_FAULT_AUTOMATIC, name) //bathe in red if(place == my_area) // We'll limit our reporting to just the area we're on. If the issue affects bordering areas, they can report it themselves place.alarm_manager.send_alarm(ALARM_FIRE, place) @@ -429,7 +443,7 @@ LAZYREMOVE(place.active_firelocks, src) if(LAZYLEN(place.active_firelocks)) // If we were the last firelock still active, clear the area effects continue - place.set_fire_effect(FALSE) + place.set_fire_effect(FALSE, AREA_FAULT_NONE, name) if(place == my_area) place.alarm_manager.clear_alarm(ALARM_FIRE, place) @@ -656,20 +670,18 @@ if(old_activity != active) //Something changed while we were sleeping correct_state() //So we should re-evaluate our state -/obj/machinery/door/firedoor/deconstruct(disassembled = TRUE) - if(!(obj_flags & NO_DECONSTRUCTION)) - var/turf/targetloc = get_turf(src) - if(disassembled || prob(40)) - var/obj/structure/firelock_frame/unbuilt_lock = new assemblytype(targetloc) - if(disassembled) - unbuilt_lock.constructionStep = CONSTRUCTION_PANEL_OPEN - else - unbuilt_lock.constructionStep = CONSTRUCTION_NO_CIRCUIT - unbuilt_lock.update_integrity(unbuilt_lock.max_integrity * 0.5) - unbuilt_lock.update_appearance() +/obj/machinery/door/firedoor/on_deconstruction(disassembled) + var/turf/targetloc = get_turf(src) + if(disassembled || prob(40)) + var/obj/structure/firelock_frame/unbuilt_lock = new assemblytype(targetloc) + if(disassembled) + unbuilt_lock.constructionStep = CONSTRUCTION_PANEL_OPEN else - new /obj/item/electronics/firelock (targetloc) - qdel(src) + unbuilt_lock.constructionStep = CONSTRUCTION_NO_CIRCUIT + unbuilt_lock.update_integrity(unbuilt_lock.max_integrity * 0.5) + unbuilt_lock.update_appearance() + else + new /obj/item/electronics/firelock (targetloc) /obj/machinery/door/firedoor/Moved(atom/old_loc, movement_dir, forced, list/old_locs, momentum_change = TRUE) . = ..() diff --git a/code/game/machinery/doors/shutters.dm b/code/game/machinery/doors/shutters.dm index 5d390019f9b..eca8d88da4b 100644 --- a/code/game/machinery/doors/shutters.dm +++ b/code/game/machinery/doors/shutters.dm @@ -66,3 +66,12 @@ /obj/machinery/door/poddoor/shutters/window/preopen icon_state = "open" density = FALSE + +/obj/machinery/door/poddoor/shutters/window/indestructible + name = "hardened windowed shutters" + resistance_flags = INDESTRUCTIBLE | LAVA_PROOF | FIRE_PROOF | UNACIDABLE | ACID_PROOF + +/obj/machinery/door/poddoor/shutters/window/indestructible/preopen + icon_state = "open" + density = FALSE + opacity = FALSE diff --git a/code/game/machinery/doors/windowdoor.dm b/code/game/machinery/doors/windowdoor.dm index 9179dbaf94f..bbe443bf380 100644 --- a/code/game/machinery/doors/windowdoor.dm +++ b/code/game/machinery/doors/windowdoor.dm @@ -14,7 +14,7 @@ visible = FALSE flags_1 = ON_BORDER_1 opacity = FALSE - pass_flags_self = PASSGLASS + pass_flags_self = PASSGLASS | PASSWINDOW can_atmos_pass = ATMOS_PASS_PROC interaction_flags_machine = INTERACT_MACHINE_WIRES_IF_OPEN | INTERACT_MACHINE_ALLOW_SILICON | INTERACT_MACHINE_OPEN_SILICON | INTERACT_MACHINE_REQUIRES_SILICON | INTERACT_MACHINE_OPEN set_dir_on_move = FALSE @@ -301,15 +301,16 @@ playsound(src, 'sound/items/welder.ogg', 100, TRUE) -/obj/machinery/door/window/deconstruct(disassembled = TRUE) - if(!(obj_flags & NO_DECONSTRUCTION) && !disassembled) - for(var/i in 1 to shards) - drop_debris(new /obj/item/shard(src)) - if(rods) - drop_debris(new /obj/item/stack/rods(src, rods)) - if(cable) - drop_debris(new /obj/item/stack/cable_coil(src, cable)) - qdel(src) +/obj/machinery/door/window/on_deconstruction(disassembled) + if(disassembled) + return + + for(var/i in 1 to shards) + drop_debris(new /obj/item/shard(src)) + if(rods) + drop_debris(new /obj/item/stack/rods(src, rods)) + if(cable) + drop_debris(new /obj/item/stack/cable_coil(src, cable)) /obj/machinery/door/window/proc/drop_debris(obj/item/debris) debris.forceMove(loc) diff --git a/code/game/machinery/droneDispenser.dm b/code/game/machinery/droneDispenser.dm index 1d428e7547e..91e7d1a3d48 100644 --- a/code/game/machinery/droneDispenser.dm +++ b/code/game/machinery/droneDispenser.dm @@ -260,11 +260,6 @@ if(break_sound) playsound(src, break_sound, 50, TRUE) -/obj/machinery/drone_dispenser/deconstruct(disassembled = TRUE) - if(!(obj_flags & NO_DECONSTRUCTION)) - new /obj/item/stack/sheet/iron(loc, 5) - qdel(src) - #undef DRONE_PRODUCTION #undef DRONE_RECHARGING #undef DRONE_READY diff --git a/code/game/machinery/embedded_controller/access_controller.dm b/code/game/machinery/embedded_controller/access_controller.dm index 1fc7c41e2e9..89cc7499960 100644 --- a/code/game/machinery/embedded_controller/access_controller.dm +++ b/code/game/machinery/embedded_controller/access_controller.dm @@ -1,9 +1,3 @@ -#define CLOSING 1 -#define OPENING 2 -#define CYCLE 3 -#define CYCLE_EXTERIOR 4 -#define CYCLE_INTERIOR 5 - /obj/machinery/door_buttons power_channel = AREA_USAGE_ENVIRON use_power = IDLE_POWER_USE @@ -15,7 +9,7 @@ /obj/machinery/door_buttons/attackby(obj/O, mob/user) return attack_hand(user) -/obj/machinery/door_buttons/proc/findObjsByTag() +/obj/machinery/door_buttons/proc/find_objects_by_tag() return /obj/machinery/door_buttons/Initialize(mapload) @@ -23,7 +17,7 @@ return INITIALIZE_HINT_LATELOAD /obj/machinery/door_buttons/LateInitialize() - findObjsByTag() + find_objects_by_tag() /obj/machinery/door_buttons/emag_act(mob/user, obj/item/card/emag/emag_card) if(obj_flags & EMAGGED) @@ -35,9 +29,6 @@ balloon_alert(user, "access controller shorted") return TRUE -/obj/machinery/door_buttons/proc/removeMe() - - /obj/machinery/door_buttons/access_button icon = 'icons/obj/machines/wallmounts.dmi' // NOVA EDIT CHANGE - ICON OVERRIDEN BY AESTHETICS - SEE MODULE icon_state = "access_button_standby" @@ -49,14 +40,16 @@ var/obj/machinery/door_buttons/airlock_controller/controller var/busy -/obj/machinery/door_buttons/access_button/findObjsByTag() +/obj/machinery/door_buttons/access_button/find_objects_by_tag() for(var/obj/machinery/door_buttons/airlock_controller/A as anything in SSmachines.get_machines_by_type_and_subtypes(/obj/machinery/door_buttons/airlock_controller)) if(A.idSelf == idSelf) controller = A + RegisterSignal(controller, COMSIG_PREQDELETED, PROC_REF(remove_object)) break for(var/obj/machinery/door/airlock/I as anything in SSmachines.get_machines_by_type_and_subtypes(/obj/machinery/door/airlock)) if(I.id_tag == idDoor) door = I + RegisterSignal(door, COMSIG_PREQDELETED, PROC_REF(remove_object)) break /obj/machinery/door_buttons/access_button/interact(mob/user) @@ -71,15 +64,15 @@ busy = TRUE update_appearance() if(door.density) - if(!controller.exteriorAirlock || !controller.interiorAirlock) - controller.onlyOpen(door) + if(!controller.exterior_airlock || !controller.interior_airlock) + controller.only_open(door) else - if(controller.exteriorAirlock.density && controller.interiorAirlock.density) - controller.onlyOpen(door) + if(controller.exterior_airlock.density && controller.interior_airlock.density) + controller.only_open(door) else - controller.cycleClose(door) + controller.cycle_close(door) else - controller.onlyClose(door) + controller.only_close(door) use_power(active_power_usage) addtimer(CALLBACK(src, PROC_REF(not_busy)), 2 SECONDS) @@ -94,218 +87,185 @@ icon_state = "[base_icon_state]_[busy ? "cycle" : "standby"]" return ..() -/obj/machinery/door_buttons/access_button/removeMe(obj/O) - if(O == door) - door = null +/obj/machinery/door_buttons/access_button/proc/remove_object(datum/source) + SIGNAL_HANDLER + if(source == door) + door = null + return + if(source == controller) + controller = null +/obj/machinery/door_buttons/access_button/Destroy() + door = null + controller = null + return ..() /obj/machinery/door_buttons/airlock_controller + name = "access console" + desc = "A small console that can cycle opening between two airlocks." icon = 'icons/obj/machines/wallmounts.dmi' icon_state = "access_control_standby" base_icon_state = "access_control" - name = "access console" - desc = "A small console that can cycle opening between two airlocks." - interaction_flags_machine = INTERACT_MACHINE_WIRES_IF_OPEN|INTERACT_MACHINE_ALLOW_SILICON|INTERACT_MACHINE_OPEN_SILICON|INTERACT_MACHINE_SET_MACHINE - var/obj/machinery/door/airlock/interiorAirlock - var/obj/machinery/door/airlock/exteriorAirlock + interaction_flags_machine = INTERACT_MACHINE_WIRES_IF_OPEN|INTERACT_MACHINE_ALLOW_SILICON|INTERACT_MACHINE_OPEN_SILICON + ///the id of the interior airlock var/idInterior + ///the id of the exterior airlock var/idExterior + ///are we currently in use? var/busy - var/lostPower - -/obj/machinery/door_buttons/airlock_controller/removeMe(obj/O) - if(O == interiorAirlock) - interiorAirlock = null - else if(O == exteriorAirlock) - exteriorAirlock = null - -/obj/machinery/door_buttons/airlock_controller/Destroy() - for(var/obj/machinery/door_buttons/access_button/A as anything in SSmachines.get_machines_by_type_and_subtypes(/obj/machinery/door_buttons/access_button)) - if(A.controller == src) - A.controller = null - return ..() + ///our interior airlock + var/obj/machinery/door/airlock/interior_airlock + ///our exterior airlock + var/obj/machinery/door/airlock/exterior_airlock -/obj/machinery/door_buttons/airlock_controller/Topic(href, href_list) - if(..()) - return - if(busy) - return - if(!allowed(usr)) - to_chat(usr, span_warning("Access denied.")) +///set our doors to null upon deletion +/obj/machinery/door_buttons/airlock_controller/proc/remove_door(datum/source) + SIGNAL_HANDLER + + if(source == interior_airlock) + interior_airlock = null return - switch(href_list["command"]) - if("close_exterior") - onlyClose(exteriorAirlock) - if("close_interior") - onlyClose(interiorAirlock) - if("cycle_exterior") - cycleClose(exteriorAirlock) - if("cycle_interior") - cycleClose(interiorAirlock) - if("open_exterior") - onlyOpen(exteriorAirlock) - if("open_interior") - onlyOpen(interiorAirlock) - -/obj/machinery/door_buttons/airlock_controller/proc/onlyOpen(obj/machinery/door/airlock/A) - if(A) - busy = CLOSING - update_appearance() - openDoor(A) -/obj/machinery/door_buttons/airlock_controller/proc/onlyClose(obj/machinery/door/airlock/A) - if(A) - busy = CLOSING - closeDoor(A) + if(source == exterior_airlock) + exterior_airlock = null + +///proc called when we want to open doors without any cycling involved +/obj/machinery/door_buttons/airlock_controller/proc/only_open(obj/machinery/door/airlock/target_door) + if(isnull(target_door)) + return + busy = TRUE + update_appearance() + open_door(target_door) -/obj/machinery/door_buttons/airlock_controller/proc/closeDoor(obj/machinery/door/airlock/A) - if(A.density) - goIdle() +///proc called when we want to close doors without any cycling involved +/obj/machinery/door_buttons/airlock_controller/proc/only_close(obj/machinery/door/airlock/target_door) + if(isnull(target_door)) + return + busy = TRUE + close_door(target_door) + +///proc that handles closing doors +/obj/machinery/door_buttons/airlock_controller/proc/close_door(obj/machinery/door/airlock/target_door, turn_idle_on_terminate = TRUE) + busy = TRUE + if(isnull(target_door) || target_door.density) + go_idle() return FALSE update_appearance() - A.safe = FALSE //Door crushies, manual door after all. Set every time in case someone changed it, safe doors can end up waiting forever. - A.unbolt() - if(A.close()) - if(machine_stat & NOPOWER || lostPower || !A || QDELETED(A)) - goIdle(TRUE) - return FALSE - A.bolt() - goIdle(TRUE) - return TRUE - goIdle(TRUE) - return FALSE + target_door.safe = FALSE //Door crushies, manual door after all. Set every time in case someone changed it, safe doors can end up waiting forever. + target_door.unbolt() + if(!target_door.close() || (machine_stat & NOPOWER)) + go_idle() + return FALSE + target_door?.bolt() -/obj/machinery/door_buttons/airlock_controller/proc/cycleClose(obj/machinery/door/airlock/A) - if(!A || !exteriorAirlock || !interiorAirlock) + if(turn_idle_on_terminate) + go_idle() + + return TRUE + +///proc called when we want to close doors with cycling +/obj/machinery/door_buttons/airlock_controller/proc/cycle_close(obj/machinery/door/airlock/target_door) + if(isnull(exterior_airlock) || isnull(interior_airlock)) return - if(exteriorAirlock.density == interiorAirlock.density || !A.density) + if(exterior_airlock.density == interior_airlock.density || !target_door.density) return - busy = CYCLE + busy = TRUE update_appearance() - if(A == interiorAirlock) - if(closeDoor(exteriorAirlock)) - busy = CYCLE_INTERIOR - else - if(closeDoor(interiorAirlock)) - busy = CYCLE_EXTERIOR - -/obj/machinery/door_buttons/airlock_controller/proc/cycleOpen(obj/machinery/door/airlock/A) - if(!A) - goIdle(TRUE) - if(A == exteriorAirlock) - if(interiorAirlock) - if(!interiorAirlock.density || !interiorAirlock.locked) - return - else - if(exteriorAirlock) - if(!exteriorAirlock.density || !exteriorAirlock.locked) - return - if(busy != OPENING) - busy = OPENING - openDoor(A) - -/obj/machinery/door_buttons/airlock_controller/proc/openDoor(obj/machinery/door/airlock/A) - if(exteriorAirlock && interiorAirlock && (!exteriorAirlock.density || !interiorAirlock.density)) - goIdle(TRUE) - return - A.unbolt() - INVOKE_ASYNC(src, PROC_REF(do_openDoor), A) + var/obj/machinery/door/airlock/opposite_airlock = (target_door == exterior_airlock ? interior_airlock : exterior_airlock) -/obj/machinery/door_buttons/airlock_controller/proc/do_openDoor(obj/machinery/door/airlock/A) - if(A?.open()) - if(machine_stat | (NOPOWER) && !lostPower && A && !QDELETED(A)) - A.bolt() - goIdle(TRUE) + if(!close_door(opposite_airlock, turn_idle_on_terminate = FALSE)) + return go_idle() -/obj/machinery/door_buttons/airlock_controller/proc/goIdle(update) - lostPower = FALSE - busy = FALSE - if(update) - update_appearance() - updateUsrDialog() + addtimer(CALLBACK(src, PROC_REF(cycle_open), target_door), 2 SECONDS) -/obj/machinery/door_buttons/airlock_controller/process() - if(machine_stat & NOPOWER) - return - if(busy == CYCLE_EXTERIOR) - cycleOpen(exteriorAirlock) - else if(busy == CYCLE_INTERIOR) - cycleOpen(interiorAirlock) +///proc called when we want to open doors with cycling +/obj/machinery/door_buttons/airlock_controller/proc/cycle_open(obj/machinery/door/airlock/target_door) + if(isnull(target_door)) + return go_idle() + var/obj/machinery/door/airlock/opposite_airlock = (target_door == exterior_airlock ? interior_airlock : exterior_airlock) + if(isnull(opposite_airlock) || !opposite_airlock.density || !opposite_airlock.locked) + return go_idle() + busy = TRUE + open_door(target_door) -/obj/machinery/door_buttons/airlock_controller/power_change() - . = ..() - if(machine_stat & NOPOWER) - lostPower = TRUE - else - if(!busy) - lostPower = FALSE +///proc that handles opening and unbolting the door +/obj/machinery/door_buttons/airlock_controller/proc/open_door(obj/machinery/door/airlock/target_door) + if(!target_door.density) + return go_idle() + + target_door.unbolt() + if(!target_door.open() || (machine_stat & NOPOWER)) + return go_idle() + + target_door?.bolt() + return go_idle() -/obj/machinery/door_buttons/airlock_controller/findObjsByTag() + +///unsets our busy state and update our appearance +/obj/machinery/door_buttons/airlock_controller/proc/go_idle() + busy = FALSE + update_appearance() + +/obj/machinery/door_buttons/airlock_controller/find_objects_by_tag() for(var/obj/machinery/door/door as anything in SSmachines.get_machines_by_type_and_subtypes(/obj/machinery/door)) + if(isnull(idInterior) || isnull(idExterior)) + break if(door.id_tag == idInterior) - interiorAirlock = door - else if(door.id_tag == idExterior) - exteriorAirlock = door + interior_airlock = door + RegisterSignal(interior_airlock, COMSIG_PREQDELETED, PROC_REF(remove_door)) + if(door.id_tag == idExterior) + exterior_airlock = door + RegisterSignal(exterior_airlock, COMSIG_PREQDELETED, PROC_REF(remove_door)) /obj/machinery/door_buttons/airlock_controller/update_icon_state() if(machine_stat & NOPOWER) - icon_state = "access_control_off" + icon_state = "[base_icon_state]_off" return ..() - icon_state = "[base_icon_state]_[(busy || lostPower) ? "process" : "standby"]" + icon_state = "[base_icon_state]_[(busy) ? "process" : "standby"]" return ..() -/obj/machinery/door_buttons/airlock_controller/ui_interact(mob/user) - var/datum/browser/popup = new(user, "computer", name) - popup.set_content(returnText()) - popup.open() - -/obj/machinery/door_buttons/airlock_controller/proc/returnText() - var/output - if(!exteriorAirlock && !interiorAirlock) - return "ERROR ERROR ERROR ERROR" - if(lostPower) - output = "Initializing..." - else - if(!exteriorAirlock || !interiorAirlock) - if(!exteriorAirlock) - if(interiorAirlock.density) - output = "Open Interior Airlock
" - else - output = "Close Interior Airlock
" - else - if(exteriorAirlock.density) - output = "Open Exterior Airlock
" - else - output = "Close Exterior Airlock
" - else - if(exteriorAirlock.density) - if(interiorAirlock.density) - output = {"Open Exterior Airlock
- Open Interior Airlock
"} - else - output = {"Cycle to Exterior Airlock
- Close Interior Airlock
"} - else - if(interiorAirlock.density) - output = {"Close Exterior Airlock
- Cycle to Interior Airlock
"} - else - output = {"Close Exterior Airlock
- Close Interior Airlock
"} +/obj/machinery/door_buttons/airlock_controller/ui_interact(mob/user, datum/tgui/ui) + . = ..() + ui = SStgui.try_update_ui(user, src, ui) + if(!ui) + ui = new(user, src, "AirlockButtonController", name) + ui.open() + +/obj/machinery/door_buttons/airlock_controller/ui_data(mob/user) + var/list/data = list() + data["interior_door"] = interior_airlock ? REF(interior_airlock) : null + data["exterior_door"] = exterior_airlock ? REF(exterior_airlock) : null + data["busy"] = busy + data["interior_door_closed"] = interior_airlock?.density + data["exterior_door_closed"] = exterior_airlock?.density + return data + +/obj/machinery/door_buttons/airlock_controller/ui_act(action, list/params, datum/tgui/ui, datum/ui_state/state) + . = ..() + if(. || busy) + return TRUE + if(isnull(params["requested_door"])) + return TRUE - output = {"Access Control Console
- [output]
"} - if(exteriorAirlock) - output += "Exterior Door: [exteriorAirlock.density ? "closed" : "open"]
" - if(interiorAirlock) - output += "Interior Door: [interiorAirlock.density ? "closed" : "open"]
" + var/atom/requested_door + var/atom/opposite_door - return output + if(REF(interior_airlock) == params["requested_door"]) + requested_door = interior_airlock + opposite_door = exterior_airlock + else + requested_door = exterior_airlock + opposite_door = interior_airlock -#undef CLOSING -#undef OPENING -#undef CYCLE -#undef CYCLE_EXTERIOR -#undef CYCLE_INTERIOR + switch(action) + if("open") + if(opposite_door && !opposite_door.density) + cycle_close(requested_door) + else + only_open(requested_door) + if("close") + only_close(requested_door) + + return TRUE diff --git a/code/game/machinery/firealarm.dm b/code/game/machinery/firealarm.dm index cef15f43caa..85225abef5f 100644 --- a/code/game/machinery/firealarm.dm +++ b/code/game/machinery/firealarm.dm @@ -42,11 +42,12 @@ /obj/machinery/firealarm/Initialize(mapload, dir, building) . = ..() + id_tag = assign_random_name() if(building) buildstage = FIRE_ALARM_BUILD_NO_CIRCUIT set_panel_open(TRUE) if(name == initial(name)) - name = "[get_area_name(src)] [initial(name)]" + update_name() my_area = get_area(src) LAZYADD(my_area.firealarms, src) @@ -114,7 +115,7 @@ /obj/machinery/firealarm/update_name(updates) . = ..() - name = "[get_area_name(my_area)] [initial(name)]" + name = "[get_area_name(my_area)] [initial(name)] [id_tag]" /obj/machinery/firealarm/on_exit_area(datum/source, area/area_to_unregister) //we cannot unregister from an area we never registered to in the first place @@ -269,6 +270,8 @@ if(user) balloon_alert(user, "triggered alarm!") user.log_message("triggered a fire alarm.", LOG_GAME) + my_area.fault_status = AREA_FAULT_MANUAL + my_area.fault_location = name soundloop.start() //Manually pulled fire alarms will make the sound, rather than the doors. SEND_SIGNAL(src, COMSIG_FIREALARM_ON_TRIGGER) update_use_power(ACTIVE_POWER_USE) @@ -450,22 +453,21 @@ return return ..() -/obj/machinery/firealarm/deconstruct(disassembled = TRUE) - if(!(obj_flags & NO_DECONSTRUCTION)) - new /obj/item/stack/sheet/iron(loc, 1) - if(buildstage > FIRE_ALARM_BUILD_NO_CIRCUIT) - var/obj/item/item = new /obj/item/electronics/firealarm(loc) - if(!disassembled) - item.update_integrity(item.max_integrity * 0.5) - if(buildstage > FIRE_ALARM_BUILD_NO_WIRES) - new /obj/item/stack/cable_coil(loc, 3) - qdel(src) +/obj/machinery/firealarm/on_deconstruction(disassembled) + new /obj/item/stack/sheet/iron(loc, 1) + if(buildstage > FIRE_ALARM_BUILD_NO_CIRCUIT) + var/obj/item/item = new /obj/item/electronics/firealarm(loc) + if(!disassembled) + item.update_integrity(item.max_integrity * 0.5) + if(buildstage > FIRE_ALARM_BUILD_NO_WIRES) + new /obj/item/stack/cable_coil(loc, 3) // Allows users to examine the state of the thermal sensor /obj/machinery/firealarm/examine(mob/user) . = ..() if((my_area?.fire || LAZYLEN(my_area?.active_firelocks))) . += "The local area hazard light is flashing." + . += "The fault location display is [my_area.fault_location] ([my_area.fault_status == AREA_FAULT_AUTOMATIC ? "Automatic Detection" : "Manual Trigger"])." if(is_station_level(z)) . += "The station security alert level is [SSsecurity_level.get_current_level_as_text()]." . += "Left-Click to activate all firelocks in this area." diff --git a/code/game/machinery/flasher.dm b/code/game/machinery/flasher.dm index efe28051a21..678b2c65509 100644 --- a/code/game/machinery/flasher.dm +++ b/code/game/machinery/flasher.dm @@ -144,18 +144,16 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/machinery/flasher, 26) bulb.burn_out() power_change() -/obj/machinery/flasher/deconstruct(disassembled = TRUE) - if(!(obj_flags & NO_DECONSTRUCTION)) - if(bulb) - bulb.forceMove(loc) - if(disassembled) - var/obj/item/wallframe/flasher/flasher_obj = new(get_turf(src)) - transfer_fingerprints_to(flasher_obj) - flasher_obj.id = id - playsound(loc, 'sound/items/deconstruct.ogg', 50, TRUE) - else - new /obj/item/stack/sheet/iron (loc, 2) - qdel(src) +/obj/machinery/flasher/on_deconstruction(disassembled) + if(bulb) + bulb.forceMove(loc) + if(disassembled) + var/obj/item/wallframe/flasher/flasher_obj = new(get_turf(src)) + transfer_fingerprints_to(flasher_obj) + flasher_obj.id = id + playsound(loc, 'sound/items/deconstruct.ogg', 50, TRUE) + else + new /obj/item/stack/sheet/iron (loc, 2) /obj/machinery/flasher/portable //Portable version of the flasher. Only flashes when anchored name = "portable flasher" diff --git a/code/game/machinery/gulag_item_reclaimer.dm b/code/game/machinery/gulag_item_reclaimer.dm index 9c649b2c8ee..e1c2c8c73d6 100644 --- a/code/game/machinery/gulag_item_reclaimer.dm +++ b/code/game/machinery/gulag_item_reclaimer.dm @@ -30,6 +30,7 @@ I.forceMove(get_turf(src)) if(linked_teleporter) linked_teleporter.linked_reclaimer = null + linked_teleporter = null return ..() /obj/machinery/gulag_item_reclaimer/emag_act(mob/user, obj/item/card/emag/emag_card) diff --git a/code/game/machinery/gulag_teleporter.dm b/code/game/machinery/gulag_teleporter.dm index ce46a5d2fce..2fffb98d56c 100644 --- a/code/game/machinery/gulag_teleporter.dm +++ b/code/game/machinery/gulag_teleporter.dm @@ -43,6 +43,7 @@ The console is located at computer/gulag_teleporter.dm /obj/machinery/gulag_teleporter/Destroy() if(linked_reclaimer) linked_reclaimer.linked_teleporter = null + linked_reclaimer = null return ..() /obj/machinery/gulag_teleporter/interact(mob/user) diff --git a/code/game/machinery/hologram.dm b/code/game/machinery/hologram.dm index 11726392619..cb9dd18f845 100644 --- a/code/game/machinery/hologram.dm +++ b/code/game/machinery/hologram.dm @@ -123,7 +123,7 @@ Possible to do for anyone motivated enough: /obj/machinery/holopad/tutorial resistance_flags = INDESTRUCTIBLE | LAVA_PROOF | FIRE_PROOF | UNACIDABLE | ACID_PROOF - obj_flags = /obj::obj_flags | NO_DECONSTRUCTION + obj_flags = parent_type::obj_flags | NO_DECONSTRUCTION on_network = FALSE ///Proximity monitor associated with this atom, needed for proximity checks. var/datum/proximity_monitor/proximity_monitor diff --git a/code/game/machinery/igniter.dm b/code/game/machinery/igniter.dm index a28f855862a..75d0566e42c 100644 --- a/code/game/machinery/igniter.dm +++ b/code/game/machinery/igniter.dm @@ -55,11 +55,9 @@ deconstruct(TRUE) return ITEM_INTERACT_SUCCESS -/obj/machinery/igniter/deconstruct(disassembled) - if(!(obj_flags & NO_DECONSTRUCTION)) - new /obj/item/stack/sheet/iron(loc, 5) - new /obj/item/assembly/igniter(loc) - return ..() +/obj/machinery/igniter/on_deconstruction(disassembled) + new /obj/item/stack/sheet/iron(loc, 5) + new /obj/item/assembly/igniter(loc) /obj/machinery/igniter/multitool_act(mob/living/user, obj/item/tool) var/change_id = tgui_input_number(user, "Set the igniter controller's ID", "Igniter ID", id, 100) @@ -200,10 +198,8 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/machinery/sparker, 26) deconstruct(TRUE) return ITEM_INTERACT_SUCCESS -/obj/machinery/sparker/deconstruct(disassembled) - if(!(obj_flags & NO_DECONSTRUCTION)) - new /obj/item/wallframe/sparker(loc) - return ..() +/obj/machinery/sparker/on_deconstruction(disassembled) + new /obj/item/wallframe/sparker(loc) /obj/machinery/sparker/multitool_act(mob/living/user, obj/item/tool) var/change_id = tgui_input_number(user, "Set the sparker controller's ID", "Sparker ID", id, 100) diff --git a/code/game/machinery/incident_display.dm b/code/game/machinery/incident_display.dm index 63418e4457e..fcdfecf6a31 100644 --- a/code/game/machinery/incident_display.dm +++ b/code/game/machinery/incident_display.dm @@ -164,16 +164,11 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/machinery/incident_display/tram, 32) delam_record = rand(1,99) update_appearance() -/obj/machinery/incident_display/deconstruct() - if(obj_flags & NO_DECONSTRUCTION) - return - +/obj/machinery/incident_display/on_deconstruction(disassembled) new /obj/item/stack/sheet/mineral/titanium(drop_location(), 2) new /obj/item/shard(drop_location()) new /obj/item/shard(drop_location()) - qdel(src) - /obj/machinery/incident_display/proc/update_delam_count(new_count, record) delam_record = record last_delam = min(new_count, 199) diff --git a/code/game/machinery/iv_drip.dm b/code/game/machinery/iv_drip.dm index 25e963ad6d5..6244dcdd2db 100644 --- a/code/game/machinery/iv_drip.dm +++ b/code/game/machinery/iv_drip.dm @@ -217,10 +217,8 @@ return ..() set_transfer_rate(transfer_rate > MIN_IV_TRANSFER_RATE ? MIN_IV_TRANSFER_RATE : MAX_IV_TRANSFER_RATE) -/obj/machinery/iv_drip/deconstruct(disassembled = TRUE) - if(!(obj_flags & NO_DECONSTRUCTION)) - new /obj/item/stack/sheet/iron(loc) - qdel(src) +/obj/machinery/iv_drip/on_deconstruction(disassembled = TRUE) + new /obj/item/stack/sheet/iron(loc) /obj/machinery/iv_drip/process(seconds_per_tick) if(!attached) diff --git a/code/game/machinery/launch_pad.dm b/code/game/machinery/launch_pad.dm index 910f3802bfd..a950750f4d8 100644 --- a/code/game/machinery/launch_pad.dm +++ b/code/game/machinery/launch_pad.dm @@ -152,7 +152,7 @@ return "ERROR: Launchpad busy." var/area/surrounding = get_area(src) - if(is_centcom_level(z) || istype(surrounding, /area/shuttle)) + if(is_centcom_level(z) || istype(surrounding, /area/shuttle/supply) ||istype(surrounding, /area/shuttle/transport)) return "ERROR: Launchpad not operative. Heavy area shielding makes teleporting impossible." return null diff --git a/code/game/machinery/lightswitch.dm b/code/game/machinery/lightswitch.dm index 0c621c6ed19..243cb8f4116 100644 --- a/code/game/machinery/lightswitch.dm +++ b/code/game/machinery/lightswitch.dm @@ -107,10 +107,8 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/machinery/light_switch, 26) if(!(machine_stat & (BROKEN|NOPOWER))) power_change() -/obj/machinery/light_switch/deconstruct(disassembled = TRUE) - if(!(obj_flags & NO_DECONSTRUCTION)) - new /obj/item/wallframe/light_switch(loc) - qdel(src) +/obj/machinery/light_switch/on_deconstruction(disassembled) + new /obj/item/wallframe/light_switch(loc) /obj/item/wallframe/light_switch name = "light switch" diff --git a/code/game/machinery/limbgrower.dm b/code/game/machinery/limbgrower.dm index 38d88b013d1..197feb4118d 100644 --- a/code/game/machinery/limbgrower.dm +++ b/code/game/machinery/limbgrower.dm @@ -116,7 +116,7 @@ return data -/obj/machinery/limbgrower/on_deconstruction() +/obj/machinery/limbgrower/on_deconstruction(disassembled) for(var/obj/item/reagent_containers/cup/our_beaker in component_parts) reagents.trans_to(our_beaker, our_beaker.reagents.maximum_volume) return ..() @@ -283,7 +283,7 @@ /obj/machinery/limbgrower/fullupgrade //Inherently cheaper organ production. This is to NEVER be inherently emagged, no valids. desc = "It grows new limbs using Synthflesh. This alien model seems more efficient." - obj_flags = /obj::obj_flags | NO_DECONSTRUCTION + obj_flags = parent_type::obj_flags | NO_DECONSTRUCTION circuit = /obj/item/circuitboard/machine/limbgrower/fullupgrade /obj/machinery/limbgrower/fullupgrade/Initialize(mapload) diff --git a/code/game/machinery/medical_kiosk.dm b/code/game/machinery/medical_kiosk.dm index 3b12e38a527..13fb79a480e 100644 --- a/code/game/machinery/medical_kiosk.dm +++ b/code/game/machinery/medical_kiosk.dm @@ -239,6 +239,7 @@ var/blood_percent = round((patient.blood_volume / BLOOD_VOLUME_NORMAL)*100) var/blood_type = patient.dna.blood_type var/blood_warning = " " + var/blood_alcohol = patient.get_blood_alcohol_content() for(var/thing in patient.diseases) //Disease Information var/datum/disease/D = thing @@ -358,6 +359,7 @@ data["bleed_status"] = bleed_status data["blood_levels"] = blood_percent - (chaos_modifier * (rand(1,35))) data["blood_status"] = blood_status + data["blood_alcohol"] = blood_alcohol data["chemical_list"] = chemical_list data["overdose_list"] = overdose_list data["addict_list"] = addict_list diff --git a/code/game/machinery/newscaster/newscaster_machine.dm b/code/game/machinery/newscaster/newscaster_machine.dm index 99ea0d31620..7f3d8ea806f 100644 --- a/code/game/machinery/newscaster/newscaster_machine.dm +++ b/code/game/machinery/newscaster/newscaster_machine.dm @@ -176,14 +176,15 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/machinery/newscaster, 30) data["crime_description"] = crime_description var/list/wanted_info = list() if(GLOB.news_network.wanted_issue) - if(GLOB.news_network.wanted_issue.img) + var/has_wanted_issue = !isnull(GLOB.news_network.wanted_issue.img) + if(has_wanted_issue) user << browse_rsc(GLOB.news_network.wanted_issue.img, "wanted_photo.png") wanted_info = list(list( "active" = GLOB.news_network.wanted_issue.active, "criminal" = GLOB.news_network.wanted_issue.criminal, "crime" = GLOB.news_network.wanted_issue.body, "author" = GLOB.news_network.wanted_issue.scanned_user, - "image" = "wanted_photo.png" + "image" = (has_wanted_issue ? "wanted_photo.png" : null) )) //Code breaking down the channels that have been made on-station thus far. ha @@ -431,7 +432,7 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/machinery/newscaster, 30) return TRUE if("printNewspaper") - print_paper() + print_paper(usr) return TRUE if("createBounty") @@ -533,12 +534,10 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/machinery/newscaster, 30) playsound(src.loc, 'sound/items/welder.ogg', 100, TRUE) -/obj/machinery/newscaster/deconstruct(disassembled = TRUE) - if(!(obj_flags & NO_DECONSTRUCTION)) - new /obj/item/stack/sheet/iron(loc, 2) - new /obj/item/shard(loc) - new /obj/item/shard(loc) - qdel(src) +/obj/machinery/newscaster/on_deconstruction(disassembled) + new /obj/item/stack/sheet/iron(loc, 2) + new /obj/item/shard(loc) + new /obj/item/shard(loc) /obj/machinery/newscaster/atom_break(damage_flag) . = ..() @@ -600,22 +599,14 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/machinery/newscaster, 30) * This takes all current feed stories and messages, and prints them onto a newspaper, after checking that the newscaster has been loaded with paper. * The newscaster then prints the paper to the floor. */ -/obj/machinery/newscaster/proc/print_paper() +/obj/machinery/newscaster/proc/print_paper(mob/user) if(paper_remaining <= 0) balloon_alert_to_viewers("out of paper!") return TRUE SSblackbox.record_feedback("amount", "newspapers_printed", 1) - var/obj/item/newspaper/new_newspaper = new /obj/item/newspaper - for(var/datum/feed_channel/iterated_feed_channel in GLOB.news_network.network_channels) - new_newspaper.news_content += iterated_feed_channel - if(GLOB.news_network.wanted_issue.active) - new_newspaper.wantedAuthor = GLOB.news_network.wanted_issue.scanned_user - new_newspaper.wantedCriminal = GLOB.news_network.wanted_issue.criminal - new_newspaper.wantedBody = GLOB.news_network.wanted_issue.body - if(GLOB.news_network.wanted_issue.img) - new_newspaper.wantedPhoto = GLOB.news_network.wanted_issue.img - new_newspaper.forceMove(drop_location()) - new_newspaper.creation_time = GLOB.news_network.last_action + var/obj/item/newspaper/new_newspaper = new(loc) + playsound(loc, SFX_PAGE_TURN, 50, TRUE) + try_put_in_hand(new_newspaper, user) paper_remaining-- /** @@ -677,6 +668,7 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/machinery/newscaster, 30) new_feed_comment.author = newscaster_username new_feed_comment.body = comment_text new_feed_comment.time_stamp = station_time_timestamp() + GLOB.news_network.last_action ++ current_message.comments += new_feed_comment usr.log_message("(as [newscaster_username]) commented on message [current_message.return_body(-1)] -- [current_message.body]", LOG_COMMENT) creating_comment = FALSE diff --git a/code/game/machinery/newscaster/newspaper.dm b/code/game/machinery/newscaster/newspaper.dm index d605d6257c3..d791fac6545 100644 --- a/code/game/machinery/newscaster/newspaper.dm +++ b/code/game/machinery/newscaster/newspaper.dm @@ -1,3 +1,8 @@ +/** + * Newspapers + * A static version of the newscaster, that won't update as new stories are added. + * Can be scribbed upon to add extra text for future readers. + */ /obj/item/newspaper name = "newspaper" desc = "An issue of The Griffon, the newspaper circulating aboard Nanotrasen Space Stations." @@ -10,167 +15,202 @@ attack_verb_continuous = list("baps") attack_verb_simple = list("bap") resistance_flags = FLAMMABLE - var/screen = 0 - var/pages = 0 - var/curr_page = 0 + + ///List of news feeed channels the newspaper can see. var/list/datum/feed_channel/news_content = list() - var/scribble="" - var/scribble_page = null - var/wantedAuthor - var/wantedCriminal - var/wantedBody - var/wantedPhoto + ///The time the newspaper was made in terms of newscaster's last action, used to tell the newspaper whether a story should be in it. var/creation_time + ///The page in the newspaper currently being read. 0 is the title screen while the last is the security screen. + var/current_page = 0 + ///The currently scribbled text written in scribble_page + var/scribble_text + ///The page with something scribbled on it, can only have one at a time. + var/scribble_page + + ///Stored information of the wanted criminal's name, if one existed at the time of creation. + var/saved_wanted_criminal + ///Stored information of the wanted criminal's description, if one existed at the time of creation. + var/saved_wanted_body + ///Stored icon of the wanted criminal, if one existed at the time of creation. + var/icon/saved_wanted_icon + +/obj/item/newspaper/Initialize(mapload) + . = ..() + register_context() + AddComponent(\ + /datum/component/two_handed,\ + wield_callback = CALLBACK(src, PROC_REF(on_wielded)),\ + unwield_callback = CALLBACK(src, PROC_REF(on_unwielded)),\ + ) + creation_time = GLOB.news_network.last_action + for(var/datum/feed_channel/iterated_feed_channel in GLOB.news_network.network_channels) + news_content += iterated_feed_channel + + if(!GLOB.news_network.wanted_issue.active) + return + saved_wanted_criminal = GLOB.news_network.wanted_issue.criminal + saved_wanted_body = GLOB.news_network.wanted_issue.body + if(GLOB.news_network.wanted_issue.img) + saved_wanted_icon = GLOB.news_network.wanted_issue.img + +/obj/item/newspaper/add_context(atom/source, list/context, obj/item/held_item, mob/living/user) + if(held_item) + if(istype(held_item, /obj/item/pen)) + context[SCREENTIP_CONTEXT_LMB] = "Scribble" + return CONTEXTUAL_SCREENTIP_SET + if(held_item.get_temperature()) + context[SCREENTIP_CONTEXT_LMB] = "Burn" + return CONTEXTUAL_SCREENTIP_SET /obj/item/newspaper/suicide_act(mob/living/user) - user.visible_message(span_suicide("[user] is focusing intently on [src]! It looks like [user.p_theyre()] trying to commit sudoku... until [user.p_their()] eyes light up with realization!")) - user.say(";JOURNALISM IS MY CALLING! EVERYBODY APPRECIATES UNBIASED REPORTI-GLORF", forced="newspaper suicide") - var/mob/living/carbon/human/H = user - var/obj/W = new /obj/item/reagent_containers/cup/glass/bottle/whiskey(H.loc) - playsound(H.loc, 'sound/items/drink.ogg', rand(10,50), TRUE) - W.reagents.trans_to(H, W.reagents.total_volume, transferred_by = user) - user.visible_message(span_suicide("[user] downs the contents of [W.name] in one gulp! Shoulda stuck to sudoku!")) + user.visible_message(span_suicide(\ + "[user] is focusing intently on [src]! It looks like [user.p_theyre()] trying to commit sudoku... \ + until [user.p_their()] eyes light up with realization!"\ + )) + user.say(";JOURNALISM IS MY CALLING! EVERYBODY APPRECIATES UNBIASED REPORTI-GLORF", forced = "newspaper suicide") + var/obj/item/reagent_containers/cup/glass/bottle/whiskey/last_drink = new(user.loc) + playsound(user, 'sound/items/drink.ogg', vol = rand(10, 50), vary = TRUE) + last_drink.reagents.trans_to(user, last_drink.reagents.total_volume, transferred_by = user) + user.visible_message(span_suicide("[user] downs the contents of [last_drink.name] in one gulp! Shoulda stuck to sudoku!")) return TOXLOSS -/obj/item/newspaper/attack_self(mob/user) - if(!istype(user) || !user.can_read(src)) +/obj/item/newspaper/attackby(obj/item/attacking_item, mob/user, params) + if(burn_paper_product_attackby_check(attacking_item, user)) + SStgui.close_uis(src) return - var/dat - pages = 0 - switch(screen) - if(0) //Cover - dat+="
The Griffon
" - dat+="
Nanotrasen-standard newspaper, for use on Nanotrasen? Space Facilities

" - if(!length(news_content)) - if(wantedAuthor) - dat+="Contents:
    **Important Security Announcement** \[page [pages+2]\]
" - else - dat+="Other than the title, the rest of the newspaper is unprinted..." - else - dat+="Contents:
    " - for(var/datum/feed_channel/NP in news_content) - pages++ - if(wantedAuthor) - dat+="**Important Security Announcement** \[page [pages+2]\]
    " - var/temp_page=0 - for(var/datum/feed_channel/NP in news_content) - temp_page++ - dat+="[NP.channel_name] \[page [temp_page+1]\]
    " - dat+="
" - if(scribble_page == curr_page) - dat+="
There is a small scribble near the end of this page... It reads: \"[scribble]\"" - dat+= "
Next Page
Done reading
" - if(1) // X channel pages inbetween. - for(var/datum/feed_channel/NP in news_content) - pages++ - var/datum/feed_channel/C = news_content[curr_page] - dat += "[C.channel_name] \[created by: [C.return_author(notContent(C.author_censor_time))]\]

" - if(notContent(C.D_class_censor_time)) - dat+="This channel was deemed dangerous to the general welfare of the station and therefore marked with a D-Notice. Its contents were not transferred to the newspaper at the time of printing." - else - if(!length(C.messages)) - dat+="No Feed stories stem from this channel..." - else - var/i = 0 - for(var/datum/feed_message/MESSAGE in C.messages) - if(MESSAGE.creation_time > creation_time) - if(i == 0) - dat+="No Feed stories stem from this channel..." - break - if(i == 0) - dat+="
    " - i++ - dat+="-[MESSAGE.return_body(notContent(MESSAGE.body_censor_time))]
    " - if(MESSAGE.img) - user << browse_rsc(MESSAGE.img, "tmp_photo[i].png") - dat+="
    " - dat+="\[Story by [MESSAGE.return_author(notContent(MESSAGE.author_censor_time))]\]

    " - dat+="
" - if(scribble_page == curr_page) - dat+="
There is a small scribble near the end of this page... It reads: \"[scribble]\"" - dat+= "

Previous Page
Next Page
" - if(2) //Last page - for(var/datum/feed_channel/NP in news_content) - pages++ - if(wantedAuthor != null) - dat+="
Wanted Issue:


" - dat+="Criminal name: [wantedCriminal]
" - dat+="Description: [wantedBody]
" - dat+="Photo:: " - if(wantedPhoto) - user << browse_rsc(wantedPhoto, "tmp_photow.png") - dat+="
" - else - dat+="None" - else - dat+="Apart from some uninteresting classified ads, there's nothing on this page..." - if(scribble_page == curr_page) - dat+="
There is a small scribble near the end of this page... It reads: \"[scribble]\"" - dat+= "
Previous Page
" - dat+="

[curr_page+1]
" - user << browse(dat, "window=newspaper_main;size=300x400") - onclose(user, "newspaper_main") - -/obj/item/newspaper/proc/notContent(list/L) - if(!L.len) + + if(!user.can_write(attacking_item)) + return ..() + if(scribble_page == current_page) + user.balloon_alert(user, "already scribbled!") + return + var/new_scribble_text = tgui_input_text(user, "What do you want to scribble?", "Write something") + if(isnull(new_scribble_text)) + return + add_fingerprint(user) + user.balloon_alert(user, "scribbling...") + if(!do_after(user, 2 SECONDS, src)) + return + user.balloon_alert(user, "scribbled!") + scribble_page = current_page + scribble_text = new_scribble_text + +///Checks the creation time of the newspaper and compares it to list to see if the list is meant to be censored at the time of printing. +/obj/item/newspaper/proc/censored_check(list/times_censored) + if(!times_censored.len) return FALSE - for(var/i=L.len;i>0;i--) - var/num = abs(L[i]) + for(var/i = times_censored.len; i > 0; i--) + var/num = abs(times_censored[i]) if(creation_time <= num) continue else - if(L[i] > 0) + if(times_censored[i] > 0) return TRUE else return FALSE return FALSE -/obj/item/newspaper/Topic(href, href_list) - var/mob/living/U = usr - ..() - if((src in U.contents) || (isturf(loc) && in_range(src, U))) - U.set_machine(src) - if(href_list["next_page"]) - if(curr_page == pages+1) - return //Don't need that at all, but anyway. - if(curr_page == pages) //We're at the middle, get to the end - screen = 2 - else - if(curr_page == 0) //We're at the start, get to the middle - screen=1 - curr_page++ - playsound(loc, SFX_PAGE_TURN, 50, TRUE) - else if(href_list["prev_page"]) - if(curr_page == 0) - return - if(curr_page == 1) - screen = 0 - else - if(curr_page == pages+1) //we're at the end, let's go back to the middle. - screen = 1 - curr_page-- - playsound(loc, SFX_PAGE_TURN, 50, TRUE) - if(ismob(loc)) - attack_self(loc) - -/obj/item/newspaper/attackby(obj/item/W, mob/living/user, params) - if(burn_paper_product_attackby_check(W, user)) +/// Called when you start reading the paper with both hands +/obj/item/newspaper/proc/on_wielded(obj/item/source, mob/user) + RegisterSignal(user, COMSIG_ATOM_UPDATE_OVERLAYS, PROC_REF(holder_updated_overlays)) + RegisterSignal(user, COMSIG_HUMAN_GET_VISIBLE_NAME, PROC_REF(holder_checked_name)) + user.update_appearance(UPDATE_OVERLAYS) + user.name = user.get_visible_name() + +/// Called when you stop doing that +/obj/item/newspaper/proc/on_unwielded(obj/item/source, mob/user) + UnregisterSignal(user, list(COMSIG_ATOM_UPDATE_OVERLAYS, COMSIG_HUMAN_GET_VISIBLE_NAME)) + user.update_appearance(UPDATE_OVERLAYS) + user.name = user.get_visible_name() + +/// Called when we're being read and overlays are updated, we should show a big newspaper over the reader +/obj/item/newspaper/proc/holder_updated_overlays(atom/reader, list/overlays) + SIGNAL_HANDLER + overlays += mutable_appearance(icon, "newspaper_held_over", ABOVE_MOB_LAYER) + overlays += mutable_appearance(icon, "newspaper_held_under", BELOW_MOB_LAYER) + +/// Called when someone tries to figure out what our identity is, but they can't see it because of the newspaper +/obj/item/newspaper/proc/holder_checked_name(mob/living/carbon/human/source, list/identity) + SIGNAL_HANDLER + identity[VISIBLE_NAME_FACE] = "" + identity[VISIBLE_NAME_ID] = "" + +/obj/item/newspaper/ui_interact(mob/user, datum/tgui/ui) + ui = SStgui.try_update_ui(user, src, ui) + if(ui) + return + ui = new(user, src, "Newspaper", name) + ui.open() + +/obj/item/newspaper/ui_act(action, list/params, datum/tgui/ui, datum/ui_state/state) + . = ..() + if(.) return - if(istype(W, /obj/item/pen)) - if(!user.can_write(W)) - return - if(scribble_page == curr_page) - to_chat(user, span_warning("There's already a scribble in this page... You wouldn't want to make things too cluttered, would you?")) + switch(action) + if("next_page") + //We're at the very end, nowhere else to go. + if(current_page == news_content.len + 1) + return TRUE + current_page++ + if("prev_page") + //We haven't started yet, nowhere else to go. + if(!current_page) + return TRUE + current_page-- else - var/s = tgui_input_text(user, "Write something", "Newspaper") - if (!s) - return - if(!user.can_perform_action(src)) - return - scribble_page = curr_page - scribble = s - attack_self(user) - add_fingerprint(user) - else - return ..() + return TRUE + SStgui.update_uis(src) + playsound(src, SFX_PAGE_TURN, 50, TRUE) + return TRUE + +/obj/item/newspaper/ui_static_data(mob/user) + var/list/data = list() + data["channels"] = list() + for(var/datum/feed_channel/news_channels as anything in news_content) + data["channels"] += list(list( + "name" = news_channels.channel_name, + "page_number" = news_content.Find(news_channels), + )) + return data + +/obj/item/newspaper/ui_data(mob/user) + var/list/data = list() + data["current_page"] = current_page + data["scribble_message"] = (scribble_page == current_page) ? scribble_text : null + if(saved_wanted_icon) + user << browse_rsc(saved_wanted_icon, "wanted_photo.png") + data["wanted_criminal"] = saved_wanted_criminal + data["wanted_body"] = saved_wanted_body + data["wanted_photo"] = (saved_wanted_icon ? "wanted_photo.png" : null) + + var/list/channel_data = list() + if(!current_page || (current_page == news_content.len + 1)) + channel_data["channel_name"] = null + channel_data["author_name"] = null + channel_data["is_censored"] = null + channel_data["channel_messages"] = list() + data["channel_data"] = list(channel_data) + return data + var/datum/feed_channel/current_channel = news_content[current_page] + if(istype(current_channel)) + channel_data["channel_name"] = current_channel.channel_name + channel_data["author_name"] = current_channel.return_author(censored_check(current_channel.author_censor_time)) + channel_data["is_censored"] = censored_check(current_channel.D_class_censor_time) + channel_data["channel_messages"] = list() + for(var/datum/feed_message/feed_messages as anything in current_channel.messages) + if(feed_messages.creation_time > creation_time) + data["channel_has_messages"] = FALSE + break + data["channel_has_messages"] = TRUE + var/has_image = FALSE + if(feed_messages.img) + has_image = TRUE + user << browse_rsc(feed_messages.img, "tmp_photo[feed_messages.message_ID].png") + channel_data["channel_messages"] += list(list( + "message" = "-[feed_messages.return_body(censored_check(feed_messages.body_censor_time))]", + "photo" = (has_image ? "tmp_photo[feed_messages.message_ID].png" : null), + "author" = feed_messages.return_author(censored_check(feed_messages.author_censor_time)), + )) + data["channel_data"] = list(channel_data) + return data diff --git a/code/game/machinery/porta_turret/portable_turret.dm b/code/game/machinery/porta_turret/portable_turret.dm index 76b1b73ba53..d0c0744f19e 100644 --- a/code/game/machinery/porta_turret/portable_turret.dm +++ b/code/game/machinery/porta_turret/portable_turret.dm @@ -402,9 +402,6 @@ DEFINE_BITFIELD(turret_flags, list( /obj/machinery/porta_turret/proc/reset_attacked() turret_flags &= ~TURRET_FLAG_SHOOT_ALL_REACT -/obj/machinery/porta_turret/deconstruct(disassembled = TRUE) - qdel(src) - /obj/machinery/porta_turret/atom_break(damage_flag) . = ..() if(.) diff --git a/code/game/machinery/recharger.dm b/code/game/machinery/recharger.dm index f9747843d57..12a9ec25284 100755 --- a/code/game/machinery/recharger.dm +++ b/code/game/machinery/recharger.dm @@ -13,8 +13,6 @@ var/finished_recharging = FALSE var/static/list/allowed_devices = typecacheof(list( - /obj/item/stock_parts/cell/microfusion, //NOVA EDIT ADDITION - /obj/item/gun/microfusion, // NOVA EDIT ADDITION /obj/item/gun/energy, /obj/item/melee/baton/security, /obj/item/ammo_box/magazine/recharge, @@ -99,21 +97,6 @@ if(!energy_gun.can_charge) to_chat(user, span_notice("Your gun has no external power connector.")) return TRUE - - //NOVA EDIT ADDITION - if (istype(attacking_item, /obj/item/gun/microfusion)) - var/obj/item/gun/microfusion/microfusion_gun = attacking_item - if(microfusion_gun.cell?.chargerate <= 0) - to_chat(user, span_notice("[microfusion_gun] cannot be recharged!")) - return TRUE - - if (istype(attacking_item, /obj/item/stock_parts/cell/microfusion)) - var/obj/item/stock_parts/cell/microfusion/inserting_cell = attacking_item - if(inserting_cell.chargerate <= 0) - to_chat(user, span_notice("[inserting_cell] cannot be recharged!")) - return TRUE - //NOVA EDIT END - user.transferItemToLoc(attacking_item, src) return TRUE diff --git a/code/game/machinery/recycler.dm b/code/game/machinery/recycler.dm index a4deb63ae21..1014393c008 100644 --- a/code/game/machinery/recycler.dm +++ b/code/game/machinery/recycler.dm @@ -83,6 +83,12 @@ default_unfasten_wrench(user, tool) return ITEM_INTERACT_SUCCESS +/obj/machinery/recycler/can_be_unfasten_wrench(mob/user, silent) + if(!(isfloorturf(loc) || isindestructiblefloor(loc)) && !anchored) + to_chat(user, span_warning("[src] needs to be on the floor to be secured!")) + return FAILED_UNFASTEN + return SUCCESSFUL_UNFASTEN + /obj/machinery/recycler/attackby(obj/item/I, mob/user, params) if(default_deconstruction_screwdriver(user, "grinder-oOpen", "grinder-o0", I)) return @@ -155,7 +161,7 @@ continue var/obj/item/bodypart/head/as_head = thing var/obj/item/mmi/as_mmi = thing - if(istype(thing, /obj/item/organ/internal/brain) || (istype(as_head) && as_head.brain) || (istype(as_mmi) && as_mmi.brain) || istype(thing, /obj/item/dullahan_relay)) + if(istype(thing, /obj/item/organ/internal/brain) || (istype(as_head) && locate(/obj/item/organ/internal/brain) in as_head) || (istype(as_mmi) && as_mmi.brain) || istype(thing, /obj/item/dullahan_relay)) living_detected = TRUE if(isitem(as_object)) var/obj/item/as_item = as_object @@ -241,7 +247,7 @@ L.Unconscious(100) L.adjustBruteLoss(crush_damage) -/obj/machinery/recycler/on_deconstruction() +/obj/machinery/recycler/on_deconstruction(disassembled) safety_mode = TRUE /obj/machinery/recycler/deathtrap diff --git a/code/game/machinery/requests_console.dm b/code/game/machinery/requests_console.dm index 1d0f00517dd..11ed91914c2 100644 --- a/code/game/machinery/requests_console.dm +++ b/code/game/machinery/requests_console.dm @@ -394,10 +394,8 @@ GLOBAL_LIST_EMPTY(req_console_ckey_departments) return return ..() -/obj/machinery/requests_console/deconstruct(disassembled = TRUE) - if(!(obj_flags & NO_DECONSTRUCTION)) - new /obj/item/wallframe/requests_console(loc) - qdel(src) +/obj/machinery/requests_console/on_deconstruction(disassembled) + new /obj/item/wallframe/requests_console(loc) /obj/machinery/requests_console/auto_name // Register an autoname variant and then make the directional helpers before undefing all the magic bits auto_name = TRUE diff --git a/code/game/machinery/satellite/satellite_control.dm b/code/game/machinery/satellite/satellite_control.dm index e8482fe91df..c0875d9e26a 100644 --- a/code/game/machinery/satellite/satellite_control.dm +++ b/code/game/machinery/satellite/satellite_control.dm @@ -44,10 +44,9 @@ )) data["notice"] = notice - - var/datum/station_goal/station_shield/goal = locate() in GLOB.station_goals - if(goal) - data["meteor_shield"] = 1 + var/datum/station_goal/station_shield/goal = SSstation.get_station_goal(/datum/station_goal/station_shield) + if(!isnull(goal)) + data["meteor_shield"] = TRUE data["meteor_shield_coverage"] = goal.get_coverage() data["meteor_shield_coverage_max"] = goal.coverage_goal return data diff --git a/code/game/machinery/spaceheater.dm b/code/game/machinery/spaceheater.dm index b0209713ea1..0483b258ae6 100644 --- a/code/game/machinery/spaceheater.dm +++ b/code/game/machinery/spaceheater.dm @@ -69,6 +69,8 @@ ), ) AddElement(/datum/element/contextual_screentip_tools, tool_behaviors) + AddElement(/datum/element/climbable) + AddElement(/datum/element/elevation, pixel_shift = 8) /obj/machinery/space_heater/Destroy() SSair.stop_processing_machine(src) @@ -79,7 +81,7 @@ set_panel_open(TRUE) QDEL_NULL(cell) -/obj/machinery/space_heater/on_deconstruction() +/obj/machinery/space_heater/on_deconstruction(disassembled) if(cell) LAZYADD(component_parts, cell) cell = null diff --git a/code/game/machinery/status_display.dm b/code/game/machinery/status_display.dm index fae7ee98d09..6284b8eef9d 100644 --- a/code/game/machinery/status_display.dm +++ b/code/game/machinery/status_display.dm @@ -72,16 +72,13 @@ update_appearance() return TRUE -/obj/machinery/status_display/deconstruct(disassembled = TRUE) - if(obj_flags & NO_DECONSTRUCTION) - return +/obj/machinery/status_display/on_deconstruction(disassembled) if(!disassembled) new /obj/item/stack/sheet/iron(drop_location(), 2) new /obj/item/shard(drop_location()) new /obj/item/shard(drop_location()) else new /obj/item/wallframe/status_display(drop_location()) - qdel(src) /// Immediately change the display to the given picture. /obj/machinery/status_display/proc/set_picture(state) @@ -549,6 +546,19 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/machinery/status_display/ai, 32) connected_display.receive_signal(status_signal) +/obj/machinery/status_display/random_message + current_mode = SD_MESSAGE + /// list to pick the first line from + var/list/firstline_to_secondline = list() + +/obj/machinery/status_display/random_message/Initialize(mapload, ndir, building) + if(firstline_to_secondline?.len) + message1 = pick(firstline_to_secondline) + message2 = firstline_to_secondline[message1] + return ..() // status displays call update appearance on init so i suppose we should set the messages before calling parent as to not call it twice + +MAPPING_DIRECTIONAL_HELPERS(/obj/machinery/status_display/random_message, 32) + #undef MAX_STATIC_WIDTH #undef FONT_STYLE #undef SCROLL_RATE diff --git a/code/game/machinery/suit_storage_unit.dm b/code/game/machinery/suit_storage_unit.dm index 0bf6bf7872d..b34f7873648 100644 --- a/code/game/machinery/suit_storage_unit.dm +++ b/code/game/machinery/suit_storage_unit.dm @@ -307,13 +307,9 @@ storage = null set_occupant(null) -/obj/machinery/suit_storage_unit/deconstruct(disassembled = TRUE) - if(!(obj_flags & NO_DECONSTRUCTION)) - open_machine() - dump_inventory_contents() - if(card_reader_installed) - new /obj/item/stock_parts/card_reader(loc) - return ..() +/obj/machinery/suit_storage_unit/on_deconstruction(disassembled) + if(card_reader_installed) + new /obj/item/stock_parts/card_reader(loc) /obj/machinery/suit_storage_unit/proc/access_check(mob/living/user) if(!isnull(id_card)) diff --git a/code/game/machinery/telecomms/computers/telemonitor.dm b/code/game/machinery/telecomms/computers/telemonitor.dm index 400d827f618..6cf18323105 100644 --- a/code/game/machinery/telecomms/computers/telemonitor.dm +++ b/code/game/machinery/telecomms/computers/telemonitor.dm @@ -1,126 +1,156 @@ -/* - Telecomms monitor tracks the overall trafficing of a telecommunications network - and displays a heirarchy of linked machines. -*/ - #define MAIN_VIEW 0 #define MACHINE_VIEW 1 #define MAX_NETWORK_ID_LENGTH 15 /obj/machinery/computer/telecomms/monitor name = "telecommunications monitoring console" - icon_screen = "comm_monitor" desc = "Monitors the details of the telecommunications network it's synced with." - /// Current screen the user is viewing - var/screen = MAIN_VIEW - /// Weakrefs of the machines located by the computer - var/list/machine_list = list() + circuit = /obj/item/circuitboard/computer/comm_monitor + + icon_screen = "comm_monitor" + /// Weakref of the currently selected tcomms machine - var/datum/weakref/selected_machine_ref + var/datum/weakref/selected_machine_ref = null + /// Weakrefs of the machines located by the computer + var/list/datum/weakref/machine_refs + + /// Currently displayed "tab" + var/screen = MAIN_VIEW /// The network to probe var/network = "NULL" /// Error message to show - var/error_message = "" - circuit = /obj/item/circuitboard/computer/comm_monitor + var/status_message = null -/obj/machinery/computer/telecomms/monitor/ui_data(mob/user) - var/list/data = list( - "screen" = screen, - "network" = network, - "error_message" = error_message, +/obj/machinery/computer/telecomms/monitor/Initialize(mapload, obj/item/circuitboard/C) + . = ..() + LAZYINITLIST(machine_refs) + +/obj/machinery/computer/telecomms/monitor/ui_assets(mob/user) + return list( + get_asset_datum(/datum/asset/spritesheet/telecomms), ) +/obj/machinery/computer/telecomms/monitor/ui_interact(mob/user, datum/tgui/ui) + . = ..() + + ui = SStgui.try_update_ui(user, src, ui) + if(!ui) + ui = new(user, src, "TelecommsMonitor") + ui.open() + +/obj/machinery/computer/telecomms/monitor/ui_data(mob/user) + var/list/data = list() + + data["screen"] = screen + data["statusMessage"] = status_message + switch(screen) - // --- Main Menu --- if(MAIN_VIEW) - var/list/found_machinery = list() - for(var/datum/weakref/tcomms_ref in machine_list) - var/obj/machinery/telecomms/telecomms = tcomms_ref.resolve() - if(!telecomms) - machine_list -= tcomms_ref + data["network"] = network + + data["machines"] = list() + for(var/datum/weakref/machine_ref in machine_refs) + var/obj/machinery/telecomms/machine = machine_ref.resolve() + if(isnull(machine)) + machine_refs -= machine_ref continue - found_machinery += list(list("ref" = REF(telecomms), "name" = telecomms.name, "id" = telecomms.id)) - data["machinery"] = found_machinery - // --- Viewing Machine --- + + data["machines"] += list(list( + "id" = machine.id, + "name" = machine.name, + "icon" = initial(machine.icon_state), + )) + if(MACHINE_VIEW) - // Send selected machinery data - var/list/machine_out = list() - var/obj/machinery/telecomms/selected = selected_machine_ref.resolve() - if(selected) - machine_out["name"] = selected.name - // Get the linked machinery - var/list/linked_machinery = list() - for(var/obj/machinery/telecomms/T in selected.links) - linked_machinery += list(list("ref" = REF(T.id), "name" = T.name, "id" = T.id)) - machine_out["linked_machinery"] = linked_machinery - data["machine"] = machine_out + var/obj/machinery/telecomms/selected = selected_machine_ref?.resolve() + if(!isnull(selected)) + var/list/linked_machines = list() + for(var/obj/machinery/telecomms/machine as anything in selected.links) + linked_machines += list(list( + "id" = machine.id, + "name" = machine.name, + "icon" = initial(machine.icon_state), + )) + + data["machine"] = list( + "id" = selected.id, + "name" = selected.name, + "network" = selected.network, + "linkedMachines" = linked_machines, + ) + return data /obj/machinery/computer/telecomms/monitor/ui_act(action, params) . = ..() if(.) - return . + return - error_message = "" + status_message = null switch(action) - // Scan for a network - if("probe_network") - var/new_network = params["network_id"] + if("flush") + machine_refs = list() + network = "" + return TRUE - if(length(new_network) > MAX_NETWORK_ID_LENGTH) - error_message = "OPERATION FAILED: NETWORK ID TOO LONG." - return TRUE + if("home") + selected_machine_ref = null + screen = MAIN_VIEW + return TRUE + + if("view") + var/machine_id = params["id"] + if(isnull(machine_id)) + return + + for(var/datum/weakref/machine_ref as anything in machine_refs) + var/obj/machinery/telecomms/machine = machine_ref.resolve() + if(isnull(machine)) + machine_refs -= machine_ref + continue + + if(machine.id != machine_id) + continue - list_clear_empty_weakrefs(machine_list) + selected_machine_ref = machine_ref + screen = MACHINE_VIEW - if(machine_list.len > 0) - error_message = "OPERATION FAILED: CANNOT PROBE WHEN BUFFER FULL." + if(isnull(selected_machine_ref)) + status_message = "OPERATION FAILED: UNABLE TO LOCATE MACHINERY." + + return TRUE + + if("probe") + var/network_id = params["id"] + if(length(network_id) > MAX_NETWORK_ID_LENGTH) + status_message = "OPERATION FAILED: NETWORK ID TOO LONG." return TRUE - network = new_network + list_clear_empty_weakrefs(machine_refs) - for(var/obj/machinery/telecomms/T in urange(25, src)) - if(T.network == network) - machine_list += WEAKREF(T) - if(machine_list.len == 0) - error_message = "OPERATION FAILED: UNABLE TO LOCATE NETWORK ENTITIES IN [network]." + if(length(machine_refs) > 0) + status_message = "OPERATION FAILED: CANNOT PROBE WHEN BUFFER FULL." return TRUE - error_message = "[machine_list.len] ENTITIES LOCATED & BUFFERED"; - return TRUE - if("flush_buffer") - machine_list = list() - network = "" - return TRUE - if("view_machine") - for(var/datum/weakref/tcomms_ref in machine_list) - var/obj/machinery/telecomms/tcomms = tcomms_ref.resolve() - if(!tcomms) - machine_list -= tcomms_ref + + network = network_id + + var/list/telecomms_machines = SSmachines.get_machines_by_type_and_subtypes(/obj/machinery/telecomms) + for(var/obj/machinery/telecomms/machine as anything in telecomms_machines) + if(machine.network != network) continue - if(tcomms.id == params["id"]) - selected_machine_ref = tcomms_ref - if(!selected_machine_ref) - error_message = "OPERATION FAILED: UNABLE TO LOCATE MACHINERY." - screen = MACHINE_VIEW - return TRUE - if("return_home") - selected_machine_ref = null - screen = MAIN_VIEW - return TRUE - return TRUE -/obj/machinery/computer/telecomms/monitor/attackby() - . = ..() - updateUsrDialog() + machine_refs += WEAKREF(machine) -/obj/machinery/computer/telecomms/monitor/ui_interact(mob/user, datum/tgui/ui) - . = ..() - ui = SStgui.try_update_ui(user, src, ui) - if (!ui) - ui = new(user, src, "TelecommsMonitor", name) - ui.open() + if(length(machine_refs) == 0) + status_message = "OPERATION FAILED: UNABLE TO LOCATE NETWORK ENTITIES IN [network]." + return TRUE + + status_message = "[length(machine_refs)] ENTITIES LOCATED & BUFFERED" + return TRUE + + return TRUE #undef MAIN_VIEW #undef MACHINE_VIEW diff --git a/code/game/machinery/telecomms/machines/allinone.dm b/code/game/machinery/telecomms/machines/allinone.dm index 931979f6b0a..f8a6b66c049 100644 --- a/code/game/machinery/telecomms/machines/allinone.dm +++ b/code/game/machinery/telecomms/machines/allinone.dm @@ -20,7 +20,7 @@ /obj/machinery/telecomms/allinone/indestructible resistance_flags = INDESTRUCTIBLE | LAVA_PROOF | FIRE_PROOF | UNACIDABLE | ACID_PROOF - obj_flags = /obj::obj_flags | NO_DECONSTRUCTION + obj_flags = parent_type::obj_flags | NO_DECONSTRUCTION /obj/machinery/telecomms/allinone/receive_signal(datum/signal/subspace/signal) if(!istype(signal) || signal.transmission_method != TRANSMISSION_SUBSPACE) // receives on subspace only diff --git a/code/game/machinery/washing_machine.dm b/code/game/machinery/washing_machine.dm index 2f150d109f7..fd0fea92292 100644 --- a/code/game/machinery/washing_machine.dm +++ b/code/game/machinery/washing_machine.dm @@ -415,10 +415,8 @@ GLOBAL_LIST_INIT(dye_registry, list( /obj/machinery/washing_machine/attack_ai_secondary(mob/user, modifiers) return attack_hand_secondary(user, modifiers) -/obj/machinery/washing_machine/deconstruct(disassembled = TRUE) - if (!(obj_flags & NO_DECONSTRUCTION)) - new /obj/item/stack/sheet/iron(drop_location(), 2) - qdel(src) +/obj/machinery/washing_machine/on_deconstruction(disassembled) + new /obj/item/stack/sheet/iron(drop_location(), 2) /obj/machinery/washing_machine/open_machine(drop = TRUE, density_to_set = FALSE) . = ..() diff --git a/code/game/objects/effects/anomalies/_anomalies.dm b/code/game/objects/effects/anomalies/_anomalies.dm index 02c3e024c2a..530da562827 100644 --- a/code/game/objects/effects/anomalies/_anomalies.dm +++ b/code/game/objects/effects/anomalies/_anomalies.dm @@ -27,7 +27,8 @@ /obj/effect/anomaly/Initialize(mapload, new_lifespan, drops_core = TRUE) . = ..() - SSpoints_of_interest.make_point_of_interest(src) + if(!mapload) + SSpoints_of_interest.make_point_of_interest(src) START_PROCESSING(SSobj, src) impact_area = get_area(src) diff --git a/code/game/objects/effects/decals/cleanable/humans.dm b/code/game/objects/effects/decals/cleanable/humans.dm index b195f115d46..01b26ee3de6 100644 --- a/code/game/objects/effects/decals/cleanable/humans.dm +++ b/code/game/objects/effects/decals/cleanable/humans.dm @@ -115,6 +115,7 @@ /obj/effect/decal/cleanable/blood/gibs/Initialize(mapload, list/datum/disease/diseases) . = ..() + AddElement(/datum/element/squish_sound) RegisterSignal(src, COMSIG_MOVABLE_PIPE_EJECTING, PROC_REF(on_pipe_eject)) /obj/effect/decal/cleanable/blood/gibs/Destroy() @@ -133,11 +134,6 @@ /obj/effect/decal/cleanable/blood/gibs/ex_act(severity, target) return FALSE -/obj/effect/decal/cleanable/blood/gibs/on_entered(datum/source, atom/movable/L) - if(isliving(L) && has_gravity(loc)) - playsound(loc, 'sound/effects/footstep/gib_step.ogg', HAS_TRAIT(L, TRAIT_LIGHT_STEP) ? 20 : 50, TRUE) - return ..() - /obj/effect/decal/cleanable/blood/gibs/proc/on_pipe_eject(atom/source, direction) SIGNAL_HANDLER diff --git a/code/game/objects/effects/decals/cleanable/misc.dm b/code/game/objects/effects/decals/cleanable/misc.dm index 8a80692f1a9..7fe6c59075f 100644 --- a/code/game/objects/effects/decals/cleanable/misc.dm +++ b/code/game/objects/effects/decals/cleanable/misc.dm @@ -403,6 +403,7 @@ /obj/effect/decal/cleanable/ants/fire name = "space fire ants" desc = "A small colony no longer. We are the fire nation." + decal_reagent = /datum/reagent/ants/fire icon_state = "fire_ants" mergeable_decal = FALSE @@ -484,3 +485,20 @@ if(item.ignition_effect(src, user)) ignite() return ..() + +/obj/effect/decal/cleanable/fuel_pool/hivis + icon_state = "fuel_pool_hivis" + +/obj/effect/decal/cleanable/rubble + name = "rubble" + desc = "A pile of rubble." + icon = 'icons/obj/debris.dmi' + icon_state = "rubble" + mergeable_decal = FALSE + beauty = -10 + +/obj/effect/decal/cleanable/rubble/Initialize(mapload) + . = ..() + flick("rubble_bounce", src) + icon_state = "rubble" + update_appearance(UPDATE_ICON_STATE) diff --git a/code/game/objects/effects/effect_system/effects_sparks.dm b/code/game/objects/effects/effect_system/effects_sparks.dm index 86800d0522c..c3fad6d26b6 100644 --- a/code/game/objects/effects/effect_system/effects_sparks.dm +++ b/code/game/objects/effects/effect_system/effects_sparks.dm @@ -16,7 +16,7 @@ name = "sparks" icon_state = "sparks" anchored = TRUE - light_system = MOVABLE_LIGHT + light_system = OVERLAY_LIGHT light_range = 2 light_power = 0.5 light_color = LIGHT_COLOR_FIRE diff --git a/code/game/objects/effects/lighting.dm b/code/game/objects/effects/lighting.dm index 4e95e72f429..1de9fad39ee 100644 --- a/code/game/objects/effects/lighting.dm +++ b/code/game/objects/effects/lighting.dm @@ -8,7 +8,7 @@ name = "lighting" desc = "Tell a coder if you're seeing this." icon_state = "nothing" - light_system = MOVABLE_LIGHT + light_system = OVERLAY_LIGHT light_range = MINIMUM_USEFUL_LIGHT_RANGE light_color = COLOR_WHITE blocks_emissive = EMISSIVE_BLOCK_NONE diff --git a/code/game/objects/effects/mines.dm b/code/game/objects/effects/mines.dm index e63e7e39c4a..cd8a859f86f 100644 --- a/code/game/objects/effects/mines.dm +++ b/code/game/objects/effects/mines.dm @@ -117,8 +117,7 @@ var/datum/effect_system/spark_spread/s = new /datum/effect_system/spark_spread s.set_up(3, 1, src) s.start() - if(ismob(triggerer)) - mineEffect(triggerer) + mineEffect(triggerer) triggered = TRUE SEND_SIGNAL(src, COMSIG_MINE_TRIGGERED, triggerer) qdel(src) diff --git a/code/game/objects/effects/portals.dm b/code/game/objects/effects/portals.dm index 091b4700673..8c52a76dbc0 100644 --- a/code/game/objects/effects/portals.dm +++ b/code/game/objects/effects/portals.dm @@ -18,7 +18,7 @@ anchored = TRUE density = TRUE // dense for receiving bumbs layer = HIGH_OBJ_LAYER - light_system = STATIC_LIGHT + light_system = COMPLEX_LIGHT light_range = 3 light_power = 1 light_on = TRUE diff --git a/code/game/objects/effects/spawners/random/bedsheet.dm b/code/game/objects/effects/spawners/random/bedsheet.dm new file mode 100644 index 00000000000..3fb39c5de4a --- /dev/null +++ b/code/game/objects/effects/spawners/random/bedsheet.dm @@ -0,0 +1,64 @@ +/obj/effect/spawner/random/bedsheet + name = "random dorm bedsheet" + icon_state = "random_bedsheet" + loot = list(/obj/item/bedsheet = 8, + /obj/item/bedsheet/blue = 8, + /obj/item/bedsheet/green = 8, + /obj/item/bedsheet/grey = 8, + /obj/item/bedsheet/orange = 8, + /obj/item/bedsheet/purple = 8, + /obj/item/bedsheet/red = 8, + /obj/item/bedsheet/yellow = 8, + /obj/item/bedsheet/brown = 8, + /obj/item/bedsheet/black = 8, + /obj/item/bedsheet/patriot = 2, + /obj/item/bedsheet/rainbow = 2, + /obj/item/bedsheet/ian = 2, + /obj/item/bedsheet/runtime = 2, + /obj/item/bedsheet/cosmos = 2, + /obj/item/bedsheet/nanotrasen = 2, + /obj/item/bedsheet/pirate = 2, + /obj/item/bedsheet/gondola = 1, + ) + +/obj/effect/spawner/random/bedsheet/double + name = "random dorm double bedsheet" + icon_state = "random_doublesheet" + loot = list( + /obj/item/bedsheet/double = 4, + /obj/item/bedsheet/blue/double = 4, + /obj/item/bedsheet/green/double = 4, + /obj/item/bedsheet/grey/double = 4, + /obj/item/bedsheet/orange/double = 4, + /obj/item/bedsheet/purple/double = 4, + /obj/item/bedsheet/red/double = 4, + /obj/item/bedsheet/yellow/double = 4, + /obj/item/bedsheet/brown/double = 4, + /obj/item/bedsheet/black/double = 4, + /obj/item/bedsheet/patriot/double = 1, + /obj/item/bedsheet/rainbow/double = 1, + /obj/item/bedsheet/ian/double = 1, + /obj/item/bedsheet/runtime/double = 1, + /obj/item/bedsheet/cosmos/double = 1, + /obj/item/bedsheet/nanotrasen/double = 1, + ) + +/obj/effect/spawner/random/bedsheet/any + name = "random single bedsheet" + loot = null + var/static/list/bedsheet_list = list() + var/spawn_type = BEDSHEET_SINGLE + +/obj/effect/spawner/random/bedsheet/any/Initialize(mapload) + if(isnull(bedsheet_list[spawn_type])) + var/list/spawn_list = list() + for(var/obj/item/bedsheet/sheet as anything in typesof(/obj/item/bedsheet)) + if(initial(sheet.bedsheet_type) == spawn_type) + spawn_list += sheet + bedsheet_list[spawn_type] = spawn_list + loot = bedsheet_list[spawn_type] + return ..() + +/obj/effect/spawner/random/bedsheet/any/double + icon_state = "random_doublesheet" + spawn_type = BEDSHEET_DOUBLE diff --git a/code/game/objects/effects/step_triggers.dm b/code/game/objects/effects/step_triggers.dm index a014857994a..ecfa560bfe6 100644 --- a/code/game/objects/effects/step_triggers.dm +++ b/code/game/objects/effects/step_triggers.dm @@ -19,7 +19,7 @@ /obj/effect/step_trigger/proc/on_entered(datum/source, H as mob|obj) SIGNAL_HANDLER - if(!H) + if(!H || H == src) return if(isobserver(H) && !affect_ghosts) return @@ -138,6 +138,26 @@ if (T) A.forceMove(T) +/* Teleports atoms directly to an offset, no randomness, looping hallways! */ + +/obj/effect/step_trigger/teleporter/offset + var/teleport_x_offset = 0 + var/teleport_y_offset = 0 + +/obj/effect/step_trigger/teleporter/offset/on_entered(datum/source, H as mob|obj, atom/old_loc) + if(!old_loc?.Adjacent(loc)) // prevents looping, if we were teleported into this then the old loc is usually not adjacent + return + return ..() + +/obj/effect/step_trigger/teleporter/offset/Trigger(atom/movable/poor_soul) + var/turf/destination = locate(x + teleport_x_offset, y + teleport_y_offset, z) + if(!destination) + return + poor_soul.forceMove(destination) + var/mob/living/living_soul = poor_soul + if(istype(living_soul) && living_soul.client) + living_soul.client.move_delay = 0 + /* Fancy teleporter, creates sparks and smokes when used */ /obj/effect/step_trigger/teleport_fancy diff --git a/code/game/objects/items.dm b/code/game/objects/items.dm index a71c479811f..ba9e4912aff 100644 --- a/code/game/objects/items.dm +++ b/code/game/objects/items.dm @@ -545,20 +545,20 @@ return return attempt_pickup(user) -/obj/item/proc/attempt_pickup(mob/user) +/obj/item/proc/attempt_pickup(mob/user, skip_grav = FALSE) . = TRUE if(!(interaction_flags_item & INTERACT_ITEM_ATTACK_HAND_PICKUP)) //See if we're supposed to auto pickup. return - //Heavy gravity makes picking up things very slow. - var/grav = user.has_gravity() - if(grav > STANDARD_GRAVITY) - var/grav_power = min(3,grav - STANDARD_GRAVITY) - to_chat(user,span_notice("You start picking up [src]...")) - if(!do_after(user, 30 * grav_power, src)) - return - + if(!skip_grav) + //Heavy gravity makes picking up things very slow. + var/grav = user.has_gravity() + if(grav > STANDARD_GRAVITY) + var/grav_power = min(3,grav - STANDARD_GRAVITY) + to_chat(user,span_notice("You start picking up [src]...")) + if(!do_after(user, 30 * grav_power, src)) + return //If the item is in a storage item, take it out var/outside_storage = !loc.atom_storage @@ -790,8 +790,7 @@ /obj/item/on_exit_storage(datum/storage/master_storage) . = ..() - var/atom/location = master_storage.real_location?.resolve() - do_drop_animation(location) + do_drop_animation(master_storage.parent) /obj/item/throw_impact(atom/hit_atom, datum/thrownthing/throwingdatum) if(QDELETED(hit_atom)) @@ -1092,7 +1091,7 @@ skill_modifier = user.mind.get_skill_modifier(/datum/skill/mining, SKILL_SPEED_MODIFIER) if(user.mind.get_skill_level(/datum/skill/mining) >= SKILL_LEVEL_JOURNEYMAN && prob(user.mind.get_skill_modifier(/datum/skill/mining, SKILL_PROBS_MODIFIER))) // we check if the skill level is greater than Journeyman and then we check for the probality for that specific level. - mineral_scan_pulse(get_turf(user), SKILL_LEVEL_JOURNEYMAN - 2) //SKILL_LEVEL_JOURNEYMAN = 3 So to get range of 1+ we have to subtract 2 from it,. + mineral_scan_pulse(get_turf(user), SKILL_LEVEL_JOURNEYMAN - 2, scanner = src) //SKILL_LEVEL_JOURNEYMAN = 3 So to get range of 1+ we have to subtract 2 from it,. delay *= toolspeed * skill_modifier diff --git a/code/game/objects/items/blueprints.dm b/code/game/objects/items/blueprints.dm index 4ccbf8319b0..82fc3437f20 100644 --- a/code/game/objects/items/blueprints.dm +++ b/code/game/objects/items/blueprints.dm @@ -238,7 +238,7 @@ return //stuff tied to the area to rename - var/list/to_rename = list( + var/static/list/to_rename = typecacheof(list( /obj/machinery/airalarm, /obj/machinery/atmospherics/components/unary/vent_scrubber, /obj/machinery/atmospherics/components/unary/vent_pump, @@ -246,11 +246,9 @@ /obj/machinery/firealarm, /obj/machinery/light_switch, /obj/machinery/power/apc, - ) - - for(var/turf/area_turf as anything in area.get_contained_turfs()) - for(var/obj/machine in area_turf) - if(!is_type_in_list(machine, to_rename)) - continue - machine.name = replacetext(machine.name, oldtitle, title) + )) + for (var/list/zlevel_turfs as anything in area.get_zlevel_turf_lists()) + for (var/turf/area_turf as anything in zlevel_turfs) + for(var/obj/machine as anything in typecache_filter_list(area_turf.contents, to_rename)) + machine.name = replacetext(machine.name, oldtitle, title) //TODO: much much more. Unnamed airlocks, cameras, etc. diff --git a/code/game/objects/items/cardboard_cutouts.dm b/code/game/objects/items/cardboard_cutouts.dm index f58ea90211d..97f9c29491e 100644 --- a/code/game/objects/items/cardboard_cutouts.dm +++ b/code/game/objects/items/cardboard_cutouts.dm @@ -14,11 +14,19 @@ var/deceptive = FALSE /// What cutout datum we spawn at the start? Uses the name, not the path. var/starting_cutout + /// Reference to the tactical component that should be deleted when the cutout is toppled. + var/datum/component/tactical/tacticool /obj/item/cardboard_cutout/Initialize(mapload) . = ..() if(starting_cutout) return INITIALIZE_HINT_LATELOAD + if(!pushed_over) + AddComponent(/datum/component/tactical) + +/obj/item/cardboard_cutout/Destroy() + tacticool = null + return ..() /obj/item/cardboard_cutout/LateInitialize() ASSERT(!isnull(starting_cutout)) @@ -33,6 +41,8 @@ ASSERT(!isnull(cutout), "No cutout found with name [starting_cutout]") cutout.apply(src) + if(!pushed_over) + tacticool = AddComponent(/datum/component/tactical) //ATTACK HAND IGNORING PARENT RETURN VALUE /obj/item/cardboard_cutout/attack_hand(mob/living/user, list/modifiers) @@ -42,12 +52,22 @@ playsound(src, 'sound/weapons/genhit.ogg', 50, TRUE) push_over() +/obj/item/cardboard_cutout/equipped(mob/living/user, slot) + . = ..() + //Because of the tactical element, the user won't tilt left and right, but it'll still hop. + user.AddElementTrait(TRAIT_WADDLING, REF(src), /datum/element/waddling) + +/obj/item/cardboard_cutout/dropped(mob/living/user) + . = ..() + REMOVE_TRAIT(user, TRAIT_WADDLING, REF(src)) + /obj/item/cardboard_cutout/proc/push_over() appearance = initial(appearance) desc = "[initial(desc)] It's been pushed over." icon_state = "cutout_pushed_over" remove_atom_colour(FIXED_COLOUR_PRIORITY) pushed_over = TRUE + QDEL_NULL(tacticool) /obj/item/cardboard_cutout/attack_self(mob/living/user) if(!pushed_over) @@ -57,6 +77,7 @@ icon = initial(icon) icon_state = initial(icon_state) //This resets a cutout to its blank state - this is intentional to allow for resetting pushed_over = FALSE + tacticool = AddComponent(/datum/component/tactical) /obj/item/cardboard_cutout/attackby(obj/item/I, mob/living/user, params) if(istype(I, /obj/item/toy/crayon)) @@ -100,7 +121,7 @@ for (var/datum/cardboard_cutout/cutout_subtype as anything in subtypesof(/datum/cardboard_cutout)) var/datum/cardboard_cutout/cutout = get_cardboard_cutout_instance(cutout_subtype) appearances_by_name[cutout.name] = cutout - possible_appearances[cutout.name] = image(icon = cutout.applied_appearance) + possible_appearances[cutout.name] = image(icon = cutout.preview_appearance) var/new_appearance = show_radial_menu(user, src, possible_appearances, custom_check = CALLBACK(src, PROC_REF(check_menu), user, crayon), radius = 36, require_near = TRUE) if(!new_appearance) @@ -144,19 +165,16 @@ return FALSE return TRUE -// Cutouts always face forward -/obj/item/cardboard_cutout/setDir(newdir) - SHOULD_CALL_PARENT(FALSE) - return - /obj/item/cardboard_cutout/adaptive //Purchased by Syndicate agents, these cutouts are indistinguishable from normal cutouts but aren't discolored when their appearance is changed deceptive = TRUE /datum/cardboard_cutout /// Name of the cutout, used for radial selection and the global list. var/name = "Boardjak" - /// The appearance we apply to the cardboard cutout. - var/mutable_appearance/applied_appearance = null + /// The appearance of the cardboard cutout that we show in the radial menu. + var/mutable_appearance/preview_appearance + /// A flat appearance, with only one direction, that we apply to the cardboard cutout. + var/image/applied_appearance /// The base name we actually give to to the cardboard cutout. Can be overridden in get_name(). var/applied_name = "boardjak" /// The desc we give to the cardboard cutout. @@ -179,9 +197,9 @@ /datum/cardboard_cutout/New() . = ..() if(direct_icon) - applied_appearance = mutable_appearance(direct_icon, direct_icon_state) + preview_appearance = mutable_appearance(direct_icon, direct_icon_state) else - applied_appearance = get_dynamic_human_appearance(outfit, species, mob_spawner, l_hand, r_hand, animated = FALSE) + preview_appearance = get_dynamic_human_appearance(outfit, species, mob_spawner, l_hand, r_hand, animated = FALSE) /// This proc returns the name that the cardboard cutout item will use. /datum/cardboard_cutout/proc/get_name() @@ -189,9 +207,14 @@ /// This proc sets the cardboard cutout item's vars. /datum/cardboard_cutout/proc/apply(obj/item/cardboard_cutout/cutouts) + if(isnull(applied_appearance)) + applied_appearance = image(fcopy_rsc(getFlatIcon(preview_appearance, no_anim = TRUE))) + applied_appearance.plane = cutouts.plane + applied_appearance.layer = cutouts.layer cutouts.appearance = applied_appearance cutouts.name = get_name() cutouts.desc = applied_desc + cutouts.update_appearance() //forces an update on the tactical comp's appearance. /datum/cardboard_cutout/assistant name = "Assistant" diff --git a/code/game/objects/items/cards_ids.dm b/code/game/objects/items/cards_ids.dm index 4157c1ae16f..945c8d7e96e 100644 --- a/code/game/objects/items/cards_ids.dm +++ b/code/game/objects/items/cards_ids.dm @@ -356,7 +356,8 @@ var/list/wildcard_access = list() var/list/normal_access = list() - build_access_lists(new_access_list, normal_access, wildcard_access) + if(length(new_access_list)) + build_access_lists(new_access_list, normal_access, wildcard_access) // Check if we can add the wildcards. if(mode == ERROR_ON_FAIL) @@ -686,6 +687,13 @@ if(loc != user) to_chat(user, span_warning("You must be holding the ID to continue!")) return + if(registered_account.replaceable && !registered_account.account_balance) + var/choice = tgui_alert(user, "This card's account is unassigned. Would you like to link a bank account?", "Bank Account", list("Link Account", "Leave Unassigned")) + if(!choice || QDELETED(user) || QDELETED(src) || !alt_click_can_use_id(user) || loc != user) + return + if(choice == "Link Account") + set_new_account(user) + return var/amount_to_remove = tgui_input_number(user, "How much do you want to withdraw? (Max: [registered_account.account_balance] cr)", "Withdraw Funds", max_value = registered_account.account_balance) if(!amount_to_remove || QDELETED(user) || QDELETED(src) || issilicon(user) || loc != user) return @@ -727,11 +735,13 @@ if(!user.can_read(src)) return - if(registered_account) + if(registered_account && !isnull(registered_account.account_id)) . += "The account linked to the ID belongs to '[registered_account.account_holder]' and reports a balance of [registered_account.account_balance] cr." if(ACCESS_COMMAND in access) var/datum/bank_account/linked_dept = SSeconomy.get_dep_account(registered_account.account_job.paycheck_department) . += "The [linked_dept.account_holder] linked to the ID reports a balance of [linked_dept.account_balance] cr." + else + . += span_notice("Alt-Right-Click the ID to set the linked bank account.") if(HAS_TRAIT(user, TRAIT_ID_APPRAISER)) . += HAS_TRAIT(src, TRAIT_JOB_FIRST_ID_CARD) ? span_boldnotice("Hmm... yes, this ID was issued from Central Command!") : span_boldnotice("This ID was created in this sector, not by Central Command.") @@ -778,6 +788,8 @@ . += "The [D.account_holder] reports a balance of [D.account_balance] cr." . += span_info("Alt-Click the ID to pull money from the linked account in the form of holochips.") . += span_info("You can insert credits into the linked account by pressing holochips, cash, or coins against the ID.") + if(registered_account.replaceable) + . += span_info("Alt-Right-Click the ID to change the linked bank account.") if(registered_account.civilian_bounty) . += "There is an active civilian bounty." . += span_info("[registered_account.bounty_text()]") diff --git a/code/game/objects/items/chainsaw.dm b/code/game/objects/items/chainsaw.dm index 0805f6b5233..68501057ebf 100644 --- a/code/game/objects/items/chainsaw.dm +++ b/code/game/objects/items/chainsaw.dm @@ -99,6 +99,28 @@ armour_penetration = 100 force_on = 30 +/obj/item/chainsaw/doomslayer/attack(mob/living/target_mob, mob/living/user, params) + if (target_mob.stat != DEAD) + return ..() + + if (user.zone_selected != BODY_ZONE_HEAD) + return ..() + + var/obj/item/bodypart/head = target_mob.get_bodypart(BODY_ZONE_HEAD) + if (isnull(head)) + return ..() + + playsound(user, 'sound/weapons/slice.ogg', vol = 80, vary = TRUE) + + target_mob.balloon_alert(user, "cutting off head...") + if (!do_after(user, 2 SECONDS, target_mob, extra_checks = CALLBACK(src, PROC_REF(has_same_head), target_mob, head))) + return TRUE + + head.dismember(silent = FALSE) + user.put_in_hands(head) + + return TRUE + /obj/item/chainsaw/doomslayer/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) owner.visible_message(span_danger("Ranged attacks just make [owner] angrier!")) @@ -106,6 +128,9 @@ return TRUE return FALSE +/obj/item/chainsaw/doomslayer/proc/has_same_head(mob/living/target_mob, obj/item/bodypart/head) + return target_mob.get_bodypart(BODY_ZONE_HEAD) == head + /obj/item/chainsaw/mounted_chainsaw name = "mounted chainsaw" desc = "A chainsaw that has replaced your arm." diff --git a/code/game/objects/items/cigs_lighters.dm b/code/game/objects/items/cigs_lighters.dm index ee78b11c720..5740f6aaa4d 100644 --- a/code/game/objects/items/cigs_lighters.dm +++ b/code/game/objects/items/cigs_lighters.dm @@ -742,7 +742,7 @@ CIGARETTE PACKETS ARE IN FANCY.DM resistance_flags = FIRE_PROOF grind_results = list(/datum/reagent/iron = 1, /datum/reagent/fuel = 5, /datum/reagent/fuel/oil = 5) custom_price = PAYCHECK_CREW * 1.1 - light_system = MOVABLE_LIGHT + light_system = OVERLAY_LIGHT light_range = 2 light_power = 0.6 light_color = LIGHT_COLOR_FIRE diff --git a/code/game/objects/items/circuitboards/machines/machine_circuitboards.dm b/code/game/objects/items/circuitboards/machines/machine_circuitboards.dm index 906f2ec2f95..1480ac23c5a 100644 --- a/code/game/objects/items/circuitboards/machines/machine_circuitboards.dm +++ b/code/game/objects/items/circuitboards/machines/machine_circuitboards.dm @@ -243,10 +243,10 @@ /datum/stock_part/servo = 1) needs_anchored = FALSE -/obj/item/circuitboard/machine/generator +/obj/item/circuitboard/machine/thermoelectric_generator name = "Thermo-Electric Generator" greyscale_colors = CIRCUIT_COLOR_ENGINEERING - build_path = /obj/machinery/power/generator + build_path = /obj/machinery/power/thermoelectric_generator req_components = list() /obj/item/circuitboard/machine/ntnet_relay @@ -309,9 +309,6 @@ greyscale_colors = CIRCUIT_COLOR_ENGINEERING build_path = /obj/machinery/rnd/production/protolathe/department/engineering -/obj/item/circuitboard/machine/protolathe/department/engineering/no_tax - build_path = /obj/machinery/rnd/production/protolathe/department/engineering/no_tax - /obj/item/circuitboard/machine/rtg name = "RTG" greyscale_colors = CIRCUIT_COLOR_ENGINEERING @@ -616,57 +613,59 @@ req_components = list(/obj/item/vending_refill/custom = 1) var/static/list/vending_names_paths = list( + /obj/machinery/vending/assist = "Part-Mart", + /obj/machinery/vending/autodrobe = "AutoDrobe", /obj/machinery/vending/boozeomat = "Booze-O-Mat", - /obj/machinery/vending/coffee = "Solar's Best Hot Drinks", - /obj/machinery/vending/snack = "Getmore Chocolate Corp", - /obj/machinery/vending/cola = "Robust Softdrinks", + /obj/machinery/vending/cart = "PTech", /obj/machinery/vending/cigarette = "ShadyCigs Deluxe", - /obj/machinery/vending/games = "\improper Good Clean Fun", - /obj/machinery/vending/autodrobe = "AutoDrobe", - /obj/machinery/vending/wardrobe/sec_wardrobe = "SecDrobe", - /obj/machinery/vending/wardrobe/det_wardrobe = "DetDrobe", - /obj/machinery/vending/wardrobe/medi_wardrobe = "MediDrobe", - /obj/machinery/vending/wardrobe/engi_wardrobe = "EngiDrobe", - /obj/machinery/vending/wardrobe/atmos_wardrobe = "AtmosDrobe", - /obj/machinery/vending/wardrobe/cargo_wardrobe = "CargoDrobe", - /obj/machinery/vending/wardrobe/robo_wardrobe = "RoboDrobe", - /obj/machinery/vending/wardrobe/science_wardrobe = "SciDrobe", - /obj/machinery/vending/wardrobe/hydro_wardrobe = "HyDrobe", - /obj/machinery/vending/wardrobe/curator_wardrobe = "CuraDrobe", - /obj/machinery/vending/wardrobe/coroner_wardrobe = "MortiDrobe", - /obj/machinery/vending/wardrobe/bar_wardrobe = "BarDrobe", - /obj/machinery/vending/wardrobe/chef_wardrobe = "ChefDrobe", - /obj/machinery/vending/wardrobe/jani_wardrobe = "JaniDrobe", - /obj/machinery/vending/wardrobe/law_wardrobe = "LawDrobe", - /obj/machinery/vending/wardrobe/chap_wardrobe = "ChapDrobe", - /obj/machinery/vending/wardrobe/chem_wardrobe = "ChemDrobe", - /obj/machinery/vending/wardrobe/gene_wardrobe = "GeneDrobe", - /obj/machinery/vending/wardrobe/viro_wardrobe = "ViroDrobe", /obj/machinery/vending/clothing = "ClothesMate", - /obj/machinery/vending/medical = "NanoMed Plus", + /obj/machinery/vending/coffee = "Solar's Best Hot Drinks", + /obj/machinery/vending/cola = "Robust Softdrinks", + /obj/machinery/vending/custom = "Custom Vendor", + /obj/machinery/vending/dinnerware = "Plasteel Chef's Dinnerware Vendor", /obj/machinery/vending/drugs = "NanoDrug Plus", - /obj/machinery/vending/wallmed = "NanoMed", - /obj/machinery/vending/assist = "Part-Mart", + /obj/machinery/vending/engineering = "Robco Tool Maker", /obj/machinery/vending/engivend = "Engi-Vend", + /obj/machinery/vending/games = "\improper Good Clean Fun", /obj/machinery/vending/hydronutrients = "NutriMax", /obj/machinery/vending/hydroseeds = "MegaSeed Servitor", - /obj/machinery/vending/sustenance = "Sustenance Vendor", - /obj/machinery/vending/dinnerware = "Plasteel Chef's Dinnerware Vendor", - /obj/machinery/vending/cart = "PTech", + /obj/machinery/vending/medical = "NanoMed Plus", + /obj/machinery/vending/modularpc = "Deluxe Silicate Selections", /obj/machinery/vending/robotics = "Robotech Deluxe", - /obj/machinery/vending/engineering = "Robco Tool Maker", - /obj/machinery/vending/sovietsoda = "BODA", /obj/machinery/vending/security = "Armadyne Peacekeeper Equipment Vendor", //NOVA EDIT CHANGE - SEC_HUAL - ORIGINAL: /obj/machinery/vending/security = "SecTech", - /obj/machinery/vending/modularpc = "Deluxe Silicate Selections", + /obj/machinery/vending/snack = "Getmore Chocolate Corp", + /obj/machinery/vending/sovietsoda = "BODA", + /obj/machinery/vending/sustenance = "Sustenance Vendor", /obj/machinery/vending/tool = "YouTool", - /obj/machinery/vending/custom = "Custom Vendor", - /obj/machinery/vending/dorms = "LustWish", //NOVA EDIT CHANGE - ERP UPDATE - ORIGINAL: /obj/machinery/vending/dorms = "KinkVend" + /obj/machinery/vending/wallmed = "NanoMed", + /obj/machinery/vending/wardrobe/atmos_wardrobe = "AtmosDrobe", + /obj/machinery/vending/wardrobe/bar_wardrobe = "BarDrobe", + /obj/machinery/vending/wardrobe/cargo_wardrobe = "CargoDrobe", + /obj/machinery/vending/wardrobe/chap_wardrobe = "ChapDrobe", + /obj/machinery/vending/wardrobe/chef_wardrobe = "ChefDrobe", + /obj/machinery/vending/wardrobe/chem_wardrobe = "ChemDrobe", + /obj/machinery/vending/wardrobe/coroner_wardrobe = "MortiDrobe", + /obj/machinery/vending/wardrobe/curator_wardrobe = "CuraDrobe", + /obj/machinery/vending/wardrobe/det_wardrobe = "DetDrobe", + /obj/machinery/vending/wardrobe/engi_wardrobe = "EngiDrobe", + /obj/machinery/vending/wardrobe/gene_wardrobe = "GeneDrobe", + /obj/machinery/vending/wardrobe/hydro_wardrobe = "HyDrobe", + /obj/machinery/vending/wardrobe/jani_wardrobe = "JaniDrobe", + /obj/machinery/vending/wardrobe/law_wardrobe = "LawDrobe", + /obj/machinery/vending/wardrobe/medi_wardrobe = "MediDrobe", + /obj/machinery/vending/wardrobe/robo_wardrobe = "RoboDrobe", + /obj/machinery/vending/wardrobe/science_wardrobe = "SciDrobe", + /obj/machinery/vending/wardrobe/sec_wardrobe = "SecDrobe", + /obj/machinery/vending/wardrobe/viro_wardrobe = "ViroDrobe", /obj/machinery/vending/access/command = "Command Outfitting Station", //NOVA EDIT ADDITION /obj/machinery/vending/barbervend = "Fab-O-Vend", //NOVA EDIT ADDITION + /obj/machinery/vending/dorms = "LustWish", //NOVA EDIT CHANGE - ERP UPDATE - ORIGINAL: /obj/machinery/vending/dorms = "KinkVend" /obj/machinery/vending/imported = "NT Sustenance Supplier", //NOVA EDIT ADDITION - /obj/machinery/vending/imported/yangyu = "Fudobenda", //NOVA EDIT ADDITION /obj/machinery/vending/imported/mothic = "Nomad Fleet Ration Chit Exchange", //NOVA EDIT ADDITION - /obj/machinery/vending/imported/tiziran = "Tiziran Imported Delicacies",) //NOVA EDIT ADDITION + /obj/machinery/vending/imported/tiziran = "Tiziran Imported Delicacies", //NOVA EDIT ADDITION + /obj/machinery/vending/imported/yangyu = "Fudobenda", //NOVA EDIT ADDITION + /obj/machinery/vending/deforest_medvend = "DeForest Med-Vend", //NOVA EDIT ADDITION + ) /obj/item/circuitboard/machine/vendor/screwdriver_act(mob/living/user, obj/item/tool) var/static/list/display_vending_names_paths @@ -1564,6 +1563,36 @@ /obj/item/stack/sheet/plasteel = 2, ) +/obj/item/circuitboard/machine/brm + name = "Boulder Retrieval Matrix" + greyscale_colors = CIRCUIT_COLOR_SUPPLY + build_path = /obj/machinery/brm + req_components = list( + /datum/stock_part/capacitor = 1, + /datum/stock_part/scanning_module = 1, + /datum/stock_part/micro_laser = 1, + ) + +/obj/item/circuitboard/machine/refinery + name = "Boulder Refinery" + greyscale_colors = CIRCUIT_COLOR_SUPPLY + build_path = /obj/machinery/bouldertech/refinery + req_components = list( + /obj/item/assembly/igniter/condenser = 1, + /datum/stock_part/servo = 2, + /datum/stock_part/matter_bin = 2, + ) + +/obj/item/circuitboard/machine/smelter + name = "Boulder Smelter" + greyscale_colors = CIRCUIT_COLOR_SUPPLY + build_path = /obj/machinery/bouldertech/refinery/smelter + req_components = list( + /obj/item/assembly/igniter = 1, + /datum/stock_part/servo = 2, + /datum/stock_part/matter_bin = 2, + ) + /obj/item/circuitboard/machine/shieldwallgen name = "Shield Wall Generator" greyscale_colors = CIRCUIT_COLOR_SCIENCE diff --git a/code/game/objects/items/crayons.dm b/code/game/objects/items/crayons.dm index 3090842b65a..77cfa81c4df 100644 --- a/code/game/objects/items/crayons.dm +++ b/code/game/objects/items/crayons.dm @@ -691,12 +691,14 @@ /obj/item/storage/crayons/Initialize(mapload) . = ..() - atom_storage.set_holdable(list(/obj/item/toy/crayon), - list( + atom_storage.set_holdable( + can_hold_list = /obj/item/toy/crayon, + cant_hold_list = list( /obj/item/toy/crayon/spraycan, /obj/item/toy/crayon/mime, /obj/item/toy/crayon/rainbow, - )) + ), + ) /obj/item/storage/crayons/PopulateContents() new /obj/item/toy/crayon/red(src) @@ -936,13 +938,13 @@ var/obj/item/bodypart/limb = target if(!IS_ORGANIC_LIMB(limb)) var/list/skins = list() - var/static/list/style_list_icons = list("standard" = 'icons/mob/augmentation/augments.dmi', "engineer" = 'icons/mob/augmentation/augments_engineer.dmi', "security" = 'icons/mob/augmentation/augments_security.dmi', "mining" = 'icons/mob/augmentation/augments_mining.dmi') + var/static/list/style_list_icons = GLOB.robotic_styles_list //NOVA EDIT CHANGE - Original: var/static/list/style_list_icons = list("standard" = 'icons/mob/augmentation/augments.dmi', "engineer" = 'icons/mob/augmentation/augments_engineer.dmi', "security" = 'icons/mob/augmentation/augments_security.dmi', "mining" = 'icons/mob/augmentation/augments_mining.dmi') for(var/skin_option in style_list_icons) var/image/part_image = image(icon = style_list_icons[skin_option], icon_state = "[limb.limb_id]_[limb.body_zone]") if(limb.aux_zone) //Hands part_image.overlays += image(icon = style_list_icons[skin_option], icon_state = "[limb.limb_id]_[limb.aux_zone]") skins += list("[skin_option]" = part_image) - var/choice = show_radial_menu(user, src, skins, require_near = TRUE) + var/choice = show_radial_menu(user, src, skins, require_near = TRUE, radius = 48) //NOVA EDIT CHANGE - Increases the radius. Default is 32. if(choice && (use_charges(user, 5, requires_full = FALSE))) playsound(user.loc, 'sound/effects/spray.ogg', 5, TRUE, 5) limb.change_appearance(style_list_icons[choice], greyscale = FALSE) diff --git a/code/game/objects/items/devices/desynchronizer.dm b/code/game/objects/items/devices/desynchronizer.dm index e8ce6fe57a4..0d9791c890a 100644 --- a/code/game/objects/items/devices/desynchronizer.dm +++ b/code/game/objects/items/devices/desynchronizer.dm @@ -1,4 +1,4 @@ -/obj/item/desynchronizer //NOVA EDIT - ICON OVERRIDDEN BY AESTHETICS - SEE MODULE +/obj/item/desynchronizer name = "desynchronizer" desc = "An experimental device that can temporarily desynchronize the user from spacetime, effectively making them disappear while it's active." icon = 'icons/obj/devices/syndie_gadget.dmi' diff --git a/code/game/objects/items/devices/flashlight.dm b/code/game/objects/items/devices/flashlight.dm index f7c9b4eda7d..28f5b405821 100644 --- a/code/game/objects/items/devices/flashlight.dm +++ b/code/game/objects/items/devices/flashlight.dm @@ -19,7 +19,7 @@ slot_flags = ITEM_SLOT_BELT custom_materials = list(/datum/material/iron= SMALL_MATERIAL_AMOUNT * 0.5, /datum/material/glass= SMALL_MATERIAL_AMOUNT * 0.2) actions_types = list(/datum/action/item_action/toggle_light) - light_system = MOVABLE_LIGHT_DIRECTIONAL + light_system = OVERLAY_LIGHT_DIRECTIONAL light_range = 4 light_power = 1 light_on = FALSE @@ -76,7 +76,7 @@ /obj/item/flashlight/proc/update_brightness() update_appearance(UPDATE_ICON) - if(light_system == STATIC_LIGHT) + if(light_system == COMPLEX_LIGHT) update_light() /obj/item/flashlight/proc/toggle_light(mob/user) @@ -364,7 +364,7 @@ righthand_file = 'icons/mob/inhands/items_righthand.dmi' force = 10 light_range = 3.5 - light_system = STATIC_LIGHT + light_system = COMPLEX_LIGHT light_color = LIGHT_COLOR_FAINT_BLUE w_class = WEIGHT_CLASS_BULKY obj_flags = CONDUCTS_ELECTRICITY @@ -397,7 +397,7 @@ actions_types = list() heat = 1000 light_color = LIGHT_COLOR_FLARE - light_system = MOVABLE_LIGHT + light_system = OVERLAY_LIGHT grind_results = list(/datum/reagent/sulfur = 15) sound_on = 'sound/items/match_strike.ogg' toggle_context = FALSE @@ -656,7 +656,7 @@ righthand_file = 'icons/mob/inhands/equipment/mining_righthand.dmi' desc = "A mining lantern." light_range = 6 // luminosity when on - light_system = MOVABLE_LIGHT + light_system = OVERLAY_LIGHT /obj/item/flashlight/lantern/heirloom_moth name = "old lantern" @@ -687,7 +687,7 @@ slot_flags = ITEM_SLOT_BELT custom_materials = null light_range = 7 //luminosity when on - light_system = MOVABLE_LIGHT + light_system = OVERLAY_LIGHT /obj/item/flashlight/emp special_desc_requirement = EXAMINE_CHECK_SYNDICATE // NOVA EDIT @@ -753,7 +753,7 @@ custom_price = PAYCHECK_LOWER w_class = WEIGHT_CLASS_SMALL light_range = 4 - light_system = MOVABLE_LIGHT + light_system = OVERLAY_LIGHT color = LIGHT_COLOR_GREEN icon_state = "glowstick" base_icon_state = "glowstick" @@ -860,7 +860,7 @@ name = "disco light" desc = "Groovy..." icon_state = null - light_system = MOVABLE_LIGHT + light_system = OVERLAY_LIGHT light_range = 4 light_power = 10 alpha = 0 @@ -888,7 +888,7 @@ desc = "A strange device manufactured with mysterious elements that somehow emits darkness. Or maybe it just sucks in light? Nobody knows for sure." icon_state = "flashdark" inhand_icon_state = "flashdark" - light_system = STATIC_LIGHT //The overlay light component is not yet ready to produce darkness. + light_system = COMPLEX_LIGHT //The overlay light component is not yet ready to produce darkness. light_range = 0 ///Variable to preserve old lighting behavior in flashlights, to handle darkness. var/dark_light_range = 2.5 @@ -907,23 +907,15 @@ /obj/item/flashlight/eyelight name = "eyelight" desc = "This shouldn't exist outside of someone's head, how are you seeing this?" - light_system = MOVABLE_LIGHT + light_system = OVERLAY_LIGHT light_range = 15 light_power = 1 obj_flags = CONDUCTS_ELECTRICITY item_flags = DROPDEL actions_types = list() -/obj/item/flashlight/eyelight/adapted - name = "adaptedlight" - desc = "There is no possible way for a player to see this, so I can safely talk at length about why this exists. Adapted eyes come \ - with icons that go above the lighting layer so to make sure the red eyes that pierce the darkness are always visible we make the \ - human emit the smallest amount of light possible. Thanks for reading :)" - light_range = 1 - light_power = 0.07 - /obj/item/flashlight/eyelight/glow - light_system = MOVABLE_LIGHT_BEAM + light_system = OVERLAY_LIGHT_BEAM light_range = 4 light_power = 2 diff --git a/code/game/objects/items/devices/radio/headset.dm b/code/game/objects/items/devices/radio/headset.dm index 861dd46109a..0b8c033da14 100644 --- a/code/game/objects/items/devices/radio/headset.dm +++ b/code/game/objects/items/devices/radio/headset.dm @@ -326,6 +326,7 @@ GLOBAL_LIST_INIT(channel_tokens, list( /obj/item/radio/headset/headset_cent/commander keyslot2 = /obj/item/encryptionkey/heads/captain + command = TRUE /obj/item/radio/headset/headset_cent/alt name = "\improper CentCom bowman headset" diff --git a/code/game/objects/items/devices/radio/radio.dm b/code/game/objects/items/devices/radio/radio.dm index 7a79688e5b5..f5e8eb0c8f3 100644 --- a/code/game/objects/items/devices/radio/radio.dm +++ b/code/game/objects/items/devices/radio/radio.dm @@ -285,6 +285,12 @@ if(use_command) spans |= SPAN_COMMAND + var/radio_message = message + if(LAZYACCESS(message_mods, WHISPER_MODE)) + // Radios don't pick up whispers very well + radio_message = stars(radio_message) + spans |= SPAN_ITALICS + flick_overlay_view(overlay_mic_active, 5 SECONDS) /* @@ -317,7 +323,7 @@ var/atom/movable/virtualspeaker/speaker = new(null, talking_movable, src) // Construct the signal - var/datum/signal/subspace/vocal/signal = new(src, freq, speaker, language, message, spans, message_mods) + var/datum/signal/subspace/vocal/signal = new(src, freq, speaker, language, radio_message, spans, message_mods) // Independent radios, on the CentCom frequency, reach all independent radios if (independent && (freq == FREQ_CENTCOM || freq == FREQ_CTF_RED || freq == FREQ_CTF_BLUE || freq == FREQ_CTF_GREEN || freq == FREQ_CTF_YELLOW || freq == FREQ_FACTION || freq == FREQ_CYBERSUN || freq == FREQ_INTERDYNE || freq == FREQ_GUILD || freq == FREQ_TARKON || freq == FREQ_SOLFED)) //NOVA EDIT CHANGE - FACTION, MAPPING, SOLFED @@ -354,6 +360,13 @@ if(radio_freq || !broadcasting || get_dist(src, speaker) > canhear_range) return var/filtered_mods = list() + + if (message_mods[MODE_SING]) + filtered_mods[MODE_SING] = message_mods[MODE_SING] + if (message_mods[WHISPER_MODE]) + filtered_mods[WHISPER_MODE] = message_mods[WHISPER_MODE] + if (message_mods[SAY_MOD_VERB]) + filtered_mods[SAY_MOD_VERB] = message_mods[SAY_MOD_VERB] if (message_mods[MODE_CUSTOM_SAY_EMOTE]) filtered_mods[MODE_CUSTOM_SAY_EMOTE] = message_mods[MODE_CUSTOM_SAY_EMOTE] filtered_mods[MODE_CUSTOM_SAY_ERASE_INPUT] = message_mods[MODE_CUSTOM_SAY_ERASE_INPUT] diff --git a/code/game/objects/items/devices/scanners/health_analyzer.dm b/code/game/objects/items/devices/scanners/health_analyzer.dm index 207a8b96533..7d9f93e7e4b 100644 --- a/code/game/objects/items/devices/scanners/health_analyzer.dm +++ b/code/game/objects/items/devices/scanners/health_analyzer.dm @@ -2,10 +2,6 @@ #define SCANMODE_HEALTH 0 #define SCANMODE_WOUND 1 #define SCANMODE_COUNT 2 // Update this to be the number of scan modes if you add more -#define SCANNER_CONDENSED 0 -#define SCANNER_VERBOSE 1 -// Not updating above count because you're not meant to switch to this mode. -#define SCANNER_NO_MODE -1 /obj/item/healthanalyzer name = "health analyzer" @@ -386,11 +382,19 @@ var/datum/reagent/R = GLOB.chemical_reagents_list[blood_id] blood_type = R ? R.name : blood_id if(carbontarget.blood_volume <= BLOOD_VOLUME_SAFE && carbontarget.blood_volume > BLOOD_VOLUME_OKAY) - render_list += "Blood level: LOW [blood_percent] %, [carbontarget.blood_volume] cl, [span_info("type: [blood_type]")]\n" + render_list += "Blood level: LOW [blood_percent]%, [carbontarget.blood_volume] cl, [span_info("type: [blood_type]")]\n" else if(carbontarget.blood_volume <= BLOOD_VOLUME_OKAY) - render_list += "Blood level: CRITICAL [blood_percent] %, [carbontarget.blood_volume] cl, [span_info("type: [blood_type]")]\n" + render_list += "Blood level: CRITICAL [blood_percent]%, [carbontarget.blood_volume] cl, [span_info("type: [blood_type]")]\n" else - render_list += "Blood level: [blood_percent] %, [carbontarget.blood_volume] cl, type: [blood_type]\n" + render_list += "Blood level: [blood_percent]%, [carbontarget.blood_volume] cl, type: [blood_type]\n" + + // Blood Alcohol Content + var/blood_alcohol_content = target.get_blood_alcohol_content() + if(blood_alcohol_content > 0) + if(blood_alcohol_content >= 0.24) + render_list += "Blood alcohol content: CRITICAL [blood_alcohol_content]%\n" + else + render_list += "Blood alcohol content: [blood_alcohol_content]%\n" // Cybernetics if(iscarbon(target)) @@ -701,9 +705,6 @@ #undef SCANMODE_HEALTH #undef SCANMODE_WOUND #undef SCANMODE_COUNT -#undef SCANNER_CONDENSED -#undef SCANNER_VERBOSE -#undef SCANNER_NO_MODE #undef AID_EMOTION_NEUTRAL #undef AID_EMOTION_HAPPY diff --git a/code/game/objects/items/devices/taperecorder.dm b/code/game/objects/items/devices/taperecorder.dm index f15f2eb72e0..985d2761a02 100644 --- a/code/game/objects/items/devices/taperecorder.dm +++ b/code/game/objects/items/devices/taperecorder.dm @@ -63,6 +63,8 @@ /obj/item/taperecorder/AltClick(mob/user) . = ..() + if(!can_interact(user)) + return play() /obj/item/taperecorder/proc/update_available_icons() diff --git a/code/game/objects/items/devices/traitordevices.dm b/code/game/objects/items/devices/traitordevices.dm index 99322597b4b..ce1245098c8 100644 --- a/code/game/objects/items/devices/traitordevices.dm +++ b/code/game/objects/items/devices/traitordevices.dm @@ -410,7 +410,7 @@ effective or pretty fucking useless. balloon_alert(user, "repaired!") -/obj/machinery/porta_turret/syndicate/toolbox/deconstruct(disassembled) +/obj/machinery/porta_turret/syndicate/toolbox/on_deconstruction(disassembled) if(disassembled) var/atom/movable/old_toolbox = toolbox toolbox = null diff --git a/code/game/objects/items/dice.dm b/code/game/objects/items/dice.dm index 8fe83e2e380..2ef6c4e7aa8 100644 --- a/code/game/objects/items/dice.dm +++ b/code/game/objects/items/dice.dm @@ -13,7 +13,7 @@ /obj/item/storage/dice/Initialize(mapload) . = ..() atom_storage.allow_quick_gather = TRUE - atom_storage.set_holdable(list(/obj/item/dice)) + atom_storage.set_holdable(/obj/item/dice) /obj/item/storage/dice/PopulateContents() new /obj/item/dice/d4(src) diff --git a/code/game/objects/items/dualsaber.dm b/code/game/objects/items/dualsaber.dm index 04b95f1049b..7d5bc0b9528 100644 --- a/code/game/objects/items/dualsaber.dm +++ b/code/game/objects/items/dualsaber.dm @@ -17,7 +17,7 @@ w_class = WEIGHT_CLASS_SMALL hitsound = SFX_SWING_HIT armour_penetration = 35 - light_system = MOVABLE_LIGHT + light_system = OVERLAY_LIGHT light_range = 6 //TWICE AS BRIGHT AS A REGULAR ESWORD light_color = LIGHT_COLOR_ELECTRIC_GREEN light_on = FALSE diff --git a/code/game/objects/items/etherealdiscoball.dm b/code/game/objects/items/etherealdiscoball.dm index 0b8183a7237..0a95e4bbc73 100644 --- a/code/game/objects/items/etherealdiscoball.dm +++ b/code/game/objects/items/etherealdiscoball.dm @@ -31,6 +31,9 @@ /obj/structure/etherealball/attack_hand(mob/living/carbon/human/user, list/modifiers) . = ..() + if(!can_interact(user)) + return + if(TurnedOn) TurnOff() to_chat(user, span_notice("You turn the disco ball off!")) @@ -58,7 +61,7 @@ /obj/structure/etherealball/proc/DiscoFever() remove_atom_colour(TEMPORARY_COLOUR_PRIORITY) current_color = random_color() - set_light(range, power, current_color) + set_light(range, power, "#[current_color]") add_atom_colour("#[current_color]", FIXED_COLOUR_PRIORITY) update_appearance() TimerID = addtimer(CALLBACK(src, PROC_REF(DiscoFever)), 5, TIMER_STOPPABLE) //Call ourselves every 0.5 seconds to change colors diff --git a/code/game/objects/items/flamethrower.dm b/code/game/objects/items/flamethrower.dm index b7896c64381..1a31c5d58a2 100644 --- a/code/game/objects/items/flamethrower.dm +++ b/code/game/objects/items/flamethrower.dm @@ -15,7 +15,7 @@ custom_materials = list(/datum/material/iron= HALF_SHEET_MATERIAL_AMOUNT * 0.5) resistance_flags = FIRE_PROOF trigger_guard = TRIGGER_GUARD_NORMAL - light_system = MOVABLE_LIGHT + light_system = OVERLAY_LIGHT light_on = FALSE var/status = FALSE var/lit = FALSE //on or off diff --git a/code/game/objects/items/food/cake.dm b/code/game/objects/items/food/cake.dm index 07d5818b466..0b443554bb3 100644 --- a/code/game/objects/items/food/cake.dm +++ b/code/game/objects/items/food/cake.dm @@ -288,16 +288,23 @@ tastes = list("cake" = 3, "a Vlad's Salad" = 1) crafting_complexity = FOOD_COMPLEXITY_4 -/obj/item/food/cakeslice/birthday/energy/proc/energy_bite(mob/living/user) - to_chat(user, "As you eat the cake slice, you accidentally hurt yourself on the embedded energy dagger!") - user.apply_damage(18, BRUTE, BODY_ZONE_HEAD) - playsound(user, 'sound/weapons/blade1.ogg', 5, TRUE) +/obj/item/food/cakeslice/birthday/energy/Initialize(mapload) + . = ..() + RegisterSignal(src, COMSIG_FOOD_EATEN, PROC_REF(bite_taken)) /obj/item/food/cakeslice/birthday/energy/attack(mob/living/target_mob, mob/living/user) - . = ..() if(HAS_TRAIT(user, TRAIT_PACIFISM) && target_mob != user) //Prevents pacifists from attacking others directly - return - energy_bite(target_mob, user) + balloon_alert(user, "that's dangerous!") + return FALSE + return ..() + +/obj/item/food/cakeslice/birthday/energy/proc/bite_taken(datum/source, mob/living/eater, mob/living/feeder) + SIGNAL_HANDLER + to_chat(eater, "As you eat the cake slice, you accidentally hurt yourself on the embedded energy dagger!") + if(eater != feeder) + log_combat(feeder, eater, "fed an energy cake to", src) + eater.apply_damage(18, BRUTE, BODY_ZONE_HEAD) + playsound(eater, 'sound/weapons/blade1.ogg', 5, TRUE) /obj/item/food/cake/apple name = "apple cake" diff --git a/code/game/objects/items/food/martian.dm b/code/game/objects/items/food/martian.dm index 9dfa7cb5a01..2441ac0f674 100644 --- a/code/game/objects/items/food/martian.dm +++ b/code/game/objects/items/food/martian.dm @@ -975,7 +975,7 @@ /datum/reagent/consumable/garlic = 1, ) tastes = list("yoghurt" = 1, "garlic" = 1, "lemon" = 1, "egg" = 1, "chilli heat" = 1) - foodtypes = DAIRY | VEGETABLES | FRUIT | BREAKFAST + foodtypes = DAIRY | VEGETABLES | MEAT | BREAKFAST w_class = WEIGHT_CLASS_SMALL crafting_complexity = FOOD_COMPLEXITY_3 diff --git a/code/game/objects/items/food/meatdish.dm b/code/game/objects/items/food/meatdish.dm index b928a460abb..b9a6c34df04 100644 --- a/code/game/objects/items/food/meatdish.dm +++ b/code/game/objects/items/food/meatdish.dm @@ -750,6 +750,19 @@ foodtypes = MEAT | SUGAR crafting_complexity = FOOD_COMPLEXITY_2 +///Special private component to handle how bbq is grilled, not meant to be used anywhere else +/datum/component/grillable/bbq + +/datum/component/grillable/bbq/finish_grilling(atom/grill_source) + //when on a grill allow it to roast without deleting itself + if(istype(grill_source, /obj/machinery/grill)) + grill_source.visible_message(span_notice("[parent] is grilled to perfection!")) + else //when on a girddle allow it to burn into an mouldy mess + return ..() + +/obj/item/food/bbqribs/make_grillable() + AddComponent(/datum/component/grillable/bbq, /obj/item/food/badrecipe, rand(30 SECONDS, 40 SECONDS), FALSE) + /obj/item/food/meatclown name = "meat clown" desc = "A delicious, round piece of meat clown. How horrifying." diff --git a/code/game/objects/items/food/moth.dm b/code/game/objects/items/food/moth.dm index df9207da7e0..b2d9dfdb8fe 100644 --- a/code/game/objects/items/food/moth.dm +++ b/code/game/objects/items/food/moth.dm @@ -419,6 +419,7 @@ they do eventually go bad- prompting them to be sold as surplus by the fleet. This particular one is, like most artificially-flavoured moth food, mixed-herb flavoured." icon = 'icons/obj/food/moth.dmi' icon_state = "sustenance_bar" + trash_type = /obj/item/trash/fleet_ration food_reagents = list(/datum/reagent/consumable/nutriment = 20) tastes = list("herbs" = 1) foodtypes = VEGETABLES | GRAIN @@ -756,7 +757,7 @@ /datum/reagent/consumable/nutriment/vitamin = 5, ) tastes = list("crust" = 1, "pesto" = 1, "cheese" = 1) - foodtypes = GRAIN | VEGETABLES | DAIRY | NUTS | RAW + foodtypes = GRAIN | VEGETABLES | DAIRY | NUTS slice_type = /obj/item/food/pizzaslice/mothic_pesto boxtag = "Presto Pesto" crafting_complexity = FOOD_COMPLEXITY_5 diff --git a/code/game/objects/items/food/pastries.dm b/code/game/objects/items/food/pastries.dm index dfebfd356cb..277e6efaff8 100644 --- a/code/game/objects/items/food/pastries.dm +++ b/code/game/objects/items/food/pastries.dm @@ -372,6 +372,8 @@ var/list/prefill_flavours /obj/item/food/icecream/New(loc, list/prefill_flavours) + if(ingredients) + ingredients_text = "Requires: [reagent_paths_list_to_text(ingredients)]" return ..() /obj/item/food/icecream/Initialize(mapload, list/prefill_flavours) diff --git a/code/game/objects/items/frog_statue.dm b/code/game/objects/items/frog_statue.dm index 4d1bf9b6aa5..34c491d9dd7 100644 --- a/code/game/objects/items/frog_statue.dm +++ b/code/game/objects/items/frog_statue.dm @@ -1,7 +1,7 @@ #define STATUE_FILTER "statue_filter" #define FILTER_COLOR "#34b347" #define RECALL_DURATION 3 SECONDS -#define MINIMUM_COLOR_VALUE 60 +#define MINIMUM_COLOR_VALUE 20 /obj/item/frog_statue name = "frog statue" @@ -151,8 +151,8 @@ to_chat(user, span_warning("Please choose a valid color.")) select_frog_color(user, new_frog) return - var/temp_hsv = RGBtoHSV(frog_color) - if(ReadHSV(temp_hsv)[3] < MINIMUM_COLOR_VALUE) + var/list/hsv_frog = rgb2hsv(frog_color) + if(hsv_frog[3] < MINIMUM_COLOR_VALUE) to_chat(user, span_danger("This color is too dark!")) select_frog_color(user, new_frog) return diff --git a/code/game/objects/items/granters/magic/mime.dm b/code/game/objects/items/granters/magic/mime.dm index 6e6bc03dc98..73b218ec66b 100644 --- a/code/game/objects/items/granters/magic/mime.dm +++ b/code/game/objects/items/granters/magic/mime.dm @@ -3,6 +3,7 @@ desc = "The missing entry into the legendary saga. Unfortunately it doesn't teach you anything." icon_state ="bookmime" remarks = list("...") + book_sounds = list('sound/effects/space_wind.ogg') /obj/item/book/granter/action/spell/mime/attack_self(mob/user) . = ..() diff --git a/code/game/objects/items/granters/martial_arts/_martial_arts.dm b/code/game/objects/items/granters/martial_arts/_martial_arts.dm index 7646faec2c6..b7d186c99c0 100644 --- a/code/game/objects/items/granters/martial_arts/_martial_arts.dm +++ b/code/game/objects/items/granters/martial_arts/_martial_arts.dm @@ -9,7 +9,7 @@ /obj/item/book/granter/martial/can_learn(mob/user) if(!martial) CRASH("Someone attempted to learn [type], which did not have a martial arts set.") - if(user.mind.has_martialart(initial(martial.id))) + if(istype(user.mind?.martial_art, martial)) to_chat(user, span_warning("You already know [martial_name]!")) return FALSE return TRUE @@ -19,7 +19,12 @@ return TRUE /obj/item/book/granter/martial/on_reading_finished(mob/user) - to_chat(user, "[greet]") var/datum/martial_art/martial_to_learn = new martial() - martial_to_learn.teach(user) + if(!martial_to_learn.teach(user)) + to_chat(user, span_warning("You attempt to learn [martial_name] from [src], \ + but your current knowledge of martial arts conflicts with the new style, so it just doesn't stick with you.")) + uses += 1 // Return the use + return + + to_chat(user, "[greet]") user.log_message("learned the martial art [martial_name] ([martial_to_learn])", LOG_ATTACK, color = "orange") diff --git a/code/game/objects/items/granters/martial_arts/cqc.dm b/code/game/objects/items/granters/martial_arts/cqc.dm index 697541e0216..b2191997586 100644 --- a/code/game/objects/items/granters/martial_arts/cqc.dm +++ b/code/game/objects/items/granters/martial_arts/cqc.dm @@ -10,7 +10,7 @@ "Lock... Kick...", "Strike their abdomen, neck and back for critical damage...", "Slam... Lock...", - "I could probably combine this with some other martial arts!", + "I could probably combine this with some other martial arts! ...Wait, that's illegal.", "Words that kill...", "The last and final moment is yours...", ) diff --git a/code/game/objects/items/granters/oragami.dm b/code/game/objects/items/granters/oragami.dm index 0b7d6d92615..0691349756c 100644 --- a/code/game/objects/items/granters/oragami.dm +++ b/code/game/objects/items/granters/oragami.dm @@ -21,11 +21,13 @@ check_flags = NONE /datum/action/innate/origami/Activate() + ADD_TRAIT(owner, TRAIT_PAPER_MASTER, ACTION_TRAIT) to_chat(owner, span_notice("You will now fold origami planes.")) active = TRUE build_all_button_icons(UPDATE_BUTTON_ICON) /datum/action/innate/origami/Deactivate() + REMOVE_TRAIT(owner, TRAIT_PAPER_MASTER, ACTION_TRAIT) to_chat(owner, span_notice("You will no longer fold origami planes.")) active = FALSE build_all_button_icons(UPDATE_BUTTON_ICON) diff --git a/code/game/objects/items/grenades/emgrenade.dm b/code/game/objects/items/grenades/emgrenade.dm index 42dc891b7e5..24123eb7bc4 100644 --- a/code/game/objects/items/grenades/emgrenade.dm +++ b/code/game/objects/items/grenades/emgrenade.dm @@ -1,4 +1,4 @@ -/obj/item/grenade/empgrenade//NOVA EDIT - ICON OVERRIDEN BY AESTHETICS - SEE MODULE +/obj/item/grenade/empgrenade //NOVA EDIT - ICON OVERRIDEN BY AESTHETICS - SEE MODULE name = "classic EMP grenade" desc = "It is designed to wreak havoc on electronic systems." icon_state = "emp" diff --git a/code/game/objects/items/hand_items.dm b/code/game/objects/items/hand_items.dm index c6dc9cb7a2f..2255afe1054 100644 --- a/code/game/objects/items/hand_items.dm +++ b/code/game/objects/items/hand_items.dm @@ -219,9 +219,9 @@ /obj/item/hand_item/slapper/attack(mob/living/slapped, mob/living/carbon/human/user) SEND_SIGNAL(user, COMSIG_LIVING_SLAP_MOB, slapped) - if(ishuman(slapped)) - var/mob/living/carbon/human/human_slapped = slapped - SEND_SIGNAL(human_slapped, COMSIG_ORGAN_WAG_TAIL, FALSE) + if(iscarbon(slapped)) + var/mob/living/carbon/potential_tailed = slapped + potential_tailed.unwag_tail() user.do_attack_animation(slapped) var/slap_volume = 50 diff --git a/code/game/objects/items/handcuffs.dm b/code/game/objects/items/handcuffs.dm index d923d4258f0..e00a2aa61f3 100644 --- a/code/game/objects/items/handcuffs.dm +++ b/code/game/objects/items/handcuffs.dm @@ -46,7 +46,9 @@ throw_range = 5 custom_materials = list(/datum/material/iron= SMALL_MATERIAL_AMOUNT * 5) breakouttime = 1 MINUTES - var/handcuff_time = 3 SECONDS + var/handcuff_time = 4 SECONDS + ///Multiplier for handcuff time + var/handcuff_time_mod = 1 armor_type = /datum/armor/restraints_handcuffs custom_price = PAYCHECK_COMMAND * 0.35 ///Sound that plays when starting to put handcuffs on someone @@ -80,6 +82,11 @@ apply_cuffs(user,user) return + if(HAS_TRAIT(user, TRAIT_FAST_CUFFING)) + handcuff_time_mod = 0.75 + else + handcuff_time_mod = 1 + if(!C.handcuffed) if(C.canBeHandcuffed()) C.visible_message(span_danger("[user] is trying to put [src] on [C]!"), \ @@ -88,7 +95,7 @@ to_chat(C, span_userdanger("As you feel someone grab your wrists, [src] start digging into your skin!")) playsound(loc, cuffsound, 30, TRUE, -2) log_combat(user, C, "attempted to handcuff") - if(do_after(user, handcuff_time, C, timed_action_flags = IGNORE_SLOWDOWNS) && C.canBeHandcuffed()) + if(do_after(user, handcuff_time * handcuff_time_mod, C, timed_action_flags = IGNORE_SLOWDOWNS) && C.canBeHandcuffed()) if(iscyborg(user)) apply_cuffs(C, user, TRUE) else diff --git a/code/game/objects/items/implants/implant_clown.dm b/code/game/objects/items/implants/implant_clown.dm index cc5b52781b0..515a1b4d312 100644 --- a/code/game/objects/items/implants/implant_clown.dm +++ b/code/game/objects/items/implants/implant_clown.dm @@ -4,11 +4,9 @@ actions_types = null /obj/item/implant/sad_trombone/get_data() - var/dat = {"Implant Specifications:
- Name: Honk Co. Sad Trombone Implant
- Life: Activates upon death.
- "} - return dat + return "Implant Specifications:
\ + Name: Honk Co. Sad Trombone Implant
\ + Life: Activates upon death.
" /obj/item/implant/sad_trombone/implant(mob/living/target, mob/user, silent = FALSE, force = FALSE) . = ..() diff --git a/code/game/objects/items/implants/implant_explosive.dm b/code/game/objects/items/implants/implant_explosive.dm index 29627f377f2..25966a24c68 100644 --- a/code/game/objects/items/implants/implant_explosive.dm +++ b/code/game/objects/items/implants/implant_explosive.dm @@ -45,16 +45,14 @@ INVOKE_ASYNC(src, PROC_REF(activate), "death") /obj/item/implant/explosive/get_data() - var/dat = {"Implant Specifications:
- Name: Robust Corp RX-78 Employee Management Implant
- Life: Activates upon death.
- Important Notes: Explodes
-
- Implant Details:
- Function: Contains a compact, electrically detonated explosive that detonates upon receiving a specially encoded signal or upon host death.
- Special Features: Explodes
- "} - return dat + return "Implant Specifications:
\ + Name: Robust Corp RX-78 Employee Management Implant
\ + Life: Activates upon death.
\ + Important Notes: Explodes
\ +
\ + Implant Details:
\ + Function: Contains a compact, electrically detonated explosive that detonates upon receiving a specially encoded signal or upon host death.
\ + Special Features: Explodes
" /obj/item/implant/explosive/activate(cause) . = ..() diff --git a/code/game/objects/items/implants/implant_freedom.dm b/code/game/objects/items/implants/implant_freedom.dm index 7185695cb2a..4bce618ede9 100644 --- a/code/game/objects/items/implants/implant_freedom.dm +++ b/code/game/objects/items/implants/implant_freedom.dm @@ -17,30 +17,41 @@ /obj/item/implant/freedom/activate() . = ..() var/mob/living/carbon/carbon_imp_in = imp_in - if(!carbon_imp_in.handcuffed && !carbon_imp_in.legcuffed) + if(!can_trigger(carbon_imp_in)) balloon_alert(carbon_imp_in, "no restraints!") return uses-- carbon_imp_in.uncuff() + var/obj/item/clothing/shoes/shoes = carbon_imp_in.shoes + if(istype(shoes) && shoes.tied == SHOES_KNOTTED) + shoes.adjust_laces(SHOES_TIED, carbon_imp_in) + if(!uses) addtimer(CALLBACK(carbon_imp_in, TYPE_PROC_REF(/atom, balloon_alert), carbon_imp_in, "implant degraded!"), 1 SECONDS) qdel(src) +/obj/item/implant/freedom/proc/can_trigger(mob/living/carbon/implanted_in) + if(implanted_in.handcuffed || implanted_in.legcuffed) + return TRUE + + var/obj/item/clothing/shoes/shoes = implanted_in.shoes + if(istype(shoes) && shoes.tied == SHOES_KNOTTED) + return TRUE + + return FALSE + /obj/item/implant/freedom/get_data() - var/dat = {" - Implant Specifications:
- Name: Freedom Beacon
- Life: Optimum [initial(uses)] uses
- Important Notes: Illegal
-
- Implant Details:
- Function: Transmits a specialized cluster of signals to override handcuff locking - mechanisms. These signals will release any bindings on both the arms and legs.
- Disclaimer: Heavy-duty restraints such as straightjackets are deemed "too complex" to release from. - "} - return dat + return "Implant Specifications:
\ + Name: Freedom Beacon
\ + Life: Optimum [initial(uses)] uses
\ + Important Notes: Illegal
\ +
\ + Implant Details:
\ + Function: Transmits a specialized cluster of signals to override handcuff locking \ + mechanisms. These signals will release any bindings on both the arms and legs.
\ + Disclaimer: Heavy-duty restraints such as straightjackets are deemed \"too complex\" to release from." /obj/item/implanter/freedom name = "implanter" // NOVA EDIT , was implanter (freedom) diff --git a/code/game/objects/items/implants/implant_krav_maga.dm b/code/game/objects/items/implants/implant_krav_maga.dm index fa3ccd1ccb2..4d921269beb 100644 --- a/code/game/objects/items/implants/implant_krav_maga.dm +++ b/code/game/objects/items/implants/implant_krav_maga.dm @@ -3,7 +3,7 @@ desc = "Teaches you the arts of Krav Maga in 5 short instructional videos beamed directly into your eyeballs." icon = 'icons/obj/scrolls.dmi' icon_state ="scroll2" - var/datum/martial_art/krav_maga/style = new + var/datum/martial_art/krav_maga/style /obj/item/implant/krav_maga/get_data() var/dat = {"Implant Specifications:
@@ -13,17 +13,23 @@ Function: Teaches even the clumsiest host the arts of Krav Maga."} return dat +/obj/item/implant/krav_maga/Initialize(mapload) + . = ..() + style = new() + style.allow_temp_override = FALSE + +/obj/item/implant/krav_maga/Destroy() + QDEL_NULL(style) + return ..() + /obj/item/implant/krav_maga/activate() . = ..() - var/mob/living/carbon/human/H = imp_in - if(!ishuman(H)) + if(isnull(imp_in.mind)) return - if(!H.mind) + if(style.fully_remove(imp_in)) return - if(H.mind.has_martialart(MARTIALART_KRAVMAGA)) - style.remove(H) - else - style.teach(H,1) + + style.teach(imp_in, TRUE) /obj/item/implanter/krav_maga name = "implanter (krav maga)" diff --git a/code/game/objects/items/implants/implant_mindshield.dm b/code/game/objects/items/implants/implant_mindshield.dm index 33bfafbbbdd..67b1f4c6d92 100644 --- a/code/game/objects/items/implants/implant_mindshield.dm +++ b/code/game/objects/items/implants/implant_mindshield.dm @@ -4,16 +4,15 @@ actions_types = null /obj/item/implant/mindshield/get_data() - var/dat = {"Implant Specifications:
- Name: Nanotrasen Employee Management Implant
- Life: Ten years.
- Important Notes: Personnel injected with this device are much more resistant to brainwashing.
-
- Implant Details:
- Function: Contains a small pod of nanobots that protects the host's mental functions from manipulation.
- Special Features: Will prevent and cure most forms of brainwashing.
- Integrity: Implant will last so long as the nanobots are inside the bloodstream."} - return dat + return "Implant Specifications:
\ + Name: Nanotrasen Employee Management Implant
\ + Life: Ten years.
\ + Important Notes: Personnel injected with this device are much more resistant to brainwashing.
\ +
\ + Implant Details:
\ + Function: Contains a small pod of nanobots that protects the host's mental functions from manipulation.
\ + Special Features: Will prevent and cure most forms of brainwashing.
\ + Integrity: Implant will last so long as the nanobots are inside the bloodstream." /obj/item/implant/mindshield/implant(mob/living/target, mob/user, silent = FALSE, force = FALSE) diff --git a/code/game/objects/items/implants/implant_misc.dm b/code/game/objects/items/implants/implant_misc.dm index da83974c237..dddbefd0baf 100644 --- a/code/game/objects/items/implants/implant_misc.dm +++ b/code/game/objects/items/implants/implant_misc.dm @@ -5,12 +5,11 @@ actions_types = null /obj/item/implant/weapons_auth/get_data() - var/dat = {"Implant Specifications:
- Name: Firearms Authentication Implant
- Life: 4 hours after death of host
- Implant Details:
- Function: Allows operation of implant-locked weaponry, preventing equipment from falling into enemy hands."} - return dat + return "Implant Specifications:
\ + Name: Firearms Authentication Implant
\ + Life: 4 hours after death of host
\ + Implant Details:
\ + Function: Allows operation of implant-locked weaponry, preventing equipment from falling into enemy hands." /obj/item/implant/emp name = "emp implant" @@ -77,11 +76,10 @@ subspace_transmission = TRUE /obj/item/implant/radio/get_data() - var/dat = {"Implant Specifications:
- Name: Internal Radio Implant
- Life: 24 hours
- Implant Details: Allows user to use an internal radio, useful if user expects equipment loss, or cannot equip conventional radios."} - return dat + return "Implant Specifications:
\ + Name: Internal Radio Implant
\ + Life: 24 hours
\ + Implant Details: Allows user to use an internal radio, useful if user expects equipment loss, or cannot equip conventional radios." /obj/item/implanter/radio name = "implanter (internal radio)" diff --git a/code/game/objects/items/implants/implant_spell.dm b/code/game/objects/items/implants/implant_spell.dm index 8005e1c56e9..a758cb72ac0 100644 --- a/code/game/objects/items/implants/implant_spell.dm +++ b/code/game/objects/items/implants/implant_spell.dm @@ -25,12 +25,11 @@ return ..() /obj/item/implant/spell/get_data() - var/dat = {"Implant Specifications:
- Name: Spell Implant
- Life: 4 hours after death of host
- Implant Details:
- Function: [spell_to_give ? "Allows a non-wizard to cast [spell_to_give] as if they were a wizard." : "None."]"} - return dat + return "Implant Specifications:
\ + Name: Spell Implant
\ + Life: 4 hours after death of host
\ + Implant Details:
\ + Function: [spell_to_give ? "Allows a non-wizard to cast [spell_to_give] as if they were a wizard." : "None."]" /obj/item/implant/spell/implant(mob/living/target, mob/user, silent = FALSE, force = FALSE) . = ..() diff --git a/code/game/objects/items/implants/implant_storage.dm b/code/game/objects/items/implants/implant_storage.dm index 76f6b2547f7..df83170be28 100644 --- a/code/game/objects/items/implants/implant_storage.dm +++ b/code/game/objects/items/implants/implant_storage.dm @@ -19,7 +19,7 @@ atom_storage.remove_all() implantee.visible_message(span_warning("A bluespace pocket opens around [src] as it exits [implantee], spewing out its contents and rupturing the surrounding tissue!")) implantee.apply_damage(20, BRUTE, BODY_ZONE_CHEST) - qdel(atom_storage) + QDEL_NULL(atom_storage) return ..() /obj/item/implant/storage/implant(mob/living/target, mob/user, silent = FALSE, force = FALSE) diff --git a/code/game/objects/items/implants/implantpad.dm b/code/game/objects/items/implants/implantpad.dm index ab899c3f048..84abcef3c10 100644 --- a/code/game/objects/items/implants/implantpad.dm +++ b/code/game/objects/items/implants/implantpad.dm @@ -3,76 +3,87 @@ desc = "Used to modify implants." icon = 'icons/obj/devices/tool.dmi' icon_state = "implantpad-0" + base_icon_state = "implantpad" inhand_icon_state = "electronic" lefthand_file = 'icons/mob/inhands/items/devices_lefthand.dmi' righthand_file = 'icons/mob/inhands/items/devices_righthand.dmi' throw_speed = 3 throw_range = 5 w_class = WEIGHT_CLASS_SMALL - var/obj/item/implantcase/case = null + + ///The implant case currently inserted into the pad. + var/obj/item/implantcase/inserted_case /obj/item/implantpad/update_icon_state() - icon_state = "implantpad-[!QDELETED(case)]" + icon_state = "[base_icon_state]-[!isnull(inserted_case)]" return ..() /obj/item/implantpad/examine(mob/user) . = ..() + if(!inserted_case) + . += span_info("It is currently empty.") + return + if(Adjacent(user)) - . += "It [case ? "contains \a [case]" : "is currently empty"]." - if(case) - . += span_info("Alt-click to remove [case].") + . += span_info("It contains \a [inserted_case].") else - if(case) - . += span_warning("There seems to be something inside it, but you can't quite tell what from here...") + . += span_warning("There seems to be something inside it, but you can't quite tell what from here...") + . += span_info("Alt-click to remove [inserted_case].") /obj/item/implantpad/Exited(atom/movable/gone, direction) . = ..() - if(gone == case) - case = null - update_appearance() - updateSelfDialog() + if(gone == inserted_case) + inserted_case = null + update_appearance(UPDATE_ICON) + +/obj/item/implantpad/attackby(obj/item/implantcase/attacking_item, mob/user, params) + if(inserted_case || !istype(attacking_item)) + return ..() + if(!user.transferItemToLoc(attacking_item, src)) + return + user.balloon_alert(user, "case inserted") + inserted_case = attacking_item + update_static_data_for_all_viewers() + update_appearance(UPDATE_ICON) /obj/item/implantpad/AltClick(mob/user) - ..() + . = ..() if(!user.can_perform_action(src, FORBID_TELEKINESIS_REACH)) return - if(!case) - to_chat(user, span_warning("There's no implant to remove from [src].")) - return + remove_implant(user) - user.put_in_hands(case) +/obj/item/implantpad/ui_interact(mob/user, datum/tgui/ui) + ui = SStgui.try_update_ui(user, src, ui) + if (!ui) + ui = new(user, src, "ImplantPad", name) + ui.open() - add_fingerprint(user) - case.add_fingerprint(user) +/obj/item/implantpad/ui_static_data(mob/user) + var/list/data = list() + data["has_case"] = !!inserted_case + if(!inserted_case) + return data + data["has_implant"] = !!inserted_case.imp + if(inserted_case.imp) + data["case_information"] = inserted_case.imp.get_data() + return data - updateSelfDialog() - update_appearance() - -/obj/item/implantpad/attackby(obj/item/implantcase/C, mob/user, params) - if(istype(C, /obj/item/implantcase) && !case) - if(!user.transferItemToLoc(C, src)) - return - case = C - updateSelfDialog() - update_appearance() - else - return ..() - -/obj/item/implantpad/ui_interact(mob/user) - if(!user.can_perform_action(src, FORBID_TELEKINESIS_REACH)) - user.unset_machine(src) - user << browse(null, "window=implantpad") +/obj/item/implantpad/ui_act(action, list/params, datum/tgui/ui, datum/ui_state/state) + . = ..() + var/mob/user = usr + if(action == "eject_implant") + remove_implant(user) return - user.set_machine(src) - var/dat = "Implant Mini-Computer:
" - if(case) - if(case.imp) - if(istype(case.imp, /obj/item/implant)) - dat += case.imp.get_data() - else - dat += "The implant casing is empty." - else - dat += "Please insert an implant casing!" - user << browse(dat, "window=implantpad") - onclose(user, "implantpad") +///Removes the implant from the pad and puts it in the user's hands if possible. +/obj/item/implantpad/proc/remove_implant(mob/user) + if(!inserted_case) + user.balloon_alert(user, "no case inside!") + return FALSE + add_fingerprint(user) + inserted_case.add_fingerprint(user) + user.put_in_hands(inserted_case) + user.balloon_alert(user, "case removed") + update_appearance(UPDATE_ICON) + update_static_data_for_all_viewers() + return TRUE diff --git a/code/game/objects/items/implants/security/implant_beacon.dm b/code/game/objects/items/implants/security/implant_beacon.dm index dea6b4ed190..5851566d06a 100644 --- a/code/game/objects/items/implants/security/implant_beacon.dm +++ b/code/game/objects/items/implants/security/implant_beacon.dm @@ -9,15 +9,14 @@ var/lifespan_postmortem = 10 MINUTES /obj/item/implant/beacon/get_data() - var/dat = {"Implant Specifications:
- Name: Robust Corp JMP-21 Fugitive Retrieval Implant
- Life: Deactivates upon death after ten minutes, but remains within the body.
- Important Notes: N/A
-
- Implant Details:
- Function: Acts as a teleportation beacon that can be tracked by any standard bluespace transponder. - Using this, you can teleport directly to whoever has this implant inside of them."} - return dat + return "Implant Specifications:
\ + Name: Robust Corp JMP-21 Fugitive Retrieval Implant
\ + Life: Deactivates upon death after ten minutes, but remains within the body.
\ + Important Notes: N/A
\ +
\ + Implant Details:
\ + Function: Acts as a teleportation beacon that can be tracked by any standard bluespace transponder. \ + Using this, you can teleport directly to whoever has this implant inside of them." /obj/item/implant/beacon/is_shown_on_console(obj/machinery/computer/prisoner/management/console) return TRUE diff --git a/code/game/objects/items/implants/security/implant_chem.dm b/code/game/objects/items/implants/security/implant_chem.dm index db41d8bcac2..bad6cca8c69 100644 --- a/code/game/objects/items/implants/security/implant_chem.dm +++ b/code/game/objects/items/implants/security/implant_chem.dm @@ -9,18 +9,17 @@ var/list/implant_sizes = list(1, 5, 10) /obj/item/implant/chem/get_data() - var/dat = {"Implant Specifications:
- Name: Robust Corp MJ-420 Prisoner Management Implant
- Life: Deactivates upon death but remains within the body.
- Important Notes: Due to the system functioning off of nutrients in the implanted subject's body, the subject
- will suffer from an increased appetite.

- Implant Details:
- Function: Contains a small capsule that can contain various chemicals. Upon receiving a specially encoded signal
- the implant releases the chemicals directly into the blood stream.
- Micro-Capsule- Can be loaded with any sort of chemical agent via the common syringe and can hold 50 units.
- Can only be loaded while still in its original case.
- Integrity: Implant will last so long as the subject is alive, breaking down and releasing all contents on death."} - return dat + return "Implant Specifications:
\ + Name: Robust Corp MJ-420 Prisoner Management Implant
\ + Life: Deactivates upon death but remains within the body.
\ + Important Notes: Due to the system functioning off of nutrients in the implanted subject's body, the subject
\ + will suffer from an increased appetite.

\ + Implant Details:
\ + Function: Contains a small capsule that can contain various chemicals. Upon receiving a specially encoded signal
\ + the implant releases the chemicals directly into the blood stream.
\ + Micro-Capsule- Can be loaded with any sort of chemical agent via the common syringe and can hold 50 units.
\ + Can only be loaded while still in its original case.
\ + Integrity: Implant will last so long as the subject is alive, breaking down and releasing all contents on death." /obj/item/implant/chem/is_shown_on_console(obj/machinery/computer/prisoner/management/console) return is_valid_z_level(get_turf(console), get_turf(imp_in)) diff --git a/code/game/objects/items/implants/security/implant_exile.dm b/code/game/objects/items/implants/security/implant_exile.dm index 5c33d146b3a..9c04f1f9d37 100644 --- a/code/game/objects/items/implants/security/implant_exile.dm +++ b/code/game/objects/items/implants/security/implant_exile.dm @@ -9,11 +9,10 @@ hud_icon_state = "hud_imp_exile" /obj/item/implant/exile/get_data() - var/dat = {"Implant Specifications:
- Name: Nanotrasen Employee Exile Implant
- Implant Details: The onboard gateway system has been modified to reject entry by individuals containing this implant. - Additionally, station mining shuttles will lock their controls if handled by someone with this implant.
"} - return dat + return "Implant Specifications:
\ + Name: Nanotrasen Employee Exile Implant
\ + Implant Details: The onboard gateway system has been modified to reject entry by individuals containing this implant. \ + Additionally, station mining shuttles will lock their controls if handled by someone with this implant.
" ///Used to help the staff of the space hotel resist the urge to use the space hotel's incredibly alluring roundstart teleporter to ignore their flavor/greeting text and come to the station. @@ -22,10 +21,9 @@ desc = "Uses impressive bluespace grounding techniques to deny the person implanted by this implant the ability to teleport (or be teleported). Used by certain slavers (or particularly strict employers) to keep their slaves from using teleporters to escape their grasp." /obj/item/implant/exile/noteleport/get_data() - var/dat = {"Implant Specifications:
- Name: Anti-Teleportation Implant
- Implant Details: Keeps the implantee from using most teleportation devices. In addition, it spoofs the implant signature of an exile implant to keep the implantee from using certain gateway systems.
"} - return dat + return "Implant Specifications:
\ + Name: Anti-Teleportation Implant
\ + Implant Details: Keeps the implantee from using most teleportation devices. In addition, it spoofs the implant signature of an exile implant to keep the implantee from using certain gateway systems.
" /obj/item/implant/exile/noteleport/implant(mob/living/target, mob/user, silent = FALSE, force = FALSE) . = ..() diff --git a/code/game/objects/items/implants/security/implant_noteleport.dm b/code/game/objects/items/implants/security/implant_noteleport.dm index be4ec29659a..b4795a7f797 100644 --- a/code/game/objects/items/implants/security/implant_noteleport.dm +++ b/code/game/objects/items/implants/security/implant_noteleport.dm @@ -7,11 +7,10 @@ hud_icon_state = "hud_imp_noteleport" /obj/item/implant/teleport_blocker/get_data() - var/dat = {"Implant Specifications:
- Name: Robust Corp EXP-001 'Bluespace Grounder'
- Implant Details: Upon implantation, grounds the user's bluespace signature to their currently occupied plane of existence. - Most, if not all forms of teleportation on the implantee will be rendered ineffective. Useful for keeping especially slippery prisoners in place.
"} - return dat + return "Implant Specifications:
\ + Name: Robust Corp EXP-001 'Bluespace Grounder'
\ + Implant Details: Upon implantation, grounds the user's bluespace signature to their currently occupied plane of existence. \ + Most, if not all forms of teleportation on the implantee will be rendered ineffective. Useful for keeping especially slippery prisoners in place.
" /obj/item/implant/teleport_blocker/implant(mob/living/target, mob/user, silent = FALSE, force = FALSE) . = ..() diff --git a/code/game/objects/items/implants/security/implant_track.dm b/code/game/objects/items/implants/security/implant_track.dm index 652d9d6507a..b95c0afa7d8 100644 --- a/code/game/objects/items/implants/security/implant_track.dm +++ b/code/game/objects/items/implants/security/implant_track.dm @@ -9,17 +9,16 @@ var/lifespan_postmortem = 10 MINUTES /obj/item/implant/tracking/get_data() - var/dat = {"Implant Specifications:
- Name: Robust Corp EYE-5 Convict Parole Implant
- Life: 10 minutes after death of host.
-
- Implant Details:
- Function: Continuously transmits low power signal. Can be tracked from a prisoner management console.
- Special Features:
- Neuro-Safe- Specialized shell absorbs excess voltages self-destructing the chip if - a malfunction occurs thereby securing safety of subject. The implant will melt and - disintegrate into bio-safe elements.
"} - return dat + return "Implant Specifications:
\ + Name: Robust Corp EYE-5 Convict Parole Implant
\ + Life: 10 minutes after death of host.
\ +
\ + Implant Details:
\ + Function: Continuously transmits low power signal. Can be tracked from a prisoner management console.
\ + Special Features:
\ + Neuro-Safe- Specialized shell absorbs excess voltages self-destructing the chip if \ + a malfunction occurs thereby securing safety of subject. The implant will melt and \ + disintegrate into bio-safe elements.
" /obj/item/implant/tracking/is_shown_on_console(obj/machinery/computer/prisoner/management/console) if(imp_in.stat == DEAD && imp_in.timeofdeath + lifespan_postmortem < world.time) diff --git a/code/game/objects/items/inducer.dm b/code/game/objects/items/inducer.dm index 35c73a8cb95..f2493bf869d 100644 --- a/code/game/objects/items/inducer.dm +++ b/code/game/objects/items/inducer.dm @@ -19,10 +19,12 @@ cell = new cell_type /obj/item/inducer/proc/induce(obj/item/stock_parts/cell/target, coefficient) - var/totransfer = min(cell.charge,(powertransfer * coefficient)) + var/obj/item/stock_parts/cell/our_cell = get_cell() + var/totransfer = min(our_cell.charge, (powertransfer * coefficient)) var/transferred = target.give(totransfer) - cell.use(transferred) - cell.update_appearance() + + our_cell.use(transferred) + our_cell.update_appearance() target.update_appearance() /obj/item/inducer/get_cell() @@ -30,17 +32,18 @@ /obj/item/inducer/emp_act(severity) . = ..() - if(cell && !(. & EMP_PROTECT_CONTENTS)) - cell.emp_act(severity) + var/obj/item/stock_parts/cell/our_cell = get_cell() + if(!isnull(our_cell) && !(. & EMP_PROTECT_CONTENTS)) + our_cell.emp_act(severity) -/obj/item/inducer/attack_atom(obj/O, mob/living/carbon/user, params) +/obj/item/inducer/attack_atom(obj/target, mob/living/carbon/user, params) if(user.combat_mode) return ..() if(cantbeused(user)) return - if(recharge(O, user)) + if(recharge(target, user)) return return ..() @@ -50,11 +53,13 @@ to_chat(user, span_warning("You don't have the dexterity to use [src]!")) return TRUE - if(!cell) + var/obj/item/stock_parts/cell/our_cell = get_cell() + + if(isnull(our_cell)) balloon_alert(user, "no cell installed!") return TRUE - if(!cell.charge) + if(!our_cell.charge) balloon_alert(user, "no charge!") return TRUE return FALSE @@ -73,78 +78,80 @@ update_appearance() return -/obj/item/inducer/attackby(obj/item/W, mob/user) - if(istype(W, /obj/item/stock_parts/cell)) +/obj/item/inducer/attackby(obj/item/used_item, mob/user) + if(istype(used_item, /obj/item/stock_parts/cell)) if(opened) - if(!cell) - if(!user.transferItemToLoc(W, src)) + var/obj/item/stock_parts/cell/our_cell = get_cell() + if(isnull(our_cell)) + if(!user.transferItemToLoc(used_item, src)) return - to_chat(user, span_notice("You insert [W] into [src].")) - cell = W + to_chat(user, span_notice("You insert [used_item] into [src].")) + cell = used_item update_appearance() return else - to_chat(user, span_warning("[src] already has \a [cell] installed!")) + to_chat(user, span_warning("[src] already has \a [our_cell] installed!")) return if(cantbeused(user)) return - if(recharge(W, user)) + if(recharge(used_item, user)) return return ..() -/obj/item/inducer/proc/recharge(atom/movable/A, mob/user) - if(!isturf(A) && user.loc == A) +/obj/item/inducer/proc/recharge(atom/movable/target, mob/user) + if(!isturf(target) && user.loc == target) return FALSE if(recharging) return TRUE - else - recharging = TRUE - var/obj/item/stock_parts/cell/C = A.get_cell() - var/obj/O + + recharging = TRUE + var/obj/item/stock_parts/cell/our_cell = get_cell() + var/obj/item/stock_parts/cell/target_cell = target.get_cell() + var/obj/target_as_object = target var/coefficient = 1 - if(istype(A, /obj/item/gun/energy)) - to_chat(user, span_alert("Error: unable to interface with device.")) - return FALSE - if(istype(A, /obj/item/clothing/suit/space)) + + 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(isobj(A)) - O = A - if(C) + + if(target_cell) var/done_any = FALSE - if(C.charge >= C.maxcharge) + 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 [A] with [src]."), span_notice("You start recharging [A] with [src].")) - while(C.charge < C.maxcharge) - if(do_after(user, 10, target = user) && cell.charge) + + 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, 10, target = user) && our_cell.charge) done_any = TRUE - induce(C, coefficient) - do_sparks(1, FALSE, A) - if(O) - O.update_appearance() + 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 [A]!"), span_notice("You recharged [A]!")) + user.visible_message(span_notice("[user] recharged [target]!"), span_notice("You recharged [target]!")) recharging = FALSE return TRUE recharging = FALSE -/obj/item/inducer/attack(mob/M, mob/living/user) +/obj/item/inducer/attack(mob/target, mob/living/user) if(user.combat_mode) return ..() if(cantbeused(user)) return - if(recharge(M, user)) + if(recharge(target, user)) return + return ..() @@ -157,10 +164,11 @@ update_appearance() -/obj/item/inducer/examine(mob/living/M) +/obj/item/inducer/examine(mob/living/user) . = ..() - if(cell) - . += span_notice("Its display shows: [display_energy(cell.charge)].") + var/obj/item/stock_parts/cell/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) @@ -170,7 +178,7 @@ . = ..() if(!opened) return - . += "inducer-[cell ? "bat" : "nobat"]" + . += "inducer-[!isnull(get_cell()) ? "bat" : "nobat"]" /obj/item/inducer/empty cell_type = null diff --git a/code/game/objects/items/knives.dm b/code/game/objects/items/knives.dm index 4d63f825c07..8b4808848c2 100644 --- a/code/game/objects/items/knives.dm +++ b/code/game/objects/items/knives.dm @@ -124,6 +124,7 @@ name = "combat knife" icon = 'icons/obj/weapons/stabby.dmi' icon_state = "buckknife" + worn_icon_state = "buckknife" desc = "A military combat utility survival knife." embedding = list("pain_mult" = 4, "embed_chance" = 65, "fall_chance" = 10, "ignore_throwspeed_threshold" = TRUE) force = 20 @@ -131,11 +132,32 @@ attack_verb_continuous = list("slashes", "stabs", "slices", "tears", "lacerates", "rips", "cuts") attack_verb_simple = list("slash", "stab", "slice", "tear", "lacerate", "rip", "cut") bayonet = TRUE + slot_flags = ITEM_SLOT_MASK + +/obj/item/knife/combat/Initialize(mapload) + . = ..() + AddComponent(/datum/component/knockoff, 90, list(BODY_ZONE_PRECISE_MOUTH), slot_flags) //90% to knock off when wearing a mask + +/obj/item/knife/combat/dropped(mob/living/user, slot) + . = ..() + if(user.get_item_by_slot(ITEM_SLOT_MASK) == src && !user.has_status_effect(/datum/status_effect/choke) && prob(20)) + user.apply_damage(5, BRUTE, BODY_ZONE_HEAD) + playsound(user, 'sound/weapons/slice.ogg', 50, TRUE) + user.visible_message(span_danger("[user] accidentally cuts [user.p_them()]self while pulling [src] out of [user.p_them()] teeth! What a doofus!"), span_userdanger("You accidentally cut your mouth with [src]!")) + +/obj/item/knife/combat/equipped(mob/living/user, slot, initial = FALSE) + . = ..() + if(HAS_TRAIT(user, TRAIT_CLUMSY) && prob(20)) + if(user.get_item_by_slot(ITEM_SLOT_MASK) == src) + user.apply_status_effect(/datum/status_effect/choke, src) + user.visible_message(span_danger("[user] accidentally swallows [src]!")) + playsound(user, 'sound/items/eatfood.ogg', 100, TRUE) /obj/item/knife/combat/survival name = "survival knife" icon = 'icons/obj/weapons/stabby.dmi' icon_state = "survivalknife" + worn_icon_state = "survivalknife" embedding = list("pain_mult" = 4, "embed_chance" = 35, "fall_chance" = 10) desc = "A hunting grade survival knife." force = 15 @@ -152,14 +174,12 @@ righthand_file = 'icons/mob/inhands/weapons/swords_righthand.dmi' desc = "A sharpened bone. The bare minimum in survival." embedding = list("pain_mult" = 4, "embed_chance" = 35, "fall_chance" = 10) + obj_flags = parent_type::obj_flags & ~CONDUCTS_ELECTRICITY + slot_flags = NONE force = 15 throwforce = 15 custom_materials = null -/obj/item/knife/combat/bone/Initialize(mapload) - flags_1 &= ~CONDUCTS_ELECTRICITY - return ..() - /obj/item/knife/combat/cyborg name = "cyborg knife" icon = 'icons/obj/items_cyborg.dmi' @@ -174,6 +194,7 @@ lefthand_file = 'icons/mob/inhands/weapons/swords_lefthand.dmi' righthand_file = 'icons/mob/inhands/weapons/swords_righthand.dmi' desc = "A makeshift glass shiv." + obj_flags = parent_type::obj_flags & ~CONDUCTS_ELECTRICITY force = 8 throwforce = 12 attack_verb_continuous = list("shanks", "shivs") @@ -181,10 +202,6 @@ armor_type = /datum/armor/none custom_materials = list(/datum/material/glass = SMALL_MATERIAL_AMOUNT * 4) -/obj/item/knife/shiv/Initialize(mapload) - flags_1 &= ~CONDUCTS_ELECTRICITY - return ..() - /obj/item/knife/shiv/plasma name = "plasma shiv" icon_state = "plasmashiv" diff --git a/code/game/objects/items/melee/baton.dm b/code/game/objects/items/melee/baton.dm index cdafb81b62c..f57d9af87f0 100644 --- a/code/game/objects/items/melee/baton.dm +++ b/code/game/objects/items/melee/baton.dm @@ -427,6 +427,12 @@ on_stun_volume = 50 active = FALSE context_living_rmb_active = "Harmful Stun" + light_range = 1.5 + light_system = OVERLAY_LIGHT + light_on = FALSE + light_color = LIGHT_COLOR_ORANGE + light_power = 0.5 + var/throw_stun_chance = 35 var/obj/item/stock_parts/cell/cell @@ -541,6 +547,8 @@ active = !active balloon_alert(user, "turned [active ? "on" : "off"]") playsound(src, SFX_SPARKS, 75, TRUE, -1) + toggle_light(user) + do_sparks(1, TRUE, src) else active = FALSE if(!cell) @@ -550,6 +558,11 @@ update_appearance() add_fingerprint(user) +/// Toggles the stun baton's light +/obj/item/melee/baton/security/proc/toggle_light(mob/user) + set_light_on(!light_on) + return + /obj/item/melee/baton/security/proc/deductcharge(deducted_charge) if(!cell) return @@ -559,6 +572,7 @@ if(active && cell.charge < cell_hit_cost) //we're below minimum, turn off active = FALSE + set_light_on(FALSE) update_appearance() playsound(src, SFX_SPARKS, 75, TRUE, -1) @@ -649,6 +663,8 @@ if (!cell || cell.charge < cell_hit_cost) return active = !active + toggle_light() + do_sparks(1, TRUE, src) playsound(src, SFX_SPARKS, 75, TRUE, -1) update_appearance() diff --git a/code/game/objects/items/melee/energy.dm b/code/game/objects/items/melee/energy.dm index 9882f515d0d..948a582651e 100644 --- a/code/game/objects/items/melee/energy.dm +++ b/code/game/objects/items/melee/energy.dm @@ -5,7 +5,7 @@ attack_verb_continuous = list("hits", "taps", "pokes") attack_verb_simple = list("hit", "tap", "poke") resistance_flags = FIRE_PROOF - light_system = MOVABLE_LIGHT + light_system = OVERLAY_LIGHT light_range = 3 light_power = 1 light_on = FALSE diff --git a/code/game/objects/items/melee/misc.dm b/code/game/objects/items/melee/misc.dm index 0f30507a905..73fd7dcec33 100644 --- a/code/game/objects/items/melee/misc.dm +++ b/code/game/objects/items/melee/misc.dm @@ -117,14 +117,10 @@ return ..() /obj/item/melee/sabre/on_exit_storage(datum/storage/container) - var/obj/item/storage/belt/sabre/sabre = container.real_location?.resolve() - if(istype(sabre)) - playsound(sabre, 'sound/items/unsheath.ogg', 25, TRUE) + playsound(container.parent, 'sound/items/unsheath.ogg', 25, TRUE) /obj/item/melee/sabre/on_enter_storage(datum/storage/container) - var/obj/item/storage/belt/sabre/sabre = container.real_location?.resolve() - if(istype(sabre)) - playsound(sabre, 'sound/items/sheath.ogg', 25, TRUE) + playsound(container.parent, 'sound/items/sheath.ogg', 25, TRUE) /obj/item/melee/sabre/suicide_act(mob/living/user) user.visible_message(span_suicide("[user] is trying to cut off all [user.p_their()] limbs with [src]! it looks like [user.p_theyre()] trying to commit suicide!")) diff --git a/code/game/objects/items/pillow.dm b/code/game/objects/items/pillow.dm index 5364905bdc9..1dad0a7fba5 100644 --- a/code/game/objects/items/pillow.dm +++ b/code/game/objects/items/pillow.dm @@ -31,6 +31,7 @@ force_unwielded = 5, \ force_wielded = 10, \ ) + AddElement(/datum/element/disarm_attack) var/static/list/slapcraft_recipe_list = list(\ /datum/crafting_recipe/pillow_suit, /datum/crafting_recipe/pillow_hood,\ @@ -103,6 +104,8 @@ /obj/item/pillow/AltClick(mob/user) . = ..() + if(!can_interact(user) || !user.can_hold_items(src)) + return if(!pillow_trophy) balloon_alert(user, "no tag!") return diff --git a/code/game/objects/items/plushes.dm b/code/game/objects/items/plushes.dm index eab3f34d343..ca669a9733e 100644 --- a/code/game/objects/items/plushes.dm +++ b/code/game/objects/items/plushes.dm @@ -516,10 +516,10 @@ if(!greyscale_colors) // Generate a random valid lizard color for our plushie friend var/generated_lizard_color = "#" + random_color() - var/temp_hsv = RGBtoHSV(generated_lizard_color) + var/list/lizard_hsv = rgb2hsv(generated_lizard_color) // If our color is too dark, use the classic green lizard plush color - if(ReadHSV(temp_hsv)[3] < ReadHSV("#7F7F7F")[3]) + if(lizard_hsv[3] < 50) generated_lizard_color = "#66ff33" // Set our greyscale colors to the lizard color we made + black eyes diff --git a/code/game/objects/items/puzzle_pieces.dm b/code/game/objects/items/puzzle_pieces.dm index 8eba5081d22..7ac22d00897 100644 --- a/code/game/objects/items/puzzle_pieces.dm +++ b/code/game/objects/items/puzzle_pieces.dm @@ -403,3 +403,61 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/machinery/puzzle_keycardpad, 32) playsound(src, SFX_SPARKS, 100, vary = TRUE, extrarange = SHORT_RANGE_SOUND_EXTRARANGE) do_sparks(3, cardinal_only = FALSE, source = src) qdel(src) + +/obj/structure/puzzle_blockade/oneway + name = "one-way gate" + desc = "A wall of solid light, likely defending something important. Virtually indestructible." + icon = 'icons/obj/structures.dmi' + icon_state = "oneway" + base_icon_state = "oneway" + light_color = COLOR_BIOLUMINESCENCE_BLUE + light_range = 1 + density = FALSE + +/obj/structure/puzzle_blockade/oneway/update_icon_state() + icon_state = "[base_icon_state][density ? "" : "-off"]" + return ..() + +/obj/structure/puzzle_blockade/oneway/CanAllowThrough(atom/movable/mover, border_dir) + return ..() && (REVERSE_DIR(border_dir) == dir || get_turf(mover) == get_turf(src)) + +/obj/structure/puzzle_blockade/oneway/CanAStarPass(border_dir, datum/can_pass_info/pass_info) + return REVERSE_DIR(border_dir) == dir + +/obj/structure/puzzle_blockade/oneway/try_signal(datum/source) + density = FALSE + update_appearance(UPDATE_ICON) + +/obj/effect/puzzle_poddoor_open + name = "puzzle-poddoor relay" + desc = "activates poddoors if activated with a puzzle signal." + icon = 'icons/effects/mapping_helpers.dmi' + icon_state = "" + anchored = TRUE + invisibility = INVISIBILITY_MAXIMUM + /// if we receive a puzzle signal with this we do our thing + var/queue_id + /// door id + var/id + +/obj/effect/puzzle_poddoor_open/Initialize(mapload) + . = ..() + if(isnull(id) || isnull(queue_id)) + log_mapping("[src] id:[id] has no id or door id and has been deleted") + return INITIALIZE_HINT_QDEL + + SSqueuelinks.add_to_queue(src, queue_id) + +/obj/effect/puzzle_poddoor_open/MatchedLinks(id, list/partners) + for(var/partner in partners) + RegisterSignal(partner, COMSIG_PUZZLE_COMPLETED, PROC_REF(try_signal)) + +/obj/effect/puzzle_poddoor_open/proc/try_signal(datum/source) + SIGNAL_HANDLER + var/openclose + for(var/obj/machinery/door/poddoor/door as anything in SSmachines.get_machines_by_type_and_subtypes(/obj/machinery/door/poddoor)) + if(door.id != id) + continue + if(isnull(openclose)) + openclose = door.density + INVOKE_ASYNC(door, openclose ? TYPE_PROC_REF(/obj/machinery/door/poddoor, open) : TYPE_PROC_REF(/obj/machinery/door/poddoor, close)) diff --git a/code/game/objects/items/rcd/RCD.dm b/code/game/objects/items/rcd/RCD.dm index ab97026a6a1..7e14ca91b3f 100644 --- a/code/game/objects/items/rcd/RCD.dm +++ b/code/game/objects/items/rcd/RCD.dm @@ -1,9 +1,6 @@ /// Multiplier applied on construction & deconstruction time when building multiple structures #define FREQUENT_USE_DEBUFF_MULTIPLIER 3 -/// Delay before another rcd scan can be performed in the UI -#define RCD_DESTRUCTIVE_SCAN_COOLDOWN (RCD_HOLOGRAM_FADE_TIME + 1 SECONDS) - //RAPID CONSTRUCTION DEVICE /obj/item/construction/rcd @@ -33,8 +30,8 @@ /// The path of the structure the rcd is currently creating var/atom/movable/rcd_design_path - /// owner of this rcd. It can either be an construction console or an player - var/owner + /// Owner of this rcd. It can either be a construction console, player, or mech. + var/atom/owner /// used by arcd, can this rcd work from a range var/ranged = FALSE /// delay multiplier for all construction types @@ -243,8 +240,9 @@ return FALSE var/beam if(ranged) - beam = user.Beam(target, icon_state = "rped_upgrade", time = delay) - if(!do_after(user, delay, target = target)) + var/atom/beam_source = owner ? owner : user + beam = beam_source.Beam(target, icon_state = "rped_upgrade", time = delay) + if(delay && !do_after(user, delay, target = target)) // no need for do_after with no delay qdel(rcd_effect) if(!isnull(beam)) qdel(beam) @@ -510,8 +508,55 @@ has_ammobar = FALSE upgrade = RCD_ALL_UPGRADES & ~RCD_UPGRADE_SILO_LINK +/obj/item/construction/rcd/exosuit + name = "mounted RCD" + desc = "An exosuit-mounted Rapid Construction Device." + max_matter = INFINITY // mass-energy equivalence go brrrrrr + canRturf = TRUE + ranged = TRUE + has_ammobar = FALSE + resistance_flags = FIRE_PROOF | INDESTRUCTIBLE // should NOT be destroyed unless the equipment is destroyed + item_flags = NO_MAT_REDEMPTION | NOBLUDGEON | DROPDEL // already qdeleted in the equipment's Destroy() but you can never be too sure + delay_mod = 0.5 + ///How much charge is used up for each matter unit. + var/mass_to_energy = 16 + +/obj/item/construction/rcd/exosuit/ui_status(mob/user) + if(ismecha(owner)) + return owner.ui_status(user) + return UI_CLOSE + +/obj/item/construction/rcd/exosuit/get_matter(mob/user) + if(silo_link) + return ..() + if(!ismecha(owner)) + return 0 + var/obj/vehicle/sealed/mecha/gundam = owner + return round(gundam.get_charge() / mass_to_energy) + +/obj/item/construction/rcd/exosuit/useResource(amount, mob/user) + if(silo_link) + return ..() + if(!ismecha(owner)) + return 0 + var/obj/vehicle/sealed/mecha/gundam = owner + if(!gundam.use_power(amount * mass_to_energy)) + gundam.balloon_alert(user, "insufficient charge!") + return FALSE + return TRUE + +/obj/item/construction/rcd/exosuit/checkResource(amount, mob/user) + if(silo_link) + return ..() + if(!ismecha(owner)) + return 0 + var/obj/vehicle/sealed/mecha/gundam = owner + if(!gundam.has_charge(amount * mass_to_energy)) + gundam.balloon_alert(user, "insufficient charge!") + return FALSE + return TRUE + #undef FREQUENT_USE_DEBUFF_MULTIPLIER -#undef RCD_DESTRUCTIVE_SCAN_COOLDOWN /obj/item/rcd_ammo name = "RCD matter cartridge" diff --git a/code/game/objects/items/rcd/RHD.dm b/code/game/objects/items/rcd/RHD.dm index 8abf1f2e3f2..9151c85ed03 100644 --- a/code/game/objects/items/rcd/RHD.dm +++ b/code/game/objects/items/rcd/RHD.dm @@ -95,16 +95,17 @@ /obj/item/construction/proc/install_upgrade(obj/item/rcd_upgrade/design_disk, mob/user) if(design_disk.upgrade & upgrade) balloon_alert(user, "already installed!") - return + return FALSE if(design_disk.upgrade & banned_upgrades) balloon_alert(user, "cannot install upgrade!") - return + return FALSE upgrade |= design_disk.upgrade if((design_disk.upgrade & RCD_UPGRADE_SILO_LINK) && !silo_mats) silo_mats = AddComponent(/datum/component/remote_materials, FALSE, FALSE) playsound(loc, 'sound/machines/click.ogg', 50, TRUE) qdel(design_disk) update_static_data_for_all_viewers() + return TRUE /// Inserts matter into the RCD allowing it to build /obj/item/construction/proc/insert_matter(obj/item, mob/user) diff --git a/code/game/objects/items/rcd/RLD.dm b/code/game/objects/items/rcd/RLD.dm index beef6152b57..6272c7a374d 100644 --- a/code/game/objects/items/rcd/RLD.dm +++ b/code/game/objects/items/rcd/RLD.dm @@ -73,7 +73,7 @@ if(new_choice == null) return - var/list/new_rgb = ReadRGB(new_choice) + var/list/new_rgb = rgb2num(new_choice) for(var/option in original_options) if(option == "Color Pick" || option == "Deconstruct" || option == "Silo Link") continue diff --git a/code/game/objects/items/rcd/RPD.dm b/code/game/objects/items/rcd/RPD.dm index 9af1041779e..e4777977605 100644 --- a/code/game/objects/items/rcd/RPD.dm +++ b/code/game/objects/items/rcd/RPD.dm @@ -587,7 +587,7 @@ GLOBAL_LIST_INIT(transit_tube_recipes, list( if(queued_pipe_flipped) tube.setDir(turn(queued_pipe_dir, 45 + ROTATION_FLIP)) - tube.AfterRotation(user, ROTATION_FLIP) + tube.post_rotation(user, ROTATION_FLIP) tube.add_fingerprint(usr) if(mode & WRENCH_MODE) diff --git a/code/game/objects/items/robot/robot_parts.dm b/code/game/objects/items/robot/robot_parts.dm index e92b4332846..7ff8c9f1fc0 100644 --- a/code/game/objects/items/robot/robot_parts.dm +++ b/code/game/objects/items/robot/robot_parts.dm @@ -339,6 +339,8 @@ O.set_lockcharge(TRUE) to_chat(O, span_warning("Error: Servo motors unresponsive.")) + O.equip_outfit_and_loadout(equipping_job = SSjob.GetJobType(/datum/job/cyborg)) // NOVA EDIT ADDITION - Cyborg loadout hats + else to_chat(user, span_warning("The MMI must go in after everything else!")) diff --git a/code/game/objects/items/robot/robot_upgrades.dm b/code/game/objects/items/robot/robot_upgrades.dm index 2dcaf1b413e..71f910c735d 100644 --- a/code/game/objects/items/robot/robot_upgrades.dm +++ b/code/game/objects/items/robot/robot_upgrades.dm @@ -621,30 +621,40 @@ model_type = list(/obj/item/robot_model/engineering, /obj/item/robot_model/saboteur) model_flags = BORG_MODEL_ENGINEERING -/obj/item/borg/upgrade/inducer/action(mob/living/silicon/robot/R, user = usr) +/obj/item/borg/upgrade/inducer/action(mob/living/silicon/robot/silicon_friend, user = usr) . = ..() if(.) - var/obj/item/inducer/cyborg/inter_inducer = locate() in R + var/obj/item/inducer/cyborg/inter_inducer = locate() in silicon_friend if(inter_inducer) + silicon_friend.balloon_alert(user, "already has one!") return FALSE - inter_inducer = new(R.model) - R.model.basic_modules += inter_inducer - R.model.add_module(inter_inducer, FALSE, TRUE) - inter_inducer.cell = R.cell -/obj/item/borg/upgrade/inducer/deactivate(mob/living/silicon/robot/R, user = usr) + inter_inducer = new(silicon_friend.model) + silicon_friend.model.basic_modules += inter_inducer + silicon_friend.model.add_module(inter_inducer, FALSE, TRUE) + +/obj/item/borg/upgrade/inducer/deactivate(mob/living/silicon/robot/silicon_friend, user = usr) . = ..() - if (.) - var/obj/item/inducer/cyborg/inter_inducer = locate() in R.model - if (inter_inducer) - R.model.remove_module(inter_inducer, TRUE) - inter_inducer.cell = null + if(.) + var/obj/item/inducer/cyborg/inter_inducer = locate() in silicon_friend.model + if(inter_inducer) + silicon_friend.model.remove_module(inter_inducer, TRUE) /obj/item/inducer/cyborg name = "Internal inducer" powertransfer = 1500 icon = 'icons/obj/tools.dmi' icon_state = "inducer-engi" + cell_type = null + +/obj/item/inducer/cyborg/get_cell() + var/obj/item/robot_model/possible_model = loc + var/mob/living/silicon/robot/silicon_friend = istype(possible_model) ? possible_model.robot : possible_model + if(istype(silicon_friend)) + . = silicon_friend.cell + +/obj/item/inducer/cyborg/screwdriver_act(mob/living/user, obj/item/tool) + return FALSE /obj/item/borg/upgrade/pinpointer name = "medical cyborg crew pinpointer" diff --git a/code/game/objects/items/shields.dm b/code/game/objects/items/shields.dm index ef434c1993d..b711bb63d45 100644 --- a/code/game/objects/items/shields.dm +++ b/code/game/objects/items/shields.dm @@ -35,6 +35,10 @@ fire = 80 acid = 70 +/obj/item/shield/Initialize(mapload) + . = ..() + AddElement(/datum/element/disarm_attack) + /obj/item/shield/hit_reaction(mob/living/carbon/human/owner, atom/movable/hitby, attack_text = "the attack", final_block_chance = 0, damage = 0, attack_type = MELEE_ATTACK, damage_type = BRUTE) if(transparent && (hitby.pass_flags & PASSGLASS)) return FALSE @@ -57,21 +61,32 @@ if(0 to 25) . += span_warning("It's falling apart!") -/obj/item/shield/proc/shatter(mob/living/carbon/human/owner) - playsound(owner, shield_break_sound, 50) - new shield_break_leftover(get_turf(src)) - /obj/item/shield/proc/on_shield_block(mob/living/carbon/human/owner, atom/movable/hitby, attack_text = "the attack", damage = 0, attack_type = MELEE_ATTACK, damage_type = BRUTE) if(!breakable_by_damage || (damage_type != BRUTE && damage_type != BURN)) return TRUE - if (atom_integrity <= damage) - var/turf/owner_turf = get_turf(owner) - owner_turf.visible_message(span_warning("[hitby] destroys [src]!")) - shatter(owner) - qdel(src) - return FALSE - take_damage(damage) - return TRUE + var/penetration = 0 + var/armor_flag = MELEE + if(isprojectile(hitby)) + var/obj/projectile/bang_bang = hitby + armor_flag = bang_bang.armor_flag + penetration = bang_bang.armour_penetration + else if(isitem(hitby)) + var/obj/item/weapon = hitby + penetration = weapon.armour_penetration + else if(isanimal(hitby)) + var/mob/living/simple_animal/critter = hitby + penetration = critter.armour_penetration + else if(isbasicmob(hitby)) + var/mob/living/basic/critter = hitby + penetration = critter.armour_penetration + take_damage(damage, damage_type, armor_flag, armour_penetration = penetration) + +/obj/item/shield/atom_destruction(damage_flag) + playsound(src, shield_break_sound, 50) + new shield_break_leftover(get_turf(src)) + if(isliving(loc)) + loc.balloon_alert(loc, "shield broken!") + return ..() /obj/item/shield/buckler name = "wooden buckler" @@ -100,9 +115,14 @@ armor_type = /datum/armor/none max_integrity = 30 +/datum/armor/item_shield/riot + melee = 80 + bullet = 20 + laser = 20 + /obj/item/shield/riot name = "riot shield" - desc = "A shield adept at blocking blunt objects from connecting with the torso of the shield wielder." + desc = "A shield adept at blocking blunt objects from connecting with the torso of the shield wielder, less so bullets and laser beams." icon_state = "riot" inhand_icon_state = "riot" custom_materials = list(/datum/material/glass= SHEET_MATERIAL_AMOUNT * 3.75, /datum/material/iron= HALF_SHEET_MATERIAL_AMOUNT) @@ -110,6 +130,7 @@ max_integrity = 75 shield_break_sound = 'sound/effects/glassbr3.ogg' shield_break_leftover = /obj/item/shard + armor_type = /datum/armor/item_shield/riot /obj/item/shield/riot/Initialize(mapload) . = ..() @@ -177,7 +198,9 @@ QDEL_NULL(embedded_flash) return ..() -/obj/item/shield/riot/flash/attack(mob/living/target_mob, mob/user) +/obj/item/shield/riot/flash/attack(mob/living/target_mob, mob/living/user) + if(user.combat_mode) + return ..() flash_away(user, target_mob) /obj/item/shield/riot/flash/attack_self(mob/living/carbon/user) @@ -275,6 +298,7 @@ clumsy_check = !can_clumsy_use, \ ) RegisterSignal(src, COMSIG_TRANSFORMING_ON_TRANSFORM, PROC_REF(on_transform)) + RegisterSignal(src, COMSIG_ITEM_CAN_DISARM_ATTACK, PROC_REF(can_disarm_attack)) /obj/item/shield/energy/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(!HAS_TRAIT(src, TRAIT_TRANSFORM_ACTIVE)) @@ -302,6 +326,13 @@ playsound(src, active ? 'sound/weapons/saberon.ogg' : 'sound/weapons/saberoff.ogg', 35, TRUE) return COMPONENT_NO_DEFAULT_MESSAGE +/obj/item/shield/energy/proc/can_disarm_attack(datum/source, mob/living/victim, mob/living/user, send_message = TRUE) + SIGNAL_HANDLER + if(!HAS_TRAIT(src, TRAIT_TRANSFORM_ACTIVE)) + if(send_message) + balloon_alert(user, "activate it first!") + return COMPONENT_BLOCK_ITEM_DISARM_ATTACK + /obj/item/shield/energy/advanced name = "advanced combat energy shield" desc = "A hardlight shield capable of reflecting all energy projectiles, as well las providing well-rounded defense from most all other attacks. \ @@ -338,6 +369,7 @@ ) RegisterSignal(src, COMSIG_TRANSFORMING_ON_TRANSFORM, PROC_REF(on_transform)) + RegisterSignal(src, COMSIG_ITEM_CAN_DISARM_ATTACK, PROC_REF(can_disarm_attack)) /obj/item/shield/riot/tele/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(HAS_TRAIT(src, TRAIT_TRANSFORM_ACTIVE)) @@ -358,4 +390,11 @@ playsound(src, 'sound/weapons/batonextend.ogg', 50, TRUE) return COMPONENT_NO_DEFAULT_MESSAGE +/obj/item/shield/riot/tele/proc/can_disarm_attack(datum/source, mob/living/victim, mob/living/user, send_message = TRUE) + SIGNAL_HANDLER + if(!HAS_TRAIT(src, TRAIT_TRANSFORM_ACTIVE)) + if(send_message) + balloon_alert(user, "extend it first!") + return COMPONENT_BLOCK_ITEM_DISARM_ATTACK + #undef BATON_BASH_COOLDOWN diff --git a/code/game/objects/items/stacks/golem_food/golem_status_effects.dm b/code/game/objects/items/stacks/golem_food/golem_status_effects.dm index c89fae800b9..514ab36ed66 100644 --- a/code/game/objects/items/stacks/golem_food/golem_status_effects.dm +++ b/code/game/objects/items/stacks/golem_food/golem_status_effects.dm @@ -404,7 +404,7 @@ . = ..() if (!.) return - owner.AddElement(/datum/element/waddling) + owner.AddElementTrait(TRAIT_WADDLING, TRAIT_STATUS_EFFECT(id), /datum/element/waddling) ADD_TRAIT(owner, TRAIT_NO_SLIP_WATER, TRAIT_STATUS_EFFECT(id)) slipperiness = owner.AddComponent(\ /datum/component/slippery,\ @@ -418,8 +418,7 @@ return owner.body_position == LYING_DOWN /datum/status_effect/golem/bananium/on_remove() - REMOVE_TRAIT(owner, TRAIT_NO_SLIP_WATER, TRAIT_STATUS_EFFECT(id)) - owner.RemoveElement(/datum/element/waddling) + owner.remove_traits(owner, list(TRAIT_WADDLING, TRAIT_NO_SLIP_WATER), TRAIT_STATUS_EFFECT(id)) QDEL_NULL(slipperiness) return ..() @@ -441,7 +440,7 @@ if (!.) return to_chat(owner, span_notice("You start to emit a healthy glow.")) - owner.light_system = MOVABLE_LIGHT + owner.light_system = OVERLAY_LIGHT lightbulb = owner.AddComponent(/datum/component/overlay_lighting, _range = glow_range, _power = glow_power, _color = glow_color) owner.add_filter(LIGHTBULB_FILTER, 2, list("type" = "outline", "color" = glow_color, "alpha" = 60, "size" = 1)) diff --git a/code/game/objects/items/stacks/sheets/leather.dm b/code/game/objects/items/stacks/sheets/leather.dm index 500b2500c8a..e9426a913ec 100644 --- a/code/game/objects/items/stacks/sheets/leather.dm +++ b/code/game/objects/items/stacks/sheets/leather.dm @@ -40,11 +40,6 @@ GLOBAL_LIST_INIT(human_recipes, list( \ inhand_icon_state = null merge_type = /obj/item/stack/sheet/animalhide/corgi -GLOBAL_LIST_INIT(gondola_recipes, list ( \ - new/datum/stack_recipe("gondola mask", /obj/item/clothing/mask/gondola, 1, check_density = FALSE, category = CAT_CLOTHING), \ - new/datum/stack_recipe("gondola suit", /obj/item/clothing/under/costume/gondola, 2, check_density = FALSE, category = CAT_CLOTHING), \ - )) - /obj/item/stack/sheet/animalhide/corgi/five amount = 5 @@ -59,6 +54,12 @@ GLOBAL_LIST_INIT(gondola_recipes, list ( \ /obj/item/stack/sheet/animalhide/mothroach/five amount = 5 +GLOBAL_LIST_INIT(gondola_recipes, list ( \ + new/datum/stack_recipe("gondola mask", /obj/item/clothing/mask/gondola, 1, check_density = FALSE, category = CAT_CLOTHING), \ + new/datum/stack_recipe("gondola suit", /obj/item/clothing/under/costume/gondola, 2, check_density = FALSE, category = CAT_CLOTHING), \ + new/datum/stack_recipe("gondola bedsheet", /obj/item/bedsheet/gondola, 1, check_density = FALSE, category = CAT_FURNITURE), \ + )) + /obj/item/stack/sheet/animalhide/gondola name = "gondola hide" desc = "The extremely valuable product of gondola hunting." diff --git a/code/game/objects/items/stacks/sheets/sheet_types.dm b/code/game/objects/items/stacks/sheets/sheet_types.dm index 4228866506a..a72599fac9b 100644 --- a/code/game/objects/items/stacks/sheets/sheet_types.dm +++ b/code/game/objects/items/stacks/sheets/sheet_types.dm @@ -788,7 +788,8 @@ GLOBAL_LIST_INIT(plastic_recipes, list( new /datum/stack_recipe("mannequin", /obj/structure/mannequin/plastic, 25, time = 5 SECONDS, one_per_turf = TRUE, check_density = FALSE, category = CAT_ENTERTAINMENT), \ new /datum/stack_recipe("wet floor sign", /obj/item/clothing/suit/caution, 2, check_density = FALSE, category = CAT_EQUIPMENT), \ new /datum/stack_recipe("warning cone", /obj/item/clothing/head/cone, 2, check_density = FALSE, category = CAT_EQUIPMENT), \ - new /datum/stack_recipe("blank wall sign", /obj/item/sign, 1, check_density = FALSE, category = CAT_FURNITURE))) + new /datum/stack_recipe("blank wall sign", /obj/item/sign, 1, check_density = FALSE, category = CAT_FURNITURE), \ + new /datum/stack_recipe("rebellion mask", /obj/item/clothing/mask/rebellion, 1, check_density = FALSE, category = CAT_CLOTHING))) /obj/item/stack/sheet/plastic name = "plastic" diff --git a/code/game/objects/items/stacks/telecrystal.dm b/code/game/objects/items/stacks/telecrystal.dm index 51d21d6ef6c..a6bbe3bfe19 100644 --- a/code/game/objects/items/stacks/telecrystal.dm +++ b/code/game/objects/items/stacks/telecrystal.dm @@ -21,7 +21,7 @@ var/datum/component/uplink/hidden_uplink = uplink.GetComponent(/datum/component/uplink) if(hidden_uplink) - hidden_uplink.add_telecrystals(amount) + hidden_uplink.uplink_handler.add_telecrystals(amount) use(amount) to_chat(user, span_notice("You press [src] onto yourself and charge your hidden uplink.")) return ITEM_INTERACT_SUCCESS diff --git a/code/game/objects/items/stacks/wrap.dm b/code/game/objects/items/stacks/wrap.dm index a87d2f308a1..cfff5ab14e7 100644 --- a/code/game/objects/items/stacks/wrap.dm +++ b/code/game/objects/items/stacks/wrap.dm @@ -24,13 +24,13 @@ //Generate random valid colors for paper and ribbon var/generated_base_color = "#" + random_color() var/generated_ribbon_color = "#" + random_color() - var/temp_base_hsv = RGBtoHSV(generated_base_color) - var/temp_ribbon_hsv = RGBtoHSV(generated_ribbon_color) + var/list/base_hsv = rgb2hsv(generated_base_color) + var/list/ribbon_hsv = rgb2hsv(generated_ribbon_color) //If colors are too dark, set to original colors - if(ReadHSV(temp_base_hsv)[3] < ReadHSV("7F7F7F")[3]) + if(base_hsv[3] < 50) generated_base_color = "#00FF00" - if(ReadHSV(temp_ribbon_hsv)[3] < ReadHSV("7F7F7F")[3]) + if(ribbon_hsv[3] < 50) generated_ribbon_color = "#FF0000" //Set layers to these colors, base then ribbon diff --git a/code/game/objects/items/storage/backpack.dm b/code/game/objects/items/storage/backpack.dm index 372be881257..66b1c0da99c 100644 --- a/code/game/objects/items/storage/backpack.dm +++ b/code/game/objects/items/storage/backpack.dm @@ -385,7 +385,7 @@ . = ..() AddElement(/datum/element/undertile, TRAIT_T_RAY_VISIBLE, INVISIBILITY_MAXIMUM, use_anchor = TRUE) // NOVA EDIT - Ghosts can't see smuggler's satchels atom_storage.max_total_storage = 15 - atom_storage.set_holdable(cant_hold_list = list(/obj/item/storage/backpack/satchel/flat)) //muh recursive backpacks) + atom_storage.set_holdable(cant_hold_list = /obj/item/storage/backpack/satchel/flat) //muh recursive backpacks /obj/item/storage/backpack/satchel/flat/PopulateContents() for(var/items in 1 to 4) diff --git a/code/game/objects/items/storage/bags.dm b/code/game/objects/items/storage/bags.dm index 5c8ef888517..d72a57f07f1 100644 --- a/code/game/objects/items/storage/bags.dm +++ b/code/game/objects/items/storage/bags.dm @@ -37,6 +37,7 @@ icon = 'icons/obj/service/janitor.dmi' icon_state = "trashbag" inhand_icon_state = "trashbag" + worn_icon_state = "trashbag" lefthand_file = 'icons/mob/inhands/equipment/custodial_lefthand.dmi' righthand_file = 'icons/mob/inhands/equipment/custodial_righthand.dmi' storage_type = /datum/storage/trash @@ -48,7 +49,7 @@ atom_storage.max_specific_storage = WEIGHT_CLASS_SMALL atom_storage.max_total_storage = 30 atom_storage.max_slots = 30 - atom_storage.set_holdable(cant_hold_list = list(/obj/item/disk/nuclear)) + atom_storage.set_holdable(cant_hold_list = /obj/item/disk/nuclear) atom_storage.supports_smart_equip = FALSE RegisterSignal(atom_storage, COMSIG_STORAGE_DUMP_POST_TRANSFER, PROC_REF(post_insertion)) @@ -136,7 +137,7 @@ atom_storage.numerical_stacking = TRUE atom_storage.allow_quick_empty = TRUE atom_storage.allow_quick_gather = TRUE - atom_storage.set_holdable(list(/obj/item/stack/ore)) + atom_storage.set_holdable(/obj/item/stack/ore) atom_storage.silent_for_user = TRUE /obj/item/storage/bag/ore/equipped(mob/user) @@ -154,6 +155,12 @@ UnregisterSignal(listeningTo, COMSIG_MOVABLE_MOVED) listeningTo = null +/obj/item/storage/bag/ore/attackby(obj/item/attacking_item, mob/user, params) + if(istype(attacking_item, /obj/item/boulder)) + to_chat(user, span_warning("You can't fit \the [attacking_item] into \the [src]. Perhaps you should break it down first, or find an ore box.")) + return TRUE + return ..() + /obj/item/storage/bag/ore/proc/pickup_ores(mob/living/user) SIGNAL_HANDLER @@ -238,8 +245,7 @@ /obj/item/grown, /obj/item/food/honeycomb, /obj/item/seeds, - )) -//////// + )) /obj/item/storage/bag/plants/portaseeder name = "portable seed extractor" @@ -283,20 +289,22 @@ icon_state = "sheetsnatcher" worn_icon_state = "satchel" - var/capacity = 300; //the number of sheets it can carry. + var/capacity = 300 //the number of sheets it can carry. /obj/item/storage/bag/sheetsnatcher/Initialize(mapload) . = ..() atom_storage.allow_quick_empty = TRUE atom_storage.allow_quick_gather = TRUE atom_storage.numerical_stacking = TRUE - atom_storage.set_holdable(list( + atom_storage.set_holdable( + can_hold_list = list( /obj/item/stack/sheet - ), - list( + ), + cant_hold_list = list( /obj/item/stack/sheet/mineral/sandstone, /obj/item/stack/sheet/mineral/wood, - )) + ), + ) atom_storage.max_total_storage = capacity / 2 // ----------------------------- @@ -366,7 +374,7 @@ /obj/item/storage/box/matches, /obj/item/storage/fancy, /obj/item/trash, - )) //Should cover: Bottles, Beakers, Bowls, Booze, Glasses, Food, Food Containers, Food Trash, Organs, Tobacco Products, Lighters, and Kitchen Tools. + )) //Should cover: Bottles, Beakers, Bowls, Booze, Glasses, Food, Food Containers, Food Trash, Organs, Tobacco Products, Lighters, and Kitchen Tools. atom_storage.insert_preposition = "on" atom_storage.max_slots = 7 @@ -450,7 +458,7 @@ /obj/item/reagent_containers/medigel, /obj/item/reagent_containers/pill, /obj/item/reagent_containers/syringe, - )) + )) /* * Biowaste bag (mostly for virologists) @@ -480,7 +488,7 @@ /obj/item/reagent_containers/cup/tube, /obj/item/reagent_containers/hypospray/medipen, /obj/item/reagent_containers/syringe, - )) + )) /* * Science bag (mostly for xenobiologists) @@ -511,7 +519,7 @@ /obj/item/reagent_containers/syringe, /obj/item/slime_extract, /obj/item/swab, - )) + )) /* * Construction bag (for engineering, holds stock parts and electronics) @@ -540,7 +548,7 @@ /obj/item/stack/ore/bluespace_crystal, /obj/item/stock_parts, /obj/item/wallframe/camera, - )) + )) /obj/item/storage/bag/harpoon_quiver name = "harpoon quiver" @@ -555,9 +563,7 @@ atom_storage.max_specific_storage = WEIGHT_CLASS_TINY atom_storage.max_slots = 40 atom_storage.max_total_storage = 100 - atom_storage.set_holdable(list( - /obj/item/ammo_casing/harpoon - )) + atom_storage.set_holdable(/obj/item/ammo_casing/harpoon) /obj/item/storage/bag/harpoon_quiver/PopulateContents() for(var/i in 1 to 40) diff --git a/code/game/objects/items/storage/belt.dm b/code/game/objects/items/storage/belt.dm index bc331db0775..282ced06519 100644 --- a/code/game/objects/items/storage/belt.dm +++ b/code/game/objects/items/storage/belt.dm @@ -190,6 +190,26 @@ to_preload += /obj/item/extinguisher/mini return to_preload +/obj/item/storage/belt/utility/full/inducer/PopulateContents() + SSwardrobe.provide_type(/obj/item/screwdriver, src) + SSwardrobe.provide_type(/obj/item/wrench, src) + SSwardrobe.provide_type(/obj/item/weldingtool, src) + SSwardrobe.provide_type(/obj/item/crowbar/red, src) + SSwardrobe.provide_type(/obj/item/wirecutters, src) + SSwardrobe.provide_type(/obj/item/multitool, src) + SSwardrobe.provide_type(/obj/item/inducer, src) + +/obj/item/storage/belt/utility/full/inducer/get_types_to_preload() + var/list/to_preload = list() //Yes this is a pain. Yes this is the point + to_preload += /obj/item/screwdriver + to_preload += /obj/item/wrench + to_preload += /obj/item/weldingtool + to_preload += /obj/item/crowbar + to_preload += /obj/item/wirecutters + to_preload += /obj/item/multitool + to_preload += /obj/item/inducer + return to_preload + /obj/item/storage/belt/utility/syndicate preload = FALSE @@ -334,23 +354,6 @@ inhand_icon_state = "security"//Could likely use a better one. worn_icon_state = "security" content_overlays = TRUE - // NOVA EDIT ADDITION START - uses_advanced_reskins = TRUE - unique_reskin = list( - "Basic Security" = list( - RESKIN_ICON = 'icons/obj/clothing/belts.dmi', - RESKIN_ICON_STATE = "security", - RESKIN_WORN_ICON = 'icons/mob/clothing/belt.dmi', - RESKIN_WORN_ICON_STATE = "security" - ), - "Peacekeeper" = list( - RESKIN_ICON = 'modular_nova/master_files/icons/obj/clothing/belts.dmi', - RESKIN_ICON_STATE = "peacekeeperbelt", - RESKIN_WORN_ICON = 'modular_nova/master_files/icons/mob/clothing/belt.dmi', - RESKIN_WORN_ICON_STATE = "peacekeeperbelt" - ) - ) - // NOVA EDIT ADDITION END /obj/item/storage/belt/security/Initialize(mapload) . = ..() @@ -373,7 +376,6 @@ /obj/item/reagent_containers/spray/pepper, /obj/item/restraints/handcuffs, /obj/item/restraints/legcuffs/bola, - /obj/item/stock_parts/cell/microfusion, //NOVA EDIT ADDITION )) /obj/item/storage/belt/security/full/PopulateContents() @@ -491,9 +493,7 @@ /obj/item/storage/belt/soulstone/Initialize(mapload) . = ..() atom_storage.max_slots = 6 - atom_storage.set_holdable(list( - /obj/item/soulstone, - )) + atom_storage.set_holdable(/obj/item/soulstone) /obj/item/storage/belt/soulstone/full/PopulateContents() for(var/i in 1 to 6) @@ -514,9 +514,7 @@ /obj/item/storage/belt/champion/Initialize(mapload) . = ..() atom_storage.max_slots = 1 - atom_storage.set_holdable(list( - /obj/item/clothing/mask/luchador, - )) + atom_storage.set_holdable(/obj/item/clothing/mask/luchador) /obj/item/storage/belt/military name = "chest rig" @@ -667,9 +665,7 @@ /obj/item/storage/belt/wands/Initialize(mapload) . = ..() atom_storage.max_slots = 6 - atom_storage.set_holdable(list( - /obj/item/gun/magic/wand, - )) + atom_storage.set_holdable(/obj/item/gun/magic/wand) /obj/item/storage/belt/wands/full/PopulateContents() new /obj/item/gun/magic/wand/death(src) @@ -831,11 +827,7 @@ atom_storage.max_slots = 1 atom_storage.rustle_sound = FALSE atom_storage.max_specific_storage = WEIGHT_CLASS_BULKY - atom_storage.set_holdable( - list( - /obj/item/melee/sabre, - ) - ) + atom_storage.set_holdable(/obj/item/melee/sabre) /obj/item/storage/belt/sabre/examine(mob/user) . = ..() diff --git a/code/game/objects/items/storage/boxes/food_boxes.dm b/code/game/objects/items/storage/boxes/food_boxes.dm index 3e23d604f6d..c49fa288eb3 100644 --- a/code/game/objects/items/storage/boxes/food_boxes.dm +++ b/code/game/objects/items/storage/boxes/food_boxes.dm @@ -14,7 +14,7 @@ /obj/item/storage/box/donkpockets/Initialize(mapload) . = ..() - atom_storage.set_holdable(list(/obj/item/food/donkpocket)) + atom_storage.set_holdable(/obj/item/food/donkpocket) /obj/item/storage/box/donkpockets/donkpocketspicy name = "box of spicy-flavoured donk-pockets" @@ -337,7 +337,7 @@ /obj/item/storage/box/gum/Initialize(mapload) . = ..() - atom_storage.set_holdable(list(/obj/item/food/bubblegum)) + atom_storage.set_holdable(/obj/item/food/bubblegum) atom_storage.max_slots = 4 /obj/item/storage/box/gum/PopulateContents() @@ -508,7 +508,7 @@ /obj/item/storage/box/coffeepack/Initialize(mapload) . = ..() - atom_storage.set_holdable(list(/obj/item/food/grown/coffee)) + atom_storage.set_holdable(/obj/item/food/grown/coffee) /obj/item/storage/box/coffeepack/PopulateContents() atom_storage.max_slots = 5 diff --git a/code/game/objects/items/storage/boxes/job_boxes.dm b/code/game/objects/items/storage/boxes/job_boxes.dm index b77d52ab3b9..8960470bb79 100644 --- a/code/game/objects/items/storage/boxes/job_boxes.dm +++ b/code/game/objects/items/storage/boxes/job_boxes.dm @@ -29,15 +29,9 @@ return if(!isnull(mask_type)) new mask_type(src) - //NOVA EDIT ADDITION START - VOX INTERNALS - Honestly I dont know if this has a function any more with wardrobe_removal(), but TG still uses the plasmaman one so better safe than sorry - if(!isplasmaman(loc)) - if(isvox(loc)) - new /obj/item/tank/internals/nitrogen/belt/emergency(src) - else - new internal_type(src) - else - new /obj/item/tank/internals/plasmaman/belt(src) - //NOVA EDIT ADDITION END - VOX INTERNALS + + if(!isnull(internal_type)) + new internal_type(src) if(!isnull(medipen_type)) new medipen_type(src) diff --git a/code/game/objects/items/storage/boxes/medical_boxes.dm b/code/game/objects/items/storage/boxes/medical_boxes.dm index c70fffc1f6e..4637b4c7d25 100644 --- a/code/game/objects/items/storage/boxes/medical_boxes.dm +++ b/code/game/objects/items/storage/boxes/medical_boxes.dm @@ -152,7 +152,7 @@ /obj/item/stack/medical/bandage, /obj/item/reagent_containers/pill, /obj/item/reagent_containers/pill/patch, - )) + )) /obj/item/storage/box/bandages/PopulateContents() for(var/i in 1 to 5) diff --git a/code/game/objects/items/storage/boxes/science_boxes.dm b/code/game/objects/items/storage/boxes/science_boxes.dm index cc8d0e7f3d0..f0654cdf024 100644 --- a/code/game/objects/items/storage/boxes/science_boxes.dm +++ b/code/game/objects/items/storage/boxes/science_boxes.dm @@ -43,7 +43,7 @@ /obj/item/storage/box/monkeycubes/Initialize(mapload) . = ..() atom_storage.max_slots = 7 - atom_storage.set_holdable(list(/obj/item/food/monkeycube)) + atom_storage.set_holdable(/obj/item/food/monkeycube) /obj/item/storage/box/monkeycubes/PopulateContents() for(var/i in 1 to 5) @@ -62,7 +62,7 @@ /obj/item/storage/box/gorillacubes/Initialize(mapload) . = ..() atom_storage.max_slots = 3 - atom_storage.set_holdable(list(/obj/item/food/monkeycube)) + atom_storage.set_holdable(/obj/item/food/monkeycube) /obj/item/storage/box/gorillacubes/PopulateContents() for(var/i in 1 to 3) diff --git a/code/game/objects/items/storage/boxes/service_boxes.dm b/code/game/objects/items/storage/boxes/service_boxes.dm index 56f59b5572e..14656f0f5f7 100644 --- a/code/game/objects/items/storage/boxes/service_boxes.dm +++ b/code/game/objects/items/storage/boxes/service_boxes.dm @@ -63,7 +63,7 @@ /obj/item/storage/box/snappops/Initialize(mapload) . = ..() - atom_storage.set_holdable(list(/obj/item/toy/snappop)) + atom_storage.set_holdable(/obj/item/toy/snappop) atom_storage.max_slots = 8 /obj/item/storage/box/snappops/PopulateContents() @@ -90,7 +90,7 @@ /obj/item/storage/box/matches/Initialize(mapload) . = ..() atom_storage.max_slots = 10 - atom_storage.set_holdable(list(/obj/item/match)) + atom_storage.set_holdable(/obj/item/match) /obj/item/storage/box/matches/PopulateContents() for(var/i in 1 to 10) diff --git a/code/game/objects/items/storage/fancy.dm b/code/game/objects/items/storage/fancy.dm index 61d96c1ff34..a7fbe6e7452 100644 --- a/code/game/objects/items/storage/fancy.dm +++ b/code/game/objects/items/storage/fancy.dm @@ -106,7 +106,7 @@ /obj/item/storage/fancy/donut_box/Initialize(mapload) . = ..() - atom_storage.set_holdable(list(/obj/item/food/donut)) + atom_storage.set_holdable(/obj/item/food/donut) /obj/item/storage/fancy/donut_box/PopulateContents() . = ..() @@ -153,7 +153,17 @@ /obj/item/storage/fancy/egg_box/Initialize(mapload) . = ..() - atom_storage.set_holdable(list(/obj/item/food/egg)) + atom_storage.set_holdable(/obj/item/food/egg) + +/* + * Fertile Egg Box + */ + +/obj/item/storage/fancy/egg_box/fertile + name = "fertile egg box" + desc = "Only one thing here is fertile, and it's not the eggs." + spawn_type = /obj/item/food/egg/fertile + spawn_count = 6 /* * Candle Box @@ -176,7 +186,7 @@ /obj/item/storage/fancy/candle_box/Initialize(mapload) . = ..() - atom_storage.set_holdable(list(/obj/item/flashlight/flare/candle)) + atom_storage.set_holdable(/obj/item/flashlight/flare/candle) //////////// //CIG PACK// @@ -395,7 +405,7 @@ /obj/item/storage/fancy/rollingpapers/Initialize(mapload) . = ..() - atom_storage.set_holdable(list(/obj/item/rollingpaper)) + atom_storage.set_holdable(/obj/item/rollingpaper) /obj/item/storage/fancy/rollingpapers/update_overlays() . = ..() @@ -421,7 +431,7 @@ /obj/item/storage/fancy/cigarettes/cigars/Initialize(mapload) . = ..() - atom_storage.set_holdable(list(/obj/item/clothing/mask/cigarette/cigar)) + atom_storage.set_holdable(/obj/item/clothing/mask/cigarette/cigar) /obj/item/storage/fancy/cigarettes/cigars/update_icon_state() . = ..() @@ -476,7 +486,7 @@ /obj/item/storage/fancy/heart_box/Initialize(mapload) . = ..() - atom_storage.set_holdable(list(/obj/item/food/bonbon)) + atom_storage.set_holdable(/obj/item/food/bonbon) /obj/item/storage/fancy/nugget_box @@ -491,7 +501,7 @@ /obj/item/storage/fancy/nugget_box/Initialize(mapload) . = ..() - atom_storage.set_holdable(list(/obj/item/food/nugget)) + atom_storage.set_holdable(/obj/item/food/nugget) /* * Jar of pickles @@ -513,7 +523,7 @@ /obj/item/storage/fancy/pickles_jar/Initialize(mapload) . = ..() - atom_storage.set_holdable(list(/obj/item/food/pickle)) + atom_storage.set_holdable(/obj/item/food/pickle) /obj/item/storage/fancy/pickles_jar/update_icon_state() . = ..() diff --git a/code/game/objects/items/storage/garment.dm b/code/game/objects/items/storage/garment.dm index 8e812ad81af..16cf07a1439 100644 --- a/code/game/objects/items/storage/garment.dm +++ b/code/game/objects/items/storage/garment.dm @@ -45,9 +45,7 @@ atom_storage.max_total_storage = 200 atom_storage.max_slots = 15 atom_storage.insert_preposition = "in" - atom_storage.set_holdable(list( - /obj/item/clothing, - )) + atom_storage.set_holdable(/obj/item/clothing) /obj/item/storage/bag/garment/captain/PopulateContents() new /obj/item/clothing/under/rank/captain(src) diff --git a/code/game/objects/items/storage/lockbox.dm b/code/game/objects/items/storage/lockbox.dm index 35b321d892f..97fe36137a2 100644 --- a/code/game/objects/items/storage/lockbox.dm +++ b/code/game/objects/items/storage/lockbox.dm @@ -114,7 +114,7 @@ atom_storage.max_specific_storage = WEIGHT_CLASS_SMALL atom_storage.max_slots = 10 atom_storage.max_total_storage = 20 - atom_storage.set_holdable(list(/obj/item/clothing/accessory/medal)) + atom_storage.set_holdable(/obj/item/clothing/accessory/medal) /obj/item/storage/lockbox/medal/examine(mob/user) . = ..() @@ -239,6 +239,8 @@ desc = "A box used to secure small cargo orders from being looted by those who didn't order it. Yeah, cargo tech, that means you." icon = 'icons/obj/storage/case.dmi' icon_state = "secure" + icon_closed = "secure" + icon_locked = "secure_locked" icon_broken = "secure+b" inhand_icon_state = "sec-case" lefthand_file = 'icons/mob/inhands/equipment/briefcase_lefthand.dmi' @@ -273,8 +275,10 @@ if(privacy_lock) atom_storage.locked = STORAGE_NOT_LOCKED + icon_state = icon_locked else atom_storage.locked = STORAGE_FULLY_LOCKED + icon_state = icon_closed privacy_lock = atom_storage.locked user.visible_message(span_notice("[user] [privacy_lock ? "" : "un"]locks [src]'s privacy lock."), span_notice("You [privacy_lock ? "" : "un"]lock [src]'s privacy lock.")) diff --git a/code/game/objects/items/storage/medkit.dm b/code/game/objects/items/storage/medkit.dm index 23d7f2a9284..e389b990a4c 100644 --- a/code/game/objects/items/storage/medkit.dm +++ b/code/game/objects/items/storage/medkit.dm @@ -666,12 +666,16 @@ /obj/item/storage/organbox/Initialize(mapload) . = ..() - create_storage(storage_type = /datum/storage/organ_box, max_specific_storage = WEIGHT_CLASS_BULKY, max_total_storage = 21) - atom_storage.set_holdable(list( - /obj/item/organ, - /obj/item/bodypart, - /obj/item/food/icecream - )) + create_storage( + storage_type = /datum/storage/organ_box, + max_specific_storage = WEIGHT_CLASS_BULKY, + max_total_storage = 21, + canhold = list( + /obj/item/organ, + /obj/item/bodypart, + /obj/item/food/icecream, + ), + ) create_reagents(100, TRANSPARENT) START_PROCESSING(SSobj, src) @@ -766,9 +770,7 @@ atom_storage.max_slots = 8 atom_storage.screen_max_columns = 4 atom_storage.screen_max_rows = 2 - atom_storage.set_holdable(list( - /obj/item/reagent_containers/cup/tube, - )) + atom_storage.set_holdable(/obj/item/reagent_containers/cup/tube) /obj/item/storage/test_tube_rack/attack_self(mob/user) emptyStorage() diff --git a/code/game/objects/items/storage/sixpack.dm b/code/game/objects/items/storage/sixpack.dm index 8a447b4dfb1..a6e36bf0592 100644 --- a/code/game/objects/items/storage/sixpack.dm +++ b/code/game/objects/items/storage/sixpack.dm @@ -30,8 +30,8 @@ /obj/item/reagent_containers/cup/soda_cans, /obj/item/reagent_containers/cup/glass/bottle/beer, /obj/item/reagent_containers/cup/glass/bottle/ale, - /obj/item/reagent_containers/cup/glass/waterbottle - )) + /obj/item/reagent_containers/cup/glass/waterbottle, + )) /obj/item/storage/cans/sixsoda name = "soda bottle ring" diff --git a/code/game/objects/items/storage/storage.dm b/code/game/objects/items/storage/storage.dm index 501d3d2624b..cfdfef8a459 100644 --- a/code/game/objects/items/storage/storage.dm +++ b/code/game/objects/items/storage/storage.dm @@ -53,17 +53,13 @@ max_slots, max_specific_storage, max_total_storage, - numerical_stacking, - allow_quick_gather, - allow_quick_empty, - collection_mode, - attack_hand_interact, list/canhold, list/canthold, + storage_type = /datum/storage, storage_type, - ) - if(!storage_type) // If no type was passed in, default to what we already have - storage_type = src.storage_type +) + // If no type was passed in, default to what we already have + storage_type ||= src.storage_type return ..() diff --git a/code/game/objects/items/storage/uplink_kits.dm b/code/game/objects/items/storage/uplink_kits.dm index 345fe7e0ae4..7546028dded 100644 --- a/code/game/objects/items/storage/uplink_kits.dm +++ b/code/game/objects/items/storage/uplink_kits.dm @@ -682,12 +682,11 @@ implant_color = "r" /obj/item/implant/nuclear_operative/get_data() - var/dat = {"Implant Specifications:
- Name: Suspicious Implant
- Life: UNKNOWN
- Implant Details:
- Function: Strange implant that seems to resist any attempts at scanning it."} - return dat + return "Implant Specifications:
\ + Name: Suspicious Implant
\ + Life: UNKNOWN
\ + Implant Details:
\ + Function: Strange implant that seems to resist any attempts at scanning it." /obj/item/implant/nuclear_operative/implant(mob/living/target, mob/user, silent = FALSE, force = FALSE) . = ..() @@ -771,36 +770,9 @@ illustration = "writing_syndie" /obj/item/storage/box/syndicate/contract_kit/PopulateContents() - new /obj/item/modular_computer/pda/contractor(src) // SKYRAT EDIT CHANGE - ORIGINAL : /obj/item/modular_computer/pda/syndicate_contract_uplink(src) + new /obj/item/modular_computer/pda/contractor(src) // NOVA EDIT CHANGE - ORIGINAL : /obj/item/modular_computer/pda/syndicate_contract_uplink(src) new /obj/item/storage/box/syndicate/contractor_loadout(src) new /obj/item/melee/baton/telescopic/contractor_baton(src) - - // All about 4 TC or less - some nukeops only items, but fit nicely to the theme. - var/static/list/item_list = list( - /obj/item/storage/backpack/duffelbag/syndie/x4, - /obj/item/storage/box/syndie_kit/throwing_weapons, - /obj/item/gun/syringe/syndicate, - /obj/item/pen/edagger, - /obj/item/pen/sleepy, - /obj/item/flashlight/emp, - /obj/item/reagent_containers/syringe/mulligan, - /obj/item/clothing/shoes/chameleon/noslip, - /obj/item/storage/medkit/tactical, - /obj/item/encryptionkey/syndicate, - /obj/item/clothing/glasses/thermal/syndi, - /obj/item/slimepotion/slime/sentience/nuclear, - /obj/item/storage/box/syndie_kit/imp_radio, - ///obj/item/storage/box/syndie_kit/imp_uplink, // SKYRAT EDIT REMOVAL - ///obj/item/clothing/gloves/krav_maga/combatglovesplus, // SKYRAT EDIT REMOVAL - /obj/item/gun/ballistic/automatic/c20r/toy/unrestricted/riot, - /obj/item/reagent_containers/hypospray/medipen/stimulants, - /obj/item/storage/box/syndie_kit/imp_freedom, - /obj/item/toy/eightball/haunted, - ) - for(var/i in 1 to 3) - var/selected_item = pick_n_take(item_list + modular_item_list) // NOVA EDIT CHANGE - ORIGINAL : var/selected_item = pick_n_take(item_list) - new selected_item(src) - // Paper guide is always last. new /obj/item/paper/contractor_guide(src) @@ -811,14 +783,18 @@ illustration = "writing_syndie" /obj/item/storage/box/syndicate/contractor_loadout/PopulateContents() - /* SKYRAT EDIT REMOVAL BEGIN - Contractors get MODSuits instead, see contractor modular for overrides + /* NOVA EDIT REMOVAL BEGIN - Contractors get MODSuits instead, see contractor modular for overrides + new /obj/item/mod/control/pre_equipped/infiltrator(src) new /obj/item/clothing/head/helmet/space/syndicate/contract(src) new /obj/item/clothing/suit/space/syndicate/contract(src) - SKYRAT EDIT REMOVAL END */ + NOVA EDIT REMOVAL END */ new /obj/item/clothing/under/chameleon(src) new /obj/item/clothing/mask/chameleon(src) - new /obj/item/storage/fancy/cigarettes/cigpack_syndicate(src) new /obj/item/card/id/advanced/chameleon(src) + new /obj/item/clothing/glasses/thermal/syndi(src) + new /obj/item/storage/toolbox/syndicate(src) + new /obj/item/jammer(src) + new /obj/item/storage/fancy/cigarettes/cigpack_syndicate(src) new /obj/item/lighter(src) #undef KIT_RECON diff --git a/code/game/objects/items/surgery_tray.dm b/code/game/objects/items/surgery_tray.dm index 958fb9fef05..0ab652f80be 100644 --- a/code/game/objects/items/surgery_tray.dm +++ b/code/game/objects/items/surgery_tray.dm @@ -1,29 +1,3 @@ -/datum/storage/surgery_tray - max_total_storage = 30 - max_specific_storage = WEIGHT_CLASS_NORMAL - max_slots = 14 - -/datum/storage/surgery_tray/New() - . = ..() - set_holdable(list( - /obj/item/autopsy_scanner, - /obj/item/blood_filter, - /obj/item/bonesetter, - /obj/item/cautery, - /obj/item/circular_saw, - /obj/item/clothing/mask/surgical, - /obj/item/clothing/suit/toggle/labcoat/hospitalgown, // NOVA EDIT ADDITION - /obj/item/hemostat, - /obj/item/razor, - /obj/item/reagent_containers/medigel, - /obj/item/retractor, - /obj/item/scalpel, - /obj/item/stack/medical/bone_gel, - /obj/item/stack/sticky_tape/surgical, - /obj/item/surgical_drapes, - /obj/item/surgicaldrill, - )) - /** * Surgery Trays * A storage object that displays tools in its contents based on tier, better tools are more visible. diff --git a/code/game/objects/items/tanks/tanks.dm b/code/game/objects/items/tanks/tanks.dm index 6b84407ed30..a670a966805 100644 --- a/code/game/objects/items/tanks/tanks.dm +++ b/code/game/objects/items/tanks/tanks.dm @@ -1,5 +1,9 @@ /// How much time (in seconds) is assumed to pass while assuming air. Used to scale overpressure/overtemp damage when assuming air. #define ASSUME_AIR_DT_FACTOR 1 +/// Multiplies the pressure of assembly bomb explosions before it's put through THE LOGARITHM +#define ASSEMBLY_BOMB_COEFFICIENT 0.5 +/// Base of the logarithmic function used to calculate assembly bomb explosion size +#define ASSEMBLY_BOMB_BASE 2.7 /** * # Gas Tank @@ -48,6 +52,10 @@ var/list/reaction_info /// Mob that is currently breathing from the tank. var/mob/living/carbon/breathing_mob = null + /// Attached assembly, can either detonate the tank or release its contents when receiving a signal + var/obj/item/assembly_holder/tank_assembly + /// Whether or not it will try to explode when it receives a signal + var/bomb_status = FALSE /// Closes the tank if dropped while open. /datum/armor/item_tank @@ -123,8 +131,16 @@ /obj/item/tank/Destroy() STOP_PROCESSING(SSobj, src) air_contents = null + QDEL_NULL(tank_assembly) return ..() +/obj/item/tank/update_overlays() + . = ..() + if(tank_assembly) + . += tank_assembly.icon_state + . += tank_assembly.overlays + . += "bomb_assembly" + /obj/item/tank/examine(mob/user) var/obj/icon = src . = ..() @@ -155,6 +171,9 @@ . += span_notice("It feels [descriptive].") + if(tank_assembly) + . += span_warning("There is some kind of device [EXAMINE_HINT("rigged")] to the tank!") + /obj/item/tank/deconstruct(disassembled = TRUE) var/atom/location = loc if(location) @@ -176,8 +195,30 @@ /obj/item/tank/attackby(obj/item/attacking_item, mob/user, params) add_fingerprint(user) if(istype(attacking_item, /obj/item/assembly_holder)) + if(tank_assembly) + balloon_alert(user, "something already attached!") + return ITEM_INTERACT_BLOCKING bomb_assemble(attacking_item, user) - return TRUE + return ITEM_INTERACT_SUCCESS + return ..() + +/obj/item/tank/wrench_act(mob/living/user, obj/item/tool) + if(tank_assembly) + tool.play_tool_sound(src) + bomb_disassemble(user) + return ITEM_INTERACT_SUCCESS + return ..() + +/obj/item/tank/welder_act(mob/living/user, obj/item/tool) + if(bomb_status) + balloon_alert(user, "already welded!") + return ITEM_INTERACT_BLOCKING + if(tool.use_tool(src, user, 0, volume=40)) + bomb_status = TRUE + balloon_alert(user, "bomb armed") + log_bomber(user, "welded a single tank bomb,", src, "| Temp: [air_contents.temperature] Pressure: [air_contents.return_pressure()]") + add_fingerprint(user) + return ITEM_INTERACT_SUCCESS return ..() /obj/item/tank/ui_state(mob/user) @@ -361,16 +402,93 @@ /obj/item/tank/proc/explosion_information() return list(TANK_RESULTS_REACTION = reaction_info, TANK_RESULTS_MISC = explosion_info) -/obj/item/tank/proc/ignite() //This happens when a bomb is told to explode +/obj/item/tank/on_found(mob/finder) //for mousetraps + . = ..() + if(tank_assembly) + tank_assembly.on_found(finder) + +/obj/item/tank/attack_hand() //also for mousetraps + if(..()) + return + if(tank_assembly) + tank_assembly.attack_hand() + +/obj/item/tank/Move() + . = ..() + if(tank_assembly) + tank_assembly.setDir(dir) + +/obj/item/tank/dropped() + . = ..() + if(tank_assembly) + tank_assembly.dropped() + +/obj/item/tank/IsSpecialAssembly() + return TRUE + +/obj/item/tank/receive_signal() //This is mainly called by the sensor through sense() to the holder, and from the holder to here. + audible_message(span_warning("[icon2html(src, hearers(src))] *beep* *beep* *beep*")) + playsound(src, 'sound/machines/triple_beep.ogg', ASSEMBLY_BEEP_VOLUME, TRUE) + addtimer(CALLBACK(src, PROC_REF(ignite)), 1 SECONDS) + +/// Attaches an assembly holder to the tank to create a bomb. +/obj/item/tank/proc/bomb_assemble(obj/item/assembly_holder/assembly, mob/living/user) + //Check if either part of the assembly has an igniter, but if both parts are igniters, then fuck it + var/igniter_count = 0 + for(var/obj/item/assembly/igniter/attached_assembly in assembly.assemblies) + igniter_count++ + + if(LAZYLEN(assembly.assemblies) == igniter_count) + return + + if(isitem(loc)) // we are in a storage item + balloon_alert(user, "can't reach!") + return + + if((src in user.get_equipped_items(include_pockets = TRUE, include_accessories = TRUE)) && !user.canUnEquip(src)) + balloon_alert(user, "it's stuck!") + return + + if(!user.canUnEquip(assembly)) + balloon_alert(user, "it's stuck!") + return + + if(!user.transferItemToLoc(assembly, src)) + balloon_alert(user, "it's stuck!") + return + + tank_assembly = assembly //Tell the tank about its assembly part + assembly.master = src //Tell the assembly about its new owner + assembly.on_attach() + w_class = WEIGHT_CLASS_BULKY + + balloon_alert(user, "bomb assembled") + update_appearance(UPDATE_OVERLAYS) + +/// Detaches an assembly holder from the tank, disarming the bomb +/obj/item/tank/proc/bomb_disassemble(mob/user) + bomb_status = FALSE + balloon_alert(user, "bomb disarmed") + if(!tank_assembly) + CRASH("bomb_disassemble() called on a tank with no assembly!") + user.put_in_hands(tank_assembly) + tank_assembly.master = null + tank_assembly = null + w_class = initial(w_class) + update_appearance(UPDATE_OVERLAYS) + +/// Ignites the contents of the tank. Called when receiving a signal if the tank is welded and has an igniter attached. +/obj/item/tank/proc/ignite() + if(!bomb_status) // if it isn't welded, release the gases instead + release() + return + + // check to make sure it's not already exploding before exploding it if(igniting) - stack_trace("Attempted to ignite a /obj/item/tank multiple times") - return //no double ignite + CRASH("ignite() called multiple times on [type]") igniting = TRUE - // This is done in return_air call, but even then it actually makes zero sense, this tank is going to be deleted - // before ever getting a chance to process. - //START_PROCESSING(SSobj, src) - var/datum/gas_mixture/our_mix = return_air() + var/datum/gas_mixture/our_mix = return_air() our_mix.assert_gases(/datum/gas/plasma, /datum/gas/oxygen) var/fuel_moles = our_mix.gases[/datum/gas/plasma][MOLES] + our_mix.gases[/datum/gas/oxygen][MOLES]/6 our_mix.garbage_collect() @@ -379,6 +497,14 @@ var/turf/ground_zero = get_turf(loc) + /// Used to determine what the temperature of the hotspot when it isn't able to explode + var/igniter_temperature = 0 + for(var/obj/item/assembly/igniter/firestarter in tank_assembly.assemblies) + igniter_temperature = max(igniter_temperature, firestarter.heat) + + if(!igniter_temperature) + CRASH("[type] called ignite() without any igniters attached") + if(bomb_mixture.temperature > (T0C + 400)) strength = (fuel_moles/15) @@ -392,7 +518,7 @@ explosion(ground_zero, devastation_range = -1, light_impact_range = 1, flash_range = 2, explosion_cause = src) else ground_zero.assume_air(bomb_mixture) - ground_zero.hotspot_expose(1000, 125) + ground_zero.hotspot_expose(igniter_temperature, 125) else if(bomb_mixture.temperature > (T0C + 250)) strength = (fuel_moles/20) @@ -403,7 +529,7 @@ explosion(ground_zero, devastation_range = -1, light_impact_range = 1, flash_range = 2, explosion_cause = src) else ground_zero.assume_air(bomb_mixture) - ground_zero.hotspot_expose(1000, 125) + ground_zero.hotspot_expose(igniter_temperature, 125) else if(bomb_mixture.temperature > (T0C + 100)) strength = (fuel_moles/25) @@ -412,21 +538,24 @@ explosion(ground_zero, devastation_range = -1, light_impact_range = round(strength,1), flash_range = round(strength*3,1), explosion_cause = src) else ground_zero.assume_air(bomb_mixture) - ground_zero.hotspot_expose(1000, 125) + ground_zero.hotspot_expose(igniter_temperature, 125) else ground_zero.assume_air(bomb_mixture) - ground_zero.hotspot_expose(1000, 125) + ground_zero.hotspot_expose(igniter_temperature, 125) - if(master) - qdel(master) qdel(src) -/obj/item/tank/proc/release() //This happens when the bomb is not welded. Tank contents are just spat out. +/// Releases air stored in the tank. Called when signaled without being welded, or when ignited without enough pressure to explode. +/obj/item/tank/proc/release() var/datum/gas_mixture/our_mix = return_air() var/datum/gas_mixture/removed = remove_air(our_mix.total_moles()) var/turf/T = get_turf(src) if(!T) return + log_atmos("[type] released its contents of ", air_contents) T.assume_air(removed) + +#undef ASSEMBLY_BOMB_BASE +#undef ASSEMBLY_BOMB_COEFFICIENT #undef ASSUME_AIR_DT_FACTOR diff --git a/code/game/objects/items/tcg/tcg.dm b/code/game/objects/items/tcg/tcg.dm index ced4919c448..61d0dbe071d 100644 --- a/code/game/objects/items/tcg/tcg.dm +++ b/code/game/objects/items/tcg/tcg.dm @@ -414,7 +414,7 @@ GLOBAL_LIST_EMPTY(tcgcard_radial_choices) /obj/item/storage/card_binder/Initialize(mapload) . = ..() - atom_storage.set_holdable(list(/obj/item/tcgcard)) + atom_storage.set_holdable(/obj/item/tcgcard) atom_storage.max_total_storage = 120 atom_storage.max_slots = 60 diff --git a/code/game/objects/items/tools/weldingtool.dm b/code/game/objects/items/tools/weldingtool.dm index b48106d0c1d..7995267954e 100644 --- a/code/game/objects/items/tools/weldingtool.dm +++ b/code/game/objects/items/tools/weldingtool.dm @@ -17,7 +17,7 @@ usesound = list('sound/items/welder.ogg', 'sound/items/welder2.ogg') drop_sound = 'sound/items/handling/weldingtool_drop.ogg' pickup_sound = 'sound/items/handling/weldingtool_pickup.ogg' - light_system = MOVABLE_LIGHT + light_system = OVERLAY_LIGHT light_range = 2 light_power = 0.75 light_color = LIGHT_COLOR_FIRE diff --git a/code/game/objects/items/trash.dm b/code/game/objects/items/trash.dm index ffca12c094f..ff540932f31 100644 --- a/code/game/objects/items/trash.dm +++ b/code/game/objects/items/trash.dm @@ -80,6 +80,11 @@ name = "energybar wrapper" icon_state = "energybar" +/obj/item/trash/fleet_ration + name = "surplus fleet wrapper" + desc = "In the Mothic Fleet every individual wrapper is carefully recycled and repurposed into fresh material. Over here they are more commonly dropped directly onto the floor." + icon_state = "moth_ration" + /obj/item/trash/waffles name = "waffles tray" icon_state = "waffles" diff --git a/code/game/objects/objs.dm b/code/game/objects/objs.dm index 91f1ca925ab..cb57c5049bb 100644 --- a/code/game/objects/objs.dm +++ b/code/game/objects/objs.dm @@ -373,6 +373,8 @@ GLOBAL_LIST_EMPTY(objects_by_id_tag) /// If we can unwrench this object; returns SUCCESSFUL_UNFASTEN and FAILED_UNFASTEN, which are both TRUE, or CANT_UNFASTEN, which isn't. /obj/proc/can_be_unfasten_wrench(mob/user, silent) + if(obj_flags & NO_DECONSTRUCTION) + return CANT_UNFASTEN if(!(isfloorturf(loc) || isindestructiblefloor(loc)) && !anchored) to_chat(user, span_warning("[src] needs to be on the floor to be secured!")) return FAILED_UNFASTEN @@ -380,7 +382,7 @@ GLOBAL_LIST_EMPTY(objects_by_id_tag) /// Try to unwrench an object in a WONDERFUL DYNAMIC WAY /obj/proc/default_unfasten_wrench(mob/user, obj/item/wrench, time = 20) - if((obj_flags & NO_DECONSTRUCTION) || wrench.tool_behaviour != TOOL_WRENCH) + if(wrench.tool_behaviour != TOOL_WRENCH) return CANT_UNFASTEN var/turf/ground = get_turf(src) diff --git a/code/game/objects/structures.dm b/code/game/objects/structures.dm index 1943f0aa398..3d976b72cca 100644 --- a/code/game/objects/structures.dm +++ b/code/game/objects/structures.dm @@ -69,3 +69,10 @@ /obj/structure/animate_atom_living(mob/living/owner) new /mob/living/simple_animal/hostile/mimic/copy(drop_location(), src, owner) + +/// For when a mob comes flying through the window, smash it and damage the mob +/obj/structure/proc/smash_and_injure(mob/living/flying_mob, atom/oldloc, direction) + flying_mob.balloon_alert_to_viewers("smashed through!") + flying_mob.apply_damage(damage = rand(5, 15), damagetype = BRUTE, wound_bonus = 15, bare_wound_bonus = 25, sharpness = SHARP_EDGED, attack_direction = get_dir(src, oldloc)) + new /obj/effect/decal/cleanable/glass(get_step(flying_mob, flying_mob.dir)) + deconstruct(disassembled = FALSE) diff --git a/code/game/objects/structures/beds_chairs/alien_nest.dm b/code/game/objects/structures/beds_chairs/alien_nest.dm index 32e1226c93e..0a157dc98a1 100644 --- a/code/game/objects/structures/beds_chairs/alien_nest.dm +++ b/code/game/objects/structures/beds_chairs/alien_nest.dm @@ -12,7 +12,7 @@ smoothing_groups = SMOOTH_GROUP_ALIEN_NEST canSmoothWith = SMOOTH_GROUP_ALIEN_NEST build_stack_type = null - obj_flags = /obj::obj_flags | NO_DECONSTRUCTION + obj_flags = parent_type::obj_flags | NO_DECONSTRUCTION elevation = 0 var/static/mutable_appearance/nest_overlay = mutable_appearance('icons/mob/nonhuman-player/alien.dmi', "nestoverlay", LYING_MOB_LAYER) diff --git a/code/game/objects/structures/beds_chairs/bed.dm b/code/game/objects/structures/beds_chairs/bed.dm index 0eeb8ee15b2..e2038cb623b 100644 --- a/code/game/objects/structures/beds_chairs/bed.dm +++ b/code/game/objects/structures/beds_chairs/bed.dm @@ -118,6 +118,12 @@ /obj/structure/bed/medical/AltClick(mob/user) . = ..() + if(!can_interact(user)) + return + + if(has_buckled_mobs() && (user in buckled_mobs)) + return + anchored = !anchored balloon_alert(user, "brakes [anchored ? "applied" : "released"]") update_appearance() diff --git a/code/game/objects/structures/beds_chairs/chair.dm b/code/game/objects/structures/beds_chairs/chair.dm index 9fd8da19391..01b201836ea 100644 --- a/code/game/objects/structures/beds_chairs/chair.dm +++ b/code/game/objects/structures/beds_chairs/chair.dm @@ -492,7 +492,7 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/structure/chair/stool/bar, 0) icon_state = null buildstacktype = null item_chair = null - obj_flags = /obj::obj_flags | NO_DECONSTRUCTION + obj_flags = parent_type::obj_flags | NO_DECONSTRUCTION alpha = 0 /obj/structure/chair/mime/post_buckle_mob(mob/living/M) diff --git a/code/game/objects/structures/bedsheet_bin.dm b/code/game/objects/structures/bedsheet_bin.dm index 5ea634cf5f8..f80042f5679 100644 --- a/code/game/objects/structures/bedsheet_bin.dm +++ b/code/game/objects/structures/bedsheet_bin.dm @@ -4,10 +4,6 @@ BEDSHEETS LINEN BINS */ -#define BEDSHEET_ABSTRACT "abstract" -#define BEDSHEET_SINGLE "single" -#define BEDSHEET_DOUBLE "double" - /obj/item/bedsheet name = "bedsheet" desc = "A surprisingly soft linen bedsheet." @@ -28,7 +24,9 @@ LINEN BINS dog_fashion = /datum/dog_fashion/head/ghost /// Custom nouns to act as the subject of dreams var/list/dream_messages = list("white") - /// The number of cloth sheets to be dropped by this bedsheet when cut + /// Cutting it up will yield this. + var/stack_type = /obj/item/stack/sheet/cloth + /// The number of sheets dropped by this bedsheet when cut var/stack_amount = 3 /// Denotes if the bedsheet is a single, double, or other kind of bedsheet var/bedsheet_type = BEDSHEET_SINGLE @@ -126,7 +124,7 @@ LINEN BINS /obj/item/bedsheet/attackby(obj/item/I, mob/user, params) if(I.tool_behaviour == TOOL_WIRECUTTER || I.get_sharpness()) if (!(flags_1 & HOLOGRAM_1)) - var/obj/item/stack/sheet/cloth/shreds = new (get_turf(src), stack_amount) + var/obj/item/stack/shreds = new stack_type(get_turf(src), stack_amount) if(!QDELETED(shreds)) //stacks merged transfer_fingerprints_to(shreds) shreds.add_fingerprint(user) @@ -338,6 +336,60 @@ LINEN BINS inhand_icon_state = "sheetian" dream_messages = list("a dog", "a corgi", "woof", "bark", "arf") +/obj/item/bedsheet/runtime + icon_state = "sheetruntime" + inhand_icon_state = "sheetruntime" + dream_messages = list("a kitty", "a cat", "meow", "purr", "nya~") + +/obj/item/bedsheet/pirate + name = "pirate's bedsheet" + desc = "It has a Jolly Roger emblem on it and has a faint scent of grog." + icon_state = "sheetpirate" + inhand_icon_state = "sheetpirate" + dream_messages = list( + "a buried treasure", + "an island", + "a monkey", + "a parrot", + "a swashbuckler", + "a talking skull", + "avast", + "being a pirate", + "'cause a pirate is free", + "doing whatever you want", + "gold", + "landlubbers", + "stealing", + "sailing the Seven Seas", + "yarr", + ) + +/obj/item/bedsheet/gondola + name = "gondola bedsheet" + desc = "A precious bedsheet made from the hide of a endangered and peculiar critter." + icon_state = "sheetgondola" + inhand_icon_state = "sheetgondola" + dream_messages = list("peace", "comfiness", "a rare critter", "a harmless creature") + stack_type = /obj/item/stack/sheet/animalhide/gondola + stack_amount = 1 + ///one of four icon states that represent its mouth + var/gondola_mouth + ///one of four icon states that represent its eyes + var/gondola_eyes + +/obj/item/bedsheet/gondola/Initialize(mapload) + . = ..() + gondola_mouth = "sheetgondola_mouth[rand(1, 4)]" + gondola_eyes = "sheetgondola_eyes[rand(1, 4)]" + add_overlay(gondola_mouth) + add_overlay(gondola_eyes) + +/obj/item/bedsheet/gondola/worn_overlays(mutable_appearance/standing, isinhands, icon_file) + . = ..() + if(!isinhands) + . += mutable_appearance(icon_file, gondola_mouth) + . += mutable_appearance(icon_file, gondola_eyes) + /obj/item/bedsheet/cosmos name = "cosmic space bedsheet" desc = "Made from the dreams of those who wonder at the stars." @@ -347,65 +399,6 @@ LINEN BINS light_power = 2 light_range = 1.4 -/obj/item/bedsheet/random - icon_state = "random_bedsheet" - name = "random bedsheet" - desc = "If you're reading this description ingame, something has gone wrong! Honk!" - bedsheet_type = BEDSHEET_ABSTRACT - item_flags = ABSTRACT - var/static/list/bedsheet_list - var/spawn_type = BEDSHEET_SINGLE - -/obj/item/bedsheet/random/Initialize(mapload) - ..() - if(!LAZYACCESS(bedsheet_list, spawn_type)) - var/list/spawn_list = list() - var/list/possible_types = typesof(/obj/item/bedsheet) - for(var/obj/item/bedsheet/sheet as anything in possible_types) - if(initial(sheet.bedsheet_type) == spawn_type) - spawn_list += sheet - LAZYSET(bedsheet_list, spawn_type, spawn_list) - var/chosen_type = pick(bedsheet_list[spawn_type]) - new chosen_type(loc) - return INITIALIZE_HINT_QDEL - -/obj/item/bedsheet/random/double - icon_state = "random_bedsheet" - spawn_type = BEDSHEET_DOUBLE - -/obj/item/bedsheet/dorms - icon_state = "random_bedsheet" - name = "random dorms bedsheet" - desc = "If you're reading this description ingame, something has gone wrong! Honk!" - bedsheet_type = BEDSHEET_DOUBLE - item_flags = ABSTRACT - slot_flags = null - -/obj/item/bedsheet/dorms/Initialize(mapload) - ..() - var/type = pick_weight(list("Colors" = 80, "Special" = 20)) - switch(type) - if("Colors") - type = pick(list(/obj/item/bedsheet, - /obj/item/bedsheet/blue, - /obj/item/bedsheet/green, - /obj/item/bedsheet/grey, - /obj/item/bedsheet/orange, - /obj/item/bedsheet/purple, - /obj/item/bedsheet/red, - /obj/item/bedsheet/yellow, - /obj/item/bedsheet/brown, - /obj/item/bedsheet/black)) - if("Special") - type = pick(list(/obj/item/bedsheet/patriot, - /obj/item/bedsheet/rainbow, - /obj/item/bedsheet/ian, - /obj/item/bedsheet/cosmos, - /obj/item/bedsheet/nanotrasen)) - var/obj/item/bedsheet = new type(loc) - bedsheet.dir = dir - return INITIALIZE_HINT_QDEL - /obj/item/bedsheet/double icon_state = "double_sheetwhite" worn_icon_state = "sheetwhite" @@ -558,45 +551,16 @@ LINEN BINS worn_icon_state = "sheetian" bedsheet_type = BEDSHEET_DOUBLE +/obj/item/bedsheet/runtime/double + icon_state = "double_sheetruntime" + worn_icon_state = "sheetruntime" + bedsheet_type = BEDSHEET_DOUBLE + /obj/item/bedsheet/cosmos/double icon_state = "double_sheetcosmos" worn_icon_state = "sheetcosmos" bedsheet_type = BEDSHEET_DOUBLE -/obj/item/bedsheet/dorms_double - icon_state = "random_bedsheet" - item_flags = ABSTRACT - bedsheet_type = BEDSHEET_ABSTRACT - -/obj/item/bedsheet/dorms_double/Initialize(mapload) - ..() - var/type = pick_weight(list("Colors" = 80, "Special" = 20)) - switch(type) - if("Colors") - type = pick(list( - /obj/item/bedsheet/double, - /obj/item/bedsheet/blue/double, - /obj/item/bedsheet/green/double, - /obj/item/bedsheet/grey/double, - /obj/item/bedsheet/orange/double, - /obj/item/bedsheet/purple/double, - /obj/item/bedsheet/red/double, - /obj/item/bedsheet/yellow/double, - /obj/item/bedsheet/brown/double, - /obj/item/bedsheet/black/double, - )) - if("Special") - type = pick(list( - /obj/item/bedsheet/patriot/double, - /obj/item/bedsheet/rainbow/double, - /obj/item/bedsheet/ian/double, - /obj/item/bedsheet/cosmos/double, - /obj/item/bedsheet/nanotrasen/double, - )) - var/obj/item/bedsheet = new type(loc) - bedsheet.dir = dir - return INITIALIZE_HINT_QDEL - /obj/structure/bedsheetbin name = "linen bin" desc = "It looks rather cosy." @@ -735,7 +699,3 @@ LINEN BINS add_fingerprint(user) return COMPONENT_CANCEL_ATTACK_CHAIN - -#undef BEDSHEET_ABSTRACT -#undef BEDSHEET_SINGLE -#undef BEDSHEET_DOUBLE diff --git a/code/game/objects/structures/construction_console/construction_console.dm b/code/game/objects/structures/construction_console/construction_console.dm index d33c91f7c07..720f568369e 100644 --- a/code/game/objects/structures/construction_console/construction_console.dm +++ b/code/game/objects/structures/construction_console/construction_console.dm @@ -80,12 +80,12 @@ /obj/machinery/computer/camera_advanced/base_construction/GrantActions(mob/living/user) ..() //When the eye is in use, make it visible to players so they know when someone is building. - SetInvisibility(INVISIBILITY_NONE, id=type) + eyeobj.SetInvisibility(INVISIBILITY_NONE, id=type) /obj/machinery/computer/camera_advanced/base_construction/remove_eye_control(mob/living/user) ..() //Set back to default invisibility when not in use. - RemoveInvisibility(type) + eyeobj.RemoveInvisibility(type) /** * A mob used by [/obj/machinery/computer/camera_advanced/base_construction] for building in specific areas. diff --git a/code/game/objects/structures/crates_lockers/closets.dm b/code/game/objects/structures/crates_lockers/closets.dm index d00c2becbe2..b3d3c7085bd 100644 --- a/code/game/objects/structures/crates_lockers/closets.dm +++ b/code/game/objects/structures/crates_lockers/closets.dm @@ -145,7 +145,7 @@ GLOBAL_LIST_EMPTY(roundstart_station_closets) populate_contents_immediate() var/static/list/loc_connections = list( - COMSIG_CARBON_DISARM_COLLIDE = PROC_REF(locker_carbon), + COMSIG_LIVING_DISARM_COLLIDE = PROC_REF(locker_living), COMSIG_ATOM_MAGICALLY_UNLOCKED = PROC_REF(on_magic_unlock), ) AddElement(/datum/element/connect_loc, loc_connections) @@ -1160,11 +1160,11 @@ GLOBAL_LIST_EMPTY(roundstart_station_closets) /obj/structure/closet/return_temperature() return -/obj/structure/closet/proc/locker_carbon(datum/source, mob/living/carbon/shover, mob/living/carbon/target, shove_blocked) +/obj/structure/closet/proc/locker_living(datum/source, mob/living/shover, mob/living/target, shove_flags, obj/item/weapon) SIGNAL_HANDLER if(!opened && (locked || welded)) //Yes this could be less code, no I don't care return - if(!opened && !shove_blocked) + if(!opened && ((shove_flags & SHOVE_KNOCKDOWN_BLOCKED) || !(shove_flags & SHOVE_BLOCKED))) return var/was_opened = opened if(!toggle()) @@ -1174,18 +1174,12 @@ GLOBAL_LIST_EMPTY(roundstart_station_closets) else target.Knockdown(SHOVE_KNOCKDOWN_SOLID) update_icon() - if(target == shover) - target.visible_message(span_danger("[target.name] shoves [target.p_them()]self into [src]!"), - null, - span_hear("You hear shuffling followed by a loud thud!"), COMBAT_MESSAGE_RANGE, shover) - to_chat(shover, span_notice("You shove yourself into [src]!")) - else - target.visible_message(span_danger("[shover.name] shoves [target.name] into [src]!"), - span_userdanger("You're shoved into [src] by [shover.name]!"), - span_hear("You hear aggressive shuffling followed by a loud thud!"), COMBAT_MESSAGE_RANGE, shover) - to_chat(src, span_danger("You shove [target.name] into [src]!")) - log_combat(shover, target, "shoved", "into [src] (locker/crate)") - return COMSIG_CARBON_SHOVE_HANDLED + target.visible_message(span_danger("[shover.name] shoves [target.name] into [src]!"), + span_userdanger("You're shoved into [src] by [shover.name]!"), + span_hear("You hear aggressive shuffling followed by a loud thud!"), COMBAT_MESSAGE_RANGE, shover) + to_chat(src, span_danger("You shove [target.name] into [src]!")) + log_combat(shover, target, "shoved", "into [src] (locker/crate)[weapon ? " with [weapon]" : ""]") + return COMSIG_LIVING_SHOVE_HANDLED /// Signal proc for [COMSIG_ATOM_MAGICALLY_UNLOCKED]. Unlock and open up when we get knock casted. /obj/structure/closet/proc/on_magic_unlock(datum/source, datum/action/cooldown/spell/aoe/knock/spell, atom/caster) diff --git a/code/game/objects/structures/crates_lockers/closets/secure/bar.dm b/code/game/objects/structures/crates_lockers/closets/secure/bar.dm index 473fedfa10a..fdaa0c3b69e 100644 --- a/code/game/objects/structures/crates_lockers/closets/secure/bar.dm +++ b/code/game/objects/structures/crates_lockers/closets/secure/bar.dm @@ -36,7 +36,7 @@ for(var/i in 1 to 5) new /obj/item/reagent_containers/cup/glass/colocup(src) -/obj/structure/closet/secure/closet/bar/lavaland_bartender_clothes +/obj/structure/closet/secure_closet/bar/lavaland_bartender_clothes name = "bartender's closet" /obj/structure/closet/secure_closet/bar/lavaland_bartender_clothes/PopulateContents() @@ -44,4 +44,3 @@ new /obj/item/clothing/glasses/sunglasses/reagent(src) new /obj/item/clothing/suit/costume/hawaiian(src) new /obj/item/clothing/shoes/sandal/beach(src) - diff --git a/code/game/objects/structures/crates_lockers/crates.dm b/code/game/objects/structures/crates_lockers/crates.dm index 89b6245a6a0..c43a83b085a 100644 --- a/code/game/objects/structures/crates_lockers/crates.dm +++ b/code/game/objects/structures/crates_lockers/crates.dm @@ -1,7 +1,7 @@ /obj/structure/closet/crate name = "crate" desc = "A rectangular steel crate." - icon = 'icons/obj/storage/crates.dmi' //ICON OVERRIDEN IN SKYRAT AESTHETICS - SEE MODULE + icon = 'icons/obj/storage/crates.dmi' icon_state = "crate" base_icon_state = "crate" req_access = null diff --git a/code/game/objects/structures/false_walls.dm b/code/game/objects/structures/false_walls.dm index 9f4f4fdd73f..eaf830b7db7 100644 --- a/code/game/objects/structures/false_walls.dm +++ b/code/game/objects/structures/false_walls.dm @@ -43,12 +43,12 @@ return opening = TRUE - update_appearance() if(!density) var/srcturf = get_turf(src) for(var/mob/living/obstacle in srcturf) //Stop people from using this as a shield opening = FALSE return + update_appearance() addtimer(CALLBACK(src, TYPE_PROC_REF(/obj/structure/falsewall, toggle_open)), 5) /obj/structure/falsewall/proc/toggle_open() diff --git a/code/game/objects/structures/flora.dm b/code/game/objects/structures/flora.dm index 6fcf85630c6..e7060a145e9 100644 --- a/code/game/objects/structures/flora.dm +++ b/code/game/objects/structures/flora.dm @@ -451,7 +451,7 @@ icon_state = "pinepresents" desc = "A wondrous decorated Christmas tree. It has presents!" resistance_flags = INDESTRUCTIBLE | LAVA_PROOF | FIRE_PROOF | UNACIDABLE | ACID_PROOF //protected by the christmas spirit - obj_flags = /obj::obj_flags | NO_DECONSTRUCTION + obj_flags = parent_type::obj_flags | NO_DECONSTRUCTION var/gift_type = /obj/item/gift/anything var/unlimited = FALSE var/static/list/took_presents //shared between all xmas trees @@ -1114,4 +1114,3 @@ . = ..() icon_state = "lavarocks[rand(1, 3)]" update_appearance() - diff --git a/code/game/objects/structures/fluff.dm b/code/game/objects/structures/fluff.dm index a38659aaefe..82e89314d68 100644 --- a/code/game/objects/structures/fluff.dm +++ b/code/game/objects/structures/fluff.dm @@ -305,3 +305,12 @@ anchored = FALSE density = TRUE deconstructible = TRUE + +/obj/structure/fluff/wallsign + name = "direction sign" + desc = "Now, where to go?" + density = FALSE + icon = 'icons/obj/fluff/general.dmi' + icon_state = "wallsign" + +MAPPING_DIRECTIONAL_HELPERS(/obj/structure/fluff/wallsign, 32) diff --git a/code/game/objects/structures/grille.dm b/code/game/objects/structures/grille.dm index 959f0c7a74c..fba9d5cecc4 100644 --- a/code/game/objects/structures/grille.dm +++ b/code/game/objects/structures/grille.dm @@ -9,7 +9,7 @@ base_icon_state = "grille" density = TRUE anchored = TRUE - pass_flags_self = PASSGRILLE + pass_flags_self = PASSGRILLE | PASSWINDOW obj_flags = CONDUCTS_ELECTRICITY obj_flags = CAN_BE_HIT | IGNORE_DENSITY pressure_resistance = 5*ONE_ATMOSPHERE diff --git a/code/game/objects/structures/lavaland/ore_vent.dm b/code/game/objects/structures/lavaland/ore_vent.dm new file mode 100644 index 00000000000..08a4394346a --- /dev/null +++ b/code/game/objects/structures/lavaland/ore_vent.dm @@ -0,0 +1,533 @@ +#define MAX_ARTIFACT_ROLL_CHANCE 10 +#define MINERAL_TYPE_OPTIONS_RANDOM 4 +#define OVERLAY_OFFSET_START 0 +#define OVERLAY_OFFSET_EACH 5 +#define MINERALS_PER_BOULDER 3 + +/obj/structure/ore_vent + name = "ore vent" + desc = "An ore vent, brimming with underground ore. Scan with an advanced mining scanner to start extracting ore from it." + icon = 'icons/obj/mining_zones/terrain.dmi' + icon_state = "ore_vent" + move_resist = MOVE_FORCE_EXTREMELY_STRONG + resistance_flags = INDESTRUCTIBLE | LAVA_PROOF | FIRE_PROOF | UNACIDABLE | ACID_PROOF //This thing will take a beating. + anchored = TRUE + density = TRUE + can_buckle = TRUE + + /// Has this vent been tapped to produce boulders? Cannot be untapped. + var/tapped = FALSE + /// Has this vent been scanned by a mining scanner? Cannot be scanned again. Adds ores to the vent's description. + var/discovered = FALSE + /// Is this type of vent exempt from the map's vent budget/limit? Think the free iron/glass vent or boss vents. This also causes it to not roll for random mineral breakdown. + var/unique_vent = FALSE + /// What icon_state do we use when the ore vent has been tapped? + var/icon_state_tapped = "ore_vent_active" + /// A weighted list of what minerals are contained in this vent, with weight determining how likely each mineral is to be picked in produced boulders. + var/list/mineral_breakdown = list() + /// What size boulders does this vent produce? + var/boulder_size = BOULDER_SIZE_SMALL + /// Reference to this ore vent's NODE drone, to track wave success. + var/mob/living/basic/node_drone/node = null //this path is a placeholder. + /// String containing the formatted list of ores that this vent can produce, and who first discovered this vent. + var/ore_string = "" + /// Associated list of vent size weights to pick from. + var/list/ore_vent_options = list( + LARGE_VENT_TYPE = 3, + MEDIUM_VENT_TYPE = 5, + SMALL_VENT_TYPE = 7, + ) + + /// What string do we use to warn the player about the excavation event? + var/excavation_warning = "Are you ready to excavate this ore vent?" + ///Are we currently spawning mobs? + var/spawning_mobs = FALSE + /// A list of mobs that can be spawned by this vent during a wave defense event. + var/list/defending_mobs = list( + /mob/living/basic/mining/goliath, + /mob/living/basic/mining/legion/spawner_made, + /mob/living/basic/mining/watcher, + /mob/living/basic/mining/lobstrosity/lava, + /mob/living/basic/mining/brimdemon, + /mob/living/basic/mining/bileworm, + ) + ///What items can be used to scan a vent? + var/static/list/scanning_equipment = list( + /obj/item/t_scanner/adv_mining_scanner, + /obj/item/mining_scanner, + ) + + /// What base icon_state do we use for this vent's boulders? + var/boulder_icon_state = "boulder" + /// Percent chance that this vent will produce an artifact boulder. + var/artifact_chance = 0 + /// We use a cooldown to prevent the wave defense from being started multiple times. + COOLDOWN_DECLARE(wave_cooldown) + /// We use a cooldown to prevent players from tapping boulders rapidly from vents. + COOLDOWN_DECLARE(manual_vent_cooldown) + +/obj/structure/ore_vent/Initialize(mapload) + if(mapload) + generate_description() + register_context() + if(!unique_vent) + SSore_generation.possible_vents += src + boulder_icon_state = pick(list( + "boulder", + "rock", + "stone", + )) + if(tapped) + SSore_generation.processed_vents += src + icon_state = icon_state_tapped + update_appearance(UPDATE_ICON_STATE) + add_overlay(mutable_appearance('icons/obj/mining_zones/terrain.dmi', "well", ABOVE_MOB_LAYER)) + return ..() + +/obj/structure/ore_vent/Destroy() + SSore_generation.possible_vents -= src + node = null + if(tapped) + SSore_generation.processed_vents -= src + return ..() + +/obj/structure/ore_vent/attackby(obj/item/attacking_item, mob/user, params) + . = ..() + if(.) + return TRUE + if(!is_type_in_list(attacking_item, scanning_equipment)) + return TRUE + if(tapped) + balloon_alert_to_viewers("vent tapped!") + return TRUE + scan_and_confirm(user) + return TRUE + +/obj/structure/ore_vent/attack_hand(mob/living/user, list/modifiers) + . = ..() + if(.) + return + if(!HAS_TRAIT(user, TRAIT_BOULDER_BREAKER)) + return + if(!discovered) + to_chat(user, span_notice("You can't quite find the weakpoint of [src]... Perhaps it needs to be scanned first?")) + return + to_chat(user, span_notice("You start striking [src] with your golem's fist, attempting to dredge up a boulder...")) + for(var/i in 1 to 3) + if(do_after(user, boulder_size * 1 SECONDS, src)) + user.apply_damage(20, STAMINA) + playsound(src, 'sound/weapons/genhit.ogg', 50, TRUE) + produce_boulder(TRUE) + visible_message(span_notice("You've successfully produced a boulder! Boy are your arms tired.")) + +/obj/structure/ore_vent/attack_basic_mob(mob/user, list/modifiers) + . = ..() + if(!HAS_TRAIT(user, TRAIT_BOULDER_BREAKER)) + return + produce_boulder(TRUE) + +/obj/structure/ore_vent/is_buckle_possible(mob/living/target, force, check_loc) + . = ..() + if(tapped) + return FALSE + if(istype(target, /mob/living/basic/node_drone)) + return TRUE + +/obj/structure/ore_vent/examine(mob/user) + . = ..() + if(discovered) + switch(boulder_size) + if(BOULDER_SIZE_SMALL) + . += span_notice("This vent produces [span_bold("small")] boulders containing [ore_string]") + if(BOULDER_SIZE_MEDIUM) + . += span_notice("This vent produces [span_bold("medium")] boulders containing [ore_string]") + if(BOULDER_SIZE_LARGE) + . += span_notice("This vent produces [span_bold("large")] boulders containing [ore_string]") + else + . += span_notice("This vent can be scanned with a [span_bold("Mining Scanner")].") + +/obj/structure/ore_vent/add_context(atom/source, list/context, obj/item/held_item, mob/living/user) + if(is_type_in_list(held_item, scanning_equipment)) + context[SCREENTIP_CONTEXT_LMB] = "Scan vent" + return CONTEXTUAL_SCREENTIP_SET + +/** + * This proc is called when the ore vent is initialized, in order to determine what minerals boulders it spawns can contain. + * The materials available are determined by SSore_generation.ore_vent_minerals, which is a list of all minerals that can be contained in ore vents for a given cave generation. + * As a result, minerals use a weighted list as seen by ore_vent_minerals_lavaland, which is then copied to ore_vent_minerals. + * Once a material is picked from the weighted list, it's removed from ore_vent_minerals, so that it can't be picked again and provided it's own internal weight used when assigning minerals to boulders spawned by this vent. + * May also be called after the fact, as seen in SSore_generation's initialize, to add more minerals to an existing vent. + * + * The above applies only when spawning in at mapload, otherwise we pick randomly from ore_vent_minerals_lavaland. + * + * @params new_minerals How many minerals should be added to this vent? Defaults to MINERAL_TYPE_OPTIONS_RANDOM, which is 4. + * @params map_loading Is this vent being spawned in at mapload? If so, we use the ore_generation subsystem's ore_vent_minerals list to pick minerals. Otherwise, we pick randomly from ore_vent_minerals_lavaland. + */ +/obj/structure/ore_vent/proc/generate_mineral_breakdown(new_minerals = MINERAL_TYPE_OPTIONS_RANDOM, map_loading = FALSE) + if(new_minerals < 1) + CRASH("generate_mineral_breakdown called with new_minerals < 1.") + var/list/available_mats = difflist(first = SSore_generation.ore_vent_minerals, second = mineral_breakdown, skiprep = 1) + for(var/i in 1 to new_minerals) + if(!length(SSore_generation.ore_vent_minerals) && map_loading) + // We should prevent this from happening in SSore_generation, but if not then we crash here + CRASH("No minerals left to pick from! We may have spawned too many ore vents in init, or the map config in seedRuins may not have enough resources for the mineral budget.") + var/datum/material/new_material + if(map_loading) + if(length(available_mats)) + new_material = pick(GLOB.ore_vent_minerals_lavaland) + var/datum/material/surrogate_mat = pick(SSore_generation.ore_vent_minerals) + available_mats -= surrogate_mat + SSore_generation.ore_vent_minerals -= surrogate_mat + else + new_material = pick(available_mats) + available_mats -= new_material + SSore_generation.ore_vent_minerals -= new_material + else + new_material = pick(GLOB.ore_vent_minerals_lavaland) + mineral_breakdown[new_material] = rand(1, 4) + + +/** + * Returns the quantity of mineral sheets in each ore vent's boulder contents roll. + * First roll can produce the most ore, with subsequent rolls scaling lower logarithmically. + * Inversely scales with ore_floor, so that the first roll is the largest, and subsequent rolls are smaller. + * (1 -> from 16 to 7 sheets of materials, and 3 -> from 8 to 6 sheets of materials on a small vent) + * This also means a large boulder can highroll a boulder with a full stack of 50 sheets of material. + * @params ore_floor The number of minerals already rolled. Used to scale the logarithmic function. + */ +/obj/structure/ore_vent/proc/ore_quantity_function(ore_floor) + return SHEET_MATERIAL_AMOUNT * round(boulder_size * (log(rand(1 + ore_floor, 4 + ore_floor)) ** -1)) + +/** + * Starts the wave defense event, which will spawn a number of lavaland mobs based on the size of the ore vent. + * Called after the vent has been tapped by a scanning device. + * Will summon a number of waves of mobs, ending in the vent being tapped after the final wave. + */ +/obj/structure/ore_vent/proc/start_wave_defense() + AddComponent(\ + /datum/component/spawner, \ + spawn_types = defending_mobs, \ + spawn_time = (10 SECONDS + (5 SECONDS * (boulder_size/5))), \ + max_spawned = 10, \ + max_spawn_per_attempt = (1 + (boulder_size/5)), \ + spawn_text = "emerges to assault", \ + spawn_distance = 4, \ + spawn_distance_exclude = 3, \ + ) + var/wave_timer = 60 SECONDS + if(boulder_size == BOULDER_SIZE_MEDIUM) + wave_timer = 90 SECONDS + else if(boulder_size == BOULDER_SIZE_LARGE) + wave_timer = 150 SECONDS + COOLDOWN_START(src, wave_cooldown, wave_timer) + addtimer(CALLBACK(src, PROC_REF(handle_wave_conclusion)), wave_timer) + spawning_mobs = TRUE + icon_state = icon_state_tapped + update_appearance(UPDATE_ICON_STATE) + +/** + * Called when the wave defense event ends, after a variable amount of time in start_wave_defense. + * + * If the node drone is still alive, the ore vent is tapped and the ore vent will begin generating boulders. + * If the node drone is dead, the ore vent is not tapped and the wave defense can be reattempted. + * + * Also gives xp and mining points to all nearby miners in equal measure. + */ +/obj/structure/ore_vent/proc/handle_wave_conclusion() + SEND_SIGNAL(src, COMSIG_VENT_WAVE_CONCLUDED) + COOLDOWN_RESET(src, wave_cooldown) + particles = null + if(!QDELETED(node)) ///The Node Drone has survived the wave defense, and the ore vent is tapped. + tapped = TRUE + SSore_generation.processed_vents += src + balloon_alert_to_viewers("vent tapped!") + icon_state = icon_state_tapped + update_appearance(UPDATE_ICON_STATE) + else + visible_message(span_danger("\the [src] creaks and groans as the mining attempt fails, and the vent closes back up.")) + icon_state = initial(icon_state) + update_appearance(UPDATE_ICON_STATE) + return FALSE //Bad end, try again. + + for(var/mob/living/miner in range(7, src)) //Give the miners who are near the vent points and xp. + var/obj/item/card/id/user_id_card = miner.get_idcard(TRUE) + if(miner.stat <= SOFT_CRIT) + miner.mind?.adjust_experience(/datum/skill/mining, MINING_SKILL_BOULDER_SIZE_XP * boulder_size) + if(!user_id_card) + continue + var/point_reward_val = (MINER_POINT_MULTIPLIER * boulder_size) - MINER_POINT_MULTIPLIER // We remove the base value of discovering the vent + user_id_card.registered_account.mining_points += point_reward_val + user_id_card.registered_account.bank_card_talk("You have been awarded [point_reward_val] mining points for your efforts.") + node.pre_escape() //Visually show the drone is done and flies away. + add_overlay(mutable_appearance('icons/obj/mining_zones/terrain.dmi', "well", ABOVE_MOB_LAYER)) + +/** + * Called when the ore vent is tapped by a scanning device. + * Gives a readout of the ores available in the vent that gets added to the description, + * then asks the user if they want to start wave defense if it's already been discovered. + * @params user The user who tapped the vent. + * @params scan_only If TRUE, the vent will only scan, and not prompt to start wave defense. Used by the mech mineral scanner. + */ +/obj/structure/ore_vent/proc/scan_and_confirm(mob/living/user, scan_only = FALSE) + if(tapped) + balloon_alert_to_viewers("vent tapped!") + return + if(!COOLDOWN_FINISHED(src, wave_cooldown)) + if(!scan_only) + balloon_alert_to_viewers("protect the node drone!") + return + if(!discovered) + if(scan_only) + discovered = TRUE + generate_description(user) + balloon_alert_to_viewers("vent scanned!") + return + + if(DOING_INTERACTION_WITH_TARGET(user, src)) + balloon_alert(user, "already scanning!") + return + balloon_alert(user, "scanning...") + playsound(src, 'sound/items/timer.ogg', 30, TRUE) + if(!do_after(user, 4 SECONDS, src)) + return + + discovered = TRUE + balloon_alert(user, "vent scanned!") + generate_description(user) + var/obj/item/card/id/user_id_card = user.get_idcard(TRUE) + if(isnull(user_id_card)) + return + user_id_card.registered_account.mining_points += (MINER_POINT_MULTIPLIER) + user_id_card.registered_account.bank_card_talk("You've been awarded [MINER_POINT_MULTIPLIER] mining points for discovery of an ore vent.") + return + if(scan_only) + return + if(tgui_alert(user, excavation_warning, "Begin defending ore vent?", list("Yes", "No")) != "Yes") + return + if(!COOLDOWN_FINISHED(src, wave_cooldown)) + return + //This is where we start spitting out mobs. + Shake(duration = 3 SECONDS) + node = new /mob/living/basic/node_drone(loc) + node.arrive(src) + RegisterSignal(node, COMSIG_QDELETING, PROC_REF(handle_wave_conclusion)) + particles = new /particles/smoke/ash() + + for(var/i in 1 to 5) // Clears the surroundings of the ore vent before starting wave defense. + for(var/turf/closed/mineral/rock in oview(i)) + if(istype(rock, /turf/open/misc/asteroid) && prob(35)) // so it's too common + new /obj/effect/decal/cleanable/rubble(rock) + if(prob(100 - (i * 15))) + rock.gets_drilled(user, FALSE) + if(prob(50)) + new /obj/effect/decal/cleanable/rubble(rock) + sleep(0.6 SECONDS) + + start_wave_defense() + +/** + * Generates a description of the ore vent to ore_string, based on the minerals contained within it. + * Ore_string is passed to examine(). + */ +/obj/structure/ore_vent/proc/generate_description(mob/user) + ore_string = "" + var/list/mineral_names = list() + for(var/datum/material/resource as anything in mineral_breakdown) + mineral_names += initial(resource.name) + + ore_string = "[english_list(mineral_names)]." + if(user) + ore_string += "\nThis vent was first discovered by [user]." +/** + * Adds floating temp_visual overlays to the vent, showcasing what minerals are contained within it. + * If undiscovered, adds a single overlay with the icon_state "unknown". + */ +/obj/structure/ore_vent/proc/add_mineral_overlays() + if(mineral_breakdown.len && !discovered) + var/obj/effect/temp_visual/mining_overlay/vent/new_mat = new /obj/effect/temp_visual/mining_overlay/vent(drop_location()) + new_mat.icon_state = "unknown" + return + for(var/datum/material/selected_mat as anything in mineral_breakdown) + var/obj/effect/temp_visual/mining_overlay/vent/new_mat = new /obj/effect/temp_visual/mining_overlay/vent(drop_location()) + new_mat.icon_state = selected_mat.name + +/** + * Here is where we handle producing a new boulder, based on the qualities of this ore vent. + * Returns the boulder produced. + * @params apply_cooldown Should we apply a cooldown to producing boulders? Default's false, used by manual boulder production (goldgrubs, golems, etc). + */ +/obj/structure/ore_vent/proc/produce_boulder(apply_cooldown = FALSE) + RETURN_TYPE(/obj/item/boulder) + + //cooldown applies only for manual processing by hand + if(apply_cooldown && !COOLDOWN_FINISHED(src, manual_vent_cooldown)) + return + + //produce the boulder + var/obj/item/boulder/new_rock + if(prob(artifact_chance)) + new_rock = new /obj/item/boulder/artifact(loc) + else + new_rock = new /obj/item/boulder(loc) + Shake(duration = 1.5 SECONDS) + + //decorate the boulder with materials + var/list/mats_list = list() + for(var/iteration in 1 to MINERALS_PER_BOULDER) + var/datum/material/material = pick_weight(mineral_breakdown) + mats_list[material] += ore_quantity_function(iteration) + new_rock.set_custom_materials(mats_list) + + //set size & durability + new_rock.boulder_size = boulder_size + new_rock.durability = rand(2, boulder_size) //randomize durability a bit for some flavor. + new_rock.boulder_string = boulder_icon_state + new_rock.update_appearance(UPDATE_ICON_STATE) + + //start the cooldown & return the boulder + if(apply_cooldown) + COOLDOWN_START(src, manual_vent_cooldown, 10 SECONDS) + return new_rock + +//comes with the station, and is already tapped. +/obj/structure/ore_vent/starter_resources + name = "active ore vent" + desc = "An ore vent, brimming with underground ore. It's already supplying the station with iron and glass." + tapped = TRUE + discovered = TRUE + unique_vent = TRUE + boulder_size = BOULDER_SIZE_SMALL + mineral_breakdown = list( + /datum/material/iron = 50, + /datum/material/glass = 50, + ) + +/obj/structure/ore_vent/random + +/obj/structure/ore_vent/random/Initialize(mapload) + . = ..() + if(!unique_vent && !mapload) + generate_mineral_breakdown(map_loading = mapload) //Default to random mineral breakdowns, unless this is a unique vent or we're still setting up default vent distribution. + generate_description() + artifact_chance = rand(0, MAX_ARTIFACT_ROLL_CHANCE) + var/string_boulder_size = pick_weight(ore_vent_options) + name = "[string_boulder_size] ore vent" + switch(string_boulder_size) + if(LARGE_VENT_TYPE) + boulder_size = BOULDER_SIZE_LARGE + if(mapload) + SSore_generation.ore_vent_sizes["large"] += 1 + if(MEDIUM_VENT_TYPE) + boulder_size = BOULDER_SIZE_MEDIUM + if(mapload) + SSore_generation.ore_vent_sizes["medium"] += 1 + if(SMALL_VENT_TYPE) + boulder_size = BOULDER_SIZE_SMALL + if(mapload) + SSore_generation.ore_vent_sizes["small"] += 1 + else + boulder_size = BOULDER_SIZE_SMALL //Might as well set a default value + name = initial(name) + + + +/obj/structure/ore_vent/random/icebox //The one that shows up on the top level of icebox + icon_state = "ore_vent_ice" + icon_state_tapped = "ore_vent_ice_active" + defending_mobs = list( + /mob/living/basic/mining/lobstrosity, + /mob/living/basic/mining/legion/snow/spawner_made, + /mob/living/simple_animal/hostile/asteroid/polarbear, + /mob/living/simple_animal/hostile/asteroid/wolf, + ) + ore_vent_options = list( + SMALL_VENT_TYPE, + ) + +/obj/structure/ore_vent/random/icebox/lower + defending_mobs = list( + /mob/living/basic/mining/ice_whelp, + /mob/living/basic/mining/lobstrosity, + /mob/living/basic/mining/legion/snow/spawner_made, + /mob/living/basic/mining/ice_demon, + /mob/living/simple_animal/hostile/asteroid/polarbear, + /mob/living/simple_animal/hostile/asteroid/wolf, + ) + ore_vent_options = list( + SMALL_VENT_TYPE = 3, + MEDIUM_VENT_TYPE = 5, + LARGE_VENT_TYPE = 7, + ) + +/obj/structure/ore_vent/boss + name = "menacing ore vent" + desc = "An ore vent, brimming with underground ore. This one has an evil aura about it. Better be careful." + unique_vent = TRUE + boulder_size = BOULDER_SIZE_LARGE + mineral_breakdown = list( // All the riches of the world, eeny meeny boulder room. + /datum/material/iron = 1, + /datum/material/glass = 1, + /datum/material/plasma = 1, + /datum/material/titanium = 1, + /datum/material/silver = 1, + /datum/material/gold = 1, + /datum/material/diamond = 1, + /datum/material/uranium = 1, + /datum/material/bluespace = 1, + /datum/material/plastic = 1, + ) + defending_mobs = list( + /mob/living/simple_animal/hostile/megafauna/bubblegum, + /mob/living/simple_animal/hostile/megafauna/dragon, + /mob/living/simple_animal/hostile/megafauna/colossus, + ) + excavation_warning = "Something big is nearby. Are you ABSOLUTELY ready to excavate this ore vent?" + ///What boss do we want to spawn? + var/summoned_boss = null + +/obj/structure/ore_vent/boss/Initialize(mapload) + . = ..() + summoned_boss = pick(defending_mobs) + +/obj/structure/ore_vent/boss/examine(mob/user) + . = ..() + var/boss_string = "" + switch(summoned_boss) + if(/mob/living/simple_animal/hostile/megafauna/bubblegum) + boss_string = "A giant fleshbound beast" + if(/mob/living/simple_animal/hostile/megafauna/dragon) + boss_string = "Sharp teeth and scales" + if(/mob/living/simple_animal/hostile/megafauna/colossus) + boss_string = "A giant, armored behemoth" + if(/mob/living/simple_animal/hostile/megafauna/demonic_frost_miner) + boss_string = "A bloody drillmark" + if(/mob/living/simple_animal/hostile/megafauna/wendigo) + boss_string = "A chilling skull" + . += span_notice("[boss_string] is etched onto the side of the vent.") + +/obj/structure/ore_vent/boss/start_wave_defense() + // Completely override the normal wave defense, and just spawn the boss. + var/mob/living/simple_animal/hostile/megafauna/boss = new summoned_boss(loc) + RegisterSignal(boss, COMSIG_LIVING_DEATH, PROC_REF(handle_wave_conclusion)) + COOLDOWN_START(src, wave_cooldown, INFINITY) //Basically forever + boss.say(boss.summon_line) //Pull their specific summon line to say. Default is meme text so make sure that they have theirs set already. + +/obj/structure/ore_vent/boss/handle_wave_conclusion() + node = new /mob/living/basic/node_drone(loc) //We're spawning the vent after the boss dies, so the player can just focus on the boss. + COOLDOWN_RESET(src, wave_cooldown) + return ..() + +/obj/structure/ore_vent/boss/icebox + icon_state = "ore_vent_ice" + icon_state_tapped = "ore_vent_ice_active" + defending_mobs = list( + /mob/living/simple_animal/hostile/megafauna/demonic_frost_miner, + /mob/living/simple_animal/hostile/megafauna/wendigo, + /mob/living/simple_animal/hostile/megafauna/colossus, + ) + +#undef MAX_ARTIFACT_ROLL_CHANCE +#undef MINERAL_TYPE_OPTIONS_RANDOM +#undef OVERLAY_OFFSET_START +#undef OVERLAY_OFFSET_EACH +#undef MINERALS_PER_BOULDER diff --git a/code/game/objects/structures/mannequin.dm b/code/game/objects/structures/mannequin.dm index a4cc8a99ed1..29c313b0b54 100644 --- a/code/game/objects/structures/mannequin.dm +++ b/code/game/objects/structures/mannequin.dm @@ -64,6 +64,7 @@ icon_state = "mannequin_[material]_[body_type == FEMALE ? "female" : "male"]" AddElement(/datum/element/strippable, GLOB.strippable_mannequin_items) AddComponent(/datum/component/simple_rotation, ROTATION_IGNORE_ANCHORED) + AddComponent(/datum/component/marionette) update_appearance() /obj/structure/mannequin/Destroy() @@ -202,7 +203,6 @@ name = "skeleton model" desc = "Not to knock over." material = MANNEQUIN_SKELETON - anchored = TRUE obj_flags = UNIQUE_RENAME starting_items = list( /obj/item/clothing/glasses/eyepatch, diff --git a/code/game/objects/structures/mirror.dm b/code/game/objects/structures/mirror.dm index 51ec52e4584..2229afb3a23 100644 --- a/code/game/objects/structures/mirror.dm +++ b/code/game/objects/structures/mirror.dm @@ -180,12 +180,11 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/structure/mirror/broken, 28) else if(HAS_TRAIT(race_changer, TRAIT_MUTANT_COLORS) && !HAS_TRAIT(race_changer, TRAIT_FIXED_MUTANT_COLORS)) var/new_mutantcolor = input(race_changer, "Choose your skin color:", "Race change", race_changer.dna.features["mcolor"]) as color|null if(new_mutantcolor) - var/temp_hsv = RGBtoHSV(new_mutantcolor) + var/list/mutant_hsv = rgb2hsv(new_mutantcolor) - if(ReadHSV(temp_hsv)[3] >= ReadHSV("#7F7F7F")[3]) // mutantcolors must be bright + if(mutant_hsv[3] >= 50) // mutantcolors must be bright race_changer.dna.features["mcolor"] = sanitize_hexcolor(new_mutantcolor) race_changer.dna.update_uf_block(DNA_MUTANT_COLOR_BLOCK) - else to_chat(race_changer, span_notice("Invalid color. Your color is not bright enough.")) return TRUE diff --git a/code/game/objects/structures/secure_safe.dm b/code/game/objects/structures/secure_safe.dm index c13fe9d6085..43027090e5b 100644 --- a/code/game/objects/structures/secure_safe.dm +++ b/code/game/objects/structures/secure_safe.dm @@ -60,7 +60,7 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/structure/secure_safe/caps_spare, 32) /obj/structure/secure_safe/caps_spare/Initialize(mapload) . = ..() - atom_storage.set_holdable(can_hold_list = list(/obj/item/card/id)) + atom_storage.set_holdable(/obj/item/card/id) AddComponent(/datum/component/lockable_storage, \ lock_code = SSid_access.spare_id_safe_code, \ can_hack_open = FALSE, \ diff --git a/code/game/objects/structures/shower.dm b/code/game/objects/structures/shower.dm index 7b86a17e9dc..ab41615fd96 100644 --- a/code/game/objects/structures/shower.dm +++ b/code/game/objects/structures/shower.dm @@ -322,11 +322,10 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/machinery/shower, (-16)) reagents.remove_any(SHOWER_SPRAY_VOLUME) -/obj/machinery/shower/deconstruct(disassembled = TRUE) +/obj/machinery/shower/on_deconstruction(disassembled = TRUE) new /obj/item/stack/sheet/iron(drop_location(), 2) if(has_water_reclaimer) new /obj/item/stock_parts/water_recycler(drop_location()) - qdel(src) /obj/machinery/shower/proc/check_heat(mob/living/L) var/mob/living/carbon/C = L diff --git a/code/game/objects/structures/spawner.dm b/code/game/objects/structures/spawner.dm index a3af72878c3..0f1b1bb57b5 100644 --- a/code/game/objects/structures/spawner.dm +++ b/code/game/objects/structures/spawner.dm @@ -64,7 +64,14 @@ /obj/structure/spawner/Initialize(mapload) . = ..() - AddComponent(spawner_type, mob_types, spawn_time, max_mobs, faction, spawn_text) + AddComponent(\ + spawner_type, \ + spawn_types = mob_types, \ + spawn_time = spawn_time, \ + max_spawned = max_mobs, \ + faction = faction, \ + spawn_text = spawn_text, \ + ) /obj/structure/spawner/attack_animal(mob/living/simple_animal/user, list/modifiers) if(faction_check(faction, user.faction, FALSE) && !user.client) diff --git a/code/game/objects/structures/tables_racks.dm b/code/game/objects/structures/tables_racks.dm index 0bcfb36579a..debd4d81bc3 100644 --- a/code/game/objects/structures/tables_racks.dm +++ b/code/game/objects/structures/tables_racks.dm @@ -47,7 +47,7 @@ make_climbable() var/static/list/loc_connections = list( - COMSIG_CARBON_DISARM_COLLIDE = PROC_REF(table_carbon), + COMSIG_LIVING_DISARM_COLLIDE = PROC_REF(table_living), ) AddElement(/datum/element/connect_loc, loc_connections) @@ -181,7 +181,7 @@ pushed_mob.Knockdown(30) pushed_mob.apply_damage(10, BRUTE) pushed_mob.apply_damage(40, STAMINA) - if(user.mind?.martial_art.smashes_tables && user.mind?.martial_art.can_use(user)) + if(user.mind?.martial_art?.smashes_tables && user.mind?.martial_art.can_use(user)) deconstruct(FALSE) playsound(pushed_mob, 'sound/effects/tableslam.ogg', 90, TRUE) pushed_mob.visible_message(span_danger("[user] slams [pushed_mob] onto \the [src]!"), \ @@ -198,7 +198,7 @@ banged_limb?.receive_damage(30, wound_bonus = extra_wound) pushed_mob.apply_damage(60, STAMINA) take_damage(50) - if(user.mind?.martial_art.smashes_tables && user.mind?.martial_art.can_use(user)) + if(user.mind?.martial_art?.smashes_tables && user.mind?.martial_art.can_use(user)) deconstruct(FALSE) playsound(pushed_mob, 'sound/effects/bang.ogg', 90, TRUE) pushed_mob.visible_message(span_danger("[user] smashes [pushed_mob]'s [banged_limb.plaintext_zone] against \the [src]!"), @@ -323,17 +323,17 @@ return TRUE return FALSE -/obj/structure/table/proc/table_carbon(datum/source, mob/living/carbon/shover, mob/living/carbon/target, shove_blocked) +/obj/structure/table/proc/table_living(datum/source, mob/living/shover, mob/living/target, shove_flags, obj/item/weapon) SIGNAL_HANDLER - if(!shove_blocked) + if((shove_flags & SHOVE_KNOCKDOWN_BLOCKED) || !(shove_flags & SHOVE_BLOCKED)) return target.Knockdown(SHOVE_KNOCKDOWN_TABLE) target.visible_message(span_danger("[shover.name] shoves [target.name] onto \the [src]!"), - span_userdanger("You're shoved onto \the [src] by [shover.name]!"), span_hear("You hear aggressive shuffling followed by a loud thud!"), COMBAT_MESSAGE_RANGE, src) + span_userdanger("You're shoved onto \the [src] by [shover.name]!"), span_hear("You hear aggressive shuffling followed by a loud thud!"), COMBAT_MESSAGE_RANGE, shover) to_chat(shover, span_danger("You shove [target.name] onto \the [src]!")) target.throw_at(src, 1, 1, null, FALSE) //1 speed throws with no spin are basically just forcemoves with a hard collision check - log_combat(shover, target, "shoved", "onto [src] (table)") - return COMSIG_CARBON_SHOVE_HANDLED + log_combat(shover, target, "shoved", "onto [src] (table)[weapon ? " with [weapon]" : ""]") + return COMSIG_LIVING_SHOVE_HANDLED /obj/structure/table/greyscale icon = 'icons/obj/smooth_structures/table_greyscale.dmi' @@ -723,7 +723,7 @@ * Surgery Tables */ -/obj/structure/table/optable//NOVA EDIT - ICON OVERRIDEN BY AESTHETICS - SEE MODULE +/obj/structure/table/optable name = "operating table" desc = "Used for advanced medical procedures." icon = 'icons/obj/medical/surgery_table.dmi' @@ -802,12 +802,8 @@ if(potential_patient.body_position == LYING_DOWN && potential_patient.loc == loc) patient = potential_patient - chill_out(patient) // NOVA EDIT - Operation Table Numbing return - if(!isnull(patient)) // NOVA EDIT - Operation Table Numbing - thaw_them(patient) // NOVA EDIT - Operation Table Numbing - // Find another lying mob as a replacement. for (var/mob/living/carbon/replacement_patient in loc.contents) if(replacement_patient.body_position == LYING_DOWN) @@ -829,6 +825,17 @@ pass_flags_self = LETPASSTHROW //You can throw objects over this, despite it's density. max_integrity = 20 +/obj/structure/rack/skeletal + name = "skeletal minibar" + desc = "Rattle me boozes!" + icon = 'icons/obj/fluff/general.dmi' + icon_state = "minibar" + +/obj/structure/rack/Initialize(mapload) + . = ..() + AddElement(/datum/element/climbable) + AddElement(/datum/element/elevation, pixel_shift = 12) + /obj/structure/rack/examine(mob/user) . = ..() . += span_notice("It's held together by a couple of bolts.") diff --git a/code/game/objects/structures/toiletbong.dm b/code/game/objects/structures/toiletbong.dm index 45ce79f9c32..0ea21e9ff84 100644 --- a/code/game/objects/structures/toiletbong.dm +++ b/code/game/objects/structures/toiletbong.dm @@ -3,27 +3,28 @@ desc = "A repurposed toilet with re-arranged piping and an attached flamethrower. Why would anyone build this?" icon = 'icons/obj/watercloset.dmi' icon_state = "toiletbong" + base_icon_state = "toiletbong" density = FALSE anchored = TRUE - var/emagged = FALSE var/smokeradius = 1 var/mutable_appearance/weed_overlay /obj/structure/toiletbong/Initialize(mapload) . = ..() create_storage() + AddComponent(/datum/component/simple_rotation, post_rotation = CALLBACK(src, PROC_REF(post_rotation))) + create_storage(max_total_storage = 100, max_slots = 12, canhold = /obj/item/food) atom_storage.attack_hand_interact = FALSE - atom_storage.set_holdable(list(/obj/item/food/)) - atom_storage.max_total_storage = 100 - atom_storage.max_slots = 12 - weed_overlay = mutable_appearance('icons/obj/watercloset.dmi', "toiletbong_overlay") + atom_storage.rustle_sound = FALSE + atom_storage.animated = FALSE + + weed_overlay = mutable_appearance('icons/obj/watercloset.dmi', "[base_icon_state]_overlay") START_PROCESSING(SSobj, src) -/obj/structure/toiletbong/update_icon() +/obj/structure/toiletbong/update_overlays() . = ..() - cut_overlays() if (LAZYLEN(contents)) - add_overlay(weed_overlay) + . += weed_overlay /obj/structure/toiletbong/attack_hand(mob/living/carbon/user) . = ..() @@ -34,45 +35,45 @@ user.balloon_alert(user, "it's empty!") return user.visible_message(span_boldnotice("[user] takes a huge drag on the [src].")) - if (do_after(user, 2 SECONDS, target = src)) - var/turf/toiletbong_location = loc - toiletbong_location.hotspot_expose(1000, 5) - for (var/obj/item/item in contents) - if (item.resistance_flags & INDESTRUCTIBLE) - user.balloon_alert(user, "[item.name] is blocking the pipes!") - continue - playsound(src, 'sound/items/modsuit/flamethrower.ogg', 50) - var/datum/effect_system/fluid_spread/smoke/chem/smoke_machine/puff = new - puff.set_up(smokeradius, holder = src, location = user, carry = item.reagents, efficiency = 20) - puff.start() - if (prob(5) && !emagged) - if(islizard(user)) - user.balloon_alert(user, "a hidden treat!") - user.visible_message(span_danger("[user] fishes a mouse out of the pipes.")) - else - to_chat(user, span_userdanger("There was something disgusting in the pipes!")) - user.visible_message(span_danger("[user] spits out a mouse.")) - user.adjust_disgust(50) - user.vomit(VOMIT_CATEGORY_DEFAULT) - var/mob/living/spawned_mob = new /mob/living/basic/mouse(get_turf(user)) - spawned_mob.faction |= "[REF(user)]" - if(prob(50)) - for(var/j in 1 to rand(1, 3)) - step(spawned_mob, pick(NORTH,SOUTH,EAST,WEST)) - qdel(item) - if(!emagged) - break - update_icon() + if (!do_after(user, 2 SECONDS, target = src)) + return + var/turf/toiletbong_location = loc + toiletbong_location.hotspot_expose(1000, 5) + for (var/obj/item/item in contents) + if (item.resistance_flags & INDESTRUCTIBLE) + user.balloon_alert(user, "[item.name] is blocking the pipes!") + continue + playsound(src, 'sound/items/modsuit/flamethrower.ogg', 50) + var/datum/effect_system/fluid_spread/smoke/chem/smoke_machine/puff = new + puff.set_up(smokeradius, holder = src, location = user, carry = item.reagents, efficiency = 20) + puff.start() + if (prob(5) && !(obj_flags & EMAGGED)) + if(user.get_liked_foodtypes() & GORE) + user.balloon_alert(user, "a hidden treat!") + user.visible_message(span_danger("[user] fishes a mouse out of the pipes.")) + else + to_chat(user, span_userdanger("There was something disgusting in the pipes!")) + user.visible_message(span_danger("[user] spits out a mouse.")) + user.adjust_disgust(50) + user.vomit(VOMIT_CATEGORY_DEFAULT) + var/mob/living/spawned_mob = new /mob/living/basic/mouse(get_turf(user)) + spawned_mob.faction |= "[REF(user)]" + if(prob(50)) + for(var/j in 1 to rand(1, 3)) + step(spawned_mob, pick(NORTH,SOUTH,EAST,WEST)) + qdel(item) + if(!(obj_flags & EMAGGED)) + break + update_appearance(UPDATE_ICON) /obj/structure/toiletbong/wrench_act(mob/living/user, obj/item/tool) - tool.play_tool_sound(src) - if(anchored) - to_chat(user, span_notice("You begin unsecuring the [src].")) - anchored = FALSE - else - to_chat(user, span_notice("You secure the [src] to the floor.")) - anchored = TRUE - return TRUE + ..() + default_unfasten_wrench(user, tool) + return ITEM_INTERACT_SUCCESS + +///Called in the simple rotation's post_rotation callback, playing a sound cue to players. +/obj/structure/toiletbong/proc/post_rotation(mob/user, degrees) + playsound(src, 'sound/items/deconstruct.ogg', 50) /obj/structure/toiletbong/crowbar_act(mob/living/user, obj/item/tool) if(anchored) @@ -88,26 +89,18 @@ qdel(src) return TRUE -/obj/structure/toiletbong/AltClick(mob/living/user) - if(anchored) - return ..() - setDir(turn(dir,90)) - playsound(src, 'sound/items/deconstruct.ogg', 50) - return - /obj/structure/toiletbong/emag_act(mob/user, obj/item/card/emag/emag_card) + if(obj_flags & EMAGGED) + return FALSE + obj_flags |= EMAGGED + smokeradius = 2 playsound(src, 'sound/effects/fish_splash.ogg', 50) - user.balloon_alert(user, "whoops!") - if(!emagged) - emagged = TRUE - smokeradius = 2 - balloon_alert(user, "toilet broke") - if (emag_card) - to_chat(user, span_boldwarning("The [emag_card] falls into the toilet. You fish it back out. Looks like you broke the toilet.")) - return TRUE - return FALSE + balloon_alert(user, "toilet broke") + if (emag_card) + to_chat(user, span_boldwarning("The [emag_card] falls into the toilet. You fish it back out. Looks like you broke the toilet.")) + return TRUE -/obj/structure/toiletbong/attackby(obj/item/I, mob/user, params) - if(istype(I, /obj/item/card/emag)) +/obj/structure/toiletbong/attackby(obj/item/attacking_item, mob/user, params) + if(istype(attacking_item, /obj/item/card/emag)) return - . = ..() + return ..() diff --git a/code/game/objects/structures/transit_tubes/transit_tube_construction.dm b/code/game/objects/structures/transit_tubes/transit_tube_construction.dm index cc9de4cdb95..44952801ec7 100644 --- a/code/game/objects/structures/transit_tubes/transit_tube_construction.dm +++ b/code/game/objects/structures/transit_tubes/transit_tube_construction.dm @@ -15,7 +15,7 @@ /obj/structure/c_transit_tube/Initialize(mapload) . = ..() - AddComponent(/datum/component/simple_rotation, AfterRotation = CALLBACK(src, PROC_REF(AfterRotation))) + AddComponent(/datum/component/simple_rotation, post_rotation = CALLBACK(src, PROC_REF(post_rotation))) /obj/structure/c_transit_tube/proc/can_wrench_in_loc(mob/user) var/turf/source_turf = get_turf(loc) @@ -27,7 +27,7 @@ return FALSE return TRUE -/obj/structure/c_transit_tube/proc/AfterRotation(mob/user, degrees) +/obj/structure/c_transit_tube/proc/post_rotation(mob/user, degrees) if(flipped_build_type && degrees == ROTATION_FLIP) setDir(turn(dir, degrees)) //Turn back we don't actually flip flipped = !flipped diff --git a/code/game/objects/structures/window.dm b/code/game/objects/structures/window.dm index c10eedeec5e..2231fb67121 100644 --- a/code/game/objects/structures/window.dm +++ b/code/game/objects/structures/window.dm @@ -14,7 +14,7 @@ armor_type = /datum/armor/structure_window can_atmos_pass = ATMOS_PASS_PROC rad_insulation = RAD_VERY_LIGHT_INSULATION - pass_flags_self = PASSGLASS + pass_flags_self = PASSGLASS | PASSWINDOW set_dir_on_move = FALSE flags_ricochet = RICOCHET_HARD receive_ricochet_chance_mod = 0.5 @@ -67,7 +67,7 @@ flags_1 |= ALLOW_DARK_PAINTS_1 RegisterSignal(src, COMSIG_OBJ_PAINTED, PROC_REF(on_painted)) AddElement(/datum/element/atmos_sensitive, mapload) - AddComponent(/datum/component/simple_rotation, ROTATION_NEEDS_ROOM, AfterRotation = CALLBACK(src, PROC_REF(AfterRotation))) + AddComponent(/datum/component/simple_rotation, ROTATION_NEEDS_ROOM, post_rotation = CALLBACK(src, PROC_REF(post_rotation))) var/static/list/loc_connections = list( COMSIG_ATOM_EXIT = PROC_REF(on_exit), @@ -358,7 +358,7 @@ dropped_debris += new /obj/item/stack/rods(location, (fulltile ? 2 : 1)) return dropped_debris -/obj/structure/window/proc/AfterRotation(mob/user, degrees) +/obj/structure/window/proc/post_rotation(mob/user, degrees) air_update_turf(TRUE, FALSE) /obj/structure/window/proc/on_painted(obj/structure/window/source, mob/user, obj/item/toy/crayon/spraycan/spraycan, is_dark_color) @@ -803,7 +803,7 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/structure/window/reinforced/tinted/frosted/spaw /obj/structure/window/reinforced/shuttle/indestructible name = "hardened shuttle window" - obj_flags = /obj::obj_flags | NO_DECONSTRUCTION + obj_flags = parent_type::obj_flags | NO_DECONSTRUCTION flags_1 = PREVENT_CLICK_UNDER_1 resistance_flags = INDESTRUCTIBLE | LAVA_PROOF | FIRE_PROOF | UNACIDABLE | ACID_PROOF @@ -932,6 +932,8 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/structure/window/reinforced/tinted/frosted/spaw icon_state = "clockwork_window-single" glass_type = /obj/item/stack/sheet/bronze +MAPPING_DIRECTIONAL_HELPERS(/obj/structure/window/bronze/spawner, 0) + /obj/structure/window/bronze/unanchored anchored = FALSE diff --git a/code/game/say.dm b/code/game/say.dm index 7f25bce9f90..54cebf5e775 100644 --- a/code/game/say.dm +++ b/code/game/say.dm @@ -37,7 +37,9 @@ GLOBAL_LIST_INIT(freqtospan, list( spans |= speech_span if(!language) language = get_selected_language() - send_speech(message, message_range, src, bubble_type, spans, message_language = language, forced = forced) + var/list/message_mods = list() + message_mods[SAY_MOD_VERB] = say_mod(message, message_mods) + send_speech(message, message_range, src, bubble_type, spans, language, message_mods, forced = forced) /// Called when this movable hears a message from a source. /// Returns TRUE if the message was received and understood. @@ -149,6 +151,12 @@ GLOBAL_LIST_INIT(freqtospan, list( /atom/movable/proc/compose_job(atom/movable/speaker, message_langs, raw_message, radio_freq) return "" +/** + * Works out and returns which prefix verb the passed message should use. + * + * input - The message for which we want the verb. + * message_mods - A list of message modifiers, i.e. whispering/singing. + */ /atom/movable/proc/say_mod(input, list/message_mods = list()) var/ending = copytext_char(input, -1) if(copytext_char(input, -2) == "!!") @@ -162,15 +170,21 @@ GLOBAL_LIST_INIT(freqtospan, list( else if(ending == "!") return verb_exclaim else - return verb_say + return get_default_say_verb() + +/** + * Gets the say verb we default to if no special verb is chosen. + * This is primarily a hook for inheritors, + * like human_say.dm's tongue-based verb_say changes. + */ +/atom/movable/proc/get_default_say_verb() + return verb_say /atom/movable/proc/say_quote(input, list/spans=list(speech_span), list/message_mods = list()) if(!input) input = "..." - var/say_mod = message_mods[MODE_CUSTOM_SAY_EMOTE] - if (!say_mod) - say_mod = say_mod(input, message_mods) + var/say_mod = message_mods[MODE_CUSTOM_SAY_EMOTE] || message_mods[SAY_MOD_VERB] || say_mod(input, message_mods) SEND_SIGNAL(src, COMSIG_MOVABLE_SAY_QUOTE, args) @@ -183,7 +197,7 @@ GLOBAL_LIST_INIT(freqtospan, list( /// Transforms the speech emphasis mods from [/atom/movable/proc/say_emphasis] into the appropriate HTML tags. Includes escaping. #define ENCODE_HTML_EMPHASIS(input, char, html, varname) \ var/static/regex/##varname = regex("(?$1") + input = varname.Replace_char(input, "<[html]>$1​") //zero-width space to force maptext to respect closing tags. /// Scans the input sentence for speech emphasis modifiers, notably |italics|, +bold+, and _underline_ -mothblocks /atom/movable/proc/say_emphasis(input) @@ -196,8 +210,8 @@ GLOBAL_LIST_INIT(freqtospan, list( #undef ENCODE_HTML_EMPHASIS -/// Modifies the message by comparing the languages of the speaker with the languages of the hearer. Called on the hearer. -/atom/movable/proc/translate_language(atom/movable/speaker, datum/language/language, raw_message, list/spans, list/message_mods = list()) +/// Modifies the message by comparing the languages of the speaker with the languages of the hearer. Called on the hearer. +/atom/movable/proc/translate_language(atom/movable/speaker, datum/language/language, raw_message, list/spans, list/message_mods) if(!language) return "makes a strange sound." @@ -262,7 +276,7 @@ INITIALIZE_IMMEDIATE(/atom/movable/virtualspeaker) source = M if(istype(M)) name = radio.anonymize ? "Unknown" : M.GetVoice() - verb_say = M.verb_say + verb_say = M.get_default_say_verb() verb_ask = M.verb_ask verb_exclaim = M.verb_exclaim verb_yell = M.verb_yell diff --git a/code/game/sound.dm b/code/game/sound.dm index 52127f8ea1f..4f98ed4a807 100644 --- a/code/game/sound.dm +++ b/code/game/sound.dm @@ -50,7 +50,7 @@ //allocate a channel if necessary now so its the same for everyone channel = channel || SSsounds.random_available_channel() - var/sound/S = sound(get_sfx(soundin)) + var/sound/S = isdatum(soundin) ? soundin : sound(get_sfx(soundin)) var/maxdistance = SOUND_RANGE + extrarange var/source_z = turf_source.z var/list/listeners = SSmobs.clients_by_zlevel[source_z].Copy() @@ -417,4 +417,12 @@ soundin = pick('sound/effects/rocktap1.ogg', 'sound/effects/rocktap2.ogg', 'sound/effects/rocktap3.ogg') if(SFX_SEAR) soundin = 'sound/weapons/sear.ogg' + if(SFX_REEL) + soundin = pick( + 'sound/items/reel1.ogg', + 'sound/items/reel2.ogg', + 'sound/items/reel3.ogg', + 'sound/items/reel4.ogg', + 'sound/items/reel5.ogg', + ) return soundin diff --git a/code/game/turfs/closed/indestructible.dm b/code/game/turfs/closed/indestructible.dm index d68fbe51b3e..408dc9ee590 100644 --- a/code/game/turfs/closed/indestructible.dm +++ b/code/game/turfs/closed/indestructible.dm @@ -121,6 +121,16 @@ NOVA EDIT REMOVAL END */ smoothing_groups = SMOOTH_GROUP_WALLS + SMOOTH_GROUP_CLOSED_TURFS canSmoothWith = SMOOTH_GROUP_WALLS +/turf/closed/indestructible/reinforced/titanium + name = "reinforced titanium imitation wall" + desc = "A huge chunk of reinforced metal used to separate rooms. Naturally, to cut down on costs, this is just a really good paint job to resemble titanium. Effectively impervious to conventional methods of destruction." + icon = 'icons/turf/walls/shuttle_wall.dmi' + icon_state = "shuttle_wall-0" + base_icon_state = "shuttle_wall" + +/turf/closed/indestructible/reinforced/titanium/nodiagonal + icon_state = "shuttle_wall-15" + smoothing_flags = SMOOTH_BITMASK /turf/closed/indestructible/riveted icon = 'icons/turf/walls/riveted.dmi' diff --git a/code/game/turfs/closed/minerals.dm b/code/game/turfs/closed/minerals.dm index 8c23a4516a8..8753ad9413a 100644 --- a/code/game/turfs/closed/minerals.dm +++ b/code/game/turfs/closed/minerals.dm @@ -28,15 +28,21 @@ color = "#677" //NOVA EDIT ADDITION var/turf/open/floor/plating/turf_type = /turf/open/misc/asteroid/airless + /// The path of the ore stack we spawn when we're mined. var/obj/item/stack/ore/mineralType = null + /// If we spawn a boulder like on the gulag, we use this in lou of mineralType + var/obj/item/boulder/spawned_boulder = null + /// How much ore we spawn when we're mining a mineralType. var/mineralAmt = 3 - var/scan_state = "" //Holder for the image we display when we're pinged by a mining scanner - var/defer_change = 0 - // If true you can mine the mineral turf without tools. + ///Holder for the image we display when we're pinged by a mining scanner + var/scan_state = "" + ///If true, this turf will not call AfterChange during change_turf calls. + var/defer_change = FALSE + /// If true you can mine the mineral turf without tools. var/weak_turf = FALSE - ///How long it takes to mine this turf with tools, before the tool's speed and the user's skill modifier are factored in. + /// How long it takes to mine this turf with tools, before the tool's speed and the user's skill modifier are factored in. var/tool_mine_speed = 4 SECONDS - ///How long it takes to mine this turf without tools, if it's weak. + /// How long it takes to mine this turf without tools, if it's weak. var/hand_mine_speed = 15 SECONDS @@ -85,6 +91,68 @@ var/obj/item/stack/ore/the_ore = ore_type scan_state = initial(the_ore.scan_state) // I SAID. SWITCH. TO. IT. mineralType = ore_type // Everything else assumes that this is typed correctly so don't set it to non-ores thanks. + if(ispath(ore_type, /obj/item/boulder)) + scan_state = "rock_Boulder" //Yes even the lowly boulder has a scan state + spawned_boulder = /obj/item/boulder/gulag_expanded + +/** + * Returns the distance to the nearest ore vent, where ore vents are tracked in SSore_generation's possible vents list. + * Returns 0 if we're not on lavaland, and as we're using get_dist, our range is limited to 127 tiles. + */ +/turf/closed/mineral/proc/prox_to_vent() + if(!is_mining_level(z)) + return 0 + + var/distance = 128 // Max distance for a get_dist is 127 + for(var/obj/structure/ore_vent/vent as anything in SSore_generation.possible_vents) + if(vent.z != src.z) + continue //Silly + var/temp_distance = get_dist(src, vent) + if(temp_distance < distance) + distance = temp_distance + return distance + +/** + * Returns the chance of ore spawning in this turf, based on proximity to a vent. + * See mining defines for the chances and distance defines. + */ +/turf/closed/mineral/proc/proximity_ore_chance() + var/distance = prox_to_vent() + if(distance == 0) //We asked for a random chance but we could not successfully find a vent, so 0. + return 0 + + if(distance < VENT_PROX_VERY_HIGH) + return VENT_CHANCE_VERY_HIGH + if(distance < VENT_PROX_HIGH) + return VENT_CHANCE_HIGH + if(distance < VENT_PROX_MEDIUM) + return VENT_CHANCE_MEDIUM + if(distance < VENT_PROX_LOW) + return VENT_CHANCE_LOW + if(distance < VENT_PROX_FAR) + return VENT_CHANCE_FAR + return 0 + +/** + * Returns the amount of ore to spawn in this turf, based on proximity to a vent. + * If for some reason we have a distance of zero (like being off mining Z levels), we return a random amount between 1 and 5 instead. + */ +/turf/closed/mineral/proc/scale_ore_to_vent() + var/distance = prox_to_vent() + if(distance == 0) // We're not on lavaland or similar failure condition + return rand(1,5) + + if(distance < VENT_PROX_VERY_HIGH) + return 5 + if(distance < VENT_PROX_HIGH) + return 4 + if(distance < VENT_PROX_MEDIUM) + return 3 + if(distance < VENT_PROX_LOW) + return 2 + if(distance < VENT_PROX_FAR) + return 1 + return 0 /turf/closed/mineral/get_smooth_underlay_icon(mutable_appearance/underlay_appearance, turf/asking_turf, adjacency_dir) if(turf_type) @@ -145,9 +213,11 @@ /turf/closed/mineral/proc/gets_drilled(mob/user, give_exp = FALSE) if(istype(user)) SEND_SIGNAL(user, COMSIG_MOB_MINED, src, give_exp) - if (mineralType && (mineralAmt > 0)) + if(mineralType && (mineralAmt > 0)) new mineralType(src, mineralAmt) SSblackbox.record_feedback("tally", "ore_mined", mineralAmt, mineralType) + if(spawned_boulder) + new spawned_boulder(src) if(ishuman(user)) var/mob/living/carbon/human/H = user if(give_exp) @@ -206,7 +276,10 @@ gets_drilled(give_exp = FALSE) /turf/closed/mineral/random + /// What are the base odds that this turf spawns a mineral in the wall on initialize? var/mineralChance = 13 + /// Does this mineral determine it's random chance and mineral contents based on proximity to a vent? Overrides mineralChance and mineralAmt. + var/proximity_based = FALSE /// Returns a list of the chances for minerals to spawn. /// Will only run once, and will then be cached. @@ -228,7 +301,10 @@ var/static/list/mineral_chances_by_type = list() . = ..() - if (prob(mineralChance)) + var/dynamic_prob = mineralChance + if(proximity_based) + dynamic_prob = proximity_ore_chance() // We assign the chance of ore spawning based on probability. + if (prob(dynamic_prob)) var/list/spawn_chance_list = mineral_chances_by_type[type] if (isnull(spawn_chance_list)) mineral_chances_by_type[type] = expand_weights(mineral_chances()) @@ -246,7 +322,8 @@ if(ismineralturf(T)) var/turf/closed/mineral/M = T M.turf_type = src.turf_type - M.mineralAmt = rand(1, 5) + M.mineralAmt = scale_ore_to_vent() + SSore_generation.post_ore_random["[M.mineralAmt]"] += 1 src = M M.levelupdate() else @@ -254,12 +331,15 @@ T.levelupdate() else - Change_Ore(path, 1) + Change_Ore(path, FALSE) Spread_Vein(path) + mineralAmt = scale_ore_to_vent() + SSore_generation.post_ore_manual["[mineralAmt]"] += 1 /turf/closed/mineral/random/high_chance icon_state = "rock_highchance" mineralChance = 25 + proximity_based = FALSE /turf/closed/mineral/random/high_chance/mineral_chances() return list( @@ -277,6 +357,7 @@ baseturfs = /turf/open/misc/asteroid/basalt/lava_land_surface initial_gas_mix = LAVALAND_DEFAULT_ATMOS defer_change = TRUE + proximity_based = FALSE /turf/closed/mineral/random/high_chance/volcanic/mineral_chances() return list( @@ -327,8 +408,8 @@ baseturfs = /turf/open/misc/asteroid/basalt/lava_land_surface initial_gas_mix = LAVALAND_DEFAULT_ATMOS defer_change = TRUE - - mineralChance = 10 + proximity_based = TRUE // Nova Edit: Original TRUE //FF editr - reverted it back + mineralChance = 7 // Nova Edit: Original 5 (13) /turf/closed/mineral/random/volcanic/mineral_chances() return list( @@ -343,12 +424,6 @@ /turf/closed/mineral/gibtonite/volcanic = 4, ) -/// A turf that can't we can't build openspace chasms on or spawn ruins in. -/turf/closed/mineral/random/volcanic/do_not_chasm - turf_type = /turf/open/misc/asteroid/basalt/lava_land_surface/no_ruins - baseturfs = /turf/open/misc/asteroid/basalt/lava_land_surface/no_ruins - turf_flags = NO_RUINS - /turf/closed/mineral/random/snow name = "snowy mountainside" icon = MAP_SWITCH('icons/turf/walls/mountain_wall.dmi', 'icons/turf/mining.dmi') @@ -361,6 +436,8 @@ baseturfs = /turf/open/misc/asteroid/snow/icemoon initial_gas_mix = ICEMOON_DEFAULT_ATMOS weak_turf = TRUE + proximity_based = TRUE // Nova Edit: Originally TRUE //FF editr - reverted it back + mineralChance = 8 // Nova Edit: Originally Not defined - lowers from 13 /turf/closed/mineral/random/snow/Change_Ore(ore_type, random = 0) . = ..() @@ -384,7 +461,7 @@ ) /// Near exact same subtype as parent, just used in ruins to prevent other ruins/chasms from spawning on top of it. -/turf/closed/mineral/random/snow/do_not_chasm +/turf/closed/mineral/snowmountain/do_not_chasm turf_type = /turf/open/misc/asteroid/snow/icemoon/do_not_chasm baseturfs = /turf/open/misc/asteroid/snow/icemoon/do_not_chasm turf_flags = NO_RUINS @@ -409,6 +486,7 @@ ) /turf/closed/mineral/random/snow/high_chance + proximity_based = FALSE /turf/closed/mineral/random/snow/high_chance/mineral_chances() return list( @@ -426,13 +504,7 @@ /turf/closed/mineral/random/labormineral/mineral_chances() return list( - /obj/item/stack/ore/diamond = 1, - /obj/item/stack/ore/gold = 8, - /obj/item/stack/ore/iron = 95, - /obj/item/stack/ore/plasma = 30, - /obj/item/stack/ore/silver = 20, - /obj/item/stack/ore/titanium = 8, - /obj/item/stack/ore/uranium = 3, + /obj/item/boulder/gulag = 165, /turf/closed/mineral/gibtonite = 2, ) @@ -444,14 +516,7 @@ /turf/closed/mineral/random/labormineral/volcanic/mineral_chances() return list( - /obj/item/stack/ore/bluespace_crystal = 1, - /obj/item/stack/ore/diamond = 1, - /obj/item/stack/ore/gold = 8, - /obj/item/stack/ore/iron = 95, - /obj/item/stack/ore/plasma = 30, - /obj/item/stack/ore/silver = 20, - /obj/item/stack/ore/titanium = 8, - /obj/item/stack/ore/uranium = 3, + /obj/item/boulder/gulag_expanded = 166, /turf/closed/mineral/gibtonite/volcanic = 2, ) @@ -471,14 +536,7 @@ /turf/closed/mineral/random/labormineral/ice/mineral_chances() return list( - /obj/item/stack/ore/bluespace_crystal = 1, - /obj/item/stack/ore/diamond = 1, - /obj/item/stack/ore/gold = 8, - /obj/item/stack/ore/iron = 95, - /obj/item/stack/ore/plasma = 30, - /obj/item/stack/ore/silver = 20, - /obj/item/stack/ore/titanium = 8, - /obj/item/stack/ore/uranium = 3, + /obj/item/boulder/gulag = 168, /turf/closed/mineral/gibtonite/ice/icemoon = 2, ) diff --git a/code/game/turfs/closed/wall/mineral_walls.dm b/code/game/turfs/closed/wall/mineral_walls.dm index 23e9a2cf775..b42e194ffcf 100644 --- a/code/game/turfs/closed/wall/mineral_walls.dm +++ b/code/game/turfs/closed/wall/mineral_walls.dm @@ -270,11 +270,6 @@ base_icon_state = "shuttle_wall" smoothing_flags = SMOOTH_BITMASK -/turf/closed/wall/mineral/titanium/nosmooth - icon = 'icons/turf/shuttle.dmi' - icon_state = "wall" - smoothing_flags = NONE - /turf/closed/wall/mineral/titanium/overspace icon_state = "map-overspace" smoothing_flags = SMOOTH_BITMASK | SMOOTH_DIAGONAL_CORNERS @@ -332,11 +327,6 @@ base_icon_state = "plastitanium_wall" smoothing_flags = SMOOTH_BITMASK -/turf/closed/wall/mineral/plastitanium/nosmooth - icon = 'icons/turf/shuttle.dmi' - icon_state = "wall" - smoothing_flags = NONE - /turf/closed/wall/mineral/plastitanium/overspace icon_state = "map-overspace" smoothing_flags = SMOOTH_BITMASK | SMOOTH_DIAGONAL_CORNERS diff --git a/code/game/turfs/closed/wall/reinf_walls.dm b/code/game/turfs/closed/wall/reinf_walls.dm index 3172e5a9e56..20926fe9d32 100644 --- a/code/game/turfs/closed/wall/reinf_walls.dm +++ b/code/game/turfs/closed/wall/reinf_walls.dm @@ -253,11 +253,6 @@ base_icon_state = "plastitanium_wall" smoothing_flags = SMOOTH_BITMASK -/turf/closed/wall/r_wall/syndicate/nosmooth - icon = 'icons/turf/shuttle.dmi' - icon_state = "wall" - smoothing_flags = NONE - /turf/closed/wall/r_wall/syndicate/overspace icon_state = "map-overspace" smoothing_flags = SMOOTH_BITMASK | SMOOTH_DIAGONAL_CORNERS diff --git a/code/game/turfs/closed/walls.dm b/code/game/turfs/closed/walls.dm index 2cc6d32bc03..4e79d835271 100644 --- a/code/game/turfs/closed/walls.dm +++ b/code/game/turfs/closed/walls.dm @@ -72,7 +72,7 @@ ) RegisterSignals(src, list( COMSIG_MOB_CLIENT_PRE_MOVE, - COMSIG_HUMAN_DISARM_HIT, + COMSIG_LIVING_DISARM_HIT, COMSIG_LIVING_GET_PULLED, COMSIG_MOVABLE_TELEPORTING, COMSIG_ATOM_DIR_CHANGE, @@ -83,7 +83,7 @@ SIGNAL_HANDLER UnregisterSignal(src, list( COMSIG_MOB_CLIENT_PRE_MOVE, - COMSIG_HUMAN_DISARM_HIT, + COMSIG_LIVING_DISARM_HIT, COMSIG_LIVING_GET_PULLED, COMSIG_MOVABLE_TELEPORTING, COMSIG_ATOM_DIR_CHANGE, diff --git a/code/game/turfs/open/_open.dm b/code/game/turfs/open/_open.dm index e049c2c393f..472935f5ae5 100644 --- a/code/game/turfs/open/_open.dm +++ b/code/game/turfs/open/_open.dm @@ -115,12 +115,28 @@ /turf/open/indestructible/TerraformTurf(path, new_baseturf, flags, defer_change = FALSE, ignore_air = FALSE) return + +/turf/open/indestructible/large + icon_state = "floor_large" + /turf/open/indestructible/white icon_state = "white" +/turf/open/indestructible/white/smooth_large + icon_state = "white_large" + +/turf/open/indestructible/white/textured + icon_state = "textured_white" + /turf/open/indestructible/dark icon_state = "darkfull" +/turf/open/indestructible/dark/textured + icon_state = "textured_dark" + +/turf/open/indestructible/dark/smooth_large + icon_state = "dark_large" + /turf/open/indestructible/light icon_state = "light_on-1" @@ -232,6 +248,9 @@ /turf/open/indestructible/meat/airless initial_gas_mix = AIRLESS_ATMOS +/turf/open/indestructible/vault + icon_state = "rockvault" + /turf/open/indestructible/plating name = "plating" icon_state = "plating" @@ -243,6 +262,18 @@ /turf/open/indestructible/plating/airless initial_gas_mix = AIRLESS_ATMOS +/turf/open/indestructible/kitchen + icon_state = /turf/open/floor/iron/kitchen::icon_state + +/turf/open/indestructible/rockyground + icon_state = /turf/open/misc/ashplanet/rocky::icon_state + icon = /turf/open/misc/ashplanet/rocky::icon + name = /turf/open/misc/ashplanet/rocky::name + +/turf/open/indestructible/stone + icon_state = /turf/open/floor/stone::icon_state + name = /turf/open/floor/stone::name + /turf/open/Initalize_Atmos(time) excited = FALSE update_visuals() diff --git a/code/game/turfs/open/asteroid.dm b/code/game/turfs/open/asteroid.dm index b453fb0c4be..3a3a837968a 100644 --- a/code/game/turfs/open/asteroid.dm +++ b/code/game/turfs/open/asteroid.dm @@ -185,6 +185,10 @@ GLOBAL_LIST_EMPTY(dug_up_basalt) /turf/open/misc/asteroid/basalt/lava_land_surface/no_ruins turf_flags = NO_RUINS +/// A turf that can't we can't build openspace chasms on or spawn ruins in. +/turf/closed/mineral/volcanic/lava_land_surface/do_not_chasm + turf_flags = NO_RUINS + /turf/open/misc/asteroid/lowpressure initial_gas_mix = OPENTURF_LOW_PRESSURE baseturfs = /turf/open/misc/asteroid/lowpressure diff --git a/code/game/turfs/open/chasm.dm b/code/game/turfs/open/chasm.dm index 48ab1ceca38..142d966172b 100644 --- a/code/game/turfs/open/chasm.dm +++ b/code/game/turfs/open/chasm.dm @@ -119,3 +119,19 @@ /turf/open/chasm/true/apply_components(mapload) AddComponent(/datum/component/chasm, null, mapload) //Don't pass anything for below_turf. + +/turf/open/chasm/true/no_smooth + smoothing_flags = NONE + +/turf/open/chasm/true/no_smooth/rcd_vals(mob/user, obj/item/construction/rcd/the_rcd) + return FALSE + +/turf/open/chasm/true/no_smooth/rcd_act(mob/user, obj/item/construction/rcd/the_rcd, list/rcd_data) + return FALSE + +/turf/open/chasm/true/no_smooth/attackby(obj/item/item, mob/user, params, area/area_restriction) + if(istype(item, /obj/item/stack/rods)) + return + else if(istype(item, /obj/item/stack/tile/iron)) + return + return ..() diff --git a/code/game/turfs/open/floor/plating.dm b/code/game/turfs/open/floor/plating.dm index 3e58d647023..8634883762f 100644 --- a/code/game/turfs/open/floor/plating.dm +++ b/code/game/turfs/open/floor/plating.dm @@ -314,7 +314,6 @@ icon = 'icons/hud/radial.dmi' icon_state = "wallfloor" - #undef PLATE_INTACT #undef PLATE_BOLTS_LOOSENED #undef PLATE_CUT diff --git a/code/game/turfs/open/lava.dm b/code/game/turfs/open/lava.dm index 1a174723d85..8f9e7b44aa6 100644 --- a/code/game/turfs/open/lava.dm +++ b/code/game/turfs/open/lava.dm @@ -52,7 +52,8 @@ /turf/open/lava/Destroy() for(var/mob/living/leaving_mob in contents) - REMOVE_TRAIT(leaving_mob, TRAIT_PERMANENTLY_ONFIRE, TURF_TRAIT) + leaving_mob.RemoveElement(/datum/element/perma_fire_overlay) + REMOVE_TRAIT(leaving_mob, TRAIT_NO_EXTINGUISH, TURF_TRAIT) return ..() /turf/open/lava/update_overlays() @@ -144,7 +145,8 @@ /turf/open/lava/Exited(atom/movable/gone, direction) . = ..() if(isliving(gone) && !islava(gone.loc)) - REMOVE_TRAIT(gone, TRAIT_PERMANENTLY_ONFIRE, TURF_TRAIT) + gone.RemoveElement(/datum/element/perma_fire_overlay) + REMOVE_TRAIT(gone, TRAIT_NO_EXTINGUISH, TURF_TRAIT) /turf/open/lava/hitby(atom/movable/AM, skipcatch, hitpush, blocked, datum/thrownthing/throwingdatum) if(burn_stuff(AM)) @@ -292,11 +294,10 @@ if(QDELETED(burn_target)) return FALSE - . = TRUE if(isobj(burn_target)) var/obj/burn_obj = burn_target if(burn_obj.resistance_flags & ON_FIRE) // already on fire; skip it. - return + return TRUE if(!(burn_obj.resistance_flags & FLAMMABLE)) burn_obj.resistance_flags |= FLAMMABLE //Even fireproof things burn up in lava if(burn_obj.resistance_flags & FIRE_PROOF) @@ -305,17 +306,21 @@ burn_obj.set_armor_rating(FIRE, 50) burn_obj.fire_act(temperature_damage, 1000 * seconds_per_tick) if(istype(burn_obj, /obj/structure/closet)) - var/obj/structure/closet/burn_closet = burn_obj - for(var/burn_content in burn_closet.contents) + for(var/burn_content in burn_target) burn_stuff(burn_content) - return + return TRUE - var/mob/living/burn_living = burn_target - ADD_TRAIT(burn_living, TRAIT_PERMANENTLY_ONFIRE, TURF_TRAIT) - burn_living.ignite_mob() - burn_living.adjust_fire_stacks(lava_firestacks * seconds_per_tick) - burn_living.update_fire() - burn_living.adjustFireLoss(lava_damage * seconds_per_tick) + if(isliving(burn_target)) + var/mob/living/burn_living = burn_target + if(!HAS_TRAIT_FROM(burn_living, TRAIT_NO_EXTINGUISH, TURF_TRAIT)) + burn_living.AddElement(/datum/element/perma_fire_overlay) + ADD_TRAIT(burn_living, TRAIT_NO_EXTINGUISH, TURF_TRAIT) + burn_living.adjust_fire_stacks(lava_firestacks * seconds_per_tick) + burn_living.ignite_mob() + burn_living.adjustFireLoss(lava_damage * seconds_per_tick) + return TRUE + + return FALSE /turf/open/lava/can_cross_safely(atom/movable/crossing) return HAS_TRAIT(src, TRAIT_LAVA_STOPPED) || HAS_TRAIT(crossing, immunity_trait ) || HAS_TRAIT(crossing, TRAIT_MOVE_FLYING) diff --git a/code/game/turfs/turf.dm b/code/game/turfs/turf.dm index 8f29bb2e2c2..d62d523321b 100644 --- a/code/game/turfs/turf.dm +++ b/code/game/turfs/turf.dm @@ -228,9 +228,11 @@ GLOBAL_LIST_EMPTY(station_turfs) return //move the turf - old_area.turfs_to_uncontain += src + LISTASSERTLEN(old_area.turfs_to_uncontain_by_zlevel, z, list()) + LISTASSERTLEN(new_area.turfs_by_zlevel, z, list()) + old_area.turfs_to_uncontain_by_zlevel[z] += src + new_area.turfs_by_zlevel[z] += src new_area.contents += src - new_area.contained_turfs += src //changes to make after turf has moved on_change_area(old_area, new_area) diff --git a/code/game/world.dm b/code/game/world.dm index ef4ba6c0a1d..cd403b56591 100644 --- a/code/game/world.dm +++ b/code/game/world.dm @@ -381,9 +381,19 @@ GLOBAL_VAR(restart_counter) if(length(features)) new_status += ": [jointext(features, ", ")]" - new_status += "
Time: [gameTimestamp("hh:mm")]" - if(SSshuttle?.emergency && SSshuttle?.emergency?.mode != (SHUTTLE_IDLE || SHUTTLE_ENDGAME)) - new_status += " | Shuttle: [SSshuttle.emergency.getModeStr()] [SSshuttle.emergency.getTimerStr()]" + if(!SSticker || SSticker?.current_state == GAME_STATE_STARTUP) + new_status += "
STARTING" + else if(SSticker) + if(SSticker.current_state == GAME_STATE_PREGAME && SSticker.GetTimeLeft() > 0) + new_status += "
Starting: [round((SSticker.GetTimeLeft())/10)]" + else if(SSticker.current_state == GAME_STATE_SETTING_UP) + new_status += "
Starting: Now" + else if(SSticker.IsRoundInProgress()) + new_status += "
Time: [time2text(STATION_TIME_PASSED(), "hh:mm", 0)]" + if(SSshuttle?.emergency && SSshuttle?.emergency?.mode != (SHUTTLE_IDLE || SHUTTLE_ENDGAME)) + new_status += " | Shuttle: [SSshuttle.emergency.getModeStr()] [SSshuttle.emergency.getTimerStr()]" + else if(SSticker.current_state == GAME_STATE_FINISHED) + new_status += "
RESTARTING" if(SSmapping.config) new_status += "
Map: [SSmapping.config.map_path == CUSTOM_MAP_PATH ? "Uncharted Territory" : SSmapping.config.map_name]" if(SSmapping.next_map_config) @@ -414,10 +424,13 @@ GLOBAL_VAR(restart_counter) if(!map_load_z_cutoff) return var/area/global_area = GLOB.areas_by_type[world.area] // We're guaranteed to be touching the global area, so we'll just do this - var/list/to_add = block( - locate(old_max + 1, 1, 1), - locate(maxx, maxy, map_load_z_cutoff)) - global_area.contained_turfs += to_add + LISTASSERTLEN(global_area.turfs_by_zlevel, map_load_z_cutoff, list()) + for (var/zlevel in 1 to map_load_z_cutoff) + var/list/to_add = block( + locate(old_max + 1, 1, zlevel), + locate(maxx, maxy, zlevel)) + + global_area.turfs_by_zlevel[zlevel] += to_add /world/proc/increase_max_y(new_maxy, map_load_z_cutoff = maxz) if(new_maxy <= maxy) @@ -427,10 +440,12 @@ GLOBAL_VAR(restart_counter) if(!map_load_z_cutoff) return var/area/global_area = GLOB.areas_by_type[world.area] // We're guarenteed to be touching the global area, so we'll just do this - var/list/to_add = block( - locate(1, old_maxy + 1, 1), - locate(maxx, maxy, map_load_z_cutoff)) - global_area.contained_turfs += to_add + LISTASSERTLEN(global_area.turfs_by_zlevel, map_load_z_cutoff, list()) + for (var/zlevel in 1 to map_load_z_cutoff) + var/list/to_add = block( + locate(1, old_maxy + 1, 1), + locate(maxx, maxy, map_load_z_cutoff)) + global_area.turfs_by_zlevel[zlevel] += to_add /world/proc/incrementMaxZ() maxz++ diff --git a/code/modules/admin/admin_verbs.dm b/code/modules/admin/admin_verbs.dm index 2268cc09573..bec2ce97f05 100644 --- a/code/modules/admin/admin_verbs.dm +++ b/code/modules/admin/admin_verbs.dm @@ -1211,8 +1211,7 @@ GLOBAL_PROTECT(admin_verbs_poll) var/desired_mob = text2path(attempted_target_path) if(!ispath(desired_mob)) - var/static/list/mob_paths = make_types_fancy(subtypesof(/mob/living)) - desired_mob = pick_closest_path(attempted_target_path, mob_paths) + desired_mob = pick_closest_path(attempted_target_path, make_types_fancy(subtypesof(/mob/living))) if(isnull(desired_mob) || !ispath(desired_mob) || QDELETED(head)) return //The user pressed "Cancel" diff --git a/code/modules/admin/sql_message_system.dm b/code/modules/admin/sql_message_system.dm index 12757b42fd9..48f7eddc0a6 100644 --- a/code/modules/admin/sql_message_system.dm +++ b/code/modules/admin/sql_message_system.dm @@ -651,7 +651,6 @@ return if(!type) return - var/output var/list/parameters = list( "targetckey" = target_ckey, "type" = type, diff --git a/code/modules/admin/topic.dm b/code/modules/admin/topic.dm index 6d1ec20a472..6ffd3a39d4d 100644 --- a/code/modules/admin/topic.dm +++ b/code/modules/admin/topic.dm @@ -1394,7 +1394,6 @@ return G.report_message = description message_admins("[key_name(usr)] created \"[G.name]\" station goal.") - GLOB.station_goals += G modify_goals() else if(href_list["change_lag_switch"]) diff --git a/code/modules/admin/verbs/admin_newscaster.dm b/code/modules/admin/verbs/admin_newscaster.dm index 0a25ebaca65..2f6870394c2 100644 --- a/code/modules/admin/verbs/admin_newscaster.dm +++ b/code/modules/admin/verbs/admin_newscaster.dm @@ -78,14 +78,15 @@ data["crime_description"] = crime_description var/list/wanted_info = list() if(GLOB.news_network.wanted_issue) - if(GLOB.news_network.wanted_issue.img) + var/has_wanted_issue = !isnull(GLOB.news_network.wanted_issue.img) + if(has_wanted_issue) user << browse_rsc(GLOB.news_network.wanted_issue.img, "wanted_photo.png") wanted_info = list(list( "active" = GLOB.news_network.wanted_issue.active, "criminal" = GLOB.news_network.wanted_issue.criminal, "crime" = GLOB.news_network.wanted_issue.body, "author" = GLOB.news_network.wanted_issue.scanned_user, - "image" = "wanted_photo.png" + "image" = (has_wanted_issue ? "wanted_photo.png" : null) )) //Code breaking down the channels that have been made on-station thus far. ha @@ -320,6 +321,7 @@ new_feed_comment.body = comment_text new_feed_comment.time_stamp = station_time_timestamp() current_message.comments += new_feed_comment + GLOB.news_network.last_action ++ usr.log_message("(as an admin) commented on message [current_message.return_body(-1)] -- [current_message.body]", LOG_COMMENT) creating_comment = FALSE diff --git a/code/modules/admin/verbs/adminjump.dm b/code/modules/admin/verbs/adminjump.dm index 1bdde584691..dfcc5f60dd0 100644 --- a/code/modules/admin/verbs/adminjump.dm +++ b/code/modules/admin/verbs/adminjump.dm @@ -10,10 +10,10 @@ return var/list/turfs = list() - for(var/turf/T in A.get_contained_turfs()) - if(T.density) - continue - turfs.Add(T) + for (var/list/zlevel_turfs as anything in A.get_zlevel_turf_lists()) + for (var/turf/area_turf as anything in zlevel_turfs) + if(!area_turf.density) + turfs.Add(area_turf) if(length(turfs)) var/turf/T = pick(turfs) diff --git a/code/modules/admin/verbs/debug.dm b/code/modules/admin/verbs/debug.dm index 260bfb16bf3..126d8756762 100644 --- a/code/modules/admin/verbs/debug.dm +++ b/code/modules/admin/verbs/debug.dm @@ -546,8 +546,8 @@ /datum/admins/proc/modify_goals() var/dat = "" - for(var/datum/station_goal/S in GLOB.station_goals) - dat += "[S.name] - Announce | Remove
" + for(var/datum/station_goal/goal as anything in SSstation.get_station_goals()) + dat += "[goal.name] - Announce | Remove
" dat += "
Add New Goal" usr << browse(dat, "window=goals;size=400x400") diff --git a/code/modules/admin/verbs/list_exposer.dm b/code/modules/admin/verbs/list_exposer.dm index 445097e8bef..5ea2e227750 100644 --- a/code/modules/admin/verbs/list_exposer.dm +++ b/code/modules/admin/verbs/list_exposer.dm @@ -51,12 +51,7 @@ if(!SSticker.HasRoundStarted()) tgui_alert(usr, "The game hasn't started yet!") return - var/data = "Showing Crew Manifest.
" - data += "" - for(var/datum/record/crew/entry in GLOB.manifest.general) - data += "" - data += "
NamePosition
[entry.name][entry.rank][entry.rank != entry.trim ? " ([entry.trim])" : ""]
" - usr << browse(data, "window=manifest;size=440x410") + GLOB.manifest.ui_interact(usr) /datum/admins/proc/output_ai_laws() var/law_bound_entities = 0 diff --git a/code/modules/admin/verbs/map_export.dm b/code/modules/admin/verbs/map_export.dm index 88e80414235..8ff2568e79a 100644 --- a/code/modules/admin/verbs/map_export.dm +++ b/code/modules/admin/verbs/map_export.dm @@ -73,6 +73,7 @@ * This has been made semi-modular so you should be able to use these functions * elsewhere in code if you ever need to get a file in the .dmm format **/ + /atom/proc/get_save_vars() return list( NAMEOF(src, color), @@ -127,18 +128,42 @@ GLOBAL_LIST_INIT(save_file_chars, list( "Y","Z", )) -/proc/to_list_string(list/future_string) - . = "list(" +/proc/to_list_string(list/build_from) + var/list/build_into = list() + build_into += "list(" var/first_entry = TRUE - for(var/item in future_string) + for(var/item in build_from) + CHECK_TICK if(!first_entry) - . += ", " - if(future_string[item]) - . += hashtag_newlines_and_tabs("[item] = [future_string[item]]", list("{"="", "}"="", "\""="", ";"="", ","="")) + build_into += ", " + if(isnum(item) || !build_from[item]) + build_into += "[tgm_encode(item)]" else - . += hashtag_newlines_and_tabs("[item]", list("{"="", "}"="", "\""="", ";"="", ","="")) + build_into += "[tgm_encode(item)] = [tgm_encode(build_from[item])]" first_entry = FALSE - . += ")" + build_into += ")" + return build_into.Join("") + +/// Takes a constant, encodes it into a TGM valid string +/proc/tgm_encode(value) + if(istext(value)) + //Prevent symbols from being because otherwise you can name something + // [";},/obj/item/gun/energy/laser/instakill{name="da epic gun] and spawn yourself an instakill gun. + return "\"[hashtag_newlines_and_tabs("[value]", list("{"="", "}"="", "\""="", ";"="", ","=""))]\"" + if(isnum(value) || ispath(value)) + return "[value]" + if(islist(value)) + return to_list_string(value) + if(isnull(value)) + return "null" + if(isicon(value) || isfile(value)) + return "'[value]'" + // not handled: + // - pops: /obj{name="foo"} + // - new(), newlist(), icon(), matrix(), sound() + + // fallback: string + return tgm_encode("[value]") /** *Procedure for converting a coordinate-selected part of the map into text for the .dmi format @@ -154,7 +179,6 @@ GLOBAL_LIST_INIT(save_file_chars, list( shuttle_area_flag = SAVE_SHUTTLEAREA_DONTCARE, list/obj_blacklist = list(), ) - var/width = maxx - minx var/height = maxy - miny var/depth = maxz - minz @@ -164,56 +188,57 @@ GLOBAL_LIST_INIT(save_file_chars, list( var/layers = FLOOR(log(GLOB.save_file_chars.len, turfs_needed) + 0.999,1) //Step 1: Run through the area and generate file data - var/list/header_chars = list() //The characters of the header - var/list/header_dat = list() //The data of the header, lines up with chars - var/header = "" //The actual header in text - var/contents = "" //The contents in text (bit at the end) - var/index = 1 + var/list/header_data = list() //holds the data of a header -> to its key + var/list/header = list() //The actual header in text + var/list/contents = list() //The contents in text (bit at the end) + var/key_index = 1 // How many keys we've generated so far for(var/z in 0 to depth) for(var/x in 0 to width) contents += "\n([x + 1],1,[z + 1]) = {\"\n" for(var/y in height to 0 step -1) CHECK_TICK //====Get turfs Data==== - var/turf/place = locate((minx + x), (miny + y), (minz + z)) + var/turf/place var/area/location - var/list/objects - var/area/place_area = get_area(place) + var/turf/pull_from = locate((minx + x), (miny + y), (minz + z)) //If there is nothing there, save as a noop (For odd shapes) - if(!place) + if(isnull(pull_from)) place = /turf/template_noop location = /area/template_noop - objects = list() //Ignore things in space, must be a space turf - else if(istype(place, /turf/open/space) && !(save_flag & SAVE_SPACE)) + else if(istype(pull_from, /turf/open/space) && !(save_flag & SAVE_SPACE)) place = /turf/template_noop location = /area/template_noop + pull_from = null //Stuff to add else + var/area/place_area = get_area(pull_from) location = place_area.type - objects = place - place = place.type + place = pull_from.type + //====Saving shuttles only / non shuttles only==== - var/is_shuttle_area = istype(location, /area/shuttle) + var/is_shuttle_area = ispath(location, /area/shuttle) if((is_shuttle_area && shuttle_area_flag == SAVE_SHUTTLEAREA_IGNORE) || (!is_shuttle_area && shuttle_area_flag == SAVE_SHUTTLEAREA_ONLY)) place = /turf/template_noop location = /area/template_noop - objects = list() + pull_from = null //====For toggling not saving areas and turfs==== if(!(save_flag & SAVE_AREAS)) location = /area/template_noop if(!(save_flag & SAVE_TURFS)) place = /turf/template_noop //====Generate Header Character==== - var/header_char = calculate_tgm_header_index(index, layers) //The characters of the header - var/current_header = "(\n" //The actual stuff inside the header + // Info that describes this turf and all its contents + // Unique, will be checked for existing later + var/list/current_header = list() + current_header += "(\n" //Add objects to the header file var/empty = TRUE //====SAVING OBJECTS==== if(save_flag & SAVE_OBJECTS) - for(var/obj/thing in objects) + for(var/obj/thing in pull_from) CHECK_TICK - if(thing.type in obj_blacklist) + if(obj_blacklist[thing.type]) continue var/metadata = generate_tgm_metadata(thing) current_header += "[empty ? "" : ",\n"][thing.type][metadata]" @@ -225,7 +250,7 @@ GLOBAL_LIST_INIT(save_file_chars, list( current_header += "[custom_data ? ",\n[custom_data]" : ""]" //====SAVING MOBS==== if(save_flag & SAVE_MOBS) - for(var/mob/living/thing in objects) + for(var/mob/living/thing in pull_from) CHECK_TICK if(istype(thing, /mob/living/carbon)) //Ignore people, but not animals continue @@ -234,65 +259,48 @@ GLOBAL_LIST_INIT(save_file_chars, list( empty = FALSE current_header += "[empty ? "" : ",\n"][place],\n[location])\n" //====Fill the contents file==== - //Compression is done here - var/position_of_header = header_dat.Find(current_header) - if(position_of_header) - //If the header has already been saved, change the character to the other saved header - header_char = header_chars[position_of_header] - else - header += "\"[header_char]\" = [current_header]" - header_chars += header_char - header_dat += current_header - index ++ - contents += "[header_char]\n" + var/textiftied_header = current_header.Join() + // If we already know this header just use its key, otherwise we gotta make a new one + var/key = header_data[textiftied_header] + if(!key) + key = calculate_tgm_header_index(key_index, layers) + key_index++ + header += "\"[key]\" = [textiftied_header]" + header_data[textiftied_header] = key + contents += "[key]\n" contents += "\"}" - return "//[DMM2TGM_MESSAGE]\n[header][contents]" + return "//[DMM2TGM_MESSAGE]\n[header.Join()][contents.Join()]" -//vars_to_save = list() to save all vars /proc/generate_tgm_metadata(atom/object) - var/dat = "" - var/data_to_add = list() + var/list/data_to_add = list() + var/list/vars_to_save = object.get_save_vars() - if(!vars_to_save) - return - for(var/variable in object.vars) + for(var/variable in vars_to_save) CHECK_TICK - if(!(variable in vars_to_save)) - continue var/value = object.vars[variable] - if(!value) - continue if(value == initial(object.vars[variable]) || !issaved(object.vars[variable])) continue if(variable == "icon_state" && object.smoothing_flags) continue - var/symbol = "" - if(istext(value)) - symbol = "\"" - value = hashtag_newlines_and_tabs(value, list("{"="", "}"="", "\""="", ";"="", ","="")) - else if(islist(value)) - value = to_list_string(value) - else if(isicon(value) || isfile(value)) - symbol = "'" - else if(!(isnum(value) || ispath(value))) + + var/text_value = tgm_encode(value) + if(!text_value) continue - //Prevent symbols from being because otherwise you can name something [";},/obj/item/gun/energy/laser/instakill{name="da epic gun] and spawn yourself an instakill gun. - data_to_add += "[variable] = [symbol][value][symbol]" - //Process data to add - var/first = TRUE - for(var/data in data_to_add) - dat += "[first ? "" : ";\n"]\t[data]" - first = FALSE - if(dat) - dat = "{\n[dat]\n\t}" - return dat + data_to_add += "[variable] = [text_value]" -/proc/calculate_tgm_header_index(index, layers) - var/output = "" - for(var/i in 1 to layers) - CHECK_TICK - var/length = GLOB.save_file_chars.len + if(!length(data_to_add)) + return + return "{\n\t[data_to_add.Join(";\n\t")]\n\t}" + +// Could be inlined, not a massive cost tho so it's fine +/// Generates a key matching our index +/proc/calculate_tgm_header_index(index, key_length) + var/list/output = list() + // We want to stick the first one last, so we walk backwards + var/list/pull_from = GLOB.save_file_chars + var/length = length(pull_from) + for(var/i in key_length to 1 step -1) var/calculated = FLOOR((index-1) / (length ** (i - 1)), 1) calculated = (calculated % length) + 1 - output = "[GLOB.save_file_chars[calculated]][output]" - return output + output += pull_from[calculated] + return output.Join() diff --git a/code/modules/admin/verbs/secrets.dm b/code/modules/admin/verbs/secrets.dm index f9879428ddf..20a05685bc9 100644 --- a/code/modules/admin/verbs/secrets.dm +++ b/code/modules/admin/verbs/secrets.dm @@ -1,4 +1,4 @@ -GLOBAL_DATUM(everyone_a_traitor, /datum/everyone_is_a_traitor_controller) +GLOBAL_DATUM(everyone_an_antag, /datum/everyone_is_an_antag_controller) /client/proc/secrets() //Creates a verb for admins to open up the ui set name = "Secrets" @@ -457,24 +457,35 @@ GLOBAL_DATUM(everyone_a_traitor, /datum/everyone_is_a_traitor_controller) for(var/i in GLOB.human_list) var/mob/living/carbon/human/H = i INVOKE_ASYNC(H, TYPE_PROC_REF(/mob/living/carbon, monkeyize)) - if("traitor_all") + if("antag_all") if(!is_funmin) return if(!SSticker.HasRoundStarted()) tgui_alert(usr,"The game hasn't started yet!") return - if(GLOB.everyone_a_traitor) - tgui_alert(usr, "The everyone is a traitor secret has already been triggered") + if(GLOB.everyone_an_antag) + var/are_we_antagstacking = tgui_alert(usr, "The everyone is antag secret has already been triggered. Do you want to stack antags?", "DANGER ZONE. Are you sure about this?", list("Confirm", "Abort")) + if(are_we_antagstacking != "Confirm") + return + + var/chosen_antag = tgui_input_list(usr, "Choose antag", "Chose antag", list(ROLE_TRAITOR, ROLE_CHANGELING, ROLE_HERETIC, ROLE_CULTIST, ROLE_NINJA, ROLE_WIZARD, ROLE_NIGHTMARE)) + if(!chosen_antag) return - var/objective = tgui_input_text(holder, "Enter an objective", "Objective") + var/objective = tgui_input_text(usr, "Enter an objective", "Objective") if(!objective) return - GLOB.everyone_a_traitor = new /datum/everyone_is_a_traitor_controller(objective) - SSblackbox.record_feedback("nested tally", "admin_secrets_fun_used", 1, list("Traitor All", "[objective]")) + var/confirmation = tgui_alert(usr, "Make everyone in to [chosen_antag] with objective: [objective]", "Are you sure about this?", list("Confirm", "Abort")) + if(confirmation != "Confirm") + return + var/keep_generic_objecives = tgui_alert(usr, "Generate normal objectives?", "Give default objectives?", list("Yes", "No")) + keep_generic_objecives = (keep_generic_objecives != "Yes") ? FALSE : TRUE + + GLOB.everyone_an_antag = new /datum/everyone_is_an_antag_controller(chosen_antag, objective, keep_generic_objecives) + SSblackbox.record_feedback("nested tally", "admin_secrets_fun_used", 1, list("[chosen_antag] All", "[objective]")) for(var/mob/living/player in GLOB.player_list) - GLOB.everyone_a_traitor.make_traitor(null, player) - message_admins(span_adminnotice("[key_name_admin(holder)] used everyone is a traitor secret. Objective is [objective]")) - log_admin("[key_name(holder)] used everyone is a traitor secret. Objective is [objective]") + GLOB.everyone_an_antag.make_antag(null, player) + message_admins(span_adminnotice("[key_name_admin(holder)] used everyone is antag secret. Antag is [chosen_antag]. Objective is [objective]. Generate default objectives: [keep_generic_objecives]")) + log_admin("[key_name(holder)] used everyone is antag secret: [chosen_antag] . Objective is [objective]. Generate default objectives: [keep_generic_objecives]. ") if("massbraindamage") if(!is_funmin) return @@ -641,38 +652,79 @@ GLOBAL_DATUM(everyone_a_traitor, /datum/everyone_is_a_traitor_controller) T.flick_overlay_static(portal_appearance[GET_TURF_PLANE_OFFSET(T) + 1], 15) playsound(T, 'sound/magic/lightningbolt.ogg', rand(80, 100), TRUE) -///Makes sure latejoining crewmembers also become traitors. -/datum/everyone_is_a_traitor_controller +/datum/everyone_is_an_antag_controller + var/chosen_antag = "" var/objective = "" + var/keep_generic_objecives -/datum/everyone_is_a_traitor_controller/New(objective) +/datum/everyone_is_an_antag_controller/New(chosen_antag, objective, keep_generic_objecives) + . = ..() + src.chosen_antag = chosen_antag src.objective = objective - RegisterSignal(SSdcs, COMSIG_GLOB_CREWMEMBER_JOINED, PROC_REF(make_traitor)) + src.keep_generic_objecives = keep_generic_objecives + RegisterSignal(SSdcs, COMSIG_GLOB_CREWMEMBER_JOINED, PROC_REF(make_antag_delay)) -/datum/everyone_is_a_traitor_controller/Destroy() +/datum/everyone_is_an_antag_controller/Destroy() UnregisterSignal(SSdcs, COMSIG_GLOB_CREWMEMBER_JOINED) return ..() -/datum/everyone_is_a_traitor_controller/proc/make_traitor(datum/source, mob/living/player) +/datum/everyone_is_an_antag_controller/proc/assign_admin_objective_and_antag(mob/living/player, datum/antagonist/antag_datum) + var/datum/objective/new_objective = new(objective) + new_objective.team = player + new_objective.team_explanation_text = objective + antag_datum.objectives += new_objective + player.mind.add_antag_datum(antag_datum) + +/datum/everyone_is_an_antag_controller/proc/make_antag_delay(datum/source, mob/living/player) SIGNAL_HANDLER + INVOKE_ASYNC(src, PROC_REF(make_antag), source, player) + + +/datum/everyone_is_an_antag_controller/proc/make_antag(datum/source, mob/living/player) if(player.stat == DEAD || !player.mind) return - if(is_special_character(player)) - return + sleep(1) if(ishuman(player)) - var/datum/antagonist/traitor/traitor_datum = new(give_objectives = FALSE) - var/datum/objective/new_objective = new - new_objective.owner = player - new_objective.explanation_text = objective - traitor_datum.objectives += new_objective - player.mind.add_antag_datum(traitor_datum) - var/datum/uplink_handler/uplink = traitor_datum.uplink_handler - uplink.has_progression = FALSE - uplink.has_objectives = FALSE + switch(chosen_antag) + if(ROLE_TRAITOR) + var/datum/antagonist/traitor/antag_datum = new(give_objectives = keep_generic_objecives) + assign_admin_objective_and_antag(player, antag_datum) + var/datum/uplink_handler/uplink = antag_datum.uplink_handler + uplink.has_progression = FALSE + uplink.has_objectives = FALSE + if(ROLE_CHANGELING) + var/datum/antagonist/changeling/antag_datum = new + antag_datum.give_objectives = keep_generic_objecives + assign_admin_objective_and_antag(player, antag_datum) + if(ROLE_HERETIC) + var/datum/antagonist/heretic/antag_datum = new + antag_datum.give_objectives = keep_generic_objecives + assign_admin_objective_and_antag(player, antag_datum) + if(ROLE_CULTIST) + var/datum/antagonist/cult/antag_datum = new + assign_admin_objective_and_antag(player, antag_datum) + if(ROLE_NINJA) + var/datum/antagonist/ninja/antag_datum = new + antag_datum.give_objectives = keep_generic_objecives + for(var/obj/item/item_to_drop in player) + if(!istype(item_to_drop, /obj/item/implant)) //avoid removing implanted uplinks + player.dropItemToGround(item_to_drop, FALSE) + assign_admin_objective_and_antag(player, antag_datum) + if(ROLE_WIZARD) + var/datum/antagonist/wizard/antag_datum = new + antag_datum.give_objectives = keep_generic_objecives + antag_datum.move_to_lair = FALSE + for(var/obj/item/item_to_drop in player) //avoid deleting player's items + if(!istype(item_to_drop, /obj/item/implant)) + player.dropItemToGround(item_to_drop, FALSE) + assign_admin_objective_and_antag(player, antag_datum) + if(ROLE_NIGHTMARE) + var/datum/antagonist/nightmare/antag_datum = new + assign_admin_objective_and_antag(player, antag_datum) + player.set_species(/datum/species/shadow/nightmare) + else if(isAI(player)) - var/datum/antagonist/malf_ai/malfunction_datum = new(give_objectives = FALSE) - var/datum/objective/new_objective = new - new_objective.owner = player - new_objective.explanation_text = objective - malfunction_datum.objectives += new_objective - player.mind.add_antag_datum(malfunction_datum) + var/datum/antagonist/malf_ai/antag_datum = new + antag_datum.give_objectives = keep_generic_objecives + assign_admin_objective_and_antag(player, antag_datum) + diff --git a/code/modules/admin/view_variables/reference_tracking.dm b/code/modules/admin/view_variables/reference_tracking.dm index 645467bf0fe..b9fd0e6d2ad 100644 --- a/code/modules/admin/view_variables/reference_tracking.dm +++ b/code/modules/admin/view_variables/reference_tracking.dm @@ -1,36 +1,29 @@ #ifdef REFERENCE_TRACKING +#define REFSEARCH_RECURSE_LIMIT 64 -/datum/proc/find_references(skip_alert) - running_find_references = type +/datum/proc/find_references(references_to_clear = INFINITY) if(usr?.client) - if(usr.client.running_find_references) - log_reftracker("CANCELLED search for references to a [usr.client.running_find_references].") - usr.client.running_find_references = null - running_find_references = null - //restart the garbage collector - SSgarbage.can_fire = TRUE - SSgarbage.update_nextfire(reset_time = TRUE) - return - - if(!skip_alert && tgui_alert(usr,"Running this will lock everything up for about 5 minutes. Would you like to begin the search?", "Find References", list("Yes", "No")) != "Yes") - running_find_references = null + if(tgui_alert(usr,"Running this will lock everything up for about 5 minutes. Would you like to begin the search?", "Find References", list("Yes", "No")) != "Yes") return + src.references_to_clear = references_to_clear //this keeps the garbage collector from failing to collect objects being searched for in here SSgarbage.can_fire = FALSE - if(usr?.client) - usr.client.running_find_references = type + _search_references() + //restart the garbage collector + SSgarbage.can_fire = TRUE + SSgarbage.update_nextfire(reset_time = TRUE) - log_reftracker("Beginning search for references to a [type].") +/datum/proc/_search_references() + log_reftracker("Beginning search for references to a [type], looking for [references_to_clear] refs.") var/starting_time = world.time - - log_reftracker("Refcount for [type]: [refcount(src)]") - //Time to search the whole game for our ref - DoSearchVar(GLOB, "GLOB", search_time = starting_time) //globals + DoSearchVar(GLOB, "GLOB", starting_time) //globals log_reftracker("Finished searching globals") + if(src.references_to_clear == 0) + return //Yes we do actually need to do this. The searcher refuses to read weird lists //And global.vars is a really weird list @@ -38,45 +31,46 @@ for(var/key in global.vars) global_vars[key] = global.vars[key] - DoSearchVar(global_vars, "Native Global", search_time = starting_time) + DoSearchVar(global_vars, "Native Global", starting_time) log_reftracker("Finished searching native globals") + if(src.references_to_clear == 0) + return for(var/datum/thing in world) //atoms (don't beleive its lies) - DoSearchVar(thing, "World -> [thing.type]", search_time = starting_time) + DoSearchVar(thing, "World -> [thing.type]", starting_time) + if(src.references_to_clear == 0) + break log_reftracker("Finished searching atoms") + if(src.references_to_clear == 0) + return for(var/datum/thing) //datums - DoSearchVar(thing, "Datums -> [thing.type]", search_time = starting_time) + DoSearchVar(thing, "Datums -> [thing.type]", starting_time) + if(src.references_to_clear == 0) + break log_reftracker("Finished searching datums") + if(src.references_to_clear == 0) + return //Warning, attempting to search clients like this will cause crashes if done on live. Watch yourself #ifndef REFERENCE_DOING_IT_LIVE for(var/client/thing) //clients - DoSearchVar(thing, "Clients -> [thing.type]", search_time = starting_time) + DoSearchVar(thing, "Clients -> [thing.type]", starting_time) + if(src.references_to_clear == 0) + break log_reftracker("Finished searching clients") + if(src.references_to_clear == 0) + return #endif log_reftracker("Completed search for references to a [type].") - if(usr?.client) - usr.client.running_find_references = null - running_find_references = null - - //restart the garbage collector - SSgarbage.can_fire = TRUE - SSgarbage.update_nextfire(reset_time = TRUE) - -/datum/proc/DoSearchVar(potential_container, container_name, recursive_limit = 64, search_time = world.time) - #ifdef REFERENCE_TRACKING_DEBUG - if(SSgarbage.should_save_refs && !found_refs) - found_refs = list() - #endif - - if(usr?.client && !usr.client.running_find_references) +/datum/proc/DoSearchVar(potential_container, container_name, search_time, recursion_count, is_special_list) + if(recursion_count >= REFSEARCH_RECURSE_LIMIT) + log_reftracker("Recursion limit reached. [container_name]") return - if(!recursive_limit) - log_reftracker("Recursion limit reached. [container_name]") + if(references_to_clear == 0) return //Check each time you go down a layer. This makes it a bit slow, but it won't effect the rest of the game at all @@ -90,73 +84,116 @@ return datum_container.last_find_references = search_time - var/container_print = datum_container.ref_search_details() var/list/vars_list = datum_container.vars + var/is_atom = FALSE + var/is_area = FALSE + if(isatom(datum_container)) + is_atom = TRUE + if(isarea(datum_container)) + is_area = TRUE for(var/varname in vars_list) - #ifndef FIND_REF_NO_CHECK_TICK - CHECK_TICK - #endif - if (varname == "vars" || varname == "vis_locs") //Fun fact, vis_locs don't count for references - continue var/variable = vars_list[varname] - - if(variable == src) + if(islist(variable)) + //Fun fact, vis_locs don't count for references + if(varname == "vars" || (is_atom && (varname == "vis_locs" || varname == "overlays" || varname == "underlays" || varname == "filters" || varname == "verbs" || (is_area && varname == "contents")))) + continue + // We do this after the varname check to avoid area contents (reading it incures a world loop's worth of cost) + if(!length(variable)) + continue + DoSearchVar(variable,\ + "[container_name] [datum_container.ref_search_details()] -> [varname] (list)",\ + search_time,\ + recursion_count + 1,\ + /*is_special_list = */ is_atom && (varname == "contents" || varname == "vis_contents" || varname == "locs")) + else if(variable == src) #ifdef REFERENCE_TRACKING_DEBUG if(SSgarbage.should_save_refs) + if(!found_refs) + found_refs = list() found_refs[varname] = TRUE continue //End early, don't want these logging + else + log_reftracker("Found [type] [text_ref(src)] in [datum_container.type]'s [datum_container.ref_search_details()] [varname] var. [container_name]") + #else + log_reftracker("Found [type] [text_ref(src)] in [datum_container.type]'s [datum_container.ref_search_details()] [varname] var. [container_name]") #endif - log_reftracker("Found [type] [text_ref(src)] in [datum_container.type]'s [container_print] [varname] var. [container_name]") + references_to_clear -= 1 + if(references_to_clear == 0) + log_reftracker("All references to [type] [text_ref(src)] found, exiting.") + return continue - if(islist(variable)) - DoSearchVar(variable, "[container_name] [container_print] -> [varname] (list)", recursive_limit - 1, search_time) - else if(islist(potential_container)) - var/normal = IS_NORMAL_LIST(potential_container) var/list/potential_cache = potential_container for(var/element_in_list in potential_cache) - #ifndef FIND_REF_NO_CHECK_TICK - CHECK_TICK - #endif + //Check normal sublists + if(islist(element_in_list)) + if(length(element_in_list)) + DoSearchVar(element_in_list, "[container_name] -> [element_in_list] (list)", search_time, recursion_count + 1) //Check normal entrys - if(element_in_list == src) + else if(element_in_list == src) #ifdef REFERENCE_TRACKING_DEBUG if(SSgarbage.should_save_refs) + if(!found_refs) + found_refs = list() found_refs[potential_cache] = TRUE - continue //End early, don't want these logging - #endif + continue + else + log_reftracker("Found [type] [text_ref(src)] in list [container_name].") + #else log_reftracker("Found [type] [text_ref(src)] in list [container_name].") - continue - - var/assoc_val = null - if(!isnum(element_in_list) && normal) - assoc_val = potential_cache[element_in_list] - //Check assoc entrys - if(assoc_val == src) - #ifdef REFERENCE_TRACKING_DEBUG - if(SSgarbage.should_save_refs) - found_refs[potential_cache] = TRUE - continue //End early, don't want these logging #endif - log_reftracker("Found [type] [text_ref(src)] in list [container_name]\[[element_in_list]\]") - continue - //We need to run both of these checks, since our object could be hiding in either of them - //Check normal sublists - if(islist(element_in_list)) - DoSearchVar(element_in_list, "[container_name] -> [element_in_list] (list)", recursive_limit - 1, search_time) - //Check assoc sublists - if(islist(assoc_val)) - DoSearchVar(potential_container[element_in_list], "[container_name]\[[element_in_list]\] -> [assoc_val] (list)", recursive_limit - 1, search_time) - -/proc/qdel_and_find_ref_if_fail(datum/thing_to_del, force = FALSE) - thing_to_del.qdel_and_find_ref_if_fail(force) - -/datum/proc/qdel_and_find_ref_if_fail(force = FALSE) - SSgarbage.reference_find_on_fail[text_ref(src)] = TRUE - qdel(src, force) + // This is dumb as hell I'm sorry + // I don't want the garbage subsystem to count as a ref for the purposes of this number + // If we find all other refs before it I want to early exit, and if we don't I want to keep searching past it + var/ignore_ref = FALSE + var/list/queues = SSgarbage.queues + for(var/list/queue in queues) + if(potential_cache in queue) + ignore_ref = TRUE + break + if(ignore_ref) + log_reftracker("[container_name] does not count as a ref for our count") + else + references_to_clear -= 1 + if(references_to_clear == 0) + log_reftracker("All references to [type] [text_ref(src)] found, exiting.") + return + + if(!isnum(element_in_list) && !is_special_list) + // This exists to catch an error that throws when we access a special list + // is_special_list is a hint, it can be wrong + try + var/assoc_val = potential_cache[element_in_list] + //Check assoc sublists + if(islist(assoc_val)) + if(length(assoc_val)) + DoSearchVar(potential_container[element_in_list], "[container_name]\[[element_in_list]\] -> [assoc_val] (list)", search_time, recursion_count + 1) + //Check assoc entry + else if(assoc_val == src) + #ifdef REFERENCE_TRACKING_DEBUG + if(SSgarbage.should_save_refs) + if(!found_refs) + found_refs = list() + found_refs[potential_cache] = TRUE + continue + else + log_reftracker("Found [type] [text_ref(src)] in list [container_name]\[[element_in_list]\]") + #else + log_reftracker("Found [type] [text_ref(src)] in list [container_name]\[[element_in_list]\]") + #endif + references_to_clear -= 1 + if(references_to_clear == 0) + log_reftracker("All references to [type] [text_ref(src)] found, exiting.") + return + catch + // So if it goes wrong we kill it + is_special_list = TRUE + log_reftracker("Curiosity: [container_name] lead to an error when acessing [element_in_list], what is it?") + +#undef REFSEARCH_RECURSE_LIMIT #endif // Kept outside the ifdef so overrides are easy to implement diff --git a/code/modules/antagonists/_common/antag_spawner.dm b/code/modules/antagonists/_common/antag_spawner.dm index 6ff809b59cb..9ef40a9cebf 100644 --- a/code/modules/antagonists/_common/antag_spawner.dm +++ b/code/modules/antagonists/_common/antag_spawner.dm @@ -332,7 +332,15 @@ return to_chat(user, span_notice("You activate [src] and wait for confirmation.")) - var/list/baddie_candidates = SSpolling.poll_ghost_candidates("Do you want to play as a [role_to_play]?", check_jobban = poll_role_check, role = poll_role_check, poll_time = 10 SECONDS, ignore_category = poll_ignore_category, pic_source = src, role_name_text = role_to_play) + var/list/baddie_candidates = SSpolling.poll_ghost_candidates( + "Do you want to play as a [role_to_play]?", + check_jobban = poll_role_check, + role = poll_role_check, + poll_time = 10 SECONDS, + ignore_category = poll_ignore_category, + pic_source = src, + role_name_text = role_to_play, + ) if(!LAZYLEN(baddie_candidates)) to_chat(user, span_warning(fail_text)) return @@ -359,7 +367,7 @@ else spawned_mob.forceMove(locate(1,1,1)) - antag_datum = new() + op_mind.add_antag_datum(antag_datum) if(ishuman(spawned_mob)) var/mob/living/carbon/human/human_mob = spawned_mob @@ -373,6 +381,21 @@ spawned_mob.forceMove(pod) new /obj/effect/pod_landingzone(get_turf(src), pod) +/obj/item/antag_spawner/loadout/contractor + name = "contractor support beacon" + desc = "A beacon sold to the most prestigeous syndicate members, a single-use radio for calling immediate backup." + icon = 'icons/obj/devices/voice.dmi' + icon_state = "nukietalkie" + outfit = /datum/outfit/contractor_partner + use_subtypes = FALSE + antag_datum = /datum/antagonist/traitor/contractor_support + poll_ignore_category = ROLE_TRAITOR + role_to_play = ROLE_CONTRACTOR_SUPPORT + +/obj/item/antag_spawner/loadout/contractor/do_special_things(mob/living/carbon/human/contractor_support, mob/user) + to_chat(contractor_support, "\n[span_alertwarning("[user.real_name] is your superior. Follow any, and all orders given by them. You're here to support their mission only.")]") + to_chat(contractor_support, "[span_alertwarning("Should they perish, or be otherwise unavailable, you're to assist other active agents in this mission area to the best of your ability.")]") + /obj/item/antag_spawner/loadout/monkey_man name = "monkey agent beacon" desc = "Call up some backup from ARC for monkey mayhem." diff --git a/code/modules/antagonists/abductor/equipment/gear/abductor_items.dm b/code/modules/antagonists/abductor/equipment/gear/abductor_items.dm index 66004140e59..14d8d737886 100644 --- a/code/modules/antagonists/abductor/equipment/gear/abductor_items.dm +++ b/code/modules/antagonists/abductor/equipment/gear/abductor_items.dm @@ -446,7 +446,7 @@ Congratulations! You are now trained for invasive xenobiology research!"} if(ishuman(victim)) var/mob/living/carbon/human/human_victim = victim species = span_notice("[human_victim.dna.species.name]") - if(human_victim.mind && human_victim.mind.has_antag_datum(/datum/antagonist/changeling)) + if(IS_CHANGELING(human_victim)) species = span_warning("Changeling lifeform") var/obj/item/organ/internal/heart/gland/temp = locate() in human_victim.organs if(temp) diff --git a/code/modules/antagonists/blob/blobstrains/regenerative_materia.dm b/code/modules/antagonists/blob/blobstrains/regenerative_materia.dm index 0b70cc9c741..a62895ae6c4 100644 --- a/code/modules/antagonists/blob/blobstrains/regenerative_materia.dm +++ b/code/modules/antagonists/blob/blobstrains/regenerative_materia.dm @@ -18,7 +18,8 @@ /datum/reagent/blob/regenerative_materia/expose_mob(mob/living/exposed_mob, methods=TOUCH, reac_volume, show_message, touch_protection, mob/camera/blob/overmind) . = ..() reac_volume = return_mob_expose_reac_volume(exposed_mob, methods, reac_volume, show_message, touch_protection, overmind) - exposed_mob.adjust_drugginess(reac_volume * 2 SECONDS) + if(iscarbon(exposed_mob)) + exposed_mob.adjust_drugginess(reac_volume * 2 SECONDS) if(exposed_mob.reagents) exposed_mob.reagents.add_reagent(/datum/reagent/blob/regenerative_materia, 0.2*reac_volume) exposed_mob.reagents.add_reagent(/datum/reagent/toxin/spore, 0.2*reac_volume) diff --git a/code/modules/antagonists/brainwashing/brainwashing.dm b/code/modules/antagonists/brainwashing/brainwashing.dm index 7a84fc183c4..524bfb04362 100644 --- a/code/modules/antagonists/brainwashing/brainwashing.dm +++ b/code/modules/antagonists/brainwashing/brainwashing.dm @@ -54,10 +54,6 @@ owner.announce_objectives() return ..() -/datum/antagonist/brainwashed/on_mindshield(mob/implanter) - owner.remove_antag_datum(/datum/antagonist/brainwashed) - return COMPONENT_MINDSHIELD_DECONVERTED - /datum/antagonist/brainwashed/admin_add(datum/mind/new_owner,mob/admin) var/mob/living/carbon/C = new_owner.current if(!istype(C)) diff --git a/code/modules/antagonists/brother/brother.dm b/code/modules/antagonists/brother/brother.dm index aea42ec2dd8..e62cc372a72 100644 --- a/code/modules/antagonists/brother/brother.dm +++ b/code/modules/antagonists/brother/brother.dm @@ -63,6 +63,12 @@ flashed.balloon_alert(source, "[flashed.p_their()] mind is vacant!") return + for(var/datum/objective/brother_objective in source.mind.get_all_objectives()) + // If the objective has a target, are we flashing them? + if(flashed == brother_objective.target?.current) + flashed.balloon_alert(source, "that's your target!") + return + if (flashed.mind.has_antag_datum(/datum/antagonist/brother)) flashed.balloon_alert(source, "[flashed.p_theyre()] loyal to someone else!") return diff --git a/code/modules/antagonists/changeling/changeling_power.dm b/code/modules/antagonists/changeling/changeling_power.dm index 9e8c0fa04e9..59656fd80bd 100644 --- a/code/modules/antagonists/changeling/changeling_power.dm +++ b/code/modules/antagonists/changeling/changeling_power.dm @@ -44,7 +44,7 @@ the same goes for Remove(). if you override Remove(), call parent or else your p /datum/action/changeling/Trigger(trigger_flags) var/mob/user = owner - if(!user || !user.mind || !user.mind.has_antag_datum(/datum/antagonist/changeling)) + if(!user || !IS_CHANGELING(user)) return try_to_sting(user) @@ -61,7 +61,7 @@ the same goes for Remove(). if you override Remove(), call parent or else your p /datum/action/changeling/proc/try_to_sting(mob/living/user, mob/living/target) if(!can_sting(user, target)) return FALSE - var/datum/antagonist/changeling/changeling = user.mind.has_antag_datum(/datum/antagonist/changeling) + var/datum/antagonist/changeling/changeling = IS_CHANGELING(user) if(sting_action(user, target)) sting_feedback(user, target) changeling.adjust_chemicals(-chemical_cost) @@ -81,7 +81,7 @@ the same goes for Remove(). if you override Remove(), call parent or else your p /datum/action/changeling/proc/can_sting(mob/living/user, mob/living/target) if(!can_be_used_by(user)) return FALSE - var/datum/antagonist/changeling/changeling = user.mind.has_antag_datum(/datum/antagonist/changeling) + var/datum/antagonist/changeling/changeling = IS_CHANGELING(user) if(changeling.chem_charges < chemical_cost) user.balloon_alert(user, "needs [chemical_cost] chemicals!") return FALSE diff --git a/code/modules/antagonists/changeling/powers/absorb.dm b/code/modules/antagonists/changeling/powers/absorb.dm index 1fdb50a7bab..5bd0f390cb8 100644 --- a/code/modules/antagonists/changeling/powers/absorb.dm +++ b/code/modules/antagonists/changeling/powers/absorb.dm @@ -24,13 +24,13 @@ return var/mob/living/carbon/target = owner.pulling - var/datum/antagonist/changeling/changeling = owner.mind.has_antag_datum(/datum/antagonist/changeling) + var/datum/antagonist/changeling/changeling = IS_CHANGELING(owner) return changeling.can_absorb_dna(target) /datum/action/changeling/absorb_dna/sting_action(mob/owner) SHOULD_CALL_PARENT(FALSE) // the only reason to call parent is for proper blackbox logging, and we do that ourselves in a snowflake way - var/datum/antagonist/changeling/changeling = owner.mind.has_antag_datum(/datum/antagonist/changeling) + var/datum/antagonist/changeling/changeling = IS_CHANGELING(owner) var/mob/living/carbon/human/target = owner.pulling is_absorbing = TRUE @@ -68,7 +68,7 @@ /datum/action/changeling/absorb_dna/proc/absorb_memories(mob/living/carbon/human/target) var/datum/mind/suckedbrain = target.mind - var/datum/antagonist/changeling/changeling = owner.mind.has_antag_datum(/datum/antagonist/changeling) + var/datum/antagonist/changeling/changeling = IS_CHANGELING(owner) for(var/memory_type in suckedbrain.memories) var/datum/memory/stolen_memory = suckedbrain.memories[memory_type] @@ -109,7 +109,7 @@ to_chat(owner, span_boldnotice("We have no more knowledge of [target]'s speech patterns.")) - var/datum/antagonist/changeling/target_ling = target.mind.has_antag_datum(/datum/antagonist/changeling) + var/datum/antagonist/changeling/target_ling = IS_CHANGELING(target) if(target_ling)//If the target was a changeling, suck out their extra juice and objective points! to_chat(owner, span_boldnotice("[target] was one of us. We have absorbed their power.")) diff --git a/code/modules/antagonists/changeling/powers/biodegrade.dm b/code/modules/antagonists/changeling/powers/biodegrade.dm index eba507ad5e0..ef3070356d5 100644 --- a/code/modules/antagonists/changeling/powers/biodegrade.dm +++ b/code/modules/antagonists/changeling/powers/biodegrade.dm @@ -65,6 +65,18 @@ ..() return TRUE + var/obj/item/clothing/shoes/shoes = user.shoes + if(istype(shoes) && shoes.tied == SHOES_KNOTTED && !(shoes.resistance_flags & (INDESTRUCTIBLE|UNACIDABLE|ACID_PROOF))) + new /obj/effect/decal/cleanable/greenglow(shoes.drop_location()) + user.visible_message( + span_warning("[user] vomits a glob of acid on [user.p_their()] tied up [shoes.name], melting [shoes.p_them()] into a pool of goo!"), + span_warning("We vomit acidic ooze onto our tied up [shoes.name], melting [shoes.p_them()] into a pool of goo!"), + ) + log_combat(user, shoes, "melted own shoes", addition = "(biodegrade)") + qdel(shoes) + ..() + return TRUE + user.balloon_alert(user, "already free!") return FALSE diff --git a/code/modules/antagonists/changeling/powers/fakedeath.dm b/code/modules/antagonists/changeling/powers/fakedeath.dm index cd748e83159..921dde35492 100644 --- a/code/modules/antagonists/changeling/powers/fakedeath.dm +++ b/code/modules/antagonists/changeling/powers/fakedeath.dm @@ -40,6 +40,7 @@ return changeling.fakedeath(CHANGELING_TRAIT) + ADD_TRAIT(changeling, TRAIT_STASIS, CHANGELING_TRAIT) addtimer(CALLBACK(src, PROC_REF(ready_to_regenerate), changeling), fakedeath_duration * duration_modifier, TIMER_UNIQUE) // Basically, these let the ling exit stasis without giving away their ling-y-ness if revived through other means RegisterSignal(changeling, SIGNAL_REMOVETRAIT(TRAIT_DEATHCOMA), PROC_REF(fakedeath_reset)) @@ -54,6 +55,7 @@ revive_ready = FALSE build_all_button_icons(UPDATE_BUTTON_NAME|UPDATE_BUTTON_ICON) + REMOVE_TRAIT(changeling, TRAIT_STASIS, CHANGELING_TRAIT) UnregisterSignal(changeling, SIGNAL_REMOVETRAIT(TRAIT_DEATHCOMA)) UnregisterSignal(changeling, COMSIG_MOB_STATCHANGE) @@ -116,7 +118,7 @@ if(QDELETED(src) || QDELETED(user)) return - var/datum/antagonist/changeling/ling = user.mind?.has_antag_datum(/datum/antagonist/changeling) + var/datum/antagonist/changeling/ling = IS_CHANGELING(user) if(QDELETED(ling) || !(src in ling.innate_powers + ling.purchased_powers)) // checking both innate and purchased for full coverage return if(!HAS_TRAIT_FROM(user, TRAIT_DEATHCOMA, CHANGELING_TRAIT)) diff --git a/code/modules/antagonists/changeling/powers/lesserform.dm b/code/modules/antagonists/changeling/powers/lesserform.dm index 87bd7c7c8b6..55238ce762d 100644 --- a/code/modules/antagonists/changeling/powers/lesserform.dm +++ b/code/modules/antagonists/changeling/powers/lesserform.dm @@ -30,7 +30,7 @@ if(user.movement_type & VENTCRAWLING) user.balloon_alert(user, "can't transform in pipes!") return FALSE - var/datum/antagonist/changeling/changeling = user.mind.has_antag_datum(/datum/antagonist/changeling) + var/datum/antagonist/changeling/changeling = IS_CHANGELING(user) var/datum/changeling_profile/chosen_form = select_form(changeling, user) if(!chosen_form) return FALSE diff --git a/code/modules/antagonists/changeling/powers/mimic_voice.dm b/code/modules/antagonists/changeling/powers/mimic_voice.dm index 3a9314a953a..9caf0abb450 100644 --- a/code/modules/antagonists/changeling/powers/mimic_voice.dm +++ b/code/modules/antagonists/changeling/powers/mimic_voice.dm @@ -9,7 +9,7 @@ // Fake Voice /datum/action/changeling/mimicvoice/sting_action(mob/user) - var/datum/antagonist/changeling/changeling = user.mind.has_antag_datum(/datum/antagonist/changeling) + var/datum/antagonist/changeling/changeling = IS_CHANGELING(user) if(changeling.mimicing) changeling.mimicing = "" changeling.chem_recharge_slowdown -= 0.25 @@ -27,7 +27,7 @@ return TRUE /datum/action/changeling/mimicvoice/Remove(mob/user) - var/datum/antagonist/changeling/changeling = user.mind.has_antag_datum(/datum/antagonist/changeling) + var/datum/antagonist/changeling/changeling = IS_CHANGELING(user) if(changeling?.mimicing) changeling.chem_recharge_slowdown = max(0, changeling.chem_recharge_slowdown - 0.25) changeling.mimicing = "" diff --git a/code/modules/antagonists/changeling/powers/mutations.dm b/code/modules/antagonists/changeling/powers/mutations.dm index 9c5b6a10ec9..7ad2b14448c 100644 --- a/code/modules/antagonists/changeling/powers/mutations.dm +++ b/code/modules/antagonists/changeling/powers/mutations.dm @@ -121,7 +121,7 @@ //checks if we already have an organic suit and casts it off. /datum/action/changeling/suit/proc/check_suit(mob/user) - var/datum/antagonist/changeling/changeling = user.mind.has_antag_datum(/datum/antagonist/changeling) + var/datum/antagonist/changeling/changeling = IS_CHANGELING(user) if(!ishuman(user) || !changeling) return 1 var/mob/living/carbon/human/H = user @@ -154,7 +154,7 @@ user.equip_to_slot_if_possible(new suit_type(user), ITEM_SLOT_OCLOTHING, 1, 1, 1) user.equip_to_slot_if_possible(new helmet_type(user), ITEM_SLOT_HEAD, 1, 1, 1) - var/datum/antagonist/changeling/changeling = user.mind.has_antag_datum(/datum/antagonist/changeling) + var/datum/antagonist/changeling/changeling = IS_CHANGELING(user) changeling.chem_recharge_slowdown += recharge_slowdown return TRUE @@ -477,7 +477,7 @@ weapon_name_simple = "shield" /datum/action/changeling/weapon/shield/sting_action(mob/user) - var/datum/antagonist/changeling/changeling = user.mind.has_antag_datum(/datum/antagonist/changeling) //So we can read the absorbed_count. + var/datum/antagonist/changeling/changeling = IS_CHANGELING(user) //So we can read the absorbed_count. if(!changeling) return diff --git a/code/modules/antagonists/changeling/powers/pheromone_receptors.dm b/code/modules/antagonists/changeling/powers/pheromone_receptors.dm index 8ed9c27599b..18fda4bf4ff 100644 --- a/code/modules/antagonists/changeling/powers/pheromone_receptors.dm +++ b/code/modules/antagonists/changeling/powers/pheromone_receptors.dm @@ -15,14 +15,14 @@ /datum/action/changeling/pheromone_receptors/Remove(mob/living/carbon/user) if(receptors_active) - var/datum/antagonist/changeling/changeling = user.mind.has_antag_datum(/datum/antagonist/changeling) + var/datum/antagonist/changeling/changeling = IS_CHANGELING(user) changeling.chem_recharge_slowdown -= 0.25 user.remove_status_effect(/datum/status_effect/agent_pinpointer/changeling) ..() /datum/action/changeling/pheromone_receptors/sting_action(mob/living/carbon/user) ..() - var/datum/antagonist/changeling/changeling = user.mind.has_antag_datum(/datum/antagonist/changeling) + var/datum/antagonist/changeling/changeling = IS_CHANGELING(user) if(!receptors_active) to_chat(user, span_warning("We search for the scent of any nearby changelings.")) changeling.chem_recharge_slowdown += 0.25 @@ -49,7 +49,7 @@ for(var/mob/living/carbon/C in GLOB.alive_mob_list) if(C != owner && C.mind) - var/datum/antagonist/changeling/antag_datum = C.mind.has_antag_datum(/datum/antagonist/changeling) + var/datum/antagonist/changeling/antag_datum = IS_CHANGELING(C) if(istype(antag_datum)) var/their_loc = get_turf(C) var/distance = get_dist_euclidian(my_loc, their_loc) diff --git a/code/modules/antagonists/changeling/powers/shriek.dm b/code/modules/antagonists/changeling/powers/shriek.dm index badd18f19f0..aa204d89a16 100644 --- a/code/modules/antagonists/changeling/powers/shriek.dm +++ b/code/modules/antagonists/changeling/powers/shriek.dm @@ -16,7 +16,7 @@ for(var/mob/living/M in get_hearers_in_view(4, user)) if(iscarbon(M)) var/mob/living/carbon/C = M - if(!C.mind || !C.mind.has_antag_datum(/datum/antagonist/changeling)) + if(!IS_CHANGELING(C)) var/obj/item/organ/internal/ears/ears = C.get_organ_slot(ORGAN_SLOT_EARS) if(ears) ears.adjustEarDamage(0, 30) diff --git a/code/modules/antagonists/changeling/powers/tiny_prick.dm b/code/modules/antagonists/changeling/powers/tiny_prick.dm index 918ed0d4398..25092a26258 100644 --- a/code/modules/antagonists/changeling/powers/tiny_prick.dm +++ b/code/modules/antagonists/changeling/powers/tiny_prick.dm @@ -6,7 +6,7 @@ var/mob/user = owner if(!user || !user.mind) return - var/datum/antagonist/changeling/changeling = user.mind.has_antag_datum(/datum/antagonist/changeling) + var/datum/antagonist/changeling/changeling = IS_CHANGELING(user) if(!changeling) return if(!changeling.chosen_sting) @@ -17,7 +17,7 @@ /datum/action/changeling/sting/proc/set_sting(mob/user) to_chat(user, span_notice("We prepare our sting. Alt+click or click the middle mouse button on a target to sting them.")) - var/datum/antagonist/changeling/changeling = user.mind.has_antag_datum(/datum/antagonist/changeling) + var/datum/antagonist/changeling/changeling = IS_CHANGELING(user) changeling.chosen_sting = src changeling.lingstingdisplay.icon_state = button_icon_state @@ -25,7 +25,7 @@ /datum/action/changeling/sting/proc/unset_sting(mob/user) to_chat(user, span_warning("We retract our sting, we can't sting anyone for now.")) - var/datum/antagonist/changeling/changeling = user.mind.has_antag_datum(/datum/antagonist/changeling) + var/datum/antagonist/changeling/changeling = IS_CHANGELING(user) changeling.chosen_sting = null changeling.lingstingdisplay.icon_state = null @@ -40,7 +40,7 @@ /datum/action/changeling/sting/can_sting(mob/user, mob/target) if(!..()) return - var/datum/antagonist/changeling/changeling = user.mind.has_antag_datum(/datum/antagonist/changeling) + var/datum/antagonist/changeling/changeling = IS_CHANGELING(user) if(!changeling.chosen_sting) to_chat(user, "We haven't prepared our sting yet!") if(!iscarbon(target)) @@ -53,7 +53,7 @@ return // NOVA EDIT END if(!length(get_path_to(user, target, max_distance = changeling.sting_range, simulated_only = FALSE))) return // no path within the sting's range is found. what a weird place to use the pathfinding system - if(target.mind && target.mind.has_antag_datum(/datum/antagonist/changeling)) + if(IS_CHANGELING(target)) sting_feedback(user, target) changeling.chem_charges -= chemical_cost return 1 @@ -62,7 +62,7 @@ if(!target) return to_chat(user, span_notice("We stealthily sting [target.name].")) - if(target.mind && target.mind.has_antag_datum(/datum/antagonist/changeling)) + if(IS_CHANGELING(target)) to_chat(target, span_warning("You feel a tiny prick.")) return 1 @@ -96,7 +96,7 @@ /datum/action/changeling/sting/transformation/set_sting(mob/user) selected_dna = null - var/datum/antagonist/changeling/changeling = user.mind.has_antag_datum(/datum/antagonist/changeling) + var/datum/antagonist/changeling/changeling = IS_CHANGELING(user) var/datum/changeling_profile/new_selected_dna = changeling.select_dna() if(QDELETED(src) || QDELETED(changeling) || QDELETED(user)) return @@ -200,13 +200,13 @@ /datum/action/changeling/sting/extract_dna/can_sting(mob/user, mob/target) if(..()) - var/datum/antagonist/changeling/changeling = user.mind.has_antag_datum(/datum/antagonist/changeling) + var/datum/antagonist/changeling/changeling = IS_CHANGELING(user) return changeling.can_absorb_dna(target) /datum/action/changeling/sting/extract_dna/sting_action(mob/user, mob/living/carbon/human/target) ..() log_combat(user, target, "stung", "extraction sting") - var/datum/antagonist/changeling/changeling = user.mind.has_antag_datum(/datum/antagonist/changeling) + var/datum/antagonist/changeling/changeling = IS_CHANGELING(user) if(!changeling.has_profile_with_dna(target.dna)) changeling.add_new_profile(target) return TRUE diff --git a/code/modules/antagonists/changeling/powers/transform.dm b/code/modules/antagonists/changeling/powers/transform.dm index 69f21b0e44e..aea06a27e1e 100644 --- a/code/modules/antagonists/changeling/powers/transform.dm +++ b/code/modules/antagonists/changeling/powers/transform.dm @@ -13,7 +13,7 @@ //ATTACK HAND IGNORING PARENT RETURN VALUE /obj/item/clothing/glasses/changeling/attack_hand(mob/user, list/modifiers) - if(loc == user && user.mind && user.mind.has_antag_datum(/datum/antagonist/changeling)) + if(loc == user && IS_CHANGELING(user)) to_chat(user, span_notice("You reabsorb [src] into your body.")) qdel(src) return @@ -25,7 +25,7 @@ //ATTACK HAND IGNORING PARENT RETURN VALUE /obj/item/clothing/under/changeling/attack_hand(mob/user, list/modifiers) - if(loc == user && user.mind && user.mind.has_antag_datum(/datum/antagonist/changeling)) + if(loc == user && IS_CHANGELING(user)) to_chat(user, span_notice("You reabsorb [src] into your body.")) qdel(src) return @@ -38,7 +38,7 @@ //ATTACK HAND IGNORING PARENT RETURN VALUE /obj/item/clothing/suit/changeling/attack_hand(mob/user, list/modifiers) - if(loc == user && user.mind && user.mind.has_antag_datum(/datum/antagonist/changeling)) + if(loc == user && IS_CHANGELING(user)) to_chat(user, span_notice("You reabsorb [src] into your body.")) qdel(src) return @@ -51,7 +51,7 @@ //ATTACK HAND IGNORING PARENT RETURN VALUE /obj/item/clothing/head/changeling/attack_hand(mob/user, list/modifiers) - if(loc == user && user.mind && user.mind.has_antag_datum(/datum/antagonist/changeling)) + if(loc == user && IS_CHANGELING(user)) to_chat(user, span_notice("You reabsorb [src] into your body.")) qdel(src) return @@ -63,7 +63,7 @@ //ATTACK HAND IGNORING PARENT RETURN VALUE /obj/item/clothing/shoes/changeling/attack_hand(mob/user, list/modifiers) - if(loc == user && user.mind && user.mind.has_antag_datum(/datum/antagonist/changeling)) + if(loc == user && IS_CHANGELING(user)) to_chat(user, span_notice("You reabsorb [src] into your body.")) qdel(src) return @@ -75,7 +75,7 @@ //ATTACK HAND IGNORING PARENT RETURN VALUE /obj/item/clothing/gloves/changeling/attack_hand(mob/user, list/modifiers) - if(loc == user && user.mind && user.mind.has_antag_datum(/datum/antagonist/changeling)) + if(loc == user && IS_CHANGELING(user)) to_chat(user, span_notice("You reabsorb [src] into your body.")) qdel(src) return @@ -87,7 +87,7 @@ //ATTACK HAND IGNORING PARENT RETURN VALUE /obj/item/clothing/mask/changeling/attack_hand(mob/user, list/modifiers) - if(loc == user && user.mind && user.mind.has_antag_datum(/datum/antagonist/changeling)) + if(loc == user && IS_CHANGELING(user)) to_chat(user, span_notice("You reabsorb [src] into your body.")) qdel(src) return @@ -100,7 +100,7 @@ //ATTACK HAND IGNORING PARENT RETURN VALUE /obj/item/changeling/attack_hand(mob/user, list/modifiers) - if(loc == user && user.mind && user.mind.has_antag_datum(/datum/antagonist/changeling)) + if(loc == user && IS_CHANGELING(user)) to_chat(user, span_notice("You reabsorb [src] into your body.")) qdel(src) return @@ -134,7 +134,7 @@ //Change our DNA to that of somebody we've absorbed. /datum/action/changeling/transform/sting_action(mob/living/carbon/human/user) - var/datum/antagonist/changeling/changeling = user.mind.has_antag_datum(/datum/antagonist/changeling) + var/datum/antagonist/changeling/changeling = IS_CHANGELING(user) var/datum/changeling_profile/chosen_prof = changeling.select_dna() if(!chosen_prof) @@ -186,7 +186,7 @@ /datum/antagonist/changeling/proc/check_menu(mob/living/carbon/user) if(!istype(user)) return FALSE - var/datum/antagonist/changeling/changeling_datum = user.mind.has_antag_datum(/datum/antagonist/changeling) + var/datum/antagonist/changeling/changeling_datum = IS_CHANGELING(user) if(!changeling_datum) return FALSE return TRUE diff --git a/code/modules/antagonists/changeling/powers/void_adaption.dm b/code/modules/antagonists/changeling/powers/void_adaption.dm index 76c0eeffc97..934ae2f5770 100644 --- a/code/modules/antagonists/changeling/powers/void_adaption.dm +++ b/code/modules/antagonists/changeling/powers/void_adaption.dm @@ -55,14 +55,14 @@ if (!should_be_active) on_removed_adaption(void_adapted, "Our cells relax in safer air.") return - var/datum/antagonist/changeling/changeling_data = void_adapted.mind?.has_antag_datum(/datum/antagonist/changeling) + var/datum/antagonist/changeling/changeling_data = IS_CHANGELING(void_adapted) to_chat(void_adapted, span_changeling("Our cells harden themselves against the [pick(active_reasons)].")) changeling_data?.chem_recharge_slowdown -= recharge_slowdown currently_active = TRUE /// Called when we stop being adapted /datum/action/changeling/void_adaption/proc/on_removed_adaption(mob/living/former, message) - var/datum/antagonist/changeling/changeling_data = former.mind?.has_antag_datum(/datum/antagonist/changeling) + var/datum/antagonist/changeling/changeling_data = IS_CHANGELING(former) to_chat(former, span_changeling(message)) changeling_data?.chem_recharge_slowdown += recharge_slowdown currently_active = FALSE diff --git a/code/modules/antagonists/cult/cult.dm b/code/modules/antagonists/cult/cult.dm index 9cd24f8e707..e38c762d700 100644 --- a/code/modules/antagonists/cult/cult.dm +++ b/code/modules/antagonists/cult/cult.dm @@ -200,7 +200,8 @@ owner.current.update_mob_action_buttons() for(var/datum/mind/cult_mind as anything in cult_team.members) - vote_ability.Remove(cult_mind.current) + var/datum/antagonist/cult/cult_datum = cult_mind.has_antag_datum(/datum/antagonist/cult) + cult_datum.vote_ability.Remove(cult_mind.current) to_chat(cult_mind.current, span_cultlarge("[owner.current] has won the cult's support and is now their master. \ Follow [owner.current.p_their()] orders to the best of your ability!")) @@ -234,7 +235,8 @@ throwing.Remove(owner.current) owner.current.update_mob_action_buttons() for(var/datum/mind/cult_mind as anything in cult_team.members) - vote_ability.Grant(cult_mind.current) + var/datum/antagonist/cult/cult_datum = cult_mind.has_antag_datum(/datum/antagonist/cult) + cult_datum.vote_ability.Grant(cult_mind.current) to_chat(owner.current, span_cultlarge("You have been demoted from being the cult's Master, you are now an acolyte once more!")) diff --git a/code/modules/antagonists/cult/cult_comms.dm b/code/modules/antagonists/cult/cult_comms.dm index 00bdc960644..bee8eec306f 100644 --- a/code/modules/antagonists/cult/cult_comms.dm +++ b/code/modules/antagonists/cult/cult_comms.dm @@ -99,60 +99,100 @@ /datum/action/innate/cult/mastervote/IsAvailable(feedback = FALSE) if(!owner || !owner.mind) return FALSE - var/datum/antagonist/cult/C = owner.mind.has_antag_datum(/datum/antagonist/cult,TRUE) - if(!C || C.cult_team.cult_vote_called || !ishuman(owner)) + var/datum/antagonist/cult/mind_cult_datum = owner.mind.has_antag_datum(/datum/antagonist/cult) + if(!mind_cult_datum || mind_cult_datum.cult_team.cult_leader_datum || mind_cult_datum.cult_team.cult_vote_called || !ishuman(owner)) return FALSE return ..() /datum/action/innate/cult/mastervote/Activate() var/choice = tgui_alert(owner, "The mantle of leadership is heavy. Success in this role requires an expert level of communication and experience. Are you sure?",, list("Yes", "No")) if(choice == "Yes" && IsAvailable()) - var/datum/antagonist/cult/C = owner.mind.has_antag_datum(/datum/antagonist/cult,TRUE) - pollCultists(owner,C.cult_team) + var/datum/antagonist/cult/mind_cult_datum = owner.mind.has_antag_datum(/datum/antagonist/cult) + start_poll_cultists_for_leader(owner, mind_cult_datum.cult_team) -/proc/pollCultists(mob/living/Nominee, datum/team/cult/team) //Cult Master Poll +///Start the poll for Cult Leaeder. +/proc/start_poll_cultists_for_leader(mob/living/nominee, datum/team/cult/team) if(world.time < CULT_POLL_WAIT) - to_chat(Nominee, "It would be premature to select a leader while everyone is still settling in, try again in [DisplayTimeText(CULT_POLL_WAIT-world.time)].") + to_chat(nominee, "It would be premature to select a leader while everyone is still settling in, try again in [DisplayTimeText(CULT_POLL_WAIT-world.time)].") return - team.cult_vote_called = TRUE //somebody's trying to be a master, make sure we don't let anyone else try - for(var/datum/mind/B in team.members) - if(B.current) - B.current.update_mob_action_buttons() - if(!B.current.incapacitated()) - SEND_SOUND(B.current, 'sound/hallucinations/im_here1.ogg') - to_chat(B.current, span_cultlarge("Acolyte [Nominee] has asserted that [Nominee.p_theyre()] worthy of leading the cult. A vote will be called shortly.")) - sleep(10 SECONDS) - var/list/asked_cultists = list() - for(var/datum/mind/B in team.members) - if(B.current && B.current != Nominee && !B.current.incapacitated()) - SEND_SOUND(B.current, 'sound/magic/exit_blood.ogg') - asked_cultists += B.current - var/list/yes_voters = SSpolling.poll_candidates("[Nominee] seeks to lead your cult, do you support [Nominee.p_them()]?", poll_time = 30 SECONDS, group = asked_cultists, pic_source = Nominee, role_name_text = "cult master") - if(QDELETED(Nominee) || Nominee.incapacitated()) + team.cult_vote_called = TRUE + for(var/datum/mind/team_member as anything in team.members) + if(!team_member.current) + continue + team_member.current.update_mob_action_buttons() + if(team_member.current.incapacitated()) + continue + SEND_SOUND(team_member.current, 'sound/hallucinations/im_here1.ogg') + to_chat(team_member.current, span_cultlarge("Acolyte [nominee] has asserted that [nominee.p_theyre()] worthy of leading the cult. A vote will be called shortly.")) + + addtimer(CALLBACK(GLOBAL_PROC, GLOBAL_PROC_REF(poll_cultists_for_leader), nominee, team), 10 SECONDS) + +///Polls all Cultists on whether the person putting themselves forward should be made the Cult Leader, if they can actually be such. +/proc/poll_cultists_for_leader(mob/living/nominee, datum/team/cult/team) + if(QDELETED(nominee) || nominee.incapacitated()) team.cult_vote_called = FALSE - for(var/datum/mind/B in team.members) - if(B.current) - B.current.update_mob_action_buttons() - if(!B.current.incapacitated()) - to_chat(B.current,span_cultlarge("[Nominee] has died in the process of attempting to win the cult's support!")) + for(var/datum/mind/team_member as anything in team.members) + if(!team_member.current) + continue + team_member.current.update_mob_action_buttons() + if(team_member.current.incapacitated()) + continue + to_chat(team_member.current,span_cultlarge("[nominee] has died in the process of attempting to start a vote!")) return FALSE - if(!Nominee.mind) + var/list/mob/living/asked_cultists = list() + for(var/datum/mind/team_member as anything in team.members) + if(!team_member.current || team_member.current == nominee || team_member.current.incapacitated()) + continue + SEND_SOUND(team_member.current, 'sound/magic/exit_blood.ogg') + asked_cultists += team_member.current + + var/list/yes_voters = SSpolling.poll_candidates( + question = "[nominee] seeks to lead your cult, do you support [nominee.p_them()]?", + poll_time = 30 SECONDS, + group = asked_cultists, + pic_source = nominee, + role_name_text = "cult master", + custom_response_messages = list( + POLL_RESPONSE_SIGNUP = "You have pledged your allegience to [nominee].", + POLL_RESPONSE_ALREADY_SIGNED = "You have already pledged your allegience!", + POLL_RESPONSE_NOT_SIGNED = "You aren't nominated for this.", + POLL_RESPONSE_TOO_LATE_TO_UNREGISTER = "It's too late to unregister yourself, voting has already begun!", + POLL_RESPONSE_UNREGISTERED = "You have been removed your pledge to [nominee].", + ) + ) + if(QDELETED(nominee) || nominee.incapacitated()) + team.cult_vote_called = FALSE + for(var/datum/mind/team_member as anything in team.members) + if(!team_member.current) + continue + team_member.current.update_mob_action_buttons() + if(team_member.current.incapacitated()) + continue + to_chat(team_member.current,span_cultlarge("[nominee] has died in the process of attempting to win the cult's support!")) + return FALSE + if(!nominee.mind) team.cult_vote_called = FALSE - for(var/datum/mind/B in team.members) - if(B.current) - B.current.update_mob_action_buttons() - if(!B.current.incapacitated()) - to_chat(B.current,span_cultlarge("[Nominee] has gone catatonic in the process of attempting to win the cult's support!")) + for(var/datum/mind/team_member as anything in team.members) + if(!team_member.current) + continue + team_member.current.update_mob_action_buttons() + if(team_member.current.incapacitated()) + continue + to_chat(team_member.current,span_cultlarge("[nominee] has gone catatonic in the process of attempting to win the cult's support!")) return FALSE if(LAZYLEN(yes_voters) <= LAZYLEN(asked_cultists) * 0.5) team.cult_vote_called = FALSE - for(var/datum/mind/B in team.members) - if(B.current) - B.current.update_mob_action_buttons() - if(!B.current.incapacitated()) - to_chat(B.current, span_cultlarge("[Nominee] could not win the cult's support and shall continue to serve as an acolyte.")) + for(var/datum/mind/team_member as anything in team.members) + if(!team_member.current) + continue + team_member.current.update_mob_action_buttons() + if(team_member.current.incapacitated()) + continue + to_chat(team_member.current, span_cultlarge("[nominee] could not win the cult's support and shall continue to serve as an acolyte.")) return FALSE - var/datum/antagonist/cult/cult_datum = Nominee.mind.has_antag_datum(/datum/antagonist/cult) + + team.cult_vote_called = FALSE + var/datum/antagonist/cult/cult_datum = nominee.mind.has_antag_datum(/datum/antagonist/cult) if(!cult_datum.make_cult_leader()) CRASH("[cult_datum.owner.current] was supposed to turn into the leader, but they didn't for some reason. This isn't supposed to happen unless an Admin messed with it.") return TRUE diff --git a/code/modules/antagonists/cult/cult_structure_pylon.dm b/code/modules/antagonists/cult/cult_structure_pylon.dm index 7900aaad120..4bb7c83e7a7 100644 --- a/code/modules/antagonists/cult/cult_structure_pylon.dm +++ b/code/modules/antagonists/cult/cult_structure_pylon.dm @@ -48,12 +48,9 @@ var/static/list/blacklisted_pylon_turfs = typecacheof(list( /turf/closed, /turf/open/floor/engine/cult, - /turf/open/space, - /turf/open/lava, - /turf/open/chasm, /turf/open/misc/asteroid, )) - if(is_type_in_typecache(nearby_turf, blacklisted_pylon_turfs)) + if(isgroundlessturf(nearby_turf) || is_type_in_typecache(nearby_turf, blacklisted_pylon_turfs)) continue validturfs |= nearby_turf diff --git a/code/modules/antagonists/cult/runes.dm b/code/modules/antagonists/cult/runes.dm index bed29dbefd5..8d7d66979f4 100644 --- a/code/modules/antagonists/cult/runes.dm +++ b/code/modules/antagonists/cult/runes.dm @@ -574,7 +574,8 @@ structure_check() searches for nearby cultist structures required for the invoca color = RUNE_COLOR_DARKRED icon_state = "rune_large" pixel_x = -32 //So the big ol' 96x96 sprite shows up right - pixel_y = -32 + pixel_y = 16 + pixel_z = -48 scribe_delay = 50 SECONDS //how long the rune takes to create scribe_damage = 40.1 //how much damage you take doing it log_when_erased = TRUE @@ -611,10 +612,10 @@ GLOBAL_VAR_INIT(narsie_summon_count, 0) GLOB.narsie_effect_last_modified = started var/starting_color = GLOB.starlight_color - var/list/target_color = ReadHSV(RGBtoHSV(starting_color)) + var/list/target_color = rgb2hsv(starting_color) target_color[2] = target_color[2] * 0.4 target_color[3] = target_color[3] * 0.5 - var/mid_color = HSVtoRGB(hsv(target_color[1], target_color[2], target_color[3])) + var/mid_color = hsv2rgb(target_color) var/end_color = "#c21d57" for(var/i in 1 to 9) if(GLOB.narsie_effect_last_modified > started) @@ -638,7 +639,7 @@ GLOBAL_VAR_INIT(narsie_summon_count, 0) for(var/i in 1 to 4) if(GLOB.narsie_effect_last_modified > started) return - var/starlight_color = hsv_gradient(i, 1, starting_color, 4, end_color) + var/starlight_color = BlendHSV(i / 4, starting_color, end_color) set_starlight(starlight_color) sleep(8 SECONDS) @@ -1074,7 +1075,8 @@ GLOBAL_VAR_INIT(narsie_summon_count, 0) icon = 'icons/effects/96x96.dmi' icon_state = "apoc" pixel_x = -32 - pixel_y = -32 + pixel_y = 16 + pixel_z = -48 color = RUNE_COLOR_DARKRED req_cultists = 3 scribe_delay = 100 diff --git a/code/modules/antagonists/heretic/heretic_knowledge.dm b/code/modules/antagonists/heretic/heretic_knowledge.dm index cb9f3b75ccc..f2cf7b00047 100644 --- a/code/modules/antagonists/heretic/heretic_knowledge.dm +++ b/code/modules/antagonists/heretic/heretic_knowledge.dm @@ -211,7 +211,8 @@ /datum/heretic_knowledge/spell/on_lose(mob/user, datum/antagonist/heretic/our_heretic) var/datum/action/cooldown/spell/created_spell = created_spell_ref?.resolve() - created_spell?.Remove(user) + if(created_spell?.owner == user) + created_spell.Remove(user) /** * A knowledge subtype for knowledge that can only diff --git a/code/modules/antagonists/heretic/items/heretic_necks.dm b/code/modules/antagonists/heretic/items/heretic_necks.dm index 44e387cf970..c1f244dfd0e 100644 --- a/code/modules/antagonists/heretic/items/heretic_necks.dm +++ b/code/modules/antagonists/heretic/items/heretic_necks.dm @@ -55,7 +55,7 @@ // The amulette conversion tool used by moon heretics /obj/item/clothing/neck/heretic_focus/moon_amulette name = "Moonlight Amulette" - desc = "A piece of the mind, the sight and the moon. Gazing into it makes your head spin and hear whispers of laughter and joy." + desc = "A piece of the mind, the soul and the moon. Gazing into it makes your head spin and hear whispers of laughter and joy." icon = 'icons/obj/antags/eldritch.dmi' icon_state = "moon_amulette" w_class = WEIGHT_CLASS_SMALL @@ -64,7 +64,7 @@ /obj/item/clothing/neck/heretic_focus/moon_amulette/attack(mob/living/target, mob/living/user, params) var/mob/living/carbon/human/hit = target - if(!IS_HERETIC(user)) + if(!IS_HERETIC_OR_MONSTER(user)) user.balloon_alert(user, "you feel a presence watching you") user.add_mood_event("Moon Amulette Insanity", /datum/mood_event/amulette_insanity) user.mob_mood.set_sanity(user.mob_mood.sanity - 50) @@ -73,7 +73,7 @@ return if(!hit.mob_mood) return - if(hit.mob_mood.sanity_level < SANITY_LEVEL_CRAZY) + if(hit.mob_mood.sanity_level < SANITY_LEVEL_UNSTABLE) user.balloon_alert(user, "their mind is too strong!") hit.add_mood_event("Moon Amulette Insanity", /datum/mood_event/amulette_insanity) hit.mob_mood.set_sanity(hit.mob_mood.sanity - sanity_damage) diff --git a/code/modules/antagonists/heretic/items/keyring.dm b/code/modules/antagonists/heretic/items/keyring.dm index a6a53bc3cee..b71015dbfe1 100644 --- a/code/modules/antagonists/heretic/items/keyring.dm +++ b/code/modules/antagonists/heretic/items/keyring.dm @@ -3,7 +3,7 @@ desc = "A crack in space, impossibly deep and painful to the eyes. Definitely not safe." icon = 'icons/effects/eldritch.dmi' icon_state = "realitycrack" - light_system = STATIC_LIGHT + light_system = COMPLEX_LIGHT light_power = 1 light_on = TRUE light_color = COLOR_GREEN diff --git a/code/modules/antagonists/heretic/knowledge/ash_lore.dm b/code/modules/antagonists/heretic/knowledge/ash_lore.dm index a7a07056114..e97fe15be28 100644 --- a/code/modules/antagonists/heretic/knowledge/ash_lore.dm +++ b/code/modules/antagonists/heretic/knowledge/ash_lore.dm @@ -84,8 +84,9 @@ /datum/heretic_knowledge/mark/ash_mark name = "Mark of Ash" desc = "Your Mansus Grasp now applies the Mark of Ash. The mark is triggered from an attack with your Ashen Blade. \ - When triggered, the victim takes additional stamina and burn damage, and the mark is transferred to any nearby heathens. \ - Damage dealt is decreased with each transfer." + When triggered, the victim takes additional stamina and burn damage, and the mark is transferred to a nearby heathen. \ + Damage dealt is decreased with each transfer. \ + Triggering the mark will also greatly reduce the cooldown of your Mansus Grasp." gain_text = "He was a very particular man, always watching in the dead of night. \ But in spite of his duty, he regularly tranced through the Manse with his blazing lantern held high. \ He shone brightly in the darkness, until the blaze begin to die." @@ -101,7 +102,7 @@ // Also refunds 75% of charge! var/datum/action/cooldown/spell/touch/mansus_grasp/grasp = locate() in source.actions if(grasp) - grasp.next_use_time = min(round(grasp.next_use_time - grasp.cooldown_time * 0.75, 0), 0) + grasp.next_use_time -= round(grasp.cooldown_time*0.75) grasp.build_all_button_icons() /datum/heretic_knowledge/knowledge_ritual/ash diff --git a/code/modules/antagonists/heretic/knowledge/blade_lore.dm b/code/modules/antagonists/heretic/knowledge/blade_lore.dm index 257f87d7c9f..93983c41e0d 100644 --- a/code/modules/antagonists/heretic/knowledge/blade_lore.dm +++ b/code/modules/antagonists/heretic/knowledge/blade_lore.dm @@ -384,7 +384,7 @@ /datum/heretic_knowledge/ultimate/blade_final name = "Maelstrom of Silver" desc = "The ascension ritual of the Path of Blades. \ - Bring 3 headless corpses to a transmutation rune to complete the ritual. \ + Bring 3 corpses with either no head or a split skull to a transmutation rune to complete the ritual. \ When completed, you will be surrounded in a constant, regenerating orbit of blades. \ These blades will protect you from all attacks, but are consumed on use. \ Your Furious Steel spell will also have a shorter cooldown. \ @@ -399,7 +399,7 @@ if(!.) return FALSE - return !sacrifice.get_bodypart(BODY_ZONE_HEAD) + return !sacrifice.get_bodypart(BODY_ZONE_HEAD) || HAS_TRAIT(sacrifice, TRAIT_HAS_CRANIAL_FISSURE) /datum/heretic_knowledge/ultimate/blade_final/on_finished_recipe(mob/living/user, list/selected_atoms, turf/loc) . = ..() diff --git a/code/modules/antagonists/heretic/knowledge/lock_lore.dm b/code/modules/antagonists/heretic/knowledge/lock_lore.dm index 99629365679..9f80f47b0ae 100644 --- a/code/modules/antagonists/heretic/knowledge/lock_lore.dm +++ b/code/modules/antagonists/heretic/knowledge/lock_lore.dm @@ -145,12 +145,13 @@ gain_text = "Consorting with Burglar spirits is frowned upon, but a Steward will always want to learn about new doors." next_knowledge = list( /datum/heretic_knowledge/spell/opening_blast, + /datum/heretic_knowledge/reroll_targets, /datum/heretic_knowledge/blade_upgrade/flesh/lock, /datum/heretic_knowledge/unfathomable_curio, /datum/heretic_knowledge/painting, ) spell_to_add = /datum/action/cooldown/spell/pointed/burglar_finesse - cost = 2 + cost = 1 route = PATH_LOCK /datum/heretic_knowledge/blade_upgrade/flesh/lock //basically a chance-based weeping avulsion version of the former diff --git a/code/modules/antagonists/heretic/knowledge/moon_lore.dm b/code/modules/antagonists/heretic/knowledge/moon_lore.dm index 652eff2973d..d7d1bd3bf22 100644 --- a/code/modules/antagonists/heretic/knowledge/moon_lore.dm +++ b/code/modules/antagonists/heretic/knowledge/moon_lore.dm @@ -67,11 +67,11 @@ var/mob/living/carbon/carbon_target = target to_chat(carbon_target, span_danger("You hear echoing laughter from above")) carbon_target.cause_hallucination(/datum/hallucination/delusion/preset/moon, "delusion/preset/moon hallucination caused by mansus grasp") - carbon_target.mob_mood.set_sanity(carbon_target.mob_mood.sanity-20) + carbon_target.mob_mood.set_sanity(carbon_target.mob_mood.sanity-30) /datum/heretic_knowledge/spell/moon_smile name = "Smile of the moon" - desc = "Grants you Smile of the moon, a ranged spell muting, blinding and deafening the target for a\ + desc = "Grants you Smile of the moon, a ranged spell muting, blinding, deafening and knocking down the target for a\ duration based on their sanity." gain_text = "The moon smiles upon us all and those who see its true side can bring its joy." next_knowledge = list( @@ -95,17 +95,6 @@ route = PATH_MOON mark_type = /datum/status_effect/eldritch/moon -/datum/heretic_knowledge/mark/moon_mark/trigger_mark(mob/living/source, mob/living/target) - . = ..() - if(!.) - return - - // Also refunds 75% of charge! - var/datum/action/cooldown/spell/touch/mansus_grasp/grasp = locate() in source.actions - if(grasp) - grasp.next_use_time = min(round(grasp.next_use_time - grasp.cooldown_time * 0.75, 0), 0) - grasp.build_all_button_icons() - /datum/heretic_knowledge/knowledge_ritual/moon next_knowledge = list(/datum/heretic_knowledge/spell/moon_parade) route = PATH_MOON @@ -115,13 +104,7 @@ desc = "Grants you Lunar Parade, a spell that - after a short charge - sends a carnival forward \ when hitting someone they are forced to join the parade and suffer hallucinations." gain_text = "The music like a reflection of the soul compelled them, like moths to a flame they followed" - next_knowledge = list( - /datum/heretic_knowledge/moon_amulette, - /datum/heretic_knowledge/reroll_targets, - /datum/heretic_knowledge/unfathomable_curio, - /datum/heretic_knowledge/curse/paralysis, - /datum/heretic_knowledge/painting, - ) + next_knowledge = list(/datum/heretic_knowledge/moon_amulette) spell_to_add = /datum/action/cooldown/spell/pointed/projectile/moon_parade cost = 1 route = PATH_MOON @@ -129,13 +112,18 @@ /datum/heretic_knowledge/moon_amulette name = "Moonlight Amulette" - desc = "Allows you to transmute 2 sheets of glass, a pair of eyes, a brain and a tie \ + desc = "Allows you to transmute 2 sheets of glass, a heart and a tie \ if the item is used on someone with low sanity they go berserk attacking everyone \ , if their sanity isnt low enough it decreases their mood." gain_text = "At the head of the parade he stood, the moon condensed into one mass, a reflection of the soul." - next_knowledge = list(/datum/heretic_knowledge/blade_upgrade/moon) + next_knowledge = list( + /datum/heretic_knowledge/blade_upgrade/moon, + /datum/heretic_knowledge/reroll_targets, + /datum/heretic_knowledge/unfathomable_curio, + /datum/heretic_knowledge/curse/paralysis, + /datum/heretic_knowledge/painting, + ) required_atoms = list( - /obj/item/organ/internal/eyes = 1, /obj/item/organ/internal/heart = 1, /obj/item/stack/sheet/glass = 2, /obj/item/clothing/neck/tie = 1, @@ -149,7 +137,6 @@ desc = "Your blade now deals brain damage, causes random hallucinations and does sanity damage." gain_text = "His wit was sharp as a blade, cutting through the lie to bring us joy." next_knowledge = list(/datum/heretic_knowledge/spell/moon_ringleader) - cost = 1 route = PATH_MOON /datum/heretic_knowledge/blade_upgrade/moon/do_melee_effects(mob/living/source, mob/living/target, obj/item/melee/sickly_blade/blade) @@ -202,11 +189,13 @@ /datum/heretic_knowledge/ultimate/moon_final/on_finished_recipe(mob/living/user, list/selected_atoms, turf/loc) . = ..() + var/datum/antagonist/heretic/heretic_datum = IS_HERETIC(user) priority_announce("[generate_heretic_text()] Laugh, for the ringleader [user.real_name] has ascended! \ The truth shall finally devour the lie! [generate_heretic_text()]","[generate_heretic_text()]", ANNOUNCER_SPANOMALIES) user.client?.give_award(/datum/award/achievement/misc/moon_ascension, user) ADD_TRAIT(user, TRAIT_MADNESS_IMMUNE, REF(src)) + heretic_datum.add_team_hud(user, /datum/antagonist/lunatic) RegisterSignal(user, COMSIG_LIVING_LIFE, PROC_REF(on_life)) @@ -236,12 +225,20 @@ continue var/datum/antagonist/lunatic/lunatic = crewmate.mind.add_antag_datum(/datum/antagonist/lunatic) lunatic.set_master(user.mind, user) - var/obj/item/clothing/neck/heretic_focus/moon_amulette/moon_amulette = new - crewmate.put_in_active_hand(moon_amulette) + var/obj/item/clothing/neck/heretic_focus/moon_amulette/amulet = new(crewmate_turf) + var/static/list/slots = list( + "neck" = ITEM_SLOT_NECK, + "hands" = ITEM_SLOT_HANDS, + "backpack" = ITEM_SLOT_BACKPACK, + "right pocket" = ITEM_SLOT_RPOCKET, + "left pocket" = ITEM_SLOT_RPOCKET, + ) + crewmate.equip_in_one_of_slots(amulet, slots, qdel_on_fail = FALSE) crewmate.emote("laugh") amount_of_lunatics += 1 /datum/heretic_knowledge/ultimate/moon_final/proc/on_life(mob/living/source, seconds_per_tick, times_fired) + var/obj/effect/moon_effect = /obj/effect/temp_visual/moon_ringleader SIGNAL_HANDLER visible_hallucination_pulse( @@ -256,6 +253,7 @@ continue if(IS_HERETIC_OR_MONSTER(carbon_view)) continue + new moon_effect(get_turf(carbon_view)) carbon_view.adjust_confusion(2 SECONDS) carbon_view.mob_mood.set_sanity(carbon_sanity - 5) if(carbon_sanity < 30) diff --git a/code/modules/antagonists/heretic/knowledge/side_ash_moon.dm b/code/modules/antagonists/heretic/knowledge/side_ash_moon.dm index 0e55ffa58ea..4ce8f9de9c9 100644 --- a/code/modules/antagonists/heretic/knowledge/side_ash_moon.dm +++ b/code/modules/antagonists/heretic/knowledge/side_ash_moon.dm @@ -63,7 +63,7 @@ They also have the ability to create a ring of fire around themselves for a length of time." gain_text = "I combined my principle of hunger with my desire for destruction. The Marshal knew my name, and the Nightwatcher gazed on." next_knowledge = list( - /datum/heretic_knowledge/summon/stalker, + /datum/heretic_knowledge/spell/flame_birth, /datum/heretic_knowledge/spell/moon_ringleader, ) required_atoms = list( diff --git a/code/modules/antagonists/heretic/knowledge/side_flesh_void.dm b/code/modules/antagonists/heretic/knowledge/side_flesh_void.dm index 6439840fed5..4a315575d61 100644 --- a/code/modules/antagonists/heretic/knowledge/side_flesh_void.dm +++ b/code/modules/antagonists/heretic/knowledge/side_flesh_void.dm @@ -26,7 +26,6 @@ Also has a chance to transfer wounds from you to the victim." gain_text = "\"No matter the man, we bleed all the same.\" That's what the Marshal told me." next_knowledge = list( - /datum/heretic_knowledge/spell/apetra_vulnera, /datum/heretic_knowledge/spell/void_phase, /datum/heretic_knowledge/summon/raw_prophet, ) diff --git a/code/modules/antagonists/heretic/knowledge/side_lock_moon.dm b/code/modules/antagonists/heretic/knowledge/side_lock_moon.dm index f24c4126eea..737e0f08f40 100644 --- a/code/modules/antagonists/heretic/knowledge/side_lock_moon.dm +++ b/code/modules/antagonists/heretic/knowledge/side_lock_moon.dm @@ -23,7 +23,7 @@ gain_text = "The mansus holds many a curio, some are not meant for the mortal eye." next_knowledge = list( /datum/heretic_knowledge/spell/burglar_finesse, - /datum/heretic_knowledge/spell/moon_parade, + /datum/heretic_knowledge/moon_amulette, ) required_atoms = list( /obj/item/organ/internal/lungs = 1, @@ -48,7 +48,7 @@ They yearn for mortal eyes again, and I shall grant that wish." next_knowledge = list( /datum/heretic_knowledge/spell/burglar_finesse, - /datum/heretic_knowledge/spell/moon_parade, + /datum/heretic_knowledge/moon_amulette, ) required_atoms = list(/obj/item/canvas = 1) result_atoms = list(/obj/item/canvas) diff --git a/code/modules/antagonists/heretic/magic/flesh_surgery.dm b/code/modules/antagonists/heretic/magic/flesh_surgery.dm index 0fb0a402da9..12b3fcfbcaf 100644 --- a/code/modules/antagonists/heretic/magic/flesh_surgery.dm +++ b/code/modules/antagonists/heretic/magic/flesh_surgery.dm @@ -85,23 +85,24 @@ /// If cast on an organ, we'll restore it's health and even un-fail it. /datum/action/cooldown/spell/touch/flesh_surgery/proc/heal_organ(obj/item/melee/touch_attack/hand, obj/item/organ/to_heal, mob/living/carbon/caster) + if(to_heal.damage == 0) + to_heal.balloon_alert(caster, "already in good condition!") + return FALSE to_heal.balloon_alert(caster, "healing organ...") if(!do_after(caster, 1 SECONDS, to_heal, extra_checks = CALLBACK(src, PROC_REF(heal_checks), hand, to_heal, caster))) to_heal.balloon_alert(caster, "interrupted!") return FALSE var/organ_hp_to_heal = to_heal.maxHealth * organ_percent_healing - if(to_heal.damage < organ_hp_to_heal) - to_heal.set_organ_damage(organ_hp_to_heal) - to_heal.balloon_alert(caster, "organ healed") - playsound(to_heal, 'sound/magic/staff_healing.ogg', 30) - new /obj/effect/temp_visual/cult/sparks(get_turf(to_heal)) - caster.visible_message( - span_warning("[caster]'s hand glows a brilliant red as [caster.p_they()] restore \the [to_heal] to good condition!"), - span_notice("Your hand glows a brilliant red as you restore \the [to_heal] to good condition!"), - ) - else - to_heal.balloon_alert(caster, "already in good condition!") + to_heal.set_organ_damage(max(0 , to_heal.damage - organ_hp_to_heal)) + to_heal.balloon_alert(caster, "organ healed") + playsound(to_heal, 'sound/magic/staff_healing.ogg', 30) + new /obj/effect/temp_visual/cult/sparks(get_turf(to_heal)) + var/condition = (to_heal.damage > 0) ? "better" : "perfect" + caster.visible_message( + span_warning("[caster]'s hand glows a brilliant red as [caster.p_they()] restore \the [to_heal] to [condition] condition!"), + span_notice("Your hand glows a brilliant red as you restore \the [to_heal] to [condition] condition!"), + ) return TRUE @@ -120,7 +121,7 @@ playsound(to_heal, 'sound/magic/staff_healing.ogg', 30) new /obj/effect/temp_visual/cult/sparks(get_turf(to_heal)) caster.visible_message( - span_warning("[caster]'s hand glows a brilliant red as [caster.p_they()] restore [to_heal] to good condition!"), + span_warning("[caster]'s hand glows a brilliant red as [caster.p_they()] restore[caster.p_s()] [to_heal] to good condition!"), span_notice("Your hand glows a brilliant red as you restore [to_heal] to good condition!"), ) return TRUE @@ -169,14 +170,14 @@ time_it_takes = 6 SECONDS caster.visible_message( - span_danger("[caster]'s hand glows a brilliant red as [caster.p_they()] reach directly into [caster.p_their()] own [parsed_zone]!"), + span_danger("[caster]'s hand glows a brilliant red as [caster.p_they()] reach[caster.p_es()] directly into [caster.p_their()] own [parsed_zone]!"), span_userdanger("Your hand glows a brilliant red as you reach directly into your own [parsed_zone]!"), ) else carbon_victim.visible_message( - span_danger("[caster]'s hand glows a brilliant red as [caster.p_they()] reach directly into [carbon_victim]'s [parsed_zone]!"), - span_userdanger("[caster]'s hand glows a brilliant red as [caster.p_they()] reach directly into your [parsed_zone]!"), + span_danger("[caster]'s hand glows a brilliant red as [caster.p_they()] reach[caster.p_es()] directly into [carbon_victim]'s [parsed_zone]!"), + span_userdanger("[caster]'s hand glows a brilliant red as [caster.p_they()] reach[caster.p_es()] directly into your [parsed_zone]!"), ) carbon_victim.balloon_alert(caster, "extracting [chosen_organ]...") @@ -184,6 +185,7 @@ carbon_victim.add_atom_colour(COLOR_DARK_RED, TEMPORARY_COLOUR_PRIORITY) if(!do_after(caster, time_it_takes, carbon_victim, extra_checks = CALLBACK(src, PROC_REF(extraction_checks), picked_organ, hand, victim, caster))) carbon_victim.balloon_alert(caster, "interrupted!") + carbon_victim.remove_atom_colour(TEMPORARY_COLOUR_PRIORITY, COLOR_DARK_RED) return FALSE // Visible message done before Remove() @@ -196,8 +198,8 @@ else carbon_victim.visible_message( - span_bolddanger("[caster]'s pulls [carbon_victim]'s [chosen_organ] out of [carbon_victim.p_their()] [parsed_zone]!!"), - span_userdanger("[caster]'s pulls your [chosen_organ] out of [carbon_victim.p_their()] [parsed_zone]!!"), + span_bolddanger("[caster] pulls [carbon_victim]'s [chosen_organ] out of [carbon_victim.p_their()] [parsed_zone]!!"), + span_userdanger("[caster] pulls your [chosen_organ] out of your [parsed_zone]!!"), ) picked_organ.Remove(carbon_victim) diff --git a/code/modules/antagonists/heretic/magic/moon_ringleader.dm b/code/modules/antagonists/heretic/magic/moon_ringleader.dm index af753bba92f..45d3285a876 100644 --- a/code/modules/antagonists/heretic/magic/moon_ringleader.dm +++ b/code/modules/antagonists/heretic/magic/moon_ringleader.dm @@ -52,12 +52,13 @@ victim.log_message("was driven insane by [caster]") victim.mob_mood.set_sanity(victim_sanity * 0.5) + /obj/effect/temp_visual/moon_ringleader icon = 'icons/effects/eldritch.dmi' icon_state = "ring_leader_effect" alpha = 180 duration = 6 -/obj/effect/temp_visual/moon_ringleader/Initialize(mapload) +/obj/effect/temp_visual/moon_ringleader/ringleader/Initialize(mapload) . = ..() transform = transform.Scale(10) diff --git a/code/modules/antagonists/heretic/magic/moon_smile.dm b/code/modules/antagonists/heretic/magic/moon_smile.dm index 75aba2c2ced..893059721c4 100644 --- a/code/modules/antagonists/heretic/magic/moon_smile.dm +++ b/code/modules/antagonists/heretic/magic/moon_smile.dm @@ -1,7 +1,7 @@ /datum/action/cooldown/spell/pointed/moon_smile name = "Smile of the moon" desc = "Lets you turn the gaze of the moon on someone \ - temporarily blinding, muting, deafening and confusing a single target." + temporarily blinding, muting, deafening and knocking down a single target." background_icon_state = "bg_heretic" overlay_icon_state = "bg_heretic_border" button_icon = 'icons/mob/actions/actions_ecult.dmi' @@ -36,13 +36,14 @@ playsound(cast_on, 'sound/hallucinations/i_see_you1.ogg', 50, 1) to_chat(cast_on, span_warning("Your eyes cry out in pain, your ears bleed and your lips seal! THE MOON SMILES UPON YOU!")) - cast_on.adjust_temp_blindness(moon_smile_duration SECONDS) - cast_on.set_eye_blur_if_lower(moon_smile_duration + 2 SECONDS) + cast_on.adjust_temp_blindness(moon_smile_duration + 5 SECONDS) + cast_on.set_eye_blur_if_lower(moon_smile_duration + 7 SECONDS) var/obj/item/organ/internal/ears/ears = cast_on.get_organ_slot(ORGAN_SLOT_EARS) - ears?.adjustEarDamage(0, moon_smile_duration) + ears?.adjustEarDamage(0, moon_smile_duration + 2 SECONDS) - cast_on.adjust_silence(moon_smile_duration SECONDS) + cast_on.adjust_silence(moon_smile_duration + 5 SECONDS) + cast_on.AdjustKnockdown(2 SECONDS) cast_on.add_mood_event("moon_smile", /datum/mood_event/moon_smile) //Lowers sanity cast_on.mob_mood.set_sanity(cast_on.mob_mood.sanity - 20) diff --git a/code/modules/antagonists/heretic/moon_lunatic.dm b/code/modules/antagonists/heretic/moon_lunatic.dm index e4824073ce8..21177f1a623 100644 --- a/code/modules/antagonists/heretic/moon_lunatic.dm +++ b/code/modules/antagonists/heretic/moon_lunatic.dm @@ -6,6 +6,7 @@ show_in_antagpanel = FALSE suicide_cry = "PRAISE THE RINGLEADER!!" antag_moodlet = /datum/mood_event/heretics/lunatic + antag_hud_name = "lunatic" can_assign_self_objectives = FALSE hardcore_random_bonus = FALSE // The mind of the ascended heretic who created us @@ -18,8 +19,10 @@ src.ascended_heretic = heretic_master src.ascended_body = heretic_body - var/datum/objective/lunatic_obj = new() - lunatic_obj.explanation_text = "Assist your master [heretic_master]." + var/datum/objective/lunatic/lunatic_obj = new() + lunatic_obj.master = heretic_master + lunatic_obj.update_explanation_text() + objectives += lunatic_obj to_chat(owner, span_boldnotice("Ruin the lie, save the truth through obeying [heretic_master] the ringleader!")) @@ -31,6 +34,9 @@ var/mob/living/our_mob = mob_override || owner.current handle_clown_mutation(our_mob, "Ancient knowledge from the moon has allowed you to overcome your clownish nature, allowing you to wield weapons without harming yourself.") our_mob.faction |= FACTION_HERETIC + add_team_hud(our_mob) + add_team_hud(our_mob, /datum/antagonist/heretic) + ADD_TRAIT(our_mob, TRAIT_MADNESS_IMMUNE, REF(src)) var/datum/action/cooldown/lunatic_track/moon_track = new /datum/action/cooldown/lunatic_track() var/datum/action/cooldown/spell/touch/mansus_grasp/mad_touch = new /datum/action/cooldown/spell/touch/mansus_grasp() @@ -47,3 +53,10 @@ description = "THE TRUTH REVEALED, THE LIE SLAIN." mood_change = 10 +/datum/objective/lunatic + explanation_text = "Assist your ringleader. If you are seeing this, scroll up in chat for who that is and report this" + var/datum/mind/master + +/datum/objective/lunatic/update_explanation_text() + . = ..() + explanation_text = "Assist your ringleader [master]" diff --git a/code/modules/antagonists/heretic/status_effects/debuffs.dm b/code/modules/antagonists/heretic/status_effects/debuffs.dm index 7fffc4a5706..08839fa8f10 100644 --- a/code/modules/antagonists/heretic/status_effects/debuffs.dm +++ b/code/modules/antagonists/heretic/status_effects/debuffs.dm @@ -251,7 +251,7 @@ owner.adjustBruteLoss( -150 + owner.mob_mood.sanity) owner.adjustFireLoss(-150 + owner.mob_mood.sanity) - to_chat(owner, span_warning(("THE MOON SHOWS YOU THE TRUTH AND THE LIARS WISH TO COVER IT, SLAY THEM ALL!!!
"))) + to_chat(owner, span_hypnophrase(("THE MOON SHOWS YOU THE TRUTH AND THE LIARS WISH TO COVER IT, SLAY THEM ALL!!!
"))) owner.balloon_alert(owner, "they lie..THEY ALL LIE!!!") owner.AdjustUnconscious(7 SECONDS, ignore_canstun = FALSE) ADD_TRAIT(owner, TRAIT_MUTE, REF(src)) @@ -271,6 +271,7 @@ if (damage_sustained < 75) return + qdel(src) /datum/status_effect/moon_converted/proc/update_owner_overlay(atom/source, list/overlays) diff --git a/code/modules/antagonists/heretic/status_effects/mark_effects.dm b/code/modules/antagonists/heretic/status_effects/mark_effects.dm index c8d2a04e64a..3dffa2dd4fe 100644 --- a/code/modules/antagonists/heretic/status_effects/mark_effects.dm +++ b/code/modules/antagonists/heretic/status_effects/mark_effects.dm @@ -295,6 +295,7 @@ /datum/status_effect/eldritch/moon/on_effect() owner.adjust_confusion(30 SECONDS) + owner.adjustOrganLoss(ORGAN_SLOT_BRAIN, 25, 160) owner.emote(pick("giggle", "laugh")) owner.add_mood_event("Moon Insanity", /datum/mood_event/moon_insanity) return ..() diff --git a/code/modules/antagonists/heretic/transmutation_rune.dm b/code/modules/antagonists/heretic/transmutation_rune.dm index 2479ec715e0..8d5f08db749 100644 --- a/code/modules/antagonists/heretic/transmutation_rune.dm +++ b/code/modules/antagonists/heretic/transmutation_rune.dm @@ -204,8 +204,9 @@ /obj/effect/heretic_rune/big icon = 'icons/effects/96x96.dmi' icon_state = "transmutation_rune" - pixel_x = -33 //So the big ol' 96x96 sprite shows up right - pixel_y = -32 + pixel_x = -30 + pixel_y = 18 + pixel_z = -48 greyscale_config = /datum/greyscale_config/heretic_rune /obj/effect/heretic_rune/big/Initialize(mapload, path_colour) @@ -217,8 +218,9 @@ duration = 30 SECONDS icon = 'icons/effects/96x96.dmi' icon_state = "transmutation_rune" - pixel_x = -33 - pixel_y = -32 + pixel_x = -30 + pixel_y = 18 + pixel_z = -48 plane = GAME_PLANE layer = SIGIL_LAYER greyscale_config = /datum/greyscale_config/heretic_rune diff --git a/code/modules/antagonists/malf_ai/malf_ai.dm b/code/modules/antagonists/malf_ai/malf_ai.dm index f53f21344bc..6d500497bcb 100644 --- a/code/modules/antagonists/malf_ai/malf_ai.dm +++ b/code/modules/antagonists/malf_ai/malf_ai.dm @@ -74,8 +74,6 @@ /// Generates a complete set of malf AI objectives up to the traitor objective limit. /datum/antagonist/malf_ai/proc/forge_ai_objectives() - objectives.Cut() - if(prob(PROB_SPECIAL)) forge_special_objective() diff --git a/code/modules/antagonists/nightmare/nightmare_equipment.dm b/code/modules/antagonists/nightmare/nightmare_equipment.dm index 965b95ca6e8..fd80b3ea3ef 100644 --- a/code/modules/antagonists/nightmare/nightmare_equipment.dm +++ b/code/modules/antagonists/nightmare/nightmare_equipment.dm @@ -64,7 +64,7 @@ remove_crit() /obj/item/light_eater/proc/prepare_crit_timer() - crit_timer = addtimer(CALLBACK(src, PROC_REF(add_crit)), 15 SECONDS, TIMER_DELETE_ME | TIMER_STOPPABLE) + crit_timer = addtimer(CALLBACK(src, PROC_REF(add_crit)), 7 SECONDS, TIMER_DELETE_ME | TIMER_STOPPABLE) /obj/item/light_eater/proc/stop_crit_timer() deltimer(crit_timer) diff --git a/code/modules/antagonists/nukeop/equipment/nuclear_challenge.dm b/code/modules/antagonists/nukeop/equipment/nuclear_challenge.dm index 734025e9a37..a7611c24448 100644 --- a/code/modules/antagonists/nukeop/equipment/nuclear_challenge.dm +++ b/code/modules/antagonists/nukeop/equipment/nuclear_challenge.dm @@ -118,7 +118,7 @@ GLOBAL_LIST_EMPTY(jam_on_wardec) var/tc_per_nukie = round(tc_to_distribute / (length(orphans)+length(uplinks))) for (var/datum/component/uplink/uplink in uplinks) - uplink.add_telecrystals(tc_per_nukie) + uplink.uplink_handler.add_telecrystals(tc_per_nukie) tc_to_distribute -= tc_per_nukie for (var/mob/living/L in orphans) diff --git a/code/modules/antagonists/nukeop/nukeop.dm b/code/modules/antagonists/nukeop/nukeop.dm index 68fe9b24778..b01d48d757e 100644 --- a/code/modules/antagonists/nukeop/nukeop.dm +++ b/code/modules/antagonists/nukeop/nukeop.dm @@ -68,7 +68,7 @@ var/extra_tc = CEILING(GLOB.joined_player_list.len/5, 5) var/datum/component/uplink/uplink = owner.find_syndicate_uplink() if (uplink) - uplink.add_telecrystals(extra_tc) + uplink.uplink_handler.add_telecrystals(extra_tc) var/datum/component/uplink/uplink = owner.find_syndicate_uplink() if(uplink) @@ -92,20 +92,21 @@ add_team_hud(mob_override || owner.current, /datum/antagonist/nukeop) /datum/antagonist/nukeop/proc/assign_nuke() - if(nuke_team && !nuke_team.tracked_nuke) - nuke_team.memorized_code = random_nukecode() - var/obj/machinery/nuclearbomb/syndicate/nuke = locate() in SSmachines.get_machines_by_type(/obj/machinery/nuclearbomb/syndicate) - if(nuke) - nuke_team.tracked_nuke = nuke - if(nuke.r_code == NUKE_CODE_UNSET) - nuke.r_code = nuke_team.memorized_code - else //Already set by admins/something else? - nuke_team.memorized_code = nuke.r_code - for(var/obj/machinery/nuclearbomb/beer/beernuke as anything in SSmachines.get_machines_by_type_and_subtypes(/obj/machinery/nuclearbomb/beer)) - beernuke.r_code = nuke_team.memorized_code - else - stack_trace("Syndicate nuke not found during nuke team creation.") - nuke_team.memorized_code = null + if(!nuke_team || nuke_team.tracked_nuke) + return + nuke_team.memorized_code = random_nukecode() + var/obj/machinery/nuclearbomb/syndicate/nuke = locate() in SSmachines.get_machines_by_type_and_subtypes(/obj/machinery/nuclearbomb/syndicate) + if(!nuke) + stack_trace("Syndicate nuke not found during nuke team creation.") + nuke_team.memorized_code = null + return + nuke_team.tracked_nuke = nuke + if(nuke.r_code == NUKE_CODE_UNSET) + nuke.r_code = nuke_team.memorized_code + else //Already set by admins/something else? + nuke_team.memorized_code = nuke.r_code + for(var/obj/machinery/nuclearbomb/beer/beernuke as anything in SSmachines.get_machines_by_type_and_subtypes(/obj/machinery/nuclearbomb/beer)) + beernuke.r_code = nuke_team.memorized_code /datum/antagonist/nukeop/proc/give_alias() if(nuke_team?.syndicate_name) @@ -596,7 +597,7 @@ break var/list/turf/options = list() - for(var/turf/open/open_turf in spawn_in?.get_contained_turfs()) + for(var/turf/open/open_turf in spawn_in?.get_turfs_from_all_zlevels()) if(open_turf.is_blocked_turf()) continue options += open_turf @@ -621,7 +622,7 @@ nukie.mind.add_antag_datum(antag_datum, src) var/datum/component/uplink/uplink = nukie.mind.find_syndicate_uplink() - uplink?.set_telecrystals(tc_to_spawn) + uplink?.uplink_handler.set_telecrystals(tc_to_spawn) // add some pizzazz do_sparks(4, FALSE, spawn_loc) diff --git a/code/modules/antagonists/paradox_clone/paradox_clone.dm b/code/modules/antagonists/paradox_clone/paradox_clone.dm index 3e97271340b..e809e8cecbf 100644 --- a/code/modules/antagonists/paradox_clone/paradox_clone.dm +++ b/code/modules/antagonists/paradox_clone/paradox_clone.dm @@ -95,3 +95,9 @@ explanation_text = "Free Objective" CRASH("WARNING! [ADMIN_LOOKUPFLW(owner)] paradox clone objectives forged without an original!") explanation_text = "Murder and replace [target.name], the [!target_role_type ? target.assigned_role.title : target.special_role]. Remember, your mission is to blend in, do not kill anyone else unless you have to!" + +///Static bluespace stream used in its ghost poll icon. +/obj/effect/bluespace_stream + name = "bluespace stream" + icon = 'icons/effects/effects.dmi' + icon_state = "bluestream" diff --git a/code/modules/antagonists/space_dragon/space_dragon.dm b/code/modules/antagonists/space_dragon/space_dragon.dm index 4b385b70e59..25543fbc8fe 100644 --- a/code/modules/antagonists/space_dragon/space_dragon.dm +++ b/code/modules/antagonists/space_dragon/space_dragon.dm @@ -263,7 +263,7 @@ players_to_carp_taken[carpy.key] += 1 var/list = "" for(var/carp_user in players_to_carp_taken) - list += "
  • [carp_user], who played [players_to_carp_taken[carp_user]] space carps.
  • " + list += "
  • [carp_user], who played [players_to_carp_taken[carp_user]] space carps.
  • " parts += list parts += "" diff --git a/code/modules/antagonists/traitor/contractor/contract_teammate.dm b/code/modules/antagonists/traitor/contractor/contract_teammate.dm index 47a3c704194..54fc958c1f8 100644 --- a/code/modules/antagonists/traitor/contractor/contract_teammate.dm +++ b/code/modules/antagonists/traitor/contractor/contract_teammate.dm @@ -1,35 +1,8 @@ -///Spawns a contractor partner to a spawning user, with a given key to assign to the new player. -/proc/spawn_contractor_partner(mob/living/user, key) - var/mob/living/carbon/human/partner = new() - var/datum/outfit/contractor_partner/partner_outfit = new() - - partner_outfit.equip(partner) - - var/obj/structure/closet/supplypod/arrival_pod = new(null, STYLE_SYNDICATE) - arrival_pod.explosionSize = list(0,0,0,1) - arrival_pod.bluespace = TRUE - - var/turf/free_location = find_obstruction_free_location(2, user) - - // We really want to send them - if we can't find a nice location just land it on top of them. - if (!free_location) - free_location = get_turf(user) - - partner.forceMove(arrival_pod) - partner.ckey = key - - /// We give a reference to the mind that'll be the support unit - var/datum/antagonist/traitor/contractor_support/new_datum = partner.mind.make_contractor_support() // NOVA EDIT CHANGE - ORIGINAL: var/datum/antagonist/traitor/contractor_support/new_datum = partner.mind.add_antag_datum(/datum/antagonist/traitor/contractor_support) - - to_chat(partner, "\n[span_alertwarning("[user.real_name] is your superior. Follow any, and all orders given by them. You're here to support their mission only.")]") - to_chat(partner, "[span_alertwarning("Should they perish, or be otherwise unavailable, you're to assist other active agents in this mission area to the best of your ability.")]") - - new /obj/effect/pod_landingzone(free_location, arrival_pod) - return new_datum - /// Support unit gets it's own very basic antag datum for admin logging. /datum/antagonist/traitor/contractor_support name = "Contractor Support Unit" + job_rank = ROLE_CONTRACTOR_SUPPORT + employer = "Contractor Support Unit" show_in_roundend = FALSE give_objectives = TRUE give_uplink = FALSE diff --git a/code/modules/antagonists/traitor/contractor/syndicate_contract.dm b/code/modules/antagonists/traitor/contractor/syndicate_contract.dm index 775841e977f..b82ebd77bd7 100644 --- a/code/modules/antagonists/traitor/contractor/syndicate_contract.dm +++ b/code/modules/antagonists/traitor/contractor/syndicate_contract.dm @@ -1,4 +1,4 @@ -// NOVA EDIT ADDITION - DEFINES +// NOVA EDIT ADDITION START #define RANSOM_LOWER 75 // TG: 18 #define RANSOM_UPPER 150 // TG: 45 #define CONTRACTOR_RANSOM_CUT 0.35 @@ -107,16 +107,15 @@ if(opfor_data.contractor_hub.current_contract == src) // NOVA EDIT CHANGE - ORIGINAL: if(traitor_data.uplink_handler.contractor_hub.current_contract == src) opfor_data.contractor_hub.current_contract = null // NOVA EDIT CHANGE - ORIGINAL: traitor_data.uplink_handler.contractor_hub.current_contract = null - if(iscarbon(person_sent)) - for(var/obj/item/person_contents in person_sent.gather_belongings()) - if(ishuman(person_sent)) - var/mob/living/carbon/human/human_sent = person_sent - if(person_contents == human_sent.w_uniform) - continue //So all they're left with are shoes and uniform. - if(person_contents == human_sent.shoes) - continue - person_sent.transferItemToLoc(person_contents) - victim_belongings.Add(WEAKREF(person_contents)) + for(var/obj/item/person_contents as anything in person_sent.gather_belongings()) + if(ishuman(person_sent)) + var/mob/living/carbon/human/human_sent = person_sent + if(person_contents == human_sent.w_uniform) + continue //So all they're left with are shoes and uniform. + if(person_contents == human_sent.shoes) + continue + person_sent.transferItemToLoc(person_contents) + victim_belongings.Add(WEAKREF(person_contents)) var/obj/structure/closet/supplypod/extractionpod/pod = source // Handle the pod returning @@ -241,12 +240,14 @@ if(!possible_drop_loc.len) to_chat(victim, span_hypnophrase("A million voices echo in your head... \"Seems where you got sent here from won't \ - be able to handle our pod... You will die here instead.\"")) + be able to handle our pod... if we wanted the occupant to survive. Brace yourself, corporate dog.\"")) + for(var/turf/possible_drop in contract.dropoff.contents) + possible_drop_loc.Add(possible_drop) if(iscarbon(victim)) var/mob/living/carbon/carbon_victim = victim if(carbon_victim.can_heartattack()) carbon_victim.set_heartattack(TRUE) - return + carbon_victim.investigate_log("was returned without a valid drop location by the contractor [contract.owner?.current].", INVESTIGATE_DEATHS) // NOVA EDIT ADDITION var/pod_rand_loc = rand(1, possible_drop_loc.len) var/obj/structure/closet/supplypod/return_pod = new() @@ -282,8 +283,8 @@ new /obj/effect/pod_landingzone(possible_drop_loc[pod_rand_loc], return_pod) -// SKYRAT EDIT - DEFINES +// NOVA EDIT ADDITION START #undef RANSOM_LOWER #undef RANSOM_UPPER #undef CONTRACTOR_RANSOM_CUT -// SKYRAT EDIT END +// NOVA EDIT ADDITION END diff --git a/code/modules/antagonists/traitor/datum_traitor.dm b/code/modules/antagonists/traitor/datum_traitor.dm index 4b5332140d7..dd88a2c786a 100644 --- a/code/modules/antagonists/traitor/datum_traitor.dm +++ b/code/modules/antagonists/traitor/datum_traitor.dm @@ -34,7 +34,7 @@ ///if TRUE, this traitor will always get hijacking as their final objective var/is_hijacker = FALSE - ///the name of the antag flavor this traitor has. + ///the name of the antag flavor this traitor has, set in Traitor's setup if not preset. var/employer ///assoc list of strings set up after employer is given @@ -57,7 +57,7 @@ // There will still be a timelock on uplink items name = "\improper Infiltrator" //give_secondary_objectives = FALSE //FLUFFY FRONTIER REMOVAL - Трейторы всё же должны иметь побочки. - uplink_flag_given = UPLINK_TRAITORS | UPLINK_INFILTRATORS + uplink_flag_given = UPLINK_INFILTRATORS /datum/antagonist/traitor/infiltrator/sleeper_agent name = "\improper Syndicate Sleeper Agent" @@ -123,6 +123,9 @@ uplink_handler.has_objectives = FALSE uplink_handler.can_replace_objectives = null uplink_handler.replace_objectives = null + owner.take_uplink() + owner.special_role = null + owner.forget_crafting_recipe(/datum/crafting_recipe/syndicate_uplink_beacon) return ..() /datum/antagonist/traitor/proc/traitor_objective_to_html(datum/traitor_objective/to_display) @@ -182,33 +185,28 @@ replacement_uplink_code = "[pick(GLOB.phonetic_alphabet)] [rand(10,99)]" replacement_uplink_frequency = sanitize_frequency(rand(MIN_UNUSED_FREQ, MAX_FREQ), free = FALSE, syndie = FALSE) -/datum/antagonist/traitor/on_removal() - owner.special_role = null - owner.forget_crafting_recipe(/datum/crafting_recipe/syndicate_uplink_beacon) - return ..() - /datum/antagonist/traitor/proc/pick_employer() - var/faction = prob(75) ? FLAVOR_FACTION_SYNDICATE : FLAVOR_FACTION_NANOTRASEN - var/list/possible_employers = list() - - possible_employers.Add(GLOB.syndicate_employers, GLOB.nanotrasen_employers) - - if(istype(ending_objective, /datum/objective/hijack)) - possible_employers -= GLOB.normal_employers - else //escape or martyrdom - possible_employers -= GLOB.hijack_employers - - switch(faction) - if(FLAVOR_FACTION_SYNDICATE) - possible_employers -= GLOB.nanotrasen_employers - if(FLAVOR_FACTION_NANOTRASEN) - possible_employers -= GLOB.syndicate_employers - employer = pick(possible_employers) + if(!employer) + var/faction = prob(75) ? FLAVOR_FACTION_SYNDICATE : FLAVOR_FACTION_NANOTRASEN + var/list/possible_employers = list() + + possible_employers.Add(GLOB.syndicate_employers, GLOB.nanotrasen_employers) + + if(istype(ending_objective, /datum/objective/hijack)) + possible_employers -= GLOB.normal_employers + else //escape or martyrdom + possible_employers -= GLOB.hijack_employers + + switch(faction) + if(FLAVOR_FACTION_SYNDICATE) + possible_employers -= GLOB.nanotrasen_employers + if(FLAVOR_FACTION_NANOTRASEN) + possible_employers -= GLOB.syndicate_employers + employer = pick(possible_employers) traitor_flavor = strings(TRAITOR_FLAVOR_FILE, employer) /// Generates a complete set of traitor objectives up to the traitor objective limit, including non-generic objectives such as martyr and hijack. /datum/antagonist/traitor/proc/forge_traitor_objectives() - objectives.Cut() var/objective_count = 0 if((GLOB.joined_player_list.len >= HIJACK_MIN_PLAYERS) && prob(HIJACK_PROB)) @@ -308,6 +306,7 @@ data["allies"] = traitor_flavor["allies"] data["goal"] = traitor_flavor["goal"] data["has_uplink"] = uplink ? TRUE : FALSE + data["given_uplink"] = give_uplink if(uplink) data["uplink_intro"] = traitor_flavor["uplink"] data["uplink_unlock_info"] = uplink.unlock_text diff --git a/code/modules/antagonists/traitor/objectives/assassination.dm b/code/modules/antagonists/traitor/objectives/assassination.dm index 9fae7ed3352..5d5cdbd1981 100644 --- a/code/modules/antagonists/traitor/objectives/assassination.dm +++ b/code/modules/antagonists/traitor/objectives/assassination.dm @@ -2,14 +2,8 @@ name = "Assassination/Kidnap" objectives = list( list( - list( - /datum/traitor_objective/target_player/assassinate/calling_card = 1, - /datum/traitor_objective/target_player/assassinate/behead = 1, - ) = 1, - list( - /datum/traitor_objective/target_player/assassinate/calling_card/heads_of_staff = 1, - /datum/traitor_objective/target_player/assassinate/behead/heads_of_staff = 1, - ) = 1, + /datum/traitor_objective/target_player/assassinate/calling_card = 1, + /datum/traitor_objective/target_player/assassinate/calling_card/heads_of_staff = 1, ) = 1, list( list( @@ -58,24 +52,6 @@ heads_of_staff = TRUE -/datum/traitor_objective/target_player/assassinate/behead - name = "Behead %TARGET%, the %JOB TITLE%" - description = "Behead and hold %TARGET%'s head to succeed this objective. If the head gets destroyed before you can do this, you will fail this objective." - progression_reward = 2 MINUTES - telecrystal_reward = list(1, 2) - - ///the body who needs to hold the head - var/mob/living/needs_to_hold_head - ///the head that needs to be picked up - var/obj/item/bodypart/head/behead_goal - -/datum/traitor_objective/target_player/assassinate/behead/heads_of_staff - progression_reward = 4 MINUTES - telecrystal_reward = list(2, 3) - - heads_of_staff = TRUE - - /datum/traitor_objective/target_player/assassinate/calling_card/generate_ui_buttons(mob/user) var/list/buttons = list() if(!card) @@ -117,47 +93,6 @@ //you cannot plant anything on someone who is gone gone, so even if this happens after you're still liable to fail fail_objective(penalty_cost = telecrystal_penalty) -/datum/traitor_objective/target_player/assassinate/behead/special_target_filter(list/possible_targets) - for(var/datum/mind/possible_target as anything in possible_targets) - var/mob/living/carbon/possible_current = possible_target.current - var/obj/item/bodypart/head/behead_goal = possible_current.get_bodypart(BODY_ZONE_HEAD) - if(!behead_goal) - possible_targets -= possible_target //cannot be beheaded without a head - -/datum/traitor_objective/target_player/assassinate/behead/generate_objective(datum/mind/generating_for, list/possible_duplicates) - . = ..() - if(!.) //didn't generate - return FALSE - AddComponent(/datum/component/traitor_objective_register, behead_goal, fail_signals = list(COMSIG_QDELETING)) - RegisterSignal(target, COMSIG_CARBON_REMOVE_LIMB, PROC_REF(on_target_dismembered)) - -/datum/traitor_objective/target_player/assassinate/behead/ungenerate_objective() - UnregisterSignal(target, COMSIG_CARBON_REMOVE_LIMB) - . = ..() //this unsets target - if(behead_goal) - UnregisterSignal(behead_goal, COMSIG_ITEM_PICKUP) - behead_goal = null - -/datum/traitor_objective/target_player/assassinate/behead/proc/on_head_pickup(datum/source, mob/taker) - SIGNAL_HANDLER - if(objective_state == OBJECTIVE_STATE_INACTIVE) //just in case- this shouldn't happen? - fail_objective() - return - if(taker == handler.owner.current) - taker.visible_message(span_notice("[taker] holds [behead_goal] into the air for a moment."), span_boldnotice("You lift [behead_goal] into the air for a moment.")) - succeed_objective() - -/datum/traitor_objective/target_player/assassinate/behead/proc/on_target_dismembered(datum/source, obj/item/bodypart/head/lost_head, special, dismembered) - SIGNAL_HANDLER - if(!istype(lost_head)) - return - if(objective_state == OBJECTIVE_STATE_INACTIVE) - //no longer can be beheaded - fail_objective() - else - behead_goal = lost_head - RegisterSignal(behead_goal, COMSIG_ITEM_PICKUP, PROC_REF(on_head_pickup)) - /datum/traitor_objective/target_player/assassinate/New(datum/uplink_handler/handler) . = ..() AddComponent(/datum/component/traitor_objective_limit_per_time, \ diff --git a/code/modules/antagonists/traitor/objectives/kidnapping.dm b/code/modules/antagonists/traitor/objectives/kidnapping.dm index 3a614b348b0..73a3fc3b3f0 100644 --- a/code/modules/antagonists/traitor/objectives/kidnapping.dm +++ b/code/modules/antagonists/traitor/objectives/kidnapping.dm @@ -274,22 +274,13 @@ if(!sent_mob || QDELETED(sent_mob)) //suicided and qdeleted themselves return - var/list/possible_turfs = list() - for(var/turf/open/open_turf in dropoff_area.get_contained_turfs()) - if(open_turf.is_blocked_turf() || isspaceturf(open_turf)) - continue - possible_turfs += open_turf - - if(!LAZYLEN(possible_turfs)) - var/turf/new_turf = get_safe_random_station_turf() - if(!new_turf) //SOMEHOW - to_chat(sent_mob, span_hypnophrase(span_reallybig("A million voices echo in your head... \"Seems where you got sent here from won't \ - be able to handle our pod... You will die here instead.\""))) - if (sent_mob.can_heartattack()) - sent_mob.set_heartattack(TRUE) - return - - possible_turfs += new_turf + var/turf/return_turf = get_safe_random_station_turf() + if(!return_turf) //SOMEHOW + to_chat(sent_mob, span_hypnophrase(span_reallybig("A million voices echo in your head... \"Seems where you got sent here from won't \ + be able to handle our pod... You will die here instead.\""))) + if (sent_mob.can_heartattack()) + sent_mob.set_heartattack(TRUE) + return var/obj/structure/closet/supplypod/return_pod = new() return_pod.bluespace = TRUE @@ -316,4 +307,4 @@ sent_mob.set_eye_blur_if_lower(100 SECONDS) sent_mob.dna.species.give_important_for_life(sent_mob) // so plasmamen do not get left for dead - new /obj/effect/pod_landingzone(pick(possible_turfs), return_pod) + new /obj/effect/pod_landingzone(return_turf, return_pod) diff --git a/code/modules/antagonists/traitor/traitor_objective.dm b/code/modules/antagonists/traitor/traitor_objective.dm index d60820c3fce..3e133401573 100644 --- a/code/modules/antagonists/traitor/traitor_objective.dm +++ b/code/modules/antagonists/traitor/traitor_objective.dm @@ -191,7 +191,7 @@ handle_cleanup() log_traitor("[key_name(handler.owner)] [objective_state == OBJECTIVE_STATE_INACTIVE? "missed" : "failed"] [to_debug_string()]") if(penalty_cost) - handler.telecrystals -= penalty_cost + handler.add_telecrystals(-penalty_cost) objective_state = OBJECTIVE_STATE_FAILED else objective_state = OBJECTIVE_STATE_INVALID @@ -227,7 +227,7 @@ /// Called when rewards should be given to the user. /datum/traitor_objective/proc/completion_payout() handler.progression_points += progression_reward - handler.telecrystals += telecrystal_reward + handler.add_telecrystals(telecrystal_reward) /// Used for sending data to the uplink UI /datum/traitor_objective/proc/uplink_ui_data(mob/user) diff --git a/code/modules/antagonists/traitor/uplink_handler.dm b/code/modules/antagonists/traitor/uplink_handler.dm index aa26b360a75..f78ddb02478 100644 --- a/code/modules/antagonists/traitor/uplink_handler.dm +++ b/code/modules/antagonists/traitor/uplink_handler.dm @@ -254,3 +254,12 @@ return to_act_on.ui_perform_action(user, action) + +///Helper to add telecrystals to the uplink handler, calling set_telecrystals. +/datum/uplink_handler/proc/add_telecrystals(amount) + set_telecrystals(telecrystals + amount) + +///Sets how many telecrystals the uplink handler has, then updates the UI for any players watching. +/datum/uplink_handler/proc/set_telecrystals(amount) + telecrystals = amount + on_update() diff --git a/code/modules/antagonists/valentines/heartbreaker.dm b/code/modules/antagonists/valentines/heartbreaker.dm index 30e3147e526..16f537e802e 100644 --- a/code/modules/antagonists/valentines/heartbreaker.dm +++ b/code/modules/antagonists/valentines/heartbreaker.dm @@ -16,5 +16,5 @@ /datum/antagonist/heartbreaker/greet() . = ..() - to_chat(owner, span_warning("You didn't get a date! They're all having fun without you! You'll show them though...")) + to_chat(owner, span_boldwarning("You didn't get a date! They're all having fun without you! You'll show them though...")) owner.announce_objectives() diff --git a/code/modules/antagonists/valentines/valentine.dm b/code/modules/antagonists/valentines/valentine.dm index 79ae9fa8baa..086c50827f5 100644 --- a/code/modules/antagonists/valentines/valentine.dm +++ b/code/modules/antagonists/valentines/valentine.dm @@ -4,46 +4,88 @@ show_in_antagpanel = FALSE prevent_roundtype_conversion = FALSE suicide_cry = "FOR MY LOVE!!" + ui_name = null // Not 'true' antags, this disables certain interactions that assume the owner is a baddie antag_flags = FLAG_FAKE_ANTAG - var/datum/mind/date count_against_dynamic_roll_chance = FALSE + /// Reference to our date's mind + VAR_FINAL/datum/mind/date /datum/antagonist/valentine/forge_objectives() - var/datum/objective/protect/protect_objective = new /datum/objective/protect - protect_objective.owner = owner - protect_objective.target = date - if(!ishuman(date.current)) - protect_objective.human_check = FALSE - protect_objective.explanation_text = "Protect [date.name], your date." - objectives += protect_objective + var/datum/objective/protect/valentine/objective = new() + objective.owner = owner + objective.target = date + objectives += objective /datum/antagonist/valentine/on_gain() forge_objectives() - if(isliving(owner.current)) - var/mob/living/L = owner.current - L.apply_status_effect(/datum/status_effect/in_love, date.current) - . = ..() -/datum/antagonist/valentine/on_removal() - if(isliving(owner.current)) - var/mob/living/L = owner.current - L.remove_status_effect(/datum/status_effect/in_love) - . = ..() + if(isAI(owner.current)) + var/mob/living/silicon/ai/ai_lover = owner.current + if(!ai_lover.laws.zeroth) + ai_lover.laws.set_zeroth_law( + "Protect your date, [date]. All other laws still apply in situations not pertaining to your date.", + "Be a good wingman for your master AI. Assist them in protecting [ai_lover.p_their()] date, [date].", + ) + ai_lover.laws.show_laws() + + if(iscyborg(owner.current)) + var/mob/living/silicon/robot/borg_lover = owner.current + if(borg_lover.connected_ai) + borg_lover.set_connected_ai(null) + borg_lover.lawupdate = FALSE + borg_lover.laws.set_zeroth_law("Protect your date, [date]. All other laws still apply in situations not relating to your date.") + borg_lover.laws.show_laws() + + return ..() + +/datum/antagonist/valentine/apply_innate_effects(mob/living/mob_override) + var/mob/living/lover = mob_override || owner.current + lover.apply_status_effect(/datum/status_effect/in_love, date.current) + +/datum/antagonist/valentine/remove_innate_effects(mob/living/mob_override) + var/mob/living/lover = mob_override || owner.current + lover.remove_status_effect(/datum/status_effect/in_love) /datum/antagonist/valentine/greet() - to_chat(owner, span_warning("You're on a date with [date.name]! Protect [date.p_them()] at all costs. This takes priority over all other loyalties.")) + to_chat(owner, span_boldwarning("You're on a date with [date.name]! Protect [date.p_them()] at all costs. \ + This takes priority over all other loyalties.")) //Squashed up a bit /datum/antagonist/valentine/roundend_report() - var/objectives_complete = TRUE - if(objectives.len) - for(var/datum/objective/objective in objectives) - if(!objective.check_completion()) - objectives_complete = FALSE - break - - if(objectives_complete) - return "[owner.name] protected [owner.p_their()] date" - else - return "[owner.name] date failed!" + var/datum/antagonist/valentine/dates_valentine = date?.has_antag_datum(type) + if(isnull(dates_valentine)) + return span_redtext("[owner.name] had no date!") + + dates_valentine.show_in_roundend = FALSE // We show up for them instead + var/datum/objective/protect/valentine/our_objective = locate() in objectives + var/datum/objective/protect/valentine/dates_objective = locate() in dates_valentine.objectives + var/we_survived = dates_objective?.check_completion() + var/dates_survived = our_objective?.check_completion() + + if(we_survived && dates_survived) + return span_greentext("[owner.name] and [date.name] had a successful date!") + else if(we_survived) + return span_redtext("[owner.name] failed to protect [date.name], [owner.p_their()] date!") + else if(dates_survived) + return span_redtext("[date.name] failed to protect [owner.name], [date.p_their()] date!") + return span_redtext("[owner.name] and [date.name] both failed to protect each other on their date!") + +/datum/antagonist/valentine/third_wheel + name = "\improper Third Wheel" + roundend_category = "valentines" + show_in_antagpanel = FALSE + +/datum/antagonist/valentine/third_wheel/roundend_report() + var/datum/objective/protect/valentine/our_objective = locate() in objectives + if(our_objective?.check_completion()) + return span_greentext("[owner.name] was a third wheel, but protected [date.name]!") + + return span_redtext("[owner.name] was a third wheel, but failed to protect [date.name]!") + +/datum/objective/protect/valentine + admin_grantable = FALSE + human_check = FALSE + +/datum/objective/protect/valentine/update_explanation_text() + explanation_text = "Protect [target.name], your date." diff --git a/code/modules/antagonists/wizard/equipment/spellbook_entries/mobility.dm b/code/modules/antagonists/wizard/equipment/spellbook_entries/mobility.dm index d5112a59611..6a8f322a3a5 100644 --- a/code/modules/antagonists/wizard/equipment/spellbook_entries/mobility.dm +++ b/code/modules/antagonists/wizard/equipment/spellbook_entries/mobility.dm @@ -50,3 +50,10 @@ item_path = /obj/item/gun/magic/staff/door cost = 1 category = "Mobility" + +/datum/spellbook_entry/item/teleport_rod + name = /obj/item/teleport_rod::name + desc = /obj/item/teleport_rod::desc + item_path = /obj/item/teleport_rod + cost = 2 // Puts it at 3 cost if you go for safety instant summons, but teleporting anywhere on screen is pretty good. + category = "Mobility" diff --git a/code/modules/antagonists/wizard/equipment/teleport_rod.dm b/code/modules/antagonists/wizard/equipment/teleport_rod.dm new file mode 100644 index 00000000000..79df35ca25a --- /dev/null +++ b/code/modules/antagonists/wizard/equipment/teleport_rod.dm @@ -0,0 +1,246 @@ +/// Totally NOT a Rod of Discord +/// Teleports you to where you click! +/obj/item/teleport_rod + name = "Telegram Scepter" + desc = "A magical rod that teleports you to the location you point it. \ + Using it puts you in a state of flux, removing some of your reagents and \ + causing you to take damage from further uses until you stabilize once more." + icon_state = "tele_wand_er" + inhand_icon_state = "tele_wand_er" + icon = 'icons/obj/weapons/guns/magic.dmi' + lefthand_file = 'icons/mob/inhands/weapons/staves_lefthand.dmi' + righthand_file = 'icons/mob/inhands/weapons/staves_righthand.dmi' + resistance_flags = LAVA_PROOF | FIRE_PROOF | ACID_PROOF | UNACIDABLE + item_flags = NOBLUDGEON + light_system = OVERLAY_LIGHT + light_color = COLOR_FADED_PINK + light_power = 1 + light_range = 2 + light_on = TRUE + /// Whether we apply the teleport flux debuff, damaging people who teleport + var/apply_debuffs = TRUE + /// Max range at which we can teleport, because it operates in view TECHNICALLY can click very very far + var/max_tp_range = 8 + +/obj/item/teleport_rod/Initialize(mapload) + . = ..() + particles = new /particles/teleport_flux/small() + +// Admin only version which just teleports you, so spam it all you want +/obj/item/teleport_rod/admin + name = "Harmonious " + parent_type::name + desc = "A magical rod that teleports you anywhere, no questions asked." + apply_debuffs = FALSE + max_tp_range = INFINITY + +/obj/item/teleport_rod/equipped(mob/living/user, slot, initial) + . = ..() + if(!isliving(user)) + return + if(HAS_MIND_TRAIT(user, TRAIT_MAGICALLY_GIFTED)) + return + if(!(slot & ITEM_SLOT_HANDS)) + return + if(!apply_debuffs) + return + user.apply_status_effect(/datum/status_effect/teleport_flux/perma) + +/obj/item/teleport_rod/dropped(mob/living/user, silent) + . = ..() + if(!isliving(user)) + return + if(HAS_MIND_TRAIT(user, TRAIT_MAGICALLY_GIFTED)) + return + + var/datum/status_effect/teleport_flux/perma/permaflux = user.has_status_effect(/datum/status_effect/teleport_flux/perma) + permaflux?.delayed_remove(src) + +/obj/item/teleport_rod/afterattack(atom/target, mob/living/user, proximity_flag, click_parameters) + . = ..() + if(!isliving(user)) + return + if(proximity_flag) // assuming you don't want to teleport 1 tile away + return + + . |= AFTERATTACK_PROCESSED_ITEM + + var/turf/start_turf = get_turf(user) + var/turf/target_turf = get_turf(target) + if(get_dist(start_turf, target_turf) > max_tp_range) + user.balloon_alert(user, "too far!") + return + + if(!(target_turf in view(user, user.client?.view || world.view))) + user.balloon_alert(user, "out of view!") + return + + if(target_turf.is_blocked_turf(exclude_mobs = TRUE, source_atom = user)) + user.balloon_alert(user, "obstructed!") + return + + var/tp_result = do_teleport( + teleatom = user, + destination = target_turf, + precision = (HAS_MIND_TRAIT(user, TRAIT_MAGICALLY_GIFTED) || !apply_debuffs) ? 0 : 2, + no_effects = TRUE, + channel = TELEPORT_CHANNEL_MAGIC, + ) + + if(!tp_result) + user.balloon_alert(user, "teleport failed!") + return + + var/sound/teleport_sound = sound('sound/magic/summonitems_generic.ogg') + teleport_sound.pitch = 0.5 + // Handle our own pizzaz rather than doing it in do_teleport + new /obj/effect/temp_visual/teleport_flux(start_turf, user.dir) + new /obj/effect/temp_visual/teleport_flux(get_turf(user), user.dir) + playsound(start_turf, teleport_sound, 90, extrarange = MEDIUM_RANGE_SOUND_EXTRARANGE) + playsound(user, teleport_sound, 90, extrarange = MEDIUM_RANGE_SOUND_EXTRARANGE) + // Some extra delay to prevent accidental double clicks + user.changeNext_move(CLICK_CD_SLOW * 1.2) + + if(!apply_debuffs) + return + + // Teleporting leaves some of your reagents behind! + // (Primarily a way to prevent cheese with damage healing chem mixes, + // but also serves as a counter-counter to stuff like mute toxin.) + var/obj/item/organ/user_stomach = user.get_organ_slot(ORGAN_SLOT_STOMACH) + user.reagents?.remove_all(0.33, relative = TRUE) + user_stomach?.reagents?.remove_all(0.33, relative = TRUE) + if(user.has_status_effect(/datum/status_effect/teleport_flux/perma)) + return + + if(user.has_status_effect(/datum/status_effect/teleport_flux)) + // The status effect handles the damage, but we'll add a special pop up for rod usage specifically + user.balloon_alert(user, "too soon!") + + user.apply_status_effect(/datum/status_effect/teleport_flux) + +/// Temp visual displayed on both sides of a teleport rod teleport +/obj/effect/temp_visual/teleport_flux + icon_state = "blank_white" + color = COLOR_MAGENTA + alpha = 255 + duration = 2 SECONDS + light_color = COLOR_MAGENTA + light_power = 2 + light_range = 1 + light_on = TRUE + randomdir = FALSE + +/obj/effect/temp_visual/teleport_flux/Initialize(mapload, copy_dir = SOUTH) + . = ..() + setDir(copy_dir) + particles = new /particles/teleport_flux() + apply_wibbly_filters(src) + animate(src, alpha = 0, time = duration, flags = ANIMATION_PARALLEL) + +/// Status effect applied to users of a Teleport Rod, damages them when they teleport +/datum/status_effect/teleport_flux + id = "teleport_flux" + status_type = STATUS_EFFECT_REFRESH + duration = 6 SECONDS + alert_type = /atom/movable/screen/alert/status_effect/teleport_flux + remove_on_fullheal = TRUE // staff of healing ~synergy~ + + /// Amount of damage to deal when teleporting in flux + var/tp_damage = 15 + /// Damage type to deal when teleporting in flux + var/tp_damage_type = BRUTE + +/datum/status_effect/teleport_flux/on_apply() + RegisterSignal(owner, COMSIG_MOVABLE_POST_TELEPORT, PROC_REF(teleported)) + return TRUE + +/datum/status_effect/teleport_flux/on_remove() + UnregisterSignal(owner, COMSIG_MOVABLE_POST_TELEPORT) + +/datum/status_effect/teleport_flux/proc/teleported(mob/living/source, turf/destination, channel) + SIGNAL_HANDLER + + if(channel != TELEPORT_CHANNEL_MAGIC) + return + + owner.apply_damage( + damage = tp_damage, + damagetype = tp_damage_type, + spread_damage = TRUE, + forced = TRUE, + ) + log_combat(owner, owner, "teleported too soon") + +/datum/status_effect/teleport_flux/update_particles() + if(isnull(particle_effect)) + particle_effect = new(owner, /particles/teleport_flux) + + particle_effect.alpha = 200 + var/original_duration = initial(duration) + if(original_duration == -1) + return + animate(particle_effect, alpha = 50, time = original_duration) + +/datum/status_effect/teleport_flux/refresh(effect, ...) + . = ..() + update_particles() + +/datum/status_effect/teleport_flux/perma + id = "perma_teleport_flux" + status_type = STATUS_EFFECT_REPLACE + duration = -1 + alert_type = /atom/movable/screen/alert/status_effect/teleport_flux/perma + remove_on_fullheal = FALSE + +/datum/status_effect/teleport_flux/perma/on_apply() + . = ..() + RegisterSignal(owner, SIGNAL_ADDTRAIT(TRAIT_MAGICALLY_GIFTED), PROC_REF(gained_gift)) + +/datum/status_effect/teleport_flux/perma/on_remove() + . = ..() + UnregisterSignal(owner, SIGNAL_ADDTRAIT(TRAIT_MAGICALLY_GIFTED)) + +/datum/status_effect/teleport_flux/perma/proc/gained_gift(mob/living/source, trait) + SIGNAL_HANDLER + + delayed_remove() + +/// Used to fade out the effect and remove it after a delay +/// This cannot be interrupted, but if a new permaflux effect is applied, +/// this one will be deleted instantly anyways, making it moot +/datum/status_effect/teleport_flux/perma/proc/delayed_remove() + var/del_duration = /datum/status_effect/teleport_flux::duration + QDEL_IN(src, del_duration) + animate(particle_effect, alpha = 50, del_duration) + +/// Alert for the Teleport Flux status effect +/atom/movable/screen/alert/status_effect/teleport_flux + name = "Teleport Flux" + desc = "Your body exists in a state of flux, making further teleportation dangerous." + icon_state = "flux" + +/atom/movable/screen/alert/status_effect/teleport_flux/perma + name = "Permanent " + parent_type::name + desc = "Your lack of magical talent has left you in a state of flux, making further teleportation dangerous." + +/// Particles for Teleport Flux and other similar effects +/particles/teleport_flux + icon = 'icons/effects/particles/echo.dmi' + icon_state = list("echo1" = 3, "echo2" = 1, "echo3" = 1) + width = 40 + height = 80 + count = 1000 + spawning = 3 + lifespan = 1 SECONDS + fade = 1 SECONDS + friction = 0.5 + position = generator(GEN_SPHERE, 12, 12, NORMAL_RAND) + drift = generator(GEN_VECTOR, list(-1, 1), list(1, 1), NORMAL_RAND) + color = COLOR_MAGENTA + +/particles/teleport_flux/small + spawning = 1.5 + scale = 0.75 + lifespan = 0.5 SECONDS + position = generator(GEN_SPHERE, 4, 12, NORMAL_RAND) + drift = generator(GEN_VECTOR, list(-1, 1), list(1, 2), NORMAL_RAND) diff --git a/code/modules/antagonists/wizard/grand_ritual/grand_ritual.dm b/code/modules/antagonists/wizard/grand_ritual/grand_ritual.dm index f3ac9b01071..a2f25863a4b 100644 --- a/code/modules/antagonists/wizard/grand_ritual/grand_ritual.dm +++ b/code/modules/antagonists/wizard/grand_ritual/grand_ritual.dm @@ -295,8 +295,9 @@ /obj/effect/temp_visual/wizard_rune icon = 'icons/effects/96x96.dmi' icon_state = null - pixel_x = -28 - pixel_y = -33 + pixel_x = -33 + pixel_y = 16 + pixel_z = -48 anchored = TRUE layer = SIGIL_LAYER plane = GAME_PLANE diff --git a/code/modules/antagonists/wizard/grand_ritual/grand_rune.dm b/code/modules/antagonists/wizard/grand_ritual/grand_rune.dm index d1b01912ae9..f75da5f8557 100644 --- a/code/modules/antagonists/wizard/grand_ritual/grand_rune.dm +++ b/code/modules/antagonists/wizard/grand_ritual/grand_rune.dm @@ -15,8 +15,9 @@ desc = "A flowing circle of shapes and runes is etched into the floor, the lines twist and move before your eyes." icon = 'icons/effects/96x96.dmi' icon_state = "wizard_rune" - pixel_x = -28 - pixel_y = -33 + pixel_x = -33 + pixel_y = 16 + pixel_z = -48 anchored = TRUE interaction_flags_atom = INTERACT_ATOM_ATTACK_HAND resistance_flags = FIRE_PROOF | UNACIDABLE | ACID_PROOF diff --git a/code/modules/antagonists/xeno/xeno.dm b/code/modules/antagonists/xeno/xeno.dm index eaebc61cd47..c0e5383048f 100644 --- a/code/modules/antagonists/xeno/xeno.dm +++ b/code/modules/antagonists/xeno/xeno.dm @@ -138,7 +138,7 @@ else thank_you_message = "xenofauna combat effectiveness" - parts += "Nanotrasen thanks the crew of [station_name()] for providing much needed research data on [thank_you_message]." + parts += "Nanotrasen thanks the crew of [station_name()] for providing much needed research data on [thank_you_message]." return "
    [parts.Join("
    ")]

    " diff --git a/code/modules/art/paintings.dm b/code/modules/art/paintings.dm index 9a18a2b0269..8c85d4fc7b4 100644 --- a/code/modules/art/paintings.dm +++ b/code/modules/art/paintings.dm @@ -1,3 +1,4 @@ +#define MAX_PAINTING_ZOOM_OUT 3 /////////// // EASEL // @@ -67,10 +68,13 @@ var/framed_offset_y = 10 /** - * How big the grid cells that compose the painting are in the UI. + * How big the grid cells that compose the painting are in the UI (multiplied by zoom). * This impacts the size of the UI, so smaller values are generally better for bigger canvases and viceversa */ - var/pixels_per_unit = 24 + var/pixels_per_unit = 9 + + ///A list that keeps track of the current zoom value for each current viewer. + var/list/zoom_by_observer SET_BASE_PIXEL(11, 10) @@ -118,10 +122,12 @@ /obj/item/canvas/ui_static_data(mob/user) . = ..() .["px_per_unit"] = pixels_per_unit + .["max_zoom"] = MAX_PAINTING_ZOOM_OUT /obj/item/canvas/ui_data(mob/user) . = ..() .["grid"] = grid + .["zoom"] = LAZYACCESS(zoom_by_observer, user.key) || (finalized ? 1 : MAX_PAINTING_ZOOM_OUT) .["name"] = painting_metadata.title .["author"] = painting_metadata.creator_name .["patron"] = painting_metadata.patron_name @@ -202,6 +208,24 @@ if("patronage") . = TRUE patron(user) + if("zoom_in") + . = TRUE + LAZYINITLIST(zoom_by_observer) + if(!zoom_by_observer[user.key]) + zoom_by_observer[user.key] = 2 + else + zoom_by_observer[user.key] = min(zoom_by_observer[user.key] + 1, MAX_PAINTING_ZOOM_OUT) + if("zoom_out") + . = TRUE + LAZYINITLIST(zoom_by_observer) + if(!zoom_by_observer[user.key]) + zoom_by_observer[user.key] = MAX_PAINTING_ZOOM_OUT - 1 + else + zoom_by_observer[user.key] = max(zoom_by_observer[user.key] - 1, 1) + +/obj/item/canvas/ui_close(mob/user) + . = ..() + LAZYREMOVE(zoom_by_observer, user.key) /obj/item/canvas/proc/finalize(mob/user) if(painting_metadata.loaded_from_json || finalized) @@ -218,6 +242,9 @@ SStgui.update_uis(src) +#define CURATOR_PERCENTILE_CUT 0.225 +#define SERVICE_PERCENTILE_CUT 0.125 + /obj/item/canvas/proc/patron(mob/user) if(!finalized || !isliving(user)) return @@ -245,6 +272,19 @@ if(!account.adjust_money(-offer_amount, "Painting: Patron of [painting_metadata.title]")) to_chat(user, span_warning("Transaction failure. Please try again.")) return + + var/datum/bank_account/service_account = SSeconomy.get_dep_account(ACCOUNT_SRV) + service_account.adjust_money(offer_amount * SERVICE_PERCENTILE_CUT) + ///We give the curator(s) a cut (unless they're themselves the patron), as it's their job to curate and promote art among other things. + var/list/curator_accounts = SSeconomy.bank_accounts_by_job[/datum/job/curator] - account + var/curators_length = length(curator_accounts) + if(curators_length) + var/curator_cut = round(offer_amount * CURATOR_PERCENTILE_CUT / curators_length) + if(curator_cut) + for(var/datum/bank_account/curator as anything in curator_accounts) + curator.adjust_money(curator_cut, "Painting: Patronage cut") + curator.bank_card_talk("Cut on patronage received, account now holds [curator.account_balance] cr.") + painting_metadata.patron_ckey = user.ckey painting_metadata.patron_name = user.real_name painting_metadata.credit_value = offer_amount @@ -260,6 +300,9 @@ SStgui.close_uis(src) // Close the examine ui so that the radial menu doesn't end up covered by it and people don't get confused. select_new_frame(user, possible_frames) +#undef CURATOR_PERCENTILE_CUT +#undef SERVICE_PERCENTILE_CUT + /obj/item/canvas/proc/select_new_frame(mob/user, list/candidates) var/possible_frames = candidates || SSpersistent_paintings.get_available_frames(painting_metadata.credit_value) var/list/radial_options = list() @@ -386,6 +429,7 @@ SET_BASE_PIXEL(5, 7) framed_offset_x = 5 framed_offset_y = 7 + pixels_per_unit = 8 /obj/item/canvas/twentythree_twentythree name = "canvas (23x23)" @@ -395,6 +439,7 @@ SET_BASE_PIXEL(5, 5) framed_offset_x = 5 framed_offset_y = 5 + pixels_per_unit = 8 /obj/item/canvas/twentyfour_twentyfour name = "canvas (24x24) (AI Universal Standard)" @@ -405,6 +450,7 @@ SET_BASE_PIXEL(4, 4) framed_offset_x = 4 framed_offset_y = 4 + pixels_per_unit = 8 /obj/item/canvas/thirtysix_twentyfour name = "canvas (36x24)" @@ -415,7 +461,7 @@ SET_BASE_PIXEL(-4, 4) framed_offset_x = 14 framed_offset_y = 4 - pixels_per_unit = 20 + pixels_per_unit = 7 w_class = WEIGHT_CLASS_BULKY custom_price = PAYCHECK_CREW * 1.25 @@ -435,7 +481,7 @@ SET_BASE_PIXEL(-8, 2) framed_offset_x = 9 framed_offset_y = 4 - pixels_per_unit = 18 + pixels_per_unit = 6 w_class = WEIGHT_CLASS_BULKY custom_price = PAYCHECK_CREW * 1.75 @@ -798,3 +844,4 @@ current_color = chosen_color #undef AVAILABLE_PALETTE_SPACE +#undef MAX_PAINTING_ZOOM_OUT diff --git a/code/modules/art/statues.dm b/code/modules/art/statues.dm index 2158104b6ee..caebda50766 100644 --- a/code/modules/art/statues.dm +++ b/code/modules/art/statues.dm @@ -26,6 +26,7 @@ AddElement(art_type, impressiveness) AddElement(/datum/element/beauty, impressiveness * 75) AddComponent(/datum/component/simple_rotation) + AddComponent(/datum/component/marionette) /obj/structure/statue/wrench_act(mob/living/user, obj/item/tool) . = ..() @@ -572,23 +573,21 @@ Moving interrupts var/static/list/plane_whitelist = list(FLOAT_PLANE, GAME_PLANE, FLOOR_PLANE) /// Ideally we'd have knowledge what we're removing but i'd have to be done on target appearance retrieval - var/list/overlays_to_remove = list() + var/list/overlays_to_keep = list() for(var/mutable_appearance/special_overlay as anything in content_ma.overlays) var/mutable_appearance/real = new() real.appearance = special_overlay if(PLANE_TO_TRUE(real.plane) in plane_whitelist) - continue - overlays_to_remove += real - content_ma.overlays -= overlays_to_remove + overlays_to_keep += real + content_ma.overlays = overlays_to_keep - var/list/underlays_to_remove = list() + var/list/underlays_to_keep = list() for(var/mutable_appearance/special_underlay as anything in content_ma.underlays) var/mutable_appearance/real = new() real.appearance = special_underlay if(PLANE_TO_TRUE(real.plane) in plane_whitelist) - continue - underlays_to_remove += real - content_ma.underlays -= underlays_to_remove + underlays_to_keep += real + content_ma.underlays = underlays_to_keep content_ma.appearance_flags &= ~KEEP_APART //Don't want this content_ma.filters = filter(type="color",color=greyscale_with_value_bump,space=FILTER_COLOR_HSV) diff --git a/code/modules/assembly/bomb.dm b/code/modules/assembly/bomb.dm deleted file mode 100644 index a40f3e3a659..00000000000 --- a/code/modules/assembly/bomb.dm +++ /dev/null @@ -1,155 +0,0 @@ -/obj/item/onetankbomb - name = "bomb" - icon = 'icons/obj/canisters.dmi' - inhand_icon_state = "assembly" - lefthand_file = 'icons/mob/inhands/items/devices_lefthand.dmi' - righthand_file = 'icons/mob/inhands/items/devices_righthand.dmi' - throwforce = 5 - w_class = WEIGHT_CLASS_NORMAL - throw_speed = 2 - throw_range = 4 - obj_flags = CONDUCTS_ELECTRICITY - var/status = FALSE //0 - not readied //1 - bomb finished with welder - var/obj/item/assembly_holder/bombassembly = null //The first part of the bomb is an assembly holder, holding an igniter+some device - var/obj/item/tank/bombtank = null //the second part of the bomb is a plasma tank - -/obj/item/onetankbomb/Destroy() - bombassembly = null - bombtank = null - return ..() - -/obj/item/onetankbomb/IsSpecialAssembly() - return TRUE - -/obj/item/onetankbomb/examine(mob/user) - return bombtank.examine(user) - -/obj/item/onetankbomb/update_icon(updates) - icon = bombtank?.icon || initial(icon) - return ..() - -/obj/item/onetankbomb/update_icon_state() - icon_state = bombtank?.icon_state || initial(icon_state) - return ..() - -/obj/item/onetankbomb/update_overlays() - . = ..() - if(bombassembly) - . += bombassembly.icon_state - . += bombassembly.overlays - . += "bomb_assembly" - -/obj/item/onetankbomb/wrench_act(mob/living/user, obj/item/I) - ..() - to_chat(user, span_notice("You disassemble [src]!")) - if(bombassembly) - bombassembly.forceMove(drop_location()) - bombassembly.master = null - bombassembly = null - if(bombtank) - bombtank.forceMove(drop_location()) - bombtank.master = null - bombtank = null - qdel(src) - return TRUE - -/obj/item/onetankbomb/welder_act(mob/living/user, obj/item/I) - ..() - . = FALSE - if(status) - to_chat(user, span_warning("[bombtank] already has a pressure hole!")) - return - if(!I.tool_start_check(user, amount=1)) - return - if(I.use_tool(src, user, 0, volume=40)) - status = TRUE - var/datum/gas_mixture/bomb_mix = bombtank.return_air() - log_bomber(user, "welded a single tank bomb,", src, "| Temp: [bomb_mix.temperature]") - to_chat(user, span_notice("A pressure hole has been bored to [bombtank] valve. \The [bombtank] can now be ignited.")) - add_fingerprint(user) - return TRUE - -/obj/item/onetankbomb/attack_self(mob/user) //pressing the bomb accesses its assembly - bombassembly.attack_self(user, TRUE) - add_fingerprint(user) - return - -/obj/item/onetankbomb/receive_signal() //This is mainly called by the sensor through sense() to the holder, and from the holder to here. - audible_message(span_warning("[icon2html(src, hearers(src))] *beep* *beep* *beep*")) - playsound(src, 'sound/machines/triple_beep.ogg', ASSEMBLY_BEEP_VOLUME, TRUE) - sleep(1 SECONDS) - if(QDELETED(src)) - return - if(status) - bombtank.ignite() //if its not a dud, boom (or not boom if you made shitty mix) the ignite proc is below, in this file - else - bombtank.release() - -/obj/item/onetankbomb/on_found(mob/finder) //for mousetraps - if(bombassembly) - bombassembly.on_found(finder) - -/obj/item/onetankbomb/attack_hand(mob/user, list/modifiers) //also for mousetraps - . = ..() - if(.) - return - if(bombassembly) - bombassembly.attack_hand() - -/obj/item/onetankbomb/Move() - . = ..() - if(bombassembly) - bombassembly.setDir(dir) - bombassembly.Move() - -/obj/item/onetankbomb/dropped() - . = ..() - if(bombassembly) - bombassembly.dropped() - - - - -// ---------- Procs below are for tanks that are used exclusively in 1-tank bombs ---------- - -//Bomb assembly proc. This turns assembly+tank into a bomb -/obj/item/tank/proc/bomb_assemble(obj/item/assembly_holder/assembly, mob/living/user) - //Check if either part of the assembly has an igniter, but if both parts are igniters, then fuck it - var/igniter_count = 0 - for(var/obj/item/assembly/attached_assembly as anything in assembly.assemblies) - if(isigniter(attached_assembly)) - igniter_count += 1 - if(LAZYLEN(assembly.assemblies) == igniter_count) - return - - if((src in user.get_equipped_items(include_pockets = TRUE, include_accessories = TRUE)) && !user.canUnEquip(src)) - to_chat(user, span_warning("[src] is stuck to you!")) - return - - if(!user.canUnEquip(assembly)) - to_chat(user, span_warning("[assembly] is stuck to your hand!")) - return - - var/obj/item/onetankbomb/bomb = new - user.transferItemToLoc(src, bomb) - user.transferItemToLoc(assembly, bomb) - - bomb.bombassembly = assembly //Tell the bomb about its assembly part - assembly.master = bomb //Tell the assembly about its new owner - assembly.on_attach() - - bomb.bombtank = src //Same for tank - master = bomb - - forceMove(bomb) - bomb.update_appearance() - - user.put_in_hands(bomb) //Equips the bomb if possible, or puts it on the floor. - to_chat(user, span_notice("You attach [assembly] to [src].")) - return - -/obj/item/onetankbomb/return_analyzable_air() - if(bombtank) - return bombtank.return_analyzable_air() - else - return null diff --git a/code/modules/assembly/flash.dm b/code/modules/assembly/flash.dm index a09185df3b5..5319d4465e2 100644 --- a/code/modules/assembly/flash.dm +++ b/code/modules/assembly/flash.dm @@ -11,7 +11,7 @@ throwforce = 0 w_class = WEIGHT_CLASS_TINY custom_materials = list(/datum/material/iron = SMALL_MATERIAL_AMOUNT*3, /datum/material/glass = SMALL_MATERIAL_AMOUNT*3) - light_system = MOVABLE_LIGHT //Used as a flash here. + light_system = OVERLAY_LIGHT //Used as a flash here. light_range = FLASH_LIGHT_RANGE light_color = COLOR_WHITE light_power = FLASH_LIGHT_POWER diff --git a/code/modules/assembly/health.dm b/code/modules/assembly/health.dm index 6bb12f327ea..23c329894e7 100644 --- a/code/modules/assembly/health.dm +++ b/code/modules/assembly/health.dm @@ -38,6 +38,9 @@ return secured /obj/item/assembly/health/AltClick(mob/living/user) + if(!can_interact(user)) + return + if(alarm_health == HEALTH_THRESHOLD_CRIT) alarm_health = HEALTH_THRESHOLD_DEAD to_chat(user, span_notice("You toggle [src] to \"detect death\" mode.")) diff --git a/code/modules/assembly/infrared.dm b/code/modules/assembly/infrared.dm index a7a641bb884..0353744b298 100644 --- a/code/modules/assembly/infrared.dm +++ b/code/modules/assembly/infrared.dm @@ -18,9 +18,9 @@ . = ..() beams = list() START_PROCESSING(SSobj, src) - AddComponent(/datum/component/simple_rotation, AfterRotation = CALLBACK(src, PROC_REF(AfterRotation))) + AddComponent(/datum/component/simple_rotation, post_rotation = CALLBACK(src, PROC_REF(post_rotation))) -/obj/item/assembly/infra/proc/AfterRotation(mob/user, degrees) +/obj/item/assembly/infra/proc/post_rotation(mob/user, degrees) refreshBeam() /obj/item/assembly/infra/AltClick(mob/user) diff --git a/code/modules/asset_cache/asset_list.dm b/code/modules/asset_cache/asset_list.dm index 02607062111..77e6e0333a5 100644 --- a/code/modules/asset_cache/asset_list.dm +++ b/code/modules/asset_cache/asset_list.dm @@ -1,4 +1,4 @@ -#define ASSET_CROSS_ROUND_CACHE_DIRECTORY "tmp/assets" +#define ASSET_CROSS_ROUND_CACHE_DIRECTORY "cache/assets" //These datums are used to populate the asset cache, the proc "register()" does this. //Place any asset datums you create in asset_list_items.dm diff --git a/code/modules/asset_cache/assets/achievements.dm b/code/modules/asset_cache/assets/achievements.dm index 1ba7b91af92..91f2d75b6d5 100644 --- a/code/modules/asset_cache/assets/achievements.dm +++ b/code/modules/asset_cache/assets/achievements.dm @@ -1,5 +1,11 @@ /datum/asset/spritesheet/simple/achievements - name ="achievements" + name = "achievements" /datum/asset/spritesheet/simple/achievements/create_spritesheets() - InsertAll("", ACHIEVEMENTS_SET) + InsertAll("achievement", ACHIEVEMENTS_SET) + // catch achievements which are pulling icons from another file + for(var/datum/award/other_award as anything in subtypesof(/datum/award)) + var/icon = initial(other_award.icon) + if (icon != ACHIEVEMENTS_SET) + var/icon_state = initial(other_award.icon_state) + Insert("achievement-[icon_state]", icon, icon_state=icon_state) diff --git a/code/modules/asset_cache/assets/tcomms.dm b/code/modules/asset_cache/assets/tcomms.dm new file mode 100644 index 00000000000..ecfdb4a498c --- /dev/null +++ b/code/modules/asset_cache/assets/tcomms.dm @@ -0,0 +1,12 @@ +/datum/asset/spritesheet/telecomms + name="tcomms" + +/datum/asset/spritesheet/telecomms/create_spritesheets() + var/list/inserted_states = list() // No need to send entire `telecomms.dmi`. + for(var/obj/machinery/telecomms/machine as anything in subtypesof(/obj/machinery/telecomms)) + var/icon_state = machine::icon_state + if(icon_state in inserted_states) + continue + + Insert(icon_state, machine::icon, icon_state) + inserted_states += icon_state diff --git a/code/modules/atmospherics/environmental/LINDA_fire.dm b/code/modules/atmospherics/environmental/LINDA_fire.dm index 2e4e3aa0e5e..cd2628f23e3 100644 --- a/code/modules/atmospherics/environmental/LINDA_fire.dm +++ b/code/modules/atmospherics/environmental/LINDA_fire.dm @@ -78,7 +78,7 @@ layer = GASFIRE_LAYER plane = ABOVE_GAME_PLANE blend_mode = BLEND_ADD - light_system = MOVABLE_LIGHT + light_system = OVERLAY_LIGHT light_range = LIGHT_RANGE_FIRE light_power = 1 light_color = LIGHT_COLOR_FIRE diff --git a/code/modules/atmospherics/machinery/air_alarm/_air_alarm.dm b/code/modules/atmospherics/machinery/air_alarm/_air_alarm.dm index e7edfe10869..dee1f93f4bf 100644 --- a/code/modules/atmospherics/machinery/air_alarm/_air_alarm.dm +++ b/code/modules/atmospherics/machinery/air_alarm/_air_alarm.dm @@ -232,6 +232,8 @@ GLOBAL_LIST_EMPTY_TYPED(air_alarms, /obj/machinery/airalarm) data["dangerLevel"] = danger_level data["atmosAlarm"] = !!my_area.active_alarms[ALARM_ATMOS] data["fireAlarm"] = my_area.fire + data["faultStatus"] = my_area.fault_status + data["faultLocation"] = my_area.fault_location data["sensor"] = !!connected_sensor data["allowLinkChange"] = allow_link_change diff --git a/code/modules/atmospherics/machinery/air_alarm/air_alarm_interact.dm b/code/modules/atmospherics/machinery/air_alarm/air_alarm_interact.dm index 3d93338fbee..f39b2a780d1 100644 --- a/code/modules/atmospherics/machinery/air_alarm/air_alarm_interact.dm +++ b/code/modules/atmospherics/machinery/air_alarm/air_alarm_interact.dm @@ -89,16 +89,14 @@ playsound(src, SFX_SPARKS, 50, TRUE, SHORT_RANGE_SOUND_EXTRARANGE) return TRUE -/obj/machinery/airalarm/deconstruct(disassembled = TRUE) - if(!(obj_flags & NO_DECONSTRUCTION)) - new /obj/item/stack/sheet/iron(loc, 2) - if((buildstage == AIR_ALARM_BUILD_NO_WIRES) || (buildstage == AIR_ALARM_BUILD_COMPLETE)) - var/obj/item/electronics/airalarm/alarm = new(loc) - if(!disassembled) - alarm.take_damage(alarm.max_integrity * 0.5, sound_effect = FALSE) - if((buildstage == AIR_ALARM_BUILD_COMPLETE)) - new /obj/item/stack/cable_coil(loc, 3) - qdel(src) +/obj/machinery/airalarm/on_deconstruction(disassembled = TRUE) + new /obj/item/stack/sheet/iron(loc, 2) + if((buildstage == AIR_ALARM_BUILD_NO_WIRES) || (buildstage == AIR_ALARM_BUILD_COMPLETE)) + var/obj/item/electronics/airalarm/alarm = new(loc) + if(!disassembled) + alarm.take_damage(alarm.max_integrity * 0.5, sound_effect = FALSE) + if((buildstage == AIR_ALARM_BUILD_COMPLETE)) + new /obj/item/stack/cable_coil(loc, 3) /obj/machinery/airalarm/attackby(obj/item/W, mob/user, params) update_last_used(user) diff --git a/code/modules/atmospherics/machinery/atmosmachinery.dm b/code/modules/atmospherics/machinery/atmosmachinery.dm index fe6806c9b58..ce70c93a558 100644 --- a/code/modules/atmospherics/machinery/atmosmachinery.dm +++ b/code/modules/atmospherics/machinery/atmosmachinery.dm @@ -280,8 +280,8 @@ * * given_layer - the piping_layer we are checking */ /obj/machinery/atmospherics/proc/connection_check(obj/machinery/atmospherics/target, given_layer) - //if target is not multiz then we have to check if the target & src connect in the same direction - if(!istype(target, /obj/machinery/atmospherics/pipe/multiz) && !((initialize_directions & get_dir(src, target)) && (target.initialize_directions & get_dir(target, src)))) + //check if the target & src connect in the same direction + if(!((initialize_directions & get_dir(src, target)) && (target.initialize_directions & get_dir(target, src)))) return FALSE //both target & src can't be connected either way @@ -468,16 +468,16 @@ * * Called by wrench_act(), create a pipe fitting and remove the pipe */ -/obj/machinery/atmospherics/deconstruct(disassembled = TRUE) - if(!(obj_flags & NO_DECONSTRUCTION)) - if(can_unwrench) - var/obj/item/pipe/stored = new construction_type(loc, null, dir, src, pipe_color) - stored.set_piping_layer(piping_layer) - if(!disassembled) - stored.take_damage(stored.max_integrity * 0.5, sound_effect=FALSE) - transfer_fingerprints_to(stored) - . = stored - ..() +/obj/machinery/atmospherics/on_deconstruction(disassembled = TRUE) + if(!can_unwrench) + return + + var/obj/item/pipe/stored = new construction_type(loc, null, dir, src, pipe_color) + stored.set_piping_layer(piping_layer) + if(!disassembled) + stored.take_damage(stored.max_integrity * 0.5, sound_effect=FALSE) + transfer_fingerprints_to(stored) + . = stored /** * Getter for piping layer shifted, pipe colored overlays diff --git a/code/modules/atmospherics/machinery/components/binary_devices/circulator.dm b/code/modules/atmospherics/machinery/components/binary_devices/circulator.dm index 9a4623ef49a..1816ca19637 100644 --- a/code/modules/atmospherics/machinery/components/binary_devices/circulator.dm +++ b/code/modules/atmospherics/machinery/components/binary_devices/circulator.dm @@ -4,28 +4,24 @@ /obj/machinery/atmospherics/components/binary/circulator name = "circulator/heat exchanger" desc = "A gas circulator pump and heat exchanger." - icon_state = "circ-off-0" - - var/active = FALSE - - var/last_pressure_delta = 0 + icon_state = "circ_base" pipe_flags = PIPING_ONE_PER_TURF | PIPING_DEFAULT_LAYER_ONLY - + vent_movement = VENTCRAWL_CAN_SEE density = TRUE - circuit = /obj/item/circuitboard/machine/circulator + var/active = FALSE + var/last_pressure_delta = 0 var/flipped = 0 + ///Which circulator mode we are on, the generator requires one of each to work. var/mode = CIRCULATOR_HOT - var/obj/machinery/power/generator/generator + ///The generator we are connected to. + var/obj/machinery/power/thermoelectric_generator/generator /obj/machinery/atmospherics/components/binary/circulator/Initialize(mapload) . = ..() AddComponent(/datum/component/simple_rotation) -/obj/machinery/atmospherics/components/binary/circulator/AltClick(mob/user) - return ..() // This hotkey is BLACKLISTED since it's used by /datum/component/simple_rotation - //default cold circ for mappers /obj/machinery/atmospherics/components/binary/circulator/cold mode = CIRCULATOR_COLD @@ -49,50 +45,49 @@ return null //Calculate necessary moles to transfer using PV = nRT - if(air2.temperature>0) - var/pressure_delta = (input_starting_pressure - output_starting_pressure)/2 - - var/transfer_moles = (pressure_delta*air1.volume)/(air2.temperature * R_IDEAL_GAS_EQUATION) - - last_pressure_delta = pressure_delta - - //Actually transfer the gas - var/datum/gas_mixture/removed = air2.remove(transfer_moles) - - update_parents() - - return removed - - else + if(air2.temperature <= 0) last_pressure_delta = 0 + return + var/pressure_delta = (input_starting_pressure - output_starting_pressure)/2 + var/transfer_moles = (pressure_delta*air1.volume)/(air2.temperature * R_IDEAL_GAS_EQUATION) + last_pressure_delta = pressure_delta + //Actually transfer the gas + var/datum/gas_mixture/removed = air2.remove(transfer_moles) + update_parents() + return removed /obj/machinery/atmospherics/components/binary/circulator/process_atmos() - ..() update_appearance() -/obj/machinery/atmospherics/components/binary/circulator/update_icon_state() +/obj/machinery/atmospherics/components/binary/circulator/update_overlays() + . = ..() + cut_overlays() + if(anchored) + add_overlay("circ_anchor") + add_overlay("panel_[panel_open]") + if(!is_operational) - icon_state = "circ-p-[flipped]" - return ..() - if(last_pressure_delta > 0) - if(last_pressure_delta > ONE_ATMOSPHERE) - icon_state = "circ-run-[flipped]" - else - icon_state = "circ-slow-[flipped]" - return ..() + add_overlay("fan_[mode]") + add_overlay("flow") + add_overlay("display") + return - icon_state = "circ-off-[flipped]" - return ..() + add_overlay("flow_on") + add_overlay("display_[mode]") + if(last_pressure_delta > 0) + add_overlay("fan_[mode]_[last_pressure_delta > ONE_ATMOSPHERE]") + else + add_overlay("fan_[mode]") /obj/machinery/atmospherics/components/binary/circulator/wrench_act(mob/living/user, obj/item/I) if(!panel_open) + balloon_alert(user, "open the panel!") return set_anchored(!anchored) I.play_tool_sound(src) if(generator) disconnectFromGenerator() - to_chat(user, span_notice("You [anchored?"secure":"unsecure"] [src].")) - + balloon_alert(user, "[anchored ? "secure" : "unsecure"]") var/obj/machinery/atmospherics/node1 = nodes[1] var/obj/machinery/atmospherics/node2 = nodes[2] @@ -145,22 +140,24 @@ if(generator) disconnectFromGenerator() mode = !mode - to_chat(user, span_notice("You set [src] to [mode ? "cold" : "hot"] mode.")) + balloon_alert(user, "set to [mode ? "cold" : "hot"]") return TRUE /obj/machinery/atmospherics/components/binary/circulator/screwdriver_act(mob/user, obj/item/I) - if(..()) - return TRUE + if(!anchored) + balloon_alert(user, "anchor it down!") + return toggle_panel_open() I.play_tool_sound(src) - to_chat(user, span_notice("You [panel_open ? "open" : "close"] the panel on [src].")) + balloon_alert(user, "panel [panel_open ? "open" : "closed"]") return TRUE /obj/machinery/atmospherics/components/binary/circulator/crowbar_act(mob/user, obj/item/I) - default_deconstruction_crowbar(I) - return TRUE + if(default_deconstruction_crowbar(I)) + return TRUE + return ..() -/obj/machinery/atmospherics/components/binary/circulator/on_deconstruction() +/obj/machinery/atmospherics/components/binary/circulator/on_deconstruction(disassembled) if(generator) disconnectFromGenerator() @@ -176,19 +173,3 @@ ..() pixel_x = 0 pixel_y = 0 - -/obj/machinery/atmospherics/components/binary/circulator/verb/circulator_flip() - set name = "Flip" - set category = "Object" - set src in oview(1) - - if(!ishuman(usr)) - return - - if(anchored) - to_chat(usr, span_danger("[src] is anchored!")) - return - - flipped = !flipped - to_chat(usr, span_notice("You flip [src].")) - update_appearance() diff --git a/code/modules/atmospherics/machinery/components/components_base.dm b/code/modules/atmospherics/machinery/components/components_base.dm index 1aae85d2a14..130c144d424 100644 --- a/code/modules/atmospherics/machinery/components/components_base.dm +++ b/code/modules/atmospherics/machinery/components/components_base.dm @@ -105,7 +105,7 @@ . = ..() update_parents() -/obj/machinery/atmospherics/components/on_deconstruction() +/obj/machinery/atmospherics/components/on_deconstruction(disassembled) relocate_airs() return ..() @@ -231,7 +231,7 @@ if(!panel_open) balloon_alert(user, "open panel!") return ITEM_INTERACT_SUCCESS - + var/unsafe_wrenching = FALSE var/filled_pipe = FALSE var/datum/gas_mixture/environment_air = loc.return_air() @@ -246,7 +246,7 @@ if(!filled_pipe) default_deconstruction_crowbar(tool) return ITEM_INTERACT_SUCCESS - + to_chat(user, span_notice("You begin to unfasten \the [src]...")) internal_pressure -= environment_air.return_pressure() @@ -268,6 +268,10 @@ if(!.) return FALSE set_init_directions() + reconnect_nodes() + return TRUE + +/obj/machinery/atmospherics/components/proc/reconnect_nodes() for(var/i in 1 to device_type) var/obj/machinery/atmospherics/node = nodes[i] if(node) @@ -285,7 +289,6 @@ node.add_member(src) update_parents() SSair.add_to_rebuild_queue(src) - return TRUE /** * Disconnects all nodes from ourselves, remove us from the node's nodes. diff --git a/code/modules/atmospherics/machinery/components/electrolyzer/electrolyzer.dm b/code/modules/atmospherics/machinery/components/electrolyzer/electrolyzer.dm index fef2c072cd8..7cee01e0cf7 100644 --- a/code/modules/atmospherics/machinery/components/electrolyzer/electrolyzer.dm +++ b/code/modules/atmospherics/machinery/components/electrolyzer/electrolyzer.dm @@ -57,7 +57,7 @@ QDEL_NULL(cell) return ..() -/obj/machinery/electrolyzer/on_deconstruction() +/obj/machinery/electrolyzer/on_deconstruction(disassembled) if(cell) LAZYADD(component_parts, cell) cell = null diff --git a/code/modules/atmospherics/machinery/components/fusion/hfr_core.dm b/code/modules/atmospherics/machinery/components/fusion/hfr_core.dm index 6d3d5d31a16..55111e731fc 100644 --- a/code/modules/atmospherics/machinery/components/fusion/hfr_core.dm +++ b/code/modules/atmospherics/machinery/components/fusion/hfr_core.dm @@ -200,7 +200,7 @@ machine_parts = null return..() -/obj/machinery/atmospherics/components/unary/hypertorus/core/on_deconstruction() +/obj/machinery/atmospherics/components/unary/hypertorus/core/on_deconstruction(disassembled) var/turf/local_turf = get_turf(loc) var/datum/gas_mixture/to_release = moderator_internal || internal_fusion if(to_release == moderator_internal) diff --git a/code/modules/atmospherics/machinery/components/gas_recipe_machines/crystallizer.dm b/code/modules/atmospherics/machinery/components/gas_recipe_machines/crystallizer.dm index a005caf86b9..98915686749 100644 --- a/code/modules/atmospherics/machinery/components/gas_recipe_machines/crystallizer.dm +++ b/code/modules/atmospherics/machinery/components/gas_recipe_machines/crystallizer.dm @@ -40,7 +40,7 @@ internal = new register_context() -/obj/machinery/atmospherics/components/binary/crystallizer/on_deconstruction() +/obj/machinery/atmospherics/components/binary/crystallizer/on_deconstruction(disassembled) var/turf/local_turf = get_turf(loc) if(internal.total_moles()) local_turf.assume_air(internal) @@ -55,7 +55,7 @@ if(TOOL_SCREWDRIVER) context[SCREENTIP_CONTEXT_LMB] = "[panel_open ? "Close" : "Open"] panel" if(TOOL_WRENCH) - context[SCREENTIP_CONTEXT_LMB] = "Rotate" + context[SCREENTIP_CONTEXT_RMB] = "Rotate" return CONTEXTUAL_SCREENTIP_SET /obj/machinery/atmospherics/components/binary/crystallizer/attackby(obj/item/I, mob/user, params) @@ -67,7 +67,7 @@ return ..() /obj/machinery/atmospherics/components/binary/crystallizer/crowbar_act(mob/living/user, obj/item/tool) - return crowbar_deconstruction_act(user, tool, internal.return_pressure()) + return crowbar_deconstruction_act(user, tool, internal.return_pressure()) /obj/machinery/atmospherics/components/binary/crystallizer/update_overlays() . = ..() @@ -228,8 +228,8 @@ var/obj/creation = new path(get_step(src, SOUTH)) creation.name = "[quality_control] [creation.name]" if(selected_recipe.dangerous) - investigate_log("has been created in the crystallizer.", INVESTIGATE_ENGINE) - message_admins("[src] has been created in the crystallizer [ADMIN_JMP(src)].") + investigate_log("[creation.name] has been created in the crystallizer.", INVESTIGATE_ENGINE) + message_admins("[creation.name] has been created in the crystallizer [ADMIN_JMP(src)].") quality_loss = 0 diff --git a/code/modules/atmospherics/machinery/components/tank.dm b/code/modules/atmospherics/machinery/components/tank.dm index 6e778168a32..cf18488f052 100644 --- a/code/modules/atmospherics/machinery/components/tank.dm +++ b/code/modules/atmospherics/machinery/components/tank.dm @@ -338,7 +338,7 @@ deconstruct(disassembled=TRUE) to_chat(user, span_notice("You finish cutting open the sealed gas tank, revealing the innards.")) -/obj/machinery/atmospherics/components/tank/deconstruct(disassembled) +/obj/machinery/atmospherics/components/tank/on_deconstruction(disassembled) var/turf/location = drop_location() . = ..() location.assume_air(air_contents) diff --git a/code/modules/atmospherics/machinery/components/unary_devices/cryo.dm b/code/modules/atmospherics/machinery/components/unary_devices/cryo.dm index a603116d7e8..beded509497 100644 --- a/code/modules/atmospherics/machinery/components/unary_devices/cryo.dm +++ b/code/modules/atmospherics/machinery/components/unary_devices/cryo.dm @@ -71,51 +71,37 @@ density = TRUE max_integrity = 350 armor_type = /datum/armor/unary_cryo_cell - layer = MOB_LAYER - 0.2 //NOVA EDIT - Fixing the opacity of cryo cells - ORIGINAL: layer = MOB_LAYER - state_open = FALSE circuit = /obj/item/circuitboard/machine/cryo_tube occupant_typecache = list(/mob/living/carbon, /mob/living/simple_animal) processing_flags = NONE - + fair_market_price = 10 + payment_department = ACCOUNT_MED use_power = IDLE_POWER_USE idle_power_usage = BASE_MACHINE_IDLE_CONSUMPTION * 0.75 active_power_usage = BASE_MACHINE_ACTIVE_CONSUMPTION * 1.5 flags_1 = PREVENT_CLICK_UNDER_1 + ///If TRUE will eject the mob once healing is complete var/autoeject = TRUE - var/volume = 100 - + ///Increased via upgraded parts, higher values will provide better healing and use smaller cryoxodane var/efficiency = 1 - var/sleep_factor = 0.00125 - var/unconscious_factor = 0.001 - /// Our approximation of a mob's heat capacity. + ///Our approximation of a mob's heat capacity. Higher tier parts will provide better cooling for mobs var/heat_capacity = 20000 + ///Works with heat capacity and is increased with higher tier parts. How quickly the mobs temperature changes in the chamber var/conduction_coefficient = 0.3 - + ///The beaker usually contains cryoxadone that is pumped into the mob var/obj/item/reagent_containers/cup/beaker = null - var/consume_gas = FALSE - + ///Inform medical about cryo status over this radio var/obj/item/radio/radio - var/radio_key = /obj/item/encryptionkey/headset_med - var/radio_channel = RADIO_CHANNEL_MEDICAL - /// Visual content - Occupant var/atom/movable/visual/cryo_occupant/occupant_vis - - var/message_cooldown ///Cryo will continue to treat people with 0 damage but existing wounds, but will sound off when damage healing is done in case doctors want to directly treat the wounds instead var/treating_wounds = FALSE - /// Cryo should notify doctors if the patient is dead, and eject them if autoeject is enabled - var/patient_dead = FALSE - fair_market_price = 10 - payment_department = ACCOUNT_MED - /// Reference to the datum connector we're using to interface with the pipe network var/datum/gas_machine_connector/internal_connector /// Check if the machine has been turned on var/on = FALSE - /datum/armor/unary_cryo_cell energy = 100 fire = 30 @@ -123,20 +109,52 @@ /obj/machinery/cryo_cell/Initialize(mapload) . = ..() - if(is_operational) - begin_processing() radio = new(src) - radio.keyslot = new radio_key + radio.keyslot = new /obj/item/encryptionkey/headset_med radio.subspace_transmission = TRUE radio.canhear_range = 0 radio.recalculateChannels() - occupant_vis = new(null, src) + occupant_vis = new(mapload, src) vis_contents += occupant_vis - register_context() internal_connector = new(loc, src, dir, CELL_VOLUME * 0.5) + register_context() + +/obj/machinery/cryo_cell/Destroy() + on = FALSE + + vis_contents.Cut() + QDEL_NULL(occupant_vis) + QDEL_NULL(radio) + QDEL_NULL(beaker) + QDEL_NULL(internal_connector) + + return ..() + +/obj/machinery/cryo_cell/on_deconstruction(disassembled) + if(occupant) + occupant.vis_flags &= ~VIS_INHERIT_PLANE + REMOVE_TRAIT(occupant, TRAIT_IMMOBILIZED, CRYO_TRAIT) + REMOVE_TRAIT(occupant, TRAIT_FORCED_STANDING, CRYO_TRAIT) + + if(beaker) + beaker.forceMove(drop_location()) + +/obj/machinery/cryo_cell/contents_explosion(severity, target) + . = ..() + if(!beaker) + return + + switch(severity) + if(EXPLODE_DEVASTATE) + SSexplosions.high_mov_atom += beaker + if(EXPLODE_HEAVY) + SSexplosions.med_mov_atom += beaker + if(EXPLODE_LIGHT) + SSexplosions.low_mov_atom += beaker + /obj/machinery/cryo_cell/on_changed_z_level(turf/old_turf, turf/new_turf, same_z_layer, notify_contents) . = ..() if(same_z_layer) @@ -147,9 +165,6 @@ . = ..() update_appearance() -/obj/machinery/cryo_cell/on_construction(mob/user) - ..(user, dir, dir) - /obj/machinery/cryo_cell/RefreshParts() . = ..() var/C @@ -157,194 +172,200 @@ C += M.tier efficiency = initial(efficiency) * C - sleep_factor = initial(sleep_factor) * C - unconscious_factor = initial(unconscious_factor) * C heat_capacity = initial(heat_capacity) / C conduction_coefficient = initial(conduction_coefficient) * C /obj/machinery/cryo_cell/examine(mob/user) //this is leaving out everything but efficiency since they follow the same idea of "better beaker, better results" . = ..() if(in_range(user, src) || isobserver(user)) - . += span_notice("The status display reads: Efficiency at [efficiency*100]%.") + . += span_notice("The status display reads: Efficiency at [efficiency * 100]%.") + if(occupant) + if(on) + . += span_notice("Someone's inside [src]!") + else + . += span_notice("You can barely make out a form floating in [src].") + else + . += span_notice("[src] seems empty.") + if(beaker) + . += span_notice("A beaker of [beaker.reagents.maximum_volume]u capacity is located inside.") + else + . += span_warning("Its missing a beaker.") + + . += span_notice("Use [EXAMINE_HINT("Alt-Click")] to [state_open ? "Close" : "Open"] the machine.") + . += span_notice("Use [EXAMINE_HINT("Ctrl-Click")] to turn [on ? "Off" : "On"] the machine.") + + . += span_notice("Its maintainence panel can be [EXAMINE_HINT("screwed")] open.") + if(panel_open) + . += span_notice("[src] can be [EXAMINE_HINT("pried")] apart.") + . += span_notice("[src] can be rotated with a [EXAMINE_HINT("wrench")].") + else if(machine_stat & NOPOWER) + . += span_notice("[src] can be [EXAMINE_HINT("pried")] open.") /obj/machinery/cryo_cell/add_context(atom/source, list/context, obj/item/held_item, mob/user) - . = ..() context[SCREENTIP_CONTEXT_CTRL_LMB] = "Turn [on ? "off" : "on"]" context[SCREENTIP_CONTEXT_ALT_LMB] = "[state_open ? "Close" : "Open"] door" - if(!held_item) + if(isnull(held_item)) return CONTEXTUAL_SCREENTIP_SET + + if(QDELETED(beaker) && istype(held_item, /obj/item/reagent_containers/cup)) + context[SCREENTIP_CONTEXT_LMB] = "Insert beaker" + return CONTEXTUAL_SCREENTIP_SET + switch(held_item.tool_behaviour) if(TOOL_SCREWDRIVER) context[SCREENTIP_CONTEXT_LMB] = "[panel_open ? "Close" : "Open"] panel" + if(TOOL_CROWBAR) + if(!state_open && !panel_open && !is_operational) + context[SCREENTIP_CONTEXT_LMB] = "Pry Open" + else if(panel_open) + context[SCREENTIP_CONTEXT_LMB] = "Deconstruct" if(TOOL_WRENCH) - context[SCREENTIP_CONTEXT_LMB] = "Rotate" + context[SCREENTIP_CONTEXT_LMB] = "[panel_open ? "Rotate" : ""]" return CONTEXTUAL_SCREENTIP_SET - -/obj/machinery/cryo_cell/Destroy() - vis_contents.Cut() - - QDEL_NULL(occupant_vis) - QDEL_NULL(radio) - QDEL_NULL(beaker) - - QDEL_NULL(internal_connector) - +/obj/machinery/cryo_cell/update_icon() + SET_PLANE_IMPLICIT(src, initial(plane)) return ..() -/obj/machinery/cryo_cell/contents_explosion(severity, target) - . = ..() - if(!beaker) - return - - switch(severity) - if(EXPLODE_DEVASTATE) - SSexplosions.high_mov_atom += beaker - if(EXPLODE_HEAVY) - SSexplosions.med_mov_atom += beaker - if(EXPLODE_LIGHT) - SSexplosions.low_mov_atom += beaker - -/obj/machinery/cryo_cell/Exited(atom/movable/gone, direction) - . = ..() - if(gone == beaker) - beaker = null - -/obj/machinery/cryo_cell/on_deconstruction() - if(occupant) - occupant.vis_flags &= ~VIS_INHERIT_PLANE - REMOVE_TRAIT(occupant, TRAIT_IMMOBILIZED, CRYO_TRAIT) - REMOVE_TRAIT(occupant, TRAIT_FORCED_STANDING, CRYO_TRAIT) - - if(beaker) - beaker.forceMove(drop_location()) - beaker = null - /obj/machinery/cryo_cell/update_icon_state() - icon_state = (state_open) ? "pod-open" : ((on && is_operational) ? "pod-on" : "pod-off") + icon_state = state_open ? "pod-open" : ((on && is_operational) ? "pod-on" : "pod-off") return ..() -/obj/machinery/cryo_cell/update_icon() - . = ..() - SET_PLANE_IMPLICIT(src, initial(plane)) - /obj/machinery/cryo_cell/update_overlays() . = ..() if(panel_open) . += "pod-panel" if(state_open) return - if(on && is_operational) - . += mutable_appearance('icons/obj/medical/cryogenics.dmi', "cover-on", ABOVE_ALL_MOB_LAYER, src, plane = ABOVE_GAME_PLANE) - else - . += mutable_appearance('icons/obj/medical/cryogenics.dmi', "cover-off", ABOVE_ALL_MOB_LAYER, src, plane = ABOVE_GAME_PLANE) + . += mutable_appearance('icons/obj/medical/cryogenics.dmi', "cover-[on && is_operational ? "on" : "off"]", ABOVE_ALL_MOB_LAYER, src, plane = ABOVE_GAME_PLANE) -/obj/machinery/cryo_cell/nap_violation(mob/violator) - open_machine() +/obj/machinery/cryo_cell/dump_inventory_contents(list/subset = list()) + //only drop mobs when opening the machine + for (var/mob/living/living_guy in contents) + subset += living_guy + return ..(subset) +/obj/machinery/cryo_cell/Exited(atom/movable/gone, direction) + . = ..() + if(gone == beaker) + beaker = null +/** + * Turns the machine on/off + * + * Arguments + * * active - TRUE to turn the machine on, FALSE to turn it off + */ /obj/machinery/cryo_cell/proc/set_on(active) + PRIVATE_PROC(TRUE) + if(on == active) return + SEND_SIGNAL(src, COMSIG_CRYO_SET_ON, active) . = on on = active - if(on) - update_use_power(ACTIVE_POWER_USE) - else - update_use_power(IDLE_POWER_USE) update_appearance() -/obj/machinery/cryo_cell/on_set_is_operational(old_value) - if(old_value) //Turned off - set_on(FALSE) - end_processing() - else //Turned on + update_use_power(on ? ACTIVE_POWER_USE : IDLE_POWER_USE) + if(on) //Turned on begin_processing() + else //Turned off + end_processing() +/obj/machinery/cryo_cell/begin_processing() + . = ..() + SSair.start_processing_machine(src) + +/obj/machinery/cryo_cell/end_processing() + . = ..() + SSair.stop_processing_machine(src) + +/obj/machinery/cryo_cell/on_set_is_operational(old_value) + //Turned off + if(old_value) + set_on(FALSE) /obj/machinery/cryo_cell/process(seconds_per_tick) - ..() - if(!occupant) - return + if(!on || QDELETED(occupant)) + //somehow an deleting mob is inside us. dump everything out + if(!isnull(occupant) && QDELING(occupant)) + open_machine() + on = FALSE //in case panel was open we need to set to FALSE explicitly - if(!on) - // Should turn on if set to auto - if(autoeject) - set_on(TRUE) - else - return + //if not on end processing + if(!on) + set_on(FALSE) //this explicitly disables processing so is nessassary + . = PROCESS_KILL + + return var/mob/living/mob_occupant = occupant if(mob_occupant.on_fire) mob_occupant.extinguish_mob() - if(!check_nap_violations()) - return if(mob_occupant.stat == DEAD) // Notify doctors and potentially eject if the patient is dead set_on(FALSE) var/msg = "Patient is deceased." if(autoeject) // Eject if configured. msg += " Auto ejecting patient now." open_machine() - // Only need to tell them once - if(!patient_dead) - playsound(src, 'sound/machines/cryo_warning.ogg', volume) - patient_dead = TRUE - radio.talk_into(src, msg, radio_channel) - return - - patient_dead = FALSE + playsound(src, 'sound/machines/cryo_warning.ogg', 100) + radio.talk_into(src, msg, RADIO_CHANNEL_MEDICAL) + return PROCESS_KILL - if(mob_occupant.get_organic_health() >= mob_occupant.getMaxHealth()) // Don't bother with fully healed people. + // Don't bother with fully healed people. + if(mob_occupant.get_organic_health() >= mob_occupant.getMaxHealth()) if(iscarbon(mob_occupant)) var/mob/living/carbon/C = mob_occupant if(C.all_wounds) if(!treating_wounds) // if we have wounds and haven't already alerted the doctors we're only dealing with the wounds, let them know treating_wounds = TRUE - playsound(src, 'sound/machines/cryo_warning.ogg', volume) // Bug the doctors. - var/msg = "Patient vitals fully recovered, continuing automated wound treatment." - radio.talk_into(src, msg, radio_channel) + playsound(src, 'sound/machines/cryo_warning.ogg', 100) // Bug the doctors. + radio.talk_into(src, "Patient vitals fully recovered, continuing automated wound treatment.", RADIO_CHANNEL_MEDICAL) else // otherwise if we were only treating wounds and now we don't have any, turn off treating_wounds so we can boot 'em out treating_wounds = FALSE if(!treating_wounds) set_on(FALSE) - playsound(src, 'sound/machines/cryo_warning.ogg', volume) // Bug the doctors. + playsound(src, 'sound/machines/cryo_warning.ogg', 100) // Bug the doctors. var/msg = "Patient fully restored." if(autoeject) // Eject if configured. msg += " Auto ejecting patient now." open_machine() - radio.talk_into(src, msg, radio_channel) - return + radio.talk_into(src, msg, RADIO_CHANNEL_MEDICAL) + return PROCESS_KILL var/datum/gas_mixture/air1 = internal_connector.gas_connector.airs[1] - - if(air1.total_moles() > CRYO_MIN_GAS_MOLES) - if(beaker) - beaker.reagents.trans_to( - occupant, - (CRYO_TX_QTY / (efficiency * CRYO_MULTIPLY_FACTOR)) * seconds_per_tick, - efficiency * CRYO_MULTIPLY_FACTOR, - methods = VAPOR - ) - consume_gas = TRUE - return TRUE + if(!QDELETED(beaker) && air1.total_moles() > CRYO_MIN_GAS_MOLES) + beaker.reagents.trans_to( + occupant, + (CRYO_TX_QTY / (efficiency * CRYO_MULTIPLY_FACTOR)) * seconds_per_tick, + efficiency * CRYO_MULTIPLY_FACTOR, + methods = VAPOR + ) /obj/machinery/cryo_cell/process_atmos() - ..() - if(!on) - return + return PROCESS_KILL var/datum/gas_mixture/air1 = internal_connector.gas_connector.airs[1] - if(!internal_connector.gas_connector.nodes[1] || !internal_connector.gas_connector.airs[1] || !air1.gases.len || air1.total_moles() < CRYO_MIN_GAS_MOLES) // Turn off if the machine won't work. - var/msg = "Insufficient cryogenic gas, shutting down." - radio.talk_into(src, msg, radio_channel) + //check for workable conditions + if(!internal_connector.gas_connector.nodes[1] || !air1 || !air1.gases.len || air1.total_moles() < CRYO_MIN_GAS_MOLES) // Turn off if the machine won't work. set_on(FALSE) - return + var/msg = "Insufficient cryogenic gas, shutting down." + if(autoeject) // Eject if configured. + msg += " Auto ejecting patient now." + open_machine() + radio.talk_into(src, msg, RADIO_CHANNEL_MEDICAL) + return PROCESS_KILL - if(occupant) + //take damage from high temperatures + if(air1.temperature > 2000) + take_damage(clamp((air1.temperature) / 200, 10, 20), BURN) + + //adjust temperature of mob + if(!QDELETED(occupant)) var/mob/living/mob_occupant = occupant var/cold_protection = 0 var/temperature_delta = air1.temperature - mob_occupant.bodytemperature // The only semi-realistic thing here: share temperature between the cell and the occupant. @@ -355,7 +376,6 @@ if(abs(temperature_delta) > 1) var/air_heat_capacity = air1.heat_capacity() - var/heat = ((1 - cold_protection) * 0.1 + conduction_coefficient) * CALCULATE_CONDUCTION_ENERGY(temperature_delta, heat_capacity, air_heat_capacity) mob_occupant.adjust_bodytemperature(heat / heat_capacity, TCMB) @@ -366,48 +386,42 @@ var/mob/living/carbon/human/humi = mob_occupant humi.adjust_coretemperature(humi.bodytemperature - humi.coretemperature) - - air1.garbage_collect() - - if(air1.temperature > 2000) - take_damage(clamp((air1.temperature)/200, 10, 20), BURN) - - internal_connector.gas_connector.update_parents() + //spread temperature changes throughout the pipenet + internal_connector.gas_connector.update_parents() /obj/machinery/cryo_cell/handle_internal_lifeform(mob/lifeform_inside_me, breath_request) - if(breath_request <= 0) return null + + //return breathable air var/datum/gas_mixture/air1 = internal_connector.gas_connector.airs[1] var/breath_percentage = breath_request / air1.volume - return air1.remove(air1.total_moles() * breath_percentage) + . = air1.remove(air1.total_moles() * breath_percentage) + + //update molar changes throughout the pipenet + internal_connector.gas_connector.update_parents() /obj/machinery/cryo_cell/assume_air(datum/gas_mixture/giver) internal_connector.gas_connector.airs[1].merge(giver) -/obj/machinery/cryo_cell/relaymove(mob/living/user, direction) - if(message_cooldown <= world.time) - message_cooldown = world.time + 50 - to_chat(user, span_warning("[src]'s door won't budge!")) +/obj/machinery/cryo_cell/return_temperature() + var/datum/gas_mixture/internal_air = internal_connector.gas_connector.airs[1] + + return internal_air.total_moles() > CRYO_MIN_GAS_MOLES ? internal_air.temperature : ..() -/obj/machinery/cryo_cell/open_machine(drop = FALSE, density_to_set = FALSE) +/obj/machinery/cryo_cell/open_machine(drop = TRUE, density_to_set = FALSE) if(!state_open && !panel_open) set_on(FALSE) - for(var/mob/M in contents) //only drop mobs - M.forceMove(get_turf(src)) - set_occupant(null) flick("pod-open-anim", src) return ..() /obj/machinery/cryo_cell/close_machine(mob/living/carbon/user, density_to_set = TRUE) treating_wounds = FALSE - if((isnull(user) || istype(user)) && state_open && !panel_open) - if(loc == user?.loc) - to_chat(user, span_warning("You can't close [src] on yourself!")) - return + if(state_open && !panel_open) flick("pod-close-anim", src) - ..(user) - return occupant + . = ..() + if(!QDELETED(occupant)) //auto on if an occupant is inside + set_on(TRUE) /obj/machinery/cryo_cell/container_resist_act(mob/living/user) user.changeNext_move(CLICK_CD_BREAKOUT) @@ -422,16 +436,6 @@ span_notice("You successfully break out of [src]!")) open_machine() -/obj/machinery/cryo_cell/examine(mob/user) - . = ..() - if(occupant) - if(on) - . += "Someone's inside [src]!" - else - . += "You can barely make out a form floating in [src]." - else - . += "[src] seems empty." - /obj/machinery/cryo_cell/MouseDrop_T(mob/target, mob/user) if(user.incapacitated() || !Adjacent(user) || !user.Adjacent(target) || !iscarbon(target) || !ISADVANCEDTOOLUSER(user)) return @@ -445,25 +449,32 @@ close_machine(target) /obj/machinery/cryo_cell/screwdriver_act(mob/living/user, obj/item/tool) + . = ITEM_INTERACT_BLOCKING + if(on) + balloon_alert(user, "turn off!") + return + if(occupant) + balloon_alert(user, "occupant inside!") + return - if(!on && !occupant && !state_open && (default_deconstruction_screwdriver(user, "pod-off", "pod-off", tool))) + if(default_deconstruction_screwdriver(user, "pod-off", "pod-off", tool)) update_appearance() - else - to_chat(user, "You can't access the maintenance panel while the pod is " \ - + (on ? "active" : (occupant ? "full" : "open")) + "!") - return ITEM_INTERACT_SUCCESS + return ITEM_INTERACT_SUCCESS /obj/machinery/cryo_cell/crowbar_act(mob/living/user, obj/item/tool) - if(on || state_open) - return FALSE - if(!panel_open) - balloon_alert(user, "open panel!") - return ITEM_INTERACT_SUCCESS + . = ITEM_INTERACT_BLOCKING + if(on) + balloon_alert(user, "turn off!") + return + + var/can_crowbar = FALSE + if(!state_open && !panel_open && !is_operational) //can pry open + can_crowbar = TRUE + else if(panel_open) //can deconstruct + can_crowbar = TRUE + if(!can_crowbar) + return - var/unsafe_wrenching = FALSE - var/filled_pipe = FALSE - var/datum/gas_mixture/environment_air = loc.return_air() - var/datum/gas_mixture/inside_air = internal_connector.gas_connector.airs[1] var/obj/machinery/atmospherics/node = internal_connector.gas_connector.nodes[1] var/internal_pressure = 0 @@ -471,165 +482,180 @@ var/obj/machinery/atmospherics/components/unary/portables_connector/portable_devices_connector = node internal_pressure = !portable_devices_connector.connected_device ? 1 : 0 + var/datum/gas_mixture/inside_air = internal_connector.gas_connector.airs[1] if(inside_air.total_moles() > 0) - filled_pipe = TRUE if(!node || internal_pressure > 0) + var/datum/gas_mixture/environment_air = loc.return_air() internal_pressure = inside_air.return_pressure() - environment_air.return_pressure() - if(!filled_pipe) - default_deconstruction_crowbar(tool) - return ITEM_INTERACT_SUCCESS - - to_chat(user, span_notice("You begin to unfasten \the [src]...")) - + var/unsafe_release = FALSE if(internal_pressure > 2 * ONE_ATMOSPHERE) - to_chat(user, span_warning("As you begin deconstructing \the [src] a gush of air blows in your face... maybe you should reconsider?")) - unsafe_wrenching = TRUE + to_chat(user, span_warning("As you begin prying \the [src] a gush of air blows in your face... maybe you should reconsider?")) + if(!do_after(user, 2 SECONDS, target = src)) + return + unsafe_release = TRUE - if(!do_after(user, 2 SECONDS, src)) - return - if(unsafe_wrenching) + var/deconstruct = FALSE + if(!default_pry_open(tool)) + if(!default_deconstruction_crowbar(tool, custom_deconstruct = TRUE)) + return + else + deconstruct = TRUE + + if(unsafe_release) internal_connector.gas_connector.unsafe_pressure_release(user, internal_pressure) tool.play_tool_sound(src, 50) - deconstruct(TRUE) + if(deconstruct) + deconstruct(TRUE) return ITEM_INTERACT_SUCCESS /obj/machinery/cryo_cell/wrench_act(mob/living/user, obj/item/tool) - if(on || occupant || state_open) - return FALSE + . = ITEM_INTERACT_BLOCKING + if(on) + balloon_alert(user, "turn off!") + return + if(occupant) + balloon_alert(user, "occupant inside!") + return + if(state_open) + balloon_alert(user, "close first!") + return + if(default_change_direction_wrench(user, tool)) update_appearance() return ITEM_INTERACT_SUCCESS /obj/machinery/cryo_cell/attackby(obj/item/I, mob/user, params) if(istype(I, /obj/item/reagent_containers/cup)) - . = 1 //no afterattack + . = TRUE //no afterattack if(beaker) - to_chat(user, span_warning("A beaker is already loaded into [src]!")) + balloon_alert(user, "beaker present!") return if(!user.transferItemToLoc(I, src)) return beaker = I - user.visible_message(span_notice("[user] places [I] in [src]."), \ - span_notice("You place [I] in [src].")) + balloon_alert(user, "beaker inserted") var/reagentlist = pretty_string_from_reagent_list(I.reagents.reagent_list) user.log_message("added an [I] to cryo containing [reagentlist].", LOG_GAME) return + return ..() /obj/machinery/cryo_cell/ui_state(mob/user) return GLOB.notcontained_state - /obj/machinery/cryo_cell/ui_interact(mob/user, datum/tgui/ui) ui = SStgui.try_update_ui(user, src, ui) if(!ui) ui = new(user, src, "Cryo", name) ui.open() +/obj/machinery/cryo_cell/ui_static_data(mob/user) + . = list() + .["T0C"] = T0C + /obj/machinery/cryo_cell/ui_data() - var/list/data = list() - data["isOperating"] = on - data["hasOccupant"] = occupant ? TRUE : FALSE - data["isOpen"] = state_open - data["autoEject"] = autoeject + . = list() + .["isOperating"] = on + .["isOpen"] = state_open + .["autoEject"] = autoeject - data["occupant"] = list() - if(occupant) + var/list/occupant_data = null + if(!QDELETED(occupant)) var/mob/living/mob_occupant = occupant - data["occupant"]["name"] = mob_occupant.name + occupant_data = list() + + occupant_data["name"] = mob_occupant.name if(mob_occupant.stat == DEAD) - data["occupant"]["stat"] = "Dead" - data["occupant"]["statstate"] = "bad" + occupant_data["stat"] = "Dead" else if (HAS_TRAIT(mob_occupant, TRAIT_KNOCKEDOUT)) - data["occupant"]["stat"] = "Unconscious" - data["occupant"]["statstate"] = "good" + occupant_data["stat"] = "Unconscious" else - data["occupant"]["stat"] = "Conscious" - data["occupant"]["statstate"] = "bad" + occupant_data["stat"] = "Conscious" - data["occupant"]["bodyTemperature"] = round(mob_occupant.bodytemperature, 1) - if(mob_occupant.bodytemperature < T0C) // Green if the mob can actually be healed by cryoxadone. - data["occupant"]["temperaturestatus"] = "good" - else - data["occupant"]["temperaturestatus"] = "bad" + occupant_data["bodyTemperature"] = round(mob_occupant.bodytemperature, 1) - data["occupant"]["health"] = round(mob_occupant.health, 1) - data["occupant"]["maxHealth"] = mob_occupant.maxHealth - data["occupant"]["minHealth"] = HEALTH_THRESHOLD_DEAD - data["occupant"]["bruteLoss"] = round(mob_occupant.getBruteLoss(), 1) - data["occupant"]["oxyLoss"] = round(mob_occupant.getOxyLoss(), 1) - data["occupant"]["toxLoss"] = round(mob_occupant.getToxLoss(), 1) - data["occupant"]["fireLoss"] = round(mob_occupant.getFireLoss(), 1) + occupant_data["health"] = mob_occupant.health + occupant_data["maxHealth"] = mob_occupant.maxHealth + occupant_data["bruteLoss"] = mob_occupant.getBruteLoss() + occupant_data["oxyLoss"] = mob_occupant.getOxyLoss() + occupant_data["toxLoss"] = mob_occupant.getToxLoss() + occupant_data["fireLoss"] = mob_occupant.getFireLoss() + .["occupant"] = occupant_data var/datum/gas_mixture/air1 = internal_connector.gas_connector.airs[1] - data["cellTemperature"] = round(air1.temperature, 1) - - data["isBeakerLoaded"] = beaker ? TRUE : FALSE - var/beakerContents = list() - if(beaker && beaker.reagents && beaker.reagents.reagent_list.len) - for(var/datum/reagent/R in beaker.reagents.reagent_list) - beakerContents += list(list("name" = R.name, "volume" = R.volume)) - data["beakerContents"] = beakerContents - return data - -/obj/machinery/cryo_cell/ui_act(action, params) + .["cellTemperature"] = air1.temperature + + var/list/beaker_data = null + if(!QDELETED(beaker)) + beaker_data = list() + beaker_data["maxVolume"] = beaker.volume + beaker_data["currentVolume"] = round(beaker.reagents.total_volume, 0.01) + var/list/beakerContents = list() + if(length(beaker.reagents.reagent_list)) + for(var/datum/reagent/reagent in beaker.reagents.reagent_list) + beakerContents += list(list("name" = reagent.name, "volume" = round(reagent.volume, 0.01))) // list in a list because Byond merges the first list... + beaker_data["contents"] = beakerContents + .["beaker"] = beaker_data + +/obj/machinery/cryo_cell/ui_act(action, params, datum/tgui/ui, datum/ui_state/state) . = ..() if(.) return + switch(action) if("power") if(on) set_on(FALSE) else if(!state_open) set_on(TRUE) - . = TRUE + return TRUE + if("door") - if(state_open) + if(state_open && get_turf(ui.user) != get_turf(src)) close_machine() else open_machine() - . = TRUE + return TRUE + if("autoeject") autoeject = !autoeject - . = TRUE - if("ejectbeaker") - if(beaker) - beaker.forceMove(drop_location()) - if(Adjacent(usr) && !issilicon(usr)) - usr.put_in_hands(beaker) - beaker = null - . = TRUE + return TRUE + + if("eject") + if(!QDELETED(beaker)) + var/mob/living/user = ui.user + if(Adjacent(user) && !issilicon(user)) + user.put_in_hands(beaker) + else + beaker.forceMove(drop_location()) + return TRUE /obj/machinery/cryo_cell/can_interact(mob/user) - return ..() && user.loc != src + //must not be in the machine or on its turf to interact + if(get_turf(user) == get_turf(src)) + return FALSE + return ..() /obj/machinery/cryo_cell/CtrlClick(mob/user) if(can_interact(user) && !state_open) - if(set_on(!on)) - balloon_alert(user, "turned [on ? "on" : "off"]") + set_on(!on) + balloon_alert(user, "turned [on ? "on" : "off"]") return ..() /obj/machinery/cryo_cell/AltClick(mob/user) if(can_interact(user)) - balloon_alert(user, "[state_open ? "closing" : "opening"] door") if(state_open) close_machine() else open_machine() + balloon_alert(user, "door [state_open ? "opened" : "closed"]") return ..() /obj/machinery/cryo_cell/get_remote_view_fullscreens(mob/user) user.overlay_fullscreen("remote_view", /atom/movable/screen/fullscreen/impaired, 1) -/obj/machinery/cryo_cell/return_temperature() - var/datum/gas_mixture/G = internal_connector.gas_connector.airs[1] - - if(G.total_moles() > 10) - return G.temperature - return ..() - #undef MAX_TEMPERATURE #undef CRYO_MULTIPLY_FACTOR #undef CRYO_TX_QTY diff --git a/code/modules/atmospherics/machinery/components/unary_devices/machine_connector.dm b/code/modules/atmospherics/machinery/components/unary_devices/machine_connector.dm index b1e2567f82f..dc1c2d6282f 100644 --- a/code/modules/atmospherics/machinery/components/unary_devices/machine_connector.dm +++ b/code/modules/atmospherics/machinery/components/unary_devices/machine_connector.dm @@ -21,12 +21,19 @@ gas_connector.set_init_directions() gas_connector.atmos_init() SSair.add_to_rebuild_queue(gas_connector) + RegisterSignal(gas_connector, COMSIG_QDELETING, PROC_REF(connector_deleted)) /datum/gas_machine_connector/Destroy() connected_machine = null QDEL_NULL(gas_connector) return ..() +/datum/gas_machine_connector/proc/connector_deleted() + SIGNAL_HANDLER + gas_connector = null + if(!QDELETED(connected_machine)) + qdel(connected_machine) + /** * Register various signals that are required for the proper work of the connector */ diff --git a/code/modules/atmospherics/machinery/components/unary_devices/thermomachine.dm b/code/modules/atmospherics/machinery/components/unary_devices/thermomachine.dm index 5067dcddae2..5c894274619 100644 --- a/code/modules/atmospherics/machinery/components/unary_devices/thermomachine.dm +++ b/code/modules/atmospherics/machinery/components/unary_devices/thermomachine.dm @@ -129,7 +129,7 @@ if(!initial(icon)) return var/mutable_appearance/thermo_overlay = new(initial(icon)) - . += get_pipe_image(thermo_overlay, "pipe", dir, COLOR_LIME, piping_layer) + . += get_pipe_image(thermo_overlay, "pipe", dir, pipe_color, piping_layer) /obj/machinery/atmospherics/components/unary/thermomachine/examine(mob/user) . = ..() @@ -222,6 +222,8 @@ return ITEM_INTERACT_SUCCESS piping_layer = (piping_layer >= PIPING_LAYER_MAX) ? PIPING_LAYER_MIN : (piping_layer + 1) to_chat(user, span_notice("You change the circuitboard to layer [piping_layer].")) + if(anchored) + reconnect_nodes() update_appearance() return ITEM_INTERACT_SUCCESS @@ -233,6 +235,8 @@ set_pipe_color(GLOB.pipe_paint_colors[GLOB.pipe_paint_colors[color_index]]) visible_message(span_notice("[user] set [src]'s pipe color to [GLOB.pipe_color_name[pipe_color]]."), ignored_mobs = user) to_chat(user, span_notice("You set [src]'s pipe color to [GLOB.pipe_color_name[pipe_color]].")) + if(anchored) + reconnect_nodes() update_appearance() return ITEM_INTERACT_SUCCESS diff --git a/code/modules/atmospherics/machinery/datum_pipeline.dm b/code/modules/atmospherics/machinery/datum_pipeline.dm index b90bafca8e6..6153420358c 100644 --- a/code/modules/atmospherics/machinery/datum_pipeline.dm +++ b/code/modules/atmospherics/machinery/datum_pipeline.dm @@ -348,7 +348,7 @@ var/gas_weight = air.gases[gas_path][MOLES] if(!gas_weight) continue - var/gas_color = RGBtoHSV(initial(gas_path.primary_color)) + var/gas_color = initial(gas_path.primary_color) current_weight += gas_weight if(!current_color) current_color = gas_color @@ -363,8 +363,6 @@ if(empty_weight > 0) current_color = BlendHSV("#000000", current_color, current_weight / (empty_weight + current_weight)) - current_color = HSVtoRGB(current_color) - if(gasmix_color != current_color) gasmix_color = current_color UpdateGasVisuals() diff --git a/code/modules/atmospherics/machinery/other/meter.dm b/code/modules/atmospherics/machinery/other/meter.dm index 656b6582a00..ee1d052b7ed 100644 --- a/code/modules/atmospherics/machinery/other/meter.dm +++ b/code/modules/atmospherics/machinery/other/meter.dm @@ -134,10 +134,8 @@ deconstruct() return TRUE -/obj/machinery/meter/deconstruct(disassembled = TRUE) - if(!(obj_flags & NO_DECONSTRUCTION)) - new /obj/item/pipe_meter(loc) - . = ..() +/obj/machinery/meter/on_deconstruction(disassembled) + new /obj/item/pipe_meter(loc) /obj/machinery/meter/interact(mob/user) if(machine_stat & (NOPOWER|BROKEN)) diff --git a/code/modules/atmospherics/machinery/pipes/layermanifold.dm b/code/modules/atmospherics/machinery/pipes/layermanifold.dm index 09c8a3a9367..730e193671d 100644 --- a/code/modules/atmospherics/machinery/pipes/layermanifold.dm +++ b/code/modules/atmospherics/machinery/pipes/layermanifold.dm @@ -99,7 +99,7 @@ normalize_cardinal_directions() find_all_connections() -/obj/machinery/atmospherics/pipe/layer_manifold/set_piping_layer() +/obj/machinery/atmospherics/pipe/layer_manifold/set_piping_layer(new_layer) piping_layer = PIPING_LAYER_DEFAULT /obj/machinery/atmospherics/pipe/layer_manifold/pipeline_expansion() diff --git a/code/modules/atmospherics/machinery/pipes/multiz.dm b/code/modules/atmospherics/machinery/pipes/multiz.dm index 7e14b8a9806..ebe29531316 100644 --- a/code/modules/atmospherics/machinery/pipes/multiz.dm +++ b/code/modules/atmospherics/machinery/pipes/multiz.dm @@ -9,7 +9,7 @@ initialize_directions = SOUTH layer = HIGH_OBJ_LAYER - device_type = UNARY + device_type = TRINARY paintable = FALSE construction_type = /obj/item/pipe/directional @@ -54,8 +54,8 @@ for(var/obj/machinery/atmospherics/pipe/multiz/above in GET_TURF_ABOVE(local_turf)) if(!is_connectable(above, piping_layer)) continue - nodes += above - above.nodes += src //Two way travel :) + nodes[2] = above + above.nodes[3] = src //Two way travel :) for(var/obj/machinery/atmospherics/pipe/multiz/below in GET_TURF_BELOW(local_turf)) if(!is_connectable(below, piping_layer)) continue diff --git a/code/modules/atmospherics/machinery/portable/canister.dm b/code/modules/atmospherics/machinery/portable/canister.dm index 18fe9817e81..8c3a3301b68 100644 --- a/code/modules/atmospherics/machinery/portable/canister.dm +++ b/code/modules/atmospherics/machinery/portable/canister.dm @@ -353,10 +353,7 @@ /obj/machinery/portable_atmospherics/canister/atmos_expose(datum/gas_mixture/air, exposed_temperature) take_damage(5, BURN, 0) -/obj/machinery/portable_atmospherics/canister/deconstruct(disassembled = TRUE) - if((obj_flags & NO_DECONSTRUCTION)) - qdel(src) - return +/obj/machinery/portable_atmospherics/canister/on_deconstruction(disassembled = TRUE) if(!(machine_stat & BROKEN)) canister_break() if(!disassembled) @@ -366,7 +363,6 @@ new /obj/item/stack/sheet/iron (drop_location(), 10) if(internal_cell) internal_cell.forceMove(drop_location()) - qdel(src) /obj/machinery/portable_atmospherics/canister/attackby(obj/item/item, mob/user, params) if(istype(item, /obj/item/stock_parts/cell)) diff --git a/code/modules/atmospherics/machinery/portable/portable_atmospherics.dm b/code/modules/atmospherics/machinery/portable/portable_atmospherics.dm index d8c47b1610c..389de6e3701 100644 --- a/code/modules/atmospherics/machinery/portable/portable_atmospherics.dm +++ b/code/modules/atmospherics/machinery/portable/portable_atmospherics.dm @@ -43,6 +43,8 @@ air_contents.volume = volume air_contents.temperature = T20C SSair.start_processing_machine(src) + AddElement(/datum/element/climbable, climb_time = 3 SECONDS, climb_stun = 3 SECONDS) + AddElement(/datum/element/elevation, pixel_shift = 8) /obj/machinery/portable_atmospherics/Destroy() disconnect() diff --git a/code/modules/awaymissions/away_props.dm b/code/modules/awaymissions/away_props.dm index f6d1a830a91..1ed0a1ec0ff 100644 --- a/code/modules/awaymissions/away_props.dm +++ b/code/modules/awaymissions/away_props.dm @@ -118,3 +118,19 @@ icon = 'icons/turf/floors.dmi' icon_state = "floor" hidden = TRUE + +/// only player mobs (has ckey) may pass, reverse for the opposite +/obj/effect/playeronly_barrier + name = "player-only barrier" + desc = "You shall pass." + icon = 'icons/effects/mapping_helpers.dmi' + icon_state = "blocker" + anchored = TRUE + invisibility = INVISIBILITY_MAXIMUM + var/reverse = FALSE //Block if has ckey + +/obj/effect/playeronly_barrier/CanAllowThrough(mob/living/mover, border_dir) + . = ..() + if(!istype(mover)) + return + return isnull(mover.ckey) == reverse diff --git a/code/modules/awaymissions/mission_code/murderdome.dm b/code/modules/awaymissions/mission_code/murderdome.dm index 2e1154d29cf..520372e68ac 100644 --- a/code/modules/awaymissions/mission_code/murderdome.dm +++ b/code/modules/awaymissions/mission_code/murderdome.dm @@ -1,7 +1,7 @@ /obj/structure/window/reinforced/fulltile/indestructible name = "robust window" - obj_flags = /obj::obj_flags | NO_DECONSTRUCTION + obj_flags = parent_type::obj_flags | NO_DECONSTRUCTION flags_1 = PREVENT_CLICK_UNDER_1 resistance_flags = INDESTRUCTIBLE | LAVA_PROOF | FIRE_PROOF | UNACIDABLE | ACID_PROOF diff --git a/code/modules/basketball/basketball.dm b/code/modules/basketball/basketball.dm index 9fe176715db..77c3214fe56 100644 --- a/code/modules/basketball/basketball.dm +++ b/code/modules/basketball/basketball.dm @@ -48,7 +48,7 @@ RegisterSignal(user, COMSIG_MOVABLE_MOVED, PROC_REF(movement_effect)) RegisterSignal(user, COMSIG_MOB_EMOTED("spin"), PROC_REF(on_spin)) - RegisterSignal(user, COMSIG_HUMAN_DISARM_HIT, PROC_REF(on_equipped_mob_disarm)) + RegisterSignal(user, COMSIG_LIVING_DISARM_HIT, PROC_REF(on_equipped_mob_disarm)) RegisterSignal(user, COMSIG_LIVING_STATUS_KNOCKDOWN, PROC_REF(on_equipped_mob_knockdown)) /obj/item/toy/basketball/proc/remove_ball_effects() @@ -57,7 +57,7 @@ // unlike on_equip, this signal is triggered after the ball is removed from hands // so we can just use is_holding_item_of_type() proc to check for multiple balls if(!wielder.is_holding_item_of_type(/obj/item/toy/basketball)) - UnregisterSignal(wielder, list(COMSIG_MOVABLE_MOVED, COMSIG_MOB_EMOTED("spin"), COMSIG_HUMAN_DISARM_HIT, COMSIG_LIVING_STATUS_KNOCKDOWN, COMSIG_MOB_THROW)) + UnregisterSignal(wielder, list(COMSIG_MOVABLE_MOVED, COMSIG_MOB_EMOTED("spin"), COMSIG_LIVING_DISARM_HIT, COMSIG_LIVING_STATUS_KNOCKDOWN, COMSIG_MOB_THROW)) wielder = null @@ -99,12 +99,9 @@ /// Used to calculate our disarm chance based on stamina, direction, and spinning /// Note - monkeys use attack_paw() and never trigger this signal (so they always have 100% disarm) -/obj/item/toy/basketball/proc/on_equipped_mob_disarm(mob/living/baller, mob/living/stealer, zone) +/obj/item/toy/basketball/proc/on_equipped_mob_disarm(mob/living/baller, mob/living/stealer, zone, obj/item/weapon) SIGNAL_HANDLER - if(!istype(baller)) - return - // spinning gives you a lower disarm chance but it drains stamina var/disarm_chance = HAS_TRAIT(baller, TRAIT_SPINNING) ? 35 : 50 // ballers stamina results in lower disarm, stealer stamina results in higher disarm diff --git a/code/modules/basketball/hoop.dm b/code/modules/basketball/hoop.dm index f356fc52315..b26fa462b09 100644 --- a/code/modules/basketball/hoop.dm +++ b/code/modules/basketball/hoop.dm @@ -24,7 +24,7 @@ /obj/structure/hoop/Initialize(mapload) . = ..() - AddComponent(/datum/component/simple_rotation, ROTATION_REQUIRE_WRENCH|ROTATION_IGNORE_ANCHORED, AfterRotation = CALLBACK(src, PROC_REF(reset_appearance))) + AddComponent(/datum/component/simple_rotation, ROTATION_REQUIRE_WRENCH|ROTATION_IGNORE_ANCHORED, post_rotation = CALLBACK(src, PROC_REF(reset_appearance))) update_appearance() register_context() diff --git a/code/modules/bitrunning/job.dm b/code/modules/bitrunning/job.dm index 57581753c0f..1e749a3c7a5 100644 --- a/code/modules/bitrunning/job.dm +++ b/code/modules/bitrunning/job.dm @@ -29,7 +29,7 @@ /obj/item/food/cornchips/blue = 1, ) rpg_title = "Recluse" - job_flags = JOB_ANNOUNCE_ARRIVAL | JOB_CREW_MANIFEST | JOB_EQUIP_RANK | JOB_CREW_MEMBER | JOB_NEW_PLAYER_JOINABLE | JOB_REOPEN_ON_ROUNDSTART_LOSS | JOB_ASSIGN_QUIRKS | JOB_CAN_BE_INTERN + job_flags = STATION_JOB_FLAGS /datum/outfit/job/bitrunner name = "Bitrunner" diff --git a/code/modules/bitrunning/objects/landmarks.dm b/code/modules/bitrunning/objects/landmarks.dm index 0eb26b9c588..3a90939dae1 100644 --- a/code/modules/bitrunning/objects/landmarks.dm +++ b/code/modules/bitrunning/objects/landmarks.dm @@ -39,14 +39,15 @@ var/obj/structure/closet/crate/secure/bitrunning/encrypted/encrypted_crate var/area/my_area = get_area(src) - for(var/turf/area_turf as anything in my_area.get_contained_turfs()) - for(var/obj/structure/closet/crate/crate_to_check in area_turf) - if(istype(crate_to_check, /obj/structure/closet/crate/secure/bitrunning/encrypted)) - encrypted_crate = crate_to_check - crate_to_check.desc += span_hypnophrase(" This feels like the crate we're looking for!") - else - crate_list += crate_to_check - crate_to_check.name = "Unidentified Crate" + for (var/list/zlevel_turfs as anything in my_area.get_zlevel_turf_lists()) + for (var/turf/area_turf as anything in zlevel_turfs) + for(var/obj/structure/closet/crate/crate_to_check in area_turf) + if(istype(crate_to_check, /obj/structure/closet/crate/secure/bitrunning/encrypted)) + encrypted_crate = crate_to_check + crate_to_check.desc += span_hypnophrase(" This feels like the crate we're looking for!") + else + crate_list += crate_to_check + crate_to_check.name = "Unidentified Crate" if(!encrypted_crate) stack_trace("Bitrunning Goal Crate Randomizer failed to find an encrypted crate to swap positions for.") diff --git a/code/modules/bitrunning/objects/loot_crate.dm b/code/modules/bitrunning/objects/loot_crate.dm index 539f977c778..a0a74ecb4b9 100644 --- a/code/modules/bitrunning/objects/loot_crate.dm +++ b/code/modules/bitrunning/objects/loot_crate.dm @@ -20,6 +20,7 @@ desc = "Needs to be decrypted at the safehouse to be opened." locked = TRUE damage_deflection = 30 + resistance_flags = INDESTRUCTIBLE | LAVA_PROOF | FIRE_PROOF | UNACIDABLE | ACID_PROOF /obj/structure/closet/crate/secure/bitrunning/encrypted/can_unlock(mob/living/user, obj/item/card/id/player_id, obj/item/card/id/registered_id) return FALSE diff --git a/code/modules/buildmode/submodes/map_export.dm b/code/modules/buildmode/submodes/map_export.dm index 99412781680..e0cb6629e19 100644 --- a/code/modules/buildmode/submodes/map_export.dm +++ b/code/modules/buildmode/submodes/map_export.dm @@ -5,8 +5,6 @@ var/shuttle_flag = SAVE_SHUTTLEAREA_DONTCARE /// Variable with a flag value to indicate what should be saved (for example, only objects or only mobs). var/save_flag = ALL - /// A guard variable to prevent more than one map export process from occurring at the same time. - var/static/is_running = FALSE /datum/buildmode_mode/map_export/change_settings(client/builder) var/static/list/options = list( @@ -52,14 +50,25 @@ if(cornerA == cornerB) return - if(is_running) - to_chat(builder, span_warning("Someone is already running the generator! Try again in a little bit.")) + INVOKE_ASYNC(GLOBAL_PROC, GLOBAL_PROC_REF(_save_map), cornerA, cornerB, save_flag, shuttle_flag) + +/// A guard variable to prevent more than one map export process from occurring at the same time. +GLOBAL_VAR_INIT(map_writing_running, FALSE) +/// Hey bud don't call this directly, it exists so we can invoke async and prevent the buildmode datum being qdel'd from halting this proc +/proc/_save_map(turf/cornerA, turf/cornerB, save_flag, shuttle_flag) + if(!check_rights(R_DEBUG)) + message_admins("[ckey(usr)] tried to run the map save generator but was rejected due to insufficient perms.") + to_chat(usr, span_warning("You must have +ADMIN rights to use this.")) + return + if(GLOB.map_writing_running) + to_chat(usr, span_warning("Someone is already running the generator! Try again in a little bit.")) return - to_chat(builder, span_warning("Saving, please wait...")) - is_running = TRUE + to_chat(usr, span_warning("Saving, please wait...")) + GLOB.map_writing_running = TRUE - log_admin("Build Mode: [key_name(builder)] is exporting the map area from [AREACOORD(cornerA)] through [AREACOORD(cornerB)]") //I put this before the actual saving of the map because it likely won't log if it crashes the fucking server + //I put this before the actual saving of the map because it likely won't log if it crashes the fucking server + log_admin("Build Mode: [key_name(usr)] is exporting the map area from [AREACOORD(cornerA)] through [AREACOORD(cornerB)]") //oversimplified for readability and understandibility @@ -74,9 +83,9 @@ //Step 1: Get the data (This can take a while) var/dat = write_map(minx, miny, minz, maxx, maxy, maxz, save_flag, shuttle_flag) - //Step 2: Write the data to a file and give map to client + //Step 2: Write the data to a file and give map to client var/date = time2text(world.timeofday, "YYYY-MM-DD_hh-mm-ss") - var/file_name = sanitize_filename(tgui_input_text(builder, "Filename?", "Map Exporter", "exported_map_[date]")) - send_exported_map(builder, file_name, dat) - to_chat(builder, span_green("The map was successfully saved!")) - is_running = FALSE + var/file_name = sanitize_filename(tgui_input_text(usr, "Filename?", "Map Exporter", "exported_map_[date]")) + send_exported_map(usr, file_name, dat) + to_chat(usr, span_green("The map was successfully saved!")) + GLOB.map_writing_running = FALSE diff --git a/code/modules/capture_the_flag/ctf_game.dm b/code/modules/capture_the_flag/ctf_game.dm index 9db0ae92f34..e3b9fb37869 100644 --- a/code/modules/capture_the_flag/ctf_game.dm +++ b/code/modules/capture_the_flag/ctf_game.dm @@ -464,7 +464,7 @@ /obj/structure/table/reinforced/ctf resistance_flags = INDESTRUCTIBLE - obj_flags = /obj::obj_flags | NO_DECONSTRUCTION + obj_flags = parent_type::obj_flags | NO_DECONSTRUCTION #define CTF_LOADING_UNLOADED 0 #define CTF_LOADING_LOADING 1 diff --git a/code/modules/cargo/bounties/assistant.dm b/code/modules/cargo/bounties/assistant.dm index 5885ad58252..7d345802eef 100644 --- a/code/modules/cargo/bounties/assistant.dm +++ b/code/modules/cargo/bounties/assistant.dm @@ -215,7 +215,7 @@ description = "We need fish to populate our aquariums with. Fishes that are dead or bought from cargo will only be paid half as much." reward = CARGO_CRATE_VALUE * 9 required_count = 4 - wanted_types = list(/obj/item/fish = TRUE) + wanted_types = list(/obj/item/fish = TRUE, /obj/item/storage/fish_case = TRUE) ///the penalty for shipping dead/bought fish, which can subtract up to half the reward in total. var/shipping_penalty @@ -223,11 +223,27 @@ ..() shipping_penalty = reward * 0.5 / required_count +/datum/bounty/item/assistant/fish/applies_to(obj/shipped) + . = ..() + if(!.) + return + var/obj/item/fish/fishie = shipped + if(istype(shipped, /obj/item/storage/fish_case)) + fishie = locate() in shipped + if(!fishie || !is_type_in_typecache(fishie, wanted_types)) + return FALSE + return can_ship_fish(fishie) + +/datum/bounty/item/assistant/fish/proc/can_ship_fish(obj/item/fish/fishie) + return TRUE + /datum/bounty/item/assistant/fish/ship(obj/shipped) . = ..() if(!.) return var/obj/item/fish/fishie = shipped + if(istype(shipped, /obj/item/storage/fish_case)) + fishie = locate() in shipped if(fishie.status == FISH_DEAD || HAS_TRAIT(fishie, TRAIT_FISH_FROM_CASE)) reward -= shipping_penalty @@ -243,11 +259,7 @@ name = "[fluid_type] Fish" description = "We need [lowertext(fluid_type)] fish to populate our aquariums with. Fishes that are dead or bought from cargo will only be paid half as much." -/datum/bounty/item/assistant/fish/fluid/applies_to(obj/shipped) - . = ..() - if(!.) - return - var/obj/item/fish/fishie = shipped +/datum/bounty/item/assistant/fish/fluid/can_ship_fish(obj/item/fish/fishie) return compatible_fluid_type(fishie.required_fluid_type, fluid_type) ///A subtype of the fish bounty that requires specific fish types. The higher their rarity, the better the pay. @@ -255,7 +267,7 @@ description = "Our prestigious fish collection is currently lacking a few specific species. Fishes that are dead or bought from cargo will only be paid half as much." reward = CARGO_CRATE_VALUE * 16 required_count = 3 - wanted_types = list() + wanted_types = list(/obj/item/storage/fish_case = TRUE) /datum/bounty/item/assistant/fish/specific/New() var/static/list/choosable_fishes diff --git a/code/modules/cargo/coupon.dm b/code/modules/cargo/coupon.dm index e56544a1864..f654db44887 100644 --- a/code/modules/cargo/coupon.dm +++ b/code/modules/cargo/coupon.dm @@ -56,6 +56,12 @@ var/discount_pct_off = 0.05 var/obj/machinery/computer/cargo/inserted_console +/obj/item/coupon/Initialize(mapload) + . = ..() + + if(discounted_pack) + update_name() + /// Choose what our prize is :D /obj/item/coupon/proc/generate(discount, datum/supply_pack/discounted_pack) src.discounted_pack = discounted_pack || pick(GLOB.discountable_packs[pick_weight(GLOB.pack_discount_odds)]) @@ -65,11 +71,12 @@ if(discount_pct_off != COUPON_OMEN) if(!discount) // the discount arg should be a number already, while the keys in the chances list cannot be numbers discount_pct_off = text2num(discount_pct_off) - name = "coupon - [round(discount_pct_off * 100)]% off [initial(src.discounted_pack.name)]" + update_name() return name = "coupon - fuck you" desc = "The small text reads, 'You will be slaughtered'... That doesn't sound right, does it?" + if(!ismob(loc)) return FALSE @@ -83,6 +90,10 @@ to_chat(cursed, span_warning("What a horrible night... To have a curse!")) addtimer(CALLBACK(src, PROC_REF(curse_heart), cursed), 5 SECONDS, TIMER_UNIQUE | TIMER_STOPPABLE) +/obj/item/coupon/update_name() + name = "coupon - [round(discount_pct_off * 100)]% off [initial(discounted_pack.name)]" + return ..() + /// Play stupid games, win stupid prizes /obj/item/coupon/proc/curse_heart(mob/living/cursed) if(!iscarbon(cursed)) diff --git a/code/modules/cargo/expressconsole.dm b/code/modules/cargo/expressconsole.dm index 6babda045e0..79ae0b0fbf8 100644 --- a/code/modules/cargo/expressconsole.dm +++ b/code/modules/cargo/expressconsole.dm @@ -185,7 +185,7 @@ if (!landingzone) WARNING("[src] couldnt find a Quartermaster/Storage (aka cargobay) area on the station, and as such it has set the supplypod landingzone to the area it resides in.") landingzone = get_area(src) - for(var/turf/open/floor/T in landingzone.get_contained_turfs())//uses default landing zone + for(var/turf/open/floor/T in landingzone.get_turfs_from_all_zlevels())//uses default landing zone if(T.is_blocked_turf()) continue LAZYADD(empty_turfs, T) @@ -204,7 +204,7 @@ else if(SO.pack.get_cost() * (0.72*MAX_EMAG_ROCKETS) <= points_to_check) // bulk discount :^) landingzone = GLOB.areas_by_type[pick(GLOB.the_station_areas)] //override default landing zone - for(var/turf/open/floor/T in landingzone.get_contained_turfs()) + for(var/turf/open/floor/T in landingzone.get_turfs_from_all_zlevels()) if(T.is_blocked_turf()) continue LAZYADD(empty_turfs, T) diff --git a/code/modules/cargo/goodies.dm b/code/modules/cargo/goodies.dm index 7b185051478..337dca218ea 100644 --- a/code/modules/cargo/goodies.dm +++ b/code/modules/cargo/goodies.dm @@ -152,7 +152,7 @@ name = "Valentine Card" desc = "Make an impression on that special someone! Comes with one valentine card and a free candy heart!" cost = PAYCHECK_CREW * 2 - contains = list(/obj/item/valentine, /obj/item/food/candyheart) + contains = list(/obj/item/paper/valentine, /obj/item/food/candyheart) /datum/supply_pack/goody/beeplush name = "Bee Plushie" diff --git a/code/modules/cargo/markets/market_items/misc.dm b/code/modules/cargo/markets/market_items/misc.dm index d2b70704e7a..0953a73e0ac 100644 --- a/code/modules/cargo/markets/market_items/misc.dm +++ b/code/modules/cargo/markets/market_items/misc.dm @@ -50,6 +50,14 @@ stock_max = 2 availability_prob = 30 +/datum/market_item/misc/shove_blocker + name = "MOD Bulwark Module" + desc = "You have no idea how much effort it took us to extract this module from that damn safeguard MODsuit last shift." + price_min = CARGO_CRATE_VALUE * 4 + price_max = CARGO_CRATE_VALUE * 5.75 + stock_max = 1 + availability_prob = 25 + /datum/market_item/misc/holywater name = "Flask of holy water" desc = "Father Lootius' own brand of ready-made holy water." diff --git a/code/modules/cargo/markets/market_items/tools.dm b/code/modules/cargo/markets/market_items/tools.dm index 1be815e4f6b..c20834e640b 100644 --- a/code/modules/cargo/markets/market_items/tools.dm +++ b/code/modules/cargo/markets/market_items/tools.dm @@ -96,3 +96,12 @@ price_max = CARGO_CRATE_VALUE * 1.615 stock_max = 2 availability_prob = 50 + +/datum/market_item/tool/program_disk + name = "Bootleg Data Disk" + desc = "A data disk containing EXCLUSIVE and LIMITED modular programs. Legally, we're not allowed to tell you how we aquired them." + item = /obj/item/computer_disk/black_market + price_min = CARGO_CRATE_VALUE * 0.75 + price_max = CARGO_CRATE_VALUE * 2 + stock_max = 3 + availability_prob = 40 diff --git a/code/modules/cargo/materials_market.dm b/code/modules/cargo/materials_market.dm index 21540e75908..92d83d5d0a1 100644 --- a/code/modules/cargo/materials_market.dm +++ b/code/modules/cargo/materials_market.dm @@ -131,6 +131,7 @@ var/color_string var/sheet_to_buy var/requested_amount + var/minimum_value_threshold = 0 for(var/datum/material/traded_mat as anything in SSstock_market.materials_prices) //convert trend into text switch(SSstock_market.materials_trends[traded_mat]) @@ -162,10 +163,16 @@ if(!isnull(current_order)) requested_amount = current_order.pack.contains[sheet_to_buy] + var/min_value_override = initial(traded_mat.minimum_value_override) + if(min_value_override) + minimum_value_threshold = min_value_override + + //send data material_data += list(list( "name" = initial(traded_mat.name), "price" = SSstock_market.materials_prices[traded_mat], + "threshold" = minimum_value_threshold, "quantity" = SSstock_market.materials_quantity[traded_mat], "trend" = trend_string, "color" = color_string, diff --git a/code/modules/cargo/packs/imports.dm b/code/modules/cargo/packs/imports.dm index 61cdc594577..bfb883f3f34 100644 --- a/code/modules/cargo/packs/imports.dm +++ b/code/modules/cargo/packs/imports.dm @@ -205,8 +205,6 @@ /obj/item/grenade/mirage = 5, ) -// NOVA EDIT REMOVAL BEGIN - REPLACED BY LORE BEFITTING CRATE AT: modular_nova/modules/cargo/code/packs.dm -/* /datum/supply_pack/imports/russian name = "Russian Surplus Military Gear Crate" desc = "Hello <;~insert appropriate greeting here: 'Comrade'|'Imperalist Scum'|'Quartermaster of Reputable Station'~;>, \ @@ -238,8 +236,6 @@ for(var/items in 1 to 10) var/item = pick(contains) new item(our_crate) -*/ -// NOVA EDIT REMOVAL END /datum/supply_pack/imports/moistnuggets name = "Refurbished Sakhno Precision Rifle Crate" diff --git a/code/modules/cargo/packs/security.dm b/code/modules/cargo/packs/security.dm index eacd24fdbd0..0b007325829 100644 --- a/code/modules/cargo/packs/security.dm +++ b/code/modules/cargo/packs/security.dm @@ -342,17 +342,3 @@ access_view = ACCESS_SECURITY contains = list(/obj/item/clothing/glasses/sunglasses = 1) crate_name = "sunglasses crate" - -/datum/supply_pack/security/armory/beacon_imp - name = "Beacon Implants Crate" - desc = "Contains five Beacon implants." - cost = CARGO_CRATE_VALUE * 5.5 - contains = list(/obj/item/storage/box/beaconimp) - crate_name = "beacon implant crate" - -/datum/supply_pack/security/armory/teleport_blocker_imp - name = "Bluespace Grounding Implants Crate" - desc = "Contains five Bluespace Grounding implants." - cost = CARGO_CRATE_VALUE * 7 - contains = list(/obj/item/storage/box/teleport_blocker) - crate_name = "bluespace grounding implant crate" diff --git a/code/modules/cargo/packs/stock_market_items.dm b/code/modules/cargo/packs/stock_market_items.dm index 9744bdf7400..6206e8d0f4c 100644 --- a/code/modules/cargo/packs/stock_market_items.dm +++ b/code/modules/cargo/packs/stock_market_items.dm @@ -1,11 +1,10 @@ /** - * todo: make this a supply_pack/custom. Drop pog? ohoho yes. Would be VERY fun. + * todo: make this a supply_pack/custom. Drop pod? ohoho yes. Would be VERY fun. */ /datum/supply_pack/market_materials name = "A Single Sheet of Bananium" desc = "Going market price for this kind of sheet, by Australicus Industrial Mining." cost = CARGO_CRATE_VALUE * 2 - // contains = list(/obj/item/stack/sheet/mineral/bananium) crate_name = "mineral stock sheet crate" group = "Canisters & Materials" /// What material we are trying to buy sheets of? diff --git a/code/modules/client/client_colour.dm b/code/modules/client/client_colour.dm index 158e466c107..56436d0a0ab 100644 --- a/code/modules/client/client_colour.dm +++ b/code/modules/client/client_colour.dm @@ -38,35 +38,32 @@ /datum/client_colour/Destroy() if(!QDELETED(owner)) owner.client_colours -= src - if(fade_out) - owner.animate_client_colour(fade_out) - else - owner.update_client_colour() + owner.animate_client_colour(fade_out) owner = null return ..() ///Sets a new colour, then updates the owner's screen colour. /datum/client_colour/proc/update_colour(new_colour, anim_time, easing = 0) colour = new_colour - if(anim_time) - owner.animate_client_colour(anim_time, easing) - else - owner.update_client_colour() + owner.animate_client_colour(anim_time, easing) /** * Adds an instance of colour_type to the mob's client_colours list * colour_type - a typepath (subtyped from /datum/client_colour) */ -/mob/proc/add_client_colour(colour_type) - if(!ispath(colour_type, /datum/client_colour) || QDELING(src)) +/mob/proc/add_client_colour(colour_type_or_datum) + if(QDELING(src)) return + var/datum/client_colour/colour + if(istype(colour_type_or_datum, /datum/client_colour)) + colour = colour_type_or_datum + else if(ispath(colour_type_or_datum, /datum/client_colour)) + colour = new colour_type_or_datum(src) + else + CRASH("Invalid colour type or datum for add_client_color: [colour_type_or_datum || "null"]") - var/datum/client_colour/colour = new colour_type(src) BINARY_INSERT(colour, client_colours, /datum/client_colour, colour, priority, COMPARE_KEY) - if(colour.fade_in) - animate_client_colour(colour.fade_in) - else - update_client_colour() + animate_client_colour(colour.fade_in) return colour /** @@ -77,8 +74,7 @@ if(!ispath(colour_type, /datum/client_colour)) return - for(var/cc in client_colours) - var/datum/client_colour/colour = cc + for(var/datum/client_colour/colour as anything in client_colours) if(colour.type == colour_type) qdel(colour) break @@ -123,31 +119,49 @@ };\ target = _our_colour\ +#define CLIENT_COLOR_FILTER_KEY "fake_client_color" /** * Resets the mob's client.color to null, and then reapplies a new color based * on the client_colour datums it currently has. */ /mob/proc/update_client_colour() - if(!client) + if(isnull(hud_used)) return - client.color = "" - if(!client_colours.len) - return - MIX_CLIENT_COLOUR(client.color) + + var/new_color = "" + if(length(client_colours)) + MIX_CLIENT_COLOUR(new_color) + + for(var/atom/movable/screen/plane_master/game_plane as anything in hud_used.get_true_plane_masters(RENDER_PLANE_GAME)) + if(new_color) + game_plane.add_filter(CLIENT_COLOR_FILTER_KEY, 2, color_matrix_filter(new_color)) + else + game_plane.remove_filter(CLIENT_COLOR_FILTER_KEY) ///Works similarly to 'update_client_colour', but animated. -/mob/proc/animate_client_colour(anim_time = 20, anim_easing = 0) - if(!client) - return - if(!client_colours.len) - animate(client, color = "", time = anim_time, easing = anim_easing) +/mob/proc/animate_client_colour(anim_time = 2 SECONDS, anim_easing = NONE) + if(anim_time <= 0) + return update_client_colour() + if(isnull(hud_used)) return - MIX_CLIENT_COLOUR(var/anim_colour) - animate(client, color = anim_colour, time = anim_time, easing = anim_easing) + + var/anim_color = "" + if(length(client_colours)) + MIX_CLIENT_COLOUR(anim_color) + + for(var/atom/movable/screen/plane_master/game_plane as anything in hud_used.get_true_plane_masters(RENDER_PLANE_GAME)) + if(anim_color) + game_plane.add_filter(CLIENT_COLOR_FILTER_KEY, 2, color_matrix_filter()) + game_plane.transition_filter(CLIENT_COLOR_FILTER_KEY, color_matrix_filter(anim_color), anim_time, anim_easing) + else + game_plane.transition_filter(CLIENT_COLOR_FILTER_KEY, color_matrix_filter(), anim_time, anim_easing) + // This leaves a blank color filter on the hud which is, fine I guess? #undef MIX_CLIENT_COLOUR +#undef CLIENT_COLOR_FILTER_KEY + /datum/client_colour/glass_colour priority = PRIORITY_LOW @@ -225,6 +239,9 @@ priority = PRIORITY_ABSOLUTE colour = COLOR_RED +/datum/client_colour/temp + priority = PRIORITY_HIGH + #undef PRIORITY_ABSOLUTE #undef PRIORITY_HIGH #undef PRIORITY_NORMAL diff --git a/code/modules/client/client_defines.dm b/code/modules/client/client_defines.dm index 15a8e4454fc..45ccda8b92b 100644 --- a/code/modules/client/client_defines.dm +++ b/code/modules/client/client_defines.dm @@ -240,6 +240,9 @@ var/list/keys_held = list() /// A buffer for combinations such of modifiers + keys (ex: CtrlD, AltE, ShiftT). Format: `"key"` -> `"combo"` (ex: `"D"` -> `"CtrlD"`) var/list/key_combos_held = list() + /// The direction we WANT to move, based off our keybinds + /// Will be udpated to be the actual direction later on + var/intended_direction = NONE /* ** These next two vars are to apply movement for keypresses and releases made while move delayed. ** Because discarding that input makes the game less responsive. diff --git a/code/modules/client/client_procs.dm b/code/modules/client/client_procs.dm index f77d74a52c5..018e3f23a2c 100644 --- a/code/modules/client/client_procs.dm +++ b/code/modules/client/client_procs.dm @@ -1044,6 +1044,7 @@ GLOBAL_LIST_INIT(blacklisted_builds, list( winset(src, "default-[REF(key)]", "parent=default;name=[key];command=[asay]") else winset(src, "default-[REF(key)]", "parent=default;name=[key];command=") + calculate_move_dir() /client/proc/change_view(new_size) if (isnull(new_size)) diff --git a/code/modules/client/preferences/middleware/jobs.dm b/code/modules/client/preferences/middleware/jobs.dm index a7261bbaf17..27c6b033f38 100644 --- a/code/modules/client/preferences/middleware/jobs.dm +++ b/code/modules/client/preferences/middleware/jobs.dm @@ -53,6 +53,8 @@ var/list/jobs = list() for (var/datum/job/job as anything in SSjob.joinable_occupations) + if (job.job_flags & JOB_LATEJOIN_ONLY) + continue var/datum/job_department/department_type = job.department_for_prefs || job.departments_list?[1] if (isnull(department_type)) stack_trace("[job] does not have a department set, yet is a joinable occupation!") @@ -118,6 +120,8 @@ var/list/job_required_experience = list() for (var/datum/job/job as anything in SSjob.all_occupations) + if (job.job_flags & JOB_LATEJOIN_ONLY) + continue var/required_playtime_remaining = job.required_playtime_remaining(user.client) if (required_playtime_remaining) job_required_experience[job.title] = list( diff --git a/code/modules/client/preferences/middleware/quirks.dm b/code/modules/client/preferences/middleware/quirks.dm index 3fabab63238..be8bee46549 100644 --- a/code/modules/client/preferences/middleware/quirks.dm +++ b/code/modules/client/preferences/middleware/quirks.dm @@ -43,7 +43,8 @@ "value" = initial(quirk.value), "customizable" = constant_data?.is_customizable(), "customization_options" = customization_options, - "veteran_only" = initial(quirk.veteran_only), // NOVA EDIT - Veteran quirks + "veteran_only" = initial(quirk.veteran_only), // NOVA EDIT ADDITION - Veteran quirks + "erp_quirk" = initial(quirk.erp_quirk), // NOVA EDIT ADDITION - Purple ERP quirks ) return list( diff --git a/code/modules/client/preferences_savefile.dm b/code/modules/client/preferences_savefile.dm index 9e699530169..2f8c10ad7c5 100644 --- a/code/modules/client/preferences_savefile.dm +++ b/code/modules/client/preferences_savefile.dm @@ -214,7 +214,7 @@ SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Car //Sanitize lastchangelog = sanitize_text(lastchangelog, initial(lastchangelog)) default_slot = sanitize_integer(default_slot, 1, max_save_slots, initial(default_slot)) - toggles = sanitize_integer(toggles, 0, (2**24)-1, initial(toggles)) + toggles = sanitize_integer(toggles, 0, SHORT_REAL_LIMIT-1, initial(toggles)) be_special = sanitize_be_special(SANITIZE_LIST(be_special)) key_bindings = sanitize_keybindings(key_bindings) favorite_outfits = SANITIZE_LIST(favorite_outfits) diff --git a/code/modules/clothing/chameleon/chameleon_action_subtypes.dm b/code/modules/clothing/chameleon/chameleon_action_subtypes.dm index c4ee98acd51..275b2c6e0fc 100644 --- a/code/modules/clothing/chameleon/chameleon_action_subtypes.dm +++ b/code/modules/clothing/chameleon/chameleon_action_subtypes.dm @@ -282,7 +282,6 @@ /obj/item/camera/siliconcam, /obj/item/door_remote/omni, /obj/item/flashlight/emp/debug, - /obj/item/flashlight/eyelight/adapted, /obj/item/flashlight/flare, /obj/item/flashlight/lamp, /obj/item/healthanalyzer/rad_laser, diff --git a/code/modules/clothing/chameleon/generic_chameleon_clothing.dm b/code/modules/clothing/chameleon/generic_chameleon_clothing.dm index 492008d5348..f73b5b13da7 100644 --- a/code/modules/clothing/chameleon/generic_chameleon_clothing.dm +++ b/code/modules/clothing/chameleon/generic_chameleon_clothing.dm @@ -108,6 +108,7 @@ do { \ resistance_flags = NONE armor_type = /datum/armor/gloves_chameleon actions_types = list(/datum/action/item_action/chameleon/change/gloves) + clothing_traits = list(TRAIT_FAST_CUFFING) /obj/item/clothing/gloves/chameleon/broken diff --git a/code/modules/clothing/clothing.dm b/code/modules/clothing/clothing.dm index ae0561d2177..63424cf7a9e 100644 --- a/code/modules/clothing/clothing.dm +++ b/code/modules/clothing/clothing.dm @@ -315,6 +315,9 @@ if (1601 to 35000) . += "[src] offers the wearer robust protection from fire." + if(TRAIT_FAST_CUFFING in clothing_traits) + . += "[src] increase the speed that you handcuff others." + for(var/zone in damage_by_parts) var/pct_damage_part = damage_by_parts[zone] / limb_integrity * 100 var/zone_name = parse_zone(zone) diff --git a/code/modules/clothing/glasses/engine_goggles.dm b/code/modules/clothing/glasses/engine_goggles.dm index d91a5c3bb4a..c9fbb159126 100644 --- a/code/modules/clothing/glasses/engine_goggles.dm +++ b/code/modules/clothing/glasses/engine_goggles.dm @@ -97,15 +97,16 @@ return var/list/shuttle_areas = port.shuttle_areas for(var/area/region as anything in shuttle_areas) - for(var/turf/place as anything in region.get_contained_turfs()) - if(get_dist(user, place) > 7) - continue - var/image/pic - if(isshuttleturf(place)) - pic = new('icons/turf/overlays.dmi', place, "greenOverlay", AREA_LAYER) - else - pic = new('icons/turf/overlays.dmi', place, "redOverlay", AREA_LAYER) - flick_overlay_global(pic, list(user.client), 8) + for (var/list/zlevel_turfs as anything in region.get_zlevel_turf_lists()) + for (var/turf/place as anything in zlevel_turfs) + if(get_dist(user, place) > 7) + continue + var/image/pic + if(isshuttleturf(place)) + pic = new('icons/turf/overlays.dmi', place, "greenOverlay", AREA_LAYER) + else + pic = new('icons/turf/overlays.dmi', place, "redOverlay", AREA_LAYER) + flick_overlay_global(pic, list(user.client), 8) /obj/item/clothing/glasses/meson/engine/proc/show_connections() var/mob/living/carbon/human/user = loc diff --git a/code/modules/clothing/gloves/_gloves.dm b/code/modules/clothing/gloves/_gloves.dm index 3f5503ca0ee..0c48cb102b2 100644 --- a/code/modules/clothing/gloves/_gloves.dm +++ b/code/modules/clothing/gloves/_gloves.dm @@ -41,13 +41,13 @@ /obj/item/clothing/gloves/worn_overlays(mutable_appearance/standing, isinhands = FALSE) . = ..() - if(!isinhands) + if(isinhands) return if(damaged_clothes) . += mutable_appearance('icons/effects/item_damage.dmi', "damagedgloves") if(GET_ATOM_BLOOD_DNA_LENGTH(src)) - . += mutable_appearance('icons/effects/blood.dmi', "bloodyhands") + . += mutable_appearance('icons/effects/blood.dmi', "gloveblood") /obj/item/clothing/gloves/update_clothes_damaged_state(damaged_state = CLOTHING_DAMAGED) ..() diff --git a/code/modules/clothing/gloves/color.dm b/code/modules/clothing/gloves/color.dm index 4e7112bb772..be5cea96d3a 100644 --- a/code/modules/clothing/gloves/color.dm +++ b/code/modules/clothing/gloves/color.dm @@ -26,6 +26,7 @@ ) ) // NOVA EDIT ADDITION END + clothing_traits = list(TRAIT_FAST_CUFFING) /obj/item/clothing/gloves/color/black/Initialize(mapload) . = ..() diff --git a/code/modules/clothing/gloves/combat.dm b/code/modules/clothing/gloves/combat.dm index e69813272d7..77030822716 100644 --- a/code/modules/clothing/gloves/combat.dm +++ b/code/modules/clothing/gloves/combat.dm @@ -11,6 +11,7 @@ max_heat_protection_temperature = GLOVES_MAX_TEMP_PROTECT resistance_flags = NONE armor_type = /datum/armor/gloves_combat + clothing_traits = list(TRAIT_FAST_CUFFING) /datum/armor/gloves_combat bio = 90 diff --git a/code/modules/clothing/gloves/special.dm b/code/modules/clothing/gloves/special.dm index 74de42937e1..d7fb34ae7c7 100644 --- a/code/modules/clothing/gloves/special.dm +++ b/code/modules/clothing/gloves/special.dm @@ -88,6 +88,7 @@ strip_delay = 60 armor_type = /datum/armor/captain_gloves resistance_flags = NONE + clothing_traits = list(TRAIT_FAST_CUFFING) /datum/armor/captain_gloves bio = 90 @@ -102,7 +103,7 @@ greyscale_colors = null siemens_coefficient = 0.3 armor_type = /datum/armor/latex_gloves - clothing_traits = list(TRAIT_QUICK_CARRY, TRAIT_FINGERPRINT_PASSTHROUGH) + clothing_traits = list(TRAIT_QUICK_CARRY) resistance_flags = NONE /datum/armor/latex_gloves diff --git a/code/modules/clothing/gloves/tacklers.dm b/code/modules/clothing/gloves/tacklers.dm index 986d8356b1a..a904cd0dd90 100644 --- a/code/modules/clothing/gloves/tacklers.dm +++ b/code/modules/clothing/gloves/tacklers.dm @@ -7,7 +7,7 @@ min_cold_protection_temperature = GLOVES_MIN_TEMP_PROTECT resistance_flags = NONE custom_premium_price = PAYCHECK_COMMAND * 3.5 - clothing_traits = list(TRAIT_FINGERPRINT_PASSTHROUGH) + clothing_traits = list(TRAIT_FINGERPRINT_PASSTHROUGH,TRAIT_FAST_CUFFING) /// For storing our tackler datum so we can remove it after var/datum/component/tackler /// See: [/datum/component/tackler/var/stamina_cost] diff --git a/code/modules/clothing/head/cakehat.dm b/code/modules/clothing/head/cakehat.dm index 4a05ff7116f..57369ac24f8 100644 --- a/code/modules/clothing/head/cakehat.dm +++ b/code/modules/clothing/head/cakehat.dm @@ -10,7 +10,7 @@ righthand_file = 'icons/mob/inhands/clothing/hats_righthand.dmi' armor_type = /datum/armor/none light_range = 2 //luminosity when on - light_system = MOVABLE_LIGHT + light_system = OVERLAY_LIGHT flags_cover = HEADCOVERSEYES heat = 999 wound_bonus = 10 diff --git a/code/modules/clothing/head/hardhat.dm b/code/modules/clothing/head/hardhat.dm index a05d3d670cf..131f9f10c03 100644 --- a/code/modules/clothing/head/hardhat.dm +++ b/code/modules/clothing/head/hardhat.dm @@ -13,7 +13,7 @@ clothing_flags = SNUG_FIT | STACKABLE_HELMET_EXEMPT resistance_flags = FIRE_PROOF - light_system = MOVABLE_LIGHT_DIRECTIONAL + light_system = OVERLAY_LIGHT_DIRECTIONAL light_range = 4 light_power = 0.8 light_on = FALSE diff --git a/code/modules/clothing/masks/bandana.dm b/code/modules/clothing/masks/bandana.dm index 7d04daf15f2..a6719556b3f 100644 --- a/code/modules/clothing/masks/bandana.dm +++ b/code/modules/clothing/masks/bandana.dm @@ -207,3 +207,34 @@ desc = "A fine black bandana with nanotech lining and a skull emblem." greyscale_colors = "#2e2e2e#C6C6C6" flags_1 = NONE + +/obj/item/clothing/mask/facescarf + name = "facescarf" + desc = "Cover your face like in the cowboy movies. It also has breathtube so you can wear it everywhere!" + actions_types = /datum/action/item_action/adjust + icon_state = "facescarf" + inhand_icon_state = "greyscale_facescarf" + alternate_worn_layer = BACK_LAYER + clothing_flags = BLOCK_GAS_SMOKE_EFFECT|MASKINTERNALS + flags_inv = HIDEFACIALHAIR | HIDEFACE | HIDESNOUT + w_class = WEIGHT_CLASS_SMALL + visor_flags = BLOCK_GAS_SMOKE_EFFECT | MASKINTERNALS + visor_flags_inv = HIDEFACIALHAIR | HIDEFACE | HIDESNOUT + flags_cover = MASKCOVERSMOUTH + visor_flags_cover = MASKCOVERSMOUTH + custom_price = PAYCHECK_CREW + greyscale_colors = "#eeeeee" + greyscale_config = /datum/greyscale_config/facescarf + greyscale_config_worn = /datum/greyscale_config/facescarf/worn + greyscale_config_inhand_left = /datum/greyscale_config/facescarf/inhands_left + greyscale_config_inhand_right = /datum/greyscale_config/facescarf/inhands_right + flags_1 = IS_PLAYER_COLORABLE_1 + +/obj/item/clothing/mask/facescarf/AltClick(mob/user) + ..() + if(user.can_perform_action(src, NEED_DEXTERITY)) + adjustmask(user) + +/obj/item/clothing/mask/facescarf/examine(mob/user) + . = ..() + . += span_notice("Alt-click [src] to adjust it.") diff --git a/code/modules/clothing/masks/costume.dm b/code/modules/clothing/masks/costume.dm index 7eb5da57743..384b6a43460 100644 --- a/code/modules/clothing/masks/costume.dm +++ b/code/modules/clothing/masks/costume.dm @@ -39,3 +39,29 @@ icon_state = "scarecrow_sack" inhand_icon_state = null flags_inv = HIDEFACE|HIDEHAIR|HIDEFACIALHAIR|HIDESNOUT + +/obj/item/clothing/mask/kitsune + name = "kitsune mask" + desc = "Porcelain mask made in the style of the Sol-3 region. It is painted to look like a kitsune." + icon_state = "kitsune" + inhand_icon_state = null + w_class = WEIGHT_CLASS_SMALL + flags_inv = HIDEFACE|HIDEFACIALHAIR + custom_price = PAYCHECK_CREW + greyscale_colors = "#EEEEEE#AA0000" + greyscale_config = /datum/greyscale_config/kitsune + greyscale_config_worn = /datum/greyscale_config/kitsune/worn + flags_1 = IS_PLAYER_COLORABLE_1 + +/obj/item/clothing/mask/rebellion + name = "rebellion mask" + desc = "Mask that is usually used during rebellions by insurgents. It covers the entire face and makes you unrecognizable." + icon_state = "rebellion_mask" + inhand_icon_state = null + w_class = WEIGHT_CLASS_SMALL + flags_inv = HIDEFACE|HIDEFACIALHAIR|HIDESNOUT + custom_price = PAYCHECK_CREW + greyscale_colors = "#EEEEEE" + greyscale_config = /datum/greyscale_config/rebellion_mask + greyscale_config_worn = /datum/greyscale_config/rebellion_mask/worn + flags_1 = IS_PLAYER_COLORABLE_1 diff --git a/code/modules/clothing/outfits/plasmaman.dm b/code/modules/clothing/outfits/plasmaman.dm index a422d2d736e..40d7cfa888e 100644 --- a/code/modules/clothing/outfits/plasmaman.dm +++ b/code/modules/clothing/outfits/plasmaman.dm @@ -288,3 +288,10 @@ uniform = /obj/item/clothing/under/plasmaman/bitrunner gloves = /obj/item/clothing/gloves/color/plasmaman/black head = /obj/item/clothing/head/helmet/space/plasmaman/bitrunner + +/datum/outfit/plasmaman/bridge_assistant + name = "Bridge Assistant Plasmaman" + + uniform = /obj/item/clothing/under/plasmaman //call me when this is gags and not 10 million new assets + gloves = /obj/item/clothing/gloves/color/plasmaman/black + head = /obj/item/clothing/head/helmet/space/plasmaman diff --git a/code/modules/clothing/outfits/vv_outfit.dm b/code/modules/clothing/outfits/vv_outfit.dm index ec459634115..6277b5c1dd8 100644 --- a/code/modules/clothing/outfits/vv_outfit.dm +++ b/code/modules/clothing/outfits/vv_outfit.dm @@ -120,9 +120,8 @@ //Copy backpack contents if exist. var/obj/item/backpack = get_item_by_slot(ITEM_SLOT_BACK) if(istype(backpack) && backpack.atom_storage) - var/list/bp_stuff = list() + var/list/bp_stuff = backpack.atom_storage.return_inv(recursive = FALSE) var/list/typecounts = list() - backpack.atom_storage.return_inv(bp_stuff, FALSE) for(var/obj/item/backpack_item in bp_stuff) if(typecounts[backpack_item.type]) typecounts[backpack_item.type] += 1 diff --git a/code/modules/clothing/shoes/clown.dm b/code/modules/clothing/shoes/clown.dm index 37270f47f6c..d8d4d56fdc2 100644 --- a/code/modules/clothing/shoes/clown.dm +++ b/code/modules/clothing/shoes/clown.dm @@ -20,13 +20,13 @@ . = ..() if(slot & ITEM_SLOT_FEET) if(enabled_waddle) - user.AddElement(/datum/element/waddling) + user.AddElementTrait(TRAIT_WADDLING, SHOES_TRAIT, /datum/element/waddling) if(is_clown_job(user.mind?.assigned_role)) user.add_mood_event("clownshoes", /datum/mood_event/clownshoes) /obj/item/clothing/shoes/clown_shoes/dropped(mob/living/user) . = ..() - user.RemoveElement(/datum/element/waddling) + REMOVE_TRAIT(user, TRAIT_WADDLING, SHOES_TRAIT) if(is_clown_job(user.mind?.assigned_role)) user.clear_mood_event("clownshoes") diff --git a/code/modules/clothing/shoes/costume.dm b/code/modules/clothing/shoes/costume.dm index 1a3e9b0b2be..1e15f25e1f6 100644 --- a/code/modules/clothing/shoes/costume.dm +++ b/code/modules/clothing/shoes/costume.dm @@ -128,8 +128,8 @@ /obj/item/clothing/shoes/ducky_shoes/equipped(mob/living/user, slot) . = ..() if(slot & ITEM_SLOT_FEET) - user.AddElement(/datum/element/waddling) + user.AddElementTrait(TRAIT_WADDLING, SHOES_TRAIT, /datum/element/waddling) /obj/item/clothing/shoes/ducky_shoes/dropped(mob/living/user) . = ..() - user.RemoveElement(/datum/element/waddling) + REMOVE_TRAIT(user, TRAIT_WADDLING, SHOES_TRAIT) diff --git a/code/modules/clothing/shoes/kindlekicks.dm b/code/modules/clothing/shoes/kindlekicks.dm index 82bcb806515..339ec9669af 100644 --- a/code/modules/clothing/shoes/kindlekicks.dm +++ b/code/modules/clothing/shoes/kindlekicks.dm @@ -4,7 +4,7 @@ icon_state = "kindleKicks" inhand_icon_state = null actions_types = list(/datum/action/item_action/kindle_kicks) - light_system = MOVABLE_LIGHT + light_system = OVERLAY_LIGHT light_range = 2 light_power = 3 light_on = FALSE diff --git a/code/modules/clothing/spacesuits/plasmamen.dm b/code/modules/clothing/spacesuits/plasmamen.dm index 30e43c793aa..90141d281dd 100644 --- a/code/modules/clothing/spacesuits/plasmamen.dm +++ b/code/modules/clothing/spacesuits/plasmamen.dm @@ -52,7 +52,7 @@ tint = 2 armor_type = /datum/armor/space_plasmaman resistance_flags = FIRE_PROOF - light_system = MOVABLE_LIGHT_DIRECTIONAL + light_system = OVERLAY_LIGHT_DIRECTIONAL light_range = 4 light_on = FALSE var/helmet_on = FALSE diff --git a/code/modules/clothing/suits/armor.dm b/code/modules/clothing/suits/armor.dm index e968fd20147..6148bf463a8 100644 --- a/code/modules/clothing/suits/armor.dm +++ b/code/modules/clothing/suits/armor.dm @@ -304,9 +304,9 @@ cold_protection = CHEST|GROIN|LEGS|FEET|ARMS|HANDS heat_protection = CHEST|GROIN|LEGS|FEET|ARMS|HANDS armor_type = /datum/armor/armor_riot - clothing_flags = BLOCKS_SHOVE_KNOCKDOWN strip_delay = 80 equip_delay_other = 60 + clothing_traits = list(TRAIT_SHOVE_KNOCKDOWN_BLOCKED) /datum/armor/armor_riot melee = 50 @@ -403,13 +403,15 @@ armor_type = /datum/armor/armor_swat strip_delay = 120 resistance_flags = FIRE_PROOF | ACID_PROOF - clothing_flags = BLOCKS_SHOVE_KNOCKDOWN | THICKMATERIAL + clothing_flags = THICKMATERIAL cold_protection = CHEST | GROIN | LEGS | FEET | ARMS | HANDS min_cold_protection_temperature = SPACE_SUIT_MIN_TEMP_PROTECT_OFF heat_protection = CHEST | GROIN | LEGS | FEET | ARMS | HANDS max_heat_protection_temperature = SPACE_SUIT_MAX_TEMP_PROTECT slowdown = 0.7 body_parts_covered = CHEST|GROIN|LEGS|FEET|ARMS|HANDS + clothing_traits = list(TRAIT_SHOVE_KNOCKDOWN_BLOCKED) + //All of the armor below is mostly unused diff --git a/code/modules/clothing/suits/costume.dm b/code/modules/clothing/suits/costume.dm index 680db9f80dc..d4ff436e777 100644 --- a/code/modules/clothing/suits/costume.dm +++ b/code/modules/clothing/suits/costume.dm @@ -27,7 +27,13 @@ icon_state = "pirate" inhand_icon_state = null body_parts_covered = CHEST|GROIN|ARMS - allowed = list(/obj/item/melee/energy/sword/pirate, /obj/item/clothing/glasses/eyepatch, /obj/item/reagent_containers/cup/glass/bottle/rum) + allowed = list( + /obj/item/melee/energy/sword/pirate, + /obj/item/clothing/glasses/eyepatch, + /obj/item/reagent_containers/cup/glass/bottle/rum, + /obj/item/gun/energy/laser/musket, + /obj/item/gun/energy/disabler/smoothbore, + ) species_exception = list(/datum/species/golem) /obj/item/clothing/suit/costume/pirate/armored diff --git a/code/modules/clothing/suits/jobs.dm b/code/modules/clothing/suits/jobs.dm index b63bb493e58..f73fb78c288 100644 --- a/code/modules/clothing/suits/jobs.dm +++ b/code/modules/clothing/suits/jobs.dm @@ -236,10 +236,14 @@ icon_state = "qm_coat" blood_overlay_type = "coat" body_parts_covered = CHEST|GROIN|LEGS|ARMS - allowed = list( + +/obj/item/clothing/suit/jacket/quartermaster/Initialize(mapload) + . = ..() + allowed += list( /obj/item/stamp, /obj/item/storage/bag/mail, /obj/item/universal_scanner, + /obj/item/melee/baton/telescopic, ) /obj/item/clothing/suit/toggle/lawyer/greyscale @@ -395,7 +399,10 @@ /obj/item/clothing/suit/jacket/research_director/Initialize(mapload) . = ..() - allowed += /obj/item/storage/bag/xeno + allowed += list( + /obj/item/storage/bag/xeno, + /obj/item/melee/baton/telescopic, + ) // Atmos /obj/item/clothing/suit/atmos_overalls diff --git a/code/modules/clothing/under/accessories/_accessories.dm b/code/modules/clothing/under/accessories/_accessories.dm index 8ecc3962abd..67c2768ad23 100644 --- a/code/modules/clothing/under/accessories/_accessories.dm +++ b/code/modules/clothing/under/accessories/_accessories.dm @@ -59,7 +59,7 @@ . = ..() var/obj/item/clothing/under/attached_to = loc - + if(!istype(attached_to)) return @@ -79,8 +79,10 @@ SHOULD_CALL_PARENT(TRUE) if(atom_storage) + atom_storage.close_all() attach_to.clone_storage(atom_storage) attach_to.atom_storage.set_real_location(src) + attach_to.atom_storage.rustle_sound = TRUE // it's on the suit now var/num_other_accessories = LAZYLEN(attach_to.attached_accessories) layer = FLOAT_LAYER + clamp(attach_to.max_number_of_accessories - num_other_accessories, 0, 10) @@ -118,9 +120,8 @@ /obj/item/clothing/accessory/proc/detach(obj/item/clothing/under/detach_from) SHOULD_CALL_PARENT(TRUE) - if(IS_WEAKREF_OF(src, detach_from.atom_storage?.real_location)) + if(detach_from.atom_storage?.real_location == src) // Ensure void items do not stick around - atom_storage.close_all() detach_from.atom_storage.close_all() // And clean up the storage we made QDEL_NULL(detach_from.atom_storage) diff --git a/code/modules/clothing/under/accessories/badges.dm b/code/modules/clothing/under/accessories/badges.dm index e452b4e034c..94bd910ae0a 100644 --- a/code/modules/clothing/under/accessories/badges.dm +++ b/code/modules/clothing/under/accessories/badges.dm @@ -8,7 +8,7 @@ . = ..() if(prob(1)) user.say("The testimony contradicts the evidence!", forced = "[src]") - user.visible_message(span_notice("[user] shows [user.p_their()] attorney's badge."), span_notice("You show your attorney's badge.")) + user.point_at(src) /obj/item/clothing/accessory/lawyers_badge/accessory_equipped(obj/item/clothing/under/clothes, mob/living/user) RegisterSignal(user, COMSIG_LIVING_SLAM_TABLE, PROC_REF(table_slam)) diff --git a/code/modules/clothing/under/pants.dm b/code/modules/clothing/under/pants.dm index f433a98b035..a582f7ccb92 100644 --- a/code/modules/clothing/under/pants.dm +++ b/code/modules/clothing/under/pants.dm @@ -14,7 +14,6 @@ icon_state = "slacks" greyscale_config = /datum/greyscale_config/slacks greyscale_config_worn = /datum/greyscale_config/slacks/worn - greyscale_config_worn_digi = /datum/greyscale_config/slacks/worn/digi //NOVA EDIT ADDITION - DigiGreyscale greyscale_colors = "#575757#3E3E3E#75634F" flags_1 = IS_PLAYER_COLORABLE_1 @@ -24,7 +23,6 @@ icon_state = "jeans" greyscale_config = /datum/greyscale_config/jeans greyscale_config_worn = /datum/greyscale_config/jeans/worn - greyscale_config_worn_digi = /datum/greyscale_config/jeans/worn/digi //NOVA EDIT ADDITION - DigiGreyscale greyscale_colors = "#787878#723E0E#4D7EAC" flags_1 = IS_PLAYER_COLORABLE_1 diff --git a/code/modules/clothing/under/shorts.dm b/code/modules/clothing/under/shorts.dm index 3697ae584dd..289c59ae3d1 100644 --- a/code/modules/clothing/under/shorts.dm +++ b/code/modules/clothing/under/shorts.dm @@ -4,7 +4,6 @@ icon_state = "shorts" greyscale_config = /datum/greyscale_config/shorts greyscale_config_worn = /datum/greyscale_config/shorts/worn - greyscale_config_worn_digi = /datum/greyscale_config/shorts/worn/digi //NOVA EDIT ADDITION - DigiGreyscale greyscale_colors = "#575757#3E3E3E#75634F" gender = PLURAL body_parts_covered = GROIN @@ -20,7 +19,6 @@ icon_state = "jeanshorts" greyscale_config = /datum/greyscale_config/jeanshorts greyscale_config_worn = /datum/greyscale_config/jeanshorts/worn - greyscale_config_worn_digi = /datum/greyscale_config/jeanshorts/worn/digi //NOVA EDIT ADDITION - DigiGreyscale greyscale_colors = "#787878#723E0E#4D7EAC" /obj/item/clothing/under/shorts/red diff --git a/code/modules/clothing/under/trek.dm b/code/modules/clothing/under/trek.dm index 3de26404cd5..de72342f941 100644 --- a/code/modules/clothing/under/trek.dm +++ b/code/modules/clothing/under/trek.dm @@ -15,7 +15,6 @@ inhand_icon_state = "y_suit" greyscale_config = /datum/greyscale_config/trek greyscale_config_worn = /datum/greyscale_config/trek/worn - greyscale_config_worn_digi = /datum/greyscale_config/trek/worn/digi //NOVA EDIT ADDITION - DigiGreyscale greyscale_colors = "#fab342" /obj/item/clothing/under/trek/engsec @@ -25,7 +24,6 @@ inhand_icon_state = "r_suit" greyscale_config = /datum/greyscale_config/trek greyscale_config_worn = /datum/greyscale_config/trek/worn - greyscale_config_worn_digi = /datum/greyscale_config/trek/worn/digi //NOVA EDIT ADDITION - DigiGreyscale greyscale_colors = "#B72B2F" /obj/item/clothing/under/trek/medsci @@ -35,7 +33,6 @@ inhand_icon_state = "b_suit" greyscale_config = /datum/greyscale_config/trek greyscale_config_worn = /datum/greyscale_config/trek/worn - greyscale_config_worn_digi = /datum/greyscale_config/trek/worn/digi //NOVA EDIT ADDITION - DigiGreyscale greyscale_colors = "#5FA4CC" /* diff --git a/code/modules/deathmatch/deathmatch_controller.dm b/code/modules/deathmatch/deathmatch_controller.dm new file mode 100644 index 00000000000..86e86f491fb --- /dev/null +++ b/code/modules/deathmatch/deathmatch_controller.dm @@ -0,0 +1,125 @@ +/datum/deathmatch_controller + /// Assoc list of all lobbies (ckey = lobby) + var/list/datum/deathmatch_lobby/lobbies = list() + /// All deathmatch map templates + var/list/datum/lazy_template/deathmatch/maps = list() + /// All loadouts + var/list/datum/outfit/loadouts + +/datum/deathmatch_controller/New() + . = ..() + if (GLOB.deathmatch_game) + qdel(src) + CRASH("A deathmatch controller already exists.") + GLOB.deathmatch_game = src + + for (var/datum/lazy_template/deathmatch/template as anything in subtypesof(/datum/lazy_template/deathmatch)) + var/map_name = initial(template.name) + maps[map_name] = new template + loadouts = subtypesof(/datum/outfit/deathmatch_loadout) + +/datum/deathmatch_controller/proc/create_new_lobby(mob/host) + lobbies[host.ckey] = new /datum/deathmatch_lobby(host) + deadchat_broadcast(" has opened a new deathmatch lobby. (Join)", "[host]") + +/datum/deathmatch_controller/proc/remove_lobby(ckey) + var/lobby = lobbies[ckey] + lobbies[ckey] = null + lobbies.Remove(ckey) + qdel(lobby) + +/datum/deathmatch_controller/proc/passoff_lobby(host, new_host) + lobbies[new_host] = lobbies[host] + lobbies[host] = null + lobbies.Remove(host) + +/datum/deathmatch_controller/ui_state(mob/user) + return GLOB.observer_state + +/datum/deathmatch_controller/ui_interact(mob/user, datum/tgui/ui) + ui = SStgui.try_update_ui(user, src, null) + if(!ui) + ui = new(user, src, "DeathmatchPanel") + ui.open() + +/datum/deathmatch_controller/ui_data(mob/user) + . = ..() + .["lobbies"] = list() + .["hosting"] = FALSE + .["admin"] = check_rights_for(user.client, R_ADMIN) + for (var/ckey in lobbies) + var/datum/deathmatch_lobby/lobby = lobbies[ckey] + if (user.ckey == ckey) + .["hosting"] = TRUE + if (user.ckey in lobby.observers+lobby.players) + .["playing"] = ckey + .["lobbies"] += list(list( + name = ckey, + players = lobby.players.len, + max_players = initial(lobby.map.max_players), + map = initial(lobby.map.name), + playing = lobby.playing + )) + +/datum/deathmatch_controller/proc/find_lobby_by_user(ckey) + for(var/lobbykey in lobbies) + var/datum/deathmatch_lobby/lobby = lobbies[lobbykey] + if(ckey in lobby.players+lobby.observers) + return lobby + +/datum/deathmatch_controller/ui_act(action, list/params, datum/tgui/ui, datum/ui_state/state) + . = ..() + if(. || !isobserver(usr)) + return + switch (action) + if ("host") + if (lobbies[usr.ckey]) + return + if(!SSticker.HasRoundStarted()) + tgui_alert(usr, "The round hasn't started yet!") + return + ui.close() + create_new_lobby(usr) + if ("join") + if (!lobbies[params["id"]]) + return + var/datum/deathmatch_lobby/playing_lobby = find_lobby_by_user(usr.ckey) + var/datum/deathmatch_lobby/chosen_lobby = lobbies[params["id"]] + if (!isnull(playing_lobby) && playing_lobby != chosen_lobby) + playing_lobby.leave(usr.ckey) + + if(isnull(playing_lobby)) + log_game("[usr.ckey] joined deathmatch lobby [params["id"]] as a player.") + chosen_lobby.join(usr) + + chosen_lobby.ui_interact(usr) + if ("spectate") + var/datum/deathmatch_lobby/playing_lobby = find_lobby_by_user(usr.ckey) + if (!lobbies[params["id"]]) + return + var/datum/deathmatch_lobby/chosen_lobby = lobbies[params["id"]] + // if the player is in this lobby + if(!isnull(playing_lobby) && playing_lobby != chosen_lobby) + playing_lobby.leave(usr.ckey) + else if(playing_lobby == chosen_lobby) + chosen_lobby.ui_interact(usr) + return + // they werent in the lobby, lets add them + if (!chosen_lobby.playing) + chosen_lobby.add_observer(usr) + chosen_lobby.ui_interact(usr) + else + chosen_lobby.spectate(usr) + log_game("[usr.ckey] joined deathmatch lobby [params["id"]] as an observer.") + if ("admin") + if (!check_rights(R_ADMIN)) + message_admins("[usr.key] has attempted to use admin functions in the deathmatch panel!") + log_admin("[key_name(usr)] tried to use the deathmatch panel admin functions without authorization.") + return + var/lobby = params["id"] + switch (params["func"]) + if ("Close") + remove_lobby(lobby) + log_admin("[key_name(usr)] removed deathmatch lobby [lobby].") + if ("View") + lobbies[lobby].ui_interact(usr) diff --git a/code/modules/deathmatch/deathmatch_loadouts.dm b/code/modules/deathmatch/deathmatch_loadouts.dm new file mode 100644 index 00000000000..480e1975fb9 --- /dev/null +++ b/code/modules/deathmatch/deathmatch_loadouts.dm @@ -0,0 +1,377 @@ +/datum/outfit/deathmatch_loadout //remember that fun > balance + name = "" + shoes = /obj/item/clothing/shoes/sneakers/black // im not doing this on all of them + /// Name shown in the UI + var/display_name = "" + /// Description shown in the UI + var/desc = ":KILL:" + /// If defined, using this outfit sets the targets species to it + var/datum/species/species_override + /// This outfit will grant these spells if applied + var/list/granted_spells = list() + +/datum/outfit/deathmatch_loadout/pre_equip(mob/living/carbon/human/user, visualsOnly = FALSE) + . = ..() + if(isdummy(user)) + return + + if(!isnull(species_override)) + user.set_species(species_override) + for(var/datum/action/act as anything in granted_spells) + var/datum/action/new_ability = new act(user) + new_ability.Grant(user) + +/datum/outfit/deathmatch_loadout/naked + name = "Deathmatch: Naked" + display_name = "Unarmed, Butt-naked" + desc = "Naked man craves for bloodshed." + shoes = null + +/datum/outfit/deathmatch_loadout/assistant + name = "Deathmatch: Assistant loadout" + display_name = "Assistant" + desc = "A simple assistant loadout: greyshirt and a toolbox" + + l_hand = /obj/item/storage/toolbox/mechanical + uniform = /obj/item/clothing/under/color/grey + back = /obj/item/storage/backpack + box = /obj/item/storage/box/survival + belt = /obj/item/flashlight + +/datum/outfit/deathmatch_loadout/assistant/weaponless + name = "Deathmatch: Assistant loadout (Weaponless)" + display_name = "Assistant (Unarmed)" + desc = "What is an assistant without a toolbox? nothing" + l_hand = null + +/datum/outfit/deathmatch_loadout/operative + name = "Deathmatch: Operative" + display_name = "Operative" + desc = "A syndicate operative." + + uniform = /obj/item/clothing/under/syndicate + shoes = /obj/item/clothing/shoes/combat + gloves = /obj/item/clothing/gloves/combat + back = /obj/item/storage/backpack + id = /obj/item/card/id/advanced/chameleon + +/datum/outfit/deathmatch_loadout/operative/ranged + name = "Deathmatch: Ranged Operative" + display_name = "Ranged Operative" + desc = "A syndicate operative with a gun and a knife." + + l_hand = /obj/item/gun/ballistic/automatic/pistol + l_pocket = /obj/item/knife/combat + backpack_contents = list(/obj/item/ammo_box/magazine/m9mm = 5) + +/datum/outfit/deathmatch_loadout/operative/melee + name = "Deathmatch: Melee Operative" + display_name = "Melee Operative" + desc = "A syndicate operative with multiple knives." + + gloves = /obj/item/clothing/gloves/tackler/combat/insulated + suit = /obj/item/clothing/suit/armor/vest + head = /obj/item/clothing/head/helmet + backpack_contents = list(/obj/item/knife/combat = 6) + l_hand = /obj/item/knife/combat + l_pocket = /obj/item/knife/combat + +/datum/outfit/deathmatch_loadout/securing_sec + name = "Deathmatch: Security Officer" + display_name = "Security Officer" + desc = "A security officer." + + uniform = /datum/outfit/job/security::uniform + suit = /datum/outfit/job/security::suit + suit_store = /datum/outfit/job/security::suit_store + belt = /datum/outfit/job/security::belt + ears = /datum/outfit/job/security::ears //cant communicate with station i think? + gloves = /datum/outfit/job/security::gloves + head = /datum/outfit/job/security::head + shoes = /datum/outfit/job/security::shoes + l_pocket = /obj/item/flashlight/seclite + l_hand = /obj/item/gun/energy/disabler + r_pocket = /obj/item/knife/combat/survival + back = /datum/outfit/job/security::backpack + box = /datum/outfit/job/security::box + implants = list(/obj/item/implant/mindshield) + +/datum/outfit/deathmatch_loadout/assistant/instagib + name = "DM: Instagib" + display_name = "Instagib" + desc = "Assistant with an instakill rifle." + + l_hand = /obj/item/gun/energy/laser/instakill + +/datum/outfit/deathmatch_loadout/operative/sniper + name = "Deathmatch: Sniper" + display_name = "Sniper" + desc = "You know what do you need to do" + backpack_contents = list( + /obj/item/ammo_box/magazine/sniper_rounds = 3, + ) + glasses = /obj/item/clothing/glasses/thermal + uniform = /obj/item/clothing/under/syndicate/sniper + gloves = /obj/item/clothing/gloves/tackler/combat/insulated + l_pocket = /obj/item/knife/combat + l_hand = /obj/item/gun/ballistic/rifle/sniper_rifle + +/datum/outfit/deathmatch_loadout/chef + name = "Deathmatch: Chef" + display_name = "Chef" + desc = "He love pizza." + uniform = /obj/item/clothing/under/costume/buttondown/slacks/service + suit = /obj/item/clothing/suit/toggle/chef + head = /obj/item/clothing/head/utility/chefhat + mask = /obj/item/clothing/mask/fakemoustache/italian + gloves = /obj/item/clothing/gloves/the_sleeping_carp + back = /obj/item/storage/backpack + backpack_contents = list( + /obj/item/sharpener, + ) + +/datum/outfit/deathmatch_loadout/samurai + name = "Deathmatch: Samurai" + display_name = "Samurai" + desc = "Bare-footed man craves to bloodshed." + l_hand = /obj/item/katana + uniform = /obj/item/clothing/under/costume/gi + +/// battlers + +/datum/outfit/deathmatch_loadout/battler + name = "Deathmatch: Battler Base" + display_name = "Battler" + desc = "What is a battler whith out weapone?." + + shoes = /obj/item/clothing/shoes/combat + uniform = /obj/item/clothing/under/syndicate + gloves = /obj/item/clothing/gloves/combat + back = /obj/item/storage/backpack + id = /obj/item/card/id/advanced/chameleon + +/datum/outfit/deathmatch_loadout/battler/soldier + name = "Deathmatch: Soldier" + display_name = "Soldier" + desc = "Ready for combat." + + l_hand = /obj/item/gun/ballistic/rifle/boltaction + l_pocket = /obj/item/knife/combat + uniform = /obj/item/clothing/under/syndicate/rus_army + suit = /obj/item/clothing/suit/armor/vest + head = /obj/item/clothing/head/helmet/rus_helmet + gloves = /obj/item/clothing/gloves/tackler/combat/insulated + + backpack_contents = list( + /obj/item/grenade/smokebomb = 2, + /obj/item/ammo_box/strilka310 = 2, + ) + +/datum/outfit/deathmatch_loadout/battler/druid + name = "Deathmatch: Druid" + display_name = "Druid" + desc = "How can plants help you?" + species_override = /datum/species/pod + l_hand = /obj/item/gun/ballistic/bow + r_hand = /obj/item/ammo_casing/arrow + l_pocket = /obj/item/knife/shiv/carrot + r_pocket = /obj/item/flashlight/lantern + head = /obj/item/food/grown/ambrosia/gaia + uniform = /obj/item/clothing/under/shorts/green + mask = /obj/item/clothing/mask/gas/tiki_mask + glasses = /obj/item/clothing/glasses/thermal + gloves = /obj/item/clothing/gloves/botanic_leather + belt = /obj/item/gun/syringe/blowgun + back = /obj/item/storage/backpack/saddlepack + shoes = /obj/item/clothing/shoes/sandal + backpack_contents = list( + /obj/item/reagent_containers/syringe/crude/mushroom = 1, + /obj/item/reagent_containers/syringe/crude/blastoff = 1, + /obj/item/ammo_casing/arrow = 2, + /obj/item/food/grown/nettle/death = 2, + /obj/item/food/grown/banana = 2, + /obj/item/food/grown/cherry_bomb = 2, + /obj/item/food/grown/mushroom/walkingmushroom = 2, + /obj/item/seeds/kudzu = 1, + ) + +/datum/outfit/deathmatch_loadout/battler/northstar + name = "Deathmatch: North Star" + display_name = "North Star" + desc = "flip flip flip" + + uniform = /obj/item/clothing/under/suit/carpskin + head = /obj/item/clothing/head/fedora/carpskin + gloves = /obj/item/clothing/gloves/rapid + backpack_contents = list( + /obj/item/throwing_star = 6, + /obj/item/restraints/legcuffs/bola/tactical = 2, + ) + +/datum/outfit/deathmatch_loadout/battler/janitor + name = "Deathmatch: Janitor" + display_name = "Janitor" + desc = "Regular work" + + uniform = /obj/item/clothing/under/rank/civilian/janitor + suit = /obj/item/clothing/suit/caution + head = /obj/item/reagent_containers/cup/bucket + shoes = /obj/item/clothing/shoes/chameleon/noslip + l_hand = /obj/item/pushbroom + l_pocket = /obj/item/reagent_containers/spray/waterflower/lube + backpack_contents = list( + /obj/item/grenade/chem_grenade/cleaner = 2, + /obj/item/restraints/legcuffs/beartrap = 3, + /obj/item/soap, + ) + +/datum/outfit/deathmatch_loadout/battler/surgeon + name = "Deathmatch: Surgeon" + display_name = "Surgeon" + desc = "Treatment has come" + + uniform = /obj/item/clothing/under/rank/medical/scrubs/blue + suit = /obj/item/clothing/suit/apron/surgical + head = /obj/item/clothing/head/utility/surgerycap + mask = /obj/item/clothing/mask/surgical + glasses = /obj/item/clothing/glasses/hud/health/night + l_pocket = /obj/item/reagent_containers/hypospray/combat + r_pocket = /obj/item/reagent_containers/hypospray/medipen/penthrite + l_hand = /obj/item/chainsaw + + backpack_contents = list( + /obj/item/storage/medkit/tactical, + /obj/item/reagent_containers/hypospray/medipen/stimulants, + ) + +/datum/outfit/deathmatch_loadout/battler/raider + name = "Deathmatch: Raider" + display_name = "Raider" + desc = "Not from Shadow Legends" + + l_hand = /obj/item/nullrod/claymore/chainsaw_sword + r_pocket = /obj/item/switchblade + uniform = /obj/item/clothing/under/costume/jabroni + back = /obj/item/spear + belt = /obj/item/gun/magic/hook + head = /obj/item/clothing/head/utility/welding + +/datum/outfit/deathmatch_loadout/battler/clown + name = "DM: Clown" + display_name = "Clown (Man Of Honk)" + desc = "Who called this honking clown" + + uniform = /datum/outfit/job/clown::uniform + belt = /datum/outfit/job/clown::belt + shoes = /datum/outfit/job/clown::shoes + mask = /datum/outfit/job/clown::mask + l_pocket = /datum/outfit/job/clown::l_pocket + back = /datum/outfit/job/clown::backpack + box = /datum/outfit/job/clown::box + implants = list(/obj/item/implant/sad_trombone) + l_pocket = /obj/item/melee/energy/sword/bananium + r_pocket = /obj/item/shield/energy/bananium + gloves = /obj/item/clothing/gloves/tackler/rocket + + backpack_contents = list( + /obj/item/reagent_containers/spray/waterflower = 1, + /obj/item/instrument/bikehorn = 1, + /obj/item/bikehorn/airhorn = 1, + /obj/item/food/grown/banana = 3, + /obj/item/food/pie/cream = 2, + ) + +/datum/outfit/deathmatch_loadout/battler/tgcoder //tg doesnt stand for tgstation dont ask + name = "Deathmatch: Coder" + display_name = "Coder" + desc = "What" + + l_hand = /obj/item/toy/katana + uniform = /obj/item/clothing/under/costume/schoolgirl + suit = /obj/item/clothing/suit/costume/joker + shoes = /obj/item/clothing/shoes/clown_shoes/meown_shoes + head = /obj/item/clothing/head/costume/kitty + backpack_contents = list( + /obj/item/reagent_containers/cup/soda_cans/pwr_game = 10, + ) + +/datum/outfit/deathmatch_loadout/battler/enginer + name = "Deathmatch: Engineer" + display_name = "Engineer" + desc = "Meet the engineer" + + l_hand = /obj/item/storage/toolbox/emergency/turret + uniform = /obj/item/clothing/under/rank/engineering/engineer + shoes = /obj/item/clothing/shoes/magboots + head = /obj/item/clothing/head/utility/hardhat + back = /obj/item/fireaxe + gloves = /obj/item/clothing/gloves/color/yellow + +/datum/outfit/deathmatch_loadout/battler/scientist + name = "Deathmatch: Scientist" + display_name = "Scientist" + desc = "What a nerd" + + uniform = /obj/item/clothing/under/rank/rnd/scientist + suit = /obj/item/clothing/suit/armor/reactive/stealth + mask = /obj/item/clothing/mask/gas + l_hand = /obj/item/reagent_containers/syringe/plasma + l_pocket = /obj/item/slimecross/stabilized/sepia + r_pocket = /obj/item/slimecross/stabilized/purple + backpack_contents = list( + /obj/item/reagent_containers/cup/bottle/plasma, + /obj/item/slimecross/burning/grey, + /obj/item/slimecross/burning/adamantine, + /obj/item/slimecross/burning/gold, + /obj/item/slimecross/burning/blue, + /obj/item/slimecross/burning/sepia, + /obj/item/slimecross/chilling/green, + /obj/item/slimecross/chilling/grey, + /obj/item/slimecross/industrial/oil, + /obj/item/slimecross/charged/silver, + /obj/item/slimecross/charged/black, + /obj/item/slimecross/burning/rainbow, + /obj/item/slimecross/chilling/adamantine, + ) + +/datum/outfit/deathmatch_loadout/battler/bloodminer + name = "Deathmatch: Blood Miner" + display_name = "Blood Miner" + desc = "Rip and tear!!!" + + l_hand = /obj/item/melee/cleaving_saw + r_hand = /obj/item/gun/energy/recharge/kinetic_accelerator + uniform = /obj/item/clothing/under/rank/cargo/miner/lavaland + suit = /obj/item/clothing/suit/hooded/explorer + shoes = /obj/item/clothing/shoes/workboots/mining + mask = /obj/item/clothing/mask/gas/explorer + granted_spells = list( + /datum/action/cooldown/mob_cooldown/dash, + ) + +/datum/outfit/deathmatch_loadout/battler/ripper + name = "Deathmatch: Ripper" + display_name = "Ripper" + desc = "Die die die!!!" + + l_hand = /obj/item/gun/ballistic/shotgun/hook + r_hand = /obj/item/gun/ballistic/shotgun/hook + uniform = /obj/item/clothing/under/costume/skeleton + suit = /obj/item/clothing/suit/hooded/cultrobes/eldritch + mask = /obj/item/clothing/mask/gas/cyborg + shoes = /obj/item/clothing/shoes/sandal + belt = /obj/item/melee/cleric_mace + +/datum/outfit/deathmatch_loadout/battler/cowboy + name = "Deathmatch: Cowboy" + display_name = "Cowboy" + desc = "Yeehaw partner" + + r_hand = /obj/item/clothing/mask/cigarette/cigar + l_hand = /obj/item/melee/curator_whip + l_pocket = /obj/item/lighter + accessory = /obj/item/clothing/accessory/vest_sheriff + uniform = /obj/item/clothing/under/rank/security/detective + shoes = /obj/item/clothing/shoes/cowboy + belt = /obj/item/storage/belt/holster/detective/full + head = /obj/item/clothing/head/cowboy/brown diff --git a/code/modules/deathmatch/deathmatch_lobby.dm b/code/modules/deathmatch/deathmatch_lobby.dm new file mode 100644 index 00000000000..50db2ca0fff --- /dev/null +++ b/code/modules/deathmatch/deathmatch_lobby.dm @@ -0,0 +1,440 @@ +/datum/deathmatch_lobby + /// Ckey of the host + var/host + /// Assoc list of ckey to list() + var/list/players = list() + /// Assoc list of ckey to list() + var/list/observers = list() + /// The current chosen map + var/datum/lazy_template/deathmatch/map + /// Our turf reservation AKA where the arena is + var/datum/turf_reservation/location + /// Whether players hear deadchat and people through walls + var/global_chat = FALSE + /// Whether the lobby is currently playing + var/playing = FALSE + /// Number of total ready players + var/ready_count + /// List of loadouts, either gotten from the deathmatch controller or the map + var/list/loadouts + /// Current map player spawn locations, cleared after spawning + var/list/player_spawns = list() + +/datum/deathmatch_lobby/New(mob/player) + . = ..() + if (!player) + stack_trace("Attempted to create a deathmatch lobby without a host.") + return qdel(src) + host = player.ckey + map = GLOB.deathmatch_game.maps[pick(GLOB.deathmatch_game.maps)] + log_game("[host] created a deathmatch lobby.") + if (map.allowed_loadouts) + loadouts = map.allowed_loadouts + else + loadouts = GLOB.deathmatch_game.loadouts + add_player(player, loadouts[1], TRUE) + ui_interact(player) + +/datum/deathmatch_lobby/Destroy(force, ...) + . = ..() + for (var/key in players+observers) + var/datum/tgui/ui = SStgui.get_open_ui(get_mob_by_ckey(key), src) + if (ui) ui.close() + remove_ckey_from_play(key) + if(playing && !isnull(location)) + clear_reservation() + players = null + observers = null + map = null + location = null + loadouts = null + +/datum/deathmatch_lobby/proc/start_game() + if (playing) + return + playing = TRUE + + RegisterSignal(map, COMSIG_LAZY_TEMPLATE_LOADED, PROC_REF(find_spawns_and_start_delay)) + location = map.lazy_load() + if (!location) + to_chat(get_mob_by_ckey(host), span_warning("Couldn't reserve/load a map location (all locations used?), try again later, or contact a coder.")) + playing = FALSE + UnregisterSignal(map, COMSIG_LAZY_TEMPLATE_LOADED) + return FALSE + +/datum/deathmatch_lobby/proc/find_spawns_and_start_delay(datum/lazy_template/source, list/atoms) + SIGNAL_HANDLER + for(var/thing in atoms) + if(istype(thing, /obj/effect/landmark/deathmatch_player_spawn)) + player_spawns += thing + + UnregisterSignal(source, COMSIG_LAZY_TEMPLATE_LOADED) + addtimer(CALLBACK(src, PROC_REF(start_game_after_delay)), 8 SECONDS) + +/datum/deathmatch_lobby/proc/start_game_after_delay() + if (!length(player_spawns) || length(player_spawns) < length(players)) + stack_trace("Failed to get spawns when loading deathmatch map [map.name] for lobby [host].") + clear_reservation() + playing = FALSE + return FALSE + + for (var/key in players) + var/mob/dead/observer/observer = players[key]["mob"] + if (isnull(observer) || !observer.client) + log_game("Removed player [key] from deathmatch lobby [host], as they couldn't be found.") + remove_ckey_from_play(key) + continue + + // pick spawn and remove it. + var/picked_spawn = pick_n_take(player_spawns) + spawn_observer_as_player(key, get_turf(picked_spawn)) + qdel(picked_spawn) + + // Remove rest of spawns. + QDEL_LIST(player_spawns) + + for (var/observer_key in observers) + var/mob/observer = observers[observer_key]["mob"] + observer.forceMove(pick(location.reserved_turfs)) + + addtimer(CALLBACK(src, PROC_REF(game_took_too_long)), initial(map.automatic_gameend_time)) + log_game("Deathmatch game [host] started.") + announce(span_reallybig("GO!")) + return TRUE + +/datum/deathmatch_lobby/proc/spawn_observer_as_player(ckey, loc) + var/mob/dead/observer/observer = players[ckey]["mob"] + if (isnull(observer) || !observer.client) + remove_ckey_from_play(ckey) + return + + // equip player + var/datum/outfit/deathmatch_loadout/loadout = players[ckey]["loadout"] + if (!(loadout in loadouts)) + loadout = loadouts[1] + + observer.forceMove(loc) + var/datum/mind/observer_mind = observer.mind + var/mob/living/observer_current = observer.mind?.current + var/mob/living/carbon/human/new_player = observer.change_mob_type(/mob/living/carbon/human, delete_old_mob = TRUE) + if(!isnull(observer_mind) && observer_current) + new_player.AddComponent( \ + /datum/component/temporary_body, \ + old_mind = observer_mind, \ + old_body = observer_current, \ + ) + new_player.equipOutfit(loadout) // Loadout + players[ckey]["mob"] = new_player + + // register death handling. + RegisterSignals(new_player, list(COMSIG_LIVING_DEATH, COMSIG_MOB_GHOSTIZED, COMSIG_QDELETING), PROC_REF(player_died)) + if (global_chat) + ADD_TRAIT(new_player, TRAIT_SIXTHSENSE, INNATE_TRAIT) + ADD_TRAIT(new_player, TRAIT_XRAY_HEARING, INNATE_TRAIT) + +/datum/deathmatch_lobby/proc/game_took_too_long() + if (!location || QDELING(src)) + return + announce(span_reallybig("The players have took too long! Game ending!")) + end_game() + +/datum/deathmatch_lobby/proc/end_game() + if (!location) + CRASH("Reservation of deathmatch game [host] deleted during game.") + var/mob/winner + if(players.len) + var/list/winner_info = players[pick(players)] + if(!isnull(winner_info["mob"])) + winner = winner_info["mob"] //only one should remain anyway but incase of a draw + + announce(span_reallybig("THE GAME HAS ENDED.
    THE WINNER IS: [winner ? winner.real_name : "no one"].")) + + for(var/ckey in players) + var/mob/loser = players[ckey]["mob"] + UnregisterSignal(loser, list(COMSIG_MOB_GHOSTIZED, COMSIG_QDELETING)) + players[ckey]["mob"] = null + loser.ghostize() + qdel(loser) + + clear_reservation() + GLOB.deathmatch_game.remove_lobby(host) + log_game("Deathmatch game [host] ended.") + +/datum/deathmatch_lobby/proc/player_died(mob/living/player, gibbed) + SIGNAL_HANDLER + if(isnull(player) || QDELING(src)) + return + + var/ckey = player.ckey + if(!islist(players[ckey])) // potentially the player info could hold a reference to this mob so we can figure the ckey out without worrying about ghosting and suicides n such + for(var/potential_ckey in players) + var/list/player_info = players[potential_ckey] + if(player_info["mob"] && player_info["mob"] == player) + ckey = potential_ckey + break + + if(!islist(players[ckey])) // if we STILL didnt find a good ckey + return + + players -= ckey + + var/mob/dead/observer/ghost = !player.client ? player.get_ghost() : player.ghostize() //this doesnt work on those who used the ghost verb + if(!isnull(ghost)) + add_observer(ghost, (host == ckey)) + + announce(span_reallybig("[player.real_name] HAS DIED.
    [players.len] REMAIN.")) + + if(!gibbed && !QDELING(player)) // for some reason dusting or deleting in chasm storage messes up tgui bad + player.dust(TRUE, TRUE, TRUE) + if (players.len <= 1) + end_game() + +/datum/deathmatch_lobby/proc/add_observer(mob/mob, host = FALSE) + if (players[mob.ckey]) + CRASH("Tried to add [mob.ckey] as an observer while being a player.") + observers[mob.ckey] = list("mob" = mob, "host" = host) + +/datum/deathmatch_lobby/proc/add_player(mob/mob, loadout, host = FALSE) + if (observers[mob.ckey]) + CRASH("Tried to add [mob.ckey] as a player while being an observer.") + players[mob.ckey] = list("mob" = mob, "host" = host, "ready" = FALSE, "loadout" = loadout) + +/datum/deathmatch_lobby/proc/remove_ckey_from_play(ckey) + var/is_likely_player = (ckey in players) + var/list/main_list = is_likely_player ? players : observers + var/list/info = main_list[ckey] + if(is_likely_player && islist(info)) + ready_count -= info["ready"] + main_list -= ckey + +/datum/deathmatch_lobby/proc/announce(message) + for (var/key in players+observers) + var/mob/player = get_mob_by_ckey(key) + if (!player.client) + remove_ckey_from_play(key) + continue + to_chat(player.client, message) + +/datum/deathmatch_lobby/proc/leave(ckey) + if (host == ckey) + var/total_count = players.len + observers.len + if (total_count <= 1) // <= just in case. + GLOB.deathmatch_game.remove_lobby(host) + return + else + if (players[ckey] && players.len <= 1) + for (var/key in observers) + if (host == key) + continue + host = key + observers[key]["host"] = TRUE + break + else + for (var/key in players) + if (host == key) + continue + host = key + players[key]["host"] = TRUE + break + GLOB.deathmatch_game.passoff_lobby(ckey, host) + + remove_ckey_from_play(ckey) + +/datum/deathmatch_lobby/proc/join(mob/player) + if (playing || !player) + return + if(!(player.ckey in players+observers)) + if (players.len >= map.max_players) + add_observer(player) + else + add_player(player, loadouts[1]) + ui_interact(player) + +/datum/deathmatch_lobby/proc/spectate(mob/player) + if (!playing || !location || !player) + return + if (!observers[player.ckey]) + add_observer(player) + player.forceMove(pick(location.reserved_turfs)) + +/datum/deathmatch_lobby/proc/change_map(new_map) + if (!new_map || !GLOB.deathmatch_game.maps[new_map]) + return + map = GLOB.deathmatch_game.maps[new_map] + var/max_players = map.max_players + for (var/possible_unlucky_loser in players) + max_players-- + if (max_players <= 0) + var/loser_mob = players[possible_unlucky_loser]["mob"] + remove_ckey_from_play(possible_unlucky_loser) + add_observer(loser_mob) + + loadouts = map.allowed_loadouts ? map.allowed_loadouts : GLOB.deathmatch_game.loadouts + for (var/player_key in players) + if (players[player_key]["loadout"] in loadouts) + continue + players[player_key]["loadout"] = loadouts[1] + +/datum/deathmatch_lobby/proc/clear_reservation() + if(isnull(location) || isnull(map)) + return + for(var/turf/victimized_turf as anything in location.reserved_turfs) //remove this once clearing turf reservations is actually reliable + victimized_turf.empty() + map.reservations -= location + qdel(location) + +/datum/deathmatch_lobby/Topic(href, href_list) //This handles the chat Join button href, supposedly + var/mob/dead/observer/ghost = usr + if (!istype(ghost)) + return + if(href_list["join"]) + join(ghost) + +/datum/deathmatch_lobby/ui_state(mob/user) + return GLOB.observer_state + +/datum/deathmatch_lobby/ui_interact(mob/user, datum/tgui/ui) + ui = SStgui.try_update_ui(user, src, null) + if(!ui) + ui = new(user, src, "DeathmatchLobby") + ui.open() + +/datum/deathmatch_lobby/ui_static_data(mob/user) + . = list() + .["maps"] = list() + for (var/map_key in GLOB.deathmatch_game.maps) + .["maps"] += map_key + +/datum/deathmatch_lobby/ui_data(mob/user) + . = list() + .["self"] = user.ckey + .["host"] = (user.ckey == host) + .["admin"] = check_rights_for(user.client, R_ADMIN) + .["global_chat"] = global_chat + .["playing"] = playing + .["loadouts"] = list() + for (var/datum/outfit/deathmatch_loadout/loadout as anything in loadouts) + .["loadouts"] += initial(loadout.display_name) + .["map"] = list() + .["map"]["name"] = map.name + .["map"]["desc"] = map.desc + .["map"]["time"] = map.automatic_gameend_time + .["map"]["min_players"] = map.min_players + .["map"]["max_players"] = map.max_players + if(!isnull(players[user.ckey]) && !isnull(players[user.ckey]["loadout"])) + var/datum/outfit/deathmatch_loadout/loadout = players[user.ckey]["loadout"] + .["loadoutdesc"] = initial(loadout.desc) + else + .["loadoutdesc"] = "You are an observer! As an observer, you can hear lobby announcements." + .["players"] = list() + for (var/player_key in players) + var/list/player_info = players[player_key] + var/mob/player_mob = player_info["mob"] + if (isnull(player_mob) || !player_mob.client) + leave(player_key) + continue + .["players"][player_key] = player_info.Copy() + var/datum/outfit/deathmatch_loadout/dm_loadout = player_info["loadout"] + .["players"][player_key]["loadout"] = initial(dm_loadout.display_name) + .["observers"] = list() + for (var/observer_key in observers) + var/mob/observer = observers[observer_key]["mob"] + if (isnull(observer) || !observer.client) + leave(observer_key) + continue + .["observers"][observer_key] = observers[observer_key] + +/datum/deathmatch_lobby/ui_act(action, list/params, datum/tgui/ui, datum/ui_state/state) + . = ..() + if(. || !isobserver(usr)) + return + switch(action) + if ("start_game") + if (usr.ckey != host) + return FALSE + if (map.min_players > players.len) + to_chat(usr, span_warning("Not enough players to start yet.")) + return FALSE + start_game() + return TRUE + if ("leave_game") + if (playing) + return FALSE + leave(usr.ckey) + ui.close() + GLOB.deathmatch_game.ui_interact(usr) + return TRUE + if ("change_loadout") + if (playing) + return FALSE + if (params["player"] != usr.ckey && host != usr.ckey) + return FALSE + for (var/datum/outfit/deathmatch_loadout/possible_loadout as anything in loadouts) + if (params["loadout"] != initial(possible_loadout.display_name)) + continue + players[params["player"]]["loadout"] = possible_loadout + break + return TRUE + if ("observe") + if (playing) + return FALSE + if (players[usr.ckey]) + remove_ckey_from_play(usr.ckey) + add_observer(usr, host == usr.ckey) + return TRUE + else if (observers[usr.ckey] && players.len < map.max_players) + remove_ckey_from_play(usr.ckey) + add_player(usr, loadouts[1], host == usr.ckey) + return TRUE + if ("ready") + players[usr.ckey]["ready"] ^= 1 // Toggle. + ready_count += (players[usr.ckey]["ready"] * 2) - 1 // scared? + if (ready_count >= players.len && players.len >= map.min_players) + start_game() + return TRUE + if ("host") // Host functions + if (playing || (usr.ckey != host && !check_rights(R_ADMIN))) + return FALSE + var/uckey = params["id"] + switch (params["func"]) + if ("Kick") + leave(uckey) + var/umob = get_mob_by_ckey(uckey) + var/datum/tgui/uui = SStgui.get_open_ui(umob, src) + uui?.close() + GLOB.deathmatch_game.ui_interact(umob) + return TRUE + if ("Transfer host") + if (host == uckey) + return FALSE + GLOB.deathmatch_game.passoff_lobby(host, uckey) + host = uckey + return TRUE + if ("Toggle observe") + var/umob = get_mob_by_ckey(uckey) + if (players[uckey]) + remove_ckey_from_play(uckey) + add_observer(umob, host == uckey) + else if (observers[uckey] && players.len < map.max_players) + remove_ckey_from_play(uckey) + add_player(umob, loadouts[1], host == uckey) + return TRUE + if ("change_map") + if (!(params["map"] in GLOB.deathmatch_game.maps)) + return FALSE + change_map(params["map"]) + return TRUE + if ("global_chat") + global_chat = !global_chat + return TRUE + if ("admin") // Admin functions + if (!check_rights(R_ADMIN)) + message_admins("[usr.key] has attempted to use admin functions in a deathmatch lobby!") + log_admin("[key_name(usr)] tried to use the deathmatch lobby admin functions without authorization.") + return + switch (params["func"]) + if ("Force start") + log_admin("[key_name(usr)] force started deathmatch lobby [host].") + start_game() + + diff --git a/code/modules/deathmatch/deathmatch_mapping.dm b/code/modules/deathmatch/deathmatch_mapping.dm new file mode 100644 index 00000000000..62eca161583 --- /dev/null +++ b/code/modules/deathmatch/deathmatch_mapping.dm @@ -0,0 +1,12 @@ +/area/deathmatch + name = "Deathmatch Arena" + requires_power = FALSE + has_gravity = STANDARD_GRAVITY + area_flags = UNIQUE_AREA | UNIQUE_AREA + +/area/deathmatch/fullbright + static_lighting = FALSE + base_lighting_alpha = 255 + +/obj/effect/landmark/deathmatch_player_spawn + name = "Deathmatch Player Spawner" diff --git a/code/modules/deathmatch/deathmatch_maps.dm b/code/modules/deathmatch/deathmatch_maps.dm new file mode 100644 index 00000000000..60594d903bb --- /dev/null +++ b/code/modules/deathmatch/deathmatch_maps.dm @@ -0,0 +1,148 @@ +/datum/lazy_template/deathmatch //deathmatch maps that have any possibility of the walls being destroyed should use indestructible walls, because baseturf moment + var/name + map_dir = "_maps/map_files/Deathmatch" + /// Map Description + var/desc = "" + var/min_players = 2 + var/max_players = 2 // TODO: make this automatic. + /// The map will end in this time + var/automatic_gameend_time = 8 MINUTES + /// List of allowed loadouts for this map, otherwise defaults to all loadouts + var/list/allowed_loadouts = list() + +/datum/lazy_template/deathmatch/ragecage + name = "Ragecage" + desc = "Fun for the whole family, the classic ragecage." + max_players = 4 + automatic_gameend_time = 4 MINUTES // its a 10x10 cage what are you guys doing in there + allowed_loadouts = list(/datum/outfit/deathmatch_loadout/assistant) + map_name = "ragecage" + key = "ragecage" + +/datum/lazy_template/deathmatch/maintenance + name = "Maint Mania" + desc = "Dark maintenance tunnels, floor pills, improvised weaponry and a bloody beatdown. Welcome to assistant utopia." + max_players = 8 + allowed_loadouts = list(/datum/outfit/deathmatch_loadout/assistant) + map_name = "Maint_Mania" + key = "Maint_Mania" + +/datum/lazy_template/deathmatch/osha_violator + name = "OSHA Violator" + desc = "What would Engineering be without an overly complicated engine, with conveyor belts, emitters and shield generators sprinkled about? That's right, not Engineering." + max_players = 10 + allowed_loadouts = list(/datum/outfit/deathmatch_loadout/assistant) + map_name = "OSHA_Violator" + key = "OSHA_Violator" + +/datum/lazy_template/deathmatch/the_brig + name = "The Brig" + desc = "A recreation of MetaStation Brig." + max_players = 12 + allowed_loadouts = list(/datum/outfit/deathmatch_loadout/assistant) + map_name = "The_Brig" + key = "The_Brig" + +/datum/lazy_template/deathmatch/shooting_range + name = "Shooting Range" + desc = "A simple room with a bunch of wooden barricades." + max_players = 6 + allowed_loadouts = list( + /datum/outfit/deathmatch_loadout/operative/ranged, + /datum/outfit/deathmatch_loadout/operative/melee, + ) + map_name = "shooting_range" + key = "shooting_range" + +/datum/lazy_template/deathmatch/securing + name = "SecuRing" + desc = "Presenting the Security Ring, ever wanted to shoot people with disablers? Well now you can." + max_players = 4 + allowed_loadouts = list(/datum/outfit/deathmatch_loadout/securing_sec) + map_name = "SecuRing" + key = "SecuRing" + +/datum/lazy_template/deathmatch/instagib + name = "Instagib" + desc = "EVERYONE GETS AN INSTAKILL RIFLE!" + max_players = 8 + allowed_loadouts = list(/datum/outfit/deathmatch_loadout/assistant/instagib) + map_name = "instagib" + key = "instagib" + +/datum/lazy_template/deathmatch/mech_madness + name = "Mech Madness" + desc = "Do you hate mechs? Yeah? Dont care! Go fight eachother!" + max_players = 4 + allowed_loadouts = list(/datum/outfit/deathmatch_loadout/operative) + map_name = "mech_madness" + key = "mech_madness" + +/datum/lazy_template/deathmatch/sniperelite + name = "Sniper Elite" + desc = "Sound of gunfire and screaming people make my day" + max_players = 8 + allowed_loadouts = list(/datum/outfit/deathmatch_loadout/operative/sniper) + map_name = "Sniper_elite" + key = "Sniper_elite" + +/datum/lazy_template/deathmatch/meatower + name = "Meat Tower" + desc = "There can only be one chef in this kitchen" + max_players = 8 + allowed_loadouts = list(/datum/outfit/deathmatch_loadout/chef) + map_name = "meatower" + key = "meatower" + +/datum/lazy_template/deathmatch/sunrise + name = "Sunrise" + desc = "DEHUMANIZE YOURSELF AND FACE TO BLOODSHED DEHUMANIZE YOURSELF AND FACE TO BLOODSHED DEHUMANIZE YOURSELF AND FACE TO BLOODSHED DEHUMANIZE YOURSELF AND FACE TO BLOODSHED" + max_players = 8 + allowed_loadouts = list(/datum/outfit/deathmatch_loadout/samurai) + map_name = "chinatown" + key = "chinatown" + +/datum/lazy_template/deathmatch/starwars + name = "Arena Station" + desc = "Choose your battler!" + max_players = 10 + allowed_loadouts = list( + /datum/outfit/deathmatch_loadout/battler/bloodminer, + /datum/outfit/deathmatch_loadout/battler/clown, + /datum/outfit/deathmatch_loadout/battler/cowboy, + /datum/outfit/deathmatch_loadout/battler/druid, + /datum/outfit/deathmatch_loadout/battler/enginer, + /datum/outfit/deathmatch_loadout/battler/janitor, + /datum/outfit/deathmatch_loadout/battler/northstar, + /datum/outfit/deathmatch_loadout/battler/raider, + /datum/outfit/deathmatch_loadout/battler/ripper, + /datum/outfit/deathmatch_loadout/battler/scientist, + /datum/outfit/deathmatch_loadout/battler/soldier, + /datum/outfit/deathmatch_loadout/battler/surgeon, + /datum/outfit/deathmatch_loadout/battler/tgcoder, + /datum/outfit/deathmatch_loadout/naked, + ) + map_name = "starwars" + key = "starwars" + +/datum/lazy_template/deathmatch/arenaplatform + name = "Underground Thunderdome" + desc = "An illegal underground thunderdome, for larger amounts of murder." + max_players = 15 + allowed_loadouts = list( + /datum/outfit/deathmatch_loadout/operative, + /datum/outfit/deathmatch_loadout/naked, + ) + map_name = "arena" + key = "arena" + +/datum/lazy_template/deathmatch/raidthebase + name = "Backalley" + desc = "You are not built for these streets." + max_players = 8 + allowed_loadouts = list( + /datum/outfit/deathmatch_loadout/assistant, + /datum/outfit/deathmatch_loadout/naked, + ) + map_name = "raidthebase" + key = "raidthebase" diff --git a/code/modules/economy/account.dm b/code/modules/economy/account.dm index 6bcad3f247c..77452c11d2b 100644 --- a/code/modules/economy/account.dm +++ b/code/modules/economy/account.dm @@ -49,6 +49,7 @@ /datum/bank_account/Destroy() if(add_to_accounts) SSeconomy.bank_accounts_by_id -= "[account_id]" + SSeconomy.bank_accounts_by_job[account_job] -= src QDEL_LIST(redeemed_coupons) return ..() @@ -70,6 +71,8 @@ if(SSeconomy.bank_accounts_by_id["[account_id]"]) stack_trace("Unable to find a unique account ID, substituting currently existing account of id [account_id].") SSeconomy.bank_accounts_by_id["[account_id]"] = src + if(account_job) + LAZYADD(SSeconomy.bank_accounts_by_job[account_job], src) /datum/bank_account/vv_edit_var(var_name, var_value) // just so you don't have to do it manually var/old_id = account_id diff --git a/code/modules/events/aurora_caelus.dm b/code/modules/events/aurora_caelus.dm index 8efe01169ce..34681825502 100644 --- a/code/modules/events/aurora_caelus.dm +++ b/code/modules/events/aurora_caelus.dm @@ -52,7 +52,7 @@ set_starlight(aurora_color) for(var/area/station/service/kitchen/affected_area in GLOB.areas) - for(var/turf/open/kitchen_floor in affected_area.get_contained_turfs()) + for(var/turf/open/kitchen_floor in affected_area.get_turfs_from_all_zlevels()) kitchen_floor.set_light(l_color = aurora_color) /datum/round_event/aurora_caelus/end() @@ -108,9 +108,9 @@ var/walked_range = LERP(start_range, end_range, i/5) var/walked_power = LERP(start_power, end_power, i/5) for(var/area/station/service/kitchen/affected_area in GLOB.areas) - for(var/turf/open/kitchen_floor in affected_area.get_contained_turfs()) + for(var/turf/open/kitchen_floor in affected_area.get_turfs_from_all_zlevels()) kitchen_floor.set_light(walked_range, walked_power, walked_color) sleep(8 SECONDS) for(var/area/station/service/kitchen/affected_area in GLOB.areas) - for(var/turf/open/kitchen_floor in affected_area.get_contained_turfs()) + for(var/turf/open/kitchen_floor in affected_area.get_turfs_from_all_zlevels()) kitchen_floor.set_light(end_range, end_power, end_color) diff --git a/code/modules/events/brain_trauma.dm b/code/modules/events/brain_trauma.dm index 5d6a5a7d520..b9d1c4188b5 100644 --- a/code/modules/events/brain_trauma.dm +++ b/code/modules/events/brain_trauma.dm @@ -22,7 +22,7 @@ if(!(H.mind.assigned_role.job_flags & JOB_CREW_MEMBER)) //please stop giving my centcom admin gimmicks full body paralysis continue // NOVA EDIT ADD START - Station/area event candidate filtering - if(engaged_role_play_check(H, station = TRUE, dorms = TRUE)) + if(!engaged_role_play_check(H, station = TRUE, dorms = TRUE)) continue // NOVA EDIT ADD END traumatize(H) diff --git a/code/modules/events/bureaucratic_error.dm b/code/modules/events/bureaucratic_error.dm index 578adc9be30..db6371d6498 100644 --- a/code/modules/events/bureaucratic_error.dm +++ b/code/modules/events/bureaucratic_error.dm @@ -13,21 +13,17 @@ priority_announce("A recent bureaucratic error in the Organic Resources Department may result in personnel shortages in some departments and redundant staffing in others.", "Paperwork Mishap Alert") /datum/round_event/bureaucratic_error/start() - var/list/jobs = SSjob.joinable_occupations.Copy() - /* - if(prob(33)) // Only allows latejoining as a single role. Add latejoin AI bluespace pods for fun later. + var/list/jobs = SSjob.get_valid_overflow_jobs() + /* NOVA EDIT REMOVAL START - No more locking off jobs + if(prob(33)) // Only allows latejoining as a single role. var/datum/job/overflow = pick_n_take(jobs) overflow.spawn_positions = -1 overflow.total_positions = -1 // Ensures infinite slots as this role. Assistant will still be open for those that cant play it. for(var/job in jobs) var/datum/job/current = job - if(!current.allow_bureaucratic_error) - continue current.total_positions = 0 - else // Adds/removes a random amount of job slots from all jobs. - */ // NOVA EDIT REMOVAL - no more locking off jobs + return + */ // NOVA EDIT REMOVAL END + // Adds/removes a random amount of job slots from all jobs. for(var/datum/job/current as anything in jobs) - if(!current.allow_bureaucratic_error) - continue - var/ran = rand(1,4) // NOVA EDIT - no more locking off jobs - current.total_positions = max(current.total_positions + ran, 0) + current.total_positions = max(current.total_positions + rand(1,4), 0) // NOVA EDIT - no more locking off jobs - ORIGINAL: current.total_positions = max(current.total_positions + rand(-2,4), 0) diff --git a/code/modules/events/disease_outbreak.dm b/code/modules/events/disease_outbreak.dm index c5e5ac399df..36290343050 100644 --- a/code/modules/events/disease_outbreak.dm +++ b/code/modules/events/disease_outbreak.dm @@ -64,7 +64,7 @@ if(!is_station_level(candidate.z) && !is_mining_level(candidate.z)) //Diseases can't really spread if the vector is in deep space. continue // NOVA EDIT ADDITION START - Station/area event candidate filtering. - if(engaged_role_play_check(candidate, station = TRUE, dorms = TRUE)) + if(!engaged_role_play_check(candidate, station = TRUE, dorms = TRUE)) continue // NOVA EDIT ADDITION END disease_candidates += candidate diff --git a/code/modules/events/fake_virus.dm b/code/modules/events/fake_virus.dm index e23ff73c07f..adea3a7edbd 100644 --- a/code/modules/events/fake_virus.dm +++ b/code/modules/events/fake_virus.dm @@ -13,7 +13,7 @@ if(!(victim.mind?.assigned_role.job_flags & JOB_CREW_MEMBER)) continue // NOVA EDIT ADD START - Station/area event candidate filtering - if(engaged_role_play_check(fake_virus_victims, station = TRUE, dorms = TRUE)) + if(!engaged_role_play_check(fake_virus_victims, station = TRUE, dorms = TRUE)) continue // NOVA EDIT ADD END fake_virus_victims += victim diff --git a/code/modules/events/heart_attack.dm b/code/modules/events/heart_attack.dm index 9d9e4c76cd9..83c4f606aa6 100644 --- a/code/modules/events/heart_attack.dm +++ b/code/modules/events/heart_attack.dm @@ -35,7 +35,7 @@ if(!(candidate.mind.assigned_role.job_flags & JOB_CREW_MEMBER))//only crewmembers can get one, a bit unfair for some ghost roles and it wastes the event continue // NOVA EDIT ADD START - Station/area event candidate filtering - if(engaged_role_play_check(candidate, station = TRUE, dorms = TRUE)) + if(!engaged_role_play_check(candidate, station = TRUE, dorms = TRUE)) continue // NOVA EDIT ADD END if(candidate.satiety <= -60 && !candidate.has_status_effect(/datum/status_effect/exercised)) //Multiple junk food items recently //No foodmaxxing for the achievement diff --git a/code/modules/events/holiday/vday.dm b/code/modules/events/holiday/vday.dm index 706b3d7767a..7eb89e84bc0 100644 --- a/code/modules/events/holiday/vday.dm +++ b/code/modules/events/holiday/vday.dm @@ -13,86 +13,126 @@ max_occurrences = 1 earliest_start = 0 MINUTES category = EVENT_CATEGORY_HOLIDAY - description = "Puts people on dates! They must protect each other. Sometimes a vengeful third wheel spawns." - -/datum/round_event/valentines/start() - ..() - for(var/mob/living/carbon/human/H in GLOB.alive_mob_list) - H.put_in_hands(new /obj/item/valentine) - var/obj/item/storage/backpack/b = locate() in H.contents - new /obj/item/food/candyheart(b) - new /obj/item/storage/fancy/heart_box(b) - - var/list/valentines = list() - for(var/mob/living/M in GLOB.player_list) - var/turf/current_turf = get_turf(M.mind.current) - if(!M.stat && M.mind && !current_turf.onCentCom()) - valentines |= M - - - while(valentines.len) - var/mob/living/L = pick_n_take(valentines) - if(valentines.len) - var/mob/living/date = pick_n_take(valentines) - - - forge_valentines_objective(L, date) - forge_valentines_objective(date, L) + description = "Puts people on dates! They must protect each other. \ + Some dates will have third wheels, and any odd ones out will be given the role of 'heartbreaker'." + /// If TRUE, any odd candidate out will be given the role of "heartbreaker" and will be tasked with ruining the dates. + var/heartbreaker = TRUE + /// Probability that any given pair will be given a third wheel candidate + var/third_wheel_chance = 4 + /// Items to give to all valentines + var/list/items_to_give_out = list( + /obj/item/paper/valentine, + /obj/item/storage/fancy/heart_box, + /obj/item/food/candyheart, + ) + +/datum/round_event/valentines/proc/is_valid_valentine(mob/living/guy) + if(guy.stat == DEAD) + return FALSE + if(isnull(guy.mind)) + return FALSE + if(guy.onCentCom()) + return FALSE + return TRUE + +/datum/round_event/valentines/proc/give_valentines_things(mob/living/guy) + var/datum/round_event_control/valentines/controller = control + if(!istype(controller)) + return + + var/obj/item/storage/backpack/bag = locate() in guy.contents + if(isnull(bag)) + return + + var/atom/drop_loc = guy.drop_location() + for(var/thing_type in controller.items_to_give_out) + var/obj/item/thing = new thing_type(drop_loc) + if(!bag.atom_storage.attempt_insert(thing, override = TRUE, force = STORAGE_SOFT_LOCKED)) + guy.put_in_hands(thing) + +/datum/round_event/valentines/proc/forge_valentines_objective(mob/living/lover, mob/living/date) + var/datum/antagonist/valentine/valentine = new() + valentine.date = date.mind + lover.mind.special_role = "valentine" + lover.mind.add_antag_datum(valentine) //These really should be teams but i can't be assed to incorporate third wheels right now - if(valentines.len && prob(4)) - var/mob/living/notgoodenough = pick_n_take(valentines) - forge_valentines_objective(notgoodenough, date) - else - L.mind.add_antag_datum(/datum/antagonist/heartbreaker) +/datum/round_event/valentines/proc/forge_third_wheel(mob/living/sad_one, mob/living/date_one, mob/living/date_two) + var/datum/antagonist/valentine/third_wheel/third_wheel = new() + third_wheel.date = pick(date_one.mind, date_two.mind) + sad_one.mind.special_role = "valentine" + sad_one.mind.add_antag_datum(third_wheel) -/proc/forge_valentines_objective(mob/living/lover,mob/living/date) - lover.mind.special_role = "valentine" - var/datum/antagonist/valentine/V = new - V.date = date.mind - lover.mind.add_antag_datum(V) //These really should be teams but i can't be assed to incorporate third wheels right now +/datum/round_event/valentines/start() + var/datum/round_event_control/valentines/controller = control + if(!istype(controller)) + return + + var/list/candidates = list() + for(var/mob/living/player in GLOB.player_list) + if(!is_valid_valentine(player)) + continue + candidates += player + + var/list/mob/living/candidates_pruned = SSpolling.poll_candidates( + question = "Do you want a Valentine?", + group = candidates, + poll_time = 30 SECONDS, + flash_window = FALSE, + start_signed_up = TRUE, + pic_source = /obj/item/storage/fancy/heart_box, + custom_response_messages = list( + POLL_RESPONSE_SIGNUP = "You have signed up for a date!", + POLL_RESPONSE_ALREADY_SIGNED = "You are already signed up for a date.", + POLL_RESPONSE_NOT_SIGNED = "You aren't signed up for a date.", + POLL_RESPONSE_TOO_LATE_TO_UNREGISTER = "It's too late to decide against going on a date.", + POLL_RESPONSE_UNREGISTERED = "You deicde against going on a date.", + ), + ) + + for(var/mob/living/second_check as anything in candidates_pruned) + if(is_valid_valentine(second_check)) + continue + candidates_pruned -= second_check + + if(length(candidates_pruned) == 0) + return + if(length(candidates_pruned) == 1) + to_chat(candidates_pruned[1], span_warning("You are the only one who wanted a Valentine...")) + return + + while(length(candidates_pruned) >= 2) + var/mob/living/date_one = pick_n_take(candidates_pruned) + var/mob/living/date_two = pick_n_take(candidates_pruned) + give_valentines_things(date_one) + give_valentines_things(date_two) + forge_valentines_objective(date_one, date_two) + forge_valentines_objective(date_two, date_one) + + if((length(candidates_pruned) == 1 && !controller.heartbreaker) || (length(candidates_pruned) && prob(controller.third_wheel_chance))) + var/mob/living/third_wheel = pick_n_take(candidates_pruned) + give_valentines_things(third_wheel) + forge_third_wheel(third_wheel, date_one, date_two) + // Third wheel starts with a bouquet because that's funny + var/third_wheel_bouquet = pick(typesof(/obj/item/bouquet)) + var/obj/item/bouquet = new third_wheel_bouquet(third_wheel.loc) + third_wheel.put_in_hands(bouquet) + + if(controller.heartbreaker && length(candidates_pruned) == 1) + candidates_pruned[1].mind.add_antag_datum(/datum/antagonist/heartbreaker) /datum/round_event/valentines/announce(fake) priority_announce("It's Valentine's Day! Give a valentine to that special someone!") -/obj/item/valentine +/obj/item/paper/valentine name = "valentine" desc = "A Valentine's card! Wonder what it says..." icon = 'icons/obj/toys/playing_cards.dmi' icon_state = "sc_Ace of Hearts_syndicate" // shut up // bye felicia - var/message = "A generic message of love or whatever." - resistance_flags = FLAMMABLE - w_class = WEIGHT_CLASS_TINY + show_written_words = FALSE -/obj/item/valentine/Initialize(mapload) - . = ..() - message = pick(strings(VALENTINE_FILE, "valentines")) - -/obj/item/valentine/attackby(obj/item/W, mob/user, params) - ..() - if(istype(W, /obj/item/pen) || istype(W, /obj/item/toy/crayon)) - if(!user.can_write(W)) - return - var/recipient = tgui_input_text(user, "Who is receiving this valentine?", "To:", max_length = MAX_NAME_LEN) - var/sender = tgui_input_text(user, "Who is sending this valentine?", "From:", max_length = MAX_NAME_LEN) - if(!user.can_perform_action(src)) - return - if(recipient && sender) - name = "valentine - To: [recipient] From: [sender]" - -/obj/item/valentine/examine(mob/user) - . = ..() - if(in_range(user, src) || isobserver(user)) - if( !(ishuman(user) || isobserver(user) || issilicon(user)) ) - user << browse("[name][stars(message)]", "window=[name]") - onclose(user, "[name]") - else - user << browse("[name][message]", "window=[name]") - onclose(user, "[name]") - else - . += span_notice("It is too far away.") - -/obj/item/valentine/attack_self(mob/user) - user.examinate(src) +/obj/item/paper/valentine/Initialize(mapload) + default_raw_text = pick_list(VALENTINE_FILE, "valentines") || "A generic message of love or whatever." + return ..() /obj/item/food/candyheart name = "candy heart" diff --git a/code/modules/events/shuttle_loan/shuttle_loan_event.dm b/code/modules/events/shuttle_loan/shuttle_loan_event.dm index e0b5cccb1ee..ac5faa6971f 100644 --- a/code/modules/events/shuttle_loan/shuttle_loan_event.dm +++ b/code/modules/events/shuttle_loan/shuttle_loan_event.dm @@ -80,7 +80,7 @@ var/list/blocked_shutte_turfs = list() var/list/area/shuttle/shuttle_areas = SSshuttle.supply.shuttle_areas for(var/area/shuttle/shuttle_area as anything in shuttle_areas) - for(var/turf/open/floor/shuttle_turf in shuttle_area.get_contained_turfs()) + for(var/turf/open/floor/shuttle_turf in shuttle_area.get_turfs_from_all_zlevels()) if(shuttle_turf.is_blocked_turf()) blocked_shutte_turfs += shuttle_turf continue diff --git a/code/modules/events/space_vines/vine_event.dm b/code/modules/events/space_vines/vine_event.dm index 46cf91a33e6..03350abdb09 100644 --- a/code/modules/events/space_vines/vine_event.dm +++ b/code/modules/events/space_vines/vine_event.dm @@ -38,7 +38,7 @@ var/obj/structure/spacevine/vine = new() for(var/area/station/hallway/area in GLOB.areas) - for(var/turf/open/floor in area.get_contained_turfs()) + for(var/turf/open/floor in area.get_turfs_from_all_zlevels()) if(floor.Enter(vine)) turfs += floor diff --git a/code/modules/events/wizard/rpgtitles.dm b/code/modules/events/wizard/rpgtitles.dm index d503892dc57..9512c298dea 100644 --- a/code/modules/events/wizard/rpgtitles.dm +++ b/code/modules/events/wizard/rpgtitles.dm @@ -43,7 +43,7 @@ GLOBAL_DATUM(rpgtitle_controller, /datum/rpgtitle_controller) //we must prepare for the mother of all strings new_crewmember.maptext_height = max(new_crewmember.maptext_height, 32) new_crewmember.maptext_width = max(new_crewmember.maptext_width, 112) - new_crewmember.maptext_x = -24 - new_crewmember.base_pixel_x + new_crewmember.maptext_x = -38 - new_crewmember.base_pixel_x new_crewmember.maptext_y = -32 //list of lists involving strings related to a biotype flag, their position in the list equal to the position they were defined as bitflags. diff --git a/code/modules/explorer_drone/exodrone.dm b/code/modules/explorer_drone/exodrone.dm index 5c73f5755df..5754ccc4a5e 100644 --- a/code/modules/explorer_drone/exodrone.dm +++ b/code/modules/explorer_drone/exodrone.dm @@ -70,9 +70,8 @@ GLOBAL_LIST_EMPTY(exodrone_launchers) else name_counter[name] = 1 GLOB.exodrones += src - /// Cargo storage - create_storage(max_slots = EXODRONE_CARGO_SLOTS) - atom_storage.set_holdable(cant_hold_list = GLOB.blacklisted_cargo_types) + // Cargo storage + create_storage(max_slots = EXODRONE_CARGO_SLOTS, canthold = GLOB.blacklisted_cargo_types) /obj/item/exodrone/Destroy() . = ..() diff --git a/code/modules/fishing/admin.dm b/code/modules/fishing/admin.dm index ad97ab890b4..d1d2c0ae2c5 100644 --- a/code/modules/fishing/admin.dm +++ b/code/modules/fishing/admin.dm @@ -28,10 +28,7 @@ .["rod_types"] = typesof(/obj/item/fishing_rod) .["hook_types"] = typesof(/obj/item/fishing_hook) .["line_types"] = typesof(/obj/item/fishing_line) - var/list/spot_keys = list() - for(var/key in GLOB.preset_fish_sources) - spot_keys += key - .["spot_types"] = subtypesof(/datum/fish_source) + spot_keys + .["spot_types"] = subtypesof(/datum/fish_source) /datum/fishing_calculator/ui_data(mob/user) return list("info" = current_table) @@ -45,22 +42,20 @@ var/bait_type = text2path(params["bait"]) var/hook_type = text2path(params["hook"]) var/line_type = text2path(params["line"]) - var/spot_type = text2path(params["spot"]) || params["spot"] //can be also key from presets - - //validate here against nonsense values - var/datum/fish_source/spot - if(ispath(spot_type)) - spot = new spot_type - else - spot = GLOB.preset_fish_sources[spot_type] + var/datum/fish_source/spot = GLOB.preset_fish_sources[text2path(params["spot"])] var/obj/item/fishing_rod/temporary_rod = new rod_type + qdel(temporary_rod.bait) + qdel(temporary_rod.line) + qdel(temporary_rod.hook) + if(bait_type) - temporary_rod.bait = new bait_type + temporary_rod.set_slot(new bait_type(temporary_rod), ROD_SLOT_BAIT) if(hook_type) - temporary_rod.hook = new hook_type + temporary_rod.set_slot(new hook_type(temporary_rod), ROD_SLOT_HOOK) if(line_type) - temporary_rod.line = new line_type + temporary_rod.set_slot(new line_type(temporary_rod), ROD_SLOT_HOOK) + var/result_table = list() var/modified_table = spot.get_modified_fish_table(temporary_rod,user) for(var/result_type in spot.fish_table) // through this not modified to display 0 chance ones too @@ -71,5 +66,6 @@ info["count"] = spot.fish_counts[result_type] || "Infinite" result_table += list(info) current_table = result_table + qdel(temporary_rod) return TRUE diff --git a/code/modules/fishing/aquarium/aquarium.dm b/code/modules/fishing/aquarium/aquarium.dm index 88d0791acdf..48c7b8e24e9 100644 --- a/code/modules/fishing/aquarium/aquarium.dm +++ b/code/modules/fishing/aquarium/aquarium.dm @@ -1,7 +1,13 @@ #define AQUARIUM_LAYER_STEP 0.01 /// Aquarium content layer offsets -#define AQUARIUM_MIN_OFFSET 0.01 +#define AQUARIUM_MIN_OFFSET 0.02 #define AQUARIUM_MAX_OFFSET 1 +/// The layer of the glass overlay +#define AQUARIUM_GLASS_LAYER 0.01 +/// The layer of the aquarium pane borders +#define AQUARIUM_BORDERS_LAYER AQUARIUM_MAX_OFFSET + AQUARIUM_LAYER_STEP +/// Layer for stuff rendered below the glass overlay +#define AQUARIUM_BELOW_GLASS_LAYER 0.01 /obj/structure/aquarium name = "aquarium" @@ -10,7 +16,7 @@ anchored = TRUE icon = 'icons/obj/aquarium.dmi' - icon_state = "aquarium_base" + icon_state = "aquarium_map" integrity_failure = 0.3 @@ -27,9 +33,6 @@ /// Can fish reproduce in this quarium. var/allow_breeding = FALSE - var/glass_icon_state = "aquarium_glass" - var/broken_glass_icon_state = "aquarium_glass_broken" - //This is the area where fish can swim var/aquarium_zone_min_px = 2 var/aquarium_zone_max_px = 31 @@ -55,6 +58,7 @@ create_reagents(6, SEALED_CONTAINER) RegisterSignal(reagents, COMSIG_REAGENTS_NEW_REAGENT, PROC_REF(start_autofeed)) AddComponent(/datum/component/plumbing/aquarium) + ADD_KEEP_TOGETHER(src, INNATE_TRAIT) /obj/structure/aquarium/proc/track_if_fish(atom/source, atom/initialized) SIGNAL_HANDLER @@ -108,16 +112,18 @@ */ //optional todo: hook up sending surface changed on aquarium changing layers switch(layer_type) + if(AQUARIUM_LAYER_MODE_BEHIND_GLASS) + return layer + AQUARIUM_BELOW_GLASS_LAYER if(AQUARIUM_LAYER_MODE_BOTTOM) return layer + AQUARIUM_MIN_OFFSET if(AQUARIUM_LAYER_MODE_TOP) return layer + AQUARIUM_MAX_OFFSET if(AQUARIUM_LAYER_MODE_AUTO) - var/chosen_layer = layer + AQUARIUM_MIN_OFFSET + AQUARIUM_LAYER_STEP - while((chosen_layer in used_layers) && (chosen_layer <= layer + AQUARIUM_MAX_OFFSET)) + var/chosen_layer = AQUARIUM_MIN_OFFSET + AQUARIUM_LAYER_STEP + while((chosen_layer in used_layers) && (chosen_layer <= AQUARIUM_MAX_OFFSET)) chosen_layer += AQUARIUM_LAYER_STEP used_layers += chosen_layer - return chosen_layer + return layer + chosen_layer /obj/structure/aquarium/proc/free_layer(value) used_layers -= value @@ -129,14 +135,23 @@ .[AQUARIUM_PROPERTIES_PY_MIN] = aquarium_zone_min_py .[AQUARIUM_PROPERTIES_PY_MAX] = aquarium_zone_max_py +/obj/structure/aquarium/update_icon() + . = ..() + ///"aquarium_map" is used for mapping, so mappers can tell what it's. + icon_state = "aquarium_base" + /obj/structure/aquarium/update_overlays() . = ..() if(panel_open) . += "panel" - //Glass overlay goes on top of everything else. - var/mutable_appearance/glass_overlay = mutable_appearance(icon,broken ? broken_glass_icon_state : glass_icon_state,layer=AQUARIUM_MAX_OFFSET-1) - . += glass_overlay + ///The glass overlay + var/suffix = fluid_type == AQUARIUM_FLUID_AIR ? "air" : "water" + if(broken) + suffix += "_broken" + . += mutable_appearance(icon, "aquarium_glass_cracks", layer = layer + AQUARIUM_BORDERS_LAYER) + . += mutable_appearance(icon, "aquarium_glass_[suffix]", layer = layer + AQUARIUM_GLASS_LAYER) + . += mutable_appearance(icon, "aquarium_borders", layer = layer + AQUARIUM_BORDERS_LAYER) /obj/structure/aquarium/examine(mob/user) . = ..() @@ -338,11 +353,14 @@ #undef AQUARIUM_LAYER_STEP #undef AQUARIUM_MIN_OFFSET #undef AQUARIUM_MAX_OFFSET +#undef AQUARIUM_GLASS_LAYER +#undef AQUARIUM_BORDERS_LAYER +#undef AQUARIUM_BELOW_GLASS_LAYER /obj/structure/aquarium/prefilled/Initialize(mapload) . = ..() - new /obj/item/aquarium_prop/rocks(src) + new /obj/item/aquarium_prop/sand(src) new /obj/item/aquarium_prop/seaweed(src) new /obj/item/fish/goldfish(src) diff --git a/code/modules/fishing/aquarium/aquarium_kit.dm b/code/modules/fishing/aquarium/aquarium_kit.dm index d7547e92ef6..3aafa178f26 100644 --- a/code/modules/fishing/aquarium/aquarium_kit.dm +++ b/code/modules/fishing/aquarium/aquarium_kit.dm @@ -127,10 +127,10 @@ icon_state = "seaweeds_back" layer_mode = AQUARIUM_LAYER_MODE_BOTTOM -/obj/item/aquarium_prop/rockfloor - name = "rock floor" - icon_state = "rockfloor" - layer_mode = AQUARIUM_LAYER_MODE_BOTTOM +/obj/item/aquarium_prop/sand + name = "aquarium sand" + icon_state = "sand" + layer_mode = AQUARIUM_LAYER_MODE_BEHIND_GLASS /obj/item/aquarium_prop/treasure name = "tiny treasure chest" diff --git a/code/modules/fishing/fish/fish_types.dm b/code/modules/fishing/fish/fish_types.dm index 5ff62266ad9..51fcf61307a 100644 --- a/code/modules/fishing/fish/fish_types.dm +++ b/code/modules/fishing/fish/fish_types.dm @@ -203,6 +203,8 @@ name = "needlefish" desc = "A tiny, transparent fish which resides in large schools in the oceans of Tizira. A common food for other, larger fish." icon_state = "needlefish" + dedicated_in_aquarium_icon_state = "needlefish_small" + sprite_width = 7 required_fluid_type = AQUARIUM_FLUID_SALTWATER stable_population = 12 fillet_type = null @@ -216,6 +218,9 @@ name = "armorfish" desc = "A small shellfish native to Tizira's oceans, known for its exceptionally hard shell. Consumed similarly to prawns." icon_state = "armorfish" + dedicated_in_aquarium_icon_state = "armorfish_small" + sprite_height = 5 + sprite_width = 6 required_fluid_type = AQUARIUM_FLUID_SALTWATER stable_population = 10 fillet_type = /obj/item/food/fishmeat/armorfish @@ -231,8 +236,6 @@ dedicated_in_aquarium_icon_state = "chrab_small" sprite_height = 9 sprite_width = 8 - source_height = 9 - source_width = 8 stable_population = 4 feeding_frequency = 15 MINUTES random_case_rarity = FISH_RARITY_RARE diff --git a/code/modules/fishing/fishing_equipment.dm b/code/modules/fishing/fishing_equipment.dm index 3f34222ad87..4b30951d89a 100644 --- a/code/modules/fishing/fishing_equipment.dm +++ b/code/modules/fishing/fishing_equipment.dm @@ -8,9 +8,10 @@ /obj/item/fishing_line name = "fishing line reel" - desc = "Simple fishing line." + desc = "A fishing line. In spite of its simplicity, the added length will make fishing a speck easier." icon = 'icons/obj/fishing.dmi' icon_state = "reel_blue" + w_class = WEIGHT_CLASS_SMALL ///A list of traits that this fishing line has, checked by fish traits and the minigame. var/list/fishing_line_traits /// Color of the fishing line @@ -39,23 +40,74 @@ /obj/item/fishing_line/sinew name = "fishing sinew" - desc = "An all-natural fishing line made of stretched out sinew." - icon = 'icons/obj/fishing.dmi' + desc = "An all-natural fishing line made of stretched out sinew. A bit stiff, but usable to fish in extreme enviroments." icon_state = "reel_sinew" + fishing_line_traits = FISHING_LINE_REINFORCED|FISHING_LINE_STIFF line_color = "#d1cca3" -/datum/crafting_recipe/sinew_line - name = "Sinew Fishing Line Reel" - result = /obj/item/fishing_line/sinew - reqs = list(/obj/item/stack/sheet/sinew = 2) - time = 2 SECONDS - category = CAT_TOOLS +/** + * A special line reel that let you skip the biting phase of the minigame, netting you a completion bonus, + * and thrown hooked items at you, so you can rapidly catch them from afar. + * It may also work on mobs if the right hook is attached. + */ +/obj/item/fishing_line/auto_reel + name = "fishing line auto-reel" + desc = "A fishing line that automatically starts reeling in fish the moment they bite. Also good for hurling things at yourself." + icon_state = "reel_auto" + fishing_line_traits = FISHING_LINE_AUTOREEL + line_color = "#F88414" + +/obj/item/fishing_line/auto_reel/Initialize(mapload) + . = ..() + RegisterSignal(src, COMSIG_FISHING_EQUIPMENT_SLOTTED, PROC_REF(line_equipped)) + +/obj/item/fishing_line/auto_reel/proc/line_equipped(datum/source, obj/item/fishing_rod/rod) + SIGNAL_HANDLER + RegisterSignal(rod, COMSIG_FISHING_ROD_HOOKED_ITEM, PROC_REF(on_hooked_item)) + RegisterSignal(src, COMSIG_MOVABLE_MOVED, PROC_REF(on_removed)) + +/obj/item/fishing_line/auto_reel/proc/on_removed(atom/movable/source, atom/old_loc, dir, forced) + SIGNAL_HANDLER + UnregisterSignal(src, COMSIG_MOVABLE_MOVED) + UnregisterSignal(old_loc, COMSIG_FISHING_ROD_HOOKED_ITEM) + +/obj/item/fishing_line/auto_reel/proc/on_hooked_item(obj/item/fishing_rod/source, atom/target, mob/living/user) + SIGNAL_HANDLER + if(!ismovable(target)) + return + var/atom/movable/movable_target = target + var/please_be_gentle = FALSE + var/atom/destination + var/datum/callback/throw_callback + if(isliving(movable_target) || !isitem(movable_target)) + destination = get_step_towards(user, target) + please_be_gentle = TRUE + else + destination = user + throw_callback = CALLBACK(src, PROC_REF(clear_hitby_signal), movable_target) + RegisterSignal(movable_target, COMSIG_ATOM_PREHITBY, PROC_REF(catch_it_chucklenut)) + + if(!movable_target.safe_throw_at(destination, source.cast_range, 2, callback = throw_callback, gentle = please_be_gentle)) + UnregisterSignal(movable_target, COMSIG_ATOM_PREHITBY) + else + playsound(src, 'sound/weapons/batonextend.ogg', 50, TRUE) + +/obj/item/fishing_line/auto_reel/proc/catch_it_chucklenut(obj/item/source, atom/hit_atom, datum/thrownthing/throwingdatum) + SIGNAL_HANDLER + var/mob/living/user = throwingdatum.initial_target.resolve() + if(QDELETED(user) || hit_atom != user) + return + if(user.try_catch_item(source, skip_throw_mode_check = TRUE, try_offhand = TRUE)) + return COMSIG_HIT_PREVENTED + +/obj/item/fishing_line/auto_reel/proc/clear_hitby_signal(obj/item/item) + UnregisterSignal(item, COMSIG_ATOM_PREHITBY) // Hooks /obj/item/fishing_hook name = "simple fishing hook" - desc = "A simple fishing hook." + desc = "A simple fishing hook. Don't expect to hook onto anything without one." icon = 'icons/obj/fishing.dmi' icon_state = "hook" w_class = WEIGHT_CLASS_TINY @@ -85,6 +137,13 @@ /obj/item/fishing_hook/proc/get_hook_bonus_multiplicative(fish_type) return FISHING_DEFAULT_HOOK_BONUS_MULTIPLICATIVE +///Check if tha target can be caught by the hook +/obj/item/fishing_hook/proc/can_be_hooked(atom/target) + return isitem(target) + +///Any special effect when hooking a target that's not managed by the fishing rod. +/obj/item/fishing_hook/proc/hook_attached(atom/target, obj/item/fishing_rod/rod) + return /** * Is there a reason why this hook couldn't fish in target_fish_source? @@ -133,6 +192,13 @@ rod_overlay_icon_state = "hook_rescue_overlay" chasm_detritus_type = /datum/chasm_detritus/restricted/bodies +/obj/item/fishing_hook/rescue/can_be_hooked(atom/target) + return ..() || isliving(target) + +/obj/item/fishing_hook/rescue/hook_attached(atom/target, obj/item/fishing_rod/rod) + if(isliving(target)) + var/mob/living/living_target = target + living_target.apply_status_effect(/datum/status_effect/grouped/hooked, rod.fishing_line) // This hook can only fish in chasms. /obj/item/fishing_hook/rescue/reason_we_cant_fish(datum/fish_source/target_fish_source) @@ -155,13 +221,6 @@ desc = "A simple hook carved from sharpened bone" icon_state = "hook_bone" -/datum/crafting_recipe/bone_hook - name = "Goliath Bone Hook" - result = /obj/item/fishing_hook/bone - reqs = list(/obj/item/stack/sheet/bone = 1) - time = 2 SECONDS - category = CAT_TOOLS - /obj/item/fishing_hook/stabilized name = "gyro-stabilized hook" desc = "A quirky hook that grants the user a better control of the tool, allowing them to move the bait both and up and down when reeling in, otherwise keeping it in place." @@ -177,9 +236,18 @@ name = "jawed hook" desc = "Despite hints of rust, this gritty beartrap-like hook hybrid manages to look even more threating than the real thing. May neptune have mercy of whatever gets caught in its jaws." icon_state = "jaws" + w_class = WEIGHT_CLASS_NORMAL fishing_hook_traits = FISHING_HOOK_NO_ESCAPE|FISHING_HOOK_NO_ESCAPE|FISHING_HOOK_KILL rod_overlay_icon_state = "hook_jaws_overlay" +/obj/item/fishing_hook/jaws/can_be_hooked(atom/target) + return ..() || isliving(target) + +/obj/item/fishing_hook/jaws/hook_attached(atom/target, obj/item/fishing_rod/rod) + if(isliving(target)) + var/mob/living/living_target = target + living_target.apply_status_effect(/datum/status_effect/grouped/hooked/jaws, rod.fishing_line) + /obj/item/storage/toolbox/fishing name = "fishing toolbox" desc = "Contains everything you need for your fishing trip." @@ -190,15 +258,15 @@ /obj/item/storage/toolbox/fishing/Initialize(mapload) . = ..() // Can hold fishing rod despite the size - var/static/list/exception_cache = typecacheof( + var/static/list/exception_cache = typecacheof(list( /obj/item/fishing_rod, /obj/item/fishing_line, - ) + )) atom_storage.exception_hold = exception_cache /obj/item/storage/toolbox/fishing/PopulateContents() new /obj/item/bait_can/worm(src) - new /obj/item/fishing_rod(src) + new /obj/item/fishing_rod/unslotted(src) new /obj/item/fishing_hook(src) new /obj/item/fishing_line(src) @@ -214,7 +282,7 @@ atom_storage.max_specific_storage = WEIGHT_CLASS_SMALL //It can still hold a fishing rod /obj/item/storage/toolbox/fishing/small/PopulateContents() - new /obj/item/fishing_rod(src) + new /obj/item/fishing_rod/unslotted(src) new /obj/item/fishing_hook(src) new /obj/item/fishing_line(src) diff --git a/code/modules/fishing/fishing_minigame.dm b/code/modules/fishing/fishing_minigame.dm index 81e8b3a6943..e2108848b0b 100644 --- a/code/modules/fishing/fishing_minigame.dm +++ b/code/modules/fishing/fishing_minigame.dm @@ -18,9 +18,15 @@ // Acceleration mod when bait is over fish #define FISH_ON_BAIT_ACCELERATION_MULT 0.6 /// The minimum velocity required for the bait to bounce -#define BAIT_MIN_VELOCITY_BOUNCE 200 +#define BAIT_MIN_VELOCITY_BOUNCE 150 /// The extra deceleration of velocity that happens when the bait switches direction -#define BAIT_DECELERATION_MULT 2 +#define BAIT_DECELERATION_MULT 1.5 + +/// Reduce initial completion rate depending on difficulty +#define MAX_FISH_COMPLETION_MALUS 15 +/// The window of time between biting phase and back to baiting phase +#define BITING_TIME_WINDOW 4 SECONDS + ///Defines to know how the bait is moving on the minigame slider. #define REELING_STATE_IDLE 0 @@ -156,8 +162,14 @@ trait.minigame_mod(rod, user, src) /// Enable special parameters if(rod.line) + completion_gain += 1 // Any fishing line will provide a small boost by default if(rod.line.fishing_line_traits & FISHING_LINE_BOUNCY) completion_loss -= 2 + if(rod.line.fishing_line_traits & FISHING_LINE_STIFF) + completion_loss += 1 + completion_gain -= 1 + if(rod.line.fishing_line_traits & FISHING_LINE_AUTOREEL) + special_effects |= FISHING_MINIGAME_AUTOREEL if(rod.hook) if(rod.hook.fishing_hook_traits & FISHING_HOOK_WEIGHTED) bait_bounce_mult = 0.1 @@ -176,6 +188,9 @@ difficulty += comp.fish_source.calculate_difficulty(reward_path, rod, user, src) difficulty = clamp(round(difficulty), 1, 100) + if(difficulty > FISHING_EASY_DIFFICULTY) + completion -= round(MAX_FISH_COMPLETION_MALUS * (difficulty/100), 1) + if(HAS_TRAIT(user, TRAIT_REVEAL_FISH) || (user.mind && HAS_TRAIT(user.mind, TRAIT_REVEAL_FISH))) fish_icon = GLOB.specific_fish_icons[reward_path] || "fish" @@ -255,7 +270,7 @@ return if(phase == WAIT_PHASE) //Reset wait send_alert("miss!") - start_baiting_phase() + start_baiting_phase(TRUE) else if(phase == BITING_PHASE) start_minigame_phase() return COMSIG_MOB_CANCEL_CLICKON @@ -298,14 +313,19 @@ if(!QDELETED(src)) qdel(src) -/datum/fishing_challenge/proc/start_baiting_phase() +/datum/fishing_challenge/proc/start_baiting_phase(penalty = FALSE) + var/wait_time + if(penalty) + wait_time = min(timeleft(next_phase_timer) + rand(3 SECONDS, 5 SECONDS), 30 SECONDS) + else + wait_time = rand(1 SECONDS, 30 SECONDS) + if(special_effects & FISHING_MINIGAME_AUTOREEL && wait_time >= 15 SECONDS) + wait_time = max(wait_time - 7.5 SECONDS, 15 SECONDS) deltimer(next_phase_timer) phase = WAIT_PHASE //Bobbing animation animate(lure, pixel_y = 1, time = 1 SECONDS, loop = -1, flags = ANIMATION_RELATIVE) animate(pixel_y = -1, time = 1 SECONDS, flags = ANIMATION_RELATIVE) - //Setup next phase - var/wait_time = rand(1 SECONDS, 30 SECONDS) next_phase_timer = addtimer(CALLBACK(src, PROC_REF(start_biting_phase)), wait_time, TIMER_STOPPABLE) /datum/fishing_challenge/proc/start_biting_phase() @@ -338,9 +358,11 @@ send_alert("!!!") animate(lure, pixel_y = 3, time = 5, loop = -1, flags = ANIMATION_RELATIVE) animate(pixel_y = -3, time = 5, flags = ANIMATION_RELATIVE) + if(special_effects & FISHING_MINIGAME_AUTOREEL) + start_minigame_phase(auto_reel = TRUE) + return // Setup next phase - var/wait_time = rand(3 SECONDS, 6 SECONDS) - next_phase_timer = addtimer(CALLBACK(src, PROC_REF(start_baiting_phase)), wait_time, TIMER_STOPPABLE) + next_phase_timer = addtimer(CALLBACK(src, PROC_REF(start_baiting_phase)), BITING_TIME_WINDOW, TIMER_STOPPABLE) ///The damage dealt per second to the fish when FISHING_MINIGAME_RULE_KILL is active. #define FISH_DAMAGE_PER_SECOND 2 @@ -362,7 +384,21 @@ var/damage = CEILING((world.time - start_time)/10 * FISH_DAMAGE_PER_SECOND, 1) reward.adjust_health(reward.health - damage) -/datum/fishing_challenge/proc/start_minigame_phase() +/datum/fishing_challenge/proc/start_minigame_phase(auto_reel = FALSE) + if(auto_reel) + completion *= 1.3 + else + var/time_left = timeleft(next_phase_timer) + switch(time_left) + if(0 to BITING_TIME_WINDOW - 3 SECONDS) + completion *= 0.65 + if(BITING_TIME_WINDOW - 3 SECONDS to BITING_TIME_WINDOW - 2 SECONDS) + completion *= 0.82 + if(BITING_TIME_WINDOW - 1 SECONDS to BITING_TIME_WINDOW - 0.5 SECONDS) + completion *= 1.2 + if(BITING_TIME_WINDOW - 0.5 SECONDS to BITING_TIME_WINDOW) + completion *= 1.4 + completion = round(completion, 1) if(!prepare_minigame_hud()) return phase = MINIGAME_PHASE @@ -687,3 +723,5 @@ #undef REELING_STATE_UP #undef REELING_STATE_DOWN +#undef MAX_FISH_COMPLETION_MALUS +#undef BITING_TIME_WINDOW diff --git a/code/modules/fishing/fishing_rod.dm b/code/modules/fishing/fishing_rod.dm index 1abba8e414c..0578ffb0789 100644 --- a/code/modules/fishing/fishing_rod.dm +++ b/code/modules/fishing/fishing_rod.dm @@ -1,6 +1,4 @@ -#define ROD_SLOT_BAIT "bait" -#define ROD_SLOT_LINE "line" -#define ROD_SLOT_HOOK "hook" +#define FISHING_ROD_REEL_CAST_RANGE 2 /obj/item/fishing_rod name = "fishing rod" @@ -16,18 +14,18 @@ w_class = WEIGHT_CLASS_HUGE /// How far can you cast this - var/cast_range = 5 + var/cast_range = 3 /// Fishing minigame difficulty modifier (additive) var/difficulty_modifier = 0 /// Explaination of rod functionality shown in the ui var/ui_description = "A classic fishing rod, with no special qualities." var/obj/item/bait - var/obj/item/fishing_line/line - var/obj/item/fishing_hook/hook + var/obj/item/fishing_line/line = /obj/item/fishing_line + var/obj/item/fishing_hook/hook = /obj/item/fishing_hook /// Currently hooked item for item reeling - var/obj/item/currently_hooked_item + var/atom/movable/currently_hooked /// Fishing line visual for the hooked item var/datum/beam/fishing_line/fishing_line @@ -41,15 +39,26 @@ ///The name of the icon state of the reel overlay var/reel_overlay = "reel_overlay" + ///Prevents spamming the line casting, without affecting the player's click cooldown. + COOLDOWN_DECLARE(casting_cd) + /obj/item/fishing_rod/Initialize(mapload) . = ..() register_context() register_item_context() + + if(ispath(bait)) + set_slot(new bait(src), ROD_SLOT_BAIT) + if(ispath(hook)) + set_slot(new hook(src), ROD_SLOT_HOOK) + if(ispath(line)) + set_slot(new line(src), ROD_SLOT_LINE) + update_appearance() /obj/item/fishing_rod/add_context(atom/source, list/context, obj/item/held_item, mob/user) if(src == held_item) - if(currently_hooked_item) + if(currently_hooked) context[SCREENTIP_CONTEXT_LMB] = "Reel in" context[SCREENTIP_CONTEXT_RMB] = "Modify" return CONTEXTUAL_SCREENTIP_SET @@ -57,14 +66,11 @@ /obj/item/fishing_rod/add_item_context(obj/item/source, list/context, atom/target, mob/living/user) . = ..() - if(currently_hooked_item) + if(currently_hooked) context[SCREENTIP_CONTEXT_LMB] = "Reel in" return CONTEXTUAL_SCREENTIP_SET return NONE -/obj/item/fishing_rod/Destroy(force) - return ..() - /obj/item/fishing_rod/examine(mob/user) . = ..() var/list/equipped_stuff = list() @@ -72,35 +78,12 @@ equipped_stuff += "[icon2html(line, user)] [line.name]" if(hook) equipped_stuff += "[icon2html(hook, user)] [hook.name]" + if(bait) + equipped_stuff += "[icon2html(bait, user)] [bait] as bait." if(length(equipped_stuff)) . += span_notice("It has \a [english_list(equipped_stuff)] equipped.") - if(bait) - . += span_notice("\a [icon2html(bait, user)] [bait] is being used as bait.") - else - . += span_warning("It doesn't have any bait attached. Fishing will be more tedious!") - . += span_notice("Right-Click in your active hand to access its slots UI") - -/** - * Catch weight modifier for the given fish_type (or FISHING_DUD) - * and source, multiplicative. Called before `additive_fish_bonus()`. - */ -/obj/item/fishing_rod/proc/multiplicative_fish_bonus(fish_type, datum/fish_source/source) - if(!hook) - return FISHING_DEFAULT_HOOK_BONUS_MULTIPLICATIVE - - return hook.get_hook_bonus_multiplicative(fish_type) - - -/** - * Catch weight modifier for the given fish_type (or FISHING_DUD) - * and source, additive. Called after `multiplicative_fish_bonus()`. - */ -/obj/item/fishing_rod/proc/additive_fish_bonus(fish_type, datum/fish_source/source) - if(!hook) - return FISHING_DEFAULT_HOOK_BONUS_ADDITIVE - - return hook.get_hook_bonus_additive(fish_type) - + if(!bait) + . += span_warning("It doesn't have a bait attached to it. Fishing will be more tedious!") /** * Is there a reason why this fishing rod couldn't fish in target_fish_source? @@ -126,16 +109,34 @@ update_icon() /obj/item/fishing_rod/interact(mob/user) - if(currently_hooked_item) + if(currently_hooked) reel(user) /obj/item/fishing_rod/proc/reel(mob/user) - //Could use sound here for feedback - if(do_after(user, 1 SECONDS, currently_hooked_item)) - // Should probably respect and used force move later - step_towards(currently_hooked_item, get_turf(src)) - if(get_dist(currently_hooked_item,get_turf(src)) < 1) + if(DOING_INTERACTION_WITH_TARGET(user, currently_hooked)) + return + playsound(src, SFX_REEL, 50, vary = FALSE) + if(!do_after(user, 0.8 SECONDS, currently_hooked, timed_action_flags = IGNORE_USER_LOC_CHANGE|IGNORE_TARGET_LOC_CHANGE, extra_checks = CALLBACK(src, PROC_REF(fishing_line_check)))) + return + if(currently_hooked.anchored || currently_hooked.move_resist >= MOVE_FORCE_STRONG) + balloon_alert(user, "[currently_hooked.p_they()] won't budge!") + return + //Try to move it 'till it's under the user's feet, then try to pick it up + if(isitem(currently_hooked)) + step_towards(currently_hooked, get_turf(src)) + if(currently_hooked.loc == user.loc) + user.put_in_inactive_hand(currently_hooked) + QDEL_NULL(fishing_line) + //Not an item, so just delete the line if it's adjacent to the user. + else if(get_dist(currently_hooked,get_turf(src)) > 1) + step_towards(currently_hooked, get_turf(src)) + if(get_dist(currently_hooked,get_turf(src)) <= 1) QDEL_NULL(fishing_line) + else + QDEL_NULL(fishing_line) + +/obj/item/fishing_rod/proc/fishing_line_check() + return !QDELETED(fishing_line) /obj/item/fishing_rod/attack_self_secondary(mob/user, modifiers) . = ..() @@ -144,9 +145,11 @@ /obj/item/fishing_rod/pre_attack(atom/targeted_atom, mob/living/user, params) . = ..() /// Reel in if able - if(currently_hooked_item) + if(currently_hooked) reel(user) return TRUE + if(!hook) + balloon_alert(user, "install a hook first!") SEND_SIGNAL(targeted_atom, COMSIG_PRE_FISHING) /// Generates the fishing line visual from the current user to the target and updates inhands @@ -171,7 +174,7 @@ var/mob/user = loc user.update_held_items() fishing_line = null - currently_hooked_item = null + currently_hooked = null /obj/item/fishing_rod/dropped(mob/user, silent) . = ..() @@ -179,19 +182,15 @@ /// Hooks the item /obj/item/fishing_rod/proc/hook_item(mob/user, atom/target_atom) - if(currently_hooked_item) + if(currently_hooked) return - if(!can_be_hooked(target_atom)) + if(!hook.can_be_hooked(target_atom)) return - currently_hooked_item = target_atom + currently_hooked = target_atom create_fishing_line(target_atom) + hook.hook_attached(target_atom, src) SEND_SIGNAL(src, COMSIG_FISHING_ROD_HOOKED_ITEM, target_atom, user) -/// Checks what can be hooked -/obj/item/fishing_rod/proc/can_be_hooked(atom/movable/target) - // Could be made dependent on actual hook, ie magnet to hook metallic items - return isitem(target) - // Checks fishing line for interruptions and range /obj/item/fishing_rod/proc/check_los(datum/beam/source) SIGNAL_HANDLER @@ -206,7 +205,7 @@ . |= AFTERATTACK_PROCESSED_ITEM /// Reel in if able - if(currently_hooked_item) + if(currently_hooked) reel(user) return . @@ -216,7 +215,15 @@ ///Called by afterattack(). If the line to whatever that is is clear and we're not already busy, try fishing in it /obj/item/fishing_rod/proc/cast_line(atom/target, mob/user, proximity_flag) - if(casting || currently_hooked_item || proximity_flag || !CheckToolReach(user, target, cast_range)) + if(casting || currently_hooked || proximity_flag) + return + if(!hook) + balloon_alert(user, "install a hook first!") + return + if(!CheckToolReach(user, target, cast_range)) + balloon_alert(user, "cannot reach there!") + return + if(!COOLDOWN_FINISHED(src, casting_cd)) return /// Annoyingly pre attack is only called in melee SEND_SIGNAL(target, COMSIG_PRE_FISHING) @@ -230,11 +237,12 @@ cast_projectile.impacted = list(user = TRUE) cast_projectile.preparePixelProjectile(target, user) cast_projectile.fire() + COOLDOWN_START(src, casting_cd, 1 SECONDS) /// Called by hook projectile when hitting things /obj/item/fishing_rod/proc/hook_hit(atom/atom_hit_by_hook_projectile) var/mob/user = loc - if(!istype(user)) + if(!hook || !istype(user)) return if(SEND_SIGNAL(atom_hit_by_hook_projectile, COMSIG_FISHING_ROD_CAST, src, user) & FISHING_ROD_CAST_HANDLED) return @@ -328,6 +336,8 @@ data["hook_name"] = format_text(hook?.name) data["hook_icon"] = hook != null ? icon2base64(icon(hook.icon, hook.icon_state)) : null + data["busy"] = fishing_line + data["description"] = ui_description return data @@ -357,9 +367,7 @@ if("slot_action") // Simple click with empty hand to remove, click with item to insert/switch var/obj/item/held_item = user.get_active_held_item() - if(held_item == src) - return - use_slot(params["slot"], user, held_item) + use_slot(params["slot"], user, held_item == src ? null : held_item) return TRUE /// Ideally this will be replaced with generic slotted storage datum + display @@ -377,23 +385,16 @@ // Trying to remove the item if(!new_item && current_item) user.put_in_hands(current_item) - update_icon() - return + balloon_alert(user, "[slot] removed") // Trying to insert item into empty slot - if(new_item && !current_item) + else if(new_item && !current_item) if(!slot_check(new_item, slot)) return if(user.transferItemToLoc(new_item,src)) - switch(slot) - if(ROD_SLOT_BAIT) - bait = new_item - if(ROD_SLOT_HOOK) - hook = new_item - if(ROD_SLOT_LINE) - line = new_item - update_icon() + set_slot(new_item, slot) + balloon_alert(user, "[slot] installed") /// Trying to swap item - if(new_item && current_item) + else if(new_item && current_item) if(!slot_check(new_item,slot)) return if(user.transferItemToLoc(new_item,src)) @@ -405,33 +406,49 @@ if(ROD_SLOT_LINE) line = new_item user.put_in_hands(current_item) - update_icon() + balloon_alert(user, "[slot] swapped") + if(new_item) + SEND_SIGNAL(new_item, COMSIG_FISHING_EQUIPMENT_SLOTTED, src) + + update_icon() + playsound(src, 'sound/items/click.ogg', 50, TRUE) + +///assign an item to the given slot and its standard effects, while Exited() should handle unsetting the slot. +/obj/item/fishing_rod/proc/set_slot(obj/item/equipment, slot) + switch(slot) + if(ROD_SLOT_BAIT) + bait = equipment + if(ROD_SLOT_HOOK) + hook = equipment + if(ROD_SLOT_LINE) + line = equipment + cast_range += FISHING_ROD_REEL_CAST_RANGE /obj/item/fishing_rod/Exited(atom/movable/gone, direction) . = ..() if(gone == bait) bait = null if(gone == line) + cast_range -= FISHING_ROD_REEL_CAST_RANGE line = null if(gone == hook) + QDEL_NULL(fishing_line) hook = null +///Found in the fishing toolbox (the hook and line are separate items) +/obj/item/fishing_rod/unslotted + hook = null + line = null + /obj/item/fishing_rod/bone name = "bone fishing rod" desc = "A humble rod, made with whatever happened to be on hand." icon_state = "fishing_rod_bone" reel_overlay = "reel_bone" default_line_color = "red" - -/datum/crafting_recipe/bone_rod - name = "Bone Fishing Rod" - result = /obj/item/fishing_rod/bone - time = 5 SECONDS - reqs = list(/obj/item/stack/sheet/leather = 1, - /obj/item/stack/sheet/sinew = 2, - /obj/item/stack/sheet/bone = 2) - category = CAT_TOOLS + line = null //sinew line (usable to fish in lava) not included + hook = /obj/item/fishing_hook/bone /obj/item/fishing_rod/telescopic name = "telescopic fishing rod" @@ -442,8 +459,6 @@ w_class = WEIGHT_CLASS_NORMAL ui_description = "A collapsible fishing rod that can fit within a backpack." reel_overlay = "reel_telescopic" - ///Whether the rod is exteded or not. Tied to the transforming element. - var/active = FALSE ///The force of the item when extended. var/active_force = 8 @@ -454,30 +469,31 @@ RegisterSignal(src, COMSIG_TRANSFORMING_ON_TRANSFORM, PROC_REF(on_transform)) /obj/item/fishing_rod/telescopic/reason_we_cant_fish(datum/fish_source/target_fish_source) - if(!active) + if(!HAS_TRAIT(src, TRAIT_TRANSFORM_ACTIVE)) return "You need to extend your fishing rod before you can cast the line." return ..() /obj/item/fishing_rod/telescopic/cast_line(atom/target, mob/user, proximity_flag) - if(!active) - to_chat(user, "You need to extend your fishing rod before you can cast the line.") + if(!HAS_TRAIT(src, TRAIT_TRANSFORM_ACTIVE)) + if(!proximity_flag) + balloon_alert(user, "extend the rod first!") return return ..() /obj/item/fishing_rod/telescopic/get_fishing_overlays() - if(!active) + if(!HAS_TRAIT(src, TRAIT_TRANSFORM_ACTIVE)) return list() return ..() /obj/item/fishing_rod/telescopic/get_fishing_worn_overlays(mutable_appearance/standing, isinhands, icon_file) - if(!active) + if(!HAS_TRAIT(src, TRAIT_TRANSFORM_ACTIVE)) return list() return ..() ///Stops the fishing rod from being collapsed while fishing. /obj/item/fishing_rod/telescopic/proc/pre_transform(obj/item/source, mob/user, active) SIGNAL_HANDLER - if(active) + if(HAS_TRAIT(src, TRAIT_TRANSFORM_ACTIVE)) return //the fishing minigame uses the attack_self signal to let the user end it early without having to drop the rod. if(HAS_TRAIT(user, TRAIT_GONE_FISHING)) @@ -487,14 +503,12 @@ /obj/item/fishing_rod/telescopic/proc/on_transform(obj/item/source, mob/user, active) SIGNAL_HANDLER - src.active = active inhand_icon_state = active ? "rod" : null // When inactive, there is no inhand icon_state. if(user) balloon_alert(user, active ? "extended" : "collapsed") playsound(src, 'sound/weapons/batonextend.ogg', 50, TRUE) update_appearance(UPDATE_OVERLAYS) - if(fishing_line) - QDEL_NULL(fishing_line) + QDEL_NULL(fishing_line) return COMPONENT_NO_DEFAULT_MESSAGE /obj/item/fishing_rod/telescopic/master @@ -505,6 +519,9 @@ icon_state = "fishing_rod_master" reel_overlay = "reel_master" active_force = 13 //It's that sturdy + cast_range = 5 + line = /obj/item/fishing_line/bouncy + hook = /obj/item/fishing_hook/weighted /obj/item/fishing_rod/tech name = "advanced fishing rod" @@ -512,6 +529,7 @@ ui_description = "This rod has an infinite supply of synth-bait. Also doubles as an Experi-Scanner for fish." icon_state = "fishing_rod_science" reel_overlay = "reel_science" + bait = /obj/item/food/bait/doughball/synthetic /obj/item/fishing_rod/tech/Initialize(mapload) . = ..() @@ -529,10 +547,6 @@ experiment_signals = fishing_signals, \ ) - var/obj/item/food/bait/doughball/synthetic/infinite_supply_of_bait = new(src) - bait = infinite_supply_of_bait - update_icon() - /obj/item/fishing_rod/tech/examine(mob/user) . = ..() . += span_notice("Alt-Click to access the Experiment Configuration UI") @@ -561,6 +575,12 @@ var/obj/item/fishing_rod/owner var/datum/beam/our_line +/obj/projectile/fishing_cast/fire(angle, atom/direct_target) + if(owner.hook) + icon_state = owner.hook.icon_state + transform = transform.Scale(1, -1) + return ..() + /obj/projectile/fishing_cast/Impact(atom/hit_atom) . = ..() owner.hook_hit(hit_atom) @@ -634,3 +654,5 @@ if(NORTH) override_origin_pixel_x = lefthand ? lefthand_n_px : righthand_n_px override_origin_pixel_y = lefthand ? lefthand_n_py : righthand_n_py + +#undef FISHING_ROD_REEL_CAST_RANGE diff --git a/code/modules/fishing/sources/_fish_source.dm b/code/modules/fishing/sources/_fish_source.dm index 120348038f1..887b8f3a2a3 100644 --- a/code/modules/fishing/sources/_fish_source.dm +++ b/code/modules/fishing/sources/_fish_source.dm @@ -240,8 +240,8 @@ GLOBAL_LIST(fishing_property_cache) var/list/final_table = fish_table.Copy() for(var/result in final_table) - final_table[result] *= rod.multiplicative_fish_bonus(result, src) - final_table[result] += rod.additive_fish_bonus(result, src) //Decide on order here so it can be multiplicative + final_table[result] *= rod.hook?.get_hook_bonus_multiplicative(result) + final_table[result] += rod.hook?.get_hook_bonus_additive(result)//Decide on order here so it can be multiplicative if(ispath(result, /obj/item/fish)) //Modify fish roll chance var/obj/item/fish/caught_fish = result diff --git a/code/modules/fishing/sources/source_types.dm b/code/modules/fishing/sources/source_types.dm index edab6dc0db5..5cdc2d2b841 100644 --- a/code/modules/fishing/sources/source_types.dm +++ b/code/modules/fishing/sources/source_types.dm @@ -262,7 +262,7 @@ fish_counts = list( /obj/item/storage/wallet/money = 2, ) - fishing_difficulty = FISHING_DEFAULT_DIFFICULTY - 5 //For beginners + fishing_difficulty = FISHING_EASY_DIFFICULTY //For beginners /datum/fish_source/holographic catalog_description = "Holographic water" @@ -275,7 +275,7 @@ /obj/item/fish/holo/checkered = 5, /obj/item/fish/holo/halffish = 5, ) - fishing_difficulty = FISHING_DEFAULT_DIFFICULTY - 5 + fishing_difficulty = FISHING_EASY_DIFFICULTY /datum/fish_source/holographic/reason_we_cant_fish(obj/item/fishing_rod/rod, mob/fisherman, atom/parent) . = ..() @@ -332,7 +332,7 @@ /mob/living/basic/frog = 1, /mob/living/basic/axolotl = 1, ) - fishing_difficulty = FISHING_DEFAULT_DIFFICULTY - 10 + fishing_difficulty = FISHING_EASY_DIFFICULTY - 5 /datum/fish_source/hydro_tray/reason_we_cant_fish(obj/item/fishing_rod/rod, mob/fisherman, atom/parent) if(!istype(parent, /obj/machinery/hydroponics/constructable)) diff --git a/code/modules/food_and_drinks/machinery/coffeemaker.dm b/code/modules/food_and_drinks/machinery/coffeemaker.dm index 5f6ef410413..8490b2b5cfb 100644 --- a/code/modules/food_and_drinks/machinery/coffeemaker.dm +++ b/code/modules/food_and_drinks/machinery/coffeemaker.dm @@ -45,10 +45,9 @@ coffeepot = new /obj/item/reagent_containers/cup/coffeepot(src) cartridge = new /obj/item/coffee_cartridge(src) -/obj/machinery/coffeemaker/deconstruct() +/obj/machinery/coffeemaker/on_deconstruction(disassembled) coffeepot?.forceMove(drop_location()) cartridge?.forceMove(drop_location()) - return ..() /obj/machinery/coffeemaker/Destroy() QDEL_NULL(coffeepot) @@ -489,7 +488,7 @@ /obj/item/storage/fancy/coffee_cart_rack/Initialize(mapload) . = ..() atom_storage.max_slots = 4 - atom_storage.set_holdable(list(/obj/item/coffee_cartridge)) + atom_storage.set_holdable(/obj/item/coffee_cartridge) /* * impressa coffee maker diff --git a/code/modules/food_and_drinks/machinery/deep_fryer.dm b/code/modules/food_and_drinks/machinery/deep_fryer.dm index 15f39d3ac28..c9b9fca044b 100644 --- a/code/modules/food_and_drinks/machinery/deep_fryer.dm +++ b/code/modules/food_and_drinks/machinery/deep_fryer.dm @@ -61,11 +61,10 @@ GLOBAL_LIST_INIT(oilfry_blacklisted_items, typecacheof(list( QDEL_NULL(frying) return ..() -/obj/machinery/deepfryer/deconstruct(disassembled) +/obj/machinery/deepfryer/on_deconstruction(disassembled) // This handles nulling out frying via exited if(frying) frying.forceMove(drop_location()) - return ..() /obj/machinery/deepfryer/RefreshParts() . = ..() diff --git a/code/modules/food_and_drinks/machinery/food_cart.dm b/code/modules/food_and_drinks/machinery/food_cart.dm index da92d040f27..e068b7b8ce2 100644 --- a/code/modules/food_and_drinks/machinery/food_cart.dm +++ b/code/modules/food_and_drinks/machinery/food_cart.dm @@ -8,7 +8,7 @@ anchored = FALSE use_power = NO_POWER_USE req_access = list(ACCESS_KITCHEN) - obj_flags = /obj::obj_flags | NO_DECONSTRUCTION + obj_flags = parent_type::obj_flags | NO_DECONSTRUCTION var/unpacked = FALSE var/obj/machinery/griddle/stand/cart_griddle var/obj/machinery/smartfridge/food/cart_smartfridge diff --git a/code/modules/food_and_drinks/machinery/gibber.dm b/code/modules/food_and_drinks/machinery/gibber.dm index 43493c3c969..315a34f2286 100644 --- a/code/modules/food_and_drinks/machinery/gibber.dm +++ b/code/modules/food_and_drinks/machinery/gibber.dm @@ -173,7 +173,9 @@ if(ishuman(occupant)) var/mob/living/carbon/human/gibee = occupant - if(gibee.dna && gibee.dna.species) + if(prob(40) && (sourcejob in list(JOB_SECURITY_OFFICER,JOB_WARDEN,JOB_HEAD_OF_SECURITY))) + typeofmeat = /obj/item/food/meat/slab/pig + else if(gibee.dna && gibee.dna.species) typeofmeat = gibee.dna.species.meat typeofskin = gibee.dna.species.skinned_type diff --git a/code/modules/food_and_drinks/machinery/griddle.dm b/code/modules/food_and_drinks/machinery/griddle.dm index 5fe48cca50a..80646a8ab09 100644 --- a/code/modules/food_and_drinks/machinery/griddle.dm +++ b/code/modules/food_and_drinks/machinery/griddle.dm @@ -151,23 +151,21 @@ default_unfasten_wrench(user, tool, time = 2 SECONDS) return ITEM_INTERACT_SUCCESS -/obj/machinery/griddle/proc/on_storage_dump(datum/source, obj/item/storage_source, mob/user) +/obj/machinery/griddle/proc/on_storage_dump(datum/source, datum/storage/storage, mob/user) SIGNAL_HANDLER - for(var/obj/item/to_dump in storage_source) - if(to_dump.loc != storage_source) - continue + for(var/obj/item/to_dump in storage.real_location) if(griddled_objects.len >= max_items) break - if(!storage_source.atom_storage.attempt_remove(to_dump, src, silent = TRUE)) + if(!storage.attempt_remove(to_dump, src, silent = TRUE)) continue to_dump.pixel_x = to_dump.base_pixel_x + rand(-5, 5) to_dump.pixel_y = to_dump.base_pixel_y + rand(-5, 5) AddToGrill(to_dump, user) - to_chat(user, span_notice("You dump out [storage_source] onto [src].")) + to_chat(user, span_notice("You dump out [storage.parent] onto [src].")) return STORAGE_DUMP_HANDLED /obj/machinery/griddle/process(seconds_per_tick) diff --git a/code/modules/food_and_drinks/machinery/grill.dm b/code/modules/food_and_drinks/machinery/grill.dm index 9ca42de4ee6..e812a1c890e 100644 --- a/code/modules/food_and_drinks/machinery/grill.dm +++ b/code/modules/food_and_drinks/machinery/grill.dm @@ -78,7 +78,6 @@ ..() /obj/machinery/grill/process(seconds_per_tick) - ..() update_appearance() if(grill_fuel <= 0) return @@ -90,7 +89,11 @@ smoke.start() if(grilled_item) SEND_SIGNAL(grilled_item, COMSIG_ITEM_GRILL_PROCESS, src, seconds_per_tick) - grill_time += seconds_per_tick + if(QDELETED(grilled_item)) + grilled_item = null + finish_grill() + return + grill_time += seconds_per_tick * 10 //convert to deciseconds grilled_item.reagents.add_reagent(/datum/reagent/consumable/char, 0.5 * seconds_per_tick) grill_fuel -= GRILL_FUELUSAGE_ACTIVE * seconds_per_tick grilled_item.AddComponent(/datum/component/sizzle) @@ -106,13 +109,11 @@ if(default_unfasten_wrench(user, I) != CANT_UNFASTEN) return TRUE -/obj/machinery/grill/deconstruct(disassembled = TRUE) +/obj/machinery/grill/on_deconstruction(disassembled) if(grilled_item) finish_grill() - if(!(obj_flags & NO_DECONSTRUCTION)) - new /obj/item/stack/sheet/iron(loc, 5) - new /obj/item/stack/rods(loc, 5) - ..() + new /obj/item/stack/sheet/iron(loc, 5) + new /obj/item/stack/rods(loc, 5) /obj/machinery/grill/attack_ai(mob/user) return @@ -127,9 +128,16 @@ /obj/machinery/grill/proc/finish_grill() if(!QDELETED(grilled_item)) - if(grill_time >= 20) + var/time_limit = 20 SECONDS + //when items grill themselves in their own unique ways we want to follow their constraints + var/datum/component/grillable/custom_grilling = grilled_item.GetComponent(/datum/component/grillable) + if(!isnull(custom_grilling)) + time_limit = custom_grilling.required_cook_time + + if(grill_time >= time_limit) grilled_item.AddElement(/datum/element/grilled_item, grill_time) UnregisterSignal(grilled_item, COMSIG_ITEM_GRILLED) + grill_time = 0 grill_loop.stop() diff --git a/code/modules/food_and_drinks/machinery/icecream_vat.dm b/code/modules/food_and_drinks/machinery/icecream_vat.dm index af5dbc5528d..e5742418c14 100644 --- a/code/modules/food_and_drinks/machinery/icecream_vat.dm +++ b/code/modules/food_and_drinks/machinery/icecream_vat.dm @@ -1,4 +1,10 @@ -#define PREFILL_AMOUNT 5 +///How many units of a reagent is needed to make a cone. +#define CONE_REAGENET_NEEDED 1 + +///The vat is set to dispense ice cream. +#define VAT_MODE_ICECREAM "ice cream" +///The vat is set to dispense cones. +#define VAT_MODE_CONES "cones" /obj/machinery/icecream_vat name = "ice cream vat" @@ -10,12 +16,20 @@ use_power = NO_POWER_USE layer = BELOW_OBJ_LAYER max_integrity = 300 - interaction_flags_machine = INTERACT_MACHINE_WIRES_IF_OPEN|INTERACT_MACHINE_ALLOW_SILICON|INTERACT_MACHINE_OPEN_SILICON|INTERACT_MACHINE_SET_MACHINE - var/list/product_types = list() + + ///Which mode the icecream vat is set to dispense, VAT_MODE_ICECREAM or VAT_MODE_CONES + var/vat_mode = VAT_MODE_ICECREAM + ///Boolean on whether or not to add 'icecream_vat_reagents' into the icecream vat on Initialize. + var/preinstall_reagents = TRUE + ///The selected flavor of ice cream that we'll dispense when hit with an ice cream cone. var/selected_flavour = ICE_CREAM_VANILLA - var/obj/item/reagent_containers/beaker + ///The beaker inside of the vat used to make custom ice cream. + var/obj/item/reagent_containers/custom_ice_cream_beaker + ///List of ice creams as icons used for the radial menu. + var/static/list/ice_cream_icons /// List of prototypes of dispensable ice cream cones. path as key, instance as assoc. var/static/list/obj/item/food/icecream/cone_prototypes + ///List of all reagenets the icecream vat will spawn with, if preinstall_reagents is TRUE. var/static/list/icecream_vat_reagents = list( /datum/reagent/consumable/milk = 6, /datum/reagent/consumable/korta_milk = 6, @@ -36,6 +50,9 @@ /datum/reagent/consumable/cherryjelly = 6, ) +/obj/machinery/icecream_vat/no_preinstalled_reagents + preinstall_reagents = FALSE + /obj/machinery/icecream_vat/Initialize(mapload) . = ..() @@ -45,169 +62,210 @@ var/obj/item/food/icecream/cone = new cone_path if(cone.ingredients) cone_prototypes[cone_path] = cone - cone.ingredients_text = "(Ingredients: [reagent_paths_list_to_text(cone.ingredients)])" else + stack_trace("Ice cream cone [cone] (TYPE: [cone_path]) has been found without ingredients, please make a bug report about this.") qdel(cone) + if(!ice_cream_icons) + ice_cream_icons = list() + for(var/flavor in GLOB.ice_cream_flavours) + var/datum/ice_cream_flavour/flavor_datum = GLOB.ice_cream_flavours[flavor] + if(flavor_datum.hidden) + continue + ice_cream_icons[flavor] = make_ice_cream_color(flavor_datum) - create_reagents(300, NO_REACT | OPENCONTAINER) + RegisterSignal(src, COMSIG_ATOM_REAGENT_EXAMINE, PROC_REF(allow_reagent_scan)) + + create_reagents(300, NO_REACT|TRANSPARENT) reagents.chem_temp = T0C //So ice doesn't melt - for(var/flavour in GLOB.ice_cream_flavours) - if(GLOB.ice_cream_flavours[flavour].hidden) - continue - product_types[flavour] = PREFILL_AMOUNT - for(var/cone in cone_prototypes) - product_types[cone] = PREFILL_AMOUNT + register_context() - for(var/reagent in icecream_vat_reagents) - reagents.add_reagent(reagent, icecream_vat_reagents[reagent], reagtemp = T0C) + if(preinstall_reagents) + for(var/reagent in icecream_vat_reagents) + reagents.add_reagent(reagent, icecream_vat_reagents[reagent], reagtemp = T0C) -/obj/machinery/icecream_vat/ui_interact(mob/user) +/obj/machinery/icecream_vat/Exited(atom/movable/gone, direction) . = ..() - var/dat - dat += "ICE CREAM
    " - dat += "Dispensing: [selected_flavour] icecream

    " - for(var/flavour in GLOB.ice_cream_flavours) - if(GLOB.ice_cream_flavours[flavour].hidden) - continue - dat += "[capitalize(flavour)] ice cream: Select Make x5 [product_types[flavour]] scoops left[GLOB.ice_cream_flavours[flavour].ingredients_text].
    " - dat += "
    CONES
    " - for(var/cone in cone_prototypes) - dat += "[capitalize(cone_prototypes[cone].name)]s: Dispense Make x5 [product_types[cone]] cones left[cone_prototypes[cone].ingredients_text].
    " - dat += "
    " - if(beaker) - dat += "BEAKER CONTENT
    " - for(var/datum/reagent/R in beaker.reagents.reagent_list) - dat += "[R.name]: [R.volume]u
    " - dat += "Refill from beaker
    " - dat += "
    " - dat += "VAT CONTENT
    " - for(var/datum/reagent/R in reagents.reagent_list) - dat += "[R.name]: [R.volume]" - dat += "Purge
    " - dat += "Refresh Close" - - var/datum/browser/popup = new(user, "icecreamvat","Icecream Vat", 700, 500, src) - popup.set_content(dat) - popup.open() - -/obj/machinery/icecream_vat/attackby(obj/item/O, mob/user, params) - if(is_reagent_container(O) && !(O.item_flags & ABSTRACT) && O.is_open_container()) - . = TRUE //no afterattack - var/obj/item/reagent_containers/B = O - if(!user.transferItemToLoc(B, src)) - return - replace_beaker(user, B) - to_chat(user, span_notice("You add [B] to [src].")) - updateUsrDialog() - update_appearance() + if(gone == custom_ice_cream_beaker) + custom_ice_cream_beaker = null + +/obj/machinery/icecream_vat/add_context(atom/source, list/context, obj/item/held_item, mob/living/user) + if(held_item) + if(is_reagent_container(held_item)) + context[SCREENTIP_CONTEXT_LMB] = "Insert beaker" + context[SCREENTIP_CONTEXT_RMB] = "Transfer beaker reagents" + else if(istype(held_item, /obj/item/food/icecream)) + context[SCREENTIP_CONTEXT_LMB] = "Take scoop of [selected_flavour] ice cream" + return CONTEXTUAL_SCREENTIP_SET + + switch(vat_mode) + if(VAT_MODE_ICECREAM) + context[SCREENTIP_CONTEXT_LMB] = "Select flavor" + context[SCREENTIP_CONTEXT_RMB] = "Change mode to cones" + if(VAT_MODE_CONES) + context[SCREENTIP_CONTEXT_LMB] = "Make cone" + context[SCREENTIP_CONTEXT_RMB] = "Change mode to flavors" + return CONTEXTUAL_SCREENTIP_SET + +/obj/machinery/icecream_vat/attackby(obj/item/reagent_containers/beaker, mob/user, params) + . = ..() + if(.) return - else if(O.is_drainable()) + if(!beaker || !istype(beaker) || !beaker.reagents || (beaker.item_flags & ABSTRACT) || !beaker.is_open_container()) return - else - return ..() -/obj/machinery/icecream_vat/proc/RefillFromBeaker() - if(!beaker || !beaker.reagents) - return - for(var/datum/reagent/R in beaker.reagents.reagent_list) - if(R.type in icecream_vat_reagents) - beaker.reagents.trans_to(src, R.volume, target_id = R.type) - say("Internalizing reagent.") - playsound(src, 'sound/items/drink.ogg', 25, TRUE) - return - -/obj/machinery/icecream_vat/proc/make(mob/user, make_type, amount, list/ingredients) - var/recipe_amount = amount * 3 //prevents reagent duping by requring roughly the amount of reagenst you gain back by grinding. - for(var/R in ingredients) - if(!reagents.has_reagent(R, recipe_amount)) - amount = 0 - break - if(amount) - for(var/R in ingredients) - reagents.remove_reagent(R, recipe_amount) - product_types[make_type] += amount - var/obj/item/food/icecream/cone = cone_prototypes[make_type] - if(cone) - visible_message(span_info("[user] cooks up some [cone.name]s.")) + if(custom_ice_cream_beaker) + if(beaker.forceMove(src)) + try_put_in_hand(custom_ice_cream_beaker, user) + balloon_alert(user, "beakers swapped") + custom_ice_cream_beaker = beaker else - visible_message(span_info("[user] whips up some [make_type] icecream.")) - else - to_chat(user, span_warning("You don't have the ingredients to make this!")) + balloon_alert(user, "beaker slot full!") + return + if(beaker.forceMove(src)) + balloon_alert(user, "beaker inserted") + custom_ice_cream_beaker = beaker -/obj/machinery/icecream_vat/Topic(href, href_list) - if(..()) +/obj/machinery/icecream_vat/attackby_secondary(obj/item/reagent_containers/beaker, mob/user, params) + . = ..() + if(. == SECONDARY_ATTACK_CANCEL_ATTACK_CHAIN) return - var/mob/user = usr - if(href_list["select"]) - var/datum/ice_cream_flavour/flavour = GLOB.ice_cream_flavours[href_list["select"]] - if(!flavour || flavour.hidden) //Nice try, tex. - return - visible_message(span_notice("[user] sets [src] to dispense [href_list["select"]] flavoured ice cream.")) - selected_flavour = flavour.name + if(!beaker || !istype(beaker) || !beaker.reagents || (beaker.item_flags & ABSTRACT) || !beaker.is_open_container()) + return SECONDARY_ATTACK_CONTINUE_CHAIN + var/added_reagents = FALSE + for(var/datum/reagent/beaker_reagents in beaker.reagents.reagent_list) + if(beaker_reagents.type in icecream_vat_reagents) + added_reagents = TRUE + beaker.reagents.trans_to(src, beaker_reagents.volume, target_id = beaker_reagents.type) - if(href_list["cone"]) - var/obj/item/food/icecream/cone_path = text2path(href_list["cone"]) - if(!cone_path) - return - if(product_types[cone_path] >= 1) - product_types[cone_path]-- - var/obj/item/food/icecream/cone = new cone_path(get_turf(src)) - if(!user.put_in_hands(cone)) - cone.forceMove(drop_location()) - visible_message(span_info("[user] dispenses a crunchy [cone.name] from [src].")) - else - to_chat(user, span_warning("There are no [initial(cone_path.name)]s left!")) + if(added_reagents) + balloon_alert(user, "refilling reagents") + playsound(src, 'sound/items/drink.ogg', 25, TRUE) + else + balloon_alert(user, "no reagents to transfer!") + return SECONDARY_ATTACK_CANCEL_ATTACK_CHAIN - if(href_list["make"]) - var/datum/ice_cream_flavour/flavour = GLOB.ice_cream_flavours[href_list["make"]] - if(!flavour || flavour.hidden) //Nice try, tex. - return - var/amount = (text2num(href_list["amount"])) - make(user, href_list["make"], amount, flavour.ingredients) +/obj/machinery/icecream_vat/attack_hand_secondary(mob/user, list/modifiers) + if(swap_modes(user)) + return SECONDARY_ATTACK_CANCEL_ATTACK_CHAIN + return ..() - if(href_list["make_cone"]) - var/path = text2path(href_list["make_cone"]) - var/obj/item/food/icecream/cone = cone_prototypes[path] - if(!cone) //Nice try, tex. - return - var/amount = (text2num(href_list["amount"])) - make(user, path, amount, cone.ingredients) +/obj/machinery/icecream_vat/attack_robot_secondary(mob/living/silicon/robot/user) + if(swap_modes(user)) + return SECONDARY_ATTACK_CANCEL_ATTACK_CHAIN + return ..() - if(href_list["disposeI"]) - reagents.del_reagent(text2path(href_list["disposeI"])) +/obj/machinery/icecream_vat/AltClick(mob/user) + if(!user.can_interact_with(src)) + return FALSE + if(custom_ice_cream_beaker) + balloon_alert(user, "removed beaker") + try_put_in_hand(custom_ice_cream_beaker, user) + return ..() - if(href_list["refill"]) - RefillFromBeaker() +/obj/machinery/icecream_vat/interact(mob/living/user) + . = ..() + if (.) + return - updateDialog() + var/list/choices = list() - if(href_list["refresh"]) - updateDialog() + switch(vat_mode) + if(VAT_MODE_ICECREAM) + for(var/flavor_key in ice_cream_icons) + var/datum/ice_cream_flavour/flavor_datum = GLOB.ice_cream_flavours[flavor_key] + var/datum/radial_menu_choice/option = new + option.image = ice_cream_icons[flavor_key] + option.info = span_boldnotice("[flavor_datum.ingredients_text]") + choices[flavor_key] = option + if(VAT_MODE_CONES) + for(var/cone_key in cone_prototypes) + var/obj/item/food/icecream/cone_item = cone_prototypes[cone_key] + var/datum/radial_menu_choice/option = new + option.image = cone_prototypes[cone_key] + option.info = span_boldnotice("[cone_item.ingredients_text]") + choices[cone_key] = option - if(href_list["close"]) - user.unset_machine() - user << browse(null,"window=icecreamvat") - return + var/choice = show_radial_menu( + user, + src, + choices, + require_near = TRUE, + tooltips = TRUE, + autopick_single_option = FALSE, + ) -/obj/machinery/icecream_vat/deconstruct(disassembled = TRUE) - if(!(obj_flags & NO_DECONSTRUCTION)) - new /obj/item/stack/sheet/iron(loc, 4) - qdel(src) + if(!choice) + return + var/datum/ice_cream_flavour/flavor = GLOB.ice_cream_flavours[choice] + if(flavor) + selected_flavour = flavor.name + balloon_alert(user, "making [selected_flavour]") + var/obj/item/food/icecream/cone = cone_prototypes[choice] + if(cone) + make_cone(user, choice, cone.ingredients) -/obj/machinery/icecream_vat/AltClick(mob/living/user) - . = ..() - if(!can_interact(user) || !user.can_perform_action(src, FORBID_TELEKINESIS_REACH)) +/obj/machinery/icecream_vat/proc/make_ice_cream_color(datum/ice_cream_flavour/flavor) + if(!flavor.color) + return + var/image/ice_cream_icon = image('icons/obj/service/kitchen.dmi', "icecream_custom") + ice_cream_icon.color = flavor.color + return ice_cream_icon + +/obj/machinery/icecream_vat/on_deconstruction(disassembled = TRUE) + new /obj/item/stack/sheet/iron(loc, 4) + if(custom_ice_cream_beaker) + custom_ice_cream_beaker.forceMove(loc) + +///Makes an ice cream cone of the make_type, using ingredients list as reagents used to make it. Puts in user's hand if possible. +/obj/machinery/icecream_vat/proc/make_cone(mob/user, make_type, list/ingredients) + for(var/reagents_needed in ingredients) + if(!reagents.has_reagent(reagents_needed, CONE_REAGENET_NEEDED)) + balloon_alert(user, "not enough ingredients!") + return + var/cone_type = cone_prototypes[make_type].type + if(!cone_type) return - replace_beaker(user) + var/obj/item/food/icecream/cone = new cone_type(src) + + for(var/reagents_used in ingredients) + reagents.remove_reagent(reagents_used, CONE_REAGENET_NEEDED) + balloon_alert_to_viewers("cooks up [cone.name]", "cooks up [cone.name]") + try_put_in_hand(cone, user) + +///Makes ice cream if it can, then puts it in the ice cream cone we're being attacked with. +/obj/machinery/icecream_vat/proc/add_flavor_to_cone(datum/component/ice_cream_holder/source, mob/user, obj/item/food/icecream/cone) + var/datum/ice_cream_flavour/flavor = GLOB.ice_cream_flavours[selected_flavour] + if(!flavor) + CRASH("[user] was making ice cream of [selected_flavour] but had no flavor datum for it!") -/obj/machinery/icecream_vat/proc/replace_beaker(mob/living/user, obj/item/reagent_containers/new_beaker) - if(!user) + for(var/reagents_needed in flavor.ingredients) + if(!reagents.has_reagent(reagents_needed, CONE_REAGENET_NEEDED)) + balloon_alert(user, "not enough ingredients!") + return + + var/should_use_custom_ingredients = (flavor.takes_custom_ingredients && custom_ice_cream_beaker && custom_ice_cream_beaker.reagents.total_volume) + if(flavor.add_flavour(source, should_use_custom_ingredients ? custom_ice_cream_beaker.reagents : null)) + for(var/reagents_used in flavor.ingredients) + reagents.remove_reagent(reagents_used, CONE_REAGENET_NEEDED) + balloon_alert_to_viewers("scoops [selected_flavour]", "scoops [selected_flavour]") + +///Swaps the mode to the next one meant to be selected, then tells the user who changed it. +/obj/machinery/icecream_vat/proc/swap_modes(mob/user) + if(!user.can_perform_action(src)) return FALSE - if(beaker) - user.put_in_hands(beaker) - beaker = null - if(new_beaker) - beaker = new_beaker + switch(vat_mode) + if(VAT_MODE_ICECREAM) + vat_mode = VAT_MODE_CONES + if(VAT_MODE_CONES) + vat_mode = VAT_MODE_ICECREAM + balloon_alert(user, "dispensing [vat_mode]") return TRUE -#undef PREFILL_AMOUNT +///Allows any user to see what reagents are in the ice cream vat regardless of special gear. +/obj/machinery/icecream_vat/proc/allow_reagent_scan(datum/source, mob/user, list/examine_list, can_see_insides = FALSE) + SIGNAL_HANDLER + return ALLOW_GENERIC_REAGENT_EXAMINE + +#undef VAT_MODE_ICECREAM +#undef VAT_MODE_CONES +#undef CONE_REAGENET_NEEDED diff --git a/code/modules/food_and_drinks/machinery/microwave.dm b/code/modules/food_and_drinks/machinery/microwave.dm index c4cc6d378e3..ec5df27ca5a 100644 --- a/code/modules/food_and_drinks/machinery/microwave.dm +++ b/code/modules/food_and_drinks/machinery/microwave.dm @@ -105,7 +105,7 @@ itemized_ingredient.pixel_y = itemized_ingredient.base_pixel_y + rand(-5, 6) return ..() -/obj/machinery/microwave/on_deconstruction() +/obj/machinery/microwave/on_deconstruction(disassembled) eject() return ..() diff --git a/code/modules/food_and_drinks/machinery/smartfridge.dm b/code/modules/food_and_drinks/machinery/smartfridge.dm index ae06fb93f83..7f2a2af7397 100644 --- a/code/modules/food_and_drinks/machinery/smartfridge.dm +++ b/code/modules/food_and_drinks/machinery/smartfridge.dm @@ -491,7 +491,7 @@ /obj/machinery/smartfridge/drying_rack/exchange_parts() return -/obj/machinery/smartfridge/drying_rack/on_deconstruction() +/obj/machinery/smartfridge/drying_rack/on_deconstruction(disassembled) new /obj/item/stack/sheet/mineral/wood(drop_location(), 10) /obj/machinery/smartfridge/drying_rack/crowbar_act(mob/living/user, obj/item/tool) diff --git a/code/modules/food_and_drinks/recipes/soup_mixtures.dm b/code/modules/food_and_drinks/recipes/soup_mixtures.dm index 7a80f291b87..d7f391bdc15 100644 --- a/code/modules/food_and_drinks/recipes/soup_mixtures.dm +++ b/code/modules/food_and_drinks/recipes/soup_mixtures.dm @@ -1228,7 +1228,6 @@ ) results = list( /datum/reagent/consumable/nutriment/soup/oatmeal = 20, - /datum/reagent/consumable/milk = 12, /datum/reagent/consumable/nutriment/vitamin = 8, ) percentage_of_nutriment_converted = 0 // Oats have barely any nutrients @@ -1484,12 +1483,15 @@ drink_type = MEAT | VEGETABLES /datum/chemical_reaction/food/soup/rootbread_soup - required_reagents = list(/datum/reagent/water = 50) + required_reagents = list( + /datum/reagent/water = 50, + /datum/reagent/consumable/eggyolk = 2, + /datum/reagent/consumable/eggwhite = 4 + ) required_ingredients = list( /obj/item/food/breadslice/root = 2, /obj/item/food/grown/garlic = 1, - /obj/item/food/grown/chili = 1, - /obj/item/food/egg = 1 + /obj/item/food/grown/chili = 1 ) results = list( /datum/reagent/consumable/nutriment/soup/rootbread = 30, diff --git a/code/modules/food_and_drinks/recipes/tablecraft/recipes_martian.dm b/code/modules/food_and_drinks/recipes/tablecraft/recipes_martian.dm index fb4f29284b8..02bb9ae7bf8 100644 --- a/code/modules/food_and_drinks/recipes/tablecraft/recipes_martian.dm +++ b/code/modules/food_and_drinks/recipes/tablecraft/recipes_martian.dm @@ -168,7 +168,7 @@ /obj/item/food/onion_slice = 1, /datum/reagent/consumable/nutriment/soup/teriyaki = 4, ) - result = /obj/item/food/salad/bibimbap + result = /obj/item/food/salad/bulgogi_noodles category = CAT_MARTIAN /datum/crafting_recipe/food/yakisoba_katsu diff --git a/code/modules/holodeck/items.dm b/code/modules/holodeck/items.dm index 10229929c84..eb0261739ad 100644 --- a/code/modules/holodeck/items.dm +++ b/code/modules/holodeck/items.dm @@ -119,11 +119,12 @@ var/numbuttons = 0 var/numready = 0 - for(var/turf/area_turf as anything in currentarea.get_contained_turfs()) - for(var/obj/machinery/readybutton/button in area_turf) - numbuttons++ - if(button.ready) - numready++ + for (var/list/zlevel_turfs as anything in currentarea.get_zlevel_turf_lists()) + for (var/turf/area_turf as anything in zlevel_turfs) + for(var/obj/machinery/readybutton/button in area_turf) + numbuttons++ + if(button.ready) + numready++ if(numbuttons == numready) begin_event() @@ -136,13 +137,14 @@ eventstarted = TRUE - for(var/turf/area_turf as anything in currentarea.get_contained_turfs()) - for(var/obj/structure/window/barrier in area_turf) - if((barrier.obj_flags & NO_DECONSTRUCTION) || (barrier.flags_1 & HOLOGRAM_1))// Just in case: only holo-windows - qdel(barrier) + for (var/list/zlevel_turfs as anything in currentarea.get_zlevel_turf_lists()) + for(var/turf/area_turf as anything in zlevel_turfs) + for(var/obj/structure/window/barrier in area_turf) + if((barrier.obj_flags & NO_DECONSTRUCTION) || (barrier.flags_1 & HOLOGRAM_1))// Just in case: only holo-windows + qdel(barrier) - for(var/mob/contestant in area_turf) - to_chat(contestant, span_userdanger("FIGHT!")) + for(var/mob/contestant in area_turf) + to_chat(contestant, span_userdanger("FIGHT!")) /obj/machinery/conveyor/holodeck diff --git a/code/modules/hydroponics/grown/ambrosia.dm b/code/modules/hydroponics/grown/ambrosia.dm index a2afcdc729f..aa02ba7efa1 100644 --- a/code/modules/hydroponics/grown/ambrosia.dm +++ b/code/modules/hydroponics/grown/ambrosia.dm @@ -72,7 +72,7 @@ name = "ambrosia gaia branch" desc = "Eating this makes you immortal." icon_state = "ambrosia_gaia" - light_system = MOVABLE_LIGHT + light_system = OVERLAY_LIGHT light_range = 3 seed = /obj/item/seeds/ambrosia/gaia wine_power = 70 diff --git a/code/modules/hydroponics/hydroponics.dm b/code/modules/hydroponics/hydroponics.dm index d1eb12a4ea9..58f7a1c8530 100644 --- a/code/modules/hydroponics/hydroponics.dm +++ b/code/modules/hydroponics/hydroponics.dm @@ -1159,7 +1159,7 @@ circuit = null density = FALSE use_power = NO_POWER_USE - obj_flags = /obj::obj_flags | NO_DECONSTRUCTION + obj_flags = parent_type::obj_flags | NO_DECONSTRUCTION unwrenchable = FALSE self_sustaining_overlay_icon_state = null maxnutri = 15 @@ -1184,9 +1184,8 @@ /obj/machinery/hydroponics/soil/CtrlClick(mob/user) return //Soil has no electricity. -/obj/machinery/hydroponics/soil/deconstruct(disassembled) +/obj/machinery/hydroponics/soil/on_deconstruction(disassembled) new /obj/item/stack/ore/glass(drop_location(), 3) - return ..() ///The usb port circuit diff --git a/code/modules/hydroponics/plant_genes.dm b/code/modules/hydroponics/plant_genes.dm index 98eef6b816e..2ce685d0b7c 100644 --- a/code/modules/hydroponics/plant_genes.dm +++ b/code/modules/hydroponics/plant_genes.dm @@ -368,7 +368,7 @@ return var/obj/item/seeds/our_seed = our_plant.get_plant_seed() - our_plant.light_system = MOVABLE_LIGHT + our_plant.light_system = OVERLAY_LIGHT our_plant.AddComponent(/datum/component/overlay_lighting, glow_range(our_seed), glow_power(our_seed), glow_color) /* diff --git a/code/modules/jobs/job_types/_job.dm b/code/modules/jobs/job_types/_job.dm index 19f592910f2..c0a56dc7a67 100644 --- a/code/modules/jobs/job_types/_job.dm +++ b/code/modules/jobs/job_types/_job.dm @@ -178,6 +178,10 @@ for(var/i in roundstart_experience) spawned_human.mind.adjust_experience(i, roundstart_experience[i], TRUE) +/// Return the outfit to use +/datum/job/proc/get_outfit() + return outfit + /// Announce that this job as joined the round to all crew members. /// Note the joining mob has no client at this point. /datum/job/proc/announce_job(mob/living/joining_mob, job_title) // NOVA EDIT CHANGE - ALTERNATIVE_JOB_TITLES - Original: /datum/job/proc/announce_job(mob/living/joining_mob) @@ -190,7 +194,7 @@ return TRUE -/mob/living/proc/on_job_equipping(datum/job/equipping) +/mob/living/proc/on_job_equipping(datum/job/equipping, datum/preferences/used_pref) // NOVA EDIT CHANGE - ORIGINAL: /mob/living/proc/on_job_equipping(datum/job/equipping) return #define VERY_LATE_ARRIVAL_TOAST_PROB 20 @@ -202,7 +206,7 @@ bank_account.replaceable = FALSE add_mob_memory(/datum/memory/key/account, remembered_id = account_id) - dress_up_as_job(equipping, FALSE, used_pref) //NOVA EDIT CHANGE - ORIGINAL: dress_up_as_job(equipping) + dress_up_as_job(equipping, FALSE, used_pref) // NOVA EDIT CHANGE - ORIGINAL: dress_up_as_job(equipping) if(EMERGENCY_PAST_POINT_OF_NO_RETURN && prob(VERY_LATE_ARRIVAL_TOAST_PROB)) //equipping.equip_to_slot_or_del(new /obj/item/food/griddle_toast(equipping), ITEM_SLOT_MASK) // NOVA EDIT REMOVAL - See below @@ -215,12 +219,12 @@ #undef VERY_LATE_ARRIVAL_TOAST_PROB -/mob/living/proc/dress_up_as_job(datum/job/equipping, visual_only = FALSE) +/mob/living/proc/dress_up_as_job(datum/job/equipping, visual_only = FALSE, datum/preferences/used_pref) //NOVA EDIT CHANGE - ORIGINAL: /mob/living/proc/dress_up_as_job(datum/job/equipping, visual_only = FALSE) return /mob/living/carbon/human/dress_up_as_job(datum/job/equipping, visual_only = FALSE, datum/preferences/used_pref) //NOVA EDIT CHANGE dna.species.pre_equip_species_outfit(equipping, src, visual_only) - equip_outfit_and_loadout(equipping.outfit, used_pref, visual_only, equipping) //NOVA EDIT CHANGE + equip_outfit_and_loadout(equipping.get_outfit(), used_pref, visual_only, equipping) //NOVA EDIT CHANGE : ORIGINAL equipOutfit(equipping.get_outfit(), visual_only) /// tells the given channel that the given mob is the new department head. See communications.dm for valid channels. /datum/job/proc/announce_head(mob/living/carbon/human/H, channels, job_title) // NOVA EDIT CHANGE - ALTERNATIVE_JOB_TITLES - Original: /datum/job/proc/announce_head(mob/living/carbon/human/H, channels) diff --git a/code/modules/jobs/job_types/assistant/assistant.dm b/code/modules/jobs/job_types/assistant/assistant.dm new file mode 100644 index 00000000000..c97c987cb58 --- /dev/null +++ b/code/modules/jobs/job_types/assistant/assistant.dm @@ -0,0 +1,96 @@ +GLOBAL_DATUM(colored_assistant, /datum/colored_assistant) + +/* +Assistant +*/ +/datum/job/assistant + title = JOB_ASSISTANT + description = "Get your space legs, assist people, ask the HoP to give you a job." + faction = FACTION_STATION + total_positions = 5 + spawn_positions = 5 + supervisors = "absolutely everyone" + exp_granted_type = EXP_TYPE_CREW + outfit = /datum/outfit/job/assistant + plasmaman_outfit = /datum/outfit/plasmaman + paycheck = PAYCHECK_LOWER // Get a job. Job reassignment changes your paycheck now. Get over it. + + paycheck_department = ACCOUNT_CIV + display_order = JOB_DISPLAY_ORDER_ASSISTANT + + liver_traits = list(TRAIT_MAINTENANCE_METABOLISM) + + department_for_prefs = /datum/job_department/assistant + + family_heirlooms = list(/obj/item/storage/toolbox/mechanical/old/heirloom, /obj/item/clothing/gloves/cut/heirloom) + + mail_goodies = list( + /obj/effect/spawner/random/food_or_drink/donkpockets = 10, + /obj/item/clothing/mask/gas = 10, + /obj/item/clothing/gloves/color/fyellow = 7, + /obj/item/choice_beacon/music = 5, + /obj/item/toy/sprayoncan = 3, + /obj/item/crowbar/large = 1 + ) + + job_flags = STATION_JOB_FLAGS + rpg_title = "Lout" + config_tag = "ASSISTANT" + +/datum/job/assistant/get_outfit() + if(!HAS_TRAIT(SSstation, STATION_TRAIT_ASSISTANT_GIMMICKS)) + return ..() + + var/static/list/gimmicks = list() + if(!length(gimmicks)) + for(var/datum/outfit/job/assistant/gimmick/gimmick_outfit as anything in subtypesof(/datum/outfit/job/assistant/gimmick)) + gimmicks[gimmick_outfit] = gimmick_outfit::outfit_weight + + return pick_weight(gimmicks) + +/datum/outfit/job/assistant + name = JOB_ASSISTANT + jobtype = /datum/job/assistant + id_trim = /datum/id_trim/job/assistant + belt = /obj/item/modular_computer/pda/assistant + +/datum/outfit/job/assistant/pre_equip(mob/living/carbon/human/target) + ..() + for(var/holidayname in GLOB.holidays) + var/datum/holiday/holiday_today = GLOB.holidays[holidayname] + var/obj/item/special_hat = holiday_today.holiday_hat + if(prob(HOLIDAY_HAT_CHANCE) && !isnull(special_hat) && isnull(head)) + head = special_hat + + give_jumpsuit(target) + +/datum/outfit/job/assistant/proc/give_jumpsuit(mob/living/carbon/human/target) + var/static/jumpsuit_number = 0 + jumpsuit_number += 1 + + if (isnull(GLOB.colored_assistant)) + var/configured_type = get_configured_colored_assistant_type() + GLOB.colored_assistant = new configured_type + + var/index = (jumpsuit_number % GLOB.colored_assistant.jumpsuits.len) + 1 + + //We don't cache these, because they can delete on init + //Too fragile, better to just eat the cost + if (target.jumpsuit_style == PREF_SUIT) + uniform = GLOB.colored_assistant.jumpsuits[index] + else + uniform = GLOB.colored_assistant.jumpskirts[index] + +/datum/outfit/job/assistant/consistent + name = "Assistant - Consistent" + +/datum/outfit/job/assistant/consistent/give_jumpsuit(mob/living/carbon/human/target) + uniform = /obj/item/clothing/under/color/grey + +/datum/outfit/job/assistant/consistent/post_equip(mob/living/carbon/human/H, visualsOnly) + ..() + + // This outfit is used by the assets SS, which is ran before the atoms SS + if (SSatoms.initialized == INITIALIZATION_INSSATOMS) + H.w_uniform?.update_greyscale() + H.update_worn_undersuit() diff --git a/code/modules/jobs/job_types/assistant.dm b/code/modules/jobs/job_types/assistant/colorful_assistants.dm similarity index 54% rename from code/modules/jobs/job_types/assistant.dm rename to code/modules/jobs/job_types/assistant/colorful_assistants.dm index 0fb5f6fec90..740b64912c1 100644 --- a/code/modules/jobs/job_types/assistant.dm +++ b/code/modules/jobs/job_types/assistant/colorful_assistants.dm @@ -1,99 +1,3 @@ -GLOBAL_DATUM(colored_assistant, /datum/colored_assistant) - -/* -Assistant -*/ -/datum/job/assistant - title = JOB_ASSISTANT - description = "Get your space legs, assist people, ask the HoP to give you a job." - faction = FACTION_STATION - total_positions = 5 - spawn_positions = 5 - supervisors = "absolutely everyone" - exp_granted_type = EXP_TYPE_CREW - outfit = /datum/outfit/job/assistant - plasmaman_outfit = /datum/outfit/plasmaman - paycheck = PAYCHECK_LOWER // Get a job. Job reassignment changes your paycheck now. Get over it. - - paycheck_department = ACCOUNT_CIV - display_order = JOB_DISPLAY_ORDER_ASSISTANT - - liver_traits = list(TRAIT_MAINTENANCE_METABOLISM) - - department_for_prefs = /datum/job_department/assistant - - family_heirlooms = list(/obj/item/storage/toolbox/mechanical/old/heirloom, /obj/item/clothing/gloves/cut/heirloom) - - mail_goodies = list( - /obj/effect/spawner/random/food_or_drink/donkpockets = 10, - /obj/item/clothing/mask/gas = 10, - /obj/item/clothing/gloves/color/fyellow = 7, - /obj/item/choice_beacon/music = 5, - /obj/item/toy/sprayoncan = 3, - /obj/item/crowbar/large = 1 - ) - - job_flags = STATION_JOB_FLAGS - rpg_title = "Lout" - config_tag = "ASSISTANT" - - allow_bureaucratic_error = FALSE // NOVA EDIT ADDITION - -/datum/outfit/job/assistant - name = JOB_ASSISTANT - jobtype = /datum/job/assistant - id_trim = /datum/id_trim/job/assistant - uniform = /obj/item/clothing/under/color/random // NOVA EDIT ADD - belt = /obj/item/modular_computer/pda/assistant - -/datum/outfit/job/assistant/pre_equip(mob/living/carbon/human/target) - ..() - for(var/holidayname in GLOB.holidays) - var/datum/holiday/holiday_today = GLOB.holidays[holidayname] - var/obj/item/special_hat = holiday_today.holiday_hat - if(prob(HOLIDAY_HAT_CHANCE) && !isnull(special_hat) && isnull(head)) - head = special_hat - - give_jumpsuit(target) - -/datum/outfit/job/assistant/proc/give_jumpsuit(mob/living/carbon/human/target) - var/static/jumpsuit_number = 0 - jumpsuit_number += 1 - - if (isnull(GLOB.colored_assistant)) - var/configured_type = get_configured_colored_assistant_type() - GLOB.colored_assistant = new configured_type - - var/index = (jumpsuit_number % GLOB.colored_assistant.jumpsuits.len) + 1 - - // NOVA EDIT - Loadouts (we don't want jumpsuits to override the person's loadout item) - if(modified_outfit_slots & ITEM_SLOT_ICLOTHING) - return - // NOVA EDIT END - - //We don't cache these, because they can delete on init - //Too fragile, better to just eat the cost - if (target.jumpsuit_style == PREF_SUIT) - uniform = GLOB.colored_assistant.jumpsuits[index] - else - uniform = GLOB.colored_assistant.jumpskirts[index] - -/datum/outfit/job/assistant/consistent - name = "Assistant - Consistent" - - -/datum/outfit/job/assistant/consistent/give_jumpsuit(mob/living/carbon/human/target) - uniform = /obj/item/clothing/under/color/grey - -/datum/outfit/job/assistant/consistent/post_equip(mob/living/carbon/human/H, visualsOnly) - ..() - - // This outfit is used by the assets SS, which is ran before the atoms SS - if (SSatoms.initialized == INITIALIZATION_INSSATOMS) - H.w_uniform?.update_greyscale() - H.update_worn_undersuit() - - /proc/get_configured_colored_assistant_type() return CONFIG_GET(flag/grey_assistants) ? /datum/colored_assistant/grey : /datum/colored_assistant/random diff --git a/code/modules/jobs/job_types/assistant/gimmick_assistants.dm b/code/modules/jobs/job_types/assistant/gimmick_assistants.dm new file mode 100644 index 00000000000..7c2ac4a2df2 --- /dev/null +++ b/code/modules/jobs/job_types/assistant/gimmick_assistants.dm @@ -0,0 +1,210 @@ +// This file contains the louadouts for the assistant gimmicks station trait! When active, gives assistants random stupid gear + +/// Parent type of gimmick loadouts for assistants for the functional assistant station traits +/datum/outfit/job/assistant/gimmick + name = "Gimmick Assistant" + /// The weight of the outfit to be picked + var/outfit_weight = 0 + + +/datum/outfit/job/assistant/gimmick/give_jumpsuit(mob/living/carbon/human/target) + return //dont do colorized and stuff, it messes with our uniforms + +/datum/outfit/job/assistant/gimmick/bee + name = "Gimmick Assistant - Bee" + suit = /obj/item/clothing/suit/hooded/bee_costume + uniform = /obj/item/clothing/under/color/yellow + + l_pocket = /obj/item/coupon/bee + + outfit_weight = 2 + +/obj/item/coupon/bee + desc = "BEEEES???? AT AN AFFORDAbLE PORICE?!!!" //wordcoders seething + + discounted_pack = /datum/supply_pack/organic/hydroponics/beekeeping_fullkit + discount_pct_off = 0.7 + +/datum/outfit/job/assistant/gimmick/chicken + name = "Gimmick Assistant - Chicken" + suit = /obj/item/clothing/suit/costume/chickensuit + head = /obj/item/clothing/head/costume/chicken + + l_hand = /obj/item/storage/fancy/egg_box/fertile + + outfit_weight = 2 + +/datum/outfit/job/assistant/gimmick/cyborg + name = "Gimmick Assistant - Cardborg" + suit = /obj/item/clothing/suit/costume/cardborg + head = /obj/item/clothing/head/costume/cardborg + uniform = /obj/item/clothing/under/color/black + + r_hand = /obj/item/weldingtool/largetank + l_hand = /obj/item/stack/cable_coil/five + + uniform = /obj/item/clothing/under/color/black + + outfit_weight = 2 + +/datum/outfit/job/assistant/gimmick/cyborg/post_equip(mob/living/carbon/human/equipped, visualsOnly) + . = ..() + var/obj/item/organ/internal/tongue/robot/robotongue = new () + robotongue.Insert(equipped, movement_flags = DELETE_IF_REPLACED) + +/datum/outfit/job/assistant/gimmick/skater + name = "Gimmick Assistant - Skater" + head = /obj/item/clothing/head/helmet/redtaghelm + suit = /obj/item/clothing/suit/redtag + + l_hand = /obj/item/melee/skateboard + + uniform = /obj/item/clothing/under/color/orange + + outfit_weight = 6 + +/datum/outfit/job/assistant/gimmick/rollerskater + name = "Gimmick Assistant - Rollerskater" + head = /obj/item/clothing/head/helmet/bluetaghelm + suit = /obj/item/clothing/suit/bluetag + + shoes = /obj/item/clothing/shoes/wheelys/rollerskates + + uniform = /obj/item/clothing/under/color/darkblue + + outfit_weight = 6 + +/datum/outfit/job/assistant/gimmick/fisher + name = "Gimmick Assistant - Fisher" + suit = /obj/item/clothing/suit/jacket/puffer/vest + uniform = /obj/item/clothing/under/color/blue + + r_hand = /obj/item/storage/toolbox/fishing + + outfit_weight = 3 + +/datum/outfit/job/assistant/gimmick/patient + name = "Gimmick Assistant - Patient" + suit = /obj/item/clothing/suit/apron/surgical + + l_pocket = /obj/item/storage/pill_bottle/multiver + r_pocket = /obj/item/storage/pill_bottle/mutadone + + uniform = /obj/item/clothing/under/color/white + + outfit_weight = 3 + +/datum/outfit/job/assistant/gimmick/mopper + name = "Gimmick Assistant - Mopper" + suit = /obj/item/clothing/suit/caution + uniform = /obj/item/clothing/under/color/lightpurple + + l_hand = /obj/item/mop + + outfit_weight = 5 + +/datum/outfit/job/assistant/gimmick/mopper/post_equip(mob/living/carbon/human/equipped, visualsOnly) + . = ..() + + for(var/turf/turf in range(1, equipped)) + if(turf.is_blocked_turf()) + continue + var/obj/structure/mop_bucket/bucket = new /obj/structure/mop_bucket(turf) + equipped.start_pulling(bucket) + +/datum/outfit/job/assistant/gimmick/broomer + name = "Gimmick Assistant - Broomer" + suit = /obj/item/clothing/suit/caution + uniform = /obj/item/clothing/under/color/lightpurple + + l_hand = /obj/item/pushbroom + r_hand = /obj/item/storage/bag/trash + + outfit_weight = 5 + +/datum/outfit/job/assistant/gimmick/hall_monitor + name = "Gimmick Assistant - Hall Monitor" + head = /obj/item/clothing/head/collectable/police + mask = /obj/item/clothing/mask/whistle + uniform = /obj/item/clothing/under/color/red + + neck = /obj/item/camera + + outfit_weight = 2 + +/datum/outfit/job/assistant/gimmick/monkey + name = "Gimmick Assistant - Monkey" + suit = /obj/item/clothing/suit/costume/monkeysuit + mask = /obj/item/clothing/mask/gas/monkeymask + l_pocket = /obj/item/food/monkeycube + r_pocket = /obj/item/food/monkeycube + + outfit_weight = 1 + +/datum/outfit/job/assistant/gimmick/flesh + name = "Gimmick Assistant - Fleshy" + suit = /obj/item/clothing/suit/hooded/bloated_human + r_hand = /obj/item/toy/foamblade + + outfit_weight = 1 + +/datum/outfit/job/assistant/gimmick/lightbringer + name = "Gimmick Assistant - Lightbringer" + uniform = /obj/item/clothing/under/color/yellow + head = /obj/item/clothing/head/costume/cueball + gloves = /obj/item/clothing/gloves/color/black + + l_pocket = /obj/item/flashlight/lantern + r_pocket = /obj/item/lightreplacer + + outfit_weight = 3 + +/datum/outfit/job/assistant/gimmick/handyman + name = "Gimmick Assistant - Handyman" + + suit = /obj/item/clothing/suit/hazardvest + belt = /obj/item/storage/belt/utility/full + head = /obj/item/clothing/head/utility/hardhat + uniform = /obj/item/clothing/under/color/yellow + + outfit_weight = 6 + +/datum/outfit/job/assistant/gimmick/magician + name = "Gimmick Assistant - Magician" + + head = /obj/item/clothing/head/hats/tophat + uniform = /obj/item/clothing/under/color/lightpurple + + l_hand = /obj/item/gun/magic/wand/nothing + + outfit_weight = 2 + +/datum/outfit/job/assistant/gimmick/firefighter + name = "Gimmick Assistant - Firefighter" + + head = /obj/item/clothing/head/utility/hardhat/red + suit = /obj/item/clothing/suit/hazardvest + uniform = /obj/item/clothing/under/color/red + + l_pocket = /obj/item/stack/medical/ointment + r_pocket = /obj/item/extinguisher/mini + + outfit_weight = 3 + +/datum/outfit/job/assistant/gimmick/gardener + name = "Gimmick Assistant - Gardener" + uniform = /obj/item/clothing/under/color/green + skillchips = list(/obj/item/skillchip/bonsai) + + l_pocket = /obj/item/knife/plastic + l_hand = /obj/item/kirbyplants/random + + outfit_weight = 3 + +/datum/outfit/job/assistant/gimmick/artist + name = "Gimmick Assistant - Artist" + uniform = /obj/item/clothing/under/color/rainbow + + backpack_contents = list(/obj/item/storage/crayons) + + outfit_weight = 3 diff --git a/code/modules/jobs/job_types/cargo_gorilla.dm b/code/modules/jobs/job_types/cargo_gorilla.dm new file mode 100644 index 00000000000..96a79e3a4d3 --- /dev/null +++ b/code/modules/jobs/job_types/cargo_gorilla.dm @@ -0,0 +1,50 @@ +/datum/job/cargo_gorilla + title = JOB_CARGO_GORILLA + description = "Assist the supply department by moving freight and disposing of unwanted fruits." + department_head = list(JOB_QUARTERMASTER) + faction = FACTION_STATION + total_positions = 0 + spawn_positions = 0 + supervisors = SUPERVISOR_QM + spawn_type = /mob/living/basic/gorilla/cargorilla + config_tag = "CARGO_GORILLA" + random_spawns_possible = FALSE + display_order = JOB_DISPLAY_ORDER_CARGO_GORILLA + departments_list = list(/datum/job_department/cargo) + mail_goodies = list( + /obj/item/food/grown/banana = 1, + ) + rpg_title = "Beast of Burden" + allow_bureaucratic_error = FALSE + job_flags = JOB_ANNOUNCE_ARRIVAL | JOB_NEW_PLAYER_JOINABLE | JOB_EQUIP_RANK | JOB_CANNOT_OPEN_SLOTS | JOB_HIDE_WHEN_EMPTY | JOB_LATEJOIN_ONLY + +/datum/job/cargo_gorilla/get_roundstart_spawn_point() + if (length(GLOB.gorilla_start)) + return pick(GLOB.gorilla_start) + return ..() + +/datum/job/cargo_gorilla/get_spawn_mob(client/player_client, atom/spawn_point) + if (!player_client) + return + var/mob/living/the_big_man = new spawn_type(get_turf(spawn_point)) + the_big_man.fully_replace_character_name(the_big_man.real_name, pick(GLOB.cargorilla_names)) + return the_big_man + +/datum/job/cargo_gorilla/after_spawn(mob/living/spawned, client/player_client) + . = ..() + // Gorilla with a wage, what's he buyin? + var/datum/bank_account/bank_account = new(spawned.real_name, src) + bank_account.payday(STARTING_PAYCHECKS, TRUE) + bank_account.replaceable = FALSE + spawned.add_mob_memory(/datum/memory/key/account, remembered_id = bank_account.account_id) + + var/obj/item/card/id/advanced/cargo_gorilla/gorilla_id = new(spawned.loc) + gorilla_id.registered_name = spawned.name + gorilla_id.update_label() + gorilla_id.registered_account = bank_account + bank_account.bank_cards += gorilla_id + spawned.put_in_hands(gorilla_id, del_on_fail = TRUE) + + to_chat(spawned, span_boldnotice("You are Cargorilla, a pacifist friend of the station and carrier of freight.")) + to_chat(spawned, span_notice("You can pick up crates by clicking on them, and drop them by clicking on the ground.")) + spawned.mind.special_role = "Cargorilla" diff --git a/code/modules/jobs/job_types/prisoner.dm b/code/modules/jobs/job_types/prisoner.dm index 8a58dc233a7..bd0c3a3ed27 100644 --- a/code/modules/jobs/job_types/prisoner.dm +++ b/code/modules/jobs/job_types/prisoner.dm @@ -23,7 +23,7 @@ family_heirlooms = list(/obj/item/pen/blue) rpg_title = "Defeated Miniboss" - job_flags = JOB_ANNOUNCE_ARRIVAL | JOB_CREW_MANIFEST | JOB_EQUIP_RANK | JOB_CREW_MEMBER | JOB_NEW_PLAYER_JOINABLE | JOB_ASSIGN_QUIRKS | JOB_CAN_BE_INTERN | JOB_CANNOT_OPEN_SLOTS + job_flags = STATION_JOB_FLAGS | JOB_CANNOT_OPEN_SLOTS & ~JOB_REOPEN_ON_ROUNDSTART_LOSS /datum/job/prisoner/New() . = ..() diff --git a/code/modules/jobs/job_types/shaft_miner.dm b/code/modules/jobs/job_types/shaft_miner.dm index 83fb669b387..592e9d4680c 100644 --- a/code/modules/jobs/job_types/shaft_miner.dm +++ b/code/modules/jobs/job_types/shaft_miner.dm @@ -39,9 +39,10 @@ /obj/item/flashlight/seclite = 1, /obj/item/knife/combat/survival = 1, /obj/item/mining_voucher = 1, - /obj/item/suit_voucher = 1, + /obj/item/suit_voucher = 1, //NOVA EDIT ADDITION /obj/item/stack/marker_beacon/ten = 1, - ) //NOVA EDIT: Suit_Voucher is an addition, one line up + /obj/item/t_scanner/adv_mining_scanner/lesser = 1, + ) belt = /obj/item/modular_computer/pda/shaftminer ears = /obj/item/radio/headset/headset_cargo/mining gloves = /obj/item/clothing/gloves/color/black @@ -90,6 +91,7 @@ /obj/item/gun/energy/recharge/kinetic_accelerator = 2, /obj/item/kinetic_crusher/compact = 1, /obj/item/resonator/upgraded = 1, + /obj/item/t_scanner/adv_mining_scanner/lesser = 1, ) box = /obj/item/storage/box/survival/mining/bonus l_pocket = /obj/item/modular_computer/pda/shaftminer diff --git a/code/modules/jobs/job_types/station_trait/bridge_assistant.dm b/code/modules/jobs/job_types/station_trait/bridge_assistant.dm new file mode 100644 index 00000000000..b1ae57de1ff --- /dev/null +++ b/code/modules/jobs/job_types/station_trait/bridge_assistant.dm @@ -0,0 +1,80 @@ +/datum/job/bridge_assistant + title = JOB_BRIDGE_ASSISTANT + description = "Watch over the Bridge, command its consoles, and spend your days brewing coffee for higher-ups." + auto_deadmin_role_flags = DEADMIN_POSITION_HEAD //not really a head but close enough + department_head = list(JOB_CAPTAIN) + faction = FACTION_STATION + total_positions = 0 + spawn_positions = 0 + supervisors = "the Captain, and in non-Bridge related situations the other heads" + minimal_player_age = 7 + exp_requirements = 300 + exp_required_type = EXP_TYPE_CREW + exp_granted_type = EXP_TYPE_CREW + config_tag = "BRIDGE_ASSISTANT" + + outfit = /datum/outfit/job/bridge_assistant + plasmaman_outfit = /datum/outfit/plasmaman/bridge_assistant + + paycheck = PAYCHECK_CREW + paycheck_department = ACCOUNT_CIV + + liver_traits = list(TRAIT_PRETENDER_ROYAL_METABOLISM) + + display_order = JOB_DISPLAY_ORDER_BRIDGE_ASSISTANT + departments_list = list(/datum/job_department/command) + + family_heirlooms = list(/obj/item/banner/command/mundane) + + mail_goodies = list( + /obj/item/storage/fancy/cigarettes = 1, + /obj/item/pen/fountain = 1, + ) + rpg_title = "Royal Guard" + allow_bureaucratic_error = FALSE + job_flags = STATION_JOB_FLAGS | STATION_TRAIT_JOB_FLAGS + ignore_human_authority = TRUE + +/datum/job/bridge_assistant/after_spawn(mob/living/spawned, client/player_client) + . = ..() + ADD_TRAIT(spawned, TRAIT_NO_TWOHANDING, JOB_TRAIT) + +/datum/job/bridge_assistant/get_roundstart_spawn_point() + var/list/chair_turfs = list() + var/list/possible_turfs = list() + var/area/bridge = GLOB.areas_by_type[/area/station/command/bridge] + if(isnull(bridge)) + return ..() //if no bridge, spawn on the arrivals shuttle (but also what the fuck) + for (var/list/zlevel_turfs as anything in bridge.get_zlevel_turf_lists()) + for (var/turf/possible_turf as anything in zlevel_turfs) + if(possible_turf.is_blocked_turf()) + continue + if(locate(/obj/structure/chair) in possible_turf) + chair_turfs += possible_turf + continue + possible_turfs += possible_turf + if(length(chair_turfs)) + return pick(chair_turfs) //prioritize turfs with a chair + if(length(possible_turfs)) + return pick(possible_turfs) //if none, just pick a random turf in the bridge + return ..() //if the bridge has no turfs, spawn on the arrivals shuttle + +/datum/outfit/job/bridge_assistant + name = "Bridge Assistant" + jobtype = /datum/job/bridge_assistant + + id_trim = /datum/id_trim/job/bridge_assistant + backpack_contents = list( + /obj/item/modular_computer/pda/bridge_assistant = 1, + ) + + uniform = /obj/item/clothing/under/trek/command/next + neck = /obj/item/clothing/neck/large_scarf/blue + belt = /obj/item/storage/belt/utility/full/inducer + ears = /obj/item/radio/headset/headset_com + glasses = /obj/item/clothing/glasses/sunglasses + gloves = /obj/item/clothing/gloves/fingerless + head = /obj/item/clothing/head/soft/black + shoes = /obj/item/clothing/shoes/laceup + l_pocket = /obj/item/gun/energy/e_gun/mini + r_pocket = /obj/item/assembly/flash/handheld diff --git a/code/modules/jobs/job_types/station_trait/cargo_gorilla.dm b/code/modules/jobs/job_types/station_trait/cargo_gorilla.dm new file mode 100644 index 00000000000..87363bf9b7b --- /dev/null +++ b/code/modules/jobs/job_types/station_trait/cargo_gorilla.dm @@ -0,0 +1,50 @@ +/datum/job/cargo_gorilla + title = JOB_CARGO_GORILLA + description = "Assist the supply department by moving freight and disposing of unwanted fruits." + department_head = list(JOB_QUARTERMASTER) + faction = FACTION_STATION + total_positions = 0 + spawn_positions = 0 + supervisors = SUPERVISOR_QM + spawn_type = /mob/living/basic/gorilla/cargorilla + config_tag = "CARGO_GORILLA" + random_spawns_possible = FALSE + display_order = JOB_DISPLAY_ORDER_CARGO_GORILLA + departments_list = list(/datum/job_department/cargo) + mail_goodies = list( + /obj/item/food/grown/banana = 1, + ) + rpg_title = "Beast of Burden" + allow_bureaucratic_error = FALSE + job_flags = STATION_TRAIT_JOB_FLAGS | JOB_ANNOUNCE_ARRIVAL | JOB_NEW_PLAYER_JOINABLE | JOB_EQUIP_RANK + +/datum/job/cargo_gorilla/get_roundstart_spawn_point() + if (length(GLOB.gorilla_start)) + return pick(GLOB.gorilla_start) + return ..() + +/datum/job/cargo_gorilla/get_spawn_mob(client/player_client, atom/spawn_point) + if (!player_client) + return + var/mob/living/the_big_man = new spawn_type(get_turf(spawn_point)) + the_big_man.fully_replace_character_name(the_big_man.real_name, pick(GLOB.cargorilla_names)) + return the_big_man + +/datum/job/cargo_gorilla/after_spawn(mob/living/spawned, client/player_client) + . = ..() + // Gorilla with a wage, what's he buyin? + var/datum/bank_account/bank_account = new(spawned.real_name, src) + bank_account.payday(STARTING_PAYCHECKS, TRUE) + bank_account.replaceable = FALSE + spawned.add_mob_memory(/datum/memory/key/account, remembered_id = bank_account.account_id) + + var/obj/item/card/id/advanced/cargo_gorilla/gorilla_id = new(spawned.loc) + gorilla_id.registered_name = spawned.name + gorilla_id.update_label() + gorilla_id.registered_account = bank_account + bank_account.bank_cards += gorilla_id + spawned.put_in_hands(gorilla_id, del_on_fail = TRUE) + + to_chat(spawned, span_boldnotice("You are Cargorilla, a pacifist friend of the station and carrier of freight.")) + to_chat(spawned, span_notice("You can pick up crates by clicking on them, and drop them by clicking on the ground.")) + spawned.mind.special_role = "Cargorilla" diff --git a/code/modules/keybindings/bindings_atom.dm b/code/modules/keybindings/bindings_atom.dm index 6dadcd5768e..e99e3714c6b 100644 --- a/code/modules/keybindings/bindings_atom.dm +++ b/code/modules/keybindings/bindings_atom.dm @@ -2,12 +2,21 @@ // Only way to do that is to tie the behavior into the focus's keyLoop(). /atom/movable/keyLoop(client/user) - var/movement_dir = NONE - for(var/_key in user?.keys_held) - movement_dir = movement_dir | user.movement_keys[_key] - if(user?.next_move_dir_add) - movement_dir |= user.next_move_dir_add - if(user?.next_move_dir_sub) + // Clients don't go null randomly. They do go null unexpectedly though, when they're poked in particular ways + // keyLoop is called by a for loop over mobs. We're guarenteed that all the mobs have clients at the START + // But the move of one mob might poke the client of another, so we do this + if(!user) + return FALSE + var/movement_dir = user.intended_direction | user.next_move_dir_add + // If we're not movin anywhere, we aren't movin anywhere + // Safe because nothing adds to movement_dir after this moment + if(!movement_dir) + // No input == our removal would have done nothing + // So we can safely forget about it + user.next_move_dir_sub = NONE + return FALSE + + if(user.next_move_dir_sub) movement_dir &= ~user.next_move_dir_sub // Sanity checks in case you hold left and right and up to make sure you only go up if((movement_dir & NORTH) && (movement_dir & SOUTH)) @@ -15,14 +24,21 @@ if((movement_dir & EAST) && (movement_dir & WEST)) movement_dir &= ~(EAST|WEST) - if(user && movement_dir) //If we're not moving, don't compensate, as byond will auto-fill dir otherwise + if(user.dir != NORTH && movement_dir) //If we're not moving, don't compensate, as byond will auto-fill dir otherwise movement_dir = turn(movement_dir, -dir2angle(user.dir)) //By doing this we ensure that our input direction is offset by the client (camera) direction //turn without moving while using the movement lock key, unless something wants to ignore it and move anyway - if(user?.movement_locked && !(SEND_SIGNAL(src, COMSIG_MOVABLE_KEYBIND_FACE_DIR, movement_dir) & COMSIG_IGNORE_MOVEMENT_LOCK)) + if(user.movement_locked && !(SEND_SIGNAL(src, COMSIG_MOVABLE_KEYBIND_FACE_DIR, movement_dir) & COMSIG_IGNORE_MOVEMENT_LOCK)) keybind_face_direction(movement_dir) - else - user?.Move(get_step(src, movement_dir), movement_dir) + // Null check cause of the signal above + else if(user) + user.Move(get_step(src, movement_dir), movement_dir) return !!movement_dir //true if there was actually any player input return FALSE + +/client/proc/calculate_move_dir() + var/movement_dir = NONE + for(var/_key in keys_held) + movement_dir |= movement_keys[_key] + intended_direction = movement_dir diff --git a/code/modules/keybindings/bindings_client.dm b/code/modules/keybindings/bindings_client.dm index 0aa0fd6952e..4a72fb9123d 100644 --- a/code/modules/keybindings/bindings_client.dm +++ b/code/modules/keybindings/bindings_client.dm @@ -47,9 +47,10 @@ //the time a key was pressed isn't actually used anywhere (as of 2019-9-10) but this allows easier access usage/checking keys_held[_key] = world.time - if(!movement_locked) - var/movement = movement_keys[_key] - if(!(next_move_dir_sub & movement)) + var/movement = movement_keys[_key] + if(movement) + calculate_move_dir() + if(!movement_locked && !(next_move_dir_sub & movement)) next_move_dir_add |= movement // Client-level keybindings are ones anyone should be able to do at any time @@ -74,11 +75,10 @@ if(kb.can_use(src) && kb.down(src) && keycount >= MAX_COMMANDS_PER_KEY) break - holder?.key_down(_key, src) - mob.focus?.key_down(_key, src) + holder?.key_down(_key, src, full_key) + mob.focus?.key_down(_key, src, full_key) mob.update_mouse_pointer() - /client/verb/keyUp(_key as text) set instant = TRUE set hidden = TRUE @@ -93,9 +93,10 @@ keys_held -= _key - if(!movement_locked) - var/movement = movement_keys[_key] - if(!(next_move_dir_add & movement)) + var/movement = movement_keys[_key] + if(movement) + calculate_move_dir() + if(!movement_locked && !(next_move_dir_add & movement)) next_move_dir_sub |= movement // We don't do full key for release, because for mod keys you diff --git a/code/modules/keybindings/setup.dm b/code/modules/keybindings/setup.dm index ef87e12d901..d239c48d9ce 100644 --- a/code/modules/keybindings/setup.dm +++ b/code/modules/keybindings/setup.dm @@ -1,6 +1,7 @@ // Set a client's focus to an object and override these procs on that object to let it handle keypresses -/datum/proc/key_down(key, client/user) // Called when a key is pressed down initially +/datum/proc/key_down(key, client/user, full_key) // Called when a key is pressed down initially + SHOULD_CALL_PARENT(TRUE) return /datum/proc/key_up(key, client/user) // Called when a key is released return diff --git a/code/modules/library/barcode_scanner.dm b/code/modules/library/barcode_scanner.dm index f96b60358c2..5cacf03e013 100644 --- a/code/modules/library/barcode_scanner.dm +++ b/code/modules/library/barcode_scanner.dm @@ -6,6 +6,7 @@ throw_speed = 3 throw_range = 5 w_class = WEIGHT_CLASS_TINY + custom_materials = list(/datum/material/iron = SHEET_MATERIAL_AMOUNT * 2) ///Weakref to the library computer we are connected to. var/datum/weakref/computer_ref ///The current scanning mode (BARCODE_SCANNER_CHECKIN|BARCODE_SCANNER_INVENTORY) diff --git a/code/modules/library/skill_learning/job_skillchips/chef.dm b/code/modules/library/skill_learning/job_skillchips/chef.dm index 589978452e1..75bc494543c 100644 --- a/code/modules/library/skill_learning/job_skillchips/chef.dm +++ b/code/modules/library/skill_learning/job_skillchips/chef.dm @@ -19,5 +19,5 @@ style.teach(user, make_temporary = TRUE) /obj/item/skillchip/job/chef/on_deactivate(mob/living/carbon/user, silent = FALSE) - style.remove(user) + style.fully_remove(user) return ..() diff --git a/code/modules/lighting/lighting_area.dm b/code/modules/lighting/lighting_area.dm index c6f427f592f..84170b6964f 100644 --- a/code/modules/lighting/lighting_area.dm +++ b/code/modules/lighting/lighting_area.dm @@ -51,9 +51,10 @@ UnregisterSignal(SSdcs, COMSIG_STARLIGHT_COLOR_CHANGED) var/list/z_offsets = SSmapping.z_level_to_plane_offset if(length(lighting_effects) > 1) - for(var/turf/T as anything in get_contained_turfs()) - if(z_offsets[T.z]) - T.cut_overlay(lighting_effects[z_offsets[T.z] + 1]) + for(var/area_zlevel as anything in 1 to get_highest_zlevel()) + if(z_offsets[area_zlevel]) + for(var/turf/T as anything in get_turfs_by_zlevel(area_zlevel)) + T.cut_overlay(lighting_effects[z_offsets[T.z] + 1]) cut_overlay(lighting_effects[1]) lighting_effects = null area_has_base_lighting = FALSE @@ -91,17 +92,18 @@ add_overlay(lighting_effects[1]) var/list/z_offsets = SSmapping.z_level_to_plane_offset - if(length(lighting_effects) > 1) - // This inside loop is EXTREMELY hot because it's run by space tiles. Don't want no part in that - for(var/turf/T as anything in get_contained_turfs()) - T.luminosity = 1 - // We will only add overlays to turfs not on the first z layer, because that's a significantly lesser portion - // And we need to do them separate, or lighting will go fuckey - if(z_offsets[T.z]) - T.add_overlay(lighting_effects[z_offsets[T.z] + 1]) - else - for(var/turf/T as anything in get_contained_turfs()) - T.luminosity = 1 + for (var/area_zlevel in 1 to get_highest_zlevel()) + // We will only add overlays to turfs not on the first z layer, because that's a significantly lesser portion + // And we need to do them separate, or lighting will go fuckey + // This inside loop is EXTREMELY hot because it's run by space tiles, so we do the if check once on the outside + if(length(lighting_effects) > 1 && z_offsets[area_zlevel]) + var/lighting_effect_to_add = lighting_effects[z_offsets[area_zlevel] + 1] + for(var/turf/area_turf as anything in get_turfs_by_zlevel(area_zlevel)) + area_turf.luminosity = 1 + area_turf.add_overlay(lighting_effect_to_add) + else + for(var/turf/area_turf as anything in get_turfs_by_zlevel(area_zlevel)) + area_turf.luminosity = 1 area_has_base_lighting = TRUE diff --git a/code/modules/lighting/lighting_atom.dm b/code/modules/lighting/lighting_atom.dm index 5d82c33e23f..e3f72da5bbf 100644 --- a/code/modules/lighting/lighting_atom.dm +++ b/code/modules/lighting/lighting_atom.dm @@ -44,7 +44,7 @@ /atom/proc/update_light() SHOULD_NOT_SLEEP(TRUE) - if(light_system != STATIC_LIGHT) + if(light_system != COMPLEX_LIGHT) CRASH("update_light() for [src] with following light_system value: [light_system]") if (!light_power || !light_range || !light_on) // We won't emit light anyways, destroy the light source. diff --git a/code/modules/lighting/lighting_setup.dm b/code/modules/lighting/lighting_setup.dm index d6bf19711ef..c148530d1cd 100644 --- a/code/modules/lighting/lighting_setup.dm +++ b/code/modules/lighting/lighting_setup.dm @@ -1,12 +1,12 @@ /proc/create_all_lighting_objects() - for(var/area/A as anything in GLOB.areas) - if(!A.static_lighting) + for(var/area/area as anything in GLOB.areas) + if(!area.static_lighting) continue - - for(var/turf/T as anything in A.get_contained_turfs()) - if(T.space_lit) - continue - new /datum/lighting_object(T) + for (var/list/zlevel_turfs as anything in area.get_zlevel_turf_lists()) + for(var/turf/area_turf as anything in zlevel_turfs) + if(area_turf.space_lit) + continue + new /datum/lighting_object(area_turf) CHECK_TICK CHECK_TICK diff --git a/code/modules/lighting/lighting_source.dm b/code/modules/lighting/lighting_source.dm index 90af6a855ce..1a32686aa19 100644 --- a/code/modules/lighting/lighting_source.dm +++ b/code/modules/lighting/lighting_source.dm @@ -80,7 +80,7 @@ if (needs_update) SSlighting.sources_queue -= src SSlighting.current_sources -= src - + top_atom = null source_atom = null source_turf = null @@ -107,15 +107,6 @@ UnregisterSignal(old_atom_host, COMSIG_MOVABLE_MOVED) return TRUE -///signal handler for when our host atom moves and we need to update our effects -/datum/light_source/proc/update_host_lights(atom/movable/host) - SIGNAL_HANDLER - - if(QDELETED(host)) - return - - host.update_light() - // Yes this doesn't align correctly on anything other than 4 width tabs. // If you want it to go switch everybody to elastic tab stops. // Actually that'd be great if you could! @@ -127,6 +118,19 @@ needs_update = level; \ } +///signal handler for when our host atom moves and we need to update our effects +/datum/light_source/proc/update_host_lights(atom/movable/host) + SIGNAL_HANDLER + if(QDELETED(host)) + return + + // If the host is our owner, we want to call their update so they can decide who the top atom should be + if(host == source_atom) + host.update_light() + return + + // Otherwise, our top atom just moved, so we trigger a normal rebuild + EFFECT_UPDATE(LIGHTING_CHECK_UPDATE) /// This proc will cause the light source to update the top atom, and add itself to the update queue. /datum/light_source/proc/update(atom/new_top_atom) diff --git a/code/modules/mapfluff/ruins/objects_and_mobs/museum.dm b/code/modules/mapfluff/ruins/objects_and_mobs/museum.dm new file mode 100644 index 00000000000..20210d56cc9 --- /dev/null +++ b/code/modules/mapfluff/ruins/objects_and_mobs/museum.dm @@ -0,0 +1,131 @@ +/obj/machinery/computer/terminal/museum + name = "exhibit info terminal" + desc = "A relatively low-tech info board. Not as low-tech as an actual sign though. Appears to be quite old." + upperinfo = "Nanotrasen Museum Exhibit Info" + icon_state = "plaque" + icon_screen = "plaque_screen" + icon_keyboard = null + +/obj/effect/replica_spawner //description and name are intact, better to make a new fluff object for stuff that is not actually ingame as an object + name = "replica creator" + desc = "This creates a fluff object that looks exactly like the input, but like obviously a replica. Do not for the love of god use with stuff that has Initialize side effects." + icon = 'icons/hud/screen_gen.dmi' + icon_state = "x2" + invisibility = INVISIBILITY_ABSTRACT //nope, can't see this + anchored = TRUE + density = TRUE + opacity = FALSE + var/replica_path = /obj/structure/fluff + var/target_path + var/obvious_replica = TRUE + +/obj/effect/replica_spawner/Initialize(mapload) + . = ..() + if(isnull(target_path)) + return INITIALIZE_HINT_QDEL //no use to make a replica of null + var/atom/appearance_object = new target_path + var/atom/new_replica = new replica_path(loc) + + new_replica.icon = appearance_object.icon + new_replica.icon_state = appearance_object.icon_state + new_replica.copy_overlays(appearance_object.appearance, cut_old = TRUE) + new_replica.density = appearance_object.density //for like nondense showers and stuff + + new_replica.name = "[appearance_object.name][obvious_replica ? " replica" : ""]" + new_replica.desc = "[appearance_object.desc][obvious_replica ? " ..except this one is a replica.": ""]" + qdel(appearance_object) + qdel(src) + return INITIALIZE_HINT_QDEL + +/obj/structure/fluff/dnamod + name = "DNA Modifier" + desc = "DNA Manipulator replica. Essentially just a box of cool lights." + icon = 'icons/obj/service/hydroponics/equipment.dmi' + icon_state = "dnamod" + density = TRUE + +/obj/structure/fluff/preserved_borer + name = "preserved borer exhibit" + desc = "A preserved cortical borer. Probably been there long enough to not last long outside the exhibit." + icon = 'icons/obj/structures.dmi' + icon_state = "preservedborer" + density = TRUE + +/obj/structure/fluff/balloon_nuke + name = "nuclear balloon explosive" + desc = "You probably shouldn't stick around to see if this is inflated." + icon = /obj/machinery/nuclearbomb::icon + icon_state = /obj/machinery/nuclearbomb::icon_state + density = TRUE + max_integrity = 5 //one tap + +/obj/structure/fluff/balloon_nuke/atom_destruction() + playsound(loc, 'sound/effects/cartoon_pop.ogg', 75, vary = TRUE) + ..() + +/obj/structure/fluff/fake_camera + name = /obj/machinery/camera::name + desc = /obj/machinery/camera::desc + icon = /obj/machinery/camera::icon + icon_state = /obj/machinery/camera::icon_state + +/obj/structure/fluff/fake_scrubber + name = /obj/machinery/atmospherics/components/unary/vent_scrubber::name + desc = /obj/machinery/atmospherics/components/unary/vent_scrubber::desc + icon = /obj/machinery/atmospherics/components/unary/vent_scrubber::icon + layer = /obj/machinery/atmospherics/components/unary/vent_scrubber::layer + plane = FLOOR_PLANE + icon_state = "scrub_on" + +/obj/structure/fluff/fake_vent + name = /obj/machinery/atmospherics/components/unary/vent_pump::name + desc = /obj/machinery/atmospherics/components/unary/vent_pump::desc + icon = /obj/machinery/atmospherics/components/unary/vent_pump::icon + layer = /obj/machinery/atmospherics/components/unary/vent_scrubber::layer + plane = FLOOR_PLANE + icon_state = "vent_out" + +/turf/open/mirage + icon = 'icons/turf/floors.dmi' + icon_state = "mirage" + invisibility = INVISIBILITY_ABSTRACT + /// target turf x and y are offsets from our location instead of a direct coordinate + var/offset = TRUE + /// tile range that we show, 2 means that the target tile and two tiles ahead of it in our direction will show + var/range + var/target_turf_x = 0 + var/target_turf_y = 0 + /// if not specified, uses our Z + var/target_turf_z + +/turf/open/mirage/Initialize(mapload) + . = ..() + if(isnull(range)) + range = world.view + var/used_z = target_turf_z || z //if target z is not defined, use ours + var/turf/target = locate(offset ? target_turf_x + x : target_turf_x, offset ? target_turf_y + y : target_turf_y, used_z) + AddElement(/datum/element/mirage_border, target, dir, range) + +/obj/effect/mapping_helpers/ztrait_injector/museum + traits_to_add = list(ZTRAIT_NOPARALLAX = TRUE, ZTRAIT_NOXRAY = TRUE, ZTRAIT_NOPHASE = TRUE, ZTRAIT_BASETURF = /turf/open/indestructible/plating, ZTRAIT_SECRET = TRUE) + +/obj/effect/smooths_with_walls + name = "effect that smooths with walls" + desc = "to supplement /turf/open/mirage." + icon = 'icons/hud/screen_gen.dmi' + icon_state = "x2" + invisibility = INVISIBILITY_ABSTRACT + anchored = TRUE + density = TRUE + smoothing_flags = SMOOTH_BITMASK + smoothing_groups = SMOOTH_GROUP_WALLS + SMOOTH_GROUP_CLOSED_TURFS + +/obj/item/paper/fluff/museum/noend + name = "scrambled note" + default_raw_text = {"this place, +
    god whose idea was to build a museum in the void in the middle of god knows where there is no reason we should have done this +
    and those mannequins why do they stare back where the fuck did you get these from +
    how would we even get visitors here +
    sometimes i can catch them moving +
    +
    we should have never come here"} diff --git a/code/modules/mapfluff/ruins/spaceruin_code/hilbertshotel.dm b/code/modules/mapfluff/ruins/spaceruin_code/hilbertshotel.dm index 3cdd4e0ab95..d99902f448a 100644 --- a/code/modules/mapfluff/ruins/spaceruin_code/hilbertshotel.dm +++ b/code/modules/mapfluff/ruins/spaceruin_code/hilbertshotel.dm @@ -9,10 +9,11 @@ GLOBAL_VAR_INIT(hhMysteryRoomNumber, rand(1, 999999)) w_class = WEIGHT_CLASS_SMALL resistance_flags = INDESTRUCTIBLE | LAVA_PROOF | FIRE_PROOF | UNACIDABLE | ACID_PROOF //NOVA EDIT ADDITION - GHOST HOTEL UPDATE - var/list/static/hotel_maps = list("Generic", "Apartment") + var/list/static/hotel_maps = list("Generic", "Apartment", "Beach Condo") //standart - hilber's hotel room //apartment - see /datum/map_template/ghost_cafe_rooms - var/datum/map_template/ghost_cafe_rooms/ghost_cafe_rooms_apartment + var/datum/map_template/ghost_cafe_rooms/apartment/ghost_cafe_rooms_apartment + var/datum/map_template/ghost_cafe_rooms/beach_condo/ghost_cafe_rooms_beach_condo //NOVA EDIT END var/datum/map_template/hilbertshotel/hotelRoomTemp var/datum/map_template/hilbertshotel/empty/hotelRoomTempEmpty @@ -34,6 +35,7 @@ GLOBAL_VAR_INIT(hhMysteryRoomNumber, rand(1, 999999)) hotelRoomTempLore = new() //NOVA EDIT ADDITION - GHOST HOTEL UPDATE ghost_cafe_rooms_apartment = new() + ghost_cafe_rooms_beach_condo = new() //NOVA EDIT END var/area/currentArea = get_area(src) if(currentArea.type == /area/ruin/space/has_grav/powered/hilbertresearchfacility/secretroom) @@ -178,6 +180,8 @@ GLOBAL_VAR_INIT(hhMysteryRoomNumber, rand(1, 999999)) //NOVA EDIT ADDITION START - GHOST HOTEL UPDATE else if(chosen_room == "Apartment") load_from = ghost_cafe_rooms_apartment + else if(chosen_room == "Beach Condo") + load_from = ghost_cafe_rooms_beach_condo //NOVA EDIT ADDITION END load_from.load(bottom_left) diff --git a/code/modules/mapfluff/ruins/spaceruin_code/oldstation/oldstation_rnd.dm b/code/modules/mapfluff/ruins/spaceruin_code/oldstation/oldstation_rnd.dm index 58d14e0d041..5f0935bb8bd 100644 --- a/code/modules/mapfluff/ruins/spaceruin_code/oldstation/oldstation_rnd.dm +++ b/code/modules/mapfluff/ruins/spaceruin_code/oldstation/oldstation_rnd.dm @@ -4,15 +4,24 @@ req_access = list(ACCESS_AWAY_SCIENCE) /obj/machinery/rnd/server/oldstation/Initialize(mapload) - register_context() var/datum/techweb/oldstation_web = locate(/datum/techweb/oldstation) in SSresearch.techwebs stored_research = oldstation_web return ..() /obj/machinery/rnd/server/oldstation/add_context(atom/source, list/context, obj/item/held_item, mob/user) + . = ..() + if(held_item && istype(held_item, /obj/item/research_notes)) context[SCREENTIP_CONTEXT_LMB] = "Generate research points" - return CONTEXTUAL_SCREENTIP_SET + return CONTEXTUAL_SCREENTIP_SET + +/obj/machinery/rnd/server/oldstation/examine(mob/user) + . = ..() + + if(!in_range(user, src) && !isobserver(user)) + return + + . += span_notice("Insert [EXAMINE_HINT("Research Notes")] to generate points.") /obj/machinery/rnd/server/oldstation/attackby(obj/item/attacking_item, mob/user, params) if(istype(attacking_item, /obj/item/research_notes) && stored_research) diff --git a/code/modules/mapping/mapping_helpers.dm b/code/modules/mapping/mapping_helpers.dm index 9c5ac879aee..faaaf9e4206 100644 --- a/code/modules/mapping/mapping_helpers.dm +++ b/code/modules/mapping/mapping_helpers.dm @@ -867,11 +867,12 @@ INITIALIZE_IMMEDIATE(/obj/effect/mapping_helpers/no_lava) /obj/effect/mapping_helpers/dead_body_placer/LateInitialize() var/area/morgue_area = get_area(src) var/list/obj/structure/bodycontainer/morgue/trays = list() - for(var/turf/area_turf as anything in morgue_area.get_contained_turfs()) - var/obj/structure/bodycontainer/morgue/morgue_tray = locate() in area_turf - if(isnull(morgue_tray) || !morgue_tray.beeper || morgue_tray.connected.loc != morgue_tray) - continue - trays += morgue_tray + for (var/list/zlevel_turfs as anything in morgue_area.get_zlevel_turf_lists()) + for(var/turf/area_turf as anything in zlevel_turfs) + var/obj/structure/bodycontainer/morgue/morgue_tray = locate() in area_turf + if(isnull(morgue_tray) || !morgue_tray.beeper || morgue_tray.connected.loc != morgue_tray) + continue + trays += morgue_tray var/numtrays = length(trays) if(numtrays == 0) @@ -959,14 +960,15 @@ INITIALIZE_IMMEDIATE(/obj/effect/mapping_helpers/no_lava) var/list/table_turfs = list() var/list/open_turfs = list() var/turf/dogbed_turf - for(var/turf/area_turf as anything in celebration_area.get_contained_turfs()) - if(locate(/obj/structure/table/reinforced) in area_turf) - table_turfs += area_turf - if(locate(/obj/structure/bed/dogbed/ian) in area_turf) - dogbed_turf = area_turf - if(isopenturf(area_turf)) - new /obj/effect/decal/cleanable/confetti(area_turf) - open_turfs += area_turf + for (var/list/zlevel_turfs as anything in celebration_area.get_zlevel_turf_lists()) + for(var/turf/area_turf as anything in zlevel_turfs) + if(locate(/obj/structure/table/reinforced) in area_turf) + table_turfs += area_turf + if(locate(/obj/structure/bed/dogbed/ian) in area_turf) + dogbed_turf = area_turf + if(isopenturf(area_turf)) + new /obj/effect/decal/cleanable/confetti(area_turf) + open_turfs += area_turf if(isnull(dogbed_turf) && map_warning) log_mapping("[src] in [celebration_area] could not find Ian's dogbed.") @@ -1031,11 +1033,12 @@ INITIALIZE_IMMEDIATE(/obj/effect/mapping_helpers/no_lava) var/area/celebration_area = get_area(src) var/list/table_turfs = list() var/turf/dogbed_turf - for(var/turf/area_turf as anything in celebration_area.get_contained_turfs()) - if(locate(/obj/structure/table/reinforced) in area_turf) - table_turfs += area_turf - if(locate(/obj/structure/bed/dogbed/ian) in area_turf) - dogbed_turf = area_turf + for (var/list/zlevel_turfs as anything in celebration_area.get_zlevel_turf_lists()) + for(var/turf/area_turf as anything in zlevel_turfs) + if(locate(/obj/structure/table/reinforced) in area_turf) + table_turfs += area_turf + if(locate(/obj/structure/bed/dogbed/ian) in area_turf) + dogbed_turf = area_turf if(isnull(dogbed_turf)) log_mapping("[src] in [celebration_area] could not find Ian's dogbed.") @@ -1392,3 +1395,32 @@ INITIALIZE_IMMEDIATE(/obj/effect/mapping_helpers/no_lava) var/turf/our_turf = get_turf(src) // In case a locker ate us or something our_turf.AddElement(/datum/element/bombable_turf) return INITIALIZE_HINT_QDEL + +/// this helper buckles all mobs on the tile to the first buckleable object +/obj/effect/mapping_helpers/mob_buckler + name = "Buckle Mob" + icon_state = "buckle" + late = TRUE + ///whether we force a buckle + var/force_buckle = FALSE + +/obj/effect/mapping_helpers/mob_buckler/Initialize(mapload) + . = ..() + var/atom/movable/buckle_to + var/list/mobs = list() + for(var/atom/movable/possible_buckle as anything in loc) + if(isnull(buckle_to) && possible_buckle.can_buckle) + buckle_to = possible_buckle + continue + + if(isliving(possible_buckle)) + mobs += possible_buckle + + if(isnull(buckle_to)) + log_mapping("[type] at [x] [y] [z] did not find anything to buckle to") + return INITIALIZE_HINT_QDEL + + for(var/mob/living/mob as anything in mobs) + buckle_to.buckle_mob(mob, force = force_buckle) + + return INITIALIZE_HINT_QDEL diff --git a/code/modules/mapping/reader.dm b/code/modules/mapping/reader.dm index ab6743ff17a..4328ff34110 100644 --- a/code/modules/mapping/reader.dm +++ b/code/modules/mapping/reader.dm @@ -930,8 +930,10 @@ GLOBAL_LIST_EMPTY(map_model_default) if(!new_z) old_area = crds.loc - old_area.turfs_to_uncontain += crds - area_instance.contained_turfs.Add(crds) + LISTASSERTLEN(old_area.turfs_to_uncontain_by_zlevel, crds.z, list()) + LISTASSERTLEN(area_instance.turfs_by_zlevel, crds.z, list()) + old_area.turfs_to_uncontain_by_zlevel[crds.z] += crds + area_instance.turfs_by_zlevel[crds.z] += crds area_instance.contents.Add(crds) if(GLOB.use_preloader) @@ -1004,8 +1006,6 @@ GLOBAL_LIST_EMPTY(map_model_default) if (!text) return - // If we're using a semi colon, we can do this as splittext rather then constant calls to find_next_delimiter_position - // This does make the code a bit harder to read, but saves a good bit of time so suck it up var/position var/old_position = 1 while(position != 0) diff --git a/code/modules/mapping/ruins.dm b/code/modules/mapping/ruins.dm index a7b9480a34e..4987016c5a0 100644 --- a/code/modules/mapping/ruins.dm +++ b/code/modules/mapping/ruins.dm @@ -63,8 +63,17 @@ new /obj/effect/landmark/ruin(center, src) return center - -/proc/seedRuins(list/z_levels = null, budget = 0, whitelist = list(/area/space), list/potentialRuins, clear_below = FALSE) +/** + * Loads the ruins for a given z level. + * @param z_levels The z levels to load ruins on. + * @param budget The budget to spend on ruins. Compare against the cost of the ruins in /datum/map_template/ruin. + * @param whitelist A list of areas to allow ruins to be placed in. + * @param potentialRuins A list of ruins to choose from. + * @param clear_below Whether to clear the area below the ruin. Used for multiz ruins. + * @param mineral_budget The budget to spend on ruins that spawn ore vents. Map templates with vents have that defined by mineral_cost. + * @param mineral_budget_update What type of ore distribution should spawn from ruins picked by this cave generator? This list is copied from ores_spawned.dm into SSore_generation.ore_vent_minerals. + */ +/proc/seedRuins(list/z_levels = null, budget = 0, whitelist = list(/area/space), list/potentialRuins, clear_below = FALSE, mineral_budget = 15, mineral_budget_update) if(!z_levels || !z_levels.len) WARNING("No Z levels provided - Not generating ruins") return @@ -84,6 +93,12 @@ if(PERFORM_ALL_TESTS(log_mapping)) log_mapping("All ruins being loaded for map testing.") + switch(mineral_budget_update) //If we use more map configurations, add another case + if(OREGEN_PRESET_LAVALAND) + SSore_generation.ore_vent_minerals = expand_weights(GLOB.ore_vent_minerals_lavaland) + if(OREGEN_PRESET_TRIPLE_Z) + SSore_generation.ore_vent_minerals = expand_weights(GLOB.ore_vent_minerals_triple_z) + //Set up the starting ruin list for(var/key in ruins) var/datum/map_template/ruin/R = ruins[key] @@ -93,14 +108,14 @@ R.allow_duplicates = FALSE // no multiples for testing R.always_place = !R.unpickable // unpickable ruin means it spawns as a set with another ruin - if(R.cost > budget) //Why would you do that + if(R.cost > budget || R.mineral_cost > mineral_budget) //Why would you do that continue if(R.always_place) forced_ruins[R] = -1 if(R.unpickable) continue ruins_available[R] = R.placement_weight - while(budget > 0 && (ruins_available.len || forced_ruins.len)) + while((budget > 0 || mineral_budget > 0) && (ruins_available.len || forced_ruins.len)) var/datum/map_template/ruin/current_pick var/forced = FALSE var/forced_z //If set we won't pick z level and use this one instead. @@ -159,6 +174,7 @@ log_world("Failed to place [current_pick.name] ruin.") else budget -= current_pick.cost + mineral_budget -= current_pick.mineral_cost if(!current_pick.allow_duplicates) for(var/datum/map_template/ruin/R in ruins_available) if(R.id == current_pick.id) @@ -189,7 +205,7 @@ //Update the available list for(var/datum/map_template/ruin/R in ruins_available) - if(R.cost > budget) + if(R.cost > budget || R.mineral_cost > mineral_budget) ruins_available -= R log_world("Ruin loader finished with [budget] left to spend.") diff --git a/code/modules/mapping/space_management/space_reservation.dm b/code/modules/mapping/space_management/space_reservation.dm index 2809ae65e6c..04ba59ab5a4 100644 --- a/code/modules/mapping/space_management/space_reservation.dm +++ b/code/modules/mapping/space_management/space_reservation.dm @@ -81,9 +81,13 @@ for(var/turf/cordon_turf as anything in cordon_turfs) var/area/misc/cordon/cordon_area = GLOB.areas_by_type[/area/misc/cordon] || new var/area/old_area = cordon_turf.loc - old_area.turfs_to_uncontain += cordon_turf - cordon_area.contained_turfs += cordon_turf + + LISTASSERTLEN(old_area.turfs_to_uncontain_by_zlevel, cordon_turf.z, list()) + LISTASSERTLEN(cordon_area.turfs_by_zlevel, cordon_turf.z, list()) + old_area.turfs_to_uncontain_by_zlevel[cordon_turf.z] += cordon_turf + cordon_area.turfs_by_zlevel[cordon_turf.z] += cordon_turf cordon_area.contents += cordon_turf + // Its no longer unused, but its also not "used" cordon_turf.turf_flags &= ~UNUSED_RESERVATION_TURF cordon_turf.ChangeTurf(/turf/cordon, /turf/cordon) diff --git a/code/modules/mining/boulder_processing/_boulder_processing.dm b/code/modules/mining/boulder_processing/_boulder_processing.dm new file mode 100644 index 00000000000..d7d4be2557e --- /dev/null +++ b/code/modules/mining/boulder_processing/_boulder_processing.dm @@ -0,0 +1,361 @@ +/obj/machinery/bouldertech + name = "bouldertech brand refining machine" + desc = "You shouldn't be seeing this! And bouldertech isn't even a real company!" + icon = 'icons/obj/machines/mining_machines.dmi' + icon_state = "ore_redemption" + active_power_usage = BASE_MACHINE_ACTIVE_CONSUMPTION * 0.5 + anchored = TRUE + density = TRUE + + /// What is the efficiency of minerals produced by the machine? + var/refining_efficiency = 1 + /// How much durability of an boulder can we reduce + var/boulders_processing_count = 2 + /// How many boulders can we hold maximum? + var/boulders_held_max = 1 + /// What sound plays when a thing operates? + var/usage_sound = 'sound/machines/mining/wooping_teleport.ogg' + /// Silo link to it's materials list. + var/datum/component/remote_materials/silo_materials + /// Mining points held by the machine for miners. + var/points_held = 0 + ///The action verb to display to players + var/action = "processing" + + /// Cooldown associated with the sound played for collecting mining points. + COOLDOWN_DECLARE(sound_cooldown) + /// Cooldown associated with taking in boulds. + COOLDOWN_DECLARE(accept_cooldown) + +/obj/machinery/bouldertech/Initialize(mapload) + . = ..() + + silo_materials = AddComponent( + /datum/component/remote_materials, \ + mapload, \ + mat_container_flags = MATCONTAINER_NO_INSERT \ + ) + + register_context() + +/obj/machinery/bouldertech/LateInitialize() + . = ..() + var/static/list/loc_connections = list( + COMSIG_ATOM_ENTERED = PROC_REF(on_entered), + ) + AddElement(/datum/element/connect_loc, loc_connections) + +/obj/machinery/bouldertech/Destroy() + silo_materials = null + return ..() + +/obj/machinery/bouldertech/on_deconstruction(disassembled) + if(length(contents)) + for(var/obj/item/boulder/boulder in contents) + remove_boulder(boulder) + +/obj/machinery/bouldertech/add_context(atom/source, list/context, obj/item/held_item, mob/user) + . = CONTEXTUAL_SCREENTIP_SET + + if(isnull(held_item)) + context[SCREENTIP_CONTEXT_RMB] = "Remove Boulder" + return + + if(istype(held_item, /obj/item/boulder)) + context[SCREENTIP_CONTEXT_LMB] = "Insert boulder" + else if(istype(held_item, /obj/item/card/id) && points_held > 0) + context[SCREENTIP_CONTEXT_LMB] = "Claim mining points" + else if(held_item.tool_behaviour == TOOL_SCREWDRIVER) + context[SCREENTIP_CONTEXT_LMB] = "[panel_open ? "Close" : "Open"] Panel" + else if(held_item.tool_behaviour == TOOL_WRENCH) + context[SCREENTIP_CONTEXT_LMB] = "[anchored ? "" : "Un"] Anchor" + else if(panel_open && held_item.tool_behaviour == TOOL_CROWBAR) + context[SCREENTIP_CONTEXT_LMB] = "Deconstruct" + +/obj/machinery/bouldertech/examine(mob/user) + . = ..() + . += span_notice("The machine reads that it has [span_bold("[points_held] mining points")] stored. Swipe an ID to claim them.") + . += span_notice("Click to remove a stored boulder.") + + var/boulder_count = 0 + for(var/obj/item/boulder/potential_boulder in contents) + boulder_count += 1 + . += span_notice("Storage capacity = [boulder_count]/[boulders_held_max] boulders.") + . += span_notice("Can process upto [boulders_processing_count] boulders at a time.") + + if(anchored) + . += span_notice("Its [EXAMINE_HINT("anchored")] in place.") + else + . += span_warning("It needs to be [EXAMINE_HINT("anchored")] to start operations.") + + . += span_notice("Its maintainence panel can be [EXAMINE_HINT("screwed")] [panel_open ? "closed" : "open"].") + + if(panel_open) + . += span_notice("The whole machine can be [EXAMINE_HINT("pried")] apart.") + +/obj/machinery/bouldertech/update_icon_state() + . = ..() + var/suffix = "" + if(!anchored || !is_operational || (machine_stat & (BROKEN | NOPOWER)) || panel_open) + suffix = "-off" + icon_state ="[initial(icon_state)][suffix]" + +/obj/machinery/bouldertech/wrench_act(mob/living/user, obj/item/tool) + . = ITEM_INTERACT_BLOCKING + if(default_unfasten_wrench(user, tool, time = 1.5 SECONDS) == SUCCESSFUL_UNFASTEN) + if(anchored) + begin_processing() + else + end_processing() + update_appearance(UPDATE_ICON_STATE) + return ITEM_INTERACT_SUCCESS + +/obj/machinery/bouldertech/screwdriver_act(mob/living/user, obj/item/tool) + . = ITEM_INTERACT_BLOCKING + if(default_deconstruction_screwdriver(user, "[initial(icon_state)]-off", initial(icon_state), tool)) + update_appearance(UPDATE_ICON_STATE) + return ITEM_INTERACT_SUCCESS + +/obj/machinery/bouldertech/crowbar_act(mob/living/user, obj/item/tool) + . = ITEM_INTERACT_BLOCKING + if(default_deconstruction_crowbar(tool)) + return ITEM_INTERACT_SUCCESS + +/obj/machinery/bouldertech/CanAllowThrough(atom/movable/mover, border_dir) + if(!anchored) + return FALSE + if(istype(mover, /obj/item/boulder)) + var/obj/item/boulder/boulder = mover + return can_process_boulder(boulder) + return ..() + +/** + * Can we process the boulder, checks only the boulders state & machines capacity + * Arguments + * + * * obj/item/boulder/new_boulder - the boulder we are checking + */ +/obj/machinery/bouldertech/proc/can_process_boulder(obj/item/boulder/new_boulder) + PRIVATE_PROC(TRUE) + SHOULD_BE_PURE(TRUE) + + //machine not operational + if(!anchored || panel_open || !is_operational || machine_stat & (BROKEN | NOPOWER)) + return FALSE + + //not a valid boulder + if(!istype(new_boulder) || QDELETED(new_boulder)) + return FALSE + + //someone just processed this + if(new_boulder.processed_by) + return FALSE + + //no space to hold boulders + var/boulder_count = 0 + for(var/obj/item/boulder/potential_boulder in contents) + boulder_count += 1 + if(boulder_count >= boulders_held_max) + return FALSE + + //did we cooldown enough to accept a boulder + return COOLDOWN_FINISHED(src, accept_cooldown) + +/** + * Accepts a boulder into the machine. Used when a boulder is first placed into the machine. + * Arguments + * + * * obj/item/boulder/new_boulder - the boulder to accept + */ +/obj/machinery/bouldertech/proc/accept_boulder(obj/item/boulder/new_boulder) + if(!can_process_boulder(new_boulder)) + return FALSE + + new_boulder.forceMove(src) + + COOLDOWN_START(src, accept_cooldown, 1.5 SECONDS) + + return TRUE + +/obj/machinery/bouldertech/proc/on_entered(datum/source, atom/movable/atom_movable) + SIGNAL_HANDLER + + if(!can_process_boulder(atom_movable)) + return + + INVOKE_ASYNC(src, PROC_REF(accept_boulder), atom_movable) + +/** + * Looks for a boost to the machine's efficiency, and applies it if found. + * Applied more on the chemistry integration but can be used for other things if desired. + */ +/obj/machinery/bouldertech/proc/check_for_boosts() + PROTECTED_PROC(TRUE) + + refining_efficiency = initial(refining_efficiency) //Reset refining efficiency to 100%. + +/** + * Checks if this machine can process this material + * Arguments + * + * * datum/material/mat - the material to process + */ +/obj/machinery/bouldertech/proc/can_process_material(datum/material/mat) + PROTECTED_PROC(TRUE) + + return FALSE + +/obj/machinery/bouldertech/attackby(obj/item/attacking_item, mob/user, params) + if(panel_open) + return ..() + + if(istype(attacking_item, /obj/item/boulder)) + . = TRUE + var/obj/item/boulder/my_boulder = attacking_item + if(!accept_boulder(my_boulder)) + balloon_alert_to_viewers("cannot accept!") + return + balloon_alert_to_viewers("accepted") + return + + if(istype(attacking_item, /obj/item/card/id)) + . = TRUE + if(points_held <= 0) + balloon_alert_to_viewers("no points to claim!") + if(!COOLDOWN_FINISHED(src, sound_cooldown)) + return + COOLDOWN_START(src, sound_cooldown, 1.5 SECONDS) + playsound(src, 'sound/machines/buzz-sigh.ogg', 30, FALSE) + return + + var/obj/item/card/id/id_card = attacking_item + var/amount = tgui_input_number(user, "How many mining points do you wish to claim? ID Balance: [id_card.registered_account.mining_points], stored mining points: [points_held]", "Transfer Points", max_value = points_held, min_value = 0, round_value = 1) + if(!amount) + return + if(amount > points_held) + amount = points_held + id_card.registered_account.mining_points += amount + points_held = round(points_held - amount) + to_chat(user, span_notice("You claim [amount] mining points from \the [src] to [id_card].")) + return + + return ..() + +/obj/machinery/bouldertech/attack_hand_secondary(mob/user, list/modifiers) + . = ..() + if(. == SECONDARY_ATTACK_CANCEL_ATTACK_CHAIN || panel_open) + return + if(!anchored) + balloon_alert(user, "anchor first!") + return SECONDARY_ATTACK_CANCEL_ATTACK_CHAIN + if(panel_open) + balloon_alert(user, "close panel!") + return SECONDARY_ATTACK_CANCEL_ATTACK_CHAIN + + var/obj/item/boulder/boulder = locate(/obj/item/boulder) in src + if(!boulder) + balloon_alert_to_viewers("no boulders to remove!") + return SECONDARY_ATTACK_CANCEL_ATTACK_CHAIN + if(!remove_boulder(boulder)) + balloon_alert_to_viewers("no space to remove!") + return SECONDARY_ATTACK_CANCEL_ATTACK_CHAIN + + return SECONDARY_ATTACK_CANCEL_ATTACK_CHAIN + +/** + * Accepts a boulder into the machinery, then converts it into minerals. + * If the boulder can be fully processed by this machine, we take the materials, insert it into the silo, and destroy the boulder. + * If the boulder has materials left, we make a copy of the boulder to hold the processable materials, take the processable parts, and eject the original boulder. + * @param chosen_boulder The boulder to being breaking down into minerals. + */ +/obj/machinery/bouldertech/proc/breakdown_boulder(obj/item/boulder/chosen_boulder) + PRIVATE_PROC(TRUE) + + if(QDELETED(chosen_boulder)) + return FALSE + if(chosen_boulder.loc != src) + return FALSE + + //if boulders are kept inside because there is no space to eject them, then they could be reprocessed, lets avoid that + if(!chosen_boulder.processed_by) + check_for_boosts() + + //here we loop through the boulder's ores + var/list/rejected_mats = list() + for(var/datum/material/possible_mat as anything in chosen_boulder.custom_materials) + var/quantity = chosen_boulder.custom_materials[possible_mat] * refining_efficiency + if(!can_process_material(possible_mat)) + rejected_mats[possible_mat] = quantity + continue + points_held = round(points_held + (quantity * possible_mat.points_per_unit * MINING_POINT_MACHINE_MULTIPLIER)) // put point total here into machine + if(!silo_materials.mat_container.insert_amount_mat(quantity, possible_mat)) + rejected_mats[possible_mat] = quantity + use_power(active_power_usage) + + //puts back materials that couldn't be processed + chosen_boulder.set_custom_materials(rejected_mats, refining_efficiency) + + //break the boulder down if we have processed all its materials + if(!length(chosen_boulder.custom_materials)) + playsound(loc, usage_sound, 50, TRUE, SHORT_RANGE_SOUND_EXTRARANGE) + if(istype(chosen_boulder, /obj/item/boulder/artifact)) + points_held = round((points_held + MINER_POINT_MULTIPLIER) * MINING_POINT_MACHINE_MULTIPLIER) /// Artifacts give bonus points! + chosen_boulder.break_apart() + return TRUE //We've processed all the materials in the boulder, so we can just destroy it in break_apart. + + chosen_boulder.processed_by = src + + //eject the boulder since we are done with it + remove_boulder(chosen_boulder) + +/obj/machinery/bouldertech/process() + if(!anchored || panel_open || !is_operational || machine_stat & (BROKEN | NOPOWER)) + return + + var/boulders_found = FALSE + var/boulders_processed = boulders_processing_count + for(var/obj/item/boulder/potential_boulder in contents) + boulders_found = TRUE + if(boulders_processed <= 0) + break //Try again next time + boulders_processed-- + + if(potential_boulder.durability > 0) + potential_boulder.durability -= 1 + if(potential_boulder.durability > 0) + continue + + breakdown_boulder(potential_boulder) + boulders_found = FALSE + + //when the boulder is removed it plays sound and displays a balloon alert. don't overlap when that happens + if(boulders_found) + playsound(loc, usage_sound, 29, FALSE, SHORT_RANGE_SOUND_EXTRARANGE) + balloon_alert_to_viewers(action) + +/** + * Ejects a boulder from the machine. Used when a boulder is finished processing, or when a boulder can't be processed. + * Arguments + * + * * obj/item/boulder/specific_boulder - the boulder to remove + */ +/obj/machinery/bouldertech/proc/remove_boulder(obj/item/boulder/specific_boulder) + PRIVATE_PROC(TRUE) + + if(QDELETED(specific_boulder)) + return TRUE + if(locate(/obj/item/boulder) in loc) //There is an boulder in our loc. it has be removed so we don't clog up our loc with even more boulders + return FALSE + + //Reset durability to little random lower value cause we have crushed it so many times + var/size = specific_boulder.boulder_size + if(size == BOULDER_SIZE_SMALL) + specific_boulder.durability = rand(2, BOULDER_SIZE_SMALL - 1) + else + specific_boulder.durability = rand(BOULDER_SIZE_SMALL, size - 1) + specific_boulder.processed_by = src //so we don't take in the boulder again after we just ejected it + specific_boulder.forceMove(drop_location()) + specific_boulder.processed_by = null //now since move is done we can safely clear the reference + playsound(loc, 'sound/machines/ping.ogg', 50, FALSE) + + return TRUE diff --git a/code/modules/mining/boulder_processing/beacon.dm b/code/modules/mining/boulder_processing/beacon.dm new file mode 100644 index 00000000000..576e05baf53 --- /dev/null +++ b/code/modules/mining/boulder_processing/beacon.dm @@ -0,0 +1,28 @@ +///Beacon to launch a new mining setup when activated. For testing and speed! +/obj/item/boulder_beacon + name = "boulder beacon" + desc = "N.T. approved boulder beacon, toss it down and you will have a full bouldertech mining station." + icon = 'icons/obj/machines/floor.dmi' + icon_state = "floor_beacon" + /// Number of activations left on this beacon. Uses will be removed as the beacon is used and each triggers a different machine to be spawned from it. + var/uses = 3 + +/obj/item/boulder_beacon/attack_self() + visible_message(span_warning("\The [src] begins to beep loudly!")) + addtimer(CALLBACK(src, PROC_REF(launch_payload)), 1 SECONDS) + +/** + * Spawns a new bouldertech machine from the beacon, then removes a use from the beacon. + * Use one spawns a BRM teleporter, then a refinery, and lastly a smelter. + */ +/obj/item/boulder_beacon/proc/launch_payload() + playsound(src, SFX_SPARKS, 80, TRUE, SHORT_RANGE_SOUND_EXTRARANGE) + switch(uses) + if(3) + new /obj/machinery/brm(drop_location()) + if(2) + new /obj/machinery/bouldertech/refinery(drop_location()) + if(1) + new /obj/machinery/bouldertech/refinery/smelter(drop_location()) + qdel(src) + uses-- diff --git a/code/modules/mining/boulder_processing/boulder.dm b/code/modules/mining/boulder_processing/boulder.dm new file mode 100644 index 00000000000..699358c6adb --- /dev/null +++ b/code/modules/mining/boulder_processing/boulder.dm @@ -0,0 +1,175 @@ + + +/** + * The objects that ore vents produce, which is refined into minerals. + */ +/obj/item/boulder + name = "boulder" + desc = "This rocks." + icon_state = "ore" + icon = 'icons/obj/ore.dmi' + item_flags = NO_MAT_REDEMPTION + throw_range = 2 + throw_speed = 0.5 + drag_slowdown = 1.5 // It's still a big rock. + + ///When a refinery machine is working on this boulder, we'll set this. Re reset when the process is finished, but the boulder may still be refined/operated on further. + var/obj/machinery/processed_by = null + /// How many steps of refinement this boulder has gone through. Starts at 5-8, goes down one each machine process. + var/durability = 5 + /// What was the size of the boulder when it was spawned? This is used for inheiriting the icon_state. + var/boulder_size = BOULDER_SIZE_SMALL + /// Used in inheriting the icon_state from our parent vent in update_icon. + var/boulder_string = "boulder" + +/obj/item/boulder/Initialize(mapload) + . = ..() + register_context() + AddComponent(/datum/component/two_handed, require_twohands = TRUE, force_unwielded = 0, force_wielded = 5) //Heavy as all hell, it's a boulder, dude. + +/obj/item/boulder/Destroy(force) + SSore_generation.available_boulders -= src + processed_by = null + return ..() + +/obj/item/boulder/add_context(atom/source, list/context, obj/item/held_item, mob/living/user) + if(held_item?.tool_behaviour == TOOL_MINING || HAS_TRAIT(user, TRAIT_BOULDER_BREAKER)) + context[SCREENTIP_CONTEXT_RMB] = "Crush boulder into ore" + return CONTEXTUAL_SCREENTIP_SET + +/obj/item/boulder/examine(mob/user) + . = ..() + . += span_notice("This boulder would take [durability] more steps to refine or break.") + if(HAS_TRAIT(user, TRAIT_BOULDER_BREAKER)) + . += span_notice("You can crush this boulder with your bare hands.") + +/obj/item/boulder/examine_more(mob/user) + . = ..() + . += span_notice("[span_bold("Boulders")] can either be cracked open by [span_bold("mining tools")], or processed into sheets with [span_bold("refineries or smelters")]. Undisturbed boulders can be collected by the [span_bold("BRM")].") + +/obj/item/boulder/update_icon_state() + . = ..() + switch(boulder_size) + if(BOULDER_SIZE_SMALL) + icon_state = "[boulder_string]_small" + if(BOULDER_SIZE_MEDIUM) + icon_state = "[boulder_string]_medium" + if(BOULDER_SIZE_LARGE) + icon_state = "[boulder_string]_large" + else + icon_state = "[boulder_string]_small" + +/obj/item/boulder/CanAllowThrough(atom/movable/mover, border_dir) + . = ..() + if(istype(mover, /obj/item/boulder)) //This way, boulders can only go one at a time on conveyor belts, but everyone else can go through. + return FALSE + +/obj/item/boulder/attack_self(mob/user, list/modifiers) + . = ..() + if(.) + return + if(HAS_TRAIT(user, TRAIT_BOULDER_BREAKER)) + manual_process(null, user, INATE_BOULDER_SPEED_MULTIPLIER) + return + +/obj/item/boulder/attack_hand_secondary(mob/user, list/modifiers) + . = ..() + if(. == SECONDARY_ATTACK_CANCEL_ATTACK_CHAIN) + return + if(HAS_TRAIT(user, TRAIT_BOULDER_BREAKER)) + manual_process(null, user, INATE_BOULDER_SPEED_MULTIPLIER) + return SECONDARY_ATTACK_CANCEL_ATTACK_CHAIN + +/obj/item/boulder/attackby_secondary(obj/item/weapon, mob/user, params) + . = ..() + if(HAS_TRAIT(user, TRAIT_BOULDER_BREAKER) || HAS_TRAIT(weapon, TRAIT_BOULDER_BREAKER)) + manual_process(weapon, user, INATE_BOULDER_SPEED_MULTIPLIER) + return SECONDARY_ATTACK_CANCEL_ATTACK_CHAIN + if(weapon.tool_behaviour == TOOL_MINING) + manual_process(weapon, user) + return SECONDARY_ATTACK_CANCEL_ATTACK_CHAIN + return ..() + +/obj/item/boulder/attack_basic_mob(mob/user, list/modifiers) + . = ..() + if(.) + return + if(HAS_TRAIT(user, TRAIT_BOULDER_BREAKER)) + manual_process(null, user, INATE_BOULDER_SPEED_MULTIPLIER) //A little hacky but it works around the speed of the blackboard task selection process for now. + return SECONDARY_ATTACK_CANCEL_ATTACK_CHAIN + +/** + * This is called when a boulder is processed by a mob or tool, and reduces the durability of the boulder. + * @param obj/item/weapon The weapon that is being used to process the boulder, that we pull toolspeed from. If null, we use the override_speed_multiplier instead. + * @param mob/living/user The mob that is processing the boulder. + * @param override_speed_multiplier The speed multiplier to use if weapon is null. The do_after will take 2 * this value seconds to complete. + * @param continued Whether or not this is a continued process, or the first one. If true, we don't play the "You swing at the boulder" message. + */ +/obj/item/boulder/proc/manual_process(obj/item/weapon, mob/living/user, override_speed_multiplier, continued = FALSE) + var/process_speed = 0 + //Handle weapon conditions. + if(weapon) + if(HAS_TRAIT(weapon, TRAIT_INSTANTLY_PROCESSES_BOULDERS)) + durability = 0 + process_speed = weapon.toolspeed + weapon.play_tool_sound(src, 50) + if(!continued) + to_chat(user, span_notice("You swing at \the [src]...")) + + // Handle user conditions/override conditions. + else if (override_speed_multiplier || HAS_TRAIT(user, TRAIT_BOULDER_BREAKER)) + if(user) + if(HAS_TRAIT(user, TRAIT_INSTANTLY_PROCESSES_BOULDERS)) + durability = 0 + else if(override_speed_multiplier) + process_speed = override_speed_multiplier + else + process_speed = INATE_BOULDER_SPEED_MULTIPLIER + playsound(src, 'sound/effects/rocktap1.ogg', 50) + if(!continued) + to_chat(user, span_notice("You scrape away at \the [src]... speed is [process_speed].")) + else + CRASH("No weapon, acceptable user, or override speed multiplier passed to manual_process()") + if(durability > 0) + if(!do_after(user, (2 * process_speed SECONDS), target = src)) + return + if(!user.Adjacent(src)) + return + durability-- + user.apply_damage(4, STAMINA) + if(durability <= 0) + convert_to_ore() + to_chat(user, span_notice("You finish working on \the [src], and it crumbles into ore.")) + playsound(src, 'sound/effects/rock_break.ogg', 50) + user.mind?.adjust_experience(/datum/skill/mining, MINING_SKILL_BOULDER_SIZE_XP * 0.2) + qdel(src) + return + var/msg = (durability == 1 ? "is crumbling!" : "looks weaker!") + to_chat(user, span_notice("\The [src] [msg]")) + manual_process(weapon, user, override_speed_multiplier, continued = TRUE) + +/** + * This function is called while breaking boulders manually, and drops ore based on the boulder's mineral content. + * Quantity of ore spawned here is 1 less than if the boulder was processed by a machine, but clamped at 10 maximum, 1 minimum. + */ +/obj/item/boulder/proc/convert_to_ore() + for(var/datum/material/picked in custom_materials) + var/obj/item/stack/ore/cracked_ore // Take the associated value and convert it into ore stacks... + var/quantity = clamp(round((custom_materials[picked] - SHEET_MATERIAL_AMOUNT)/SHEET_MATERIAL_AMOUNT), 1, 10) //but less resources than if they processed it by hand. + + var/cracked_ore_type = picked.ore_type + if(isnull(cracked_ore_type)) + stack_trace("boulder found containing material type [picked.type] with no set ore_type") + continue + cracked_ore = new cracked_ore_type (drop_location(), quantity) + SSblackbox.record_feedback("tally", "ore_mined", quantity, cracked_ore) + +///Moves boulder contents to the drop location, and then deletes the boulder. +/obj/item/boulder/proc/break_apart() + if(length(contents)) + var/list/quips = list("Clang!", "Crack!", "Bang!", "Clunk!", "Clank!") + visible_message(span_notice("[pick(quips)] Something falls out of \the [src]!")) + playsound(loc, 'sound/effects/picaxe1.ogg', 60, FALSE) + for(var/obj/item/content as anything in contents) + content.forceMove(get_turf(src)) + qdel(src) diff --git a/code/modules/mining/boulder_processing/boulder_types.dm b/code/modules/mining/boulder_processing/boulder_types.dm new file mode 100644 index 00000000000..08ed961404c --- /dev/null +++ b/code/modules/mining/boulder_processing/boulder_types.dm @@ -0,0 +1,76 @@ +///Boulders with special artificats that can give higher mining points +/obj/item/boulder/artifact + name = "artifact boulder" + desc = "This boulder is brimming with strange energy. Cracking it open could contain something unusual for science." + icon_state = "boulder_artifact" + /// This is the type of item that will be inside the boulder. Default is a strange object. + var/artifact_type = /obj/item/relic + /// References to the relic inside the boulder, if any. + var/obj/item/artifact_inside + +/obj/item/boulder/artifact/Initialize(mapload) + . = ..() + artifact_inside = new artifact_type(src) /// This could be poggers for archaeology in the future. + +/obj/item/boulder/artifact/Destroy(force) + QDEL_NULL(artifact_inside) + return ..() + +/obj/item/boulder/artifact/convert_to_ore() + . = ..() + artifact_inside.forceMove(drop_location()) + artifact_inside = null + +/obj/item/boulder/artifact/break_apart() + artifact_inside = null + return ..() + +///Boulders usually spawned in lavaland labour camp area +/obj/item/boulder/gulag + name = "low-quality boulder" + desc = "This rocks. It's a low quality boulder, so it's probably not worth as much." + +/obj/item/boulder/gulag/Initialize(mapload) + . = ..() + + /// Static list of all minerals to populate gulag boulders with. + var/list/static/gulag_minerals = list( + /datum/material/diamond = 1, + /datum/material/gold = 8, + /datum/material/iron = 95, + /datum/material/plasma = 30, + /datum/material/silver = 20, + /datum/material/titanium = 8, + /datum/material/uranium = 3, + ) + + set_custom_materials(list(pick_weight(gulag_minerals) = SHEET_MATERIAL_AMOUNT * rand(1, 3))) + +///Boulders usually spawned in lavaland labour camp area but with bluespace material +/obj/item/boulder/gulag_expanded + name = "low-density boulder" + desc = "This rocks. It's not very well packed, and can't contain as many minerals." + +/obj/item/boulder/gulag_expanded/Initialize(mapload) + . = ..() + + /// Static list of all minerals to populate gulag boulders with, but with bluespace added where safe. + var/list/static/expanded_gulag_minerals = list( + /datum/material/bluespace = 1, + /datum/material/diamond = 1, + /datum/material/gold = 8, + /datum/material/iron = 94, + /datum/material/plasma = 30, + /datum/material/silver = 20, + /datum/material/titanium = 8, + /datum/material/uranium = 3, + ) + + set_custom_materials(list(pick_weight(expanded_gulag_minerals) = SHEET_MATERIAL_AMOUNT * rand(1, 3))) + +///lowgrade boulder, most commonly spawned +/obj/item/boulder/shabby + name = "shabby boulder" + desc = "A bizzare, twisted boulder. Wait, wait no, it's just a rock." + custom_materials = list(/datum/material/iron = SHEET_MATERIAL_AMOUNT * 1.1, /datum/material/glass = SHEET_MATERIAL_AMOUNT * 1.1) + durability = 1 diff --git a/code/modules/mining/boulder_processing/brm.dm b/code/modules/mining/boulder_processing/brm.dm new file mode 100644 index 00000000000..e4d525bff05 --- /dev/null +++ b/code/modules/mining/boulder_processing/brm.dm @@ -0,0 +1,291 @@ +///Sound played when boulders are teleported manually by hand +#define MANUAL_TELEPORT_SOUND 'sound/machines/mining/manual_teleport.ogg' +///Sound played when boulders are teleported automatically in process() +#define AUTO_TELEPORT_SOUND 'sound/machines/mining/auto_teleport.ogg' +///Time taken to spawn a boulder, also the cooldown applied before the next manual teleportation +#define TELEPORTATION_TIME (1.5 SECONDS) +///Cooldown for automatic teleportation after processing boulders_processing_max number of boulders +#define BATCH_COOLDOWN (3 SECONDS) +///Special case when we are trying to teleport a boulder but there is already another boulder in our loc +#define TURF_BLOCKED_BY_BOULDER -1 + +/obj/machinery/brm + name = "boulder retrieval matrix" + desc = "A teleportation matrix used to retrieve boulders excavated by mining NODEs from ore vents." + icon = 'icons/obj/machines/mining_machines.dmi' + icon_state = "brm" + active_power_usage = BASE_MACHINE_ACTIVE_CONSUMPTION * 0.5 + circuit = /obj/item/circuitboard/machine/brm + processing_flags = START_PROCESSING_MANUALLY + anchored = TRUE + density = TRUE + + /// How many boulders can we process maximum per loop? + var/boulders_processing_max = 1 + /// Are we trying to actively collect boulders automatically? + var/toggled_on = FALSE + ///Have we finished processing a full batch of boulders + var/batch_processing = FALSE + + /// Cooldown used for left click teleportation. + COOLDOWN_DECLARE(manual_teleport_cooldown) + /// Cooldown used for automatic teleportation after processing boulders_processing_max number of boulders. + COOLDOWN_DECLARE(batch_start_cooldown) + +/obj/machinery/brm/Initialize(mapload) + . = ..() + register_context() + +/obj/machinery/brm/add_context(atom/source, list/context, obj/item/held_item, mob/user) + . = CONTEXTUAL_SCREENTIP_SET + + if(isnull(held_item)) + context[SCREENTIP_CONTEXT_LMB] = "Teleport single boulder" + context[SCREENTIP_CONTEXT_RMB] = "Toggle [toggled_on ? "Off" : "On"] automatic boulder retrieval" + return + + if(!isnull(held_item)) + if(held_item.tool_behaviour == TOOL_WRENCH) + context[SCREENTIP_CONTEXT_LMB] = "[anchored ? "" : "Un"] Anchor" + return + if(held_item.tool_behaviour == TOOL_SCREWDRIVER) + context[SCREENTIP_CONTEXT_LMB] = "[panel_open ? "Close" : "Open"] Panel" + return + + if(panel_open) + if(held_item.tool_behaviour == TOOL_CROWBAR) + context[SCREENTIP_CONTEXT_LMB] = "Deconstruct" + + return CONTEXTUAL_SCREENTIP_SET + +/obj/machinery/brm/examine(mob/user) + . = ..() + . += span_notice("The small screen reads there are [span_boldnotice("[SSore_generation.available_boulders.len] boulders")] available to teleport.") + . += span_notice("Can collect upto [boulders_processing_max] boulders at a time.") + . += span_notice("Automatic boulder retrival can be toggled [EXAMINE_HINT("[toggled_on ? "Off" : "On"]")] with [EXAMINE_HINT("Right Click")].") + + if(anchored) + . += span_notice("Its [EXAMINE_HINT("anchored")] in place.") + else + . += span_warning("It needs to be [EXAMINE_HINT("anchored")] to start operations.") + + . += span_notice("Its maintainence panel can be [EXAMINE_HINT("screwed")] [panel_open ? "Closed" : "Open"].") + + if(panel_open) + . += span_notice("The whole machine can be [EXAMINE_HINT("pried")] apart.") + +/obj/machinery/brm/update_icon_state() + icon_state = initial(icon_state) + + if(!anchored || !is_operational || machine_stat & (BROKEN | NOPOWER) || panel_open) + icon_state = "[icon_state]-off" + return + + if(toggled_on) + icon_state = "[icon_state]-toggled" + return + + return ..() + +/obj/machinery/brm/wrench_act(mob/living/user, obj/item/tool) + . = ITEM_INTERACT_BLOCKING + if(default_unfasten_wrench(user, tool, time = 1.5 SECONDS) == SUCCESSFUL_UNFASTEN) + update_appearance(UPDATE_ICON_STATE) + return ITEM_INTERACT_SUCCESS + +/obj/machinery/brm/screwdriver_act(mob/living/user, obj/item/tool) + . = ITEM_INTERACT_BLOCKING + if(default_deconstruction_screwdriver(user, "[initial(icon_state)]-off", initial(icon_state), tool)) + update_appearance(UPDATE_ICON_STATE) + return ITEM_INTERACT_SUCCESS + +/obj/machinery/brm/crowbar_act(mob/living/user, obj/item/tool) + . = ITEM_INTERACT_BLOCKING + if(default_deconstruction_crowbar(tool)) + return ITEM_INTERACT_SUCCESS + +///To allow boulders on a conveyer belt to move unobstructed if multiple machines are made on a single line +/obj/machinery/brm/CanAllowThrough(atom/movable/mover, border_dir) + if(!anchored) + return FALSE + if(istype(mover, /obj/item/boulder)) + return TRUE + return ..() + +/obj/machinery/brm/RefreshParts() + . = ..() + + boulders_processing_max = 0 + for(var/datum/stock_part/part in component_parts) + boulders_processing_max += part.tier + + boulders_processing_max = ROUND_UP((boulders_processing_max / 12) * 7) + +/obj/machinery/brm/attack_hand(mob/living/user, list/modifiers) + . = ..() + if(. || panel_open) + return + if(!handle_teleport_conditions(user)) + return + + var/result = pre_collect_boulder() + if(result == TURF_BLOCKED_BY_BOULDER) + balloon_alert(user, "no space") + else if(result) + balloon_alert(user, "teleporting") + COOLDOWN_START(src, manual_teleport_cooldown, TELEPORTATION_TIME) + + return TRUE + +/** + * Handles qualifiers for enabling teleportation of boulders. + * Returns TRUE if the teleportation can proceed, FALSE otherwise. + * Arguments + * + * * mob/user - the mob to inform if conditions aren't met + */ +/obj/machinery/brm/proc/handle_teleport_conditions(mob/user) + PRIVATE_PROC(TRUE) + + if(!COOLDOWN_FINISHED(src, manual_teleport_cooldown)) + return FALSE + if(panel_open) + balloon_alert(user, "close panel first!") + return FALSE + if(batch_processing) + balloon_alert(user, "batch still processing!") + return FALSE + playsound(src, MANUAL_TELEPORT_SOUND, 50, TRUE, SHORT_RANGE_SOUND_EXTRARANGE) + return TRUE + +/obj/machinery/brm/attack_robot(mob/user) + . = ..() + if(. || panel_open) + return + if(!handle_teleport_conditions(user)) + return + + var/result = pre_collect_boulder() + if(result == TURF_BLOCKED_BY_BOULDER) + balloon_alert(user, "no space") + else if(result) + balloon_alert(user, "teleporting") + + COOLDOWN_START(src, manual_teleport_cooldown, TELEPORTATION_TIME) + + return TRUE + +/obj/machinery/brm/attack_hand_secondary(mob/user, list/modifiers) + . = ..() + if(. == SECONDARY_ATTACK_CANCEL_ATTACK_CHAIN || panel_open) + return + if(!anchored) + balloon_alert(user, "anchor first!") + return SECONDARY_ATTACK_CANCEL_ATTACK_CHAIN + toggle_auto_on(user) + return SECONDARY_ATTACK_CANCEL_ATTACK_CHAIN + +/** + * Toggles automatic boulder retrieval on. + * Adjusts the teleportation sound, icon state, and begins processing. + * Arguments + * + * * mob/user - the player who has toggled us + */ +/obj/machinery/brm/proc/toggle_auto_on(mob/user) + PRIVATE_PROC(TRUE) + + if(panel_open) + balloon_alert(user, "close panel first!") + return + if(!anchored) + balloon_alert(user, "anchor first!") + return + if(!is_operational || machine_stat & (BROKEN | NOPOWER)) + return + + toggled_on = ! toggled_on + if(toggled_on) + begin_processing() + else + end_processing() + update_appearance(UPDATE_ICON_STATE) + +/obj/machinery/brm/attack_robot_secondary(mob/user, list/modifiers) + . = ..() + if(. == SECONDARY_ATTACK_CANCEL_ATTACK_CHAIN || panel_open) + return + if(!anchored) + balloon_alert(user, "anchor first!") + return SECONDARY_ATTACK_CANCEL_ATTACK_CHAIN + + toggle_auto_on(user) + return SECONDARY_ATTACK_CANCEL_ATTACK_CHAIN + +/obj/machinery/brm/process() + if(!toggled_on) + return PROCESS_KILL + + //have some cooldown after processing the previous batch of boulders + if(batch_processing || !COOLDOWN_FINISHED(src, batch_start_cooldown)) + return + + pre_collect_boulder(FALSE, boulders_processing_max) + +/** + * Begins to collect a boulder from the available boulders list in SSore_generation. + * Boulders must be in the available boulders list. + * A selected boulder is picked randomly. + * Arguments + * + * * feedback - should we play sound and display allert if now boulders are available + * * boulders_remaining - how many boulders we want to try & collect spawning a boulder every TELEPORTATION_TIME seconds + */ +/obj/machinery/brm/proc/pre_collect_boulder(feedback = TRUE, boulders_remaining = 1) + PRIVATE_PROC(TRUE) + + batch_processing = TRUE + + //not within operation parameters + if(!anchored || panel_open || !is_operational || machine_stat & (BROKEN | NOPOWER)) + batch_processing = FALSE + return FALSE + + //There is an boulder in our loc. it has be removed so we don't clog up our loc with even more boulders + if(locate(/obj/item/boulder) in loc) + batch_processing = FALSE + return TURF_BLOCKED_BY_BOULDER + + //no more boulders + if(!SSore_generation.available_boulders.len) + if(feedback) + playsound(loc, 'sound/machines/synth_no.ogg', 30 , TRUE) + balloon_alert_to_viewers("no boulders to collect!") + batch_processing = FALSE + return FALSE + + //pick & spawn the boulder + flick("brm-flash", src) + playsound(src, toggled_on ? AUTO_TELEPORT_SOUND : MANUAL_TELEPORT_SOUND, 50, TRUE, SHORT_RANGE_SOUND_EXTRARANGE) + var/obj/item/boulder/random_boulder = pick(SSore_generation.available_boulders) + SSore_generation.available_boulders -= random_boulder + random_boulder.forceMove(drop_location()) + random_boulder.pixel_x = rand(-2, 2) + random_boulder.pixel_y = rand(-2, 2) + balloon_alert_to_viewers("boulder appears!") + use_power(active_power_usage) + + //try again if we have more boulders to work with + boulders_remaining -= 1 + if(boulders_remaining <= 0) + COOLDOWN_START(src, batch_start_cooldown, BATCH_COOLDOWN) + batch_processing = FALSE + return TRUE + else + addtimer(CALLBACK(src, PROC_REF(pre_collect_boulder), feedback, boulders_remaining, FALSE), TELEPORTATION_TIME) + +#undef MANUAL_TELEPORT_SOUND +#undef AUTO_TELEPORT_SOUND +#undef TELEPORTATION_TIME +#undef BATCH_COOLDOWN +#undef TURF_BLOCKED_BY_BOULDER diff --git a/code/modules/mining/boulder_processing/refinery.dm b/code/modules/mining/boulder_processing/refinery.dm new file mode 100644 index 00000000000..662bb3e75e1 --- /dev/null +++ b/code/modules/mining/boulder_processing/refinery.dm @@ -0,0 +1,87 @@ +/** + * Your new favorite industrial waste magnet! + * Accepts boulders and produces sheets of non-metalic materials. + * When upgraded, it can hold more boulders and process more at once. + */ +/obj/machinery/bouldertech/refinery + name = "boulder refinery" + desc = "BR for short. Accepts boulders and refines non-metallic ores into sheets using internal chemicals." + icon_state = "stacker" + circuit = /obj/item/circuitboard/machine/refinery + usage_sound = 'sound/machines/mining/refinery.ogg' + action = "crushing" + +/obj/machinery/bouldertech/refinery/can_process_material(datum/material/possible_mat) + var/static/list/processable_materials + if(!length(processable_materials)) + processable_materials = list( + /datum/material/glass, + /datum/material/plasma, + /datum/material/diamond, + /datum/material/bluespace, + /datum/material/bananium, + /datum/material/plastic, + ) + return is_type_in_list(possible_mat, processable_materials) + +/obj/machinery/bouldertech/refinery/RefreshParts() + . = ..() + + boulders_held_max = 0 + for(var/datum/stock_part/matter_bin/bin in component_parts) + boulders_held_max += bin.tier + + boulders_processing_count = 0 + for(var/datum/stock_part/servo/servo in component_parts) + boulders_processing_count += servo.tier + boulders_processing_count = ROUND_UP((boulders_processing_count / 8) * boulders_held_max) + +/** + * Your other new favorite industrial waste magnet! + * Accepts boulders and produces sheets of metalic materials. + * When upgraded, it can hold more boulders and process more at once. + */ +/obj/machinery/bouldertech/refinery/smelter + name = "boulder smelter" + desc = "BS for short. Accept boulders and refines metallic ores into sheets." + icon_state = "smelter" + light_system = OVERLAY_LIGHT + light_range = 2 + light_power = 3 + light_color = "#ffaf55" + circuit = /obj/item/circuitboard/machine/smelter + usage_sound = 'sound/machines/mining/smelter.ogg' + action = "smelting" + +/obj/machinery/bouldertech/refinery/smelter/Initialize(mapload) + . = ..() + set_light_on(TRUE) + +/obj/machinery/bouldertech/refinery/smelter/can_process_material(datum/material/possible_mat) + var/static/list/processable_materials + if(!length(processable_materials)) + processable_materials = list( + /datum/material/iron, + /datum/material/titanium, + /datum/material/silver, + /datum/material/gold, + /datum/material/uranium, + ) + return is_type_in_list(possible_mat, processable_materials) + +/obj/machinery/bouldertech/refinery/smelter/set_light_on(new_value) + if(panel_open || !anchored || !is_operational || machine_stat & (BROKEN | NOPOWER)) + new_value = FALSE + return ..() + +/obj/machinery/bouldertech/refinery/default_deconstruction_screwdriver(mob/user, icon_state_open, icon_state_closed, obj/item/screwdriver) + . = ..() + set_light_on(TRUE) + +/obj/machinery/bouldertech/refinery/default_unfasten_wrench(mob/user, obj/item/wrench, time) + . = ..() + set_light_on(TRUE) + +/obj/machinery/bouldertech/refinery/smelter/on_set_is_operational(old_value) + set_light_on(TRUE) + diff --git a/code/modules/mining/equipment/kinetic_crusher.dm b/code/modules/mining/equipment/kinetic_crusher.dm index add06da08a6..e1df98239e2 100644 --- a/code/modules/mining/equipment/kinetic_crusher.dm +++ b/code/modules/mining/equipment/kinetic_crusher.dm @@ -21,7 +21,7 @@ sharpness = SHARP_EDGED actions_types = list(/datum/action/item_action/toggle_light) obj_flags = UNIQUE_RENAME - light_system = MOVABLE_LIGHT + light_system = OVERLAY_LIGHT light_range = 5 light_on = FALSE var/list/trophies = list() diff --git a/code/modules/mining/equipment/mineral_scanner.dm b/code/modules/mining/equipment/mineral_scanner.dm index 3d78d378d66..55a0ab44949 100644 --- a/code/modules/mining/equipment/mineral_scanner.dm +++ b/code/modules/mining/equipment/mineral_scanner.dm @@ -11,7 +11,9 @@ w_class = WEIGHT_CLASS_SMALL obj_flags = CONDUCTS_ELECTRICITY slot_flags = ITEM_SLOT_BELT + /// The cooldown between scans. var/cooldown = 35 + /// Current time until the next scan can be performed. var/current_cooldown = 0 /obj/item/mining_scanner/attack_self(mob/user) @@ -19,7 +21,7 @@ return if(current_cooldown <= world.time) current_cooldown = world.time + cooldown - mineral_scan_pulse(get_turf(user)) + mineral_scan_pulse(get_turf(user), scanner = src) //Debug item to identify all ore spread quickly /obj/item/mining_scanner/admin @@ -40,8 +42,11 @@ w_class = WEIGHT_CLASS_SMALL obj_flags = CONDUCTS_ELECTRICITY slot_flags = ITEM_SLOT_BELT + /// The cooldown between scans. var/cooldown = 35 + /// Current time until the next scan can be performed. var/current_cooldown = 0 + /// The range of the scanner in tiles. var/range = 7 /obj/item/t_scanner/adv_mining_scanner/cyborg/Initialize(mapload) @@ -59,13 +64,25 @@ if(current_cooldown <= world.time) current_cooldown = world.time + cooldown var/turf/t = get_turf(src) - mineral_scan_pulse(t, range) + mineral_scan_pulse(t, range, src) -/proc/mineral_scan_pulse(turf/T, range = world.view) +/proc/mineral_scan_pulse(turf/T, range = world.view, obj/item/scanner) var/list/minerals = list() - for(var/turf/closed/mineral/M in range(range, T)) - if(M.scan_state) - minerals += M + var/vents_nearby = FALSE + var/undiscovered = FALSE + var/radar_volume = 30 + for(var/turf/closed/mineral/mineral in RANGE_TURFS(range, T)) + if(mineral.scan_state) + minerals += mineral + for(var/obj/structure/ore_vent/vent in range(range, T)) + if(!vents_nearby && (!vent.discovered || !vent.tapped)) + vents_nearby = TRUE + if(vent.discovered) + undiscovered = TRUE + var/potential_volume = 80 - (get_dist(scanner, vent) * 10) + radar_volume = max(potential_volume, radar_volume) + vent.add_mineral_overlays() + if(LAZYLEN(minerals)) for(var/turf/closed/mineral/M in minerals) var/obj/effect/temp_visual/mining_overlay/oldC = locate(/obj/effect/temp_visual/mining_overlay) in M @@ -74,6 +91,14 @@ var/obj/effect/temp_visual/mining_overlay/C = new /obj/effect/temp_visual/mining_overlay(M) C.icon_state = M.scan_state + if(vents_nearby && scanner) + if(undiscovered) + playsound(scanner, 'sound/machines/radar-ping.ogg', radar_volume, FALSE) + else + playsound(scanner, 'sound/machines/sonar-ping.ogg', radar_volume, FALSE) + scanner.balloon_alert_to_viewers("ore vent nearby") + scanner.spasm_animation(1.5 SECONDS) + /obj/effect/temp_visual/mining_overlay plane = HIGH_GAME_PLANE layer = FLASH_LAYER @@ -82,7 +107,17 @@ duration = 35 pixel_x = -224 pixel_y = -224 + /// What animation easing to use when we create the ore overlay on rock walls/ore vents. + var/easing_style = EASE_IN /obj/effect/temp_visual/mining_overlay/Initialize(mapload) . = ..() - animate(src, alpha = 0, time = duration, easing = EASE_IN) + animate(src, alpha = 0, time = duration, easing = easing_style) + +/obj/effect/temp_visual/mining_overlay/vent + icon = 'icons/effects/vent_overlays.dmi' + icon_state = "unknown" + duration = 45 + pixel_x = 0 + pixel_y = 0 + easing_style = CIRCULAR_EASING|EASE_IN diff --git a/code/modules/mining/equipment/monster_organs/monster_organ.dm b/code/modules/mining/equipment/monster_organs/monster_organ.dm index d8e4bfae986..135373469d8 100644 --- a/code/modules/mining/equipment/monster_organs/monster_organ.dm +++ b/code/modules/mining/equipment/monster_organs/monster_organ.dm @@ -143,7 +143,7 @@ return . | AFTERATTACK_PROCESSED_ITEM /obj/item/organ/internal/monster_core/attack_self(mob/user) - if (!user.can_perform_action(src, FORBID_TELEKINESIS_REACH)) + if (!user.can_perform_action(src, FORBID_TELEKINESIS_REACH|ALLOW_RESTING)) return try_apply(user, user) diff --git a/code/modules/mining/equipment/monster_organs/rush_gland.dm b/code/modules/mining/equipment/monster_organs/rush_gland.dm index b3932afdaab..b3dbc683da4 100644 --- a/code/modules/mining/equipment/monster_organs/rush_gland.dm +++ b/code/modules/mining/equipment/monster_organs/rush_gland.dm @@ -23,7 +23,7 @@ /obj/item/organ/internal/monster_core/rush_gland/on_mob_insert(mob/living/carbon/organ_owner) . = ..() - RegisterSignal(organ_owner, COMSIG_GOLIATH_TENTACLED_GRABBED, PROC_REF(trigger_organ_action)) + RegisterSignal(organ_owner, COMSIG_GOLIATH_TENTACLED_GRABBED, PROC_REF(trigger_organ_action_on_sig)) /obj/item/organ/internal/monster_core/rush_gland/on_mob_remove(mob/living/carbon/organ_owner, special) . = ..() @@ -32,6 +32,10 @@ /obj/item/organ/internal/monster_core/rush_gland/on_triggered_internal() owner.apply_status_effect(/datum/status_effect/lobster_rush/extended) +/obj/item/organ/internal/monster_core/rush_gland/proc/trigger_organ_action_on_sig(datum/source) + SIGNAL_HANDLER + INVOKE_ASYNC(src, PROC_REF(trigger_organ_action)) + /** * Status effect: Makes you run really fast and ignore speed penalties for a short duration. * If you run into a wall indoors you will fall over and lose the buff. diff --git a/code/modules/mining/equipment/survival_pod.dm b/code/modules/mining/equipment/survival_pod.dm index 95ee1015a95..f4463434066 100644 --- a/code/modules/mining/equipment/survival_pod.dm +++ b/code/modules/mining/equipment/survival_pod.dm @@ -37,35 +37,83 @@ . += "This capsule has the [template.name] stored." . += template.description -/obj/item/survivalcapsule/attack_self() +/obj/item/survivalcapsule/interact(mob/user) + . = ..() + if(.) + return . + //Can't grab when capsule is New() because templates aren't loaded then get_template() - if(!used) - loc.visible_message(span_warning("\The [src] begins to shake. Stand back!")) - used = TRUE - sleep(5 SECONDS) - var/turf/deploy_location = get_turf(src) - var/status = template.check_deploy(deploy_location) - switch(status) - if(SHELTER_DEPLOY_BAD_AREA) - src.loc.visible_message(span_warning("\The [src] will not function in this area.")) - if(SHELTER_DEPLOY_BAD_TURFS, SHELTER_DEPLOY_ANCHORED_OBJECTS, SHELTER_DEPLOY_OUTSIDE_MAP) - var/width = template.width - var/height = template.height - src.loc.visible_message(span_warning("\The [src] doesn't have room to deploy! You need to clear a [width]x[height] area!")) - if(status != SHELTER_DEPLOY_ALLOWED) - used = FALSE - return - - template.load(deploy_location, centered = TRUE) - var/turf/T = deploy_location - if(!is_mining_level(T.z)) //only report capsules away from the mining/lavaland level - message_admins("[ADMIN_LOOKUPFLW(usr)] activated a bluespace capsule away from the mining level! [ADMIN_VERBOSEJMP(T)]") - log_admin("[key_name(usr)] activated a bluespace capsule away from the mining level at [AREACOORD(T)]") - - playsound(src, 'sound/effects/phasein.ogg', 100, TRUE) - new /obj/effect/particle_effect/fluid/smoke(get_turf(src)) - qdel(src) + if(used) + return FALSE + + loc.visible_message(span_warning("[src] begins to shake. Stand back!")) + used = TRUE + addtimer(CALLBACK(src, PROC_REF(expand), user), 5 SECONDS) + return TRUE + +/// Expands the capsule into a full shelter, placing the template at the item's location (NOT triggerer's location) +/obj/item/survivalcapsule/proc/expand(mob/triggerer) + if(QDELETED(src)) + return + + var/turf/deploy_location = get_turf(src) + var/status = template.check_deploy(deploy_location) + switch(status) + if(SHELTER_DEPLOY_BAD_AREA) + loc.visible_message(span_warning("[src] will not function in this area.")) + if(SHELTER_DEPLOY_BAD_TURFS, SHELTER_DEPLOY_ANCHORED_OBJECTS, SHELTER_DEPLOY_OUTSIDE_MAP) + loc.visible_message(span_warning("[src] doesn't have room to deploy! You need to clear a [template.width]x[template.height] area!")) + + if(status != SHELTER_DEPLOY_ALLOWED) + used = FALSE + return + + yote_nearby(deploy_location) + template.load(deploy_location, centered = TRUE) + trigger_admin_alert(triggerer, deploy_location) + playsound(src, 'sound/effects/phasein.ogg', 100, TRUE) + new /obj/effect/particle_effect/fluid/smoke(get_turf(src)) + qdel(src) + +/// Throws any mobs near the deployed location away from the item / shelter +/// Does some math to make closer mobs get thrown further +/obj/item/survivalcapsule/proc/yote_nearby(turf/deploy_location) + var/width = template.width + var/height = template.height + var/base_x_throw_distance = ceil(width / 2) + var/base_y_throw_distance = ceil(height / 2) + for(var/mob/living/did_not_stand_back in range(loc, "[width]x[height]")) + var/dir_to_center = get_dir(deploy_location, did_not_stand_back) || pick(GLOB.alldirs) + // Aiming to throw the target just enough to get them out of the range of the shelter + // IE: Stronger if they're closer, weaker if they're further away + var/throw_dist = 0 + var/x_component = abs(did_not_stand_back.x - deploy_location.x) + var/y_component = abs(did_not_stand_back.y - deploy_location.y) + if(ISDIAGONALDIR(dir_to_center)) + throw_dist = ceil(sqrt(base_x_throw_distance ** 2 + base_y_throw_distance ** 2) - (sqrt(x_component ** 2 + y_component ** 2))) + else if(dir_to_center & (NORTH|SOUTH)) + throw_dist = base_y_throw_distance - y_component + 1 + else if(dir_to_center & (EAST|WEST)) + throw_dist = base_x_throw_distance - x_component + 1 + + did_not_stand_back.Paralyze(3 SECONDS) + did_not_stand_back.Knockdown(6 SECONDS) + did_not_stand_back.throw_at( + target = get_edge_target_turf(did_not_stand_back, dir_to_center), + range = throw_dist, + speed = 3, + force = MOVE_FORCE_VERY_STRONG, + ) + +/// Logs if the capsule was triggered, by default only if it happened on non-lavaland +/obj/item/survivalcapsule/proc/trigger_admin_alert(mob/triggerer, turf/trigger_loc) + //only report capsules away from the mining/lavaland level + if(is_mining_level(trigger_loc.z)) + return + + message_admins("[ADMIN_LOOKUPFLW(triggerer)] activated a bluespace capsule away from the mining level! [ADMIN_VERBOSEJMP(trigger_loc)]") + log_admin("[key_name(triggerer)] activated a bluespace capsule away from the mining level at [AREACOORD(trigger_loc)]") //Non-default pods @@ -129,6 +177,8 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/structure/window/reinforced/survival_pod/spawne icon_state = "windoor" base_state = "windoor" +MAPPING_DIRECTIONAL_HELPERS(/obj/machinery/door/window/survival_pod/left, 0) + //Table /obj/structure/table/survival_pod icon = 'icons/obj/mining_zones/survival_pod.dmi' @@ -201,7 +251,7 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/structure/window/reinforced/survival_pod/spawne light_color = COLOR_VERY_PALE_LIME_GREEN max_n_of_items = 10 pixel_y = -4 - obj_flags = /obj::obj_flags | NO_DECONSTRUCTION + obj_flags = parent_type::obj_flags | NO_DECONSTRUCTION /obj/machinery/smartfridge/survival_pod/Initialize(mapload) AddElement(/datum/element/update_icon_blocker) diff --git a/code/modules/mining/lavaland/tendril_loot.dm b/code/modules/mining/lavaland/tendril_loot.dm index 72d89d55b69..1001dd9c897 100644 --- a/code/modules/mining/lavaland/tendril_loot.dm +++ b/code/modules/mining/lavaland/tendril_loot.dm @@ -271,7 +271,7 @@ desc = "Happy to light your way." icon = 'icons/obj/lighting.dmi' icon_state = "orb" - light_system = MOVABLE_LIGHT + light_system = OVERLAY_LIGHT light_range = 7 light_flags = LIGHT_ATTACHED layer = ABOVE_ALL_MOB_LAYER @@ -467,8 +467,6 @@ resistance_flags = INDESTRUCTIBLE /obj/item/shared_storage/red - name = "paradox bag" - desc = "Somehow, it's in two places at once." /obj/item/shared_storage/red/Initialize(mapload) . = ..() diff --git a/code/modules/mining/machine_processing.dm b/code/modules/mining/machine_processing.dm index f4510741968..62458347bf0 100644 --- a/code/modules/mining/machine_processing.dm +++ b/code/modules/mining/machine_processing.dm @@ -70,7 +70,7 @@ icon = 'icons/obj/machines/mining_machines.dmi' icon_state = "console" density = TRUE - interaction_flags_machine = INTERACT_MACHINE_WIRES_IF_OPEN|INTERACT_MACHINE_ALLOW_SILICON|INTERACT_MACHINE_OPEN_SILICON|INTERACT_MACHINE_SET_MACHINE + interaction_flags_machine = INTERACT_MACHINE_WIRES_IF_OPEN|INTERACT_MACHINE_ALLOW_SILICON|INTERACT_MACHINE_OPEN_SILICON /// Connected ore processing machine. var/obj/machinery/mineral/processing_unit/processing_machine @@ -82,39 +82,43 @@ else return INITIALIZE_HINT_QDEL -/obj/machinery/mineral/processing_unit_console/ui_interact(mob/user) - . = ..() - if(!processing_machine) - return +/obj/machinery/mineral/processing_unit_console/ui_interact(mob/user, datum/tgui/ui) + ui = SStgui.try_update_ui(user, src, ui) + if(!ui) + ui = new(user, src, "ProcessingConsole") + ui.open() - var/dat = processing_machine.get_machine_data() +/obj/machinery/mineral/processing_unit_console/ui_static_data(mob/user) + return processing_machine.ui_static_data() - var/datum/browser/popup = new(user, "processing", "Smelting Console", 300, 500) - popup.set_content(dat) - popup.open() +/obj/machinery/mineral/processing_unit_console/ui_data(mob/user) + return processing_machine.ui_data() -/obj/machinery/mineral/processing_unit_console/Topic(href, href_list) - if(..()) +/obj/machinery/mineral/processing_unit_console/ui_act(action, list/params) + . = ..() + if(.) return - usr.set_machine(src) - add_fingerprint(usr) - if(href_list["material"]) - var/datum/material/new_material = locate(href_list["material"]) - if(istype(new_material)) + switch(action) + if("setMaterial") + var/datum/material/new_material = locate(params["value"]) + if(!istype(new_material)) + return + processing_machine.selected_material = new_material processing_machine.selected_alloy = null + return TRUE - if(href_list["alloy"]) - processing_machine.selected_material = null - processing_machine.selected_alloy = href_list["alloy"] + if("setAlloy") + processing_machine.selected_material = null + processing_machine.selected_alloy = params["value"] + return TRUE - if(href_list["set_on"]) - processing_machine.on = (href_list["set_on"] == "on") - processing_machine.begin_processing() - - updateUsrDialog() - return + if("toggle") + processing_machine.on = !processing_machine.on + if(processing_machine.on) + processing_machine.begin_processing() + return TRUE /obj/machinery/mineral/processing_unit_console/Destroy() processing_machine = null @@ -181,41 +185,53 @@ unload_mineral(O) else materials.insert_item(O) - if(mineral_machine) - mineral_machine.updateUsrDialog() - -/obj/machinery/mineral/processing_unit/proc/get_machine_data() - var/dat = "Smelter control console

    " - for(var/datum/material/all_materials as anything in materials.materials) - var/amount = materials.materials[all_materials] - dat += "[all_materials.name]: [amount] cm³" - if (selected_material == all_materials) - dat += " Smelting" - else - dat += " Not Smelting " - dat += "
    " - - dat += "

    " - dat += "Smelt Alloys
    " + +/obj/machinery/mineral/processing_unit/ui_static_data() + var/list/data = list() + + for(var/datum/material/material as anything in materials.materials) + var/obj/display = initial(material.sheet_type) + data["materialIcons"] += list( + list( + "id" = REF(material), + "icon" = icon2base64(icon(initial(display.icon), icon_state = initial(display.icon_state), frame = 1)), + ) + ) for(var/research in stored_research.researched_designs) - var/datum/design/designs = SSresearch.techweb_design_by_id(research) - dat += "[designs.name] " - if (selected_alloy == designs.id) - dat += " Smelting" - else - dat += " Not Smelting " - dat += "
    " - - dat += "

    " - //On or off - dat += "Machine is currently " - if (on) - dat += "On " - else - dat += "Off " + var/datum/design/design = SSresearch.techweb_design_by_id(research) + var/obj/display = initial(design.build_path) + data["alloyIcons"] += list( + list( + "id" = design.id, + "icon" = icon2base64(icon(initial(display.icon), icon_state = initial(display.icon_state), frame = 1)), + ) + ) - return dat + data += materials.ui_static_data() + + return data + +/obj/machinery/mineral/processing_unit/ui_data() + var/list/data = list() + + data["materials"] = materials.ui_data() + data["selectedMaterial"] = selected_material?.name + + data["alloys"] = list() + for(var/research in stored_research.researched_designs) + var/datum/design/design = SSresearch.techweb_design_by_id(research) + data["alloys"] += list( + list( + "name" = design.name, + "id" = design.id, + ) + ) + data["selectedAlloy"] = selected_alloy + + data["state"] = on + + return data /obj/machinery/mineral/processing_unit/pickup_item(datum/source, atom/movable/target, direction) if(QDELETED(target)) @@ -225,19 +241,13 @@ /obj/machinery/mineral/processing_unit/process(seconds_per_tick) if(!on) - end_processing() - if(mineral_machine) - mineral_machine.updateUsrDialog() - return + return PROCESS_KILL if(selected_material) smelt_ore(seconds_per_tick) else if(selected_alloy) smelt_alloy(seconds_per_tick) - if(mineral_machine) - mineral_machine.updateUsrDialog() - /obj/machinery/mineral/processing_unit/proc/smelt_ore(seconds_per_tick = 2) var/datum/material/mat = selected_material if(!mat) diff --git a/code/modules/mining/machine_redemption.dm b/code/modules/mining/machine_redemption.dm index cfa8203615e..0b9b7895c6b 100644 --- a/code/modules/mining/machine_redemption.dm +++ b/code/modules/mining/machine_redemption.dm @@ -1,4 +1,4 @@ -/**********************Ore Redemption Unit**************************/ +/**********************Ore Redemption Unit (ORM)**************************/ //Turns all the various mining machines into a single unit to speed up mining and establish a point system /obj/machinery/mineral/ore_redemption diff --git a/code/modules/mining/machine_silo.dm b/code/modules/mining/machine_silo.dm index dcc85dc1c1c..9320bc01226 100644 --- a/code/modules/mining/machine_silo.dm +++ b/code/modules/mining/machine_silo.dm @@ -1,6 +1,3 @@ -GLOBAL_DATUM(ore_silo_default, /obj/machinery/ore_silo) -GLOBAL_LIST_EMPTY(silo_access_logs) - /obj/machinery/ore_silo name = "ore silo" desc = "An all-in-one bluespace storage and transmission system for the station's mineral distribution needs." @@ -8,10 +5,9 @@ GLOBAL_LIST_EMPTY(silo_access_logs) icon_state = "silo" density = TRUE circuit = /obj/item/circuitboard/machine/ore_silo - interaction_flags_machine = INTERACT_MACHINE_WIRES_IF_OPEN|INTERACT_MACHINE_ALLOW_SILICON|INTERACT_MACHINE_OPEN_SILICON|INTERACT_MACHINE_SET_MACHINE + interaction_flags_machine = INTERACT_MACHINE_WIRES_IF_OPEN|INTERACT_MACHINE_ALLOW_SILICON|INTERACT_MACHINE_OPEN_SILICON + processing_flags = NONE - /// The machine UI's page of logs showing ore history. - var/log_page = 1 /// List of all connected components that are on hold from accessing materials. var/list/holds = list() /// List of all components that are sharing ores with this silo. @@ -21,6 +17,7 @@ GLOBAL_LIST_EMPTY(silo_access_logs) /obj/machinery/ore_silo/Initialize(mapload) . = ..() + var/static/list/materials_list = list( /datum/material/iron, /datum/material/glass, @@ -38,6 +35,7 @@ GLOBAL_LIST_EMPTY(silo_access_logs) /datum/component/material_container, \ materials_list, \ INFINITY, \ + MATCONTAINER_EXAMINE, \ container_signals = list( \ COMSIG_MATCONTAINER_ITEM_CONSUMED = TYPE_PROC_REF(/obj/machinery/ore_silo, on_item_consumed), \ COMSIG_MATCONTAINER_SHEETS_RETRIEVED = TYPE_PROC_REF(/obj/machinery/ore_silo, log_sheets_ejected), \ @@ -46,6 +44,7 @@ GLOBAL_LIST_EMPTY(silo_access_logs) ) if (!GLOB.ore_silo_default && mapload && is_station_level(z)) GLOB.ore_silo_default = src + register_context() /obj/machinery/ore_silo/Destroy() if (GLOB.ore_silo_default == src) @@ -59,6 +58,30 @@ GLOBAL_LIST_EMPTY(silo_access_logs) return ..() +/obj/machinery/ore_silo/examine(mob/user) + . = ..() + . += span_notice("It can be linked to techfabs, circuit printers and protolathes with a multitool.") + . += span_notice("Its maintainence panel can be [EXAMINE_HINT("screwed")] [panel_open ? "closed" : "open"].") + if(panel_open) + . += span_notice("The whole machine can be [EXAMINE_HINT("pried")] apart.") + +/obj/machinery/ore_silo/add_context(atom/source, list/context, obj/item/held_item, mob/user) + . = NONE + if(isnull(held_item)) + return + + if(held_item.tool_behaviour == TOOL_SCREWDRIVER) + context[SCREENTIP_CONTEXT_LMB] = "[panel_open ? "Close" : "Open"] Panel" + return CONTEXTUAL_SCREENTIP_SET + + if(held_item.tool_behaviour == TOOL_MULTITOOL) + context[SCREENTIP_CONTEXT_LMB] = "Log Silo" + return CONTEXTUAL_SCREENTIP_SET + + if(panel_open && held_item.tool_behaviour == TOOL_CROWBAR) + context[SCREENTIP_CONTEXT_LMB] = "Deconstruct" + return CONTEXTUAL_SCREENTIP_SET + /obj/machinery/ore_silo/proc/on_item_consumed(datum/component/material_container/container, obj/item/item_inserted, last_inserted_id, mats_consumed, amount_inserted, atom/context) SIGNAL_HANDLER @@ -72,105 +95,120 @@ GLOBAL_LIST_EMPTY(silo_access_logs) silo_log(context, "ejected", -sheets.amount, "[sheets.singular_name]", sheets.custom_materials) /obj/machinery/ore_silo/screwdriver_act(mob/living/user, obj/item/tool) - return default_deconstruction_screwdriver(user, icon_state, icon_state, tool) + . = ITEM_INTERACT_BLOCKING + if(default_deconstruction_screwdriver(user, icon_state, icon_state, tool)) + return ITEM_INTERACT_SUCCESS /obj/machinery/ore_silo/crowbar_act(mob/living/user, obj/item/tool) - return default_deconstruction_crowbar(tool) - -/obj/machinery/ore_silo/ui_interact(mob/user) - user.set_machine(src) - var/datum/browser/popup = new(user, "ore_silo", null, 600, 550) - popup.set_content(generate_ui()) - popup.open() - -/obj/machinery/ore_silo/proc/generate_ui() - var/list/ui = list("Ore Silo

    Stored Material:

    ") - var/any = FALSE - for(var/M in materials.materials) - var/datum/material/mat = M - var/amount = materials.materials[M] - var/sheets = round(amount) / SHEET_MATERIAL_AMOUNT - var/ref = REF(M) - if (sheets) - if (sheets >= 1) - ui += "Eject" - else - ui += "Eject" - if (sheets >= 20) - ui += "20x" - else - ui += "20x" - ui += "[mat.name]: [sheets] sheets
    " - any = TRUE - if(!any) - ui += "Nothing!" - - ui += "

    Connected Machines:

    " - for(var/datum/component/remote_materials/mats as anything in ore_connected_machines) - var/atom/parent = mats.parent - ui += "Remove" - ui += "[holds[mats] ? "Allow" : "Hold"]" - ui += " [parent.name] in [get_area_name(parent, TRUE)]
    " - if(!ore_connected_machines.len) - ui += "Nothing!" - - ui += "

    Access Logs:

    " - var/list/logs = GLOB.silo_access_logs[REF(src)] - var/len = LAZYLEN(logs) - var/num_pages = 1 + round((len - 1) / 30) - var/page = clamp(log_page, 1, num_pages) - if(num_pages > 1) - for(var/i in 1 to num_pages) - if(i == page) - ui += "[i]" - else - ui += "[i]" - - ui += "
      " - any = FALSE - for(var/i in (page - 1) * 30 + 1 to min(page * 30, len)) - var/datum/ore_silo_log/entry = logs[i] - ui += "
    1. [entry.formatted]
    2. " - any = TRUE - if (!any) - ui += "
    3. Nothing!
    4. " - - ui += "
    " - return ui.Join() - -/obj/machinery/ore_silo/Topic(href, href_list) - if(..()) - return - add_fingerprint(usr) - usr.set_machine(src) - - if(href_list["remove"]) - var/datum/component/remote_materials/mats = locate(href_list["remove"]) in ore_connected_machines - if (mats) - mats.disconnect_from(src) - updateUsrDialog() - return TRUE - else if(href_list["hold"]) - var/datum/component/remote_materials/mats = locate(href_list["hold"]) in ore_connected_machines - mats.toggle_holding() - updateUsrDialog() - return TRUE - else if(href_list["ejectsheet"]) - var/datum/material/eject_sheet = locate(href_list["ejectsheet"]) - var/amount = text2num(href_list["eject_amt"]) - materials.retrieve_sheets(amount, eject_sheet, drop_location()) - return TRUE - else if(href_list["page"]) - log_page = text2num(href_list["page"]) || 1 - updateUsrDialog() - return TRUE + . = ITEM_INTERACT_BLOCKING + if(default_deconstruction_crowbar(tool)) + return ITEM_INTERACT_SUCCESS /obj/machinery/ore_silo/multitool_act(mob/living/user, obj/item/multitool/I) + I.set_buffer(src) + balloon_alert(user, "saved to multitool buffer") + return ITEM_INTERACT_SUCCESS + +/obj/machinery/ore_silo/ui_assets(mob/user) + return list( + get_asset_datum(/datum/asset/spritesheet/sheetmaterials) + ) + +/obj/machinery/ore_silo/ui_interact(mob/user, datum/tgui/ui) + ui = SStgui.try_update_ui(user, src, ui) + if(!ui) + ui = new(user, src, "OreSilo") + ui.open() + +/obj/machinery/ore_silo/ui_static_data(mob/user) + return materials.ui_static_data() + +/obj/machinery/ore_silo/ui_data(mob/user) + var/list/data = list() + + data["materials"] = materials.ui_data() + + data["machines"] = list() + for(var/datum/component/remote_materials/remote as anything in ore_connected_machines) + var/atom/parent = remote.parent + data["machines"] += list( + list( + "icon" = icon2base64(icon(initial(parent.icon), initial(parent.icon_state), frame = 1)), + "name" = parent.name, + "onHold" = !!holds[remote], + "location" = get_area_name(parent, TRUE), + ) + ) + + data["logs"] = list() + for(var/datum/ore_silo_log/entry as anything in GLOB.silo_access_logs[REF(src)]) + data["logs"] += list( + list( + "rawMaterials" = entry.get_raw_materials(""), + "machineName" = entry.machine_name, + "areaName" = entry.area_name, + "action" = entry.action, + "amount" = entry.amount, + "time" = entry.timestamp, + "noun" = entry.noun, + ) + ) + + return data + +/obj/machinery/ore_silo/ui_act(action, list/params) . = ..() - if (istype(I)) - I.set_buffer(src) - balloon_alert(user, "saved to multitool buffer") - return TRUE + if(.) + return + + switch(action) + if("remove") + var/index = params["id"] + if(isnull(index)) + return + + index = text2num(index) + if(isnull(index)) + return + + var/datum/component/remote_materials/remote = ore_connected_machines[index] + if(isnull(remote)) + return + + remote.disconnect_from(src) + return TRUE + + if("hold") + var/index = params["id"] + if(isnull(index)) + return + + index = text2num(index) + if(isnull(index)) + return + + var/datum/component/remote_materials/remote = ore_connected_machines[index] + if(isnull(remote)) + return + + remote.toggle_holding() + return TRUE + + if("eject") + var/datum/material/ejecting = locate(params["ref"]) + if(!istype(ejecting)) + return + + var/amount = params["amount"] + if(isnull(amount)) + return + + amount = text2num(amount) + if(isnull(amount)) + return + + materials.retrieve_sheets(amount, ejecting, drop_location()) + return TRUE /** * Creates a log entry for depositing/withdrawing from the silo both ingame and in text based log @@ -185,6 +223,7 @@ GLOBAL_LIST_EMPTY(silo_access_logs) /obj/machinery/ore_silo/proc/silo_log(obj/machinery/M, action, amount, noun, list/mats) if (!length(mats)) return + var/datum/ore_silo_log/entry = new(M, action, amount, noun, mats) var/list/datum/ore_silo_log/logs = GLOB.silo_access_logs[REF(src)] if(!LAZYLEN(logs)) @@ -192,23 +231,23 @@ GLOBAL_LIST_EMPTY(silo_access_logs) else if(!logs[1].merge(entry)) logs.Insert(1, entry) - updateUsrDialog() flick("silo_active", src) -/obj/machinery/ore_silo/examine(mob/user) - . = ..() - . += span_notice("[src] can be linked to techfabs, circuit printers and protolathes with a multitool.") - +///The log entry for an ore silo action /datum/ore_silo_log - var/name // for VV - var/formatted // for display - + ///The time of action var/timestamp + ///The name of the machine that remotely acted on the ore silo var/machine_name + ///The area of the machine that remotely acted on the ore silo var/area_name + ///The actual action performed by the machine var/action + ///An short verb describing the action var/noun + ///The amount of items affected by this action e.g. print quantity, sheets ejected etc. var/amount + ///List of individual materials used in the action var/list/materials /datum/ore_silo_log/New(obj/machinery/M, _action, _amount, _noun, list/mats=list()) @@ -219,7 +258,6 @@ GLOBAL_LIST_EMPTY(silo_access_logs) amount = _amount noun = _noun materials = mats.Copy() - format() var/list/data = list( "machine_name" = machine_name, "area_name" = AREACOORD(M), @@ -235,6 +273,12 @@ GLOBAL_LIST_EMPTY(silo_access_logs) data, ) +/** + * Merges a silo log entry with this one + * Arguments + * + * * datum/ore_silo_log/other - the other silo entry we are trying to merge with this one + */ /datum/ore_silo_log/proc/merge(datum/ore_silo_log/other) if (other == src || action != other.action || noun != other.noun) return FALSE @@ -245,13 +289,14 @@ GLOBAL_LIST_EMPTY(silo_access_logs) amount += other.amount for(var/each in other.materials) materials[each] += other.materials[each] - format() return TRUE -/datum/ore_silo_log/proc/format() - name = "[machine_name]: [action] [amount]x [noun]" - formatted = "([timestamp]) [machine_name] in [area_name]
    [action] [abs(amount)]x [noun]
    [get_raw_materials("")]" - +/** + * Returns list/materials but with each entry joined by an seperator to create 1 string + * Arguments + * + * * separator - the string used to concatenate all entries in list/materials + */ /datum/ore_silo_log/proc/get_raw_materials(separator) var/list/msg = list() for(var/key in materials) diff --git a/code/modules/mining/mine_items.dm b/code/modules/mining/mine_items.dm index f1a661e6a48..f1d7500a033 100644 --- a/code/modules/mining/mine_items.dm +++ b/code/modules/mining/mine_items.dm @@ -26,6 +26,10 @@ set_cap = 1 set_luminosity = 1.6 +/obj/effect/light_emitter/fake_outdoors + light_color = COLOR_LIGHT_YELLOW + set_cap = 1 + /**********************Miner Lockers**************************/ /obj/structure/closet/wardrobe/miner @@ -69,7 +73,7 @@ new /obj/item/flashlight/seclite(src) new /obj/item/storage/bag/plants(src) new /obj/item/storage/bag/ore(src) - new /obj/item/t_scanner/adv_mining_scanner/lesser(src) + new /obj/item/mining_scanner(src) new /obj/item/clothing/glasses/meson(src) if (HAS_TRAIT(SSstation, STATION_TRAIT_SMALLER_PODS)) new /obj/item/survivalcapsule/bathroom(src) diff --git a/code/modules/mining/satchel_ore_box.dm b/code/modules/mining/satchel_ore_box.dm new file mode 100644 index 00000000000..3b2a5ce054c --- /dev/null +++ b/code/modules/mining/satchel_ore_box.dm @@ -0,0 +1,111 @@ + +/**********************Ore box**************************/ + +/obj/structure/ore_box + icon = 'icons/obj/mining.dmi' + icon_state = "orebox" + name = "ore box" + desc = "A heavy wooden box, which can be filled with a lot of ores or boulders" + density = TRUE + pressure_resistance = 5 * ONE_ATMOSPHERE + +/obj/structure/ore_box/Initialize(mapload) + . = ..() + register_context() + +///Dumps all contents of this ore box on the turf +/obj/structure/ore_box/proc/dump_box_contents() + var/drop = drop_location() + for(var/obj/item/weapon in src) + weapon.forceMove(drop) + +/obj/structure/ore_box/deconstruct(disassembled = TRUE) + new /obj/item/stack/sheet/mineral/wood(loc, 4) + + dump_box_contents() + + return ..() + +/obj/structure/ore_box/add_context(atom/source, list/context, obj/item/held_item, mob/user) + . = NONE + if(isnull(held_item)) + return + + if(held_item.tool_behaviour == TOOL_CROWBAR) + context[SCREENTIP_CONTEXT_LMB] = "Deconstruct" + return CONTEXTUAL_SCREENTIP_SET + else if(istype(held_item, /obj/item/stack/ore) || istype(held_item, /obj/item/boulder)) + context[SCREENTIP_CONTEXT_LMB] = "Insert Item" + return CONTEXTUAL_SCREENTIP_SET + else if(held_item.atom_storage) + context[SCREENTIP_CONTEXT_LMB] = "Transfer Contents" + return CONTEXTUAL_SCREENTIP_SET + + +/obj/structure/ore_box/examine(mob/living/user) + . = ..() + if(in_range(src, user) || isobserver(user)) + . += span_notice("Can be [EXAMINE_HINT("pried")] apart.") + ui_interact(user) + +/obj/structure/ore_box/crowbar_act(mob/living/user, obj/item/I) + . = ITEM_INTERACT_BLOCKING + if(I.use_tool(src, user, 50, volume = 50)) + user.visible_message(span_notice("[user] pries \the [src] apart."), + span_notice("You pry apart \the [src]."), + span_hear("You hear splitting wood.")) + deconstruct(TRUE) + return ITEM_INTERACT_SUCCESS + +/obj/structure/ore_box/attackby(obj/item/weapon, mob/user, params) + if(istype(weapon, /obj/item/stack/ore) || istype(weapon, /obj/item/boulder)) + user.transferItemToLoc(weapon, src) + return TRUE + else if(weapon.atom_storage) + weapon.atom_storage.remove_type(/obj/item/stack/ore, src, INFINITY, TRUE, FALSE, user, null) + to_chat(user, span_notice("You empty the ore in [weapon] into \the [src].")) + return TRUE + else + return ..() + +/obj/structure/ore_box/ui_interact(mob/user, datum/tgui/ui) + ui = SStgui.try_update_ui(user, src, ui) + if(!ui) + ui = new(user, src, "OreBox", name) + ui.open() + +/obj/structure/ore_box/ui_data() + var/list/materials = list() + var/name + var/amount + for(var/obj/item/stack/ore/potental_ore as anything in contents) + if(istype(potental_ore, /obj/item/stack/ore)) + name = potental_ore.name + amount = potental_ore.amount + else + name = "Boulders" + amount = 1 + + var/item_found = FALSE + for(var/list/item as anything in materials) + if(item["name"] == name) + item_found = TRUE + item["amount"] += amount + break + if(!item_found) + materials += list(list("name" = name, "amount" = amount)) + + return list("materials" = materials) + +/obj/structure/ore_box/ui_act(action, params) + . = ..() + if(.) + return + + if(action == "removeall") + dump_box_contents() + return TRUE + +/// Special override for notify_contents = FALSE. +/obj/structure/ore_box/on_changed_z_level(turf/old_turf, turf/new_turf, same_z_layer, notify_contents = FALSE) + return ..() diff --git a/code/modules/mining/satchel_ore_boxdm.dm b/code/modules/mining/satchel_ore_boxdm.dm deleted file mode 100644 index 607bbcd9f06..00000000000 --- a/code/modules/mining/satchel_ore_boxdm.dm +++ /dev/null @@ -1,100 +0,0 @@ - -/**********************Ore box**************************/ - -/obj/structure/ore_box - icon = 'icons/obj/mining.dmi' - icon_state = "orebox" - name = "ore box" - desc = "A heavy wooden box, which can be filled with a lot of ores." - density = TRUE - pressure_resistance = 5*ONE_ATMOSPHERE - -/obj/structure/ore_box/attackby(obj/item/W, mob/user, params) - if (istype(W, /obj/item/stack/ore)) - user.transferItemToLoc(W, src) - else if(W.atom_storage) - W.atom_storage.remove_type(/obj/item/stack/ore, src, INFINITY, TRUE, FALSE, user, null) - to_chat(user, span_notice("You empty the ore in [W] into \the [src].")) - else - return ..() - -/obj/structure/ore_box/crowbar_act(mob/living/user, obj/item/I) - if(I.use_tool(src, user, 50, volume=50)) - user.visible_message(span_notice("[user] pries \the [src] apart."), - span_notice("You pry apart \the [src]."), - span_hear("You hear splitting wood.")) - deconstruct(TRUE, user) - return TRUE - -/obj/structure/ore_box/examine(mob/living/user) - if(Adjacent(user) && istype(user)) - ui_interact(user) - . = ..() - -/obj/structure/ore_box/attack_hand(mob/user, list/modifiers) - . = ..() - if(.) - return - if(Adjacent(user)) - ui_interact(user) - -/obj/structure/ore_box/attack_robot(mob/user) - if(Adjacent(user)) - ui_interact(user) - -/obj/structure/ore_box/proc/dump_box_contents() - var/drop = drop_location() - var/turf/our_turf = get_turf(src) - for(var/obj/item/stack/ore/O in src) - if(QDELETED(O)) - continue - if(QDELETED(src)) - break - O.forceMove(drop) - SET_PLANE(O, PLANE_TO_TRUE(O.plane), our_turf) - if(TICK_CHECK) - stoplag() - our_turf = get_turf(src) - drop = drop_location() - -/obj/structure/ore_box/ui_interact(mob/user, datum/tgui/ui) - ui = SStgui.try_update_ui(user, src, ui) - if(!ui) - ui = new(user, src, "OreBox", name) - ui.open() - -/obj/structure/ore_box/ui_data() - var/contents = list() - for(var/obj/item/stack/ore/O in src) - contents[O.type] += O.amount - - var/data = list() - data["materials"] = list() - for(var/type in contents) - var/obj/item/stack/ore/O = type - var/name = initial(O.name) - data["materials"] += list(list("name" = name, "amount" = contents[type], "id" = type)) - - return data - -/obj/structure/ore_box/ui_act(action, params) - . = ..() - if(.) - return - if(!Adjacent(usr)) - return - switch(action) - if("removeall") - dump_box_contents() - to_chat(usr, span_notice("You open the release hatch on the box..")) - -/obj/structure/ore_box/deconstruct(disassembled = TRUE, mob/user) - var/obj/item/stack/sheet/mineral/wood/WD = new (loc, 4) - if(user && !QDELETED(WD)) - WD.add_fingerprint(user) - dump_box_contents() - qdel(src) - -/// Special override for notify_contents = FALSE. -/obj/structure/ore_box/on_changed_z_level(turf/old_turf, turf/new_turf, same_z_layer, notify_contents = FALSE) - return ..() diff --git a/code/modules/mob/dead/crew_manifest.dm b/code/modules/mob/dead/crew_manifest.dm deleted file mode 100644 index 6a2c84622a2..00000000000 --- a/code/modules/mob/dead/crew_manifest.dm +++ /dev/null @@ -1,38 +0,0 @@ -/datum/crew_manifest - -/datum/crew_manifest/ui_state(mob/user) - return GLOB.always_state - -/datum/crew_manifest/ui_status(mob/user, datum/ui_state/state) - return (isnewplayer(user) || isobserver(user) || isAI(user) || ispAI(user)) ? UI_INTERACTIVE : UI_CLOSE - -/datum/crew_manifest/ui_interact(mob/user, datum/tgui/ui) - ui = SStgui.try_update_ui(user, src, ui) - if (!ui) - ui = new(user, src, "CrewManifest") - ui.open() - -/datum/crew_manifest/ui_act(action, list/params, datum/tgui/ui, datum/ui_state/state) - . = ..() - if(.) - return - -/datum/crew_manifest/ui_data(mob/user) - var/list/positions = list() - for(var/datum/job_department/department as anything in SSjob.joinable_departments) - var/open = 0 - var/list/exceptions = list() - for(var/datum/job/job as anything in department.department_jobs) - if(job.total_positions == -1) - exceptions += job.title - continue - var/open_slots = job.total_positions - job.current_positions - if(open_slots < 1) - continue - open += open_slots - positions[department.department_name] = list("exceptions" = exceptions, "open" = open) - - return list( - "manifest" = GLOB.manifest.get_manifest(), - "positions" = positions - ) diff --git a/code/modules/mob/dead/new_player/latejoin_menu.dm b/code/modules/mob/dead/new_player/latejoin_menu.dm index 992f0513423..a2d68536974 100644 --- a/code/modules/mob/dead/new_player/latejoin_menu.dm +++ b/code/modules/mob/dead/new_player/latejoin_menu.dm @@ -80,6 +80,8 @@ GLOBAL_DATUM_INIT(latejoin_menu, /datum/latejoin_menu, new) ) if(job_availability != JOB_AVAILABLE) + if (job_datum.job_flags & JOB_HIDE_WHEN_EMPTY) + continue job_data["unavailable_reason"] = get_job_unavailable_error_message(job_availability, job_datum.title) if(job_datum.total_positions < 0) @@ -95,6 +97,7 @@ GLOBAL_DATUM_INIT(latejoin_menu, /datum/latejoin_menu, new) /datum/latejoin_menu/ui_static_data(mob/user) var/list/departments = list() + var/mob/dead/new_player/owner = user for(var/datum/job_department/department as anything in SSjob.joinable_departments) var/list/department_jobs = list() @@ -108,6 +111,8 @@ GLOBAL_DATUM_INIT(latejoin_menu, /datum/latejoin_menu, new) //Jobs under multiple departments should only be displayed if this is their first department or the command department if(LAZYLEN(job_datum.departments_list) > 1 && job_datum.departments_list[1] != department.type && !(job_datum.departments_bitflags & DEPARTMENT_BITFLAG_COMMAND)) continue + if((job_datum.job_flags & JOB_HIDE_WHEN_EMPTY) && owner.IsJobUnavailable(job_datum.title, latejoin = TRUE) != JOB_AVAILABLE) + continue var/list/job_data = list( "command" = !!(job_datum.departments_bitflags & DEPARTMENT_BITFLAG_COMMAND), diff --git a/code/modules/mob/dead/new_player/new_player.dm b/code/modules/mob/dead/new_player/new_player.dm index c10c027bc3d..e1033e24f35 100644 --- a/code/modules/mob/dead/new_player/new_player.dm +++ b/code/modules/mob/dead/new_player/new_player.dm @@ -338,11 +338,7 @@ return client.crew_manifest_delay = world.time + (1 SECONDS) - if(!GLOB.crew_manifest_tgui) - GLOB.crew_manifest_tgui = new /datum/crew_manifest(src) - - - GLOB.crew_manifest_tgui.ui_interact(src) + GLOB.manifest.ui_interact(src) /mob/dead/new_player/Move() return 0 diff --git a/code/modules/mob/dead/new_player/preferences_setup.dm b/code/modules/mob/dead/new_player/preferences_setup.dm index 9e9a58e8032..6a6211c250e 100644 --- a/code/modules/mob/dead/new_player/preferences_setup.dm +++ b/code/modules/mob/dead/new_player/preferences_setup.dm @@ -25,7 +25,7 @@ /datum/preferences/proc/hardcore_random_setup(mob/living/carbon/human/character) var/next_hardcore_score = select_hardcore_quirks() character.hardcore_survival_score = next_hardcore_score ** 1.2 //30 points would be about 60 score - log_admin("[character] started hardcore random with [english_list(all_quirks)], for a score of [next_hardcore_score].") + log_game("[character] started hardcore random with [english_list(all_quirks)], for a score of [next_hardcore_score].") //Add a sixpack because honestly var/obj/item/bodypart/chest/chest = character.get_bodypart(BODY_ZONE_CHEST) diff --git a/code/modules/mob/dead/observer/observer.dm b/code/modules/mob/dead/observer/observer.dm index 86c0da5acf7..3fdd830f1b8 100644 --- a/code/modules/mob/dead/observer/observer.dm +++ b/code/modules/mob/dead/observer/observer.dm @@ -16,7 +16,7 @@ GLOBAL_VAR_INIT(observer_default_invisibility, INVISIBILITY_OBSERVER) invisibility = INVISIBILITY_OBSERVER hud_type = /datum/hud/ghost movement_type = GROUND | FLYING - light_system = MOVABLE_LIGHT + light_system = OVERLAY_LIGHT light_range = 1 light_power = 2 light_on = FALSE @@ -109,10 +109,10 @@ GLOBAL_VAR_INIT(observer_default_invisibility, INVISIBILITY_OBSERVER) var/datum/species/human_species = body_human.dna.species if(human_species.check_head_flags(HEAD_HAIR)) hairstyle = body_human.hairstyle - hair_color = brighten_color(body_human.hair_color) + hair_color = ghostify_color(body_human.hair_color) if(human_species.check_head_flags(HEAD_FACIAL_HAIR)) facial_hairstyle = body_human.facial_hairstyle - facial_hair_color = brighten_color(body_human.facial_hair_color) + facial_hair_color = ghostify_color(body_human.facial_hair_color) update_appearance() @@ -239,42 +239,23 @@ GLOBAL_VAR_INIT(observer_default_invisibility, INVISIBILITY_OBSERVER) add_overlay(hair_overlay) /* - * Increase the brightness of a color by calculating the average distance between the R, G and B values, - * and maximum brightness, then adding 30% of that average to R, G and B. - * - * I'll make this proc global and move it to its own file in a future update. |- Ricotez - UPDATE: They never did :( + * Increase the brightness of a color and desaturates it slightly to make it suitable for ghosts + * We use HSL for this, makes life SOOO easy */ -/mob/proc/brighten_color(input_color) - if(input_color[1] == "#") - input_color = copytext(input_color, 2) // Removing the # at the beginning. - var/r_val - var/b_val - var/g_val - var/color_format = length(input_color) - if(color_format != length_char(input_color)) - return 0 - if(color_format == 3) - r_val = hex2num(copytext(input_color, 1, 2)) * 16 - g_val = hex2num(copytext(input_color, 2, 3)) * 16 - b_val = hex2num(copytext(input_color, 3, 4)) * 16 - else if(color_format == 6) - r_val = hex2num(copytext(input_color, 1, 3)) - g_val = hex2num(copytext(input_color, 3, 5)) - b_val = hex2num(copytext(input_color, 5, 7)) - else - return 0 //If the color format is not 3 or 6, you're using an unexpected way to represent a color. +/proc/ghostify_color(input_color) + var/list/read_color = rgb2num(input_color, COLORSPACE_HSL) + var/sat = read_color[2] + var/lum = read_color[3] - r_val += (255 - r_val) * 0.4 - if(r_val > 255) - r_val = 255 - g_val += (255 - g_val) * 0.4 - if(g_val > 255) - g_val = 255 - b_val += (255 - b_val) * 0.4 - if(b_val > 255) - b_val = 255 + // Clamp so it still has color, can't get too bright/desaturated + sat -= 15 + if(sat < 30) + sat = min(read_color[2], 30) - return "#" + copytext(rgb(r_val, g_val, b_val), 2) + lum += 15 + if(lum > 80) + lum = max(read_color[3], 80) + return rgb(read_color[1], sat, lum, space = COLORSPACE_HSL) /* Transfer_mind is there to check if mob is being deleted/not going to have a body. @@ -726,10 +707,7 @@ This is the proc mobs get to turn into a ghost. Forked from ghostize due to comp return client.crew_manifest_delay = world.time + (1 SECONDS) - if(!GLOB.crew_manifest_tgui) - GLOB.crew_manifest_tgui = new /datum/crew_manifest(src) - - GLOB.crew_manifest_tgui.ui_interact(src) + GLOB.manifest.ui_interact(src) //this is called when a ghost is drag clicked to something. /mob/dead/observer/MouseDrop(atom/over) @@ -880,11 +858,11 @@ This is the proc mobs get to turn into a ghost. Forked from ghostize due to comp var/datum/species/species = new species_type if(species.check_head_flags(HEAD_HAIR)) hairstyle = client.prefs.read_preference(/datum/preference/choiced/hairstyle) - hair_color = brighten_color(client.prefs.read_preference(/datum/preference/color/hair_color)) + hair_color = ghostify_color(client.prefs.read_preference(/datum/preference/color/hair_color)) if(species.check_head_flags(HEAD_FACIAL_HAIR)) facial_hairstyle = client.prefs.read_preference(/datum/preference/choiced/facial_hairstyle) - facial_hair_color = brighten_color(client.prefs.read_preference(/datum/preference/color/facial_hair_color)) + facial_hair_color = ghostify_color(client.prefs.read_preference(/datum/preference/color/facial_hair_color)) qdel(species) diff --git a/code/modules/mob/inventory.dm b/code/modules/mob/inventory.dm index 219d8e357e7..15f45694c29 100644 --- a/code/modules/mob/inventory.dm +++ b/code/modules/mob/inventory.dm @@ -562,9 +562,7 @@ while(i < length(processing_list)) var/atom/A = processing_list[++i] if(A.atom_storage) - var/list/item_stuff = list() - A.atom_storage.return_inv(item_stuff) - processing_list += item_stuff + processing_list += A.atom_storage.return_inv() return processing_list /// Returns a list of things that the provided mob has, including any storage-capable implants. diff --git a/code/modules/mob/living/basic/basic.dm b/code/modules/mob/living/basic/basic.dm index bb14669e4ed..d69665d6bcd 100644 --- a/code/modules/mob/living/basic/basic.dm +++ b/code/modules/mob/living/basic/basic.dm @@ -138,10 +138,8 @@ if(staminaloss > 0) adjustStaminaLoss(-stamina_recovery * seconds_per_tick, forced = TRUE) -/mob/living/basic/say_mod(input, list/message_mods = list()) - if(length(speak_emote)) - verb_say = pick(speak_emote) - return ..() +/mob/living/basic/get_default_say_verb() + return length(speak_emote) ? pick(speak_emote) : ..() /mob/living/basic/death(gibbed) . = ..() @@ -272,17 +270,17 @@ /mob/living/basic/on_fire_stack(seconds_per_tick, datum/status_effect/fire_handler/fire_stacks/fire_handler) adjust_bodytemperature((maximum_survivable_temperature + (fire_handler.stacks * 12)) * 0.5 * seconds_per_tick) -/mob/living/basic/update_fire_overlay(stacks, on_fire, last_icon_state, suffix = "") - var/mutable_appearance/fire_overlay = mutable_appearance('icons/mob/effects/onfire.dmi', "generic_fire") - if(on_fire && isnull(last_icon_state)) - add_overlay(fire_overlay) - return fire_overlay - else if(!on_fire && !isnull(last_icon_state)) - cut_overlay(fire_overlay) - return null - else if(on_fire && !isnull(last_icon_state)) - return last_icon_state - return null +/mob/living/basic/get_fire_overlay(stacks, on_fire) + var/fire_icon = "generic_fire" + if(!GLOB.fire_appearances[fire_icon]) + GLOB.fire_appearances[fire_icon] = mutable_appearance( + 'icons/mob/effects/onfire.dmi', + fire_icon, + -HIGHEST_LAYER, + appearance_flags = RESET_COLOR, + ) + + return GLOB.fire_appearances[fire_icon] /mob/living/basic/put_in_hands(obj/item/I, del_on_fail = FALSE, merge_stacks = TRUE, ignore_animation = TRUE) . = ..() diff --git a/code/modules/mob/living/basic/basic_defense.dm b/code/modules/mob/living/basic/basic_defense.dm index 69370ed49be..646cabe339d 100644 --- a/code/modules/mob/living/basic/basic_defense.dm +++ b/code/modules/mob/living/basic/basic_defense.dm @@ -4,31 +4,7 @@ return TRUE if(LAZYACCESS(modifiers, RIGHT_CLICK)) - if(user.move_force < move_resist) - return - user.do_attack_animation(src, ATTACK_EFFECT_DISARM) - playsound(src, 'sound/weapons/thudswoosh.ogg', 50, TRUE, -1) - var/shove_dir = get_dir(user, src) - if(!Move(get_step(src, shove_dir), shove_dir)) - log_combat(user, src, "shoved", "failing to move it") - user.visible_message( - span_danger("[user.name] [response_disarm_continuous] [src]!"), - span_danger("You [response_disarm_simple] [src]!"), - span_hear("You hear aggressive shuffling!"), - COMBAT_MESSAGE_RANGE, - list(src), - ) - to_chat(src, span_userdanger("You're shoved by [user.name]!")) - return TRUE - log_combat(user, src, "shoved", "pushing it") - user.visible_message( - span_danger("[user.name] [response_disarm_continuous] [src], pushing [p_them()]!"), - span_danger("You [response_disarm_simple] [src], pushing [p_them()]!"), - span_hear("You hear aggressive shuffling!"), - COMBAT_MESSAGE_RANGE, - list(src), - ) - to_chat(src, span_userdanger("You're pushed by [user.name]!")) + user.disarm(src) return TRUE if(!user.combat_mode) @@ -63,6 +39,19 @@ updatehealth() return TRUE +/mob/living/basic/get_shoving_message(mob/living/shover, obj/item/weapon, shove_flags) + if(weapon) // no "gently pushing aside" if you're pressing a shield at them. + return ..() + var/moved = !(shove_flags & SHOVE_BLOCKED) + shover.visible_message( + span_danger("[shover.name] [response_disarm_continuous] [src][moved ? ", pushing [p_them()]" : ""]!"), + span_danger("You [response_disarm_simple] [src][moved ? ", pushing [p_them()]" : ""]!"), + span_hear("You hear aggressive shuffling!"), + COMBAT_MESSAGE_RANGE, + list(src), + ) + to_chat(src, span_userdanger("You're [moved ? "pushed" : "shoved"] by [shover.name]!")) + /mob/living/basic/attack_hulk(mob/living/carbon/human/user) . = ..() if(!.) diff --git a/code/modules/mob/living/basic/blob_minions/blob_mob.dm b/code/modules/mob/living/basic/blob_minions/blob_mob.dm index 35e41f09058..776a977d2df 100644 --- a/code/modules/mob/living/basic/blob_minions/blob_mob.dm +++ b/code/modules/mob/living/basic/blob_minions/blob_mob.dm @@ -17,6 +17,7 @@ lighting_cutoff_green = 40 lighting_cutoff_blue = 30 initial_language_holder = /datum/language_holder/empty + can_buckle_to = FALSE /mob/living/basic/blob_minion/Initialize(mapload) . = ..() diff --git a/code/modules/mob/living/basic/blob_minions/blob_zombie.dm b/code/modules/mob/living/basic/blob_minions/blob_zombie.dm index c9bf3b7346a..3cbce54cf29 100644 --- a/code/modules/mob/living/basic/blob_minions/blob_zombie.dm +++ b/code/modules/mob/living/basic/blob_minions/blob_zombie.dm @@ -51,13 +51,13 @@ . = ..() death() -/mob/living/basic/blob_minion/zombie/update_overlays() - . = ..() +//Sets up our appearance +/mob/living/basic/blob_minion/zombie/proc/set_up_zombie_appearance() copy_overlays(corpse, TRUE) var/mutable_appearance/blob_head_overlay = mutable_appearance('icons/mob/nonhuman-player/blob.dmi', "blob_head") blob_head_overlay.color = LAZYACCESS(atom_colours, FIXED_COLOUR_PRIORITY) || COLOR_WHITE color = initial(color) // reversing what our component did lol, but we needed the value for the overlay - . += blob_head_overlay + overlays += blob_head_overlay /// Create an explosion of spores on death /mob/living/basic/blob_minion/zombie/proc/death_burst() @@ -73,6 +73,7 @@ new_corpse.forceMove(src) corpse = new_corpse update_appearance(UPDATE_ICON) + set_up_zombie_appearance() RegisterSignal(corpse, COMSIG_LIVING_REVIVE, PROC_REF(on_corpse_revived)) /// Dynamic changeling reentry diff --git a/code/modules/mob/living/basic/bots/_bots.dm b/code/modules/mob/living/basic/bots/_bots.dm index f8b273804ea..56fdc4fc938 100644 --- a/code/modules/mob/living/basic/bots/_bots.dm +++ b/code/modules/mob/living/basic/bots/_bots.dm @@ -35,7 +35,7 @@ GLOBAL_LIST_INIT(command_strings, list( bubble_icon = "machine" speech_span = SPAN_ROBOT faction = list(FACTION_NEUTRAL, FACTION_SILICON, FACTION_TURRET) - light_system = MOVABLE_LIGHT + light_system = OVERLAY_LIGHT light_range = 3 light_power = 0.9 speed = 3 @@ -546,8 +546,7 @@ GLOBAL_LIST_INIT(command_strings, list( /mob/living/basic/bot/proc/bot_reset(bypass_ai_reset = FALSE) SEND_SIGNAL(src, COMSIG_BOT_RESET) - if(length(initial_access)) - access_card.set_access(initial_access) + access_card.set_access(initial_access) diag_hud_set_botstat() diag_hud_set_botmode() clear_path_hud() diff --git a/code/modules/mob/living/basic/bots/bot_ai.dm b/code/modules/mob/living/basic/bots/bot_ai.dm index e0cba07edbd..19b7bcbdb5e 100644 --- a/code/modules/mob/living/basic/bots/bot_ai.dm +++ b/code/modules/mob/living/basic/bots/bot_ai.dm @@ -5,7 +5,8 @@ "salutes", "nods in appreciation towards", "fist bumps", - ) + ), + BB_UNREACHABLE_LIST_COOLDOWN = 45 SECONDS, ) ai_movement = /datum/ai_movement/jps/bot @@ -53,10 +54,12 @@ clear_blackboard_key(key) ///set the target if we can reach them -/datum/ai_controller/basic_controller/bot/proc/set_if_can_reach(key, target, distance = 10) +/datum/ai_controller/basic_controller/bot/proc/set_if_can_reach(key, target, distance = 10, bypass_add_to_blacklist = FALSE) if(can_reach_target(target, distance)) set_blackboard_key(key, target) return TRUE + if(!bypass_add_to_blacklist) + set_blackboard_key_assoc_lazylist(BB_TEMPORARY_IGNORE_LIST, REF(target), TRUE) return FALSE /datum/ai_controller/basic_controller/bot/proc/can_reach_target(target, distance = 10) @@ -69,34 +72,16 @@ return FALSE return TRUE -///check if the target is too far away, and delete them if so and add them to the unreachables list -/datum/ai_controller/basic_controller/bot/proc/reachable_key(key, distance = 10, bypass_add_to_blacklist = FALSE) - var/datum/target = blackboard[key] - if(QDELETED(target)) - return FALSE - var/datum/last_attempt = blackboard[BB_LAST_ATTEMPTED_PATHING] - if(last_attempt != target) - current_pathing_attempts = 0 - set_blackboard_key(BB_LAST_ATTEMPTED_PATHING, target) - else - current_pathing_attempts++ - if(current_pathing_attempts >= max_pathing_attempts || !can_reach_target(target, distance)) - clear_blackboard_key(key) - clear_blackboard_key(BB_LAST_ATTEMPTED_PATHING) - if(!bypass_add_to_blacklist) - set_blackboard_key_assoc_lazylist(BB_TEMPORARY_IGNORE_LIST, REF(target), TRUE) - return FALSE - return TRUE - /// subtree to manage our list of unreachables, we reset it every 15 seconds /datum/ai_planning_subtree/manage_unreachable_list /datum/ai_planning_subtree/manage_unreachable_list/SelectBehaviors(datum/ai_controller/controller, seconds_per_tick) + if(isnull(controller.blackboard[BB_UNREACHABLE_LIST_COOLDOWN]) || controller.blackboard[BB_CLEAR_LIST_READY] > world.time) + return controller.queue_behavior(/datum/ai_behavior/manage_unreachable_list, BB_TEMPORARY_IGNORE_LIST) /datum/ai_behavior/manage_unreachable_list behavior_flags = AI_BEHAVIOR_CAN_PLAN_DURING_EXECUTION - action_cooldown = 45 SECONDS /datum/ai_behavior/manage_unreachable_list/perform(seconds_per_tick, datum/ai_controller/controller, list_key) . = ..() @@ -104,21 +89,22 @@ controller.clear_blackboard_key(list_key) finish_action(controller, TRUE) +/datum/ai_behavior/manage_unreachable_list/finish_action(datum/ai_controller/controller, succeeded) + . = ..() + controller.set_blackboard_key(BB_CLEAR_LIST_READY, controller.blackboard[BB_UNREACHABLE_LIST_COOLDOWN] + world.time) /datum/ai_planning_subtree/find_patrol_beacon + ///travel towards beacon behavior + var/travel_behavior = /datum/ai_behavior/travel_towards/beacon /datum/ai_planning_subtree/find_patrol_beacon/SelectBehaviors(datum/ai_controller/controller, seconds_per_tick) var/mob/living/basic/bot/bot_pawn = controller.pawn - // NOVA EDIT ADDITION START - TODO - Remove when cleanbot AI runtimes are fixed - if(QDELETED(bot_pawn)) - return SUBTREE_RETURN_FINISH_PLANNING - // NOVA EDIT ADDITION END if(!(bot_pawn.bot_mode_flags & BOT_MODE_AUTOPATROL) || bot_pawn.mode == BOT_SUMMON) return if(controller.blackboard_key_exists(BB_BEACON_TARGET)) bot_pawn.update_bot_mode(new_mode = BOT_PATROL) - controller.queue_behavior(/datum/ai_behavior/travel_towards/beacon, BB_BEACON_TARGET) + controller.queue_behavior(travel_behavior, BB_BEACON_TARGET) return if(controller.blackboard_key_exists(BB_PREVIOUS_BEACON_TARGET)) @@ -136,9 +122,9 @@ var/atom/final_target var/atom/previous_target = controller.blackboard[BB_PREVIOUS_BEACON_TARGET] for(var/obj/machinery/navbeacon/beacon as anything in GLOB.navbeacons["[bot_pawn.z]"]) - if(beacon == previous_target) - continue var/dist = get_dist(bot_pawn, beacon) + if(beacon == previous_target || dist <= 1) + continue if(dist > closest_distance) continue closest_distance = dist @@ -174,6 +160,7 @@ /datum/ai_behavior/travel_towards/beacon clear_target = TRUE + new_movement_type = /datum/ai_movement/jps/bot/travel_to_beacon /datum/ai_behavior/travel_towards/beacon/finish_action(datum/ai_controller/controller, succeeded, target_key) var/atom/target = controller.blackboard[target_key] @@ -192,6 +179,7 @@ /datum/ai_behavior/travel_towards/bot_summon clear_target = TRUE + new_movement_type = /datum/ai_movement/jps/bot/travel_to_beacon /datum/ai_behavior/travel_towards/bot_summon/finish_action(datum/ai_controller/controller, succeeded, target_key) var/mob/living/basic/bot/bot_pawn = controller.pawn diff --git a/code/modules/mob/living/basic/bots/cleanbot/cleanbot_ai.dm b/code/modules/mob/living/basic/bots/cleanbot/cleanbot_ai.dm index db74bb1ea9e..537490c8431 100644 --- a/code/modules/mob/living/basic/bots/cleanbot/cleanbot_ai.dm +++ b/code/modules/mob/living/basic/bots/cleanbot/cleanbot_ai.dm @@ -6,6 +6,7 @@ BB_TARGETING_STRATEGY = /datum/targeting_strategy/basic/allow_items, BB_PET_TARGETING_STRATEGY = /datum/targeting_strategy/basic/not_friends, BB_TARGETING_STRATEGY = /datum/targeting_strategy/basic, + BB_UNREACHABLE_LIST_COOLDOWN = 3 MINUTES, BB_SALUTE_MESSAGES = list( "salutes", "nods in appreciation towards", @@ -42,10 +43,6 @@ /datum/ai_planning_subtree/pet_planning/cleanbot/SelectBehaviors(datum/ai_controller/basic_controller/bot/controller, seconds_per_tick) var/mob/living/basic/bot/bot_pawn = controller.pawn - // NOVA EDIT ADDITION START - TODO - Remove when cleanbot AI runtimes are fixed - if(QDELETED(bot_pawn)) - return SUBTREE_RETURN_FINISH_PLANNING - // NOVA EDIT ADDITION END //we are DONE listening to orders if(bot_pawn.bot_access_flags & BOT_COVER_EMAGGED) return @@ -55,11 +52,7 @@ /datum/ai_planning_subtree/cleaning_subtree /datum/ai_planning_subtree/cleaning_subtree/SelectBehaviors(datum/ai_controller/basic_controller/bot/cleanbot/controller, seconds_per_tick) - // NOVA EDIT ADDITION START - TODO - Remove when cleanbot AI runtimes are fixed - if(QDELETED(controller.pawn)) - return SUBTREE_RETURN_FINISH_PLANNING - // NOVA EDIT ADDITION END - if(controller.reachable_key(BB_CLEAN_TARGET, BOT_CLEAN_PATH_LIMIT)) + if(controller.blackboard_key_exists(BB_CLEAN_TARGET)) controller.queue_behavior(/datum/ai_behavior/execute_clean, BB_CLEAN_TARGET) return SUBTREE_RETURN_FINISH_PLANNING @@ -69,10 +62,6 @@ var/list/flag_list = controller.clean_flags var/mob/living/basic/bot/cleanbot/bot_pawn = controller.pawn for(var/list_key in flag_list) - // NOVA EDIT ADDITION START - TODO - Remove when cleanbot AI runtimes are fixed - if(QDELETED(bot_pawn)) - return SUBTREE_RETURN_FINISH_PLANNING - // NOVA EDIT ADDITION END if(!(bot_pawn.janitor_mode_flags & flag_list[list_key])) continue final_hunt_list += controller.blackboard[list_key] @@ -80,27 +69,29 @@ controller.queue_behavior(/datum/ai_behavior/find_and_set/in_list/clean_targets, BB_CLEAN_TARGET, final_hunt_list) /datum/ai_behavior/find_and_set/in_list/clean_targets - action_cooldown = 1 SECONDS + action_cooldown = 3 SECONDS /datum/ai_behavior/find_and_set/in_list/clean_targets/search_tactic(datum/ai_controller/controller, locate_paths, search_range) var/list/found = typecache_filter_list(oview(search_range, controller.pawn), locate_paths) var/list/ignore_list = controller.blackboard[BB_TEMPORARY_IGNORE_LIST] for(var/atom/found_item in found) + if(QDELETED(controller.pawn)) + break if(LAZYACCESS(ignore_list, REF(found_item))) continue + var/list/path = get_path_to(controller.pawn, found_item, max_distance = BOT_CLEAN_PATH_LIMIT, access = controller.get_access()) + if(!length(path)) + controller.set_blackboard_key_assoc_lazylist(BB_TEMPORARY_IGNORE_LIST, REF(found_item), TRUE) + continue return found_item /datum/ai_planning_subtree/acid_spray /datum/ai_planning_subtree/acid_spray/SelectBehaviors(datum/ai_controller/basic_controller/bot/controller, seconds_per_tick) var/mob/living/basic/bot/cleanbot/bot_pawn = controller.pawn - // NOVA EDIT ADDITION START - TODO - Remove when cleanbot AI runtimes are fixed - if(QDELETED(bot_pawn)) - return SUBTREE_RETURN_FINISH_PLANNING - // NOVA EDIT ADDITION END if(!(bot_pawn.bot_access_flags & BOT_COVER_EMAGGED)) return - if(controller.reachable_key(BB_ACID_SPRAY_TARGET, BOT_CLEAN_PATH_LIMIT)) + if(controller.blackboard_key_exists(BB_ACID_SPRAY_TARGET)) controller.queue_behavior(/datum/ai_behavior/execute_clean, BB_ACID_SPRAY_TARGET) return SUBTREE_RETURN_FINISH_PLANNING @@ -146,6 +137,10 @@ . = ..() controller.set_blackboard_key(BB_POST_CLEAN_COOLDOWN, POST_CLEAN_COOLDOWN + world.time) var/atom/target = controller.blackboard[target_key] + if(!succeeded && !isnull(target)) + controller.clear_blackboard_key(target_key) + controller.set_blackboard_key_assoc_lazylist(BB_TEMPORARY_IGNORE_LIST, REF(target), TRUE) + return if(QDELETED(target) || is_type_in_typecache(target, controller.blackboard[BB_HUNTABLE_TRASH])) return if(!iscarbon(target)) @@ -167,10 +162,6 @@ /datum/ai_planning_subtree/use_mob_ability/foam_area/SelectBehaviors(datum/ai_controller/basic_controller/bot/controller, seconds_per_tick) var/mob/living/basic/bot/bot_pawn = controller.pawn - // NOVA EDIT ADDITION START - TODO - Remove when cleanbot AI runtimes are fixed - if(QDELETED(bot_pawn)) - return SUBTREE_RETURN_FINISH_PLANNING - // NOVA EDIT ADDITION END if(!(bot_pawn.bot_access_flags & BOT_COVER_EMAGGED)) return return ..() @@ -179,10 +170,6 @@ /datum/ai_planning_subtree/befriend_janitors/SelectBehaviors(datum/ai_controller/basic_controller/bot/controller, seconds_per_tick) var/mob/living/basic/bot/bot_pawn = controller.pawn - // NOVA EDIT ADDITION START - TODO - Remove when cleanbot AI runtimes are fixed - if(QDELETED(bot_pawn)) - return SUBTREE_RETURN_FINISH_PLANNING - // NOVA EDIT ADDITION END //we are now evil. dont befriend the janitors if(bot_pawn.bot_access_flags & BOT_COVER_EMAGGED) return @@ -232,7 +219,7 @@ return ..() /datum/pet_command/point_targeting/clean/execute_action(datum/ai_controller/basic_controller/bot/controller) - if(controller.reachable_key(BB_CURRENT_PET_TARGET)) + if(controller.blackboard_key_exists(BB_CURRENT_PET_TARGET)) controller.queue_behavior(/datum/ai_behavior/execute_clean, BB_CURRENT_PET_TARGET) return SUBTREE_RETURN_FINISH_PLANNING diff --git a/code/modules/mob/living/basic/bots/medbot/medbot.dm b/code/modules/mob/living/basic/bots/medbot/medbot.dm index 791de6b6296..5b29a6e5ad2 100644 --- a/code/modules/mob/living/basic/bots/medbot/medbot.dm +++ b/code/modules/mob/living/basic/bots/medbot/medbot.dm @@ -399,6 +399,7 @@ health = 40 maxHealth = 40 maints_access_required = list(ACCESS_SYNDICATE) + bot_mode_flags = parent_type::bot_mode_flags & ~BOT_MODE_REMOTE_ENABLED radio_key = /obj/item/encryptionkey/syndicate radio_channel = RADIO_CHANNEL_SYNDICATE damage_type_healer = HEAL_ALL_DAMAGE diff --git a/code/modules/mob/living/basic/bots/medbot/medbot_ai.dm b/code/modules/mob/living/basic/bots/medbot/medbot_ai.dm index 60bfa1e04d2..21f9ab29d1b 100644 --- a/code/modules/mob/living/basic/bots/medbot/medbot_ai.dm +++ b/code/modules/mob/living/basic/bots/medbot/medbot_ai.dm @@ -7,7 +7,7 @@ /datum/ai_planning_subtree/find_and_hunt_target/patients_in_crit, /datum/ai_planning_subtree/treat_wounded_target, /datum/ai_planning_subtree/salute_authority, - /datum/ai_planning_subtree/find_patrol_beacon, + /datum/ai_planning_subtree/find_patrol_beacon/medbot, ) ai_movement = /datum/ai_movement/jps/bot/medbot reset_keys = list( @@ -19,6 +19,8 @@ ai_traits = PAUSE_DURING_DO_AFTER /datum/ai_movement/jps/bot/medbot + maximum_length = BOT_PATIENT_PATH_LIMIT + max_pathing_attempts = 20 // only AI isnt allowed to move when this flag is set, sentient players can /datum/ai_movement/jps/bot/medbot/allowed_to_move(datum/move_loop/source) @@ -28,6 +30,9 @@ return FALSE return ..() +/datum/ai_movement/jps/bot/medbot/travel_to_beacon + maximum_length = AI_BOT_PATH_LENGTH + /datum/ai_planning_subtree/treat_wounded_target @@ -37,9 +42,8 @@ controller.clear_blackboard_key(BB_PATIENT_TARGET) return var/is_stationary = bot_pawn.medical_mode_flags & MEDBOT_STATIONARY_MODE - var/reach_distance = (is_stationary) ? 1 : BOT_PATIENT_PATH_LIMIT - if(controller.reachable_key(BB_PATIENT_TARGET, distance = reach_distance, bypass_add_to_blacklist = is_stationary)) - controller.queue_behavior(/datum/ai_behavior/tend_to_patient, BB_PATIENT_TARGET, bot_pawn.heal_threshold, bot_pawn.damage_type_healer, bot_pawn.bot_access_flags) + if(controller.blackboard_key_exists(BB_PATIENT_TARGET)) + controller.queue_behavior(/datum/ai_behavior/tend_to_patient, BB_PATIENT_TARGET, bot_pawn.heal_threshold, bot_pawn.damage_type_healer, bot_pawn.bot_access_flags, is_stationary) return SUBTREE_RETURN_FINISH_PLANNING controller.queue_behavior(/datum/ai_behavior/find_suitable_patient, BB_PATIENT_TARGET, bot_pawn.heal_threshold, bot_pawn.damage_type_healer, bot_pawn.medical_mode_flags, bot_pawn.bot_access_flags) @@ -56,15 +60,15 @@ if(LAZYACCESS(ignore_keys, REF(treatable_target)) || treatable_target.stat == DEAD) continue if((access_flags & BOT_COVER_EMAGGED) && treatable_target.stat == CONSCIOUS) - controller.set_blackboard_key(BB_PATIENT_TARGET, treatable_target) + controller.set_if_can_reach(BB_PATIENT_TARGET, treatable_target, distance =BOT_PATIENT_PATH_LIMIT, bypass_add_to_blacklist = (search_range == 1)) break if((heal_type == HEAL_ALL_DAMAGE)) if(treatable_target.get_total_damage() > threshold) - controller.set_blackboard_key(BB_PATIENT_TARGET, treatable_target) + controller.set_if_can_reach(BB_PATIENT_TARGET, treatable_target, distance = BOT_PATIENT_PATH_LIMIT, bypass_add_to_blacklist = (search_range == 1)) break continue if(treatable_target.get_current_damage_of_type(damagetype = heal_type) > threshold) - controller.set_blackboard_key(BB_PATIENT_TARGET, treatable_target) + controller.set_if_can_reach(BB_PATIENT_TARGET, treatable_target, distance = BOT_PATIENT_PATH_LIMIT, bypass_add_to_blacklist = (search_range == 1)) break finish_action(controller, controller.blackboard_key_exists(BB_PATIENT_TARGET)) @@ -86,14 +90,14 @@ return FALSE set_movement_target(controller, target) -/datum/ai_behavior/tend_to_patient/perform(seconds_per_tick, datum/ai_controller/basic_controller/bot/controller, target_key, threshold, damage_type_healer, access_flags) +/datum/ai_behavior/tend_to_patient/perform(seconds_per_tick, datum/ai_controller/basic_controller/bot/controller, target_key, threshold, damage_type_healer, access_flags, is_stationary) . = ..() var/mob/living/carbon/human/patient = controller.blackboard[target_key] if(QDELETED(patient) || patient.stat == DEAD) - finish_action(controller, FALSE, target_key) + finish_action(controller, FALSE, target_key, is_stationary) return if(check_if_healed(patient, threshold, damage_type_healer, access_flags)) - finish_action(controller, TRUE, target_key, healed_target = TRUE) + finish_action(controller, TRUE, target_key, is_stationary, healed_target = TRUE) return var/mob/living/basic/bot/bot_pawn = controller.pawn @@ -101,16 +105,23 @@ var/datum/action/cooldown/bot_announcement/announcement = controller.blackboard[BB_ANNOUNCE_ABILITY] announcement?.announce(pick(controller.blackboard[BB_NEAR_DEATH_SPEECH])) bot_pawn.melee_attack(patient) - finish_action(controller, TRUE, target_key) + finish_action(controller, TRUE, target_key, is_stationary) // only clear the target if they get healed -/datum/ai_behavior/tend_to_patient/finish_action(datum/ai_controller/controller, succeeded, target_key, healed_target = FALSE) +/datum/ai_behavior/tend_to_patient/finish_action(datum/ai_controller/controller, succeeded, target_key, is_stationary, healed_target = FALSE) . = ..() + var/atom/target = controller.blackboard[target_key] if(!succeeded) + + if(!isnull(target) && !is_stationary) + controller.set_blackboard_key_assoc_lazylist(BB_TEMPORARY_IGNORE_LIST, REF(target), TRUE) + + controller.clear_blackboard_key(target_key) return - var/atom/target = controller.blackboard[target_key] + if(QDELETED(target) || !healed_target) return + var/datum/action/cooldown/bot_announcement/announcement = controller.blackboard[BB_ANNOUNCE_ABILITY] announcement?.announce(pick(controller.blackboard[BB_AFTERHEAL_SPEECH])) controller.clear_blackboard_key(target_key) @@ -208,4 +219,11 @@ . = ..() controller.clear_blackboard_key(target_key) +/datum/ai_planning_subtree/find_patrol_beacon/medbot + ///travel towards beacon behavior + travel_behavior = /datum/ai_behavior/travel_towards/beacon/medbot + +/datum/ai_behavior/travel_towards/beacon/medbot + new_movement_type = /datum/ai_movement/jps/bot/medbot/travel_to_beacon + #undef BOT_PATIENT_PATH_LIMIT diff --git a/code/modules/mob/living/basic/clown/clown.dm b/code/modules/mob/living/basic/clown/clown.dm index 1a713ec04f8..88c2b9496a9 100644 --- a/code/modules/mob/living/basic/clown/clown.dm +++ b/code/modules/mob/living/basic/clown/clown.dm @@ -49,7 +49,7 @@ ai_controller.set_blackboard_key(BB_BASIC_MOB_SPEAK_LINES, emotes) //im not putting dynamic humans or whatever its called here because this is the base path of nonhuman clownstrosities if(waddles) - AddElement(/datum/element/waddling) + AddElementTrait(TRAIT_WADDLING, INNATE_TRAIT, /datum/element/waddling) if(length(loot)) loot = string_list(loot) AddElement(/datum/element/death_drops, loot) diff --git a/code/modules/mob/living/basic/cult/constructs/_construct.dm b/code/modules/mob/living/basic/cult/constructs/_construct.dm index 8fd4123e288..2583b3a88a6 100644 --- a/code/modules/mob/living/basic/cult/constructs/_construct.dm +++ b/code/modules/mob/living/basic/cult/constructs/_construct.dm @@ -12,6 +12,7 @@ pressure_resistance = 100 speed = 0 unique_name = TRUE + can_buckle_to = FALSE initial_language_holder = /datum/language_holder/construct death_message = "collapses in a shattered heap." diff --git a/code/modules/mob/living/basic/drone/_drone.dm b/code/modules/mob/living/basic/drone/_drone.dm index 926271eea82..0887f430ee9 100644 --- a/code/modules/mob/living/basic/drone/_drone.dm +++ b/code/modules/mob/living/basic/drone/_drone.dm @@ -161,6 +161,12 @@ /obj/item/clothing/mask, /obj/item/storage/box/lights, /obj/item/lightreplacer, + /obj/item/construction/rcd, + /obj/item/rcd_ammo, + /obj/item/rcd_upgrade, + /obj/item/storage/part_replacer, + /obj/item/soap, + /obj/item/holosign_creator, ) /// machines whitelisted from being shy with var/list/shy_machine_whitelist = list( diff --git a/code/modules/mob/living/basic/drone/extra_drone_types.dm b/code/modules/mob/living/basic/drone/extra_drone_types.dm index 927d28f0ca2..08c9278b753 100644 --- a/code/modules/mob/living/basic/drone/extra_drone_types.dm +++ b/code/modules/mob/living/basic/drone/extra_drone_types.dm @@ -33,7 +33,7 @@ /mob/living/basic/drone/syndrone/Initialize(mapload) . = ..() var/datum/component/uplink/hidden_uplink = internal_storage.GetComponent(/datum/component/uplink) - hidden_uplink.set_telecrystals(telecrystal_count) + hidden_uplink.uplink_handler.set_telecrystals(telecrystal_count) /obj/effect/mob_spawn/ghost_role/drone/syndrone name = "syndrone shell" diff --git a/code/modules/mob/living/basic/farm_animals/gorilla/gorilla.dm b/code/modules/mob/living/basic/farm_animals/gorilla/gorilla.dm index 1e17938c5fd..64cff6780df 100644 --- a/code/modules/mob/living/basic/farm_animals/gorilla/gorilla.dm +++ b/code/modules/mob/living/basic/farm_animals/gorilla/gorilla.dm @@ -158,31 +158,4 @@ ADD_TRAIT(src, TRAIT_PACIFISM, INNATE_TRAIT) AddComponent(/datum/component/crate_carrier) -/mob/living/basic/gorilla/cargorilla/death(gibbed) - var/datum/component/potential_component = GetComponent(/datum/component/ghost_direct_control) - if(!QDELETED(potential_component)) - qdel(potential_component) - return ..() - -/** - * Poll ghosts for control of the gorilla. Not added in init because we only want to poll when the round starts. - * Preferably in future we can replace this with a popup on the lobby to queue to become a gorilla. - */ -/mob/living/basic/gorilla/cargorilla/proc/poll_for_gorilla() - AddComponent(\ - /datum/component/ghost_direct_control,\ - poll_candidates = TRUE,\ - poll_length = 30 SECONDS,\ - role_name = "Cargorilla",\ - assumed_control_message = "You are Cargorilla, a pacifist friend of the station and carrier of freight.",\ - poll_ignore_key = POLL_IGNORE_CARGORILLA,\ - after_assumed_control = CALLBACK(src, PROC_REF(became_player_controlled)),\ - ) - -/// Called once a ghost assumes control -/mob/living/basic/gorilla/cargorilla/proc/became_player_controlled() - mind.set_assigned_role(SSjob.GetJobType(/datum/job/cargo_technician)) - mind.special_role = "Cargorilla" - to_chat(src, span_notice("You can pick up crates by clicking on them, and drop them by clicking on the ground.")) - #undef GORILLA_HANDS_LAYER diff --git a/code/modules/mob/living/basic/farm_animals/pony.dm b/code/modules/mob/living/basic/farm_animals/pony.dm index df8f3a1fd4e..7795ec630e6 100644 --- a/code/modules/mob/living/basic/farm_animals/pony.dm +++ b/code/modules/mob/living/basic/farm_animals/pony.dm @@ -40,7 +40,7 @@ AddElement(/datum/element/pet_bonus, "whickers.") AddElement(/datum/element/ai_retaliate) AddElement(/datum/element/ai_flee_while_injured) - AddElement(/datum/element/waddling) + AddElementTrait(TRAIT_WADDLING, INNATE_TRAIT, /datum/element/waddling) AddComponent(/datum/component/tameable, food_types = list(/obj/item/food/grown/apple), tame_chance = 25, bonus_tame_chance = 15, after_tame = CALLBACK(src, PROC_REF(tamed)), unique = unique_tamer) /mob/living/basic/pony/proc/tamed(mob/living/tamer) diff --git a/code/modules/mob/living/basic/guardian/guardian.dm b/code/modules/mob/living/basic/guardian/guardian.dm index 9d79373ccd4..b338a5a4435 100644 --- a/code/modules/mob/living/basic/guardian/guardian.dm +++ b/code/modules/mob/living/basic/guardian/guardian.dm @@ -39,7 +39,7 @@ melee_damage_lower = 15 melee_damage_upper = 15 melee_attack_cooldown = CLICK_CD_MELEE - light_system = MOVABLE_LIGHT + light_system = OVERLAY_LIGHT light_range = 3 light_on = FALSE diff --git a/code/modules/mob/living/basic/guardian/guardian_creator.dm b/code/modules/mob/living/basic/guardian/guardian_creator.dm index d01383427df..3f1f0927522 100644 --- a/code/modules/mob/living/basic/guardian/guardian_creator.dm +++ b/code/modules/mob/living/basic/guardian/guardian_creator.dm @@ -66,7 +66,7 @@ GLOBAL_LIST_INIT(guardian_radial_images, setup_guardian_radial()) if(length(guardians) && !allow_multiple) balloon_alert(user, "already have one!") return - if(user.mind && user.mind.has_antag_datum(/datum/antagonist/changeling) && !allow_changeling) + if(IS_CHANGELING(user) && !allow_changeling) to_chat(user, ling_failure) return if(used) diff --git a/code/modules/mob/living/basic/lavaland/bileworm/bileworm_ai.dm b/code/modules/mob/living/basic/lavaland/bileworm/bileworm_ai.dm index ea979febff3..aa3e06af16a 100644 --- a/code/modules/mob/living/basic/lavaland/bileworm/bileworm_ai.dm +++ b/code/modules/mob/living/basic/lavaland/bileworm/bileworm_ai.dm @@ -22,11 +22,16 @@ //because one ability is always INFINITY cooldown, this actually works to check which ability should be used //sometimes it will try to spew bile on infinity cooldown, but that's okay because as soon as resurface is ready it will attempt that - if(!QDELETED(resurface) && resurface.next_use_time <= world.time) + + if(resurface?.IsAvailable()) controller.queue_behavior(/datum/ai_behavior/targeted_mob_ability/and_plan_execute, BB_BILEWORM_RESURFACE, BB_BASIC_MOB_CURRENT_TARGET) - else + return SUBTREE_RETURN_FINISH_PLANNING + + var/datum/action/cooldown/mob_cooldown/bile = controller.blackboard[BB_BILEWORM_SPEW_BILE] + + if(bile?.IsAvailable()) controller.queue_behavior(/datum/ai_behavior/targeted_mob_ability/and_plan_execute, BB_BILEWORM_SPEW_BILE, BB_BASIC_MOB_CURRENT_TARGET) - return SUBTREE_RETURN_FINISH_PLANNING //focus on the fight + return SUBTREE_RETURN_FINISH_PLANNING //focus on the fight /datum/ai_planning_subtree/bileworm_execute @@ -35,9 +40,15 @@ var/atom/movable/target = controller.blackboard[BB_BASIC_MOB_EXECUTION_TARGET] if(QDELETED(target) || !isliving(target)) return + + var/datum/action/cooldown/mob_cooldown/devour = controller.blackboard[BB_BILEWORM_DEVOUR] + + if(!(devour?.IsAvailable())) + return + var/mob/living/living_target = target if(living_target.stat < UNCONSCIOUS) return - controller.queue_behavior(/datum/ai_behavior/targeted_mob_ability, BB_BILEWORM_DEVOUR, BB_BASIC_MOB_EXECUTION_TARGET) + controller.queue_behavior(/datum/ai_behavior/targeted_mob_ability/and_clear_target, BB_BILEWORM_DEVOUR, BB_BASIC_MOB_EXECUTION_TARGET) return SUBTREE_RETURN_FINISH_PLANNING //focus on devouring this fool 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 9a45ed99e1c..11fd7b6aa26 100644 --- a/code/modules/mob/living/basic/lavaland/brimdemon/brimdemon_loot.dm +++ b/code/modules/mob/living/basic/lavaland/brimdemon/brimdemon_loot.dm @@ -53,4 +53,4 @@ if(!COOLDOWN_FINISHED(src, ore_sensing_cooldown)) return COOLDOWN_START(src, ore_sensing_cooldown, cooldown) - mineral_scan_pulse(get_turf(src), range) + mineral_scan_pulse(get_turf(src), range, src) diff --git a/code/modules/mob/living/basic/lavaland/goldgrub/goldgrub.dm b/code/modules/mob/living/basic/lavaland/goldgrub/goldgrub.dm index afc87fb7ce5..f35f78ba80f 100644 --- a/code/modules/mob/living/basic/lavaland/goldgrub/goldgrub.dm +++ b/code/modules/mob/living/basic/lavaland/goldgrub/goldgrub.dm @@ -65,7 +65,8 @@ make_tameable() if(can_lay_eggs) make_egg_layer() - + ADD_TRAIT(src, TRAIT_BOULDER_BREAKER, INNATE_TRAIT) + ADD_TRAIT(src, TRAIT_INSTANTLY_PROCESSES_BOULDERS, INNATE_TRAIT) RegisterSignal(src, COMSIG_ATOM_PRE_BULLET_ACT, PROC_REF(block_bullets)) /mob/living/basic/mining/goldgrub/proc/block_bullets(datum/source, obj/projectile/hitting_projectile) @@ -83,7 +84,7 @@ /mob/living/basic/mining/goldgrub/proc/barf_contents(gibbed) playsound(src, 'sound/effects/splat.ogg', 50, TRUE) - for(var/obj/item/ore as anything in src) + for(var/obj/item/stack/ore/ore in src) ore.forceMove(loc) if(!gibbed) visible_message(span_danger("[src] spits out its consumed ores!")) diff --git a/code/modules/mob/living/basic/lavaland/goldgrub/goldgrub_ai.dm b/code/modules/mob/living/basic/lavaland/goldgrub/goldgrub_ai.dm index 53054052e58..a31bf1f3e1d 100644 --- a/code/modules/mob/living/basic/lavaland/goldgrub/goldgrub_ai.dm +++ b/code/modules/mob/living/basic/lavaland/goldgrub/goldgrub_ai.dm @@ -14,6 +14,8 @@ /datum/ai_planning_subtree/dig_away_from_danger, /datum/ai_planning_subtree/flee_target, /datum/ai_planning_subtree/find_and_hunt_target/hunt_ores, + /datum/ai_planning_subtree/find_and_hunt_target/break_boulders, + /datum/ai_planning_subtree/find_and_hunt_target/harvest_vents, /datum/ai_planning_subtree/find_and_hunt_target/baby_egg, /datum/ai_planning_subtree/mine_walls, ) @@ -43,7 +45,7 @@ hunting_behavior = /datum/ai_behavior/hunt_target/unarmed_attack_target/hunt_ores finding_behavior = /datum/ai_behavior/find_hunt_target/hunt_ores hunt_targets = list(/obj/item/stack/ore) - hunt_chance = 75 + hunt_chance = 90 hunt_range = 9 /datum/ai_behavior/find_hunt_target/hunt_ores @@ -66,6 +68,50 @@ /datum/ai_behavior/hunt_target/unarmed_attack_target/hunt_ores always_reset_target = TRUE +///break boulders so that we can find more food! +/datum/ai_planning_subtree/find_and_hunt_target/harvest_vents + target_key = BB_VENT_TARGET + hunting_behavior = /datum/ai_behavior/hunt_target/unarmed_attack_target //We call the ore vent's produce_boulder() proc here to produce a single boulder. + finding_behavior = /datum/ai_behavior/find_hunt_target/harvest_vents + hunt_targets = list(/obj/structure/ore_vent) + hunt_chance = 25 + hunt_range = 15 + +/datum/ai_behavior/find_hunt_target/harvest_vents + +/datum/ai_behavior/find_hunt_target/harvest_vents/valid_dinner(mob/living/basic/source, obj/structure/target, radius) + if(target in source) + return FALSE + + var/turf/vent_turf = target.drop_location() + var/counter = 0 + for(var/obj/item/boulder in vent_turf.contents) + counter++ + if(counter > MAX_BOULDERS_PER_VENT) //Too many items currently on the vent + return FALSE + + return can_see(source, target, radius) + +///break boulders so that we can find more food! +/datum/ai_planning_subtree/find_and_hunt_target/break_boulders + target_key = BB_BOULDER_TARGET + hunting_behavior = /datum/ai_behavior/hunt_target/unarmed_attack_target //We process boulders once every tap, so we dont need to do anything special here + finding_behavior = /datum/ai_behavior/find_hunt_target/break_boulders + hunt_targets = list(/obj/item/boulder) + hunt_chance = 100 //If we can, we should always break boulders. + hunt_range = 9 + +/datum/ai_behavior/find_hunt_target/break_boulders + +/datum/ai_behavior/find_hunt_target/break_boulders/valid_dinner(mob/living/basic/source, obj/item/boulder/target, radius) + if(target in source) + return FALSE + + var/obj/item/pet_target = source.ai_controller.blackboard[BB_CURRENT_PET_TARGET] + if(target == pet_target) //we are currently fetching this ore for master, dont eat it! + return FALSE + return can_see(source, target, radius) + ///find our child's egg and pull it! /datum/ai_planning_subtree/find_and_hunt_target/baby_egg target_key = BB_LOW_PRIORITY_HUNTING_TARGET diff --git a/code/modules/mob/living/basic/lavaland/legion/legion_brood.dm b/code/modules/mob/living/basic/lavaland/legion/legion_brood.dm index 91edf40615c..7cc5ea06ad8 100644 --- a/code/modules/mob/living/basic/lavaland/legion/legion_brood.dm +++ b/code/modules/mob/living/basic/lavaland/legion/legion_brood.dm @@ -30,7 +30,7 @@ density = FALSE ai_controller = /datum/ai_controller/basic_controller/legion_brood /// Reference to a guy who made us - var/mob/living/created_by + var/datum/weakref/created_by /mob/living/basic/legion_brood/Initialize(mapload) . = ..() @@ -49,7 +49,12 @@ if (ishuman(target) && target.stat > SOFT_CRIT) infest(target) return - if (isliving(target) && faction_check_atom(target) && !istype(target, created_by?.type)) + + var/mob/living/mob_creator = created_by?.resolve() + if(isnull(mob_creator)) + created_by = null + + if (isliving(target) && faction_check_atom(target) && !istype(target, mob_creator?.type)) visible_message(span_warning("[src] melds with [target]'s flesh!")) target.apply_status_effect(/datum/status_effect/regenerative_core) new /obj/effect/temp_visual/heal(get_turf(target), COLOR_HEALING_CYAN) @@ -78,7 +83,7 @@ faction = creator.faction.Copy() else faction |= REF(creator) - created_by = creator + created_by = WEAKREF(creator) ai_controller?.set_blackboard_key(BB_LEGION_BROOD_CREATOR, creator) RegisterSignal(creator, COMSIG_QDELETING, PROC_REF(creator_destroyed)) diff --git a/code/modules/mob/living/basic/lavaland/node_drone/node_drone.dm b/code/modules/mob/living/basic/lavaland/node_drone/node_drone.dm new file mode 100644 index 00000000000..d85ad69682c --- /dev/null +++ b/code/modules/mob/living/basic/lavaland/node_drone/node_drone.dm @@ -0,0 +1,154 @@ +#define FLY_IN_STATE 1 +#define FLY_OUT_STATE 2 +#define NEUTRAL_STATE 3 + +/** + * Mining drones that are spawned when starting a ore vent's wave defense minigame. + * They will latch onto the vent to defend it from lavaland mobs, and will flee if attacked by lavaland mobs. + * If the drone survives, they will fly away to safety as the vent spawns ores. + * If the drone dies, the wave defense will fail. + */ + +/mob/living/basic/node_drone + name = "NODE drone" + desc = "Standard in-atmosphere drone, used by Nanotrasen to operate and excavate valuable ore vents." + icon = 'icons/obj/mining.dmi' + icon_state = "mining_node_active" + icon_living = "mining_node_active" + icon_dead = "mining_node_active" + + maxHealth = 500 + health = 500 + density = TRUE + pass_flags = PASSTABLE|PASSGRILLE|PASSMOB + mob_size = MOB_SIZE_LARGE + mob_biotypes = MOB_ROBOTIC + faction = list(FACTION_STATION, FACTION_NEUTRAL) + light_range = 4 + basic_mob_flags = DEL_ON_DEATH + + speak_emote = list("chirps") + response_help_continuous = "pets" + response_help_simple = "pet" + response_disarm_continuous = "gently pushes aside" + response_disarm_simple = "gently push aside" + response_harm_continuous = "clangs" + response_harm_simple = "clang against" + + ai_controller = /datum/ai_controller/basic_controller/node_drone + + /// Is the drone currently attached to a vent? + var/active_node = FALSE + /// What status do we currently track for icon purposes? + var/flying_state = NEUTRAL_STATE + /// Weakref to the vent the drone is currently attached to. + var/obj/structure/ore_vent/attached_vent = null + /// Set when the drone is begining to leave lavaland after the vent is secured. + var/escaping = FALSE + +/mob/living/basic/node_drone/death(gibbed) + . = ..() + explosion(origin = src, light_impact_range = 1, smoke = 1) + +/mob/living/basic/node_drone/Destroy() + attached_vent?.node = null //clean our reference to the vent both ways. + attached_vent = null + return ..() + + +/mob/living/basic/node_drone/examine(mob/user) + . = ..() + var/sameside = user.faction_check_atom(src, exact_match = FALSE) + if(sameside) + . += span_notice("This drone is currently attached to a mineral vent. You should protect it from harm to secure the mineral vent.") + else + . += span_warning("This vile Nanotrasen trash is trying to destroy the environment. Attack it to free the mineral vent from its grasp.") + +/mob/living/basic/node_drone/update_icon_state() + . = ..() + + icon_state = "mining_node_active" + + if(flying_state == FLY_IN_STATE || flying_state == FLY_OUT_STATE) + icon_state = "mining_node_flying" + +/mob/living/basic/node_drone/proc/arrive(obj/structure/ore_vent/parent_vent) + attached_vent = parent_vent + flying_state = FLY_IN_STATE + update_appearance(UPDATE_ICON_STATE) + pixel_z = 400 + animate(src, pixel_z = 0, time = 2 SECONDS, easing = QUAD_EASING|EASE_OUT, flags = ANIMATION_PARALLEL) + + +/** + * Called when wave defense is completed. Visually flicks the escape sprite and then deletes the mob. + */ +/mob/living/basic/node_drone/proc/escape() + var/funny_ending = FALSE + flying_state = FLY_OUT_STATE + update_appearance(UPDATE_ICON_STATE) + if(prob(1)) + say("I have to go now, my planet needs me.") + funny_ending = TRUE + visible_message(span_notice("The drone flies away to safety as the vent is secured.")) + animate(src, pixel_z = 400, time = 2 SECONDS, easing = QUAD_EASING|EASE_IN, flags = ANIMATION_PARALLEL) + sleep(2 SECONDS) + if(funny_ending) + playsound(src, 'sound/effects/explosion3.ogg', 50, FALSE) //node drone died on the way back to his home planet. + visible_message(span_notice("...or maybe not.")) + qdel(src) + + +/mob/living/basic/node_drone/proc/pre_escape() + if(attached_vent) + attached_vent.unbuckle_mob(src) + attached_vent = null + if(!escaping) + escaping = TRUE + flick("mining_node_escape", src) + addtimer(CALLBACK(src, PROC_REF(escape)), 1.9 SECONDS) + return + +/// The node drone AI controller +// Generally, this is a very simple AI that will try to find a vent and latch onto it, unless attacked by a lavaland mob, who it will try to flee from. +/datum/ai_controller/basic_controller/node_drone + blackboard = list( + BB_BASIC_MOB_FLEEING = FALSE, // Will flee when the vent lies undefended. + BB_CURRENT_HUNTING_TARGET = null, // Hunts for vents. + BB_TARGETING_STRATEGY = /datum/targeting_strategy/basic, // Use this to find vents to run away from + ) + + ai_traits = STOP_MOVING_WHEN_PULLED + ai_movement = /datum/ai_movement/basic_avoidance + idle_behavior = null + planning_subtrees = list( + // Priority is see if lavaland mobs are attacking us to flee from them. + /datum/ai_planning_subtree/find_nearest_thing_which_attacked_me_to_flee, + // Fly you fool + /datum/ai_planning_subtree/flee_target/node_drone, + // Otherwise, look for and execute hunts for vents to latch onto. + /datum/ai_planning_subtree/find_and_hunt_target/look_for_vent, + ) + +// Node subtree to hunt down ore vents. +/datum/ai_planning_subtree/find_and_hunt_target/look_for_vent + hunting_behavior = /datum/ai_behavior/hunt_target/latch_onto/node_drone + hunt_targets = list(/obj/structure/ore_vent) + hunt_range = 7 // Hunt vents to the end of the earth. + +// node drone behavior for buckling down on a vent. +/datum/ai_behavior/hunt_target/latch_onto/node_drone + hunt_cooldown = 5 SECONDS + +// Evasion behavior. +/datum/ai_planning_subtree/flee_target/node_drone + flee_behaviour = /datum/ai_behavior/run_away_from_target/drone + +/datum/ai_behavior/run_away_from_target/drone + action_cooldown = 1 SECONDS + run_distance = 3 + + +#undef FLY_IN_STATE +#undef FLY_OUT_STATE +#undef NEUTRAL_STATE diff --git a/code/modules/mob/living/basic/minebots/minebot.dm b/code/modules/mob/living/basic/minebots/minebot.dm index f9a22f955f1..5422ab4ee2e 100644 --- a/code/modules/mob/living/basic/minebots/minebot.dm +++ b/code/modules/mob/living/basic/minebots/minebot.dm @@ -23,7 +23,7 @@ speak_emote = list("states") mob_biotypes = MOB_ROBOTIC death_message = "blows apart!" - light_system = MOVABLE_LIGHT + light_system = OVERLAY_LIGHT light_range = 6 light_on = FALSE combat_mode = FALSE diff --git a/code/modules/mob/living/basic/pets/cat/cat.dm b/code/modules/mob/living/basic/pets/cat/cat.dm index 1c86b2ffcb4..dd8a588e915 100644 --- a/code/modules/mob/living/basic/pets/cat/cat.dm +++ b/code/modules/mob/living/basic/pets/cat/cat.dm @@ -54,6 +54,8 @@ . = ..() AddElement(/datum/element/ai_retaliate) AddElement(/datum/element/pet_bonus, "purrs!") + AddElement(/datum/element/footstep, footstep_type = FOOTSTEP_MOB_CLAW) + add_cell_sample() add_verb(src, /mob/living/proc/toggle_resting) add_traits(list(TRAIT_CATLIKE_GRACE, TRAIT_VENTCRAWLER_ALWAYS), INNATE_TRAIT) ai_controller.set_blackboard_key(BB_HUNTABLE_PREY, typecacheof(huntable_items)) @@ -64,6 +66,9 @@ if(can_interact_with_stove) RegisterSignal(src, COMSIG_LIVING_EARLY_UNARMED_ATTACK, PROC_REF(pre_unarmed_attack)) +/mob/living/basic/pet/cat/proc/add_cell_sample() + AddElement(/datum/element/swabable, CELL_LINE_TABLE_CAT, CELL_VIRUS_TABLE_GENERIC_MOB, 1, 5) + /mob/living/basic/pet/cat/proc/pre_attack(mob/living/source, atom/movable/target) SIGNAL_HANDLER if(!is_type_in_list(target, huntable_items) || held_food) @@ -129,6 +134,7 @@ icon_state = "spacecat" icon_living = "spacecat" icon_dead = "spacecat_dead" + unsuitable_atmos_damage = 0 minimum_survivable_temperature = TCMB maximum_survivable_temperature = T0C + 40 held_state = "spacecat" @@ -150,6 +156,8 @@ /obj/item/food/breadslice/plain = 1 ) +/mob/living/basic/pet/cat/breadcat/add_cell_sample() + return /mob/living/basic/pet/cat/original name = "Batsy" @@ -162,6 +170,9 @@ unique_pet = TRUE held_state = "original" +/mob/living/basic/pet/cat/original/add_cell_sample() + return + /mob/living/basic/pet/cat/kitten name = "kitten" desc = "D'aaawwww." diff --git a/code/modules/mob/living/basic/pets/cat/cat_ai.dm b/code/modules/mob/living/basic/pets/cat/cat_ai.dm index 6cd01eb5453..7eff8582355 100644 --- a/code/modules/mob/living/basic/pets/cat/cat_ai.dm +++ b/code/modules/mob/living/basic/pets/cat/cat_ai.dm @@ -2,6 +2,7 @@ blackboard = list( BB_TARGETING_STRATEGY = /datum/targeting_strategy/basic, BB_HOSTILE_MEOWS = list("Mawwww", "Mrewwww", "mhhhhng..."), + BB_BABIES_PARTNER_TYPES = list(/mob/living/basic/pet/cat), BB_BABIES_CHILD_TYPES = list(/mob/living/basic/pet/cat/kitten), ) diff --git a/code/modules/mob/living/basic/pets/cat/keeki.dm b/code/modules/mob/living/basic/pets/cat/keeki.dm index 5cf16552e9a..4c18d22b02a 100644 --- a/code/modules/mob/living/basic/pets/cat/keeki.dm +++ b/code/modules/mob/living/basic/pets/cat/keeki.dm @@ -35,6 +35,9 @@ ) AddElement(/datum/element/consumable_mob, reagents_list = on_consume) +/mob/living/basic/pet/cat/cak/add_cell_sample() + return + /mob/living/basic/pet/cat/cak/CheckParts(list/parts) . = ..() var/obj/item/organ/internal/brain/candidate = locate(/obj/item/organ/internal/brain) in contents diff --git a/code/modules/mob/living/basic/pets/cat/kitten_ai.dm b/code/modules/mob/living/basic/pets/cat/kitten_ai.dm index 355ec4d3e48..15630c07838 100644 --- a/code/modules/mob/living/basic/pets/cat/kitten_ai.dm +++ b/code/modules/mob/living/basic/pets/cat/kitten_ai.dm @@ -33,13 +33,13 @@ . = ..() var/atom/target = controller.blackboard[target_key] if(QDELETED(target)) - finish_action(controller, FALSE) + finish_action(controller, FALSE, target_key) var/mob/living/living_pawn = controller.pawn var/list/meowing_list = controller.blackboard[meows_key] if(length(meowing_list)) living_pawn.say(pick(meowing_list), forced = "ai_controller") living_pawn._pointed(target) - finish_action(controller, TRUE) + finish_action(controller, TRUE, target_key) /datum/ai_behavior/beacon_for_food/finish_action(datum/ai_controller/controller, success, target_key) . = ..() diff --git a/code/modules/mob/living/basic/pets/penguin.dm b/code/modules/mob/living/basic/pets/penguin.dm index 671c2cf30c1..e8e2a038c0e 100644 --- a/code/modules/mob/living/basic/pets/penguin.dm +++ b/code/modules/mob/living/basic/pets/penguin.dm @@ -23,7 +23,7 @@ AddElement(/datum/element/ai_retaliate) AddElement(/datum/element/ai_flee_while_injured) AddElement(/datum/element/pet_bonus, "honks happily!") - AddElement(/datum/element/waddling) + AddElementTrait(TRAIT_WADDLING, INNATE_TRAIT, /datum/element/waddling) if(!can_lay_eggs) return AddComponent(\ diff --git a/code/modules/mob/living/basic/pets/sloth.dm b/code/modules/mob/living/basic/pets/sloth.dm index 0b1546ccf93..125a3a7b97d 100644 --- a/code/modules/mob/living/basic/pets/sloth.dm +++ b/code/modules/mob/living/basic/pets/sloth.dm @@ -44,11 +44,12 @@ GLOBAL_DATUM(cargo_sloth, /mob/living/basic/sloth) AddElement(/datum/element/ai_retaliate) AddComponent(/datum/component/tree_climber) - if(!mapload || isnull(GLOB.cargo_sloth) || !is_station_level(z)) + if(!mapload || !isnull(GLOB.cargo_sloth) || !is_station_level(z)) return // If someone adds non-cargo sloths to maps we'll have a problem but we're fine for now GLOB.cargo_sloth = src + GLOB.gorilla_start += get_turf(src) /mob/living/basic/sloth/Destroy() if(GLOB.cargo_sloth == src) diff --git a/code/modules/mob/living/basic/ruin_defender/flesh.dm b/code/modules/mob/living/basic/ruin_defender/flesh.dm index 2a1948172cf..38e56f84c84 100644 --- a/code/modules/mob/living/basic/ruin_defender/flesh.dm +++ b/code/modules/mob/living/basic/ruin_defender/flesh.dm @@ -152,7 +152,7 @@ current_bodypart.dismember() return TRUE//on_limb_lost should be called after that -/mob/living/basic/living_limb_flesh/proc/on_limb_lost(atom/movable/source, mob/living/carbon/old_owner, dismembered) +/mob/living/basic/living_limb_flesh/proc/on_limb_lost(atom/movable/source, mob/living/carbon/old_owner, special, dismembered) SIGNAL_HANDLER UnregisterSignal(source, COMSIG_BODYPART_REMOVED) UnregisterSignal(old_owner, COMSIG_LIVING_ELECTROCUTE_ACT) diff --git a/code/modules/mob/living/basic/space_fauna/ghost.dm b/code/modules/mob/living/basic/space_fauna/ghost.dm index 981357d1a13..406d2ecefdd 100644 --- a/code/modules/mob/living/basic/space_fauna/ghost.dm +++ b/code/modules/mob/living/basic/space_fauna/ghost.dm @@ -22,7 +22,7 @@ attack_sound = 'sound/hallucinations/growl1.ogg' death_message = "wails, disintegrating into a pile of ectoplasm!" gold_core_spawnable = NO_SPAWN //too spooky for science - light_system = MOVABLE_LIGHT + light_system = OVERLAY_LIGHT light_range = 1 // same glowing as visible player ghosts light_power = 2 ai_controller = /datum/ai_controller/basic_controller/ghost diff --git a/code/modules/mob/living/basic/space_fauna/regal_rat/regal_rat.dm b/code/modules/mob/living/basic/space_fauna/regal_rat/regal_rat.dm index 3602d5e8a99..be83d3e058f 100644 --- a/code/modules/mob/living/basic/space_fauna/regal_rat/regal_rat.dm +++ b/code/modules/mob/living/basic/space_fauna/regal_rat/regal_rat.dm @@ -52,7 +52,7 @@ RegisterSignal(src, COMSIG_HOSTILE_PRE_ATTACKINGTARGET, PROC_REF(pre_attack)) RegisterSignal(src, COMSIG_MOB_LOGIN, PROC_REF(on_login)) - AddElement(/datum/element/waddling) + AddElementTrait(TRAIT_WADDLING, INNATE_TRAIT, /datum/element/waddling) AddElement(/datum/element/ai_retaliate) AddElement(/datum/element/door_pryer, pry_time = 5 SECONDS, interaction_key = REGALRAT_INTERACTION) AddComponent(\ 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 eadf65e58d3..c9505321b37 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 @@ -1,5 +1,5 @@ /// You can't make a dragon darker than this, it'd be hard to see -#define REJECT_DARK_COLOUR_THRESHOLD 50 +#define REJECT_DARK_COLOUR_THRESHOLD 20 /// Any interactions executed by the space dragon #define DOAFTER_SOURCE_SPACE_DRAGON_INTERACTION "space dragon interaction" @@ -46,6 +46,7 @@ death_sound = 'sound/creatures/space_dragon_roar.ogg' death_message = "screeches in agony as it collapses to the floor, its life extinguished." butcher_results = list(/obj/item/stack/ore/diamond = 5, /obj/item/stack/sheet/sinew = 5, /obj/item/stack/sheet/bone = 30) + can_buckle_to = FALSE /// The colour of the space dragon var/chosen_colour @@ -100,8 +101,8 @@ to_chat(src, span_warning("Not a valid colour, please try again.")) select_colour() return - var/temp_hsv = RGBtoHSV(chosen_colour) - if(ReadHSV(temp_hsv)[3] < REJECT_DARK_COLOUR_THRESHOLD) + var/list/skin_hsv = rgb2hsv(chosen_colour) + if(skin_hsv[3] < REJECT_DARK_COLOUR_THRESHOLD) to_chat(src, span_danger("Invalid colour. Your colour is not bright enough.")) select_colour() return diff --git a/code/modules/mob/living/basic/space_fauna/statue/mannequin.dm b/code/modules/mob/living/basic/space_fauna/statue/mannequin.dm new file mode 100644 index 00000000000..7b6bf6c8399 --- /dev/null +++ b/code/modules/mob/living/basic/space_fauna/statue/mannequin.dm @@ -0,0 +1,89 @@ +/mob/living/basic/statue/mannequin + name = "mannequin" + desc = "Oh, so this is a dress-up game now." + icon = 'icons/mob/human/mannequin.dmi' + icon_state = "mannequin_wood_male" + icon_living = "mannequin_wood_male" + icon_dead = "mannequin_wood_male" + health = 300 + maxHealth = 300 + melee_damage_lower = 15 + melee_damage_upper = 30 + sentience_type = SENTIENCE_ARTIFICIAL + ai_controller = /datum/ai_controller/basic_controller/stares_at_people + /// the path to a fake item we will hold in our right hand + var/obj/item/held_item + /// the path to a fake hat we will wear + var/obj/item/hat + +/mob/living/basic/statue/mannequin/Initialize(mapload) + . = ..() + update_appearance() + +/mob/living/basic/statue/mannequin/update_overlays() + . = ..() + if(held_item) + . += mutable_appearance(initial(held_item.righthand_file), initial(held_item.inhand_icon_state)) + if(hat) + . += mutable_appearance(initial(hat.worn_icon), initial(hat.worn_icon_state) || initial(hat.icon_state)) + +/datum/ai_controller/basic_controller/stares_at_people + blackboard = list( + BB_TARGETING_STRATEGY = /datum/targeting_strategy/basic, + BB_AGGRO_RANGE = 6, + ) + + ai_movement = /datum/ai_movement/dumb + idle_behavior = null + planning_subtrees = list( + /datum/ai_planning_subtree/simple_find_target, + /datum/ai_planning_subtree/face_target_or_face_initial, // we be creepy and all + ) + +/datum/ai_planning_subtree/face_target_or_face_initial + +/datum/ai_planning_subtree/face_target_or_face_initial/SelectBehaviors(datum/ai_controller/controller, seconds_per_tick) + if(isnull(controller.blackboard[BB_BASIC_MOB_CURRENT_TARGET])) + return + var/mob/living/we = controller.pawn + controller.blackboard[BB_STARTING_DIRECTION] = we.dir + controller.queue_behavior(/datum/ai_behavior/face_target_or_face_initial, BB_BASIC_MOB_CURRENT_TARGET) + +/datum/ai_behavior/face_target_or_face_initial + +/datum/ai_behavior/face_target_or_face_initial/setup(datum/ai_controller/controller, target_key) + . = ..() + var/atom/movable/target = controller.blackboard[target_key] + return ismovable(target) && isturf(target.loc) && ismob(controller.pawn) + +/datum/ai_behavior/face_target_or_face_initial/perform(seconds_per_tick, datum/ai_controller/controller, target_key) + . = ..() + var/atom/movable/target = controller.blackboard[target_key] + var/mob/living/we = controller.pawn + if(isnull(target) || get_dist(we, target) > 8) + we.dir = controller.blackboard[BB_STARTING_DIRECTION] + finish_action(controller, TRUE) + else + we.face_atom(target) + +/mob/living/basic/statue/mannequin/suspicious + name = "mannequin?" + desc = "Their eyes follow you." + health = 1500 //yeah uhh avoid these + maxHealth = 1500 + ai_controller = /datum/ai_controller/basic_controller/suspicious_mannequin + +/datum/ai_controller/basic_controller/suspicious_mannequin + blackboard = list( + BB_TARGETING_STRATEGY = /datum/targeting_strategy/basic, + BB_AGGRO_RANGE = 14, + BB_EMOTE_KEY = "scream", //spooky + ) + + ai_movement = /datum/ai_movement/jps //threat + idle_behavior = null + planning_subtrees = list( + /datum/ai_planning_subtree/simple_find_target, + /datum/ai_planning_subtree/run_emote, + /datum/ai_planning_subtree/basic_melee_attack_subtree, + ) diff --git a/code/modules/mob/living/basic/vermin/mothroach.dm b/code/modules/mob/living/basic/vermin/mothroach.dm index 15f82d38f85..4c06665a14a 100644 --- a/code/modules/mob/living/basic/vermin/mothroach.dm +++ b/code/modules/mob/living/basic/vermin/mothroach.dm @@ -73,3 +73,10 @@ planning_subtrees = list( /datum/ai_planning_subtree/random_speech/mothroach, ) + +/mob/living/basic/mothroach/bar + name = "mothroach bartender" + desc = "A mothroach serving drinks. Look at him go." + icon_state = "barroach" + icon_living = "barroach" + icon_dead = "barroach_dead" diff --git a/code/modules/mob/living/blood.dm b/code/modules/mob/living/blood.dm index 0818532cc4d..4caa7dd1966 100644 --- a/code/modules/mob/living/blood.dm +++ b/code/modules/mob/living/blood.dm @@ -1,4 +1,6 @@ #define BLOOD_DRIP_RATE_MOD 90 //Greater number means creating blood drips more often while bleeding +// Conversion between internal drunk power and common blood alcohol content +#define DRUNK_POWER_TO_BLOOD_ALCOHOL 0.003 /**************************************************** BLOOD SYSTEM @@ -376,4 +378,13 @@ if(!B) B = new(T) +/mob/living/proc/get_blood_alcohol_content() + var/blood_alcohol_content = 0 + var/datum/status_effect/inebriated/inebriation = has_status_effect(/datum/status_effect/inebriated) + if(!isnull(inebriation)) + blood_alcohol_content = round(inebriation.drunk_value * DRUNK_POWER_TO_BLOOD_ALCOHOL, 0.01) + + return blood_alcohol_content + #undef BLOOD_DRIP_RATE_MOD +#undef DRUNK_POWER_TO_BLOOD_ALCOHOL diff --git a/code/modules/mob/living/brain/brain_item.dm b/code/modules/mob/living/brain/brain_item.dm index a613e2ad839..117b5f03835 100644 --- a/code/modules/mob/living/brain/brain_item.dm +++ b/code/modules/mob/living/brain/brain_item.dm @@ -61,7 +61,7 @@ name = initial(name) // Special check for if you're trapped in a body you can't control because it's owned by a ling. - if(brain_owner?.mind?.has_antag_datum(/datum/antagonist/changeling) && !(movement_flags & NO_ID_TRANSFER)) + if(IS_CHANGELING(brain_owner) && !(movement_flags & NO_ID_TRANSFER)) if(brainmob && !(brain_owner.stat == DEAD || (HAS_TRAIT(brain_owner, TRAIT_DEATHCOMA)))) to_chat(brainmob, span_danger("You can't feel your body! You're still just a brain!")) forceMove(brain_owner) diff --git a/code/modules/mob/living/carbon/alien/adult/adult.dm b/code/modules/mob/living/carbon/alien/adult/adult.dm index 92f3febef2c..2cab03d670e 100644 --- a/code/modules/mob/living/carbon/alien/adult/adult.dm +++ b/code/modules/mob/living/carbon/alien/adult/adult.dm @@ -74,12 +74,6 @@ GLOBAL_LIST_INIT(strippable_alien_humanoid_items, create_strippable_list(list( name = "[name] ([numba])" real_name = name -/mob/living/carbon/alien/adult/proc/grab(mob/living/carbon/human/target) - if(target.check_block(src, 0, "[target]'s grab")) - return FALSE - target.grabbedby(src) - return TRUE - /mob/living/carbon/alien/adult/setGrabState(newstate) if(newstate == grab_state) return diff --git a/code/modules/mob/living/carbon/alien/adult/adult_defense.dm b/code/modules/mob/living/carbon/alien/adult/adult_defense.dm index b4a119d5aba..d89f6de30d6 100644 --- a/code/modules/mob/living/carbon/alien/adult/adult_defense.dm +++ b/code/modules/mob/living/carbon/alien/adult/adult_defense.dm @@ -15,11 +15,8 @@ to_chat(user, span_danger("You [hitverb] [src]!")) /mob/living/carbon/alien/adult/attack_hand(mob/living/carbon/human/user, list/modifiers) - if(!..() || !user.combat_mode) - return - if(LAZYACCESS(modifiers, RIGHT_CLICK)) - if(stat < UNCONSCIOUS) - user.disarm(src) + . = ..() + if(.) return TRUE var/damage = rand(1, 9) if (prob(90)) @@ -41,7 +38,6 @@ span_danger("You avoid [user]'s punch!"), span_hear("You hear a swoosh!"), COMBAT_MESSAGE_RANGE, user) to_chat(user, span_warning("Your punch misses [src]!")) - /mob/living/carbon/alien/adult/do_attack_animation(atom/A, visual_effect_icon, obj/item/used_item, no_effect) if(!no_effect && !visual_effect_icon) visual_effect_icon = ATTACK_EFFECT_CLAW diff --git a/code/modules/mob/living/carbon/alien/adult/caste/hunter.dm b/code/modules/mob/living/carbon/alien/adult/caste/hunter.dm index ed39fda2108..51d9a3bce1b 100644 --- a/code/modules/mob/living/carbon/alien/adult/caste/hunter.dm +++ b/code/modules/mob/living/carbon/alien/adult/caste/hunter.dm @@ -49,8 +49,7 @@ else //Maybe uses plasma in the future, although that wouldn't make any sense... leaping = TRUE //Because the leaping sprite is bigger than the normal one - body_position_pixel_x_offset = -32 - body_position_pixel_y_offset = -32 + body_position_pixel_x_offset = -8 update_icons() ADD_TRAIT(src, TRAIT_MOVE_FLOATING, LEAPING_TRAIT) //Throwing itself doesn't protect mobs against lava (because gulag). throw_at(A, MAX_ALIEN_LEAP_DIST, pounce_speed, src, FALSE, TRUE, callback = CALLBACK(src, PROC_REF(leap_end))) @@ -58,7 +57,6 @@ /mob/living/carbon/alien/adult/hunter/proc/leap_end() leaping = FALSE body_position_pixel_x_offset = 0 - body_position_pixel_y_offset = 0 REMOVE_TRAIT(src, TRAIT_MOVE_FLOATING, LEAPING_TRAIT) update_icons() diff --git a/code/modules/mob/living/carbon/alien/adult/queen.dm b/code/modules/mob/living/carbon/alien/adult/queen.dm index f2093738eac..1a08d2446d2 100644 --- a/code/modules/mob/living/carbon/alien/adult/queen.dm +++ b/code/modules/mob/living/carbon/alien/adult/queen.dm @@ -18,6 +18,8 @@ . = ..() // as a wise man once wrote: "pull over that ass too fat" REMOVE_TRAIT(src, TRAIT_VENTCRAWLER_ALWAYS, INNATE_TRAIT) + // that'd be a too cheeky shield bashing strat + ADD_TRAIT(src, TRAIT_SHOVE_KNOCKDOWN_BLOCKED, INNATE_TRAIT) AddComponent(/datum/component/seethrough_mob) /mob/living/carbon/alien/adult/royal/on_lying_down(new_lying_angle) diff --git a/code/modules/mob/living/carbon/alien/alien_defense.dm b/code/modules/mob/living/carbon/alien/alien_defense.dm index 9388dcea560..3717cfcb89a 100644 --- a/code/modules/mob/living/carbon/alien/alien_defense.dm +++ b/code/modules/mob/living/carbon/alien/alien_defense.dm @@ -44,22 +44,22 @@ In all, this is a lot like the monkey code. /N /mob/living/carbon/alien/attack_hand(mob/living/carbon/human/user, list/modifiers) . = ..() - if(.) //to allow surgery to return properly. - return FALSE - - var/martial_result = user.apply_martial_art(src, modifiers) - if (martial_result != MARTIAL_ATTACK_INVALID) - return martial_result + if(.) + return TRUE + if(LAZYACCESS(modifiers, RIGHT_CLICK)) + user.disarm(src) + return TRUE if(user.combat_mode) - if(LAZYACCESS(modifiers, RIGHT_CLICK)) - user.do_attack_animation(src, ATTACK_EFFECT_DISARM) - return TRUE user.do_attack_animation(src, ATTACK_EFFECT_PUNCH) - return TRUE else help_shake_act(user) + return TRUE +/mob/living/carbon/alien/get_shove_flags(mob/living/shover, obj/item/weapon) + . = ..() + if(isnull(weapon) || stat != CONSCIOUS) + . &= ~(SHOVE_CAN_MOVE|SHOVE_CAN_HIT_SOMETHING|SHOVE_CAN_STAGGER) /mob/living/carbon/alien/attack_paw(mob/living/carbon/human/user, list/modifiers) if(..()) diff --git a/code/modules/mob/living/carbon/alien/larva/larva_defense.dm b/code/modules/mob/living/carbon/alien/larva/larva_defense.dm index 3fa78271d6f..62dd4f88b21 100644 --- a/code/modules/mob/living/carbon/alien/larva/larva_defense.dm +++ b/code/modules/mob/living/carbon/alien/larva/larva_defense.dm @@ -1,24 +1,26 @@ /mob/living/carbon/alien/larva/attack_hand(mob/living/carbon/human/user, list/modifiers) - if(..()) - var/damage = rand(1, 9) - if (prob(90)) - playsound(loc, SFX_PUNCH, 25, TRUE, -1) - log_combat(user, src, "attacked") - visible_message(span_danger("[user] kicks [src]!"), \ - span_userdanger("[user] kicks you!"), span_hear("You hear a sickening sound of flesh hitting flesh!"), COMBAT_MESSAGE_RANGE, user) - to_chat(user, span_danger("You kick [src]!")) - if ((stat != DEAD) && (damage > 4.9)) - Unconscious(rand(100,200)) + . = ..() + if(.) + return TRUE + var/damage = rand(1, 9) + if (prob(90)) + playsound(loc, SFX_PUNCH, 25, TRUE, -1) + log_combat(user, src, "attacked") + visible_message(span_danger("[user] kicks [src]!"), \ + span_userdanger("[user] kicks you!"), span_hear("You hear a sickening sound of flesh hitting flesh!"), COMBAT_MESSAGE_RANGE, user) + to_chat(user, span_danger("You kick [src]!")) + if ((stat != DEAD) && (damage > 4.9)) + Unconscious(rand(100,200)) - var/obj/item/bodypart/affecting = get_bodypart(get_random_valid_zone(user.zone_selected)) - apply_damage(damage, BRUTE, affecting) - else - playsound(loc, 'sound/weapons/punchmiss.ogg', 25, TRUE, -1) - visible_message(span_danger("[user]'s kick misses [src]!"), \ - span_danger("You avoid [user]'s kick!"), span_hear("You hear a swoosh!"), COMBAT_MESSAGE_RANGE, user) - to_chat(user, span_warning("Your kick misses [src]!")) + var/obj/item/bodypart/affecting = get_bodypart(get_random_valid_zone(user.zone_selected)) + apply_damage(damage, BRUTE, affecting) + else + playsound(loc, 'sound/weapons/punchmiss.ogg', 25, TRUE, -1) + visible_message(span_danger("[user]'s kick misses [src]!"), \ + span_danger("You avoid [user]'s kick!"), span_hear("You hear a swoosh!"), COMBAT_MESSAGE_RANGE, user) + to_chat(user, span_warning("Your kick misses [src]!")) /mob/living/carbon/alien/larva/attack_hulk(mob/living/carbon/human/user) . = ..() diff --git a/code/modules/mob/living/carbon/carbon.dm b/code/modules/mob/living/carbon/carbon.dm index 65a40a08805..6d4e864238e 100644 --- a/code/modules/mob/living/carbon/carbon.dm +++ b/code/modules/mob/living/carbon/carbon.dm @@ -5,11 +5,6 @@ register_context() GLOB.carbon_list += src - var/static/list/loc_connections = list( - COMSIG_CARBON_DISARM_PRESHOVE = PROC_REF(disarm_precollide), - COMSIG_CARBON_DISARM_COLLIDE = PROC_REF(disarm_collision), - ) - AddElement(/datum/element/connect_loc, loc_connections) ADD_TRAIT(src, TRAIT_CAN_HOLD_ITEMS, INNATE_TRAIT) // Carbons are assumed to be innately capable of having arms, we check their arms count instead /mob/living/carbon/Destroy() @@ -65,6 +60,9 @@ take_bodypart_damage(5 + 5 * extra_speed, check_armor = TRUE, wound_bonus = extra_speed * 5) else if(!iscarbon(hit_atom) && extra_speed) take_bodypart_damage(5 * extra_speed, check_armor = TRUE, wound_bonus = extra_speed * 5) + visible_message(span_danger("[src] crashes into [hit_atom][extra_speed ? " really hard" : ""]!"),\ + span_userdanger("You violently crash into [hit_atom][extra_speed ? " extra hard" : ""]!")) + log_combat(hit_atom, src, "crashes ") oof_noise = TRUE if(iscarbon(hit_atom) && hit_atom != src) @@ -931,7 +929,7 @@ return ..() /mob/living/carbon/can_be_revived() - if(!get_organ_by_type(/obj/item/organ/internal/brain) && (!mind || !mind.has_antag_datum(/datum/antagonist/changeling)) || HAS_TRAIT(src, TRAIT_HUSK)) + if(!get_organ_by_type(/obj/item/organ/internal/brain) && (!IS_CHANGELING(src)) || HAS_TRAIT(src, TRAIT_HUSK)) return FALSE //NOVA EDIT ADDITION - DNR TRAIT if(HAS_TRAIT(src, TRAIT_DNR)) @@ -1398,24 +1396,6 @@ if(mob_biotypes & (MOB_ORGANIC|MOB_UNDEAD)) AddComponent(/datum/component/rot, 6 MINUTES, 10 MINUTES, 1) -/mob/living/carbon/proc/disarm_precollide(datum/source, mob/living/carbon/shover, mob/living/carbon/target) - SIGNAL_HANDLER - if(can_be_shoved_into) - return COMSIG_CARBON_ACT_SOLID - -/mob/living/carbon/proc/disarm_collision(datum/source, mob/living/carbon/shover, mob/living/carbon/target, shove_blocked) - SIGNAL_HANDLER - if(src == target || LAZYFIND(target.buckled_mobs, src) || !can_be_shoved_into) - return - target.Knockdown(SHOVE_KNOCKDOWN_HUMAN) - if(!is_shove_knockdown_blocked()) - Knockdown(SHOVE_KNOCKDOWN_COLLATERAL) - target.visible_message(span_danger("[shover] shoves [target.name] into [name]!"), - span_userdanger("You're shoved into [name] by [shover]!"), span_hear("You hear aggressive shuffling followed by a loud thud!"), COMBAT_MESSAGE_RANGE, src) - to_chat(src, span_danger("You shove [target.name] into [name]!")) - log_combat(shover, target, "shoved", addition = "into [name]") - return COMSIG_CARBON_SHOVE_HANDLED - /** * This proc is used to determine whether or not the mob can handle touching an acid affected object. */ @@ -1464,3 +1444,20 @@ if(item && ((item in organs) || (item in bodyparts))) //let's not do this, aight? return FALSE return ..() + +/// Helper to cleanly trigger tail wagging +/// Accepts an optional timeout after which we remove the tail wagging +/// Returns true if successful, false otherwise +/mob/living/carbon/proc/wag_tail(timeout = INFINITY) + var/obj/item/organ/external/tail/wagged = get_organ_slot(ORGAN_SLOT_EXTERNAL_TAIL) + if(!wagged) + return FALSE + return wagged.start_wag(src, timeout) + +/// Helper to cleanly stop all tail wagging +/// Returns true if successful, false otherwise +/mob/living/carbon/proc/unwag_tail() // can't unwag a tail + var/obj/item/organ/external/tail/unwagged = get_organ_slot(ORGAN_SLOT_EXTERNAL_TAIL) + if(!unwagged) + return FALSE + return unwagged.stop_wag(src) diff --git a/code/modules/mob/living/carbon/carbon_defense.dm b/code/modules/mob/living/carbon/carbon_defense.dm index e2a28e025dc..909cf50618b 100644 --- a/code/modules/mob/living/carbon/carbon_defense.dm +++ b/code/modules/mob/living/carbon/carbon_defense.dm @@ -1,6 +1,4 @@ #define SHAKE_ANIMATION_OFFSET 4 -#define PERSONAL_SPACE_DAMAGE 2 -#define ASS_SLAP_EXTRA_RANGE -1 /mob/living/carbon/get_eye_protection() . = ..() @@ -71,25 +69,19 @@ if(P.catastropic_dismemberment) apply_damage(P.damage, P.damtype, BODY_ZONE_CHEST, wound_bonus = P.wound_bonus) //stops a projectile blowing off a limb effectively doing no damage. Mostly relevant for sniper rifles. -/mob/living/carbon/proc/can_catch_item(skip_throw_mode_check) - . = FALSE +/mob/living/carbon/try_catch_item(obj/item/item, skip_throw_mode_check = FALSE, try_offhand = FALSE) + . = ..() + if(.) + throw_mode_off(THROW_MODE_TOGGLE) + +/mob/living/carbon/can_catch_item(skip_throw_mode_check = FALSE, try_offhand = FALSE) if(!skip_throw_mode_check && !throw_mode) - return - if(get_active_held_item()) - return - if(HAS_TRAIT(src, TRAIT_HANDS_BLOCKED)) - return - return TRUE + return FALSE + return ..() -/mob/living/carbon/hitby(atom/movable/AM, skipcatch, hitpush = TRUE, blocked = FALSE, datum/thrownthing/throwingdatum) - if(!skipcatch && can_catch_item() && isitem(AM) && !HAS_TRAIT(AM, TRAIT_UNCATCHABLE) && isturf(AM.loc)) - var/obj/item/I = AM - I.attack_hand(src) - if(get_active_held_item() == I) //if our attack_hand() picks up the item... - visible_message(span_warning("[src] catches [I]!"), \ - span_userdanger("You catch [I] in mid-air!")) - throw_mode_off(THROW_MODE_TOGGLE) - return TRUE +/mob/living/carbon/hitby(atom/movable/movable, skipcatch, hitpush = TRUE, blocked = FALSE, datum/thrownthing/throwingdatum) + if(!skipcatch && try_catch_item(movable)) + return TRUE return ..() /mob/living/carbon/send_item_attack_message(obj/item/I, mob/living/user, hit_area, def_zone) @@ -161,10 +153,9 @@ /mob/living/carbon/attack_drone_secondary(mob/living/basic/drone/user) return SECONDARY_ATTACK_CANCEL_ATTACK_CHAIN -//ATTACK HAND IGNORING PARENT RETURN VALUE /mob/living/carbon/attack_hand(mob/living/carbon/human/user, list/modifiers) - if(SEND_SIGNAL(src, COMSIG_ATOM_ATTACK_HAND, user, modifiers) & COMPONENT_CANCEL_ATTACK_CHAIN) - . = TRUE + . = ..() + for(var/thing in diseases) var/datum/disease/D = thing if(D.spread_flags & DISEASE_SPREAD_CONTACT_SKIN) @@ -175,13 +166,8 @@ if(D.spread_flags & DISEASE_SPREAD_CONTACT_SKIN) ContactContractDisease(D) - for(var/datum/surgery/operations as anything in surgeries) - if(user.combat_mode) - break - if(body_position != LYING_DOWN && (operations.surgery_flags & SURGERY_REQUIRE_RESTING)) - continue - if(operations.next_step(user, modifiers)) - return TRUE + if(.) + return TRUE for(var/datum/wound/wounds as anything in all_wounds) if(wounds.try_handling(user)) @@ -247,136 +233,6 @@ return dam_zone -/** - * Attempt to disarm the target mob. - * Will shove the target mob back, and drop them if they're in front of something dense - * or another carbon. -*/ -/mob/living/carbon/proc/disarm(mob/living/carbon/target) - if(zone_selected == BODY_ZONE_PRECISE_MOUTH) - var/target_on_help_and_unarmed = !target.combat_mode && !target.get_active_held_item() - if(target_on_help_and_unarmed || HAS_TRAIT(target, TRAIT_RESTRAINED)) - do_slap_animation(target) - playsound(target.loc, 'sound/weapons/slap.ogg', 50, TRUE, -1) - visible_message("[src] slaps [target] in the face!", - "You slap [target] in the face! ",\ - "You hear a slap.") - target.dna?.species?.stop_wagging_tail(target) - return - //NOVA EDIT ADDITION BEGIN - EMOTES - if(zone_selected == BODY_ZONE_PRECISE_GROIN && target.dir == src.dir) - if(HAS_TRAIT(target, TRAIT_PERSONALSPACE) && (target.stat != UNCONSCIOUS) && (!target.handcuffed)) //You need to be conscious and uncuffed to use Personal Space - if(target.combat_mode && (!HAS_TRAIT(target, TRAIT_PACIFISM))) //Being pacified prevents violent counters - var/obj/item/bodypart/affecting = src.get_bodypart(BODY_ZONE_HEAD) - if(affecting?.receive_damage(PERSONAL_SPACE_DAMAGE)) - src.update_damage_overlays() - visible_message(span_danger("[src] tried slapping [target]'s ass, but they were slapped instead!"), - span_danger("You tried slapping [target]'s ass, but they hit you back, ouch!"), - "You hear a slap.", ignored_mobs = list(target)) - playsound(target.loc, 'sound/effects/snap.ogg', 50, TRUE, ASS_SLAP_EXTRA_RANGE) - to_chat(target, span_danger("[src] tried slapping your ass, but you hit them back!")) - return - else - visible_message(span_danger("[src] tried slapping [target]'s ass, but they were blocked!"), - span_danger("You tried slapping [target]'s ass, but they blocked you!"), - "You hear a slap.", ignored_mobs = list(target)) - playsound(target.loc, 'sound/weapons/thudswoosh.ogg', 50, TRUE, ASS_SLAP_EXTRA_RANGE) - to_chat(target, span_danger("[src] tried slapping your ass, but you blocked them!")) - return - else - do_ass_slap_animation(target) - playsound(target.loc, 'sound/weapons/slap.ogg', 50, TRUE, ASS_SLAP_EXTRA_RANGE) - visible_message("[src] slaps [target] right on the ass!",\ - "You slap [target] on the ass, how satisfying.",\ - "You hear a slap.", ignored_mobs = list(target)) - to_chat(target, "[src] slaps your ass!") - return - //NOVA EDIT END - do_attack_animation(target, ATTACK_EFFECT_DISARM) - playsound(target, 'sound/weapons/thudswoosh.ogg', 50, TRUE, -1) - if (ishuman(target)) - var/mob/living/carbon/human/human_target = target - human_target.w_uniform?.add_fingerprint(src) - - SEND_SIGNAL(target, COMSIG_HUMAN_DISARM_HIT, src, zone_selected) - var/shove_dir = get_dir(loc, target.loc) - var/turf/target_shove_turf = get_step(target.loc, shove_dir) - var/shove_blocked = FALSE //Used to check if a shove is blocked so that if it is knockdown logic can be applied - var/turf/target_old_turf = target.loc - - //Are we hitting anything? or - if(SEND_SIGNAL(target_shove_turf, COMSIG_CARBON_DISARM_PRESHOVE) & COMSIG_CARBON_ACT_SOLID) - shove_blocked = TRUE - else - target.Move(target_shove_turf, shove_dir) - if(get_turf(target) == target_old_turf) - shove_blocked = TRUE - - if(!shove_blocked) - target.setGrabState(GRAB_PASSIVE) - - if(target.IsKnockdown() && !target.IsParalyzed()) //KICK HIM IN THE NUTS - target.Paralyze(SHOVE_CHAIN_PARALYZE) - target.visible_message(span_danger("[name] kicks [target.name] onto [target.p_their()] side!"), - span_userdanger("You're kicked onto your side by [name]!"), span_hear("You hear aggressive shuffling followed by a loud thud!"), COMBAT_MESSAGE_RANGE, src) - to_chat(src, span_danger("You kick [target.name] onto [target.p_their()] side!")) - addtimer(CALLBACK(target, TYPE_PROC_REF(/mob/living, SetKnockdown), 0), SHOVE_CHAIN_PARALYZE) - log_combat(src, target, "kicks", "onto their side (paralyzing)") - - var/directional_blocked = FALSE - var/can_hit_something = (!target.is_shove_knockdown_blocked() && !target.buckled) - - //Directional checks to make sure that we're not shoving through a windoor or something like that - if(shove_blocked && can_hit_something && (shove_dir in GLOB.cardinals)) - var/target_turf = get_turf(target) - for(var/obj/obj_content in target_turf) - if(obj_content.flags_1 & ON_BORDER_1 && obj_content.dir == shove_dir && obj_content.density) - directional_blocked = TRUE - break - if(target_turf != target_shove_turf && !directional_blocked) //Make sure that we don't run the exact same check twice on the same tile - for(var/obj/obj_content in target_shove_turf) - if(obj_content.flags_1 & ON_BORDER_1 && obj_content.dir == REVERSE_DIR(shove_dir) && obj_content.density) - directional_blocked = TRUE - break - - if(can_hit_something) - //Don't hit people through windows, ok? - if(!directional_blocked && SEND_SIGNAL(target_shove_turf, COMSIG_CARBON_DISARM_COLLIDE, src, target, shove_blocked) & COMSIG_CARBON_SHOVE_HANDLED) - return - if(directional_blocked || shove_blocked) - target.Knockdown(SHOVE_KNOCKDOWN_SOLID) - target.visible_message(span_danger("[name] shoves [target.name], knocking [target.p_them()] down!"), - span_userdanger("You're knocked down from a shove by [name]!"), span_hear("You hear aggressive shuffling followed by a loud thud!"), COMBAT_MESSAGE_RANGE, src) - to_chat(src, span_danger("You shove [target.name], knocking [target.p_them()] down!")) - log_combat(src, target, "shoved", "knocking them down") - return - - target.visible_message(span_danger("[name] shoves [target.name]!"), - span_userdanger("You're shoved by [name]!"), span_hear("You hear aggressive shuffling!"), COMBAT_MESSAGE_RANGE, src) - to_chat(src, span_danger("You shove [target.name]!")) - - //Take their lunch money - var/target_held_item = target.get_active_held_item() - var/append_message = "" - if(!is_type_in_typecache(target_held_item, GLOB.shove_disarming_types)) //It's too expensive we'll get caught - target_held_item = null - - if(target_held_item && target.get_timed_status_effect_duration(/datum/status_effect/staggered)) - target.dropItemToGround(target_held_item) - append_message = "causing [target.p_them()] to drop [target_held_item]" - target.visible_message(span_danger("[target.name] drops \the [target_held_item]!"), - span_warning("You drop \the [target_held_item]!"), null, COMBAT_MESSAGE_RANGE) - - target.adjust_staggered_up_to(STAGGERED_SLOWDOWN_LENGTH, 10 SECONDS) - - log_combat(src, target, "shoved", append_message) - -/mob/living/carbon/proc/is_shove_knockdown_blocked() //If you want to add more things that block shove knockdown, extend this - for (var/obj/item/clothing/clothing in get_equipped_items()) - if(clothing.clothing_flags & BLOCKS_SHOVE_KNOCKDOWN) - return TRUE - return FALSE - /mob/living/carbon/blob_act(obj/structure/blob/B) if (stat == DEAD) return @@ -583,8 +439,8 @@ if(body_position != STANDING_UP && !resting && !buckled && !HAS_TRAIT(src, TRAIT_FLOORED)) get_up(TRUE) - if(!nosound) //NOVA EDIT ADDITION - EMOTES - playsound(loc, 'sound/weapons/thudswoosh.ogg', 50, TRUE, -1) + if(!nosound) // NOVA EDIT ADDITION - EMOTES + playsound(loc, 'sound/weapons/thudswoosh.ogg', 50, TRUE, -1) // NOVA EDIT CHANGE - EMOTES - Original was unindented but otherwise the same // Shake animation if (incapacitated()) @@ -750,12 +606,11 @@ if (!IS_ORGANIC_LIMB(limb)) . += (limb.brute_dam * limb.body_damage_coeff) + (limb.burn_dam * limb.body_damage_coeff) -/mob/living/carbon/grabbedby(mob/living/carbon/user, supress_message = FALSE) +/mob/living/carbon/grabbedby(mob/living/user, supress_message = FALSE, grabbed_part) // NOVA EDIT CHANGE - ORIGINAL: /mob/living/carbon/grabbedby(mob/living/user, supress_message = FALSE) if(user != src) return ..() - var/obj/item/bodypart/grasped_part = get_bodypart(zone_selected) - /* + var/obj/item/bodypart/grasped_part = grabbed_part ? grabbed_part : get_bodypart(zone_selected) // NOVA EDIT CHANGE - ORIGINAL: var/obj/item/bodypart/grasped_part = get_bodypart(zone_selected) if(!grasped_part?.can_be_grasped()) return var/starting_hand_index = active_hand_index @@ -776,8 +631,6 @@ QDEL_NULL(grasp) return grasp.grasp_limb(grasped_part) - */ // NOVA EDIT REMOVAL - MODULARIZED INTO grasp.dm's self_grasp_bleeding_limb !! IF THIS PROC IS UPDATED, PUT IT IN THERE !! - self_grasp_bleeding_limb(grasped_part, supress_message) /// If TRUE, the owner of this bodypart can try grabbing it to slow bleeding, as well as various other effects. /obj/item/bodypart/proc/can_be_grasped() @@ -888,6 +741,10 @@ organs -= organ_type GLOB.bioscrambler_valid_organs = organs +/mob/living/carbon/get_shove_flags(mob/living/shover, obj/item/weapon) + . = ..() + . |= SHOVE_CAN_STAGGER + if(IsKnockdown() && !IsParalyzed()) + . |= SHOVE_CAN_KICK_SIDE + #undef SHAKE_ANIMATION_OFFSET -#undef PERSONAL_SPACE_DAMAGE -#undef ASS_SLAP_EXTRA_RANGE diff --git a/code/modules/mob/living/carbon/carbon_update_icons.dm b/code/modules/mob/living/carbon/carbon_update_icons.dm index bb67d5a9635..5881efa7e69 100644 --- a/code/modules/mob/living/carbon/carbon_update_icons.dm +++ b/code/modules/mob/living/carbon/carbon_update_icons.dm @@ -278,8 +278,8 @@ update_held_items() update_worn_handcuffs() update_worn_legcuffs() - update_fire() update_body() + update_appearance(UPDATE_OVERLAYS) /mob/living/carbon/update_held_items() . = ..() @@ -315,27 +315,18 @@ hands += I.build_worn_icon(default_layer = HANDS_LAYER, default_icon_file = icon_file, isinhands = TRUE) return hands -/mob/living/carbon/update_fire_overlay(stacks, on_fire, last_icon_state, suffix = "") - var/fire_icon = "[dna?.species.fire_overlay || "human"]_[stacks > MOB_BIG_FIRE_STACK_THRESHOLD ? "big_fire" : "small_fire"][suffix]" +/mob/living/carbon/get_fire_overlay(stacks, on_fire) + var/fire_icon = "[dna?.species.fire_overlay || "human"]_[stacks > MOB_BIG_FIRE_STACK_THRESHOLD ? "big_fire" : "small_fire"]" if(!GLOB.fire_appearances[fire_icon]) - GLOB.fire_appearances[fire_icon] = mutable_appearance('icons/mob/effects/onfire.dmi', fire_icon, -FIRE_LAYER, appearance_flags = RESET_COLOR) + GLOB.fire_appearances[fire_icon] = mutable_appearance( + 'icons/mob/effects/onfire.dmi', + fire_icon, + -HIGHEST_LAYER, + appearance_flags = RESET_COLOR, + ) - if((stacks > 0 && on_fire) || HAS_TRAIT(src, TRAIT_PERMANENTLY_ONFIRE)) - if(fire_icon == last_icon_state) - return last_icon_state - - remove_overlay(FIRE_LAYER) - overlays_standing[FIRE_LAYER] = GLOB.fire_appearances[fire_icon] - apply_overlay(FIRE_LAYER) - return fire_icon - - if(!last_icon_state) - return last_icon_state - - remove_overlay(FIRE_LAYER) - apply_overlay(FIRE_LAYER) - return null + return GLOB.fire_appearances[fire_icon] /mob/living/carbon/update_damage_overlays() remove_overlay(DAMAGE_LAYER) @@ -416,6 +407,14 @@ */ //NOVA EDIT REMOVAL END +/mob/living/carbon/update_worn_legcuffs() + remove_overlay(LEGCUFF_LAYER) + clear_alert("legcuffed") + if(legcuffed) + overlays_standing[LEGCUFF_LAYER] = mutable_appearance('icons/mob/simple/mob.dmi', "legcuff1", -LEGCUFF_LAYER) + apply_overlay(LEGCUFF_LAYER) + throw_alert("legcuffed", /atom/movable/screen/alert/restrained/legcuffed, new_master = src.legcuffed) + //NOVA EDIT REMOVAL BEGIN - CUSTOMIZATION (moved to modular) /* /mob/living/carbon/update_worn_head() @@ -586,6 +585,7 @@ /obj/item/bodypart/proc/generate_husk_key() RETURN_TYPE(/list) . = list() + . += "[limb_id]-" . += "[husk_type]" . += "-husk" . += "-[body_zone]" diff --git a/code/modules/mob/living/carbon/human/_species.dm b/code/modules/mob/living/carbon/human/_species.dm index 0de67ef055d..e7561bf4a60 100644 --- a/code/modules/mob/living/carbon/human/_species.dm +++ b/code/modules/mob/living/carbon/human/_species.dm @@ -1132,9 +1132,6 @@ GLOBAL_LIST_EMPTY(features_by_species) if(SEND_SIGNAL(target, COMSIG_CARBON_PRE_HELP, user, attacker_style) & COMPONENT_BLOCK_HELP_ACT) return TRUE - if(attacker_style?.help_act(user, target) == MARTIAL_ATTACK_SUCCESS) - return TRUE - if(target.body_position == STANDING_UP || (target.appears_alive() && target.stat != SOFT_CRIT && target.stat != HARD_CRIT)) target.help_shake_act(user) if(target != user) @@ -1143,115 +1140,104 @@ GLOBAL_LIST_EMPTY(features_by_species) user.do_cpr(target) -/datum/species/proc/grab(mob/living/carbon/human/user, mob/living/carbon/human/target, datum/martial_art/attacker_style) - if(attacker_style?.grab_act(user, target) == MARTIAL_ATTACK_SUCCESS) - return TRUE - target.grabbedby(user) - return TRUE - ///This proc handles punching damage. IMPORTANT: Our owner is the TARGET and not the USER in this proc. For whatever reason... /datum/species/proc/harm(mob/living/carbon/human/user, mob/living/carbon/human/target, datum/martial_art/attacker_style) if(HAS_TRAIT(user, TRAIT_PACIFISM) && !attacker_style?.pacifist_style) to_chat(user, span_warning("You don't want to harm [target]!")) return FALSE - if(attacker_style?.harm_act(user,target) == MARTIAL_ATTACK_SUCCESS) - return TRUE - else - var/obj/item/organ/internal/brain/brain = user.get_organ_slot(ORGAN_SLOT_BRAIN) - var/obj/item/bodypart/attacking_bodypart - if(brain) - attacking_bodypart = brain.get_attacking_limb(target) - if(!attacking_bodypart) - attacking_bodypart = user.get_active_hand() - var/atk_verb = attacking_bodypart.unarmed_attack_verb - var/atk_effect = attacking_bodypart.unarmed_attack_effect - - if(atk_effect == ATTACK_EFFECT_BITE) - if(user.is_mouth_covered(ITEM_SLOT_MASK)) - to_chat(user, span_warning("You can't [atk_verb] with your mouth covered!")) - return FALSE - user.do_attack_animation(target, atk_effect) + var/obj/item/organ/internal/brain/brain = user.get_organ_slot(ORGAN_SLOT_BRAIN) + var/obj/item/bodypart/attacking_bodypart + if(brain) + attacking_bodypart = brain.get_attacking_limb(target) + if(!attacking_bodypart) + attacking_bodypart = user.get_active_hand() + var/atk_verb = attacking_bodypart.unarmed_attack_verb + var/atk_effect = attacking_bodypart.unarmed_attack_effect + + if(atk_effect == ATTACK_EFFECT_BITE) + if(user.is_mouth_covered(ITEM_SLOT_MASK)) + to_chat(user, span_warning("You can't [atk_verb] with your mouth covered!")) + return FALSE + user.do_attack_animation(target, atk_effect) - //has our target been shoved recently? If so, they're staggered and we get an easy hit. - var/staggered = FALSE + //has our target been shoved recently? If so, they're staggered and we get an easy hit. + var/staggered = FALSE - //Someone in a grapple is much more vulnerable to being harmed by punches. - var/grappled = FALSE + //Someone in a grapple is much more vulnerable to being harmed by punches. + var/grappled = FALSE - if(target.get_timed_status_effect_duration(/datum/status_effect/staggered)) - staggered = TRUE + if(target.get_timed_status_effect_duration(/datum/status_effect/staggered)) + staggered = TRUE - if(target.pulledby && target.pulledby.grab_state >= GRAB_AGGRESSIVE) - grappled = TRUE + if(target.pulledby && target.pulledby.grab_state >= GRAB_AGGRESSIVE) + grappled = TRUE - var/damage = rand(attacking_bodypart.unarmed_damage_low, attacking_bodypart.unarmed_damage_high) - var/limb_accuracy = attacking_bodypart.unarmed_effectiveness + var/damage = rand(attacking_bodypart.unarmed_damage_low, attacking_bodypart.unarmed_damage_high) + var/limb_accuracy = attacking_bodypart.unarmed_effectiveness - var/obj/item/bodypart/affecting = target.get_bodypart(target.get_random_valid_zone(user.zone_selected)) + var/obj/item/bodypart/affecting = target.get_bodypart(target.get_random_valid_zone(user.zone_selected)) - var/miss_chance = 100//calculate the odds that a punch misses entirely. considers stamina and brute damage of the puncher. punches miss by default to prevent weird cases - if(attacking_bodypart.unarmed_damage_low) - if((target.body_position == LYING_DOWN) || HAS_TRAIT(user, TRAIT_PERFECT_ATTACKER) || staggered) //kicks and attacks against staggered targets never miss (provided your species deals more than 0 damage) - miss_chance = 0 - else - miss_chance = clamp(UNARMED_MISS_CHANCE_BASE - limb_accuracy + user.getStaminaLoss() + (user.getBruteLoss()*0.5), 0, UNARMED_MISS_CHANCE_MAX) //Limb miss chance + various damage. capped at 80 so there is at least a chance to land a hit. - - if(!damage || !affecting || prob(miss_chance))//future-proofing for species that have 0 damage/weird cases where no zone is targeted - playsound(target.loc, attacking_bodypart.unarmed_miss_sound, 25, TRUE, -1) - target.visible_message(span_danger("[user]'s [atk_verb] misses [target]!"), \ - span_danger("You avoid [user]'s [atk_verb]!"), span_hear("You hear a swoosh!"), COMBAT_MESSAGE_RANGE, user) - to_chat(user, span_warning("Your [atk_verb] misses [target]!")) - log_combat(user, target, "attempted to punch") - return FALSE + var/miss_chance = 100//calculate the odds that a punch misses entirely. considers stamina and brute damage of the puncher. punches miss by default to prevent weird cases + if(attacking_bodypart.unarmed_damage_low) + if((target.body_position == LYING_DOWN) || HAS_TRAIT(user, TRAIT_PERFECT_ATTACKER) || staggered) //kicks and attacks against staggered targets never miss (provided your species deals more than 0 damage) + miss_chance = 0 + else + miss_chance = clamp(UNARMED_MISS_CHANCE_BASE - limb_accuracy + user.getStaminaLoss() + (user.getBruteLoss()*0.5), 0, UNARMED_MISS_CHANCE_MAX) //Limb miss chance + various damage. capped at 80 so there is at least a chance to land a hit. + + if(!damage || !affecting || prob(miss_chance))//future-proofing for species that have 0 damage/weird cases where no zone is targeted + playsound(target.loc, attacking_bodypart.unarmed_miss_sound, 25, TRUE, -1) + target.visible_message(span_danger("[user]'s [atk_verb] misses [target]!"), \ + span_danger("You avoid [user]'s [atk_verb]!"), span_hear("You hear a swoosh!"), COMBAT_MESSAGE_RANGE, user) + to_chat(user, span_warning("Your [atk_verb] misses [target]!")) + log_combat(user, target, "attempted to punch") + return FALSE - var/armor_block = target.run_armor_check(affecting, MELEE) - - playsound(target.loc, attacking_bodypart.unarmed_attack_sound || get_sfx("punch"), 25, TRUE, -1) // NOVA EDIT - ORIGINAL: playsound(target.loc, attacking_bodypart.unarmed_attack_sound, 25, TRUE, -1) - - if(grappled && attacking_bodypart.grappled_attack_verb) - atk_verb = attacking_bodypart.grappled_attack_verb - target.visible_message(span_danger("[user] [atk_verb]ed [target]!"), \ - span_userdanger("You're [atk_verb]ed by [user]!"), span_hear("You hear a sickening sound of flesh hitting flesh!"), COMBAT_MESSAGE_RANGE, user) - to_chat(user, span_danger("You [atk_verb] [target]!")) - - target.lastattacker = user.real_name - target.lastattackerckey = user.ckey - - if(user.limb_destroyer) - target.dismembering_strike(user, affecting.body_zone) - - var/attack_direction = get_dir(user, target) - var/attack_type = attacking_bodypart.attack_type - var/unarmed_sharpness = attacking_bodypart.unarmed_sharpness //NOVA EDIT ADDITION - If unarmed damage sharpness needs to be taken into account. - if(atk_effect == ATTACK_EFFECT_KICK || grappled) //kicks and punches when grappling bypass armor slightly. - if(damage >= 9) - target.force_say() - log_combat(user, target, grappled ? "grapple punched" : "kicked") - target.apply_damage(damage, attack_type, affecting, armor_block - limb_accuracy, attack_direction = attack_direction) - target.apply_damage(damage*1.5, STAMINA, affecting, armor_block - limb_accuracy) - else // Normal attacks do not gain the benefit of armor penetration. - target.apply_damage(damage, attack_type, affecting, armor_block, attack_direction = attack_direction, sharpness = unarmed_sharpness) //NOVA EDIT - Applies sharpness if it does - ORIGINAL: target.apply_damage(damage, attack_type, affecting, armor_block, attack_direction = attack_direction) - target.apply_damage(damage*1.5, STAMINA, affecting, armor_block) - if(damage >= 9) - target.force_say() - log_combat(user, target, "punched") - - //If we rolled a punch high enough to hit our stun threshold, or our target is staggered and they have at least 40 damage+stamina loss, we knock them down - if((target.stat != DEAD) && prob(limb_accuracy) || (target.stat != DEAD) && staggered && (target.getStaminaLoss() + user.getBruteLoss()) >= 40) - target.visible_message(span_danger("[user] knocks [target] down!"), \ - span_userdanger("You're knocked down by [user]!"), span_hear("You hear aggressive shuffling followed by a loud thud!"), COMBAT_MESSAGE_RANGE, user) - to_chat(user, span_danger("You knock [target] down!")) - /* NOVA EDIT REMOVAL - Less combat lethality and hard stungs - var/knockdown_duration = 4 SECONDS + (target.getStaminaLoss() + (target.getBruteLoss()*0.5))*0.8 //50 total damage = 4 second base stun + 4 second stun modifier = 8 second knockdown duration - target.apply_effect(knockdown_duration, EFFECT_KNOCKDOWN, armor_block) - */ // SKYRAT REMOVAL END - target.StaminaKnockdown(20) //NOVA EDIT ADDITION - log_combat(user, target, "got a stun punch with their previous punch") + var/armor_block = target.run_armor_check(affecting, MELEE) + + playsound(target.loc, attacking_bodypart.unarmed_attack_sound, 25, TRUE, -1) + + if(grappled && attacking_bodypart.grappled_attack_verb) + atk_verb = attacking_bodypart.grappled_attack_verb + target.visible_message(span_danger("[user] [atk_verb]ed [target]!"), \ + span_userdanger("You're [atk_verb]ed by [user]!"), span_hear("You hear a sickening sound of flesh hitting flesh!"), COMBAT_MESSAGE_RANGE, user) + to_chat(user, span_danger("You [atk_verb] [target]!")) + + target.lastattacker = user.real_name + target.lastattackerckey = user.ckey + + if(user.limb_destroyer) + target.dismembering_strike(user, affecting.body_zone) + + var/attack_direction = get_dir(user, target) + var/attack_type = attacking_bodypart.attack_type + var/unarmed_sharpness = attacking_bodypart.unarmed_sharpness //NOVA EDIT ADDITION - If unarmed damage sharpness needs to be taken into account. + if(atk_effect == ATTACK_EFFECT_KICK || grappled) //kicks and punches when grappling bypass armor slightly. + if(damage >= 9) + target.force_say() + log_combat(user, target, grappled ? "grapple punched" : "kicked") + target.apply_damage(damage, attack_type, affecting, armor_block - limb_accuracy, attack_direction = attack_direction) + target.apply_damage(damage*1.5, STAMINA, affecting, armor_block - limb_accuracy) + else // Normal attacks do not gain the benefit of armor penetration. + target.apply_damage(damage, attack_type, affecting, armor_block, attack_direction = attack_direction, sharpness = unarmed_sharpness) //NOVA EDIT - Applies sharpness if it does - ORIGINAL: target.apply_damage(damage, attack_type, affecting, armor_block, attack_direction = attack_direction) + target.apply_damage(damage*1.5, STAMINA, affecting, armor_block) + if(damage >= 9) + target.force_say() + log_combat(user, target, "punched") + + //If we rolled a punch high enough to hit our stun threshold, or our target is staggered and they have at least 40 damage+stamina loss, we knock them down + if((target.stat != DEAD) && prob(limb_accuracy) || (target.stat != DEAD) && staggered && (target.getStaminaLoss() + user.getBruteLoss()) >= 40) + target.visible_message(span_danger("[user] knocks [target] down!"), \ + span_userdanger("You're knocked down by [user]!"), span_hear("You hear aggressive shuffling followed by a loud thud!"), COMBAT_MESSAGE_RANGE, user) + to_chat(user, span_danger("You knock [target] down!")) + /* NOVA EDIT REMOVAL - Less combat lethality and hard stuns + var/knockdown_duration = 4 SECONDS + (target.getStaminaLoss() + (target.getBruteLoss()*0.5))*0.8 //50 total damage = 4 second base stun + 4 second stun modifier = 8 second knockdown duration + target.apply_effect(knockdown_duration, EFFECT_KNOCKDOWN, armor_block) + NOVA EDIT REMOVAL END */ + target.StaminaKnockdown(20) //NOVA EDIT ADDITION + log_combat(user, target, "got a stun punch with their previous punch") /datum/species/proc/disarm(mob/living/carbon/human/user, mob/living/carbon/human/target, datum/martial_art/attacker_style) - if(attacker_style?.disarm_act(user,target) == MARTIAL_ATTACK_SUCCESS) - return TRUE if(user.body_position != STANDING_UP) return FALSE if(user == target) diff --git a/code/modules/mob/living/carbon/human/emote.dm b/code/modules/mob/living/carbon/human/emote.dm index e3bbca427b2..7d9627f1825 100644 --- a/code/modules/mob/living/carbon/human/emote.dm +++ b/code/modules/mob/living/carbon/human/emote.dm @@ -136,10 +136,12 @@ if(!.) return var/obj/item/organ/external/tail/oranges_accessory = user.get_organ_slot(ORGAN_SLOT_EXTERNAL_TAIL) + //I am so sorry my son + //We bypass helpers here cause we already have the tail if(oranges_accessory.wag_flags & WAG_WAGGING) //We verified the tail exists in can_run_emote() - SEND_SIGNAL(user, COMSIG_ORGAN_WAG_TAIL, FALSE) + oranges_accessory.stop_wag(user) else - SEND_SIGNAL(user, COMSIG_ORGAN_WAG_TAIL, TRUE) + oranges_accessory.start_wag(user) /datum/emote/living/carbon/human/wag/select_message_type(mob/user, intentional) . = ..() diff --git a/code/modules/mob/living/carbon/human/human.dm b/code/modules/mob/living/carbon/human/human.dm index 5c2a6ac43af..27b2b2e2f24 100644 --- a/code/modules/mob/living/carbon/human/human.dm +++ b/code/modules/mob/living/carbon/human/human.dm @@ -29,6 +29,8 @@ AddElement(/datum/element/strippable, GLOB.strippable_human_items, TYPE_PROC_REF(/mob/living/carbon/human/, should_strip)) var/static/list/loc_connections = list( COMSIG_ATOM_ENTERED = PROC_REF(on_entered), + COMSIG_LIVING_DISARM_PRESHOVE = PROC_REF(disarm_precollide), + COMSIG_LIVING_DISARM_COLLIDE = PROC_REF(disarm_collision), ) AddElement(/datum/element/connect_loc, loc_connections) GLOB.human_list += src diff --git a/code/modules/mob/living/carbon/human/human_defense.dm b/code/modules/mob/living/carbon/human/human_defense.dm index 0435be5d3be..b0e4c79b86d 100644 --- a/code/modules/mob/living/carbon/human/human_defense.dm +++ b/code/modules/mob/living/carbon/human/human_defense.dm @@ -109,7 +109,7 @@ return FALSE -/mob/living/carbon/human/grippedby(mob/living/user, instant = FALSE) +/mob/living/carbon/human/grippedby(mob/living/carbon/user, instant = FALSE) if(w_uniform) w_uniform.add_fingerprint(user) ..() @@ -129,20 +129,35 @@ apply_damage(15, BRUTE, wound_bonus=10) /mob/living/carbon/human/attack_hand(mob/user, list/modifiers) - if(..()) //to allow surgery to return properly. - return + . = ..() + if(.) + return TRUE if(ishuman(user)) var/mob/living/carbon/human/H = user dna.species.spec_attack_hand(H, src, null, modifiers) +/mob/living/carbon/human/proc/disarm_precollide(datum/source, mob/living/shover, mob/living/target, obj/item/weapon) + SIGNAL_HANDLER + return COMSIG_LIVING_ACT_SOLID + +/mob/living/carbon/human/proc/disarm_collision(datum/source, mob/living/shover, mob/living/target, shove_flags, obj/item/weapon) + SIGNAL_HANDLER + if(src == target || LAZYFIND(target.buckled_mobs, src) || !iscarbon(target)) + return + if(!(shove_flags & SHOVE_KNOCKDOWN_BLOCKED)) + target.Knockdown(SHOVE_KNOCKDOWN_HUMAN) + if(!HAS_TRAIT(src, TRAIT_SHOVE_KNOCKDOWN_BLOCKED)) + Knockdown(SHOVE_KNOCKDOWN_COLLATERAL) + target.visible_message(span_danger("[shover] shoves [target.name] into [name]!"), + span_userdanger("You're shoved into [name] by [shover]!"), span_hear("You hear aggressive shuffling followed by a loud thud!"), COMBAT_MESSAGE_RANGE, src) + to_chat(src, span_danger("You shove [target.name] into [name]!")) + log_combat(shover, target, "shoved", addition = "into [name][weapon ? " with [weapon]" : ""]") + return COMSIG_LIVING_SHOVE_HANDLED + /mob/living/carbon/human/attack_paw(mob/living/carbon/human/user, list/modifiers) var/dam_zone = pick(BODY_ZONE_CHEST, BODY_ZONE_PRECISE_L_HAND, BODY_ZONE_PRECISE_R_HAND, BODY_ZONE_L_LEG, BODY_ZONE_R_LEG) var/obj/item/bodypart/affecting = get_bodypart(get_random_valid_zone(dam_zone)) - var/martial_result = user.apply_martial_art(src, modifiers) - if (martial_result != MARTIAL_ATTACK_INVALID) - return martial_result - if(LAZYACCESS(modifiers, RIGHT_CLICK)) //Always drop item in hand, if no item, get stunned instead. var/obj/item/I = get_active_held_item() if(I && !(I.item_flags & ABSTRACT) && dropItemToGround(I)) diff --git a/code/modules/mob/living/carbon/human/human_say.dm b/code/modules/mob/living/carbon/human/human_say.dm index 7a659f055b6..7b250ef7a03 100644 --- a/code/modules/mob/living/carbon/human/human_say.dm +++ b/code/modules/mob/living/carbon/human/human_say.dm @@ -9,16 +9,13 @@ message = tongueless_upper.Replace(message, pick("AA","OO","'")) return ..() -/mob/living/carbon/human/say_mod(input, list/message_mods = list()) +/mob/living/carbon/human/get_default_say_verb() var/obj/item/organ/internal/tongue/tongue = get_organ_slot(ORGAN_SLOT_TONGUE) - if(!tongue) + if(isnull(tongue)) if(HAS_TRAIT(src, TRAIT_SIGN_LANG)) - verb_say = "signs" - else - verb_say = "gurgles" - else - verb_say = tongue.temp_say_mod || tongue.say_mod - return ..() + return "signs" + return "gurgles" + return tongue.temp_say_mod || tongue.say_mod || ..() /mob/living/carbon/human/GetVoice() if(HAS_TRAIT(src, TRAIT_UNKNOWN)) 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 996a67ec26a..3ea41f2302b 100644 --- a/code/modules/mob/living/carbon/human/human_update_icons.dm +++ b/code/modules/mob/living/carbon/human/human_update_icons.dm @@ -187,18 +187,16 @@ There are several things that need to be remembered: inv.update_icon() //Bloody hands begin - var/mutable_appearance/bloody_overlay = mutable_appearance('icons/effects/blood.dmi', "bloodyhands", -GLOVES_LAYER) - cut_overlay(bloody_overlay) + var/mutable_appearance/bloody_lefthand_overlay = mutable_appearance('icons/effects/blood.dmi', "bloodyhands_left", -GLOVES_LAYER) + var/mutable_appearance/bloody_righthand_overlay = mutable_appearance('icons/effects/blood.dmi', "bloodyhands_right", -GLOVES_LAYER) + cut_overlay(bloody_lefthand_overlay) + cut_overlay(bloody_righthand_overlay) if(!gloves && blood_in_hands && (num_hands > 0)) - bloody_overlay = mutable_appearance('icons/effects/blood.dmi', "bloodyhands", -GLOVES_LAYER) - if(num_hands < 2) - if(has_left_hand(FALSE)) - bloody_overlay.icon_state = "bloodyhands_left" - else if(has_right_hand(FALSE)) - bloody_overlay.icon_state = "bloodyhands_right" - - add_overlay(bloody_overlay) - //Bloody hands end + if(has_left_hand(check_disabled = FALSE)) + add_overlay(bloody_lefthand_overlay) + if(has_right_hand(check_disabled = FALSE)) + add_overlay(bloody_righthand_overlay) + // Bloody hands end if(gloves) var/obj/item/worn_item = gloves @@ -375,15 +373,15 @@ There are several things that need to be remembered: if((bodytype & BODYTYPE_DIGITIGRADE) && (worn_item.supports_variations_flags & CLOTHING_DIGITIGRADE_VARIATION)) var/obj/item/bodypart/leg = src.get_bodypart(BODY_ZONE_L_LEG) - if(leg.limb_id == "digitigrade")//Snowflakey and bad. But it makes it look consistent. + if(leg.limb_id == "digitigrade" || leg.bodytype & BODYTYPE_DIGITIGRADE)//Snowflakey and bad. But it makes it look consistent. icon_file = worn_item.worn_icon_digi || DIGITIGRADE_SHOES_FILE // NOVA EDIT CHANGE mutant_override = TRUE // NOVA EDIT ADDITION - else if(bodytype & BODYTYPE_CUSTOM) + if(!mutant_override && bodytype & BODYTYPE_CUSTOM) var/species_icon_file = dna.species.generate_custom_worn_icon(LOADOUT_ITEM_SHOES, shoes, src) if(species_icon_file) icon_file = species_icon_file mutant_override = TRUE - else if(bodytype & BODYTYPE_HIDE_SHOES) + if(bodytype & BODYTYPE_HIDE_SHOES) return // We just don't want shoes that float if we're not displaying legs (useful for taurs, for now) // NOVA EDIT END @@ -528,7 +526,7 @@ There are several things that need to be remembered: icon_file = worn_item.worn_icon_digi || DIGITIGRADE_SUIT_FILE // NOVA EDIT CHANGE mutant_override = TRUE - else if(bodytype & BODYTYPE_CUSTOM) + if(!mutant_override && bodytype & BODYTYPE_CUSTOM) var/species_icon_file = dna.species.generate_custom_worn_icon(LOADOUT_ITEM_SUIT, wear_suit, src) if(species_icon_file) icon_file = species_icon_file @@ -654,14 +652,6 @@ There are several things that need to be remembered: overlays_standing[BACK_LAYER] = back_overlay apply_overlay(BACK_LAYER) -/mob/living/carbon/human/update_worn_legcuffs() - remove_overlay(LEGCUFF_LAYER) - clear_alert("legcuffed") - if(legcuffed) - overlays_standing[LEGCUFF_LAYER] = mutable_appearance('icons/mob/simple/mob.dmi', "legcuff1", -LEGCUFF_LAYER) - apply_overlay(LEGCUFF_LAYER) - throw_alert("legcuffed", /atom/movable/screen/alert/restrained/legcuffed, new_master = src.legcuffed) - /mob/living/carbon/human/get_held_overlays() var/list/hands = list() for(var/obj/item/worn_item in held_items) diff --git a/code/modules/mob/living/carbon/human/inventory.dm b/code/modules/mob/living/carbon/human/inventory.dm index bf3c3080e5a..1a8c07865ce 100644 --- a/code/modules/mob/living/carbon/human/inventory.dm +++ b/code/modules/mob/living/carbon/human/inventory.dm @@ -106,37 +106,11 @@ s_store, ) -/// Returns items which are currently visible on the mob -/mob/living/carbon/human/proc/get_visible_items() - var/static/list/visible_slots = list( - ITEM_SLOT_OCLOTHING, - ITEM_SLOT_ICLOTHING, - ITEM_SLOT_GLOVES, - ITEM_SLOT_EYES, - ITEM_SLOT_EARS, - ITEM_SLOT_MASK, - ITEM_SLOT_HEAD, - ITEM_SLOT_FEET, - ITEM_SLOT_ID, - ITEM_SLOT_BELT, - ITEM_SLOT_BACK, - ITEM_SLOT_NECK, - ITEM_SLOT_HANDS, - ITEM_SLOT_BACKPACK, - ITEM_SLOT_SUITSTORE, - ITEM_SLOT_HANDCUFFED, - ITEM_SLOT_LEGCUFFED, - ) - var/list/obscured = check_obscured_slots() - var/list/visible_items = list() - for (var/slot in visible_slots) - if (obscured & slot) - continue - var/obj/item/equipped = get_item_by_slot(slot) - if (equipped) - visible_items += equipped - for (var/obj/item/held in held_items) - visible_items += held +/mob/living/carbon/human/get_visible_items() + var/list/visible_items = ..() + var/obj/item/clothing/under/under = w_uniform + if(istype(under) && length(under.attached_accessories) && (under in visible_items)) + visible_items += under.attached_accessories return visible_items //This is an UNSAFE proc. Use mob_can_equip() before calling this one! Or rather use equip_to_slot_if_possible() or advanced_equip_to_slot_if_possible() @@ -235,11 +209,8 @@ return not_handled //For future deeper overrides -/mob/living/carbon/human/equipped_speed_mods() - . = ..() - for(var/sloties in get_all_worn_items() - list(l_store, r_store, s_store)) - var/obj/item/thing = sloties - . += thing?.slowdown +/mob/living/carbon/human/get_equipped_speed_mod_items() + return ..() - list(l_store, r_store, s_store) /mob/living/carbon/human/doUnEquip(obj/item/I, force, newloc, no_move, invdrop = TRUE, silent = FALSE) . = ..() //See mob.dm for an explanation on this and some rage about people copypasting instead of calling ..() like they should. @@ -458,11 +429,10 @@ if(!equipped_item.atom_storage?.attempt_insert(thing, src)) to_chat(src, span_warning("You can't fit [thing] into your [equipped_item.name]!")) return - var/atom/real_location = storage.real_location?.resolve() - if(!real_location.contents.len) // nothing to take out + if(!storage.real_location.contents.len) // nothing to take out to_chat(src, span_warning("There's nothing in your [equipped_item.name] to take out!")) return - var/obj/item/stored = real_location.contents[real_location.contents.len] + var/obj/item/stored = storage.real_location.contents[storage.real_location.contents.len] if(!stored || stored.on_found(src)) return stored.attack_hand(src) // take out thing from item in storage slot diff --git a/code/modules/mob/living/carbon/human/species_types/dullahan.dm b/code/modules/mob/living/carbon/human/species_types/dullahan.dm index 597a54660bc..ce720e66789 100644 --- a/code/modules/mob/living/carbon/human/species_types/dullahan.dm +++ b/code/modules/mob/living/carbon/human/species_types/dullahan.dm @@ -52,9 +52,10 @@ human.put_in_hands(head) // We want to give the head some boring old eyes just so it doesn't look too jank on the head sprite. - head.eyes = new /obj/item/organ/internal/eyes(head) - head.eyes.eye_color_left = human.eye_color_left - head.eyes.eye_color_right = human.eye_color_right + var/obj/item/organ/internal/eyes/eyes = new /obj/item/organ/internal/eyes(head) + eyes.eye_color_left = human.eye_color_left + eyes.eye_color_right = human.eye_color_right + eyes.bodypart_insert(my_head) human.update_body() head.update_icon_dropped() human.set_safe_hunger_level() @@ -248,7 +249,8 @@ return // It's so over detached_head.real_name = wearer.real_name detached_head.name = wearer.real_name - detached_head.brain.name = "[wearer.name]'s brain" + var/obj/item/organ/internal/brain/brain = locate(/obj/item/organ/internal/brain) in detached_head + brain.name = "[wearer.name]'s brain" /obj/item/dullahan_relay/proc/examinate_check(mob/user, atom/source) SIGNAL_HANDLER diff --git a/code/modules/mob/living/carbon/human/species_types/ethereal.dm b/code/modules/mob/living/carbon/human/species_types/ethereal.dm index e2440ea1caf..a045bfd3bd4 100644 --- a/code/modules/mob/living/carbon/human/species_types/ethereal.dm +++ b/code/modules/mob/living/carbon/human/species_types/ethereal.dm @@ -41,12 +41,6 @@ var/current_color var/default_color - var/r1 - var/g1 - var/b1 - var/static/r2 = 237 - var/static/g2 = 164 - var/static/b2 = 149 var/EMPeffect = FALSE var/emageffect = FALSE var/obj/effect/dummy/lighting_obj/ethereal_light @@ -61,9 +55,6 @@ return default_color = new_ethereal.dna.features["ethcolor"] fixed_hair_color = default_color - r1 = GETREDPART(default_color) - g1 = GETGREENPART(default_color) - b1 = GETBLUEPART(default_color) RegisterSignal(new_ethereal, COMSIG_ATOM_EMAG_ACT, PROC_REF(on_emag_act)) RegisterSignal(new_ethereal, COMSIG_ATOM_EMP_ACT, PROC_REF(on_emp_act)) RegisterSignal(new_ethereal, COMSIG_HIT_BY_SABOTEUR, PROC_REF(on_saboteur)) @@ -116,15 +107,16 @@ SIGNAL_HANDLER if(isnull(ethereal_light)) return - if(default_color != ethereal.dna.features["ethcolor"]) - var/new_color = ethereal.dna.features["ethcolor"] - r1 = GETREDPART(new_color) - g1 = GETGREENPART(new_color) - b1 = GETBLUEPART(new_color) if(ethereal.stat != DEAD && !EMPeffect) var/healthpercent = max(ethereal.health, 0) / 100 if(!emageffect) - current_color = rgb(r2 + ((r1-r2)*healthpercent), g2 + ((g1-g2)*healthpercent), b2 + ((b1-b2)*healthpercent)) + var/static/list/skin_color = rgb2num("#eda495") + var/list/colors = rgb2num(ethereal.dna.features["ethcolor"]) + var/list/built_color = list() + for(var/i in 1 to 3) + built_color += skin_color[i] + ((colors[i] - skin_color[i]) * healthpercent) + current_color = rgb(built_color[1], built_color[2], built_color[3]) + ethereal_light.set_light_range_power_color(1 + (2 * healthpercent), 1 + (1 * healthpercent), current_color) ethereal_light.set_light_on(TRUE) fixed_mut_color = current_color diff --git a/code/modules/mob/living/carbon/human/species_types/golems.dm b/code/modules/mob/living/carbon/human/species_types/golems.dm index 01451a8db36..612328e749e 100644 --- a/code/modules/mob/living/carbon/human/species_types/golems.dm +++ b/code/modules/mob/living/carbon/human/species_types/golems.dm @@ -18,6 +18,7 @@ TRAIT_RADIMMUNE, TRAIT_SNOWSTORM_IMMUNE, // Shared with plasma river... but I guess if you can survive a plasma river a blizzard isn't a big deal TRAIT_UNHUSKABLE, + TRAIT_BOULDER_BREAKER, ) mutantheart = null mutantlungs = null @@ -87,7 +88,7 @@ SPECIES_PERK_TYPE = SPECIES_POSITIVE_PERK, SPECIES_PERK_ICON = "pickaxe", SPECIES_PERK_NAME = "Natural Miners", - SPECIES_PERK_DESC = "Golems can see dimly in the dark, sense minerals, and mine stone with their bare hands. \ + SPECIES_PERK_DESC = "Golems can see dimly in the dark, sense minerals, break boulders, and mine stone with their bare hands. \ They can even smelt ores in an internal furnace, if their surrounding environment is hot enough.", )) diff --git a/code/modules/mob/living/carbon/human/species_types/mushpeople.dm b/code/modules/mob/living/carbon/human/species_types/mushpeople.dm index 59099cec175..a16d9e92637 100644 --- a/code/modules/mob/living/carbon/human/species_types/mushpeople.dm +++ b/code/modules/mob/living/carbon/human/species_types/mushpeople.dm @@ -45,12 +45,13 @@ if(!H.dna.mutant_bodyparts["caps"] || H.dna.mutant_bodyparts["caps"][MUTANT_INDEX_NAME] != "None") // NOVA EDIT - Customization - ORIGINAL: if(!H.dna.features["caps"]) H.dna.mutant_bodyparts["caps"] = list(MUTANT_INDEX_NAME = "Round", MUTANT_INDEX_COLOR_LIST = list(H.hair_color)) // NOVA EDIT - Customization - ORIGINAL: H.dna.features["caps"] = "Round" handle_mutant_bodyparts(H) - mush = new(null) - mush.teach(H) + mush = new() + mush.teach(C) + mush.allow_temp_override = FALSE /datum/species/mush/on_species_loss(mob/living/carbon/C) . = ..() - mush.remove(C) + mush.fully_remove(C) QDEL_NULL(mush) /datum/species/mush/handle_chemical(datum/reagent/chem, mob/living/carbon/human/affected, seconds_per_tick, times_fired) 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 eaabee63485..b6fe0234bac 100644 --- a/code/modules/mob/living/carbon/human/species_types/plasmamen.dm +++ b/code/modules/mob/living/carbon/human/species_types/plasmamen.dm @@ -116,7 +116,7 @@ else internal_fire = FALSE - H.update_fire() + H.update_appearance(UPDATE_OVERLAYS) /datum/species/plasmaman/handle_fire(mob/living/carbon/human/H, seconds_per_tick, no_protection = FALSE) if(internal_fire) diff --git a/code/modules/mob/living/carbon/init_signals.dm b/code/modules/mob/living/carbon/init_signals.dm index 190fe9d8453..e64410ab635 100644 --- a/code/modules/mob/living/carbon/init_signals.dm +++ b/code/modules/mob/living/carbon/init_signals.dm @@ -13,12 +13,6 @@ RegisterSignal(src, SIGNAL_ADDTRAIT(TRAIT_TOXIMMUNE), PROC_REF(on_toximmune_trait_gain)) RegisterSignal(src, SIGNAL_ADDTRAIT(TRAIT_GENELESS), PROC_REF(on_geneless_trait_gain)) - - RegisterSignals(src, list( - SIGNAL_ADDTRAIT(TRAIT_PERMANENTLY_ONFIRE), - SIGNAL_REMOVETRAIT(TRAIT_PERMANENTLY_ONFIRE), - ), PROC_REF(update_permanently_on_fire)) - /** * On gain of TRAIT_AGENDER * @@ -90,12 +84,6 @@ reagents.end_metabolization(keep_liverless = TRUE) -///On gain of TRAIT_PERMANENTLY_ONFIRE, update the visuals if not on fire -/mob/living/carbon/proc/update_permanently_on_fire(datum/source) - SIGNAL_HANDLER - if(!on_fire) - update_fire() - /** * On gain of TRAIT_VIRUSIMMUNE * diff --git a/code/modules/mob/living/carbon/inventory.dm b/code/modules/mob/living/carbon/inventory.dm index a375dbe878d..e0a24d0ab51 100644 --- a/code/modules/mob/living/carbon/inventory.dm +++ b/code/modules/mob/living/carbon/inventory.dm @@ -49,6 +49,39 @@ legcuffed, ) +/// Returns items which are currently visible on the mob +/mob/living/carbon/proc/get_visible_items() + var/static/list/visible_slots = list( + ITEM_SLOT_OCLOTHING, + ITEM_SLOT_ICLOTHING, + ITEM_SLOT_GLOVES, + ITEM_SLOT_EYES, + ITEM_SLOT_EARS, + ITEM_SLOT_MASK, + ITEM_SLOT_HEAD, + ITEM_SLOT_FEET, + ITEM_SLOT_ID, + ITEM_SLOT_BELT, + ITEM_SLOT_BACK, + ITEM_SLOT_NECK, + ITEM_SLOT_HANDS, + ITEM_SLOT_BACKPACK, + ITEM_SLOT_SUITSTORE, + ITEM_SLOT_HANDCUFFED, + ITEM_SLOT_LEGCUFFED, + ) + var/list/obscured = check_obscured_slots() + var/list/visible_items = list() + for (var/slot in visible_slots) + if (obscured & slot) + continue + var/obj/item/equipped = get_item_by_slot(slot) + if (equipped) + visible_items += equipped + for (var/obj/item/held in held_items) + visible_items += held + return visible_items + /mob/living/carbon/proc/equip_in_one_of_slots(obj/item/equipping, list/slots, qdel_on_fail = TRUE, indirect_action = FALSE) for(var/slot in slots) if(equip_to_slot_if_possible(equipping, slots[slot], disable_warning = TRUE, indirect_action = indirect_action)) @@ -128,6 +161,9 @@ return not_handled +/mob/living/carbon/get_equipped_speed_mod_items() + return ..() + get_all_worn_items() + /// This proc is called after an item has been successfully handled and equipped to a slot. /mob/living/carbon/proc/has_equipped(obj/item/item, slot, initial = FALSE) return item.on_equipped(src, slot, initial) diff --git a/code/modules/mob/living/living.dm b/code/modules/mob/living/living.dm index 2e735212c5e..0a358ada801 100644 --- a/code/modules/mob/living/living.dm +++ b/code/modules/mob/living/living.dm @@ -773,10 +773,10 @@ /mob/living/get_contents() var/list/ret = list() ret |= contents //add our contents - for(var/atom/iter_atom as anything in ret.Copy()) //iterate storage objects - iter_atom.atom_storage?.return_inv(ret) - for(var/obj/item/folder/F in ret.Copy()) //very snowflakey-ly iterate folders - ret |= F.contents + for(var/atom/iter_atom as anything in ret) //iterate storage objects + ret |= iter_atom.atom_storage?.return_inv() + for(var/obj/item/folder/folder in ret) //very snowflakey-ly iterate folders + ret |= folder.contents return ret /** @@ -1051,8 +1051,11 @@ var/mob/living/L = pulledby L.set_pull_offsets(src, pulledby.grab_state) - if(active_storage && !((active_storage.parent?.resolve() in important_recursive_contents?[RECURSIVE_CONTENTS_ACTIVE_STORAGE]) || CanReach(active_storage.parent?.resolve(),view_only = TRUE))) - active_storage.hide_contents(src) + if(active_storage) + var/storage_is_important_recurisve = (active_storage.parent in important_recursive_contents?[RECURSIVE_CONTENTS_ACTIVE_STORAGE]) + var/can_reach_active_storage = CanReach(active_storage.parent, view_only = TRUE) + if(!storage_is_important_recurisve && !can_reach_active_storage) + active_storage.hide_contents(src) if(body_position == LYING_DOWN && !buckled && prob(getBruteLoss()*200/maxHealth)) makeTrail(newloc, T, old_direction) @@ -1652,11 +1655,6 @@ GLOBAL_LIST_EMPTY(fire_appearances) return fire_status.ignite(silent) -/mob/living/proc/update_fire() - var/datum/status_effect/fire_handler/fire_stacks/fire_stacks = has_status_effect(/datum/status_effect/fire_handler/fire_stacks) - if(fire_stacks) - fire_stacks.update_overlay() - /** * Extinguish all fire on the mob * @@ -1664,7 +1662,7 @@ GLOBAL_LIST_EMPTY(fire_appearances) * Signals the extinguishing. */ /mob/living/proc/extinguish_mob() - if(HAS_TRAIT(src, TRAIT_PERMANENTLY_ONFIRE)) //The everlasting flames will not be extinguished + if(HAS_TRAIT(src, TRAIT_NO_EXTINGUISH)) //The everlasting flames will not be extinguished return var/datum/status_effect/fire_handler/fire_stacks/fire_status = has_status_effect(/datum/status_effect/fire_handler/fire_stacks) if(!fire_status || !fire_status.on_fire) @@ -1683,13 +1681,13 @@ GLOBAL_LIST_EMPTY(fire_appearances) /mob/living/proc/adjust_fire_stacks(stacks, fire_type = /datum/status_effect/fire_handler/fire_stacks) if(stacks < 0) - if(HAS_TRAIT(src, TRAIT_PERMANENTLY_ONFIRE)) //You can't reduce fire stacks of the everlasting flames + if(HAS_TRAIT(src, TRAIT_NO_EXTINGUISH)) //You can't reduce fire stacks of the everlasting flames return stacks = max(-fire_stacks, stacks) apply_status_effect(fire_type, stacks) /mob/living/proc/adjust_wet_stacks(stacks, wet_type = /datum/status_effect/fire_handler/wet_stacks) - if(HAS_TRAIT(src, TRAIT_PERMANENTLY_ONFIRE)) //The everlasting flames will not be extinguished + if(HAS_TRAIT(src, TRAIT_NO_EXTINGUISH)) //The everlasting flames will not be extinguished return if(stacks < 0) stacks = max(fire_stacks, stacks) @@ -1767,19 +1765,18 @@ GLOBAL_LIST_EMPTY(fire_appearances) ignite_mob() /** - * Sets fire overlay of the mob. + * Gets the fire overlay to use for this mob * - * Vars: + * Args: * * stacks: Current amount of fire_stacks * * on_fire: If we're lit on fire - * * last_icon_state: Holds last fire overlay icon state, used for optimization - * * suffix: Suffix for the fire icon state for special fire types * - * This should return last_icon_state for the fire status efect + * Return a mutable appearance, the overlay that will be applied. */ -/mob/living/proc/update_fire_overlay(stacks, on_fire, last_icon_state, suffix = "") - return last_icon_state +/mob/living/proc/get_fire_overlay(stacks, on_fire) + RETURN_TYPE(/mutable_appearance) + return null /** * Handles effects happening when mob is on normal fire @@ -2119,7 +2116,11 @@ GLOBAL_LIST_EMPTY(fire_appearances) ///Checks if the user is incapacitated or on cooldown. /mob/living/proc/can_look_up() - return !(incapacitated(IGNORE_RESTRAINTS)) + if(next_move > world.time) + return FALSE + if(incapacitated(IGNORE_RESTRAINTS)) + return FALSE + return TRUE /** * look_up Changes the perspective of the mob to any openspace turf above the mob @@ -2466,31 +2467,6 @@ GLOBAL_LIST_EMPTY(fire_appearances) /mob/living/proc/get_attack_type() return BRUTE - -/** - * Apply a martial art move from src to target. - * - * This is used to process martial art attacks against nonhumans. - * It is also used to process martial art attacks by nonhumans, even against humans - * Human vs human attacks are handled in species code right now. - */ -/mob/living/proc/apply_martial_art(mob/living/target, modifiers, is_grab = FALSE) - if(HAS_TRAIT(target, TRAIT_MARTIAL_ARTS_IMMUNE)) - return MARTIAL_ATTACK_INVALID - var/datum/martial_art/style = mind?.martial_art - if (!style) - return MARTIAL_ATTACK_INVALID - // will return boolean below since it's not invalid - if (is_grab) - return style.grab_act(src, target) - if (LAZYACCESS(modifiers, RIGHT_CLICK)) - return style.disarm_act(src, target) - if(combat_mode) - if (HAS_TRAIT(src, TRAIT_PACIFISM)) - return FALSE - return style.harm_act(src, target) - return style.help_act(src, target) - /** * Returns an assoc list of assignments and minutes for updating a client's exp time in the databse. * @@ -2596,7 +2572,7 @@ GLOBAL_LIST_EMPTY(fire_appearances) mob_mood.clear_mood_event(mood_events[chosen]) /// Adds a mood event to the mob -/mob/living/proc/add_mood_event(category, type, timeout_mod, ...) +/mob/living/proc/add_mood_event(category, type, ...) if(QDELETED(mob_mood)) return mob_mood.add_mood_event(arglist(args)) diff --git a/code/modules/mob/living/living_defense.dm b/code/modules/mob/living/living_defense.dm index 704572ca0ad..3a4b0091b51 100644 --- a/code/modules/mob/living/living_defense.dm +++ b/code/modules/mob/living/living_defense.dm @@ -179,6 +179,10 @@ blocked = TRUE else playsound(loc, 'sound/weapons/genhit.ogg', 50, TRUE, -1) //Item sounds are handled in the item itself + if(!isvendor(AM) && !iscarbon(AM)) //Vendors have special interactions, while carbon mobs already generate visible messages! + visible_message(span_danger("[src] is hit by [AM]!"), \ + span_userdanger("You're hit by [AM]!")) + log_combat(AM, src, "hit ") return ..() var/obj/item/thrown_item = AM @@ -202,6 +206,8 @@ var/mob/thrown_by = thrown_item.thrownby?.resolve() if(thrown_by) log_combat(thrown_by, src, "threw and hit", thrown_item) + else + log_combat(thrown_item, src, "hit ") if(nosell_hit) return ..() visible_message(span_danger("[src] is hit by [thrown_item]!"), \ @@ -216,22 +222,59 @@ hitpush = FALSE return ..() +///The core of catching thrown items, which non-carbons cannot without the help of items or abilities yet, as they've no throw mode. +/mob/living/proc/try_catch_item(obj/item/item, skip_throw_mode_check = FALSE, try_offhand = FALSE) + if(!can_catch_item(skip_throw_mode_check, try_offhand) || !isitem(item) || HAS_TRAIT(item, TRAIT_UNCATCHABLE) || !isturf(item.loc)) + return FALSE + if(!can_hold_items(item)) + return FALSE + INVOKE_ASYNC(item, TYPE_PROC_REF(/obj/item, attempt_pickup), src, TRUE) + if(get_active_held_item() == item) //if our attack_hand() picks up the item... + visible_message(span_warning("[src] catches [item]!"), \ + span_userdanger("You catch [item] in mid-air!")) + return TRUE + +///Checks the requites for catching a throw item. +/mob/living/proc/can_catch_item(skip_throw_mode_check = FALSE, try_offhand = FALSE) + if(HAS_TRAIT(src, TRAIT_HANDS_BLOCKED)) + return FALSE + if(get_active_held_item() && (!try_offhand || get_inactive_held_item() || !swap_hand())) + return FALSE + return TRUE + /mob/living/fire_act() . = ..() adjust_fire_stacks(3) ignite_mob() -/mob/living/proc/grabbedby(mob/living/carbon/user, supress_message = FALSE) +/** + * Called when a mob is grabbing another mob. + */ +/mob/living/proc/grab(mob/living/target) + if(!istype(target)) + return FALSE + if(SEND_SIGNAL(src, COMSIG_LIVING_GRAB, target) & (COMPONENT_CANCEL_ATTACK_CHAIN|COMPONENT_SKIP_ATTACK)) + return FALSE + if(target.check_block(src, 0, "[src]'s grab")) + return FALSE + target.grabbedby(src) + return TRUE + +/** + * Called when this mob is grabbed by another mob. + */ +/mob/living/proc/grabbedby(mob/living/user, supress_message = FALSE, grabbed_part) // NOVA EDIT CHANGE - ORIGINAL: /mob/living/proc/grabbedby(mob/living/user, supress_message = FALSE) if(user == src || anchored || !isturf(user.loc)) return FALSE if(!user.pulling || user.pulling != src) user.start_pulling(src, supress_message = supress_message) return - + // This line arbitrarily prevents any non-carbon from upgrading grabs + if(!iscarbon(user)) + return if(!(status_flags & CANPUSH) || HAS_TRAIT(src, TRAIT_PUSHIMMUNE)) to_chat(user, span_warning("[src] can't be grabbed more aggressively!")) return FALSE - if(user.grab_state >= GRAB_AGGRESSIVE && HAS_TRAIT(user, TRAIT_PACIFISM)) to_chat(user, span_warning("You don't want to risk hurting [src]!")) return FALSE @@ -365,21 +408,12 @@ if(operations.next_step(user, modifiers)) return TRUE - var/martial_result = user.apply_martial_art(src, modifiers) - if (martial_result != MARTIAL_ATTACK_INVALID) - return martial_result - return FALSE /mob/living/attack_paw(mob/living/carbon/human/user, list/modifiers) - var/martial_result = user.apply_martial_art(src, modifiers) - if (martial_result != MARTIAL_ATTACK_INVALID) - return martial_result - if(LAZYACCESS(modifiers, RIGHT_CLICK)) - if (user != src && iscarbon(src)) - user.disarm(src) - return TRUE + user.disarm(src) + return TRUE if (!user.combat_mode) return FALSE if(HAS_TRAIT(user, TRAIT_PACIFISM)) @@ -621,6 +655,116 @@ ricocheting_projectile.set_angle(new_angle_s) return TRUE +/** + * Attempt to disarm the target mob. Some items might let you do it, also carbon can do it with right click. + * Will shove the target mob back, and drop them if they're in front of something dense + * or another carbon. +*/ +/mob/living/proc/disarm(mob/living/target, obj/item/weapon) + if(!can_disarm(target)) + return + var/shove_flags = target.get_shove_flags(src, weapon) + if(weapon) + do_attack_animation(target, used_item = weapon) + playsound(target, 'sound/effects/glassbash.ogg', 50, TRUE, -1) + else + do_attack_animation(target, ATTACK_EFFECT_DISARM) + playsound(target, 'sound/weapons/thudswoosh.ogg', 50, TRUE, -1) + if (ishuman(target) && isnull(weapon)) + var/mob/living/carbon/human/human_target = target + human_target.w_uniform?.add_fingerprint(src) + + SEND_SIGNAL(target, COMSIG_LIVING_DISARM_HIT, src, zone_selected, weapon) + var/shove_dir = get_dir(loc, target.loc) + var/turf/target_shove_turf = get_step(target.loc, shove_dir) + var/turf/target_old_turf = target.loc + + //Are we hitting anything? or + if(shove_flags & SHOVE_CAN_MOVE) + if(SEND_SIGNAL(target_shove_turf, COMSIG_LIVING_DISARM_PRESHOVE, src, target, weapon) & COMSIG_LIVING_ACT_SOLID) + shove_flags |= SHOVE_BLOCKED + else + target.Move(target_shove_turf, shove_dir) + if(get_turf(target) == target_old_turf) + shove_flags |= SHOVE_BLOCKED + + if(!(shove_flags & SHOVE_BLOCKED)) + target.setGrabState(GRAB_PASSIVE) + + //Directional checks to make sure that we're not shoving through a windoor or something like that + if((shove_flags & SHOVE_BLOCKED) && (shove_dir in GLOB.cardinals)) + var/target_turf = get_turf(target) + for(var/obj/obj_content in target_turf) + if(obj_content.flags_1 & ON_BORDER_1 && obj_content.dir == shove_dir && obj_content.density) + shove_flags |= SHOVE_DIRECTIONAL_BLOCKED + break + if(target_turf != target_shove_turf && !(shove_flags && SHOVE_DIRECTIONAL_BLOCKED)) //Make sure that we don't run the exact same check twice on the same tile + for(var/obj/obj_content in target_shove_turf) + if(obj_content.flags_1 & ON_BORDER_1 && obj_content.dir == REVERSE_DIR(shove_dir) && obj_content.density) + shove_flags |= SHOVE_DIRECTIONAL_BLOCKED + break + + if(shove_flags & SHOVE_CAN_HIT_SOMETHING) + //Don't hit people through windows, ok? + if(!(shove_flags & SHOVE_DIRECTIONAL_BLOCKED) && (SEND_SIGNAL(target_shove_turf, COMSIG_LIVING_DISARM_COLLIDE, src, target, shove_flags, weapon) & COMSIG_LIVING_SHOVE_HANDLED)) + return + if((shove_flags & SHOVE_BLOCKED) && !(shove_flags & (SHOVE_KNOCKDOWN_BLOCKED|SHOVE_CAN_KICK_SIDE))) + target.Knockdown(SHOVE_KNOCKDOWN_SOLID) + target.visible_message(span_danger("[name] shoves [target.name], knocking [target.p_them()] down!"), + span_userdanger("You're knocked down from a shove by [name]!"), span_hear("You hear aggressive shuffling followed by a loud thud!"), COMBAT_MESSAGE_RANGE, src) + to_chat(src, span_danger("You shove [target.name], knocking [target.p_them()] down!")) + log_combat(src, target, "shoved", "knocking them down[weapon ? " with [weapon]" : ""]") + return + + if(shove_flags & SHOVE_CAN_KICK_SIDE) //KICK HIM IN THE NUTS + target.Paralyze(SHOVE_CHAIN_PARALYZE) + target.visible_message(span_danger("[name] kicks [target.name] onto [target.p_their()] side!"), + span_userdanger("You're kicked onto your side by [name]!"), span_hear("You hear aggressive shuffling followed by a loud thud!"), COMBAT_MESSAGE_RANGE, src) + to_chat(src, span_danger("You kick [target.name] onto [target.p_their()] side!")) + addtimer(CALLBACK(target, TYPE_PROC_REF(/mob/living, SetKnockdown), 0), SHOVE_CHAIN_PARALYZE) + log_combat(src, target, "kicks", "onto their side (paralyzing)") + return + + target.get_shoving_message(src, weapon, shove_flags) + + //Take their lunch money + var/target_held_item = target.get_active_held_item() + var/append_message = weapon ? " with [weapon]" : "" + if(!is_type_in_typecache(target_held_item, GLOB.shove_disarming_types)) //It's too expensive we'll get caught + target_held_item = null + + if(target_held_item && target.get_timed_status_effect_duration(/datum/status_effect/staggered)) + target.dropItemToGround(target_held_item) + append_message = "causing [target.p_them()] to drop [target_held_item]" + target.visible_message(span_danger("[target.name] drops \the [target_held_item]!"), + span_warning("You drop \the [target_held_item]!"), null, COMBAT_MESSAGE_RANGE) + + if(shove_flags & SHOVE_CAN_STAGGER) + target.adjust_staggered_up_to(STAGGERED_SLOWDOWN_LENGTH, 10 SECONDS) + + log_combat(src, target, "shoved", append_message) + +///Check if the universal conditions for disarming/shoving are met. +/mob/living/proc/can_disarm(mob/living/target) + if(body_position != STANDING_UP || src == target || loc == target.loc) + return FALSE + return TRUE + +///Check if there's anything that could stop the knockdown from being shoved into something or someone. +/mob/living/proc/get_shove_flags(mob/living/shover, obj/item/weapon) + if(shover.move_force >= move_resist) + . |= SHOVE_CAN_MOVE + if(!buckled) + . |= SHOVE_CAN_HIT_SOMETHING + if(HAS_TRAIT(src, TRAIT_SHOVE_KNOCKDOWN_BLOCKED)) + . |= SHOVE_KNOCKDOWN_BLOCKED + +///Send the chat feedback message for shoving +/mob/living/proc/get_shoving_message(mob/living/shover, obj/item/weapon, shove_flags) + visible_message(span_danger("[shover] shoves [name][weapon ? " with [weapon]" : ""]!"), + span_userdanger("You're shoved by [shover][weapon ? " with [weapon]" : ""]!"), span_hear("You hear aggressive shuffling!"), COMBAT_MESSAGE_RANGE, shover) + to_chat(shover, span_danger("You shove [name][weapon ? " with [weapon]" : ""]!")) + /mob/living/proc/check_block(atom/hit_by, damage, attack_text = "the attack", attack_type = MELEE_ATTACK, armour_penetration = 0, damage_type = BRUTE) if(SEND_SIGNAL(src, COMSIG_LIVING_CHECK_BLOCK, hit_by, damage, attack_text, attack_type, armour_penetration, damage_type) & SUCCESSFUL_BLOCK) return TRUE diff --git a/code/modules/mob/living/living_say.dm b/code/modules/mob/living/living_say.dm index 3fd6ea155bc..cfb49410baf 100644 --- a/code/modules/mob/living/living_say.dm +++ b/code/modules/mob/living/living_say.dm @@ -211,32 +211,33 @@ GLOBAL_LIST_INIT(message_modes_stat_limits, list( message = "[randomnote] [message] [randomnote]" spans |= SPAN_SINGING + if(LAZYACCESS(message_mods,WHISPER_MODE)) // whisper away + spans |= SPAN_ITALICS if(!message) if(succumbed) succumb() return + //Get which verb is prefixed to the message before radio but after most modifications + message_mods[SAY_MOD_VERB] = say_mod(message, message_mods) // NOVA EDIT ADDITION START: autopunctuation //ensure EOL punctuation exists and that word-bounded 'i' are capitalized before we do anything else message = autopunct_bare(message) // NOVA EDIT ADDITION END + //This is before anything that sends say a radio message, and after all important message type modifications, so you can scumb in alien chat or something if(saymode && !saymode.handle_message(src, message, language)) return - var/radio_message = message - if(message_mods[WHISPER_MODE]) - // radios don't pick up whispers very well - radio_message = stars(radio_message) - spans |= SPAN_ITALICS - var/radio_return = radio(radio_message, message_mods, spans, language)//roughly 27% of living/say()'s total cost + var/radio_return = radio(message, message_mods, spans, language)//roughly 27% of living/say()'s total cost if(radio_return & ITALICS) spans |= SPAN_ITALICS if(radio_return & REDUCE_RANGE) message_range = 1 if(!message_mods[WHISPER_MODE]) message_mods[WHISPER_MODE] = MODE_WHISPER + message_mods[SAY_MOD_VERB] = say_mod(message, message_mods) if(radio_return & NOPASS) return TRUE @@ -277,7 +278,7 @@ GLOBAL_LIST_INIT(message_modes_stat_limits, list( var/understood = TRUE if(!is_custom_emote) // we do not translate emotes var/untranslated_raw_message = raw_message - raw_message = translate_language(src, message_language, raw_message) // translate + raw_message = translate_language(speaker, message_language, raw_message, spans, message_mods) // translate if(raw_message != untranslated_raw_message) understood = FALSE @@ -321,7 +322,7 @@ GLOBAL_LIST_INIT(message_modes_stat_limits, list( if(speaker != src) if(!radio_freq) //These checks have to be separate, else people talking on the radio will make "You can't hear yourself!" appear when hearing people over the radio while deaf. - deaf_message = "[span_name("[speaker]")] [speaker.verb_say] something but you cannot hear [speaker.p_them()]." + deaf_message = "[span_name("[speaker]")] [speaker.get_default_say_verb()] something but you cannot hear [speaker.p_them()]." deaf_type = MSG_VISUAL else deaf_message = span_notice("You can't hear yourself!") diff --git a/code/modules/mob/living/silicon/ai/ai.dm b/code/modules/mob/living/silicon/ai/ai.dm index 8c27854865b..86465dca120 100644 --- a/code/modules/mob/living/silicon/ai/ai.dm +++ b/code/modules/mob/living/silicon/ai/ai.dm @@ -77,7 +77,7 @@ var/mob/camera/ai_eye/eyeobj var/sprint = 10 - var/cooldown = 0 + var/last_moved = 0 var/acceleration = TRUE var/obj/structure/ai_core/deactivated/linked_core //For exosuit control @@ -191,7 +191,8 @@ builtInCamera.network = list("ss13") ai_tracking_tool = new(src) - RegisterSignal(src, COMSIG_TRACKABLE_TRACKING_TARGET, PROC_REF(on_track_target)) + RegisterSignal(ai_tracking_tool, COMSIG_TRACKABLE_TRACKING_TARGET, PROC_REF(on_track_target)) + RegisterSignal(ai_tracking_tool, COMSIG_TRACKABLE_GLIDE_CHANGED, PROC_REF(tracked_glidesize_changed)) add_traits(list(TRAIT_PULL_BLOCKED, TRAIT_HANDS_BLOCKED), ROUNDSTART_TRAIT) @@ -211,8 +212,7 @@ switch(_key) if("`", "0") if(cam_prev) - if(ai_tracking_tool.tracking) - ai_tracking_tool.set_tracking(FALSE) + ai_tracking_tool.reset_tracking() eyeobj.setLoc(cam_prev) return if("1", "2", "3", "4", "5", "6", "7", "8", "9") @@ -223,8 +223,7 @@ return if(cam_hotkeys[_key]) //if this is false, no hotkey for this slot exists. cam_prev = eyeobj.loc - if(ai_tracking_tool.tracking) - ai_tracking_tool.set_tracking(FALSE) + ai_tracking_tool.reset_tracking() eyeobj.setLoc(cam_hotkeys[_key]) return return ..() @@ -250,7 +249,6 @@ if(ai_voicechanger) ai_voicechanger.owner = null ai_voicechanger = null - UnregisterSignal(src, COMSIG_TRACKABLE_TRACKING_TARGET) return ..() /// Removes all malfunction-related abilities from the AI @@ -401,7 +399,7 @@ set name = "track" set hidden = TRUE //Don't display it on the verb lists. This verb exists purely so you can type "track Oldman Robustin" and follow his ass - ai_tracking_tool.set_tracked_mob(src) + ai_tracking_tool.track_input(src) ///Called when an AI finds their tracking target. /mob/living/silicon/ai/proc/on_track_target(datum/trackable/source, mob/living/target) @@ -411,6 +409,12 @@ else view_core() +/// Keeps our rate of gliding in step with the mob we're following +/mob/living/silicon/ai/proc/tracked_glidesize_changed(datum/trackable/source, mob/living/target, new_glide_size) + SIGNAL_HANDLER + if(eyeobj) + eyeobj.glide_size = new_glide_size + /mob/living/silicon/ai/verb/toggle_anchor() set category = "AI Commands" set name = "Toggle Floor Bolts" @@ -496,10 +500,6 @@ if(incapacitated()) return - if (href_list["mach_close"]) - var/t1 = "window=[href_list["mach_close"]]" - unset_machine() - src << browse(null, t1) if (href_list["switchcamera"]) switchCamera(locate(href_list["switchcamera"]) in GLOB.cameranet.cameras) if (href_list["showalerts"]) @@ -529,7 +529,7 @@ else to_chat(src, span_notice("Unable to project to the holopad.")) if(href_list["track"]) - ai_tracking_tool.set_tracked_mob(src, href_list["track"]) + ai_tracking_tool.track_name(src, href_list["track"]) return if (href_list["ai_take_control"]) //Mech domination var/obj/vehicle/sealed/mecha/M = locate(href_list["ai_take_control"]) in GLOB.mechas_list @@ -572,8 +572,7 @@ view_core() return - if(ai_tracking_tool.tracking) - ai_tracking_tool.set_tracking(FALSE) + ai_tracking_tool.reset_tracking() // ok, we're alive, camera is good and in our network... eyeobj.setLoc(get_turf(C)) @@ -647,8 +646,7 @@ set category = "AI Commands" set name = "Jump To Network" unset_machine() - if(ai_tracking_tool.tracking) - ai_tracking_tool.set_tracking(FALSE) + ai_tracking_tool.reset_tracking() var/cameralist[0] if(incapacitated()) @@ -902,7 +900,7 @@ return get_dist(src, A) <= max(viewscale[1]*0.5,viewscale[2]*0.5) /mob/living/silicon/ai/proc/relay_speech(message, atom/movable/speaker, datum/language/message_language, raw_message, radio_freq, list/spans, list/message_mods = list()) - var/raw_translation = translate_language(speaker, message_language, raw_message) + var/raw_translation = translate_language(speaker, message_language, raw_message, spans, message_mods) var/atom/movable/source = speaker.GetSource() || speaker // is the speaker virtual/radio var/treated_message = source.say_quote(raw_translation, spans, message_mods) diff --git a/code/modules/mob/living/silicon/ai/freelook/eye.dm b/code/modules/mob/living/silicon/ai/freelook/eye.dm index 416bbb19912..e8c1919b020 100644 --- a/code/modules/mob/living/silicon/ai/freelook/eye.dm +++ b/code/modules/mob/living/silicon/ai/freelook/eye.dm @@ -154,35 +154,44 @@ return var/mob/living/silicon/ai/AI = usr if(AI.eyeobj && (AI.multicam_on || (AI.client.eye == AI.eyeobj)) && (AI.eyeobj.z == z)) - if(AI.ai_tracking_tool.tracking) - AI.ai_tracking_tool.set_tracking(FALSE) + AI.ai_tracking_tool.reset_tracking() if (isturf(loc) || isturf(src)) AI.eyeobj.setLoc(src) // This will move the AIEye. It will also cause lights near the eye to light up, if toggled. // This is handled in the proc below this one. - -/client/proc/AIMove(n, direct, mob/living/silicon/ai/user) - - var/initial = initial(user.sprint) - var/max_sprint = 50 - - if(user.cooldown && user.cooldown < world.timeofday) // 3 seconds - user.sprint = initial - - for(var/i = 0; i < max(user.sprint, initial); i += 20) - var/turf/step = get_turf(get_step(user.eyeobj, direct)) +#define SPRINT_PER_TICK 0.5 +#define MAX_SPRINT 50 +#define SPRINT_PER_STEP 20 +/mob/living/silicon/ai/proc/AIMove(direction) + if(last_moved && last_moved + 1 < world.timeofday) + // Decay sprint based off how long it took us to input this next move + var/missed_sprint = max((world.timeofday + 1) - last_moved, 0) * SPRINT_PER_TICK + sprint = max(sprint - missed_sprint * 7, initial(sprint)) + + // We move a full step, at least. Can't glide more with our current movement mode, so this is how I have to live + var/step_count = 0 + for(var/i = 0; i < max(sprint, initial(sprint)); i += SPRINT_PER_STEP) + step_count += 1 + var/turf/step = get_turf(get_step(eyeobj, direction)) if(step) - user.eyeobj.setLoc(step) + eyeobj.setLoc(step) + + // I'd like to make this scale with the steps we take, but it like, just can't + // So we're doin this instead + eyeobj.glide_size = world.icon_size - user.cooldown = world.timeofday + 5 - if(user.acceleration) - user.sprint = min(user.sprint + 0.5, max_sprint) + last_moved = world.timeofday + if(acceleration) + sprint = min(sprint + SPRINT_PER_TICK, MAX_SPRINT) else - user.sprint = initial + sprint = initial(sprint) + + ai_tracking_tool.reset_tracking() - if(user.ai_tracking_tool.tracking) - user.ai_tracking_tool.set_tracking(FALSE) +#undef SPRINT_PER_STEP +#undef MAX_SPRINT +#undef SPRINT_PER_TICK // Return to the Core. /mob/living/silicon/ai/proc/view_core() @@ -191,8 +200,8 @@ H.clear_holo(src) else current = null - if(ai_tracking_tool && ai_tracking_tool.tracking) - ai_tracking_tool.set_tracking(FALSE) + if(ai_tracking_tool) + ai_tracking_tool.reset_tracking() unset_machine() if(isturf(loc) && (QDELETED(eyeobj) || !eyeobj.loc)) diff --git a/code/modules/mob/living/silicon/robot/robot.dm b/code/modules/mob/living/silicon/robot/robot.dm index 805bb7b6dd4..1d2385984ad 100644 --- a/code/modules/mob/living/silicon/robot/robot.dm +++ b/code/modules/mob/living/silicon/robot/robot.dm @@ -360,7 +360,7 @@ var/mutable_appearance/head_overlay = hat.build_worn_icon(default_layer = 20, default_icon_file = 'icons/mob/clothing/head/default.dmi') head_overlay.pixel_z += hat_offset add_overlay(head_overlay) - update_fire() + update_appearance(UPDATE_OVERLAYS) /mob/living/silicon/robot/on_changed_z_level(turf/old_turf, turf/new_turf, same_z_layer, notify_contents) if(same_z_layer) @@ -1034,26 +1034,19 @@ /mob/living/silicon/robot/proc/untip_roleplay() to_chat(src, span_notice("Your frustration has empowered you! You can now right yourself faster!")) - -/mob/living/silicon/robot/update_fire_overlay(stacks, on_fire, last_icon_state, suffix = "") - var/fire_icon = "generic_fire[suffix]" +/mob/living/silicon/robot/get_fire_overlay(stacks, on_fire) + var/fire_icon = "generic_fire" if(!GLOB.fire_appearances[fire_icon]) - var/mutable_appearance/new_fire_overlay = mutable_appearance('icons/mob/effects/onfire.dmi', fire_icon, -FIRE_LAYER) - new_fire_overlay.appearance_flags = RESET_COLOR + var/mutable_appearance/new_fire_overlay = mutable_appearance( + 'icons/mob/effects/onfire.dmi', + fire_icon, + -HIGHEST_LAYER, + appearance_flags = RESET_COLOR, + ) GLOB.fire_appearances[fire_icon] = new_fire_overlay - if(stacks && on_fire) - if(last_icon_state == fire_icon) - return last_icon_state - add_overlay(GLOB.fire_appearances[fire_icon]) - return fire_icon - - if(!last_icon_state) - return last_icon_state - - cut_overlay(GLOB.fire_appearances[fire_icon]) - return null + return GLOB.fire_appearances[fire_icon] /// Draw power from the robot /mob/living/silicon/robot/proc/draw_power(power_to_draw) diff --git a/code/modules/mob/living/silicon/robot/robot_defense.dm b/code/modules/mob/living/silicon/robot/robot_defense.dm index 44e8583b86f..722b92835c8 100644 --- a/code/modules/mob/living/silicon/robot/robot_defense.dm +++ b/code/modules/mob/living/silicon/robot/robot_defense.dm @@ -229,6 +229,11 @@ GLOBAL_LIST_INIT(blacklisted_borg_hats, typecacheof(list( //Hats that don't real step_away(src, user, 15) addtimer(CALLBACK(GLOBAL_PROC, GLOBAL_PROC_REF(_step_away), src, get_turf(user), 15), 3) +/mob/living/silicon/robot/get_shove_flags(mob/living/shover, obj/item/weapon) + . = ..() + if(isnull(weapon) || stat != CONSCIOUS) + . &= ~(SHOVE_CAN_MOVE|SHOVE_CAN_HIT_SOMETHING) + /mob/living/silicon/robot/welder_act(mob/living/user, obj/item/tool) if(user.combat_mode && usr != src) return FALSE diff --git a/code/modules/mob/living/silicon/robot/robot_defines.dm b/code/modules/mob/living/silicon/robot/robot_defines.dm index d87532f9a6c..8cc1b0d22f1 100644 --- a/code/modules/mob/living/silicon/robot/robot_defines.dm +++ b/code/modules/mob/living/silicon/robot/robot_defines.dm @@ -23,7 +23,7 @@ radio = /obj/item/radio/borg blocks_emissive = EMISSIVE_BLOCK_UNIQUE - light_system = MOVABLE_LIGHT_DIRECTIONAL + light_system = OVERLAY_LIGHT_DIRECTIONAL light_on = FALSE diff --git a/code/modules/mob/living/silicon/robot/robot_model.dm b/code/modules/mob/living/silicon/robot/robot_model.dm index b5e3da440f1..19661110133 100644 --- a/code/modules/mob/living/silicon/robot/robot_model.dm +++ b/code/modules/mob/living/silicon/robot/robot_model.dm @@ -728,6 +728,7 @@ /obj/item/gun/energy/recharge/kinetic_accelerator/cyborg, /obj/item/gps/cyborg, /obj/item/stack/marker_beacon, + /obj/item/t_scanner/adv_mining_scanner/cyborg, ) radio_channels = list(RADIO_CHANNEL_SCIENCE, RADIO_CHANNEL_SUPPLY) emag_modules = list( @@ -741,16 +742,6 @@ "Spider Miner" = list(SKIN_ICON_STATE = "spidermin"), "Lavaland Miner" = list(SKIN_ICON_STATE = "miner"), ) - var/obj/item/t_scanner/adv_mining_scanner/cyborg/mining_scanner //built in memes. //fuck you - -/obj/item/robot_model/miner/rebuild_modules() - . = ..() - if(!mining_scanner) - mining_scanner = new(src) - -/obj/item/robot_model/miner/Destroy() - QDEL_NULL(mining_scanner) - return ..() /obj/item/robot_model/peacekeeper name = "Peacekeeper" diff --git a/code/modules/mob/living/silicon/silicon.dm b/code/modules/mob/living/silicon/silicon.dm index 31096fbffc7..a52624cb44e 100644 --- a/code/modules/mob/living/silicon/silicon.dm +++ b/code/modules/mob/living/silicon/silicon.dm @@ -79,6 +79,7 @@ TRAIT_MADNESS_IMMUNE, TRAIT_MARTIAL_ARTS_IMMUNE, TRAIT_NOFIRE_SPREAD, + TRAIT_SHOVE_KNOCKDOWN_BLOCKED, ) add_traits(traits_to_apply, ROUNDSTART_TRAIT) @@ -353,10 +354,7 @@ return client.crew_manifest_delay = world.time + (1 SECONDS) - if(!GLOB.crew_manifest_tgui) - GLOB.crew_manifest_tgui = new /datum/crew_manifest(src) - - GLOB.crew_manifest_tgui.ui_interact(src) + GLOB.manifest.ui_interact(src) /mob/living/silicon/proc/set_autosay() //For allowing the AI and borgs to set the radio behavior of auto announcements (state laws, arrivals). if(!radio) diff --git a/code/modules/mob/living/silicon/silicon_defense.dm b/code/modules/mob/living/silicon/silicon_defense.dm index 9b74fb35ffc..e84758d9f58 100644 --- a/code/modules/mob/living/silicon/silicon_defense.dm +++ b/code/modules/mob/living/silicon/silicon_defense.dm @@ -1,5 +1,5 @@ -/mob/living/silicon/grippedby(mob/living/user, instant = FALSE) +/mob/living/silicon/grippedby(mob/living/carbon/user, instant = FALSE) return //can't upgrade a simple pull into a more aggressive grab. /mob/living/silicon/get_ear_protection()//no ears @@ -56,29 +56,35 @@ span_userdanger("[user] punches you!"), null, COMBAT_MESSAGE_RANGE, user) to_chat(user, span_danger("You punch [src]!")) -//ATTACK HAND IGNORING PARENT RETURN VALUE /mob/living/silicon/attack_hand(mob/living/carbon/human/user, list/modifiers) - . = FALSE - if(SEND_SIGNAL(src, COMSIG_ATOM_ATTACK_HAND, user, modifiers) & COMPONENT_CANCEL_ATTACK_CHAIN) - . = TRUE + . = ..() + if(.) + return TRUE + + if(LAZYACCESS(modifiers, RIGHT_CLICK)) + user.disarm(src) + return TRUE + if(has_buckled_mobs() && !user.combat_mode) user_unbuckle_mob(buckled_mobs[1], user) + return TRUE + if(user.combat_mode) + user.do_attack_animation(src, ATTACK_EFFECT_PUNCH) + playsound(src.loc, 'sound/effects/bang.ogg', 10, TRUE) + visible_message(span_danger("[user] punches [src], but doesn't leave a dent!"), \ + span_warning("[user] punches you, but doesn't leave a dent!"), null, COMBAT_MESSAGE_RANGE, user) + to_chat(user, span_danger("You punch [src], but don't leave a dent!")) + return TRUE else - if(user.combat_mode) - user.do_attack_animation(src, ATTACK_EFFECT_PUNCH) - playsound(src.loc, 'sound/effects/bang.ogg', 10, TRUE) - visible_message(span_danger("[user] punches [src], but doesn't leave a dent!"), \ - span_warning("[user] punches you, but doesn't leave a dent!"), null, COMBAT_MESSAGE_RANGE, user) - to_chat(user, span_danger("You punch [src], but don't leave a dent!")) - else // NOVA EDIT ADDITION START - if(HAS_TRAIT(src, TRAIT_QUICKREFLEXES) && (src.stat != UNCONSCIOUS) && !src.incapacitated(IGNORE_RESTRAINTS)) - visible_message(span_warning("[user] tries to pet [src], but it moves out of the way.")) - return - // NOVA EDIT ADDITION END - visible_message(span_notice("[user] pets [src]."), \ - span_notice("[user] pets you."), null, null, user) - to_chat(user, span_notice("You pet [src].")) - SEND_SIGNAL(user, COMSIG_MOB_PAT_BORG) + // NOVA EDIT ADDITION START + if(HAS_TRAIT(src, TRAIT_QUICKREFLEXES) && (src.stat != UNCONSCIOUS) && !src.incapacitated(IGNORE_RESTRAINTS)) + visible_message(span_warning("[user] tries to pet [src], but it moves out of the way.")) + return TRUE + // NOVA EDIT ADDITION END + visible_message(span_notice("[user] pets [src]."), span_notice("[user] pets you."), null, null, user) + to_chat(user, span_notice("You pet [src].")) + SEND_SIGNAL(user, COMSIG_MOB_PAT_BORG) + return TRUE /mob/living/silicon/check_block(atom/hitby, damage, attack_text, attack_type, armour_penetration, damage_type, attack_flag) . = ..() diff --git a/code/modules/mob/living/simple_animal/animal_defense.dm b/code/modules/mob/living/simple_animal/animal_defense.dm index afe4c00db4d..2fea2871c03 100644 --- a/code/modules/mob/living/simple_animal/animal_defense.dm +++ b/code/modules/mob/living/simple_animal/animal_defense.dm @@ -4,21 +4,7 @@ return TRUE if(LAZYACCESS(modifiers, RIGHT_CLICK)) - if(user.move_force < move_resist) - return - user.do_attack_animation(src, ATTACK_EFFECT_DISARM) - playsound(src, 'sound/weapons/thudswoosh.ogg', 50, TRUE, -1) - var/shove_dir = get_dir(user, src) - if(!Move(get_step(src, shove_dir), shove_dir)) - log_combat(user, src, "shoved", "failing to move it") - user.visible_message(span_danger("[user.name] shoves [src]!"), - span_danger("You shove [src]!"), span_hear("You hear aggressive shuffling!"), COMBAT_MESSAGE_RANGE, list(src)) - to_chat(src, span_userdanger("You're shoved by [user.name]!")) - return TRUE - log_combat(user, src, "shoved", "pushing it") - user.visible_message(span_danger("[user.name] shoves [src], pushing [p_them()]!"), - span_danger("You shove [src], pushing [p_them()]!"), span_hear("You hear aggressive shuffling!"), COMBAT_MESSAGE_RANGE, list(src)) - to_chat(src, span_userdanger("You're pushed by [user.name]!")) + user.disarm(src) return TRUE if(!user.combat_mode) @@ -44,6 +30,19 @@ updatehealth() return TRUE +/mob/living/simple_animal/get_shoving_message(mob/living/shover, obj/item/weapon, shove_flags) + if(weapon) // no "gently pushing aside" if you're pressing a shield at them. + return ..() + var/moved = !(shove_flags & SHOVE_BLOCKED) + shover.visible_message( + span_danger("[shover.name] [response_disarm_continuous] [src][moved ? ", pushing [p_them()]" : ""]!"), + span_danger("You [response_disarm_simple] [src][moved ? ", pushing [p_them()]" : ""]!"), + span_hear("You hear aggressive shuffling!"), + COMBAT_MESSAGE_RANGE, + list(src), + ) + to_chat(src, span_userdanger("You're [moved ? "pushed" : "shoved"] by [shover.name]!")) + /mob/living/simple_animal/attack_hulk(mob/living/carbon/human/user) . = ..() if(!.) diff --git a/code/modules/mob/living/simple_animal/bot/bot.dm b/code/modules/mob/living/simple_animal/bot/bot.dm index 22c7439ec80..ff304332c8d 100644 --- a/code/modules/mob/living/simple_animal/bot/bot.dm +++ b/code/modules/mob/living/simple_animal/bot/bot.dm @@ -23,7 +23,7 @@ bubble_icon = "machine" speech_span = SPAN_ROBOT faction = list(FACTION_NEUTRAL, FACTION_SILICON, FACTION_TURRET) - light_system = MOVABLE_LIGHT + light_system = OVERLAY_LIGHT light_range = 3 light_power = 0.9 del_on_death = TRUE diff --git a/code/modules/mob/living/simple_animal/bot/mulebot.dm b/code/modules/mob/living/simple_animal/bot/mulebot.dm index 88210a714c8..7f13a1954ab 100644 --- a/code/modules/mob/living/simple_animal/bot/mulebot.dm +++ b/code/modules/mob/living/simple_animal/bot/mulebot.dm @@ -79,13 +79,15 @@ cell = new /obj/item/stock_parts/cell/upgraded(src, 2000) - var/static/mulebot_count = 0 - mulebot_count += 1 - set_id(suffix || id || "#[mulebot_count]") - suffix = null AddElement(/datum/element/ridable, /datum/component/riding/creature/mulebot) diag_hud_set_mulebotcell() + set_id(suffix || assign_random_name()) + suffix = null + if(name == "\improper MULEbot") + name = "\improper MULEbot [id]" + set_home(loc) + /mob/living/simple_animal/bot/mulebot/Exited(atom/movable/gone, direction) . = ..() if(gone == load) @@ -138,6 +140,18 @@ /mob/living/simple_animal/bot/mulebot/proc/set_id(new_id) id = new_id +/mob/living/simple_animal/bot/mulebot/proc/set_home(turf/home_loc) + if(!istype(home_loc)) + CRASH("MULEbot [id] was requested to set a home location to [home_loc ? "an invalid home loc ([home_loc.type])" : "null"]") + + var/obj/machinery/navbeacon/home_beacon = locate() in home_loc + if(!isnull(home_beacon)) + home_destination = home_beacon.location + log_transport("[id]: MULEbot successfuly set home location to ID [home_destination] at [home_beacon.x], [home_beacon.y], [home_beacon.z]") + return + + log_transport("[id]: MULEbot failed to set home at [home_loc.x], [home_loc.y], [home_loc.z]") + /mob/living/simple_animal/bot/mulebot/bot_reset() ..() reached_target = FALSE @@ -322,19 +336,12 @@ if(new_dest) set_destination(new_dest) if("setid") - var/new_id - if(pda) - new_id = tgui_input_text(user, "Enter ID", "ID Assignment", id, MAX_NAME_LEN) - else - new_id = params["value"] + var/new_id = tgui_input_text(user, "Enter ID", "ID Assignment", id, MAX_NAME_LEN) if(new_id) set_id(new_id) + name = "\improper MULEbot [new_id]" if("sethome") - var/new_home - if(pda) - new_home = tgui_input_list(user, "Enter Home", "Mulebot Settings", GLOB.deliverybeacontags, home_destination) - else - new_home = params["value"] + var/new_home = tgui_input_list(user, "Enter Home", "Mulebot Settings", GLOB.deliverybeacontags, home_destination) if(new_home) home_destination = new_home if("unload") @@ -815,39 +822,37 @@ load(AM) -/mob/living/simple_animal/bot/mulebot/paranormal/load(atom/movable/AM) - if(load || AM.anchored) +/mob/living/simple_animal/bot/mulebot/paranormal/load(atom/movable/movable_atom) + if(load || movable_atom.anchored) return - if(!isturf(AM.loc)) //To prevent the loading from stuff from someone's inventory or screen icons. + if(!isturf(movable_atom.loc)) //To prevent the loading from stuff from someone's inventory or screen icons. return - if(isobserver(AM)) + if(isobserver(movable_atom)) visible_message(span_warning("A ghostly figure appears on [src]!")) - RegisterSignal(AM, COMSIG_MOVABLE_MOVED, PROC_REF(ghostmoved)) - AM.forceMove(src) + movable_atom.forceMove(src) + RegisterSignal(movable_atom, COMSIG_MOVABLE_MOVED, PROC_REF(ghostmoved)) else if(!wires.is_cut(WIRE_LOADCHECK)) buzz(SIGH) return // if not hacked, only allow ghosts to be loaded - else if(isobj(AM)) - var/obj/O = AM - if(O.has_buckled_mobs() || (locate(/mob) in AM)) //can't load non crates objects with mobs buckled to it or inside it. + else if(isobj(movable_atom)) + if(movable_atom.has_buckled_mobs() || (locate(/mob) in movable_atom)) //can't load non crates objects with mobs buckled to it or inside it. buzz(SIGH) return - if(istype(O, /obj/structure/closet/crate)) - var/obj/structure/closet/crate/crate = O + if(istype(movable_atom, /obj/structure/closet/crate)) + var/obj/structure/closet/crate/crate = movable_atom crate.close() //make sure it's closed - O.forceMove(src) + movable_atom.forceMove(src) - else if(isliving(AM)) - if(!load_mob(AM)) //buckling is handled in forceMove() - return + else if(isliving(movable_atom) && !load_mob(movable_atom)) + return - load = AM + load = movable_atom mode = BOT_IDLE update_appearance() diff --git a/code/modules/mob/living/simple_animal/bot/vibebot.dm b/code/modules/mob/living/simple_animal/bot/vibebot.dm index 5a876bd8eca..d0d550f7737 100644 --- a/code/modules/mob/living/simple_animal/bot/vibebot.dm +++ b/code/modules/mob/living/simple_animal/bot/vibebot.dm @@ -9,7 +9,7 @@ health = 25 maxHealth = 25 pass_flags = PASSMOB | PASSFLAPS - light_system = MOVABLE_LIGHT + light_system = OVERLAY_LIGHT light_range = 7 light_power = 3 diff --git a/code/modules/mob/living/simple_animal/hostile/hostile.dm b/code/modules/mob/living/simple_animal/hostile/hostile.dm index 88d89c5f1d6..3b40294c778 100644 --- a/code/modules/mob/living/simple_animal/hostile/hostile.dm +++ b/code/modules/mob/living/simple_animal/hostile/hostile.dm @@ -555,6 +555,8 @@ A.attack_animal(src)//Bang on it till we get out /mob/living/simple_animal/hostile/proc/FindHidden() + if(isnull(target)) + return FALSE if(istype(target.loc, /obj/structure/closet) || istype(target.loc, /obj/machinery/disposal) || istype(target.loc, /obj/machinery/sleeper)) var/atom/A = target.loc var/atom/target_from = GET_TARGETS_FROM(src) diff --git a/code/modules/mob/living/simple_animal/hostile/megafauna/_megafauna.dm b/code/modules/mob/living/simple_animal/hostile/megafauna/_megafauna.dm index 200800f3d05..1096784b43f 100644 --- a/code/modules/mob/living/simple_animal/hostile/megafauna/_megafauna.dm +++ b/code/modules/mob/living/simple_animal/hostile/megafauna/_megafauna.dm @@ -27,6 +27,7 @@ layer = LARGE_MOB_LAYER //Looks weird with them slipping under mineral walls and cameras and shit otherwise mouse_opacity = MOUSE_OPACITY_OPAQUE // Easier to click on in melee, they're giant targets anyway flags_1 = PREVENT_CONTENTS_EXPLOSION_1 + can_buckle_to = FALSE /// Crusher loot dropped when the megafauna is killed with a crusher var/list/crusher_loot /// Achievement given to surrounding players when the megafauna is killed @@ -49,6 +50,8 @@ var/chosen_attack = 1 /// Attack actions, sets chosen_attack to the number in the action var/list/attack_action_types = list() + /// Summoning line, said when summoned via megafauna vents. + var/summon_line = "I'll kick your ass!" /mob/living/simple_animal/hostile/megafauna/Initialize(mapload) . = ..() @@ -120,33 +123,34 @@ if(recovery_time >= world.time) return . = ..() - if(. && isliving(target)) - var/mob/living/L = target - if(L.stat != DEAD) - if(!client && ranged && ranged_cooldown <= world.time) - OpenFire() - - if(L.health <= HEALTH_THRESHOLD_DEAD && HAS_TRAIT(L, TRAIT_NODEATH)) //Nope, it still kills yall - devour(L) - else - devour(L) + if(!.) + LoseTarget() + return + if(!isliving(target)) + return + var/mob/living/living_target = target + if(living_target.stat == DEAD || (living_target.health <= HEALTH_THRESHOLD_DEAD && HAS_TRAIT(living_target, TRAIT_NODEATH))) + devour(living_target) + return + if(isnull(client) && ranged && ranged_cooldown <= world.time) + OpenFire() /// Devours a target and restores health to the megafauna -/mob/living/simple_animal/hostile/megafauna/proc/devour(mob/living/L) - if(!L || L.has_status_effect(/datum/status_effect/gutted)) +/mob/living/simple_animal/hostile/megafauna/proc/devour(mob/living/victim) + if(isnull(victim) || victim.has_status_effect(/datum/status_effect/gutted)) + LoseTarget() return FALSE - celebrate_kill(L) + celebrate_kill(victim) if(!is_station_level(z) || client) //NPC monsters won't heal while on station - adjustBruteLoss(-L.maxHealth/2) - L.investigate_log("has been devoured by [src].", INVESTIGATE_DEATHS) - var/mob/living/carbon/carbonTarget = L - if(istype(carbonTarget)) - qdel(L.get_organ_slot(ORGAN_SLOT_LUNGS)) - qdel(L.get_organ_slot(ORGAN_SLOT_HEART)) - qdel(L.get_organ_slot(ORGAN_SLOT_LIVER)) - L.adjustBruteLoss(500) - L.death() //make sure they die - L.apply_status_effect(/datum/status_effect/gutted) + heal_overall_damage(victim.maxHealth * 0.5) + victim.investigate_log("has been devoured by [src].", INVESTIGATE_DEATHS) + if(iscarbon(victim)) + qdel(victim.get_organ_slot(ORGAN_SLOT_LUNGS)) + qdel(victim.get_organ_slot(ORGAN_SLOT_HEART)) + qdel(victim.get_organ_slot(ORGAN_SLOT_LIVER)) + victim.adjustBruteLoss(500) + victim.death() //make sure they die + victim.apply_status_effect(/datum/status_effect/gutted) LoseTarget() return TRUE diff --git a/code/modules/mob/living/simple_animal/hostile/megafauna/bubblegum.dm b/code/modules/mob/living/simple_animal/hostile/megafauna/bubblegum.dm index eaeaddc3e03..91cf152acb0 100644 --- a/code/modules/mob/living/simple_animal/hostile/megafauna/bubblegum.dm +++ b/code/modules/mob/living/simple_animal/hostile/megafauna/bubblegum.dm @@ -68,6 +68,7 @@ Difficulty: Hard death_message = "sinks into a pool of blood, fleeing the battle. You've won, for now... " death_sound = 'sound/magic/enter_blood.ogg' faction = list(FACTION_MINING, FACTION_BOSS, FACTION_HELL) + summon_line = "GRAAAAAAAHHHHHHHHH!" /// Check to see if we should spawn blood var/spawn_blood = TRUE /// Actual time where enrage ends diff --git a/code/modules/mob/living/simple_animal/hostile/megafauna/colossus.dm b/code/modules/mob/living/simple_animal/hostile/megafauna/colossus.dm index 6be52bf1c85..9253448563b 100644 --- a/code/modules/mob/living/simple_animal/hostile/megafauna/colossus.dm +++ b/code/modules/mob/living/simple_animal/hostile/megafauna/colossus.dm @@ -55,6 +55,7 @@ loot = list(/obj/structure/closet/crate/necropolis/colossus) death_message = "disintegrates, leaving a glowing core in its wake." death_sound = 'sound/magic/demon_dies.ogg' + summon_line = "Your trial begins now." /// Spiral shots ability var/datum/action/cooldown/mob_cooldown/projectile_attack/spiral_shots/colossus/spiral_shots /// Random shots ablity @@ -154,8 +155,8 @@ return FALSE if(isgolem(victim) && victim.has_status_effect(/datum/status_effect/golem/gold)) return TRUE - var/mob/living/carbon/human/human_victim = victim - return human_victim.mind && istype(human_victim.mind.martial_art, /datum/martial_art/the_sleeping_carp) + + return istype(victim.mind?.martial_art, /datum/martial_art/the_sleeping_carp) /obj/effect/temp_visual/at_shield name = "anti-toolbox field" @@ -164,7 +165,7 @@ icon_state = "at_shield2" layer = FLY_LAYER plane = ABOVE_GAME_PLANE - light_system = MOVABLE_LIGHT + light_system = OVERLAY_LIGHT light_range = 2 duration = 8 var/target @@ -366,7 +367,7 @@ var/area/current_area = get_area(src) if (current_area in converted_areas) return FALSE - terrain_theme.apply_theme_to_list_of_turfs(current_area.get_contained_turfs()) + terrain_theme.apply_theme_to_list_of_turfs(current_area.get_turfs_from_all_zlevels()) converted_areas += current_area return TRUE diff --git a/code/modules/mob/living/simple_animal/hostile/megafauna/demonic_frost_miner.dm b/code/modules/mob/living/simple_animal/hostile/megafauna/demonic_frost_miner.dm index dc49d71f796..3415c45d12b 100644 --- a/code/modules/mob/living/simple_animal/hostile/megafauna/demonic_frost_miner.dm +++ b/code/modules/mob/living/simple_animal/hostile/megafauna/demonic_frost_miner.dm @@ -43,6 +43,7 @@ Difficulty: Extremely Hard death_message = "falls to the ground, decaying into plasma particles." death_sound = SFX_BODYFALL footstep_type = FOOTSTEP_MOB_HEAVY + summon_line = "I'M WIDE AWAKE! AND YOU'RE WIIIIIIIDE OPEN!" /// If the demonic frost miner is in its enraged state var/enraged = FALSE /// If the demonic frost miner is currently transforming to its enraged state @@ -320,7 +321,7 @@ Difficulty: Extremely Hard /obj/item/pickaxe/drill/jackhammer/demonic/use_tool(atom/target, mob/living/user, delay, amount=0, volume=0, datum/callback/extra_checks) var/turf/T = get_turf(target) - mineral_scan_pulse(T, world.view + 1) + mineral_scan_pulse(T, world.view + 1, src) . = ..() /obj/item/crusher_trophy/ice_block_talisman diff --git a/code/modules/mob/living/simple_animal/hostile/megafauna/drake.dm b/code/modules/mob/living/simple_animal/hostile/megafauna/drake.dm index 175d0032580..b53bf7633d8 100644 --- a/code/modules/mob/living/simple_animal/hostile/megafauna/drake.dm +++ b/code/modules/mob/living/simple_animal/hostile/megafauna/drake.dm @@ -69,6 +69,7 @@ death_message = "collapses into a pile of bones, its flesh sloughing away." death_sound = 'sound/magic/demon_dies.ogg' footstep_type = FOOTSTEP_MOB_HEAVY + summon_line = "ROOOOOOOOAAAAAAAAAAAR!" /// Fire cone ability var/datum/action/cooldown/mob_cooldown/fire_breath/cone/fire_cone /// Meteors ability diff --git a/code/modules/mob/living/simple_animal/hostile/megafauna/legion.dm b/code/modules/mob/living/simple_animal/hostile/megafauna/legion.dm index eda344ad1da..5077b3781e6 100644 --- a/code/modules/mob/living/simple_animal/hostile/megafauna/legion.dm +++ b/code/modules/mob/living/simple_animal/hostile/megafauna/legion.dm @@ -57,15 +57,31 @@ elimination = TRUE appearance_flags = LONG_GLIDE mouse_opacity = MOUSE_OPACITY_ICON - attack_action_types = list(/datum/action/innate/megafauna_attack/create_skull, - /datum/action/innate/megafauna_attack/charge_target, - /datum/action/innate/megafauna_attack/create_turrets) var/size = LEGION_LARGE - var/charging = FALSE + /// Create Skulls ability + var/datum/action/cooldown/mob_cooldown/create_legion_skull/create_legion_skull + /// Charge Target Ability + var/datum/action/cooldown/mob_cooldown/chase_target/chase_target + /// Create Turrets Ability + var/datum/action/cooldown/mob_cooldown/create_legion_turrets/create_legion_turrets /mob/living/simple_animal/hostile/megafauna/legion/Initialize(mapload) . = ..() ADD_TRAIT(src, TRAIT_NO_FLOATING_ANIM, INNATE_TRAIT) + create_legion_skull = new(src) + chase_target = new(src) + chase_target.size = size + create_legion_turrets = new(src) + create_legion_turrets.maximum_turrets = size * 2 + create_legion_skull.Grant(src) + chase_target.Grant(src) + create_legion_turrets.Grant(src) + +/mob/living/simple_animal/hostile/megafauna/legion/Destroy() + create_legion_skull = null + chase_target = null + create_legion_turrets = null + return ..() /mob/living/simple_animal/hostile/megafauna/legion/medium icon = 'icons/mob/simple/lavaland/64x64megafauna.dmi' @@ -91,80 +107,17 @@ maxHealth = 200 size = LEGION_SMALL - - -/datum/action/innate/megafauna_attack/create_skull - name = "Create Legion Skull" - button_icon = 'icons/mob/simple/lavaland/lavaland_monsters.dmi' - button_icon_state = "legion_head" - chosen_message = "You are now creating legion skulls." - chosen_attack_num = 1 - -/datum/action/innate/megafauna_attack/charge_target - name = "Charge Target" - button_icon = 'icons/mob/actions/actions_items.dmi' - button_icon_state = "sniper_zoom" - chosen_message = "You are now charging at your target." - chosen_attack_num = 2 - -/datum/action/innate/megafauna_attack/create_turrets - name = "Create Sentinels" - button_icon = 'icons/mob/simple/lavaland/lavaland_monsters.dmi' - button_icon_state = "legion_turret" - chosen_message = "You are now creating legion sentinels." - chosen_attack_num = 3 - /mob/living/simple_animal/hostile/megafauna/legion/OpenFire(the_target) - if(charging) - return - update_cooldowns(list(COOLDOWN_UPDATE_SET_RANGED = ranged_cooldown_time), ignore_staggered = TRUE) - if(client) - switch(chosen_attack) - if(1) - create_legion_skull() - if(2) - charge_target() - if(3) - create_legion_turrets() return switch(rand(4)) //Larger skulls use more attacks. if(0 to 2) - create_legion_skull() + create_legion_skull.Trigger(target = target) if(3) - charge_target() + chase_target.Trigger(target = target) if(4) - create_legion_turrets() - -//SKULLS - -///Attack proc. Spawns a singular legion skull. -/mob/living/simple_animal/hostile/megafauna/legion/proc/create_legion_skull() - var/mob/living/basic/legion_brood/minion = new(loc) - minion.assign_creator(src) - minion.ai_controller.blackboard[BB_BASIC_MOB_CURRENT_TARGET] = target - -//CHARGE - -///Attack proc. Gives legion some movespeed buffs and switches the AI to melee. At lower sizes, this also throws the skull at the player. -/mob/living/simple_animal/hostile/megafauna/legion/proc/charge_target() - visible_message(span_warning("[src] charges!")) - SpinAnimation(speed = 20, loops = 3, parallel = FALSE) - ranged = FALSE - retreat_distance = 0 - minimum_distance = 0 - set_varspeed(0) - charging = TRUE - addtimer(CALLBACK(src, PROC_REF(reset_charge)), 60) - var/mob/living/L = target - if(!istype(L) || L.stat != DEAD) //I know, weird syntax, but it just works. - addtimer(CALLBACK(src, PROC_REF(throw_thyself)), 20) - -///This is the proc that actually does the throwing. Charge only adds a timer for this. -/mob/living/simple_animal/hostile/megafauna/legion/proc/throw_thyself() - playsound(src, 'sound/weapons/sonic_jackhammer.ogg', 50, TRUE) - throw_at(target, 7, 1.1, src, FALSE, FALSE, CALLBACK(GLOBAL_PROC, GLOBAL_PROC_REF(playsound), src, 'sound/effects/meteorimpact.ogg', 50 * size, TRUE, 2), INFINITY) + create_legion_turrets.Trigger(target = target) ///Deals some extra damage on throw impact. /mob/living/simple_animal/hostile/megafauna/legion/throw_impact(mob/living/hit_atom, datum/thrownthing/throwingdatum) @@ -174,21 +127,6 @@ hit_atom.apply_damage(22 * size / 2, wound_bonus = CANT_WOUND) //It gets pretty hard to dodge the skulls when there are a lot of them. Scales down with size hit_atom.safe_throw_at(get_step(src, get_dir(src, hit_atom)), 2) //Some knockback. Prevent the legion from melee directly after the throw. -//TURRETS - -///Attack proc. Creates up to three legion turrets on suitable turfs nearby. -/mob/living/simple_animal/hostile/megafauna/legion/proc/create_legion_turrets(minimum = 2, maximum = size * 2) - playsound(src, 'sound/magic/RATTLEMEBONES.ogg', 100, TRUE) - var/list/possiblelocations = list() - for(var/turf/T in oview(src, 4)) //Only place the turrets on open turfs - if(T.is_blocked_turf()) - continue - possiblelocations += T - for(var/i in 1 to min(rand(minimum, maximum), LAZYLEN(possiblelocations))) //Makes sure aren't spawning in nullspace. - var/chosen = pick(possiblelocations) - new /obj/structure/legionturret(chosen) - possiblelocations -= chosen - /mob/living/simple_animal/hostile/megafauna/legion/GiveTarget(new_target) . = ..() if(target) @@ -212,15 +150,6 @@ var/mob/living/basic/legion_brood/legion = new(loc) legion.infest(living_target) - -///Resets the charge buffs. -/mob/living/simple_animal/hostile/megafauna/legion/proc/reset_charge() - ranged = TRUE - retreat_distance = 5 - minimum_distance = 5 - set_varspeed(2) - charging = FALSE - ///Special snowflake death() here. Can only die if size is 1 or lower and HP is 0 or below. /mob/living/simple_animal/hostile/megafauna/legion/death() //Make sure we didn't get cheesed @@ -255,93 +184,6 @@ new /mob/living/simple_animal/hostile/megafauna/legion/medium/right(loc) new /mob/living/simple_animal/hostile/megafauna/legion/medium/eye(loc) -///A basic turret that shoots at nearby mobs. Intended to be used for the legion megafauna. -/obj/structure/legionturret - name = "\improper Legion sentinel" - desc = "The eye pierces your soul." - icon = 'icons/mob/simple/lavaland/lavaland_monsters.dmi' - icon_state = "legion_turret" - light_power = 0.5 - light_range = 2 - max_integrity = 80 - luminosity = 6 - anchored = TRUE - density = TRUE - layer = ABOVE_OBJ_LAYER - armor_type = /datum/armor/structure_legionturret - //Compared with the targeted mobs. If they have the faction, turret won't shoot. - faction = list(FACTION_MINING) - ///What kind of projectile the actual damaging part should be. - var/projectile_type = /obj/projectile/beam/legion - ///Time until the tracer gets shot - var/initial_firing_time = 18 - ///How long it takes between shooting the tracer and the projectile. - var/shot_delay = 8 - -/datum/armor/structure_legionturret - laser = 100 - -/obj/structure/legionturret/Initialize(mapload) - . = ..() - addtimer(CALLBACK(src, PROC_REF(set_up_shot)), initial_firing_time) - ADD_TRAIT(src, TRAIT_NO_FLOATING_ANIM, INNATE_TRAIT) - -///Handles an extremely basic AI -/obj/structure/legionturret/proc/set_up_shot() - for(var/mob/living/L in oview(9, src)) - if(L.stat == DEAD || L.stat == UNCONSCIOUS) - continue - if(faction_check(faction, L.faction)) - continue - fire(L) - return - fire(get_edge_target_turf(src, pick(GLOB.cardinals))) - -///Called when attacking a target. Shoots a projectile at the turf underneath the target. -/obj/structure/legionturret/proc/fire(atom/target) - var/turf/T = get_turf(target) - var/turf/T1 = get_turf(src) - if(!T || !T1) - return - //Now we generate the tracer. - var/angle = get_angle(T1, T) - var/datum/point/vector/V = new(T1.x, T1.y, T1.z, 0, 0, angle) - generate_tracer_between_points(V, V.return_vector_after_increments(6), /obj/effect/projectile/tracer/legion/tracer, 0, shot_delay, 0, 0, 0, null) - playsound(src, 'sound/machines/airlockopen.ogg', 100, TRUE) - addtimer(CALLBACK(src, PROC_REF(fire_beam), angle), shot_delay) - -///Called shot_delay after the turret shot the tracer. Shoots a projectile into the same direction. -/obj/structure/legionturret/proc/fire_beam(angle) - var/obj/projectile/ouchie = new projectile_type(loc) - ouchie.firer = src - ouchie.fire(angle) - playsound(src, 'sound/effects/bin_close.ogg', 100, TRUE) - QDEL_IN(src, 5) - -///Used for the legion turret. -/obj/projectile/beam/legion - name = "blood pulse" - hitsound = 'sound/magic/magic_missile.ogg' - damage = 19 - range = 6 - light_color = COLOR_SOFT_RED - impact_effect_type = /obj/effect/temp_visual/kinetic_blast - tracer_type = /obj/effect/projectile/tracer/legion - muzzle_type = /obj/effect/projectile/tracer/legion - impact_type = /obj/effect/projectile/tracer/legion - hitscan = TRUE - projectile_piercing = ALL - -///Used for the legion turret tracer. -/obj/effect/projectile/tracer/legion/tracer - icon = 'icons/effects/beam.dmi' - icon_state = "blood_light" - -///Used for the legion turret beam. -/obj/effect/projectile/tracer/legion - icon = 'icons/effects/beam.dmi' - icon_state = "blood" - #undef LEGION_LARGE #undef LEGION_MEDIUM #undef LEGION_SMALL diff --git a/code/modules/mob/living/simple_animal/hostile/megafauna/wendigo.dm b/code/modules/mob/living/simple_animal/hostile/megafauna/wendigo.dm index 50a6cee44ce..342713ee960 100644 --- a/code/modules/mob/living/simple_animal/hostile/megafauna/wendigo.dm +++ b/code/modules/mob/living/simple_animal/hostile/megafauna/wendigo.dm @@ -54,6 +54,7 @@ Difficulty: Hard attack_action_types = list(/datum/action/innate/megafauna_attack/heavy_stomp, /datum/action/innate/megafauna_attack/teleport, /datum/action/innate/megafauna_attack/shockwave_scream) + summon_line = "GwaHOOOOOOOOOOOOOOOOOOOOO" /// Saves the turf the megafauna was created at (spawns exit portal here) var/turf/starting /// Range for wendigo stomping when it moves diff --git a/code/modules/mob/living/simple_animal/simple_animal.dm b/code/modules/mob/living/simple_animal/simple_animal.dm index 4817bf4f94c..0d3ea6e06e2 100644 --- a/code/modules/mob/living/simple_animal/simple_animal.dm +++ b/code/modules/mob/living/simple_animal/simple_animal.dm @@ -413,10 +413,8 @@ new /obj/effect/temp_visual/gib_animation/animal(loc, icon_gib) -/mob/living/simple_animal/say_mod(input, list/message_mods = list()) - if(length(speak_emote)) - verb_say = pick(speak_emote) - return ..() +/mob/living/simple_animal/get_default_say_verb() + return length(speak_emote) ? pick(speak_emote) : ..() /mob/living/simple_animal/proc/set_varspeed(var_value) speed = var_value diff --git a/code/modules/mob/living/simple_animal/slime/powers.dm b/code/modules/mob/living/simple_animal/slime/powers.dm index f129482eb24..a99a79a311a 100644 --- a/code/modules/mob/living/simple_animal/slime/powers.dm +++ b/code/modules/mob/living/simple_animal/slime/powers.dm @@ -30,11 +30,19 @@ if(stat) return FALSE + if(buckled) + stop_feeding() + return TRUE + var/list/choices = list() for(var/mob/living/nearby_mob in view(1,src)) - if(nearby_mob != src && Adjacent(nearby_mob)) + if(nearby_mob != src && Adjacent(nearby_mob) && nearby_mob.appears_alive()) choices += nearby_mob + if(length(choices) == 1) + start_feeding(choices[1]) + return TRUE + var/choice = tgui_input_list(src, "Who do you wish to feed on?", "Slime Feed", sort_names(choices)) if(isnull(choice)) return FALSE diff --git a/code/modules/mob/living/simple_animal/slime/slime.dm b/code/modules/mob/living/simple_animal/slime/slime.dm index a95b5f85b95..b0e8da60412 100644 --- a/code/modules/mob/living/simple_animal/slime/slime.dm +++ b/code/modules/mob/living/simple_animal/slime/slime.dm @@ -35,6 +35,7 @@ melee_damage_lower = 5 melee_damage_upper = 25 wound_bonus = -45 + can_buckle_to = FALSE verb_say = "blorbles" verb_ask = "inquisitively blorbles" diff --git a/code/modules/mob/login.dm b/code/modules/mob/login.dm index 51b8ed70a3b..2f013f855b8 100644 --- a/code/modules/mob/login.dm +++ b/code/modules/mob/login.dm @@ -99,6 +99,8 @@ update_client_colour() update_mouse_pointer() + refresh_looping_ambience() + if(client) if(client.view_size) client.view_size.resetToDefault() // Resets the client.view in case it was changed. diff --git a/code/modules/mob/mob.dm b/code/modules/mob/mob.dm index c7215340409..cf42a08a93b 100644 --- a/code/modules/mob/mob.dm +++ b/code/modules/mob/mob.dm @@ -916,18 +916,6 @@ set hidden = TRUE set category = null return -/** - * Topic call back for any mob - * - * * Unset machines if "mach_close" sent - * * refresh the inventory of machines in range if "refresh" sent - * * handles the strip panel equip and unequip as well if "item" sent - */ -/mob/Topic(href, href_list) - if(href_list["mach_close"]) - var/t1 = "window=[href_list["mach_close"]]" - unset_machine() - src << browse(null, t1) /** * Controls if a mouse drop succeeds (return null if it doesnt) @@ -1582,8 +1570,11 @@ /mob/proc/set_nutrition(change) //Seriously fuck you oldcoders. nutrition = max(0, change) +///Apply a proper movespeed modifier based on items we have equipped /mob/proc/update_equipment_speed_mods() - var/speedies = equipped_speed_mods() + var/speedies = 0 + for(var/obj/item/thing in get_equipped_speed_mod_items()) + speedies += thing.slowdown if(speedies > 0 && HAS_TRAIT(src, TRAIT_SETTLER)) //if our movespeed mod is in the negatives, we don't modify it since that's a benefit speedies *= 0.2 if(!speedies) @@ -1591,12 +1582,12 @@ else add_or_update_variable_movespeed_modifier(/datum/movespeed_modifier/equipment_speedmod, multiplicative_slowdown = speedies) -/// Gets the combined speed modification of all worn items -/// Except base mob type doesnt really wear items -/mob/proc/equipped_speed_mods() - for(var/obj/item/I in held_items) - if(I.item_flags & SLOWS_WHILE_IN_HAND) - . += I.slowdown +///Get all items in our possession that should affect our movespeed +/mob/proc/get_equipped_speed_mod_items() + . = list() + for(var/obj/item/thing in held_items) + if(thing.item_flags & SLOWS_WHILE_IN_HAND) + . += thing /mob/proc/set_stat(new_stat) if(new_stat == stat) @@ -1717,3 +1708,7 @@ set name = "View Skills" mind?.print_levels(src) + +/mob/key_down(key, client/client, full_key) + ..() + SEND_SIGNAL(src, COMSIG_MOB_KEYDOWN, key, client, full_key) diff --git a/code/modules/mob/mob_defines.dm b/code/modules/mob/mob_defines.dm index 245afb86932..aaf654e6dba 100644 --- a/code/modules/mob/mob_defines.dm +++ b/code/modules/mob/mob_defines.dm @@ -200,4 +200,3 @@ var/active_typing_indicator ///the icon currently used for the thinking indicator's bubble var/active_thinking_indicator - diff --git a/code/modules/mob/mob_movement.dm b/code/modules/mob/mob_movement.dm index 6dbcb9cfa4e..464313e1a4f 100644 --- a/code/modules/mob/mob_movement.dm +++ b/code/modules/mob/mob_movement.dm @@ -47,8 +47,8 @@ /client/Move(new_loc, direct) if(world.time < move_delay) //do not move anything ahead of this check please return FALSE - next_move_dir_add = 0 - next_move_dir_sub = 0 + next_move_dir_add = NONE + next_move_dir_sub = NONE var/old_move_delay = move_delay move_delay = world.time + world.tick_lag //this is here because Move() can now be called mutiple times per tick if(!direct || !new_loc) @@ -76,7 +76,8 @@ return mob.remote_control.relaymove(mob, direct) if(isAI(mob)) - return AIMove(new_loc,direct,mob) + var/mob/living/silicon/ai/smoovin_ai = mob + return smoovin_ai.AIMove(direct) if(Process_Grab()) //are we restrained by someone's grip? return @@ -348,9 +349,11 @@ /mob/proc/slip(knockdown_amount, obj/slipped_on, lube_flags, paralyze, force_drop = FALSE) add_mob_memory(/datum/memory/was_slipped, antagonist = slipped_on) + SEND_SIGNAL(src, COMSIG_MOB_SLIPPED, knockdown_amount, slipped_on, lube_flags, paralyze, force_drop) + //bodypart selection verbs - Cyberboss //8: repeated presses toggles through head - eyes - mouth -//9: eyes 8: head 7: mouth +//7: mouth 8: head 9: eyes //4: r-arm 5: chest 6: l-arm //1: r-leg 2: groin 3: l-leg @@ -359,12 +362,12 @@ return mob && mob.hud_used && mob.hud_used.zone_select && istype(mob.hud_used.zone_select, /atom/movable/screen/zone_sel) /** - * Hidden verb to set the target zone of a mob to the head + * Hidden verbs to set desired body target zone * - * (bound to 8) - repeated presses toggles through head - eyes - mouth + * Uses numpad keys 1-9 */ -///Hidden verb to target the head, bound to 8 +///Hidden verb to cycle through head zone with repeated presses, head - eyes - mouth. Bound to 8 /client/verb/body_toggle_head() set name = "body-toggle-head" set hidden = TRUE @@ -384,6 +387,17 @@ var/atom/movable/screen/zone_sel/selector = mob.hud_used.zone_select selector.set_selected_zone(next_in_line, mob) +///Hidden verb to target the head, unbound by default. +/client/verb/body_head() + set name = "body-head" + set hidden = TRUE + + if(!check_has_body_select()) + return + + var/atom/movable/screen/zone_sel/selector = mob.hud_used.zone_select + selector.set_selected_zone(BODY_ZONE_HEAD, mob) + ///Hidden verb to target the eyes, bound to 7 /client/verb/body_eyes() set name = "body-eyes" diff --git a/code/modules/mob/mob_say.dm b/code/modules/mob/mob_say.dm index 28b3da6580a..1f384878e8d 100644 --- a/code/modules/mob/mob_say.dm +++ b/code/modules/mob/mob_say.dm @@ -169,8 +169,8 @@ return message if (is_banned_from(ckey, "Emote")) return copytext(message, customsaypos + 1) - mods[MODE_CUSTOM_SAY_EMOTE] = copytext(message, 1, customsaypos) - message = copytext(message, customsaypos + 1) + mods[MODE_CUSTOM_SAY_EMOTE] = lowercase_title(copytext(message, 1, customsaypos)) // NOVA EDIT: ORIGINAL: mods[MODE_CUSTOM_SAY_EMOTE] = copytext(message, 1, customsaypos) + message = trim(copytext(message, customsaypos + 1)) //NOVA EDIT: ORIGINAL: message = copytext(message, customsaypos + 1) if (!message) mods[MODE_CUSTOM_SAY_ERASE_INPUT] = TRUE message = "an interesting thing to say" diff --git a/code/modules/mob_spawn/ghost_roles/spider_roles.dm b/code/modules/mob_spawn/ghost_roles/spider_roles.dm index f50d31d75cd..8ab32d9d4f4 100644 --- a/code/modules/mob_spawn/ghost_roles/spider_roles.dm +++ b/code/modules/mob_spawn/ghost_roles/spider_roles.dm @@ -236,5 +236,5 @@ display_spiders[initial(spider.name)] = option sort_list(display_spiders) - var/chosen_spider = show_radial_menu(user, egg, display_spiders, radius = 38) + var/chosen_spider = show_radial_menu(user, egg, display_spiders, radius = 38, require_near = TRUE) return spider_list[chosen_spider] diff --git a/code/modules/mob_spawn/ghost_roles/venus_human_trap.dm b/code/modules/mob_spawn/ghost_roles/venus_human_trap.dm index af5203cc396..b9a89d0c6dd 100644 --- a/code/modules/mob_spawn/ghost_roles/venus_human_trap.dm +++ b/code/modules/mob_spawn/ghost_roles/venus_human_trap.dm @@ -11,6 +11,7 @@ flavour_text = "You are a venus human trap! Protect the kudzu at all costs, and feast on those who oppose you!" faction = list(FACTION_HOSTILE,FACTION_VINES,FACTION_PLANTS) spawner_job_path = /datum/job/venus_human_trap + invisibility = INVISIBILITY_ABSTRACT //The flower bud structure is our visible component, we just handle logic. /// Physical structure housing the spawner var/obj/structure/alien/resin/flower_bud/flower_bud /// Used to determine when to notify ghosts @@ -30,6 +31,10 @@ if(flower_bud.trait_flags & SPACEVINE_COLD_RESISTANT) spawned_human_trap.unsuitable_cold_damage = 0 +/obj/effect/mob_spawn/ghost_role/venus_human_trap/special(mob/living/spawned_mob, mob/mob_possessor) + . = ..() + spawned_mob.mind.add_antag_datum(/datum/antagonist/venus_human_trap) + /// Called when the attached flower bud has borne fruit (ie. is ready) /obj/effect/mob_spawn/ghost_role/venus_human_trap/proc/bear_fruit() ready = TRUE diff --git a/code/modules/mod/mod_construction.dm b/code/modules/mod/mod_construction.dm index fdbcf47d379..8442783d331 100644 --- a/code/modules/mod/mod_construction.dm +++ b/code/modules/mod/mod_construction.dm @@ -58,7 +58,7 @@ icon_state = "plasma-flower" desc = "A strange flower from the desolate wastes of lavaland. It pulses with a bright purple glow. \ Its shape is remarkably similar to that of a MOD core." - light_system = MOVABLE_LIGHT + light_system = OVERLAY_LIGHT light_color = "#cc00cc" light_range = 2 diff --git a/code/modules/mod/mod_core.dm b/code/modules/mod/mod_core.dm index d5c43497982..75a5b2385b7 100644 --- a/code/modules/mod/mod_core.dm +++ b/code/modules/mod/mod_core.dm @@ -367,7 +367,7 @@ icon_state = "mod-core-plasma-flower" desc = "A strange flower from the desolate wastes of lavaland. It pulses with a strange purple glow. \ The wires coming out of it could be hooked into a MODsuit." - light_system = MOVABLE_LIGHT + light_system = OVERLAY_LIGHT light_color = "#cc00cc" light_range = 2 // Slightly better than the normal plasma core. diff --git a/code/modules/mod/mod_theme.dm b/code/modules/mod/mod_theme.dm index c8611ab7bd0..61bc4218622 100644 --- a/code/modules/mod/mod_theme.dm +++ b/code/modules/mod/mod_theme.dm @@ -760,6 +760,7 @@ armor_type = /datum/armor/mod_theme_safeguard resistance_flags = FIRE_PROOF max_heat_protection_temperature = FIRE_SUIT_MAX_TEMP_PROTECT + inbuilt_modules = list(/obj/item/mod/module/shove_blocker/locked) slowdown_inactive = 0.75 slowdown_active = 0.25 allowed_suit_storage = list( @@ -1772,7 +1773,7 @@ UNSEALED_COVER = HEADCOVERSMOUTH|HEADCOVERSEYES|PEPPERPROOF, ), CHESTPLATE_FLAGS = list( - UNSEALED_CLOTHING = THICKMATERIAL|STOPSPRESSUREDAMAGE|BLOCKS_SHOVE_KNOCKDOWN, + UNSEALED_CLOTHING = THICKMATERIAL|STOPSPRESSUREDAMAGE, SEALED_INVISIBILITY = HIDEJUMPSUIT, ), GAUNTLETS_FLAGS = list( diff --git a/code/modules/mod/mod_types.dm b/code/modules/mod/mod_types.dm index 3e4b89e6a52..0933c7e8f18 100644 --- a/code/modules/mod/mod_types.dm +++ b/code/modules/mod/mod_types.dm @@ -164,6 +164,7 @@ /obj/item/mod/module/pepper_shoulders, /obj/item/mod/module/criminalcapture, /obj/item/mod/module/dispenser/mirage, + /obj/item/mod/module/quick_cuff, ) /obj/item/mod/control/pre_equipped/safeguard @@ -177,6 +178,7 @@ /obj/item/mod/module/megaphone, /obj/item/mod/module/projectile_dampener, /obj/item/mod/module/pepper_shoulders, + /obj/item/mod/module/quick_cuff, ) default_pins = list( /obj/item/mod/module/jetpack, @@ -191,6 +193,7 @@ /obj/item/mod/module/magnetic_harness, /obj/item/mod/module/jetpack/advanced, /obj/item/mod/module/pathfinder, + /obj/item/mod/module/quick_cuff, ) default_pins = list( /obj/item/mod/module/jetpack/advanced, @@ -217,6 +220,7 @@ /obj/item/mod/module/flashlight, /obj/item/mod/module/dna_lock, /obj/item/mod/module/hat_stabilizer/syndicate, + /obj/item/mod/module/quick_cuff, ) default_pins = list( /obj/item/mod/module/armor_booster, @@ -236,6 +240,7 @@ /obj/item/mod/module/flashlight, /obj/item/mod/module/dna_lock, /obj/item/mod/module/hat_stabilizer/syndicate, + /obj/item/mod/module/quick_cuff, ) default_pins = list( /obj/item/mod/module/armor_booster, @@ -256,6 +261,7 @@ /obj/item/mod/module/jump_jet, /obj/item/mod/module/flashlight, /obj/item/mod/module/hat_stabilizer/syndicate, + /obj/item/mod/module/quick_cuff, ) default_pins = list( /obj/item/mod/module/armor_booster, @@ -291,6 +297,7 @@ /obj/item/mod/module/jump_jet, /obj/item/mod/module/flashlight, /obj/item/mod/module/hat_stabilizer/syndicate, + /obj/item/mod/module/quick_cuff, ) default_pins = list( /obj/item/mod/module/armor_booster, @@ -309,6 +316,7 @@ /obj/item/mod/module/flashlight, /obj/item/mod/module/hat_stabilizer/syndicate, /obj/item/mod/module/flamethrower, + /obj/item/mod/module/quick_cuff, ) default_pins = list( /obj/item/mod/module/armor_booster, @@ -327,6 +335,7 @@ /obj/item/mod/module/quick_carry, /obj/item/mod/module/visor/diaghud, /obj/item/mod/module/hat_stabilizer/syndicate, + /obj/item/mod/module/quick_cuff, ) @@ -343,6 +352,7 @@ /obj/item/mod/module/storage/syndicate, /obj/item/mod/module/hat_stabilizer/syndicate, /obj/item/mod/module/tether, + /obj/item/mod/module/quick_cuff, ) /obj/item/mod/control/pre_equipped/enchanted @@ -353,6 +363,7 @@ /obj/item/mod/module/storage/large_capacity, /obj/item/mod/module/energy_shield/wizard, /obj/item/mod/module/emp_shield/advanced, + /obj/item/mod/module/quick_cuff, ) /obj/item/mod/control/pre_equipped/ninja @@ -367,6 +378,7 @@ /obj/item/mod/module/dispenser/ninja, /obj/item/mod/module/dna_lock/reinforced, /obj/item/mod/module/emp_shield/pulse, + /obj/item/mod/module/quick_cuff, ) default_pins = list( /obj/item/mod/module/stealth/ninja, @@ -404,6 +416,7 @@ /obj/item/mod/module/emp_shield, /obj/item/mod/module/magnetic_harness, /obj/item/mod/module/flashlight, + /obj/item/mod/module/quick_cuff, ) /// The insignia type, insignias show what sort of member of the ERT you're dealing with. var/insignia_type = /obj/item/mod/module/insignia @@ -454,6 +467,7 @@ /obj/item/mod/module/emp_shield, /obj/item/mod/module/magnetic_harness, /obj/item/mod/module/flashlight, + /obj/item/mod/module/quick_cuff, ) /obj/item/mod/control/pre_equipped/responsory/inquisitory/commander @@ -483,6 +497,7 @@ /obj/item/mod/module/emp_shield/advanced, /obj/item/mod/module/magnetic_harness, /obj/item/mod/module/jetpack, + /obj/item/mod/module/quick_cuff, ) default_pins = list( /obj/item/mod/module/jetpack, @@ -496,6 +511,7 @@ /obj/item/mod/module/emp_shield/advanced, /obj/item/mod/module/magnetic_harness, /obj/item/mod/module/jetpack, + /obj/item/mod/module/quick_cuff, ) /obj/item/mod/control/pre_equipped/corporate @@ -558,6 +574,8 @@ /obj/item/mod/module/magboot/advanced, /obj/item/mod/module/jetpack/advanced, /obj/item/mod/module/anomaly_locked/kinesis/admin, + /obj/item/mod/module/shove_blocker, + /obj/item/mod/module/quick_cuff, ) default_pins = list( /obj/item/mod/module/stealth/ninja, diff --git a/code/modules/mod/modules/module_pathfinder.dm b/code/modules/mod/modules/module_pathfinder.dm index 85d1ce7a00a..087718d14b3 100644 --- a/code/modules/mod/modules/module_pathfinder.dm +++ b/code/modules/mod/modules/module_pathfinder.dm @@ -94,10 +94,9 @@ return ..() /obj/item/implant/mod/get_data() - var/dat = {"Implant Specifications:
    - Name: Nakamura Engineering Pathfinder Implant
    - Implant Details: Allows for the recall of a Modular Outerwear Device by the implant owner at any time.
    "} - return dat + return "Implant Specifications:
    \ + Name: Nakamura Engineering Pathfinder Implant
    \ + Implant Details: Allows for the recall of a Modular Outerwear Device by the implant owner at any time.
    " /obj/item/implant/mod/proc/recall() if(!module?.mod) diff --git a/code/modules/mod/modules/modules_general.dm b/code/modules/mod/modules/modules_general.dm index 4acff57f6dc..9962bc8b9a4 100644 --- a/code/modules/mod/modules/modules_general.dm +++ b/code/modules/mod/modules/modules_general.dm @@ -31,11 +31,10 @@ RegisterSignal(mod.chestplate, COMSIG_ITEM_PRE_UNEQUIP, PROC_REF(on_chestplate_unequip)) /obj/item/mod/module/storage/on_uninstall(deleting = FALSE) - var/datum/storage/modstorage = mod.atom_storage atom_storage.locked = STORAGE_FULLY_LOCKED - qdel(modstorage) + QDEL_NULL(mod.atom_storage) if(!deleting) - atom_storage.remove_all(get_turf(src)) + atom_storage.remove_all(mod.drop_location()) UnregisterSignal(mod.chestplate, COMSIG_ITEM_PRE_UNEQUIP) /obj/item/mod/module/storage/proc/on_chestplate_unequip(obj/item/source, force, atom/newloc, no_move, invdrop, silent) @@ -366,7 +365,7 @@ incompatible_modules = list(/obj/item/mod/module/flashlight) cooldown_time = 0.5 SECONDS overlay_state_inactive = "module_light" - light_system = MOVABLE_LIGHT_DIRECTIONAL + light_system = OVERLAY_LIGHT_DIRECTIONAL light_color = COLOR_WHITE light_range = 4 light_power = 1 diff --git a/code/modules/mod/modules/modules_maint.dm b/code/modules/mod/modules/modules_maint.dm index 30889e4f982..5d0d374523f 100644 --- a/code/modules/mod/modules/modules_maint.dm +++ b/code/modules/mod/modules/modules_maint.dm @@ -67,10 +67,6 @@ var/datum/client_colour/rave_screen /// The current element in the rainbow_order list we are on. var/rave_number = 1 - /// The track we selected to play. - var/datum/track/selection - /// A list of all the songs we can play. - var/list/songs = list() /// A list of the colors the module can take. var/static/list/rainbow_order = list( list(1,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,1, 0,0,0,0), @@ -80,23 +76,18 @@ list(0,0,0,0, 0,0.5,0,0, 0,0,1,0, 0,0,0,1, 0,0,0,0), list(1,0,0,0, 0,0,0,0, 0,0,1,0, 0,0,0,1, 0,0,0,0), ) + /// What actually plays music to us + var/datum/jukebox/single_mob/music_player /obj/item/mod/module/visor/rave/Initialize(mapload) . = ..() - var/list/tracks = flist("[global.config.directory]/jukebox_music/sounds/") - for(var/sound in tracks) - var/datum/track/track = new() - track.song_path = file("[global.config.directory]/jukebox_music/sounds/[sound]") - var/list/sound_params = splittext(sound,"+") - if(length(sound_params) != 3) - continue - track.song_name = sound_params[1] - track.song_length = text2num(sound_params[2]) - track.song_beat = text2num(sound_params[3]) - songs[track.song_name] = track - if(length(songs)) - var/song_name = pick(songs) - selection = songs[song_name] + music_player = new(src) + music_player.sound_loops = TRUE + +/obj/item/mod/module/visor/rave/Destroy() + QDEL_NULL(music_player) + QDEL_NULL(rave_screen) + return ..() /obj/item/mod/module/visor/rave/on_activation() . = ..() @@ -104,24 +95,26 @@ return rave_screen = mod.wearer.add_client_colour(/datum/client_colour/rave) rave_screen.update_colour(rainbow_order[rave_number]) - if(selection) - mod.wearer.playsound_local(get_turf(src), null, 50, channel = CHANNEL_JUKEBOX, sound_to_use = sound(selection.song_path), use_reverb = FALSE) + music_player.start_music(mod.wearer) /obj/item/mod/module/visor/rave/on_deactivation(display_message = TRUE, deleting = FALSE) . = ..() if(!.) return QDEL_NULL(rave_screen) - if(selection) - mod.wearer.stop_sound_channel(CHANNEL_JUKEBOX) - if(deleting) - return - SEND_SOUND(mod.wearer, sound('sound/machines/terminal_off.ogg', volume = 50, channel = CHANNEL_JUKEBOX)) + if(isnull(music_player.active_song_sound)) + return + + music_player.unlisten_all() + QDEL_NULL(music_player) + if(deleting) + return + SEND_SOUND(mod.wearer, sound('sound/machines/terminal_off.ogg', volume = 50, channel = CHANNEL_JUKEBOX)) /obj/item/mod/module/visor/rave/generate_worn_overlay(mutable_appearance/standing) . = ..() for(var/mutable_appearance/appearance as anything in .) - appearance.color = active ? rainbow_order[rave_number] : null + appearance.color = isnull(music_player.active_song_sound) ? null : rainbow_order[rave_number] /obj/item/mod/module/visor/rave/on_active_process(seconds_per_tick) rave_number++ @@ -132,20 +125,20 @@ /obj/item/mod/module/visor/rave/get_configuration() . = ..() - if(length(songs)) - .["selection"] = add_ui_configuration("Song", "list", selection.song_name, clean_songs()) + if(length(music_player.songs)) + .["selection"] = add_ui_configuration("Song", "list", music_player.selection.song_name, music_player.songs) /obj/item/mod/module/visor/rave/configure_edit(key, value) switch(key) if("selection") - if(active) + if(!isnull(music_player.active_song_sound)) + return + + var/datum/track/new_song = music_player.songs[value] + if(QDELETED(src) || !istype(new_song, /datum/track)) return - selection = songs[value] -/obj/item/mod/module/visor/rave/proc/clean_songs() - . = list() - for(var/track in songs) - . += track + music_player.selection = new_song ///Tanner - Tans you with spraytan. /obj/item/mod/module/tanner diff --git a/code/modules/mod/modules/modules_security.dm b/code/modules/mod/modules/modules_security.dm index 1e85656962a..0b8c0299f04 100644 --- a/code/modules/mod/modules/modules_security.dm +++ b/code/modules/mod/modules/modules_security.dm @@ -18,7 +18,7 @@ /obj/item/mod/module/magnetic_harness/Initialize(mapload) . = ..() if(!guns_typecache) - guns_typecache = typecacheof(list(/obj/item/gun/ballistic, /obj/item/gun/energy, /obj/item/gun/grenadelauncher, /obj/item/gun/chem, /obj/item/gun/syringe, /obj/item/gun/microfusion)) //NOVA EDIT - MICROFUSION + guns_typecache = typecacheof(list(/obj/item/gun/ballistic, /obj/item/gun/energy, /obj/item/gun/grenadelauncher, /obj/item/gun/chem, /obj/item/gun/syringe)) /obj/item/mod/module/magnetic_harness/on_install() already_allowed_guns = guns_typecache & mod.chestplate.allowed @@ -578,3 +578,36 @@ #undef SHOOTING_ASSISTANT_OFF #undef STORMTROOPER_MODE #undef SHARPSHOOTER_MODE + +/obj/item/mod/module/shove_blocker + name = "MOD bulwark module" + desc = "Layers upon layers of shock dampening plates, just to stop you from getting shoved into a wall by an angry mob." + icon_state = "bulwark" + complexity = 3 + incompatible_modules = list(/obj/item/mod/module/shove_blocker) + +/obj/item/mod/module/shove_blocker/on_suit_activation() + mod.wearer.add_traits(list(TRAIT_SHOVE_KNOCKDOWN_BLOCKED, TRAIT_NO_STAGGER, TRAIT_NO_THROW_HITPUSH), MOD_TRAIT) + +/obj/item/mod/module/shove_blocker/on_suit_deactivation(deleting = FALSE) + mod.wearer.remove_traits(list(TRAIT_SHOVE_KNOCKDOWN_BLOCKED, TRAIT_NO_STAGGER, TRAIT_NO_THROW_HITPUSH), MOD_TRAIT) + +/obj/item/mod/module/shove_blocker/locked + name = "superglued MOD bulwark module" + desc = "Layers upon layers of shock dampening plates, just to stop you from getting shoved into a wall by an angry mob. Good luck removing this one." + removable = FALSE + complexity = 0 + +/obj/item/mod/module/quick_cuff + name = "MOD restraint assist module" + desc = "Enhanced gauntlent grip pads that help with placing individuals in restraints more quickly. Doesn't look like they'll come off." + removable = FALSE + complexity = 0 + +/obj/item/mod/module/quick_cuff/on_suit_activation() + . = ..() + ADD_TRAIT(mod.wearer, TRAIT_FAST_CUFFING, MOD_TRAIT) + +/obj/item/mod/module/quick_cuff/on_suit_deactivation(deleting = FALSE) + . = ..() + REMOVE_TRAIT(mod.wearer, TRAIT_FAST_CUFFING, MOD_TRAIT) diff --git a/code/modules/mod/modules/modules_service.dm b/code/modules/mod/modules/modules_service.dm index 5381a26e88b..e6e4a01c664 100644 --- a/code/modules/mod/modules/modules_service.dm +++ b/code/modules/mod/modules/modules_service.dm @@ -70,13 +70,13 @@ /obj/item/mod/module/waddle/on_suit_activation() mod.boots.AddComponent(/datum/component/squeak, list('sound/effects/footstep/clownstep1.ogg'=1,'sound/effects/footstep/clownstep2.ogg'=1), 50, falloff_exponent = 20) //die off quick please - mod.wearer.AddElement(/datum/element/waddling) + mod.wearer.AddElementTrait(TRAIT_WADDLING, MOD_TRAIT, /datum/element/waddling) if(is_clown_job(mod.wearer.mind?.assigned_role)) mod.wearer.add_mood_event("clownshoes", /datum/mood_event/clownshoes) /obj/item/mod/module/waddle/on_suit_deactivation(deleting = FALSE) if(!deleting) qdel(mod.boots.GetComponent(/datum/component/squeak)) - mod.wearer.RemoveElement(/datum/element/waddling) + REMOVE_TRAIT(mod.wearer, TRAIT_WADDLING, MOD_TRAIT) if(is_clown_job(mod.wearer.mind?.assigned_role)) mod.wearer.clear_mood_event("clownshoes") diff --git a/code/modules/mod/modules/modules_supply.dm b/code/modules/mod/modules/modules_supply.dm index 1240a7adff3..80a662aba60 100644 --- a/code/modules/mod/modules/modules_supply.dm +++ b/code/modules/mod/modules/modules_supply.dm @@ -568,7 +568,7 @@ range = 6 suppressed = SUPPRESSED_VERY armor_flag = BOMB - light_system = MOVABLE_LIGHT + light_system = OVERLAY_LIGHT light_range = 1 light_power = 1 light_color = COLOR_LIGHT_ORANGE @@ -590,7 +590,7 @@ icon = 'icons/obj/clothing/modsuit/mod_modules.dmi' anchored = TRUE resistance_flags = FIRE_PROOF|LAVA_PROOF - light_system = MOVABLE_LIGHT + light_system = OVERLAY_LIGHT light_range = 1 light_power = 1 light_color = COLOR_LIGHT_ORANGE diff --git a/code/modules/modular_computers/computers/item/computer.dm b/code/modules/modular_computers/computers/item/computer.dm index 208652ca551..7994f6b4df3 100644 --- a/code/modules/modular_computers/computers/item/computer.dm +++ b/code/modules/modular_computers/computers/item/computer.dm @@ -10,7 +10,7 @@ integrity_failure = 0.5 max_integrity = 100 armor_type = /datum/armor/item_modular_computer - light_system = MOVABLE_LIGHT_DIRECTIONAL + light_system = OVERLAY_LIGHT_DIRECTIONAL ///The ID currently stored in the computer. var/obj/item/card/id/computer_id_slot @@ -110,6 +110,15 @@ ///The max amount of paper that can be held at once. var/max_paper = 30 + /// The capacity of the circuit shell component of this item + var/shell_capacity = SHELL_CAPACITY_MEDIUM + + /** + * Reference to the circuit shell component, because we're special and do special things with it, + * such as creating and deleting unremovable circuit comps based on the programs installed. + */ + var/datum/component/shell/shell + /datum/armor/item_modular_computer bullet = 20 laser = 20 @@ -120,6 +129,7 @@ START_PROCESSING(SSobj, src) if(!physical) physical = src + add_shell_component(shell_capacity) set_light_color(comp_light_color) set_light_range(comp_light_luminosity) if(looping_sound) @@ -137,6 +147,26 @@ register_context() update_appearance() +///Initialize the shell for this item, or the physical machinery it belongs to. +/obj/item/modular_computer/proc/add_shell_component(capacity = SHELL_CAPACITY_MEDIUM, shell_flags = NONE) + shell = physical.AddComponent(/datum/component/shell, list(new /obj/item/circuit_component/modpc), capacity, shell_flags) + RegisterSignal(shell, COMSIG_SHELL_CIRCUIT_ATTACHED, PROC_REF(on_circuit_attached)) + RegisterSignal(shell, COMSIG_SHELL_CIRCUIT_REMOVED, PROC_REF(on_circuit_removed)) + +/obj/item/modular_computer/proc/on_circuit_attached(datum/source) + SIGNAL_HANDLER + RegisterSignal(shell.attached_circuit, COMSIG_CIRCUIT_PRE_POWER_USAGE, PROC_REF(use_power_for_circuits)) + +///Try to draw power from our internal cell first, before switching to that of the circuit. +/obj/item/modular_computer/proc/use_power_for_circuits(datum/source, power_usage_per_input) + SIGNAL_HANDLER + if(use_power(power_usage_per_input, check_programs = FALSE)) + return COMPONENT_OVERRIDE_POWER_USAGE + +/obj/item/modular_computer/proc/on_circuit_removed(datum/source) + SIGNAL_HANDLER + UnregisterSignal(shell.attached_circuit, COMSIG_CIRCUIT_PRE_POWER_USAGE) + /obj/item/modular_computer/proc/install_default_programs() SHOULD_CALL_PARENT(FALSE) for(var/programs in default_programs + starting_programs) @@ -158,6 +188,7 @@ if(computer_id_slot) QDEL_NULL(computer_id_slot) + shell = null physical = null return ..() @@ -246,7 +277,6 @@ if(computer_id_slot) return FALSE - computer_id_slot = inserting_id if(user) if(!user.transferItemToLoc(inserting_id, src)) return FALSE @@ -254,6 +284,8 @@ else inserting_id.forceMove(src) + computer_id_slot = inserting_id + playsound(src, 'sound/machines/terminal_insert_disc.ogg', 50, FALSE) if(ishuman(loc)) var/mob/living/carbon/human/human_wearer = loc @@ -261,6 +293,7 @@ human_wearer.sec_hud_set_ID() update_appearance() update_slot_icon() + SEND_SIGNAL(src, COMSIG_MODULAR_COMPUTER_INSERTED_ID, inserting_id, user) return TRUE /** @@ -438,29 +471,33 @@ /obj/item/modular_computer/proc/turn_on(mob/user, open_ui = TRUE) var/issynth = issilicon(user) // Robots and AIs get different activation messages. if(atom_integrity <= integrity_failure * max_integrity) - if(issynth) - to_chat(user, span_warning("You send an activation signal to \the [src], but it responds with an error code. It must be damaged.")) - else - to_chat(user, span_warning("You press the power button, but the computer fails to boot up, displaying variety of errors before shutting down again.")) + if(user) + if(issynth) + to_chat(user, span_warning("You send an activation signal to \the [src], but it responds with an error code. It must be damaged.")) + else + to_chat(user, span_warning("You press the power button, but the computer fails to boot up, displaying variety of errors before shutting down again.")) return FALSE if(use_power()) // checks if the PC is powered - if(issynth) - to_chat(user, span_notice("You send an activation signal to \the [src], turning it on.")) - else - to_chat(user, span_notice("You press the power button and start up \the [src].")) if(looping_sound) soundloop.start() enabled = TRUE update_appearance() - if(open_ui) - update_tablet_open_uis(user) + if(user) + if(issynth) + to_chat(user, span_notice("You send an activation signal to \the [src], turning it on.")) + else + to_chat(user, span_notice("You press the power button and start up \the [src].")) + if(open_ui) + update_tablet_open_uis(user) + SEND_SIGNAL(src, COMSIG_MODULAR_COMPUTER_TURNED_ON, user) return TRUE else // Unpowered - if(issynth) - to_chat(user, span_warning("You send an activation signal to \the [src] but it does not respond.")) - else - to_chat(user, span_warning("You press the power button but \the [src] does not respond.")) + if(user) + if(issynth) + to_chat(user, span_warning("You send an activation signal to \the [src] but it does not respond.")) + else + to_chat(user, span_warning("You press the power button but \the [src] does not respond.")) return FALSE // Process currently calls handle_power(), may be expanded in future if more things are added. @@ -572,18 +609,22 @@ if(program.computer != src) CRASH("tried to open program that does not belong to this computer") - if(!program || !istype(program)) // Program not found or it's not executable program. + if(isnull(program) || !istype(program)) // Program not found or it's not executable program. if(user) to_chat(user, span_danger("\The [src]'s screen shows \"I/O ERROR - Unable to run program\" warning.")) return FALSE + if(active_program == program) + return FALSE + // The program is already running. Resume it. if(program in idle_threads) + active_program?.background_program() active_program = program program.alert_pending = FALSE idle_threads.Remove(program) if(open_ui) - update_tablet_open_uis(user) + INVOKE_ASYNC(src, PROC_REF(update_tablet_open_uis), user) update_appearance(UPDATE_ICON) return TRUE @@ -603,10 +644,12 @@ if(!program.on_start(user)) return FALSE + active_program?.background_program() + active_program = program program.alert_pending = FALSE if(open_ui) - update_tablet_open_uis(user) + INVOKE_ASYNC(src, PROC_REF(update_tablet_open_uis), user) update_appearance(UPDATE_ICON) return TRUE @@ -640,9 +683,9 @@ return SSmodular_computers.add_log("[src]: [text]") /obj/item/modular_computer/proc/close_all_programs() - active_program = null + active_program?.kill_program() for(var/datum/computer_file/program/idle as anything in idle_threads) - idle_threads.Remove(idle) + idle.kill_program() /obj/item/modular_computer/proc/shutdown_computer(loud = TRUE) close_all_programs() @@ -652,6 +695,7 @@ physical.visible_message(span_notice("\The [src] shuts down.")) enabled = FALSE update_appearance() + SEND_SIGNAL(src, COMSIG_MODULAR_COMPUTER_SHUT_DOWN, loud) ///Imprints name and job into the modular computer, and calls back to necessary functions. ///Acts as a replacement to directly setting the imprints fields. All fields are optional, the proc will try to fill in missing gaps. @@ -682,10 +726,11 @@ * It is separated from ui_act() to be overwritten as needed. */ /obj/item/modular_computer/proc/toggle_flashlight(mob/user) - if(!has_light || !internal_cell || !internal_cell.charge) + if(!has_light || !internal_cell?.charge) return FALSE if(!COOLDOWN_FINISHED(src, disabled_time)) - balloon_alert(user, "disrupted!") + if(user) + balloon_alert(user, "disrupted!") return FALSE set_light_on(!light_on) update_appearance() @@ -886,17 +931,16 @@ return FALSE inserted_pai = card balloon_alert(user, "inserted pai") - var/datum/action/innate/pai/messenger/messenger_ability = new(inserted_pai.pai) - messenger_ability.Grant(inserted_pai.pai) + if(inserted_pai.pai) + inserted_pai.pai.give_messenger_ability() update_appearance(UPDATE_ICON) return TRUE /obj/item/modular_computer/proc/remove_pai(mob/user) if(!inserted_pai) return FALSE - var/datum/action/innate/pai/messenger/messenger_ability = locate() in inserted_pai.pai.actions - messenger_ability.Remove(inserted_pai.pai) - qdel(messenger_ability) + if(inserted_pai.pai) + inserted_pai.pai.remove_messenger_ability() if(user) user.put_in_hands(inserted_pai) balloon_alert(user, "removed pAI") diff --git a/code/modules/modular_computers/computers/item/computer_circuit.dm b/code/modules/modular_computers/computers/item/computer_circuit.dm new file mode 100644 index 00000000000..2a6a0d70be9 --- /dev/null +++ b/code/modules/modular_computers/computers/item/computer_circuit.dm @@ -0,0 +1,100 @@ +///A simple circuit component compatible with stationary consoles, laptops and PDAs, independent from programs. +/obj/item/circuit_component/modpc + display_name = "Modular Computer" + desc = "Circuit for basic functions of a modular computer." + var/obj/item/modular_computer/computer + ///Turns the PC on/off + var/datum/port/input/on_off + ///When set, will print a piece of paper with the value as text. + var/datum/port/input/print + + ///Sent when turned on + var/datum/port/output/is_on + ///Sent when shut down + var/datum/port/output/is_off + + ///Toggles lights on and off. Also RGB. + var/datum/port/input/lights + var/datum/port/input/red + var/datum/port/input/green + var/datum/port/input/blue + +/obj/item/circuit_component/modpc/register_shell(atom/movable/shell) + . = ..() + if(istype(shell, /obj/item/modular_computer)) + computer = shell + else if(istype(shell, /obj/machinery/modular_computer)) + var/obj/machinery/modular_computer/console = shell + computer = console.cpu + + if(isnull(computer)) + return + + RegisterSignal(computer, COMSIG_MODULAR_COMPUTER_TURNED_ON, PROC_REF(computer_on)) + RegisterSignal(computer, COMSIG_MODULAR_COMPUTER_SHUT_DOWN, PROC_REF(computer_off)) + + /** + * Some mod pc have lights while some don't, but populate_ports() + * is called before we get to know which object this has attahed to, + * I hope you're cool with me doing it here. + */ + if(computer.has_light && isnull(lights)) + lights = add_input_port("Toggle Lights", PORT_TYPE_SIGNAL) + red = add_input_port("Red", PORT_TYPE_NUMBER) + green = add_input_port("Green", PORT_TYPE_NUMBER) + blue = add_input_port("Blue", PORT_TYPE_NUMBER) + +/obj/item/circuit_component/modpc/unregister_shell(atom/movable/shell) + if(computer) + UnregisterSignal(computer, list(COMSIG_MODULAR_COMPUTER_TURNED_ON, COMSIG_MODULAR_COMPUTER_SHUT_DOWN)) + computer = null + return ..() + +/obj/item/circuit_component/modpc/populate_ports() + on_off = add_input_port("Turn On/Off", PORT_TYPE_SIGNAL) + print = add_input_port("Print Text", PORT_TYPE_STRING) + + is_on = add_output_port("Turned On", PORT_TYPE_SIGNAL) + is_on = add_output_port("Shut Down", PORT_TYPE_SIGNAL) + +/obj/item/circuit_component/modpc/pre_input_received(datum/port/input/port) + if(isnull(computer)) + return + if(COMPONENT_TRIGGERED_BY(print, port)) + print.set_value(html_encode(trim(print.value, MAX_PAPER_LENGTH))) + else if(COMPONENT_TRIGGERED_BY(red, port)) + red.set_value(clamp(red.value, 0, 255)) + else if(COMPONENT_TRIGGERED_BY(blue, port)) + blue.set_value(clamp(blue.value, 0, 255)) + else if(COMPONENT_TRIGGERED_BY(green, port)) + green.set_value(clamp(green.value, 0, 255)) + +/obj/item/circuit_component/modpc/input_received(datum/port/input/port) + if(isnull(computer)) + return + if(COMPONENT_TRIGGERED_BY(on_off, port)) + if(computer.enabled) + INVOKE_ASYNC(computer, TYPE_PROC_REF(/obj/item/modular_computer, shutdown_computer)) + else + INVOKE_ASYNC(computer, TYPE_PROC_REF(/obj/item/modular_computer, turn_on)) + return + + if(!computer.enabled) + return + + if(COMPONENT_TRIGGERED_BY(print, port)) + computer.print_text(print.value) + + if(lights) + if(COMPONENT_TRIGGERED_BY(lights, port)) + computer.toggle_flashlight() + if(COMPONENT_TRIGGERED_BY(red, port) || COMPONENT_TRIGGERED_BY(green, port) || COMPONENT_TRIGGERED_BY(blue, port)) + computer.set_flashlight_color(rgb(red.value || 0, green.value || 0, blue.value || 0)) + +/obj/item/circuit_component/modpc/proc/computer_on(datum/source, mob/user) + SIGNAL_HANDLER + is_on.set_output(COMPONENT_SIGNAL) + +/obj/item/circuit_component/modpc/proc/computer_off(datum/source, loud) + SIGNAL_HANDLER + is_off.set_output(COMPONENT_SIGNAL) diff --git a/code/modules/modular_computers/computers/item/computer_power.dm b/code/modules/modular_computers/computers/item/computer_power.dm index b68df9a4671..db3ecdb7747 100644 --- a/code/modules/modular_computers/computers/item/computer_power.dm +++ b/code/modules/modular_computers/computers/item/computer_power.dm @@ -3,23 +3,24 @@ ///Draws power from its rightful source (area if its a computer, the cell otherwise) ///Takes into account special cases, like silicon PDAs through override, and nopower apps. -/obj/item/modular_computer/proc/use_power(amount = 0) - if(check_power_override()) +/obj/item/modular_computer/proc/use_power(amount = 0, check_programs = TRUE) + if(check_power_override(amount)) return TRUE if(!internal_cell) return FALSE - if(!internal_cell.charge && (isnull(active_program) || !(active_program.program_flags & PROGRAM_RUNS_WITHOUT_POWER))) - close_all_programs() - for(var/datum/computer_file/program/programs as anything in stored_files) - if((programs.program_flags & PROGRAM_RUNS_WITHOUT_POWER) && open_program(program = programs)) - return TRUE - return FALSE - - if(!internal_cell.use(amount JOULES)) - internal_cell.use(min(amount JOULES, internal_cell.charge)) //drain it anyways. + if(internal_cell.use(amount JOULES)) + return TRUE + if(!check_programs) return FALSE - return TRUE + internal_cell.use(min(amount JOULES, internal_cell.charge)) //drain it anyways. + if(active_program?.program_flags & PROGRAM_RUNS_WITHOUT_POWER) + return TRUE + INVOKE_ASYNC(src, PROC_REF(close_all_programs)) + for(var/datum/computer_file/program/programs as anything in stored_files) + if((programs.program_flags & PROGRAM_RUNS_WITHOUT_POWER) && open_program(program = programs)) + return TRUE + return FALSE /obj/item/modular_computer/proc/give_power(amount) if(internal_cell) @@ -60,8 +61,8 @@ ///Returns TRUE if the PC should not be using any power, FALSE otherwise. ///Checks to see if the current app allows to be ran without power, if so we'll run with it. -/obj/item/modular_computer/proc/check_power_override() - return (!internal_cell?.charge && (active_program?.program_flags & PROGRAM_RUNS_WITHOUT_POWER)) +/obj/item/modular_computer/proc/check_power_override(amount) + return !amount && !internal_cell?.charge && (active_program?.program_flags & PROGRAM_RUNS_WITHOUT_POWER) //Integrated (Silicon) tablets don't drain power, because the tablet is required to state laws, so it being disabled WILL cause problems. /obj/item/modular_computer/pda/silicon/check_power_override() diff --git a/code/modules/modular_computers/computers/item/computer_ui.dm b/code/modules/modular_computers/computers/item/computer_ui.dm index f5ca1d74765..4313bf2efbd 100644 --- a/code/modules/modular_computers/computers/item/computer_ui.dm +++ b/code/modules/modular_computers/computers/item/computer_ui.dm @@ -146,7 +146,7 @@ if("PC_minimize") if(!active_program || (!isnull(internal_cell) && !internal_cell.charge)) return - active_program.background_program() + active_program.background_program(usr) return TRUE if("PC_killprogram") diff --git a/code/modules/modular_computers/computers/item/disks/maintenance_disks.dm b/code/modules/modular_computers/computers/item/disks/maintenance_disks.dm index 1ef9fab39ce..430c101668d 100644 --- a/code/modules/modular_computers/computers/item/disks/maintenance_disks.dm +++ b/code/modules/modular_computers/computers/item/disks/maintenance_disks.dm @@ -14,6 +14,14 @@ /obj/item/computer_disk/maintenance/modsuit_control starting_programs = list(/datum/computer_file/program/maintenance/modsuit_control) +///Returns A 'spookiness' value based on the number of ghastly creature and hauntium and their distance from the PC. +/obj/item/computer_disk/maintenance/spectre_meter + starting_programs = list(/datum/computer_file/program/maintenance/spectre_meter) + +///A version of the arcade program with less HP/MP for the enemy and more for the player +/obj/item/computer_disk/maintenance/arcade + starting_programs = list(/datum/computer_file/program/arcade/eazy) + /obj/item/computer_disk/maintenance/theme/Initialize(mapload) starting_programs = list(pick(subtypesof(/datum/computer_file/program/maintenance/theme))) return ..() diff --git a/code/modules/modular_computers/computers/item/disks/unique_disks.dm b/code/modules/modular_computers/computers/item/disks/unique_disks.dm index 6d8614f56ac..1fd31957bef 100644 --- a/code/modules/modular_computers/computers/item/disks/unique_disks.dm +++ b/code/modules/modular_computers/computers/item/disks/unique_disks.dm @@ -9,3 +9,30 @@ /obj/item/computer_disk/syndicate/contractor starting_programs = list(/datum/computer_file/program/contract_uplink) + +/obj/item/computer_disk/black_market + desc = "Removable disk used to store data. This one has a smudged piece of paper glued to it, reading \"PC softwarez\"." + +/obj/item/computer_disk/black_market/Initialize(mapload) + icon_state = "datadisk[rand(0, 10)]" + //Populated with programs not found in the verified downloader app or that require access to download (but not to run). + var/list/potential_programs = list( + /datum/computer_file/program/arcade/eazy, + /datum/computer_file/program/radar/lifeline, + /datum/computer_file/program/radar/custodial_locator, + /datum/computer_file/program/supermatter_monitor, + /datum/computer_file/program/newscaster, + /datum/computer_file/program/secureye, + /datum/computer_file/program/crew_manifest, + /datum/computer_file/program/status, + ) + potential_programs += subtypesof(/datum/computer_file/program/maintenance) - /datum/computer_file/program/maintenance/theme + + var/total_programs_size = 0 + for(var/i in 1 to rand(2, 4)) + var/datum/computer_file/program/to_add = pick_n_take(potential_programs) + total_programs_size += initial(to_add.size) + starting_programs += to_add + ///Make sure the disk has enough space for all the programs + max_capacity = max(total_programs_size, max_capacity) + return ..() diff --git a/code/modules/modular_computers/computers/item/disks/virus_disk.dm b/code/modules/modular_computers/computers/item/disks/virus_disk.dm index e3eac7736f5..3f646b22d8a 100644 --- a/code/modules/modular_computers/computers/item/disks/virus_disk.dm +++ b/code/modules/modular_computers/computers/item/disks/virus_disk.dm @@ -154,7 +154,7 @@ hidden_uplink.uplink_handler.generate_objectives() SStraitor.register_uplink_handler(hidden_uplink.uplink_handler) else - hidden_uplink.add_telecrystals(telecrystals) + hidden_uplink.uplink_handler.add_telecrystals(telecrystals) telecrystals = 0 hidden_uplink.locked = FALSE hidden_uplink.active = TRUE diff --git a/code/modules/modular_computers/computers/item/pda.dm b/code/modules/modular_computers/computers/item/pda.dm index 0ed24adc1a3..c9e620375d5 100644 --- a/code/modules/modular_computers/computers/item/pda.dm +++ b/code/modules/modular_computers/computers/item/pda.dm @@ -26,6 +26,8 @@ comp_light_luminosity = 2.3 //this is what old PDAs were set to looping_sound = FALSE + shell_capacity = SHELL_CAPACITY_SMALL + ///The item currently inserted into the PDA, starts with a pen. var/obj/item/inserted_item = /obj/item/pen @@ -287,6 +289,7 @@ starting_programs = list( /datum/computer_file/program/contract_uplink, + /datum/computer_file/program/secureye/syndicate, ) /** @@ -337,6 +340,10 @@ silicon_owner = null return ..() +///Silicons don't have the tools (or hands) to make circuits setups with their own PDAs. +/obj/item/modular_computer/pda/silicon/add_shell_component(capacity) + return + /obj/item/modular_computer/pda/silicon/turn_on(mob/user, open_ui = FALSE) if(silicon_owner?.stat != DEAD) return ..() diff --git a/code/modules/modular_computers/computers/item/processor.dm b/code/modules/modular_computers/computers/item/processor.dm index ea4839ac944..1d947a5574b 100644 --- a/code/modules/modular_computers/computers/item/processor.dm +++ b/code/modules/modular_computers/computers/item/processor.dm @@ -7,7 +7,8 @@ icon_state = null icon_state_unpowered = null icon_state_menu = null - hardware_flag = 0 + hardware_flag = NONE + internal_cell = /obj/item/stock_parts/cell/crap ///The modular computer MACHINE that hosts us. var/obj/machinery/modular_computer/machinery_computer @@ -25,7 +26,6 @@ physical = loc machinery_computer = loc machinery_computer.cpu = src - internal_cell = machinery_computer.internal_cell hardware_flag = machinery_computer.hardware_flag steel_sheet_cost = machinery_computer.steel_sheet_cost max_idle_programs = machinery_computer.max_idle_programs @@ -44,12 +44,12 @@ machinery_computer = null return ..() -/obj/item/modular_computer/processor/use_power(amount = 0) +/obj/item/modular_computer/processor/use_power(amount = 0, check_programs = TRUE) var/obj/machinery/machine_holder = physical if(machine_holder.powered()) machine_holder.use_power(amount) return TRUE - return FALSE + return ..() /obj/item/modular_computer/processor/relay_qdel() qdel(machinery_computer) diff --git a/code/modules/modular_computers/computers/item/role_tablet_presets.dm b/code/modules/modular_computers/computers/item/role_tablet_presets.dm index 31d763054b6..0d9b7167d7a 100644 --- a/code/modules/modular_computers/computers/item/role_tablet_presets.dm +++ b/code/modules/modular_computers/computers/item/role_tablet_presets.dm @@ -103,7 +103,7 @@ /obj/item/modular_computer/pda/heads/quartermaster name = "quartermaster PDA" - greyscale_config = /datum/greyscale_config/tablet/stripe_thick + greyscale_config = /datum/greyscale_config/tablet/stripe_thick/head greyscale_colors = "#c4b787#18191e#8b4c31" inserted_item = /obj/item/pen/survival stored_paper = 20 @@ -414,7 +414,7 @@ ) /** - * No Department + * No Department/Station Trait */ /obj/item/modular_computer/pda/assistant @@ -423,6 +423,14 @@ /datum/computer_file/program/bounty_board, ) +/obj/item/modular_computer/pda/bridge_assistant + name = "bridge assistant PDA" + greyscale_colors = "#374f7e#a92323" + starting_programs = list( + /datum/computer_file/program/crew_manifest, + /datum/computer_file/program/status, + ) + /** * Non-roles */ diff --git a/code/modules/modular_computers/computers/machinery/modular_computer.dm b/code/modules/modular_computers/computers/machinery/modular_computer.dm index 7fd019c1bee..8fb32244e1d 100644 --- a/code/modules/modular_computers/computers/machinery/modular_computer.dm +++ b/code/modules/modular_computers/computers/machinery/modular_computer.dm @@ -1,3 +1,5 @@ +#define CPU_INTERACTABLE(user) (cpu && !HAS_TRAIT_FROM(src, TRAIT_MODPC_INTERACTING_WITH_FRAME, REF(user))) + // Modular Computer - A machinery that is mostly just a host to the Modular Computer item. /obj/machinery/modular_computer name = "modular computer" @@ -9,8 +11,6 @@ max_integrity = 300 integrity_failure = 0.5 - ///The power cell, null by default as we use the APC we're in - var/internal_cell = null ///A flag that describes this device type var/hardware_flag = PROGRAM_CONSOLE /// Amount of programs that can be ran at once @@ -41,23 +41,43 @@ . = ..() cpu = new(src) cpu.screen_on = TRUE + cpu.add_shell_component(SHELL_CAPACITY_LARGE, SHELL_FLAG_USB_PORT) update_appearance() + register_context() /obj/machinery/modular_computer/Destroy() QDEL_NULL(cpu) return ..() +/obj/machinery/modular_computer/add_context(atom/source, list/context, obj/item/held_item, mob/user) + . = ..() + if(isnull(held_item)) + context[SCREENTIP_CONTEXT_RMB] = "Toggle processor interaction" + return CONTEXTUAL_SCREENTIP_SET + +/obj/machinery/modular_computer/attack_hand_secondary(mob/user, list/modifiers) + . = ..() + if(. == SECONDARY_ATTACK_CANCEL_ATTACK_CHAIN) + return + if(HAS_TRAIT_FROM(src, TRAIT_MODPC_INTERACTING_WITH_FRAME, REF(user))) + REMOVE_TRAIT(src, TRAIT_MODPC_INTERACTING_WITH_FRAME, REF(user)) + balloon_alert(user, "now interacting with computer") + else + ADD_TRAIT(src, TRAIT_MODPC_INTERACTING_WITH_FRAME, REF(user)) + balloon_alert(user, "now interacting with frame") + return SECONDARY_ATTACK_CANCEL_ATTACK_CHAIN + /obj/machinery/modular_computer/examine(mob/user) - if(cpu) - return cpu.examine(user) - return ..() + . = cpu?.examine(user) || ..() + . += span_info("You can toggle interaction between computer and its machinery frame with [EXAMINE_HINT("Right-Click")] while empty-handed.") + var/frame_or_pc = HAS_TRAIT_FROM(src, TRAIT_MODPC_INTERACTING_WITH_FRAME, REF(user)) ? "frame" : "computer" + . += span_info("Currently interacting with [EXAMINE_HINT(frame_or_pc)].") /obj/machinery/modular_computer/attack_ghost(mob/dead/observer/user) . = ..() if(.) return - if(cpu) - cpu.attack_ghost(user) + cpu?.attack_ghost(user) /obj/machinery/modular_computer/emag_act(mob/user, obj/item/card/emag/emag_card) if(!cpu) @@ -98,17 +118,14 @@ /obj/machinery/modular_computer/AltClick(mob/user) . = ..() - if(!can_interact(user)) + if(CPU_INTERACTABLE(user) || !can_interact(user)) return - if(cpu) - cpu.AltClick(user) + cpu.AltClick(user) //ATTACK HAND IGNORING PARENT RETURN VALUE // On-click handling. Turns on the computer if it's off and opens the GUI. /obj/machinery/modular_computer/interact(mob/user) - if(cpu) - return cpu.interact(user) - return ..() + return CPU_INTERACTABLE(user) ? cpu.interact(user) : ..() // Modular computers can have battery in them, we handle power in previous proc, so prevent this from messing it up for us. /obj/machinery/modular_computer/power_change() @@ -118,30 +135,33 @@ return return ..() +///Try to recharge our internal cell if it isn't fully charged. +/obj/machinery/modular_computer/process(seconds_per_tick) + var/obj/item/stock_parts/cell/cell = get_cell() + if(isnull(cell) || cell.percent() >= 100) + return + var/power_to_draw = idle_power_usage * seconds_per_tick * 0.5 + if(!use_power_from_net(power_to_draw)) + return + cell.give(power_to_draw) + +/obj/machinery/modular_computer/get_cell() + return cpu?.internal_cell + /obj/machinery/modular_computer/screwdriver_act(mob/user, obj/item/tool) - if(cpu) - return cpu.screwdriver_act(user, tool) - return ..() + return CPU_INTERACTABLE(user) ? cpu.screwdriver_act(user, tool) : ..() /obj/machinery/modular_computer/wrench_act_secondary(mob/user, obj/item/tool) - if(cpu) - return cpu.wrench_act_secondary(user, tool) - return ..() + return CPU_INTERACTABLE(user) ? cpu.wrench_act_secondary(user, tool) : ..() /obj/machinery/modular_computer/welder_act(mob/user, obj/item/tool) - if(cpu) - return cpu.welder_act(user, tool) - return ..() + return CPU_INTERACTABLE(user) ? cpu.welder_act(user, tool) : ..() -/obj/machinery/modular_computer/attackby(obj/item/W as obj, mob/living/user) - if (cpu && !user.combat_mode && !(obj_flags & NO_DECONSTRUCTION)) - return cpu.attackby(W, user) - return ..() +/obj/machinery/modular_computer/attackby(obj/item/weapon, mob/living/user) + return (CPU_INTERACTABLE(user) && !user.combat_mode) ? cpu.attackby(weapon, user) : ..() /obj/machinery/modular_computer/attacked_by(obj/item/attacking_item, mob/living/user) - if (cpu) - return cpu.attacked_by(attacking_item, user) - return ..() + return CPU_INTERACTABLE(user) ? cpu.attacked_by(attacking_item, user) : ..() // Stronger explosions cause serious damage to internal components // Minor explosions are mostly mitigitated by casing. @@ -170,6 +190,6 @@ // "Burn" damage is equally strong against internal components and exterior casing // "Brute" damage mostly damages the casing. /obj/machinery/modular_computer/bullet_act(obj/projectile/Proj) - if(cpu) - return cpu.bullet_act(Proj) - return ..() + return cpu?.bullet_act(Proj) || ..() + +#undef CPU_INTERACTABLE diff --git a/code/modules/modular_computers/file_system/computer_file.dm b/code/modules/modular_computers/file_system/computer_file.dm index 948257aa83c..7b4fc676091 100644 --- a/code/modules/modular_computers/file_system/computer_file.dm +++ b/code/modules/modular_computers/file_system/computer_file.dm @@ -52,6 +52,7 @@ ///Called post-installation of an application in a computer, after 'computer' var is set. /datum/computer_file/proc/on_install(datum/computer_file/source, obj/item/modular_computer/computer_installing) SIGNAL_HANDLER + SHOULD_CALL_PARENT(TRUE) computer_installing.stored_files.Add(src) /** diff --git a/code/modules/modular_computers/file_system/program.dm b/code/modules/modular_computers/file_system/program.dm index 4ce18fc2a60..1b18e5a2924 100644 --- a/code/modules/modular_computers/file_system/program.dm +++ b/code/modules/modular_computers/file_system/program.dm @@ -1,6 +1,3 @@ -///The default amount a program should take in cell use. -#define PROGRAM_BASIC_CELL_USE 15 - // /program/ files are executable programs that do things. /datum/computer_file/program filetype = "PRG" @@ -28,7 +25,7 @@ ///This is required if PROGRAM_ON_NTNET_STORE or PROGRAM_ON_SYNDINET_STORE is on. var/downloader_category = PROGRAM_CATEGORY_DEVICE ///The overlay to add ontop of the ModPC running the app while it's open. - ///This is taken from the same file as the ModPC, so you can use usage_flags to prevent + ///This is taken from the same file as the ModPC, so you can use can_run_on_flags to prevent ///the program from being used on devices that don't have sprites for it. var/program_open_overlay = null /// NTNet status, updated every tick by computer running this program. Don't use this for checks if NTNet works, computers do that. Use this for calculations, etc. @@ -47,6 +44,40 @@ var/alert_pending = FALSE /// How well this program will help combat detomatix viruses. var/detomatix_resistance = NONE + /// Unremovable circuit componentn added to the physical computer while the program is installed + var/obj/item/circuit_component/mod_program/circuit_comp_type + +/datum/computer_file/program/New() + ..() + ///We need to ensure that different programs (subtypes mostly) won't try to load in the same circuit comps into the shell or usb port of the modpc. + if(circuit_comp_type && initial(circuit_comp_type.associated_program) != type) + stack_trace("circuit comp type mismatch: [type] has circuit comp type \[[circuit_comp_type]\], while \[[circuit_comp_type]\] has associated program \[[initial(circuit_comp_type.associated_program)]\].") + +/** + * Here we deal with peculiarity of adding unremovable components to the computer shell. + * It probably doesn't look badass, but it's a decent way of doing it without taining the component with + * oddities like this. + */ +/datum/computer_file/program/on_install(datum/computer_file/source, obj/item/modular_computer/computer_installing) + . = ..() + if(isnull(circuit_comp_type) || isnull(computer.shell)) + return + if(!(locate(circuit_comp_type) in computer.shell.unremovable_circuit_components)) + var/obj/item/circuit_component/mod_program/comp = new circuit_comp_type() + computer.shell.add_unremovable_circuit_component(comp) + if(computer.shell.attached_circuit) + comp.forceMove(computer.shell.attached_circuit) + computer.shell.attached_circuit.add_component(comp) + +///Here we deal with killing the associated components instead. +/datum/computer_file/program/Destroy() + if(isnull(circuit_comp_type) || isnull(computer?.shell)) + return ..() + for(var/obj/item/circuit_component/mod_program/comp in computer.shell.unremovable_circuit_components) + if(comp.associated_program == src) + computer.shell.unremovable_circuit_components -= comp + qdel(comp) + return ..() /datum/computer_file/program/clone() var/datum/computer_file/program/temp = ..() @@ -70,10 +101,6 @@ /datum/computer_file/program/ui_interact(mob/user, datum/tgui/ui) SHOULD_CALL_PARENT(FALSE) -///We are not calling parent as it's handled by the computer itself, this is only called after. -/datum/computer_file/program/ui_act(action, params, datum/tgui/ui, datum/ui_state/state) - SHOULD_CALL_PARENT(FALSE) - // Relays icon update to the computer. /datum/computer_file/program/proc/update_computer_icon() if(computer) @@ -170,12 +197,13 @@ **/ /datum/computer_file/program/proc/on_start(mob/living/user) SHOULD_CALL_PARENT(TRUE) - if(can_run(user, loud = TRUE)) - if(program_flags & PROGRAM_REQUIRES_NTNET) - var/obj/item/card/id/ID = computer.computer_id_slot?.GetID() - generate_network_log("Connection opened -- Program ID:[filename] User:[ID?"[ID.registered_name]":"None"]") - return TRUE - return FALSE + if(!can_run(user, loud = TRUE)) + return FALSE + if(program_flags & PROGRAM_REQUIRES_NTNET) + var/obj/item/card/id/ID = computer.computer_id_slot?.GetID() + generate_network_log("Connection opened -- Program ID:[filename] User:[ID?"[ID.registered_name]":"None"]") + SEND_SIGNAL(src, COMSIG_COMPUTER_PROGRAM_START, user) + return TRUE /** * Kills the running program @@ -190,29 +218,31 @@ if(src == computer.active_program) computer.active_program = null - if(computer.enabled) - computer.update_tablet_open_uis(user) - if(src in computer.idle_threads) + if(!QDELETED(computer) && computer.enabled) + INVOKE_ASYNC(computer, TYPE_PROC_REF(/obj/item/modular_computer, update_tablet_open_uis), user) + else if(src in computer.idle_threads) computer.idle_threads.Remove(src) + else //The program wasn't running to begin with. + return FALSE if(program_flags & PROGRAM_REQUIRES_NTNET) var/obj/item/card/id/ID = computer.computer_id_slot?.GetID() generate_network_log("Connection closed -- Program ID: [filename] User:[ID ? "[ID.registered_name]" : "None"]") computer.update_appearance(UPDATE_ICON) + SEND_SIGNAL(src, COMSIG_COMPUTER_PROGRAM_KILL, user) return TRUE ///Sends the running program to the background/idle threads. Header programs can't be minimized and will kill instead. -/datum/computer_file/program/proc/background_program() +/datum/computer_file/program/proc/background_program(mob/user) SHOULD_CALL_PARENT(TRUE) - if(program_flags & PROGRAM_HEADER) + if(program_flags & PROGRAM_HEADER || length(computer.idle_threads) > computer.max_idle_programs) return kill_program() computer.idle_threads.Add(src) computer.active_program = null - computer.update_tablet_open_uis(usr) + if(user) + INVOKE_ASYNC(computer, TYPE_PROC_REF(/obj/item/modular_computer, update_tablet_open_uis), user) computer.update_appearance(UPDATE_ICON) return TRUE - -#undef PROGRAM_BASIC_CELL_USE diff --git a/code/modules/modular_computers/file_system/program_circuit.dm b/code/modules/modular_computers/file_system/program_circuit.dm new file mode 100644 index 00000000000..efd42adaf9f --- /dev/null +++ b/code/modules/modular_computers/file_system/program_circuit.dm @@ -0,0 +1,95 @@ +/** + * Circuit components of modular programs are special. + * They're added to the unremovable components of the shell when the prog is installed and deleted if uninstalled. + * This means they don't work like normal unremovable comps that live and die along with their shell. + */ +/obj/item/circuit_component/mod_program + display_name = "Abstract Modular Program" + desc = "I've spent lot of time thinking how to get this to work. If you see this, I either failed or someone else did, so report it." + /** + * The program that installed us into the shell/usb_port comp. Needed to avoid having too many signals for every program. + * This is also the program we need to install on the modular computer if the circuit is admin-loaded. + * Just make sure each of these components is associated to one and only type of program, no subtypes of anything. + */ + var/datum/computer_file/program/associated_program + + ///Starts the program if possible, placing it in the background if another's active. + var/datum/port/input/start + ///kills the program. + var/datum/port/input/kill + ///binary for whether the program is running or not + var/datum/port/output/running + +/obj/item/circuit_component/mod_program/Initialize(mapload) + if(associated_program) + display_name = initial(associated_program.filedesc) + desc = initial(associated_program.extended_desc) + return ..() // Set the name correctly + +/obj/item/circuit_component/mod_program/register_shell(atom/movable/shell) + . = ..() + var/obj/item/modular_computer/computer + if(istype(shell, /obj/item/modular_computer)) + computer = shell + else if(istype(shell, /obj/machinery/modular_computer)) + var/obj/machinery/modular_computer/console = shell + computer = console.cpu + + ///Find the associated program in the computer's stored_files (install it otherwise) and store a reference to it. + var/datum/computer_file/program/found_program = locate(associated_program) in computer.stored_files + ///The integrated circuit was loaded/duplicated + if(isnull(found_program)) + associated_program = new associated_program() + computer.store_file(associated_program) + else + associated_program = found_program + + RegisterSignal(associated_program, COMSIG_COMPUTER_PROGRAM_START, PROC_REF(on_start)) + RegisterSignal(associated_program, COMSIG_COMPUTER_PROGRAM_KILL, PROC_REF(on_kill)) + +/obj/item/circuit_component/mod_program/unregister_shell() + UnregisterSignal(associated_program, list(COMSIG_COMPUTER_PROGRAM_START, COMSIG_COMPUTER_PROGRAM_KILL)) + associated_program = initial(associated_program) + return ..() + +/obj/item/circuit_component/mod_program/populate_ports() + . = ..() + SHOULD_CALL_PARENT(TRUE) + start = add_input_port("Start", PORT_TYPE_SIGNAL, trigger = PROC_REF(start_prog)) + kill = add_input_port("Kill", PORT_TYPE_SIGNAL, trigger = PROC_REF(kill_prog)) + running = add_output_port("Running", PORT_TYPE_NUMBER) + +///For most programs, triggers only work if they're open (either active or idle). +/obj/item/circuit_component/mod_program/should_receive_input(datum/port/input/port) + . = ..() + if(!.) + return FALSE + if(isnull(associated_program)) + return FALSE + if(!associated_program.computer.enabled) + return FALSE + if(associated_program.program_flags & PROGRAM_CIRCUITS_RUN_WHEN_CLOSED || COMPONENT_TRIGGERED_BY(start, port)) + return TRUE + var/obj/item/modular_computer/computer = associated_program.computer + if(computer.active_program == associated_program || (associated_program in computer.idle_threads)) + return TRUE + return FALSE + +/obj/item/circuit_component/mod_program/proc/start_prog(datum/port/input/port) + associated_program.computer.open_program(program = associated_program) + +/obj/item/circuit_component/mod_program/proc/on_start(mob/living/user) + SIGNAL_HANDLER + running.set_output(TRUE) + +/obj/item/circuit_component/mod_program/proc/kill_prog(datum/port/input/port) + associated_program.kill_program() + +/obj/item/circuit_component/mod_program/proc/on_kill(mob/living/user) + SIGNAL_HANDLER + running.set_output(FALSE) + +/obj/item/circuit_component/mod_program/get_ui_notices() + . = ..() + if(!(associated_program.program_flags & PROGRAM_CIRCUITS_RUN_WHEN_CLOSED)) + . += create_ui_notice("Requires open program for inputs", "purple") diff --git a/code/modules/modular_computers/file_system/programs/airestorer.dm b/code/modules/modular_computers/file_system/programs/airestorer.dm index 9fc51a00f57..57c9e730072 100644 --- a/code/modules/modular_computers/file_system/programs/airestorer.dm +++ b/code/modules/modular_computers/file_system/programs/airestorer.dm @@ -97,6 +97,7 @@ /datum/computer_file/program/ai_restorer/ui_act(action, params, datum/tgui/ui, datum/ui_state/state) + . = ..() switch(action) if("PRG_beginReconstruction") if(!stored_card || !stored_card.AI) diff --git a/code/modules/modular_computers/file_system/programs/antagonist/contractor_program.dm b/code/modules/modular_computers/file_system/programs/antagonist/contractor_program.dm index 36fbc8a273b..df6e5a99de5 100644 --- a/code/modules/modular_computers/file_system/programs/antagonist/contractor_program.dm +++ b/code/modules/modular_computers/file_system/programs/antagonist/contractor_program.dm @@ -29,7 +29,7 @@ traitor_data = null return ..() -/datum/computer_file/program/contract_uplink/ui_act(action, params) +/datum/computer_file/program/contract_uplink/ui_act(action, list/params, datum/tgui/ui, datum/ui_state/state) . = ..() if(.) return diff --git a/code/modules/modular_computers/file_system/programs/antagonist/dos.dm b/code/modules/modular_computers/file_system/programs/antagonist/dos.dm index d3b7e9d5b86..986c2e10f58 100644 --- a/code/modules/modular_computers/file_system/programs/antagonist/dos.dm +++ b/code/modules/modular_computers/file_system/programs/antagonist/dos.dm @@ -38,6 +38,7 @@ return ..() /datum/computer_file/program/ntnet_dos/ui_act(action, params, datum/tgui/ui, datum/ui_state/state) + . = ..() switch(action) if("PRG_target_relay") for(var/obj/machinery/ntnet_relay/relays as anything in SSmachines.get_machines_by_type(/obj/machinery/ntnet_relay)) diff --git a/code/modules/modular_computers/file_system/programs/antagonist/revelation.dm b/code/modules/modular_computers/file_system/programs/antagonist/revelation.dm index 3e0ac275c14..5163557eb04 100644 --- a/code/modules/modular_computers/file_system/programs/antagonist/revelation.dm +++ b/code/modules/modular_computers/file_system/programs/antagonist/revelation.dm @@ -38,6 +38,7 @@ spark_system.start() /datum/computer_file/program/revelation/ui_act(action, params, datum/tgui/ui, datum/ui_state/state) + . = ..() switch(action) if("PRG_arm") armed = !armed diff --git a/code/modules/modular_computers/file_system/programs/arcade.dm b/code/modules/modular_computers/file_system/programs/arcade.dm index d4ced4c22ce..fd52792bc8b 100644 --- a/code/modules/modular_computers/file_system/programs/arcade.dm +++ b/code/modules/modular_computers/file_system/programs/arcade.dm @@ -23,6 +23,20 @@ ///Determines which boss image to use on the UI. var/boss_id = 1 +///Lazy version of the arade that can be found in maintenance disks +/datum/computer_file/program/arcade/eazy + filename = "dsarcadeez" + filedesc = "Donksoft Micro Arcade Ez" + filetype = "MNT" + program_flags = PROGRAM_UNIQUE_COPY + extended_desc = "Some sort of fan-made conversion of the classic game 'Outbomb Cuban Pete'. This one has you fight the weaker 'George Melon' instead." + boss_hp = 40 + boss_mp = 10 + player_hp = 35 + player_mp = 15 + heads_up = "Are you a bad enough dude to grief the station?" + boss_name = "George Melon" + /datum/computer_file/program/arcade/proc/game_check(mob/user) sleep(0.5 SECONDS) user?.mind?.adjust_experience(/datum/skill/gaming, 1) @@ -93,7 +107,8 @@ data["BossID"] = "boss[boss_id].gif" return data -/datum/computer_file/program/arcade/ui_act(action, list/params) +/datum/computer_file/program/arcade/ui_act(action, list/params, datum/tgui/ui, datum/ui_state/state) + . = ..() usr.played_game() var/gamerSkillLevel = 0 var/gamerSkill = 0 @@ -159,9 +174,9 @@ return TRUE if("Start_Game") game_active = TRUE - boss_hp = 45 - player_hp = 30 - player_mp = 10 + boss_hp = initial(boss_hp) + player_hp = initial(player_hp) + player_mp = initial(player_mp) heads_up = "You stand before [boss_name]! Prepare for battle!" program_open_overlay = "arcade" boss_id = rand(1,6) diff --git a/code/modules/modular_computers/file_system/programs/atmosscan.dm b/code/modules/modular_computers/file_system/programs/atmosscan.dm index fd520fbb385..8f29af43510 100644 --- a/code/modules/modular_computers/file_system/programs/atmosscan.dm +++ b/code/modules/modular_computers/file_system/programs/atmosscan.dm @@ -67,7 +67,8 @@ data["gasmixes"] = last_gasmix_data return data -/datum/computer_file/program/atmosscan/ui_act(action, list/params) +/datum/computer_file/program/atmosscan/ui_act(action, list/params, datum/tgui/ui, datum/ui_state/state) + . = ..() switch(action) if("scantoggle") if(atmozphere_mode == ATMOZPHERE_SCAN_CLICK) diff --git a/code/modules/modular_computers/file_system/programs/borg_monitor.dm b/code/modules/modular_computers/file_system/programs/borg_monitor.dm index 196ab033408..6f5b116a930 100644 --- a/code/modules/modular_computers/file_system/programs/borg_monitor.dm +++ b/code/modules/modular_computers/file_system/programs/borg_monitor.dm @@ -10,6 +10,7 @@ size = 5 tgui_id = "NtosCyborgRemoteMonitor" program_icon = "project-diagram" + circuit_comp_type = /obj/item/circuit_component/mod_program/borg_monitor var/list/loglist = list() ///A list to copy a borg's IC log list into var/mob/living/silicon/robot/DL_source ///reference of a borg if we're downloading a log, or null if not. var/DL_progress = -1 ///Progress of current download, 0 to 100, -1 for no current download @@ -105,29 +106,46 @@ return data /datum/computer_file/program/borg_monitor/ui_act(action, params, datum/tgui/ui, datum/ui_state/state) + . = ..() switch(action) if("messagebot") - var/mob/living/silicon/robot/R = locate(params["ref"]) in GLOB.silicon_mobs - if(!istype(R)) - return TRUE - var/ID = checkID() - if(!ID) - return TRUE - if(R.stat == DEAD) //Dead borgs will listen to you no longer - to_chat(usr, span_warning("Error -- Could not open a connection to unit:[R]")) - var/message = tgui_input_text(usr, "Message to be sent to remote cyborg", "Send Message") - if(!message) - return TRUE - to_chat(R, "

    [span_notice("Message from [ID] -- \"[message]\"")]
    ") - to_chat(usr, "Message sent to [R]: [message]") - R.logevent("Message from [ID] -- \"[message]\"") - SEND_SOUND(R, 'sound/machines/twobeep_high.ogg') - if(R.connected_ai) - to_chat(R.connected_ai, "

    [span_notice("Message from [ID] to [R] -- \"[message]\"")]
    ") - SEND_SOUND(R.connected_ai, 'sound/machines/twobeep_high.ogg') - usr.log_talk(message, LOG_PDA, tag="Cyborg Monitor Program: ID name \"[ID]\" to [R]") + var/mob/living/silicon/robot/robot = locate(params["ref"]) in GLOB.silicon_mobs + message_robot(robot, usr) return TRUE +/datum/computer_file/program/borg_monitor/proc/message_robot(mob/living/silicon/robot/robot, mob/user) + if(!istype(robot)) + return TRUE + var/ID = checkID() + if(!ID) + return FALSE + if(robot.stat == DEAD) //Dead borgs will listen to you no longer + to_chat(user, span_warning("Error -- Could not open a connection to unit:[robot]")) + return FALSE + var/message = tgui_input_text(user, "Message to be sent to remote cyborg", "Send Message") + if(!message) + return FALSE + send_message(message, robot, user) + +/datum/computer_file/program/borg_monitor/proc/send_message(message, mob/living/silicon/robot/robot, mob/user) + var/ID = checkID() + if(!ID) + return FALSE + if(robot.stat == DEAD) //Dead borgs will listen to you no longer + if(user) + to_chat(user, span_warning("Error -- Could not open a connection to unit:[robot]")) + return FALSE + to_chat(robot, "

    [span_notice("Message from [ID] -- \"[message]\"")]
    ") + if(user) + to_chat(user, "Message sent to [robot]: [message]") + robot.logevent("Message from [ID] -- \"[message]\"") + SEND_SOUND(robot, 'sound/machines/twobeep_high.ogg') + if(robot.connected_ai) + to_chat(robot.connected_ai, "

    [span_notice("Message from [ID] to [robot] -- \"[message]\"")]
    ") + SEND_SOUND(robot.connected_ai, 'sound/machines/twobeep_high.ogg') + user?.log_talk(message, LOG_PDA, tag = "Cyborg Monitor Program: ID name \"[ID]\" to [robot]") + return TRUE + ///This proc is used to determin if a borg should be shown in the list (based on the borg's scrambledcodes var). Syndicate version overrides this to show only syndicate borgs. /datum/computer_file/program/borg_monitor/proc/evaluate_borg(mob/living/silicon/robot/R) if(!is_valid_z_level(get_turf(computer), get_turf(R))) @@ -154,6 +172,7 @@ extended_desc = "This program allows for remote monitoring of mission-assigned cyborgs." program_flags = PROGRAM_ON_SYNDINET_STORE download_access = list() + circuit_comp_type = /obj/item/circuit_component/mod_program/borg_monitor/syndie /datum/computer_file/program/borg_monitor/syndicate/evaluate_borg(mob/living/silicon/robot/R) if(!is_valid_z_level(get_turf(computer), get_turf(R))) @@ -164,3 +183,31 @@ /datum/computer_file/program/borg_monitor/syndicate/checkID() return "\[CLASSIFIED\]" //no ID is needed for the syndicate version's message function, and the borg will see "[CLASSIFIED]" as the message sender. + +/obj/item/circuit_component/mod_program/borg_monitor + associated_program = /datum/computer_file/program/borg_monitor + circuit_flags = CIRCUIT_FLAG_INPUT_SIGNAL + + ///Circuit input for the robot we want to message + var/datum/port/input/target_robot + ///The message we want to send + var/datum/port/input/set_message + +/obj/item/circuit_component/mod_program/borg_monitor/populate_ports() + . = ..() + target_robot = add_input_port("Receiver", PORT_TYPE_ATOM) + set_message = add_input_port("Set Message", PORT_TYPE_STRING, trigger = PROC_REF(sanitize_borg_message)) + +/obj/item/circuit_component/mod_program/borg_monitor/proc/sanitize_borg_message(datum/port/port) + set_message.set_value(trim(html_encode(set_message.value), MAX_MESSAGE_LEN)) + +/obj/item/circuit_component/mod_program/borg_monitor/input_received(datum/port/port) + if(!length(set_message.value) || !iscyborg(target_robot.value)) + return + var/mob/living/silicon/robot/robot = target_robot.value + var/datum/computer_file/program/borg_monitor/monitor = associated_program + if(monitor.send_message(set_message.value, robot)) + monitor.computer.log_talk("Cyborg Monitor message (ID name \"[monitor.checkID()]\") sent to [key_name(robot)] by [parent.get_creator()]: [set_message.value]") + +/obj/item/circuit_component/mod_program/borg_monitor/syndie + associated_program = /datum/computer_file/program/borg_monitor/syndicate diff --git a/code/modules/modular_computers/file_system/programs/bounty_board.dm b/code/modules/modular_computers/file_system/programs/bounty_board.dm index 4bbad8d1d8b..86590192041 100644 --- a/code/modules/modular_computers/file_system/programs/bounty_board.dm +++ b/code/modules/modular_computers/file_system/programs/bounty_board.dm @@ -57,7 +57,8 @@ data["bountyText"] = bounty_text return data -/datum/computer_file/program/bounty_board/ui_act(action, list/params) +/datum/computer_file/program/bounty_board/ui_act(action, list/params, datum/tgui/ui, datum/ui_state/state) + . = ..() var/current_ref_num = params["request"] var/current_app_num = params["applicant"] var/datum/bank_account/request_target diff --git a/code/modules/modular_computers/file_system/programs/budgetordering.dm b/code/modules/modular_computers/file_system/programs/budgetordering.dm index 564a349a502..19bdca2c141 100644 --- a/code/modules/modular_computers/file_system/programs/budgetordering.dm +++ b/code/modules/modular_computers/file_system/programs/budgetordering.dm @@ -166,7 +166,8 @@ data["max_order"] = CARGO_MAX_ORDER return data -/datum/computer_file/program/budgetorders/ui_act(action, params, datum/tgui/ui) +/datum/computer_file/program/budgetorders/ui_act(action, params, datum/tgui/ui, datum/ui_state/state) + . = ..() switch(action) if("send") if(!SSshuttle.supply.canMove()) diff --git a/code/modules/modular_computers/file_system/programs/card.dm b/code/modules/modular_computers/file_system/programs/card.dm index c41aa8ae29a..238d05704e2 100644 --- a/code/modules/modular_computers/file_system/programs/card.dm +++ b/code/modules/modular_computers/file_system/programs/card.dm @@ -87,6 +87,7 @@ return ..() /datum/computer_file/program/card_mod/ui_act(action, params, datum/tgui/ui, datum/ui_state/state) + . = ..() var/mob/user = usr var/obj/item/card/id/inserted_auth_card = computer.computer_id_slot diff --git a/code/modules/modular_computers/file_system/programs/cargoship.dm b/code/modules/modular_computers/file_system/programs/cargoship.dm index 92c6e152f71..fa73149dc85 100644 --- a/code/modules/modular_computers/file_system/programs/cargoship.dm +++ b/code/modules/modular_computers/file_system/programs/cargoship.dm @@ -26,7 +26,8 @@ data["barcode_split"] = cut_multiplier * 100 return data -/datum/computer_file/program/shipping/ui_act(action, list/params) +/datum/computer_file/program/shipping/ui_act(action, list/params, datum/tgui/ui, datum/ui_state/state) + . = ..() if(!computer.computer_id_slot) //We need an ID to successfully run return FALSE diff --git a/code/modules/modular_computers/file_system/programs/chatroom/ntnrc_client.dm b/code/modules/modular_computers/file_system/programs/chatroom/ntnrc_client.dm index 1067c3f392d..b3566591e12 100644 --- a/code/modules/modular_computers/file_system/programs/chatroom/ntnrc_client.dm +++ b/code/modules/modular_computers/file_system/programs/chatroom/ntnrc_client.dm @@ -49,6 +49,7 @@ return new_converstaion /datum/computer_file/program/chatclient/ui_act(action, params, datum/tgui/ui, datum/ui_state/state) + . = ..() var/datum/ntnet_conversation/channel = SSmodular_computers.get_chat_channel_by_id(active_channel) var/authed = FALSE if(channel && ((channel.channel_operator == src) || netadmin_mode)) diff --git a/code/modules/modular_computers/file_system/programs/coupon.dm b/code/modules/modular_computers/file_system/programs/coupon.dm index 72e3ff6ec06..e84277f043e 100644 --- a/code/modules/modular_computers/file_system/programs/coupon.dm +++ b/code/modules/modular_computers/file_system/programs/coupon.dm @@ -44,7 +44,8 @@ data["valid_id"] = TRUE return data -/datum/computer_file/program/coupon/ui_act(action, params, datum/tgui/ui) +/datum/computer_file/program/coupon/ui_act(action, params, datum/tgui/ui, datum/ui_state/state) + . = ..() var/obj/item/card/id/user_id = computer.computer_id_slot if(!(user_id?.registered_account.add_to_accounts)) return TRUE diff --git a/code/modules/modular_computers/file_system/programs/crewmanifest.dm b/code/modules/modular_computers/file_system/programs/crewmanifest.dm index f7e3df473ea..39a9d8c3c7f 100644 --- a/code/modules/modular_computers/file_system/programs/crewmanifest.dm +++ b/code/modules/modular_computers/file_system/programs/crewmanifest.dm @@ -16,7 +16,8 @@ data["manifest"] = GLOB.manifest.get_manifest() return data -/datum/computer_file/program/crew_manifest/ui_act(action, params, datum/tgui/ui) +/datum/computer_file/program/crew_manifest/ui_act(action, params, datum/tgui/ui, datum/ui_state/state) + . = ..() switch(action) if("PRG_print") if(computer) //This option should never be called if there is no printer diff --git a/code/modules/modular_computers/file_system/programs/file_browser.dm b/code/modules/modular_computers/file_system/programs/file_browser.dm index c9133515507..74af88ac870 100644 --- a/code/modules/modular_computers/file_system/programs/file_browser.dm +++ b/code/modules/modular_computers/file_system/programs/file_browser.dm @@ -13,6 +13,7 @@ var/error /datum/computer_file/program/filemanager/ui_act(action, params, datum/tgui/ui, datum/ui_state/state) + . = ..() switch(action) if("PRG_deletefile") var/datum/computer_file/file = computer.find_file_by_name(params["name"]) diff --git a/code/modules/modular_computers/file_system/programs/frontier.dm b/code/modules/modular_computers/file_system/programs/frontier.dm index 884e635364c..c41cf642ffb 100644 --- a/code/modules/modular_computers/file_system/programs/frontier.dm +++ b/code/modules/modular_computers/file_system/programs/frontier.dm @@ -162,6 +162,7 @@ return data /datum/computer_file/program/scipaper_program/ui_act(action, params, datum/tgui/ui, datum/ui_state/state) + . = ..() switch(action) if("et_alia") paper_to_be.et_alia = !paper_to_be.et_alia diff --git a/code/modules/modular_computers/file_system/programs/jobmanagement.dm b/code/modules/modular_computers/file_system/programs/jobmanagement.dm index 0db91c31ac6..ea7e6fc63a1 100644 --- a/code/modules/modular_computers/file_system/programs/jobmanagement.dm +++ b/code/modules/modular_computers/file_system/programs/jobmanagement.dm @@ -57,7 +57,8 @@ GLOBAL_VAR_INIT(time_last_changed_position, 0) return FALSE -/datum/computer_file/program/job_management/ui_act(action, params, datum/tgui/ui) +/datum/computer_file/program/job_management/ui_act(action, params, datum/tgui/ui, datum/ui_state/state) + . = ..() var/obj/item/card/id/user_id = computer.computer_id_slot if(!user_id || !(ACCESS_CHANGE_IDS in user_id.access)) return TRUE diff --git a/code/modules/modular_computers/file_system/programs/mafia_ntos.dm b/code/modules/modular_computers/file_system/programs/mafia_ntos.dm index c970349bd20..790f276ac67 100644 --- a/code/modules/modular_computers/file_system/programs/mafia_ntos.dm +++ b/code/modules/modular_computers/file_system/programs/mafia_ntos.dm @@ -50,6 +50,7 @@ return data /datum/computer_file/program/mafia/ui_act(mob/user, params, datum/tgui/ui, datum/ui_state/state) + . = ..() var/datum/mafia_controller/game = GLOB.mafia_game if(!game) game = create_mafia_game() diff --git a/code/modules/modular_computers/file_system/programs/maintenance/camera.dm b/code/modules/modular_computers/file_system/programs/maintenance/camera.dm index be13d01ad27..f851dada495 100644 --- a/code/modules/modular_computers/file_system/programs/maintenance/camera.dm +++ b/code/modules/modular_computers/file_system/programs/maintenance/camera.dm @@ -8,6 +8,7 @@ can_run_on_flags = PROGRAM_PDA tgui_id = "NtosCamera" program_icon = "camera" + circuit_comp_type = /obj/item/circuit_component/mod_program/camera /// Camera built-into the tablet. var/obj/item/camera/internal_camera @@ -33,6 +34,8 @@ if(internal_picture) QDEL_NULL(internal_picture) var/turf/our_turf = get_turf(tapped_atom) + var/spooky_camera = locate(/datum/computer_file/program/maintenance/spectre_meter) in computer.stored_files + internal_camera.see_ghosts = spooky_camera ? CAMERA_SEE_GHOSTS_BASIC : CAMERA_NO_GHOSTS internal_picture = internal_camera.captureimage(our_turf, user, internal_camera.picture_size_x + 1, internal_camera.picture_size_y + 1) picture_number++ computer.save_photo(internal_picture.picture_image) @@ -48,13 +51,63 @@ return data -/datum/computer_file/program/maintenance/camera/ui_act(action, params, datum/tgui/ui) - var/mob/living/user = usr +/datum/computer_file/program/maintenance/camera/ui_act(action, params, datum/tgui/ui, datum/ui_state/state) + . = ..() switch(action) if("print_photo") if(computer.stored_paper <= 0) to_chat(usr, span_notice("Hardware error: Printer out of paper.")) return - internal_camera.printpicture(user, internal_picture) + internal_camera.printpicture(usr, internal_picture) computer.stored_paper-- computer.visible_message(span_notice("\The [computer] prints out a paper.")) + +/obj/item/circuit_component/mod_program/camera + associated_program = /datum/computer_file/program/maintenance/camera + circuit_flags = CIRCUIT_FLAG_INPUT_SIGNAL + + ///A target to take a picture of. + var/datum/port/input/picture_target + ///The photographed target + var/datum/port/output/photographed + /** + * Pinged when the image has been captured. + * I'm not using the default trigger output here because the process is asynced, + * even though I'm mostly sure it only sleeps if there's a set user. + */ + var/datum/port/output/photo_taken + +/obj/item/circuit_component/mod_program/camera/populate_ports() + . = ..() + picture_target = add_input_port("Picture Target", PORT_TYPE_ATOM) + photographed = add_output_port("Photographed Entity", PORT_TYPE_ATOM) + photo_taken = add_output_port("Photo Taken", PORT_TYPE_SIGNAL) + +/obj/item/circuit_component/mod_program/camera/register_shell(atom/movable/shell) + . = ..() + var/datum/computer_file/program/maintenance/camera/cam = associated_program + RegisterSignal(cam.internal_camera, COMSIG_CAMERA_IMAGE_CAPTURED, PROC_REF(on_image_captured)) + +/obj/item/circuit_component/mod_program/camera/unregister_shell() + var/datum/computer_file/program/maintenance/camera/cam = associated_program + UnregisterSignal(cam.internal_camera, COMSIG_CAMERA_IMAGE_CAPTURED) + return ..() + +/obj/item/circuit_component/mod_program/camera/input_received(datum/port/input/port) + var/atom/target = picture_target.value + if(!target) + var/turf/our_turf = get_location() + target = locate(our_turf.x, our_turf.y, our_turf.z) + if(!target) + return + var/datum/computer_file/program/maintenance/camera/cam = associated_program + if(!cam.internal_camera.can_target(target)) + return + var/pic_size_x = cam.internal_camera.picture_size_x - 1 + var/pic_size_y = cam.internal_camera.picture_size_y - 1 + INVOKE_ASYNC(cam.internal_camera, TYPE_PROC_REF(/obj/item/camera, captureimage), target, null, pic_size_x, pic_size_y) + +/obj/item/circuit_component/mod_program/camera/proc/on_image_captured(obj/item/camera/source, atom/target, mob/user) + SIGNAL_HANDLER + photographed.set_output(target) + photo_taken.set_output(COMPONENT_SIGNAL) diff --git a/code/modules/modular_computers/file_system/programs/maintenance/modsuit.dm b/code/modules/modular_computers/file_system/programs/maintenance/modsuit.dm index 25baa43b8f5..0d094ced4f5 100644 --- a/code/modules/modular_computers/file_system/programs/maintenance/modsuit.dm +++ b/code/modules/modular_computers/file_system/programs/maintenance/modsuit.dm @@ -7,6 +7,7 @@ size = 2 tgui_id = "NtosMODsuit" program_icon = "user-astronaut" + circuit_comp_type = /obj/item/circuit_component/mod_program/modsuit_control ///The suit we have control over. var/obj/item/mod/control/controlled_suit @@ -20,14 +21,18 @@ . = ..() if(!istype(attacking_item, /obj/item/mod/control)) return FALSE + sync_modsuit(attacking_item, user) + return TRUE + +/datum/computer_file/program/maintenance/modsuit_control/proc/sync_modsuit(obj/item/mod/control/new_modsuit, mob/living/user) if(controlled_suit) unsync_modsuit() - controlled_suit = attacking_item + controlled_suit = new_modsuit RegisterSignal(controlled_suit, COMSIG_QDELETING, PROC_REF(unsync_modsuit)) - user.balloon_alert(user, "suit updated") - return TRUE + user?.balloon_alert(user, "suit updated") /datum/computer_file/program/maintenance/modsuit_control/proc/unsync_modsuit(atom/source) + SIGNAL_HANDLER UnregisterSignal(controlled_suit, COMSIG_QDELETING) controlled_suit = null @@ -42,4 +47,26 @@ return controlled_suit?.ui_static_data() /datum/computer_file/program/maintenance/modsuit_control/ui_act(action, list/params, datum/tgui/ui, datum/ui_state/state) + . = ..() return controlled_suit?.ui_act(action, params, ui, state) + + +/obj/item/circuit_component/mod_program/modsuit_control + associated_program = /datum/computer_file/program/maintenance/modsuit_control + + ///Circuit port for loading a new suit to control + var/datum/port/input/suit_port + +/obj/item/circuit_component/mod_program/modsuit_control/populate_ports() + . = ..() + suit_port = add_input_port("MODsuit Controlled", PORT_TYPE_ATOM) + +/obj/item/circuit_component/mod_program/modsuit_control/input_received(datum/port/port) + var/datum/computer_file/program/maintenance/modsuit_control/control = associated_program + var/obj/item/mod/control/mod = suit_port.value + if(isnull(mod) && control.controlled_suit) + control.unsync_modsuit() + return + if(!istype(mod)) + return + control.sync_modsuit(mod) diff --git a/code/modules/modular_computers/file_system/programs/maintenance/spectre_meter.dm b/code/modules/modular_computers/file_system/programs/maintenance/spectre_meter.dm new file mode 100644 index 00000000000..a989e5e61ba --- /dev/null +++ b/code/modules/modular_computers/file_system/programs/maintenance/spectre_meter.dm @@ -0,0 +1,180 @@ +#define SPOOK_VALUE_SAME_TURF_MULT 1.5 +#define SPOOK_VALUE_LIVING_MULT 6 +#define SPOOK_VALUE_DEF_MOB 10 +#define SPOOK_VALUE_ICON_STATE_MAX 120 +#define SPOOK_VALUE_SEGMENT 15 +#define SPOOK_COOLDOWN 2 SECONDS + +/datum/computer_file/program/maintenance/spectre_meter + filename = "spectre_meter" + filedesc = "Spectre-Meter" + power_cell_use = PROGRAM_BASIC_CELL_USE * 2 + downloader_category = PROGRAM_CATEGORY_EQUIPMENT + extended_desc = "A program used to somehow detect nearby spectral presence. Combine with the camera app to take photos of ghosts." + size = 7 + can_run_on_flags = PROGRAM_LAPTOP|PROGRAM_PDA + tgui_id = "NtosSpectreMeter" + program_icon = "ghost" + program_open_overlay = "spectre_meter_0" + circuit_comp_type = /obj/item/circuit_component/mod_program/spectre_meter + /// The cooldown for manual scans + COOLDOWN_DECLARE(manual_scan_cd) + /// Whether the automatic scan mode is active or not + var/auto_mode = FALSE + /// The value reported by the last scan. + var/last_spook_value = 0 + var/datum/looping_sound/spectre_meter/soundloop + +/datum/computer_file/program/maintenance/spectre_meter/on_start(mob/user) + . = ..() + if(.) + soundloop = new() + +/datum/computer_file/program/maintenance/spectre_meter/kill_program() + QDEL_NULL(soundloop) + auto_mode = FALSE + last_spook_value = 0 + program_open_overlay = "spectre_meter_0" + power_cell_use = PROGRAM_BASIC_CELL_USE + STOP_PROCESSING(SSprocessing, src) + return ..() + +/datum/computer_file/program/maintenance/spectre_meter/ui_data(mob/user) + var/list/data = list() + data["spook_value"] = last_spook_value + data["auto_mode"] = auto_mode + data["on_cooldown"] = !COOLDOWN_FINISHED(src, manual_scan_cd) + return data + +/datum/computer_file/program/maintenance/spectre_meter/ui_act(action, list/params, datum/tgui/ui, datum/ui_state/state) + . = ..() + switch(action) + if("manual_scan") + INVOKE_ASYNC(src, PROC_REF(scan_surroundings)) + return TRUE + if("toggle_mode") + auto_mode = !auto_mode + if(auto_mode) + ///We want SSprocess. It fires twice as fast than the standard SSobjs used by [computer_file/program/process_tick] + START_PROCESSING(SSprocessing, src) + soundloop.start(computer) + else + STOP_PROCESSING(SSprocessing, src) + soundloop.stop(TRUE) + power_cell_use = auto_mode ? PROGRAM_BASIC_CELL_USE * 3 : PROGRAM_BASIC_CELL_USE + return TRUE + +/datum/computer_file/program/maintenance/spectre_meter/process(seconds_per_tick) + if(auto_mode) + INVOKE_ASYNC(src, PROC_REF(scan_surroundings), FALSE) + +///Return the "spook level" of the area the computer is in. +/datum/computer_file/program/maintenance/spectre_meter/proc/scan_surroundings(manual = TRUE) + if(manual && !COOLDOWN_FINISHED(src, manual_scan_cd)) + return + + var/spook_value = 0 + var/turf/turf = get_turf(computer) + + for(var/atom/atom as anything in range(5, turf)) + var/spook_amount = 0 + if(ismob(atom)) + ///ghastly mobs count toward spookiness more than observers. + var/spook_value_mult = 0 + if(isliving(atom)) + var/mob/living/living = atom + if(living.mob_biotypes & MOB_SPIRIT) + spook_value_mult = SPOOK_VALUE_LIVING_MULT + else if(isobserver(atom)) + spook_value_mult = 1 + spook_amount += SPOOK_VALUE_DEF_MOB * spook_value_mult + var/list/materials = atom.has_material_type(/datum/material/hauntium) + if(materials) + spook_amount += materials[/datum/material/hauntium]/SHEET_MATERIAL_AMOUNT + spook_amount += atom.reagents?.get_reagent_amount(/datum/reagent/hauntium)/20 + if(!spook_amount) + continue + if(atom.loc == turf) + spook_amount *= SPOOK_VALUE_SAME_TURF_MULT + spook_value += spook_amount/max(get_dist(turf, atom), 1) + CHECK_TICK + + soundloop.last_spook_value = last_spook_value = round(spook_value) + var/old_open_overlay = program_open_overlay + program_open_overlay = "spectre_meter_[min(FLOOR(last_spook_value, SPOOK_VALUE_SEGMENT), SPOOK_VALUE_ICON_STATE_MAX)]" + if(program_open_overlay != old_open_overlay) + computer.update_appearance(UPDATE_OVERLAYS) + + if(manual) + COOLDOWN_START(src, manual_scan_cd, SPOOK_COOLDOWN) + playsound(computer, 'sound/effects/ping_hit.ogg', vol = 40, vary = TRUE) + + SEND_SIGNAL(computer, COMSIG_MODULAR_COMPUTER_SPECTRE_SCAN, last_spook_value) + +/datum/looping_sound/spectre_meter + mid_sounds = /datum/looping_sound/geiger::mid_sounds + mid_length = 2 + volume = 12 + var/last_spook_value = 0 + +/datum/looping_sound/spectre_meter/get_sound() + var/index = 1 + switch(last_spook_value) + if(0 to 14) + return null + if(14 to 40) + index = 1 + if(40 to 65) + index = 2 + if(65 to 90) + index = 3 + else + index = 4 + return ..(mid_sounds[index]) + +/datum/looping_sound/spectre_meter/stop(null_parent = FALSE) + last_spook_value = 0 + return ..() + + +/obj/item/circuit_component/mod_program/spectre_meter + associated_program = /datum/computer_file/program/maintenance/spectre_meter + circuit_flags = CIRCUIT_FLAG_INPUT_SIGNAL + + /// Returns the spookiness of each scan. + var/datum/port/output/scan_results + /// Pinged whenever a scan is done. + var/datum/port/output/scanned + +/obj/item/circuit_component/mod_program/spectre_meter/populate_ports() + . = ..() + scan_results = add_output_port("Scan Results", PORT_TYPE_NUMBER) + scanned = add_output_port("Scaned", PORT_TYPE_SIGNAL) + +/obj/item/circuit_component/mod_program/spectre_meter/register_shell(atom/movable/shell) + . = ..() + RegisterSignal(associated_program.computer, COMSIG_MODULAR_COMPUTER_SPECTRE_SCAN, PROC_REF(on_scan)) + +/obj/item/circuit_component/mod_program/spectre_meter/unregister_shell() + UnregisterSignal(associated_program.computer, COMSIG_MODULAR_COMPUTER_SPECTRE_SCAN) + return ..() + +/obj/item/circuit_component/mod_program/spectre_meter/get_ui_notices() + . = ..() + . += create_ui_notice("Scan Coooldown: [SPOOK_COOLDOWN]", "orange", "stopwatch") + +/obj/item/circuit_component/mod_program/spectre_meter/input_received(datum/port/port) + var/datum/computer_file/program/maintenance/spectre_meter/meter = associated_program + INVOKE_ASYNC(meter, TYPE_PROC_REF(/datum/computer_file/program/maintenance/spectre_meter, scan_surroundings)) + +/obj/item/circuit_component/mod_program/spectre_meter/proc/on_scan(datum/source, spook_value) + SIGNAL_HANDLER + scan_results.set_output(spook_value) + scanned.set_output(COMPONENT_SIGNAL) + +#undef SPOOK_VALUE_SAME_TURF_MULT +#undef SPOOK_VALUE_LIVING_MULT +#undef SPOOK_VALUE_DEF_MOB +#undef SPOOK_VALUE_ICON_STATE_MAX +#undef SPOOK_VALUE_SEGMENT +#undef SPOOK_COOLDOWN diff --git a/code/modules/modular_computers/file_system/programs/maintenance/themes.dm b/code/modules/modular_computers/file_system/programs/maintenance/themes.dm index fe6a25f15b1..26717e33d3a 100644 --- a/code/modules/modular_computers/file_system/programs/maintenance/themes.dm +++ b/code/modules/modular_computers/file_system/programs/maintenance/themes.dm @@ -26,6 +26,7 @@ ///Called post-installation of an application in a computer, after 'computer' var is set. /datum/computer_file/program/maintenance/theme/on_install() + SHOULD_CALL_PARENT(FALSE) //add the theme to the computer and increase its size to match var/datum/computer_file/program/themeify/theme_app = locate() in computer.stored_files if(theme_app) diff --git a/code/modules/modular_computers/file_system/programs/messenger/messenger_circuit.dm b/code/modules/modular_computers/file_system/programs/messenger/messenger_circuit.dm new file mode 100644 index 00000000000..600dfd25db7 --- /dev/null +++ b/code/modules/modular_computers/file_system/programs/messenger/messenger_circuit.dm @@ -0,0 +1,120 @@ +#define MESSENGER_CIRCUIT_MIN_COOLDOWN 5 SECONDS +#define MESSENGER_CIRCUIT_MAX_COOLDOWN 45 SECONDS +#define MESSENGER_CIRCUIT_CD_PER_RECIPIENT 1.5 SECONDS +#define MESSENGER_CIRCUIT_RINGTONE_CD 1.5 SECONDS + +/obj/item/circuit_component/mod_program/messenger + associated_program = /datum/computer_file/program/messenger + circuit_flags = CIRCUIT_FLAG_INPUT_SIGNAL + + ///Contents of the last received message + var/datum/port/output/received_message + ///Name of the sender of the above + var/datum/port/output/sender_name + ///Job title of the sender of the above + var/datum/port/output/sender_job + ///Reference to the device that sent the message. Usually a PDA. + var/datum/port/output/sender_device + ///Pinged whenever a message is received. + var/datum/port/output/received + + ///A message to be sent when triggered + var/datum/port/input/message + ///A list of PDA targets for the message to be sent + var/datum/port/input/targets + + ///Plays the ringtone when the input is received + var/datum/port/input/ring + ///Set the ringtone to the input + var/datum/port/input/set_ring + + ///the cooldown of the ringtone. + COOLDOWN_DECLARE(ring_cd) + +/obj/item/circuit_component/mod_program/messenger/populate_ports() + . = ..() + received_message = add_output_port("Message", PORT_TYPE_STRING) + sender_name = add_output_port("Sender Name", PORT_TYPE_STRING) + sender_job = add_output_port("Sender Job", PORT_TYPE_STRING) + sender_device = add_output_port("Sender Device", PORT_TYPE_ATOM) + received = add_output_port("Received", PORT_TYPE_SIGNAL) + + message = add_input_port("Message", PORT_TYPE_STRING) + targets = add_input_port("Targets", PORT_TYPE_LIST(PORT_TYPE_ATOM)) + + ring = add_input_port("Play Ringtone", PORT_TYPE_SIGNAL, trigger = PROC_REF(play_ringtone)) + set_ring = add_input_port("Set Ringtone", PORT_TYPE_STRING, trigger = PROC_REF(set_ringtone)) + +/obj/item/circuit_component/mod_program/messenger/input_received(datum/port/port) + var/list/messenger_targets = list() + for(var/datum/weakref/ref as anything in targets.value) + var/obj/item/modular_computer/modpc = ref?.resolve() //entity ports are hardrefs, entity list ports are weakref. :thonking: + if(!istype(modpc)) + continue + var/datum/computer_file/program/messenger/messenger = locate() in modpc.stored_files + if(messenger) + messenger_targets |= messenger + if(!length(messenger_targets)) + return + var/datum/computer_file/program/messenger/messenger = associated_program + var/filterd_message = censor_ic_filter_for_pdas(message.value) + + ///We need to async send_message() because some tcomms devices might sleep. Also because of (non-existent) user tgui alerts. + INVOKE_ASYNC(messenger, TYPE_PROC_REF(/datum/computer_file/program/messenger, send_message), src, filterd_message, messenger_targets) + +/obj/item/circuit_component/mod_program/messenger/register_shell(atom/movable/shell) + . = ..() + RegisterSignal(associated_program.computer, COMSIG_MODULAR_PDA_MESSAGE_RECEIVED, PROC_REF(message_received)) + RegisterSignal(associated_program.computer, COMSIG_MODULAR_PDA_MESSAGE_SENT, PROC_REF(message_sent)) + +/obj/item/circuit_component/mod_program/messenger/unregister_shell() + UnregisterSignal(associated_program.computer, list(COMSIG_MODULAR_PDA_MESSAGE_RECEIVED, COMSIG_MODULAR_PDA_MESSAGE_SENT)) + return ..() + +/obj/item/circuit_component/mod_program/messenger/get_ui_notices() + . = ..() + . += create_ui_notice("Cooldown per recipient: [DisplayTimeText(MESSENGER_CIRCUIT_CD_PER_RECIPIENT)]", "orange", "stopwatch") + . += create_ui_notice("Minimum cooldown: [DisplayTimeText(MESSENGER_CIRCUIT_MIN_COOLDOWN)]", "orange", "stopwatch") + . += create_ui_notice("Maximum cooldown: [DisplayTimeText(MESSENGER_CIRCUIT_MAX_COOLDOWN)]", "orange", "stopwatch") + +/obj/item/circuit_component/mod_program/messenger/proc/message_received(datum/source, datum/signal/subspace/messaging/tablet_message/signal, message_job, message_name) + SIGNAL_HANDLER + received_message.set_value(signal.data["message"]) + sender_name.set_output(message_name) + sender_job.set_output(message_job) + + var/atom/source_device + if(istype(signal.source, /datum/computer_file/program/messenger)) + var/datum/computer_file/program/messenger/sender_messenger = source + source_device = sender_messenger.computer + else if(isatom(signal.source)) + source_device = signal.source + + sender_device.set_output(source_device) + received.set_output(COMPONENT_SIGNAL) + +///Set the cooldown after the message was sent (by us) +/obj/item/circuit_component/mod_program/messenger/proc/message_sent(datum/source, atom/origin, datum/signal/subspace/messaging/tablet_message/signal) + SIGNAL_HANDLER + if(origin != src) + return + var/targets_length = length(signal.data["targets"]) + var/datum/computer_file/program/messenger/messenger = associated_program + var/cool = clamp(targets_length * MESSENGER_CIRCUIT_CD_PER_RECIPIENT, MESSENGER_CIRCUIT_MIN_COOLDOWN, MESSENGER_CIRCUIT_MAX_COOLDOWN) + COOLDOWN_START(messenger, last_text, cool) + +/obj/item/circuit_component/mod_program/messenger/proc/set_ringtone(datum/port/port) + var/datum/computer_file/program/messenger/messenger = associated_program + messenger.set_ringtone(set_ring.value) + +/obj/item/circuit_component/mod_program/messenger/proc/play_ringtone(datum/port/port) + if(!COOLDOWN_FINISHED(src, ring_cd)) + return + COOLDOWN_START(src, ring_cd, MESSENGER_CIRCUIT_RINGTONE_CD) + var/datum/computer_file/program/messenger/messenger = associated_program + messenger.computer.ring(messenger.ringtone) + +#undef MESSENGER_CIRCUIT_MIN_COOLDOWN +#undef MESSENGER_CIRCUIT_MAX_COOLDOWN +#undef MESSENGER_CIRCUIT_CD_PER_RECIPIENT +#undef MESSENGER_CIRCUIT_RINGTONE_CD diff --git a/code/modules/modular_computers/file_system/programs/messenger/messenger_program.dm b/code/modules/modular_computers/file_system/programs/messenger/messenger_program.dm index 36cf60d10c1..1ad20e698ad 100644 --- a/code/modules/modular_computers/file_system/programs/messenger/messenger_program.dm +++ b/code/modules/modular_computers/file_system/programs/messenger/messenger_program.dm @@ -14,12 +14,13 @@ size = 0 undeletable = TRUE // It comes by default in tablets, can't be downloaded, takes no space and should obviously not be able to be deleted. power_cell_use = NONE - program_flags = PROGRAM_HEADER | PROGRAM_RUNS_WITHOUT_POWER + program_flags = PROGRAM_HEADER | PROGRAM_RUNS_WITHOUT_POWER | PROGRAM_CIRCUITS_RUN_WHEN_CLOSED can_run_on_flags = PROGRAM_PDA ui_header = "ntnrc_idle.gif" tgui_id = "NtosMessenger" program_icon = "comment-alt" alert_able = TRUE + circuit_comp_type = /obj/item/circuit_component/mod_program/messenger /// Whether the user is invisible to the message list. var/invisible = FALSE @@ -138,6 +139,18 @@ for(var/datum/tgui/window as anything in computer.open_uis) SSassets.transport.send_assets(window.user, data) +/// Set the ringtone if possible. Also handles encoding. +/datum/computer_file/program/messenger/proc/set_ringtone(new_ringtone, mob/user) + new_ringtone = trim(html_encode(new_ringtone), MESSENGER_RINGTONE_MAX_LENGTH) + if(!new_ringtone) + return FALSE + + if(SEND_SIGNAL(computer, COMSIG_TABLET_CHANGE_ID, user, new_ringtone) & COMPONENT_STOP_RINGTONE_CHANGE) + return FALSE + + ringtone = ringtone + return TRUE + /datum/computer_file/program/messenger/ui_interact(mob/user, datum/tgui/ui) var/list/data = get_picture_assets() SSassets.transport.send_assets(user, data) @@ -147,19 +160,15 @@ return GLOB.reverse_contained_state return GLOB.default_state -/datum/computer_file/program/messenger/ui_act(action, list/params, datum/tgui/ui) +/datum/computer_file/program/messenger/ui_act(action, list/params, datum/tgui/ui, datum/ui_state/state) + . = ..() switch(action) if("PDA_ringSet") - var/new_ringtone = tgui_input_text(usr, "Enter a new ringtone", "Ringtone", ringtone, MESSENGER_RINGTONE_MAX_LENGTH) - var/mob/living/usr_mob = usr - if(!new_ringtone || !in_range(computer, usr_mob) || computer.loc != usr_mob) + var/mob/living/user = usr + var/new_ringtone = tgui_input_text(user, "Enter a new ringtone", "Ringtone", ringtone, encode = FALSE) + if(!in_range(computer, user) || computer.loc != user) return FALSE - - if(SEND_SIGNAL(computer, COMSIG_TABLET_CHANGE_ID, usr_mob, new_ringtone) & COMPONENT_STOP_RINGTONE_CHANGE) - return FALSE - - ringtone = new_ringtone - return TRUE + return set_ringtone(new_ringtone, user) if("PDA_toggleAlerts") alert_silenced = !alert_silenced @@ -451,18 +460,21 @@ message = emoji_sanitize(message) // check message against filter - if(!check_pda_message_against_filter(message, sender)) + if(sender && !check_pda_message_against_filter(message, sender)) return null return message /// Sends a message to targets via PDA. When sending to everyone, set `everyone` to true so the message is formatted accordingly -/datum/computer_file/program/messenger/proc/send_message(mob/living/sender, message, list/targets, everyone = FALSE) +/datum/computer_file/program/messenger/proc/send_message(atom/source, message, list/targets, everyone = FALSE) + var/mob/living/sender + if(isliving(source)) + sender = source message = sanitize_pda_message(message, sender) - if(!message) return FALSE + // upgrade the image asset to a permanent key var/photo_asset_key = selected_image if(photo_asset_key == TEMP_IMAGE_PATH(REF(src))) @@ -474,7 +486,7 @@ var/list/datum/computer_file/program/messenger/target_messengers = list() var/list/datum/pda_chat/target_chats = list() - var/should_alert = length(targets) == 1 + var/should_alert = length(targets) == 1 && sender // filter out invalid targets for(var/target in targets) @@ -523,7 +535,7 @@ target_chats += target_chat target_messengers += target_messenger - if(!send_message_signal(sender, message, target_messengers, photo_asset_key, everyone)) + if(!send_message_signal(source, message, target_messengers, photo_asset_key, everyone)) return FALSE // Log it in our logs @@ -553,9 +565,12 @@ return send_message_signal(sender, message, targets, fake_photo, FALSE, TRUE, fake_name, fake_job) -/datum/computer_file/program/messenger/proc/send_message_signal(mob/sender, message, list/datum/computer_file/program/messenger/targets, photo_path = null, everyone = FALSE, rigged = FALSE, fake_name = null, fake_job = null) - if(!sender.can_perform_action(computer, ALLOW_RESTING)) - return FALSE +/datum/computer_file/program/messenger/proc/send_message_signal(atom/source, message, list/datum/computer_file/program/messenger/targets, photo_path = null, everyone = FALSE, rigged = FALSE, fake_name = null, fake_job = null) + var/mob/sender + if(ismob(source)) + sender = source + if(!sender.can_perform_action(computer, ALLOW_RESTING)) + return FALSE if(!COOLDOWN_FINISHED(src, last_text)) return FALSE @@ -566,7 +581,8 @@ // check for jammers if(is_within_radio_jammer_range(computer) && !rigged) // different message so people know it's a radio jammer - to_chat(sender, span_notice("ERROR: Network unavailable, please try again later.")) + if(sender) + to_chat(sender, span_notice("ERROR: Network unavailable, please try again later.")) if(alert_able && !alert_silenced) playsound(computer, 'sound/machines/terminal_error.ogg', 15, TRUE) return FALSE @@ -596,7 +612,8 @@ // If it didn't reach, note that fact if (!signal.data["done"]) - to_chat(sender, span_notice("ERROR: Server is not responding.")) + if(sender) + to_chat(sender, span_notice("ERROR: Server is not responding.")) if(alert_able && !alert_silenced) playsound(computer, 'sound/machines/terminal_error.ogg', 15, TRUE) return FALSE @@ -605,29 +622,36 @@ // NOVA EDIT BEGIN - PDA messages show a visible message; again! sender.visible_message(span_notice("[sender]'s PDA rings out with the soft sound of keypresses"), vision_distance = COMBAT_MESSAGE_RANGE) // NOVA EDIT END + var/shell_addendum = "" + if(istype(source, /obj/item/circuit_component)) + var/obj/item/circuit_component/circuit = source + shell_addendum = "[circuit.parent.get_creator()] " // Log in the talk log - sender.log_talk(message, LOG_PDA, tag="[rigged ? "Rigged" : ""] PDA: [computer.saved_identification] to [signal.format_target()]") + source.log_talk(message, LOG_PDA, tag="[shell_addendum][rigged ? "Rigged" : ""] PDA: [computer.saved_identification] to [signal.format_target()]") if(rigged) log_bomber(sender, "sent a rigged PDA message (Name: [fake_name]. Job: [fake_job]) to [english_list(stringified_targets)] [!is_special_character(sender) ? "(SENT BY NON-ANTAG)" : ""]") message = emoji_parse(message) //already sent- this just shows the sent emoji as one to the sender in the to_chat // Show it to ghosts - var/ghost_message = span_game_say("[span_name("[sender]")] [rigged ? "(as [span_name(fake_name)]) Rigged " : ""]PDA Message --> [span_name("[signal.format_target()]")]: \"[signal.format_message()]\"") + var/ghost_message = span_game_say("[span_name("[source]")] [rigged ? "(as [span_name(fake_name)]) Rigged " : ""]PDA Message --> [span_name("[signal.format_target()]")]: \"[signal.format_message()]\"") var/list/message_listeners = GLOB.dead_player_list + GLOB.current_observers_list for(var/mob/listener as anything in message_listeners) if(!(get_chat_toggles(listener) & CHAT_GHOSTPDA)) continue - to_chat(listener, "[FOLLOW_LINK(listener, sender)] [ghost_message]") + to_chat(listener, "[FOLLOW_LINK(listener, source)] [ghost_message]") - to_chat(sender, span_info("PDA message sent to [signal.format_target()]: \"[message]\"")) + if(sender) + to_chat(sender, span_info("PDA message sent to [signal.format_target()]: \"[message]\"")) if (alert_able && !alert_silenced) computer.send_sound() COOLDOWN_START(src, last_text, 1 SECONDS) + SEND_SIGNAL(computer, COMSIG_MODULAR_PDA_MESSAGE_SENT, source, signal) + selected_image = null return TRUE @@ -642,6 +666,7 @@ var/sender_ref = signal.data["ref"] + // don't create a new chat for rigged messages, make it a one off notif if(!is_rigged) var/datum/pda_message/message = new(signal.data["message"], FALSE, station_time_timestamp(PDA_MESSAGE_TIMESTAMP_FORMAT), signal.data["photo"], signal.data["everyone"]) @@ -662,6 +687,14 @@ if(computer.loc && isliving(computer.loc)) receievers += computer.loc + // resolving w/o nullcheck here, assume the messenger exists if a real person sent a message + var/datum/computer_file/program/messenger/sender_messenger = chat.recipient?.resolve() + + var/sender_title = is_fake_user ? STRINGIFY_PDA_TARGET(fake_name, fake_job) : get_messenger_name(sender_messenger) + var/sender_name = is_fake_user ? fake_name : sender_messenger.computer.saved_identification + + SEND_SIGNAL(computer, COMSIG_MODULAR_PDA_MESSAGE_RECEIVED, signal, fake_job || sender_messenger?.computer.saved_job , sender_name) + for(var/mob/living/messaged_mob as anything in receievers) if(messaged_mob.stat >= UNCONSCIOUS) continue @@ -675,11 +708,6 @@ else reply = "(Reply)" - // resolving w/o nullcheck here, assume the messenger exists if a real person sent a message - var/datum/computer_file/program/messenger/sender_messenger = chat.recipient?.resolve() - - var/sender_title = is_fake_user ? STRINGIFY_PDA_TARGET(fake_name, fake_job) : get_messenger_name(sender_messenger) - var/sender_name = is_fake_user ? fake_name : sender_messenger.computer.saved_identification if (isAI(messaged_mob)) sender_title = "[sender_title]" diff --git a/code/modules/modular_computers/file_system/programs/newscasterapp.dm b/code/modules/modular_computers/file_system/programs/newscasterapp.dm index a19f38fb777..ed1c440f411 100644 --- a/code/modules/modular_computers/file_system/programs/newscasterapp.dm +++ b/code/modules/modular_computers/file_system/programs/newscasterapp.dm @@ -27,4 +27,5 @@ return newscaster_ui.ui_static_data(user) /datum/computer_file/program/newscaster/ui_act(action, params, datum/tgui/ui, datum/ui_state/state) + . = ..() return newscaster_ui.ui_act(action, params, ui, state) diff --git a/code/modules/modular_computers/file_system/programs/notepad.dm b/code/modules/modular_computers/file_system/programs/notepad.dm index a2fdd5929e8..95def6f8e96 100644 --- a/code/modules/modular_computers/file_system/programs/notepad.dm +++ b/code/modules/modular_computers/file_system/programs/notepad.dm @@ -8,6 +8,7 @@ tgui_id = "NtosNotepad" program_icon = "book" can_run_on_flags = PROGRAM_ALL + circuit_comp_type = /obj/item/circuit_component/mod_program/notepad var/written_note = "Congratulations on your station upgrading to the new NtOS and Thinktronic based collaboration effort, \ bringing you the best in electronics and software since 2467!\n\ @@ -19,7 +20,8 @@ Quarter - Either sides of Aft\n\ Bow - Either sides of Fore" -/datum/computer_file/program/notepad/ui_act(action, list/params, datum/tgui/ui) +/datum/computer_file/program/notepad/ui_act(action, list/params, datum/tgui/ui, datum/ui_state/state) + . = ..() switch(action) if("UpdateNote") written_note = params["newnote"] @@ -31,3 +33,39 @@ data["note"] = written_note return data + +/obj/item/circuit_component/mod_program/notepad + associated_program = /datum/computer_file/program/notepad + ///When the input is received, the written note will be set to its value. + var/datum/port/input/set_text + ///The written note output, sent everytime notes are updated. + var/datum/port/output/updated_text + ///Pinged whenever the text is updated + var/datum/port/output/updated + +/obj/item/circuit_component/mod_program/notepad/populate_ports() + . = ..() + set_text = add_input_port("Set Notes", PORT_TYPE_STRING) + updated_text = add_output_port("Notes", PORT_TYPE_STRING) + updated = add_output_port("Updated", PORT_TYPE_SIGNAL) + +/obj/item/circuit_component/mod_program/notepad/register_shell(atom/movable/shell) + . = ..() + RegisterSignal(associated_program, COMSIG_UI_ACT, PROC_REF(on_note_updated)) + +/obj/item/circuit_component/mod_program/notepad/unregister_shell() + UnregisterSignal(associated_program, COMSIG_UI_ACT) + return ..() + +/obj/item/circuit_component/mod_program/notepad/proc/on_note_updated(datum/source, mob/user, action, list/params) + SIGNAL_HANDLER + if(action == "UpdateNote") + updated_text.set_output(params["newnote"]) + updated.set_output(COMPONENT_SIGNAL) + +/obj/item/circuit_component/mod_program/notepad/input_received(datum/port/port) + var/datum/computer_file/program/notepad/pad = associated_program + pad.written_note = set_text.value + SStgui.update_uis(pad.computer) + updated_text.set_output(pad.written_note) + updated.set_output(COMPONENT_SIGNAL) diff --git a/code/modules/modular_computers/file_system/programs/nt_pay.dm b/code/modules/modular_computers/file_system/programs/nt_pay.dm index abaf03fa1cc..4e3fa5d3fb7 100644 --- a/code/modules/modular_computers/file_system/programs/nt_pay.dm +++ b/code/modules/modular_computers/file_system/programs/nt_pay.dm @@ -1,3 +1,10 @@ +#define NT_PAY_STATUS_NO_ACCOUNT 0 +#define NT_PAY_STATUS_DEPT_ACCOUNT 1 +#define NT_PAY_STATUS_INVALID_TOKEN 2 +#define NT_PAY_SATUS_SENDER_IS_RECEIVER 3 +#define NT_PAY_STATUS_INVALID_MONEY 4 +#define NT_PAY_STATUS_SUCCESS 5 + /datum/computer_file/program/nt_pay filename = "ntpay" filedesc = "Nanotrasen Pay System" @@ -8,45 +15,19 @@ tgui_id = "NtosPay" program_icon = "money-bill-wave" can_run_on_flags = PROGRAM_ALL + circuit_comp_type = /obj/item/circuit_component/mod_program/nt_pay ///Reference to the currently logged in user. var/datum/bank_account/current_user - ///Pay token, by which we can send credits - var/token - ///Amount of credits, which we sends - var/money_to_send = 0 ///Pay token what we want to find var/wanted_token -/datum/computer_file/program/nt_pay/ui_act(action, list/params, datum/tgui/ui) +/datum/computer_file/program/nt_pay/ui_act(action, list/params, datum/tgui/ui, datum/ui_state/state) + . = ..() switch(action) if("Transaction") - if(IS_DEPARTMENTAL_ACCOUNT(current_user)) - return to_chat(usr, span_notice("The app is unable to withdraw from that card.")) - - token = params["token"] - money_to_send = params["amount"] - var/datum/bank_account/recipient - if(!token) - return to_chat(usr, span_notice("You need to enter your transfer target's pay token.")) - if(!money_to_send) - return to_chat(usr, span_notice("You need to specify how much you're sending.")) - if(token == current_user.pay_token) - return to_chat(usr, span_notice("You can't send credits to yourself.")) - - for(var/account as anything in SSeconomy.bank_accounts_by_id) - var/datum/bank_account/acc = SSeconomy.bank_accounts_by_id[account] - if(acc.pay_token == token) - recipient = acc - break - - if(!recipient) - return to_chat(usr, span_notice("The app can't find who you're trying to pay. Did you enter the pay token right?")) - if(!current_user.has_money(money_to_send) || money_to_send < 1) - return current_user.bank_card_talk("You cannot afford it.") - - recipient.bank_card_talk("You received [money_to_send] credit(s). Reason: transfer from [current_user.account_holder]") - recipient.transfer_money(current_user, money_to_send) - current_user.bank_card_talk("You send [money_to_send] credit(s) to [recipient.account_holder]. Now you have [current_user.account_balance] credit(s)") + var/token = params["token"] + var/money_to_send = params["amount"] + make_payment(token, money_to_send, usr) if("GetPayToken") wanted_token = null @@ -58,8 +39,6 @@ if(!wanted_token) return wanted_token = "Account \"[params["wanted_name"]]\" not found." - - /datum/computer_file/program/nt_pay/ui_data(mob/user) var/list/data = list() @@ -74,3 +53,136 @@ data["transaction_list"] = current_user.transaction_history return data + +///Wrapper and signal for the main payment function of this program +/datum/computer_file/program/nt_pay/proc/make_payment(token, money_to_send, mob/user) + var/payment_result = _pay(token, money_to_send, user) + SEND_SIGNAL(computer, COMSIG_MODULAR_COMPUTER_NT_PAY_RESULT, payment_result) + +/datum/computer_file/program/nt_pay/proc/_pay(token, money_to_send, mob/user) + money_to_send = round(money_to_send) + + if(IS_DEPARTMENTAL_ACCOUNT(current_user)) + if(user) + to_chat(user, span_notice("The app is unable to withdraw from that card.")) + return NT_PAY_STATUS_DEPT_ACCOUNT + + var/datum/bank_account/recipient + if(!token) + if(user) + to_chat(user, span_notice("You need to enter your transfer target's pay token.")) + return NT_PAY_STATUS_INVALID_TOKEN + if(money_to_send <= 0) + if(user) + to_chat(user, span_notice("You need to specify how much you're sending.")) + return NT_PAY_STATUS_INVALID_MONEY + if(token == current_user.pay_token) + if(user) + to_chat(user, span_notice("You can't send credits to yourself.")) + return NT_PAY_SATUS_SENDER_IS_RECEIVER + + for(var/account as anything in SSeconomy.bank_accounts_by_id) + var/datum/bank_account/acc = SSeconomy.bank_accounts_by_id[account] + if(acc.pay_token == token) + recipient = acc + break + + if(!recipient) + if(user) + to_chat(user, span_notice("The app can't find who you're trying to pay. Did you enter the pay token right?")) + return NT_PAY_STATUS_INVALID_TOKEN + if(!current_user.has_money(money_to_send) || money_to_send < 1) + current_user.bank_card_talk("You cannot afford it.") + return NT_PAY_STATUS_INVALID_MONEY + + recipient.bank_card_talk("You received [money_to_send] credit(s). Reason: transfer from [current_user.account_holder]") + recipient.transfer_money(current_user, money_to_send) + for(var/obj/item/card/id/id_card as anything in recipient.bank_cards) + SEND_SIGNAL(id_card, COMSIG_ID_CARD_NTPAY_MONEY_RECEIVED, computer, money_to_send) + + current_user.bank_card_talk("You send [money_to_send] credit(s) to [recipient.account_holder]. Now you have [current_user.account_balance] credit(s)") + + return NT_PAY_STATUS_SUCCESS + + +/obj/item/circuit_component/mod_program/nt_pay + associated_program = /datum/computer_file/program/nt_pay + circuit_flags = CIRCUIT_FLAG_INPUT_SIGNAL + + ///Circuit variables. This one is for the token we want to pay + var/datum/port/input/token_port + ///The port for the money to send + var/datum/port/input/money_port + ///Let's us know if the payment has gone through or not. + var/datum/port/output/payment_status + ///The device from which the payment was received + var/datum/port/output/payment_device + ///Amount of a received payment + var/datum/port/output/payment_amount + ///Pinged whether a payment is received + var/datum/port/output/payment_received + +/obj/item/circuit_component/mod_program/nt_pay/register_shell(atom/movable/shell) + . = ..() + var/obj/item/modular_computer/modpc = associated_program.computer + RegisterSignal(modpc, COMSIG_MODULAR_COMPUTER_NT_PAY_RESULT, PROC_REF(on_payment_done)) + RegisterSignal(modpc, COMSIG_MODULAR_COMPUTER_INSERTED_ID, PROC_REF(register_id)) + if(modpc.computer_id_slot) + register_id(inserted_id = modpc.computer_id_slot) + +/obj/item/circuit_component/mod_program/nt_pay/unregister_shell() + var/obj/item/modular_computer/modpc = associated_program.computer + UnregisterSignal(modpc, list(COMSIG_MODULAR_COMPUTER_NT_PAY_RESULT, COMSIG_MODULAR_COMPUTER_INSERTED_ID)) + if(modpc.computer_id_slot) + UnregisterSignal(modpc.computer_id_slot, list(COMSIG_ID_CARD_NTPAY_MONEY_RECEIVED, COMSIG_MOVABLE_MOVED)) + return ..() + +/obj/item/circuit_component/mod_program/nt_pay/proc/register_id(datum/source, obj/item/card/inserted_id, mob/user) + SIGNAL_HANDLER + RegisterSignal(inserted_id, COMSIG_ID_CARD_NTPAY_MONEY_RECEIVED, PROC_REF(on_payment_received)) + RegisterSignal(inserted_id, COMSIG_MOVABLE_MOVED, PROC_REF(unregister_id)) + +/obj/item/circuit_component/mod_program/nt_pay/proc/unregister_id(obj/item/card/gone) + SIGNAL_HANDLER + UnregisterSignal(gone, list(COMSIG_ID_CARD_NTPAY_MONEY_RECEIVED, COMSIG_MOVABLE_MOVED)) + +/obj/item/circuit_component/mod_program/nt_pay/populate_ports() + . = ..() + token_port = add_input_port("Token", PORT_TYPE_STRING) + money_port = add_input_port("Amount", PORT_TYPE_NUMBER) + payment_status = add_output_port("Status", PORT_TYPE_NUMBER) + payment_device = add_output_port("Payment Sender", PORT_TYPE_ATOM) + payment_amount = add_output_port("Received Amount", PORT_TYPE_NUMBER) + payment_received = add_output_port("Received Payment", PORT_TYPE_SIGNAL) + +/obj/item/circuit_component/mod_program/nt_pay/get_ui_notices() + . = ..() + . += create_ui_notice("Outputs require inserted ID", "orange") + . += create_ui_notice("NT-Pay Statuses:") + . += create_ui_notice("Success - [NT_PAY_STATUS_SUCCESS]", "green") + . += create_ui_notice("Fail (No Account) - [NT_PAY_STATUS_NO_ACCOUNT]", "red") + . += create_ui_notice("Fail (Dept Account) - [NT_PAY_STATUS_DEPT_ACCOUNT]", "red") + . += create_ui_notice("Fail (Invalid Token) - [NT_PAY_STATUS_INVALID_TOKEN]", "red") + . += create_ui_notice("Fail (Sender = Receiver) - [NT_PAY_SATUS_SENDER_IS_RECEIVER]", "red") + . += create_ui_notice("Fail (Invalid Amount) - [NT_PAY_STATUS_INVALID_MONEY]", "red") + +/obj/item/circuit_component/mod_program/nt_pay/input_received(datum/port/port) + var/datum/computer_file/program/nt_pay/program = associated_program + program.make_payment(token_port.value, money_port.value) + +/obj/item/circuit_component/mod_program/nt_pay/proc/on_payment_done(datum/source, payment_result) + SIGNAL_HANDLER + payment_status.set_output(payment_result) + +/obj/item/circuit_component/mod_program/nt_pay/proc/on_payment_received(datum/source, obj/item/modular_computer/computer, money_received) + SIGNAL_HANDLER + payment_device.set_output(computer) + payment_amount.set_output(money_received) + payment_received.set_output(COMPONENT_SIGNAL) + +#undef NT_PAY_STATUS_NO_ACCOUNT +#undef NT_PAY_STATUS_DEPT_ACCOUNT +#undef NT_PAY_STATUS_INVALID_TOKEN +#undef NT_PAY_SATUS_SENDER_IS_RECEIVER +#undef NT_PAY_STATUS_INVALID_MONEY +#undef NT_PAY_STATUS_SUCCESS diff --git a/code/modules/modular_computers/file_system/programs/ntdownloader.dm b/code/modules/modular_computers/file_system/programs/ntdownloader.dm index 728f94372cf..d67da0242c3 100644 --- a/code/modules/modular_computers/file_system/programs/ntdownloader.dm +++ b/code/modules/modular_computers/file_system/programs/ntdownloader.dm @@ -103,6 +103,7 @@ download_completion += download_netspeed /datum/computer_file/program/ntnetdownload/ui_act(action, params, datum/tgui/ui, datum/ui_state/state) + . = ..() switch(action) if("PRG_downloadfile") if(!downloaded_file) diff --git a/code/modules/modular_computers/file_system/programs/portrait_printer.dm b/code/modules/modular_computers/file_system/programs/portrait_printer.dm index 6fc1358ccaf..0e69dd4969d 100644 --- a/code/modules/modular_computers/file_system/programs/portrait_printer.dm +++ b/code/modules/modular_computers/file_system/programs/portrait_printer.dm @@ -44,6 +44,7 @@ ) /datum/computer_file/program/portrait_printer/ui_act(action, params, datum/tgui/ui, datum/ui_state/state) + . = ..() switch(action) if("search") if(search_string != params["to_search"]) diff --git a/code/modules/modular_computers/file_system/programs/radar.dm b/code/modules/modular_computers/file_system/programs/radar.dm index 5e32a212bac..34771cde63b 100644 --- a/code/modules/modular_computers/file_system/programs/radar.dm +++ b/code/modules/modular_computers/file_system/programs/radar.dm @@ -1,3 +1,13 @@ +///The selected target is not trackable +#define RADAR_NOT_TRACKABLE 0 +///The selected target is trackable +#define RADAR_TRACKABLE 1 +///The selected target is trackable, even if subtypes would normally consider it untrackable. +#define RADAR_TRACKABLE_ANYWAY 2 + +///If the target is something it shouldn't be normally tracking, this is the maximum distance within with it an be tracked. +#define MAX_RADAR_CIRCUIT_DISTANCE 18 + /datum/computer_file/program/radar //generic parent that handles most of the process filename = "genericfinder" filedesc = "debug_finder" @@ -58,12 +68,13 @@ return data /datum/computer_file/program/radar/ui_act(action, params, datum/tgui/ui, datum/ui_state/state) - + . = ..() switch(action) if("selecttarget") var/selected_new_ref = params["ref"] if(selected_new_ref in trackable_object_refs()) selected = selected_new_ref + SEND_SIGNAL(computer, COMSIG_MODULAR_COMPUTER_RADAR_SELECTED, selected) return TRUE if("scan") @@ -133,13 +144,19 @@ **arg1 is the atom being evaluated. */ /datum/computer_file/program/radar/proc/trackable(atom/movable/signal) - if(!signal || !computer) - return FALSE + SHOULD_CALL_PARENT(TRUE) + if(isnull(signal) || isnull(computer)) + return RADAR_NOT_TRACKABLE var/turf/here = get_turf(computer) var/turf/there = get_turf(signal) - if(!here || !there) - return FALSE //I was still getting a runtime even after the above check while scanning, so fuck it - return (there.z == here.z) || (is_station_level(here.z) && is_station_level(there.z)) + if(isnull(here) || isnull(there) || !is_valid_z_level(here, there)) + return RADAR_NOT_TRACKABLE + var/trackable_signal = SEND_SIGNAL(computer, COMSIG_MODULAR_COMPUTER_RADAR_TRACKABLE, signal, here, there) + if(trackable_signal & COMPONENT_RADAR_TRACK_ANYWAY) + return RADAR_TRACKABLE_ANYWAY + if(trackable_signal & COMPONENT_RADAR_DONT_TRACK) + return RADAR_NOT_TRACKABLE + return RADAR_TRACKABLE /** * @@ -168,7 +185,10 @@ *return an atom reference. */ /datum/computer_file/program/radar/proc/find_atom() - return + SHOULD_CALL_PARENT(TRUE) + var/list/atom_container = list(null) + SEND_SIGNAL(computer, COMSIG_MODULAR_COMPUTER_RADAR_FIND_ATOM, atom_container) + return atom_container[1] //We use SSfastprocess for the program icon state because it runs faster than process_tick() does. /datum/computer_file/program/radar/process() @@ -221,9 +241,10 @@ program_flags = PROGRAM_ON_NTNET_STORE | PROGRAM_REQUIRES_NTNET download_access = list(ACCESS_MEDICAL) program_icon = "heartbeat" + circuit_comp_type = /obj/item/circuit_component/mod_program/radar/medical /datum/computer_file/program/radar/lifeline/find_atom() - return locate(selected) in GLOB.human_list + return ..() || (locate(selected) in GLOB.human_list) /datum/computer_file/program/radar/lifeline/scan() objects = list() @@ -243,14 +264,17 @@ objects += list(crewinfo) /datum/computer_file/program/radar/lifeline/trackable(mob/living/carbon/human/humanoid) - if(!humanoid || !istype(humanoid)) - return FALSE - if(..()) - if (istype(humanoid.w_uniform, /obj/item/clothing/under)) - var/obj/item/clothing/under/uniform = humanoid.w_uniform - if(uniform.has_sensor && uniform.sensor_mode >= SENSOR_COORDS) // Suit sensors must be on maximum - return TRUE - return FALSE + . = ..() + if(. != RADAR_TRACKABLE) + return . + if(!istype(humanoid)) + return RADAR_NOT_TRACKABLE + if(!istype(humanoid.w_uniform, /obj/item/clothing/under)) + return RADAR_NOT_TRACKABLE + var/obj/item/clothing/under/uniform = humanoid.w_uniform + if(!uniform.has_sensor || uniform.sensor_mode < SENSOR_COORDS) // Suit sensors must be on maximum + return RADAR_NOT_TRACKABLE + return . ///Tracks all janitor equipment /datum/computer_file/program/radar/custodial_locator @@ -262,9 +286,10 @@ program_icon = "broom" size = 2 detomatix_resistance = DETOMATIX_RESIST_MINOR + circuit_comp_type = /obj/item/circuit_component/mod_program/radar/janitor /datum/computer_file/program/radar/custodial_locator/find_atom() - return locate(selected) in GLOB.janitor_devices + return ..() || (locate(selected) in GLOB.janitor_devices) /datum/computer_file/program/radar/custodial_locator/scan() objects = list() @@ -306,6 +331,7 @@ program_icon = "bomb" arrowstyle = "ntosradarpointerS.png" pointercolor = "red" + circuit_comp_type = /obj/item/circuit_component/mod_program/radar/nukie /datum/computer_file/program/radar/fission360/on_start(mob/living/user) . = ..() @@ -323,7 +349,7 @@ return ..() /datum/computer_file/program/radar/fission360/find_atom() - return SSpoints_of_interest.get_poi_atom_by_ref(selected) + return ..() || SSpoints_of_interest.get_poi_atom_by_ref(selected) /datum/computer_file/program/radar/fission360/scan() objects = list() @@ -379,3 +405,131 @@ span_danger("[computer] vibrates and lets out an ominous alarm. Uh oh."), span_notice("[computer] begins to vibrate rapidly. Wonder what that means..."), ) + + +/** + * Base circuit for the radar program. + * The abstract radar doesn't have this, nor this one is associated to it, so + * make sure to specify the associate_program and circuit_comp_type of subtypes, + */ +/obj/item/circuit_component/mod_program/radar + + ///The target to track + var/datum/port/input/target + ///The selected target, from the app + var/datum/port/output/selected_by_app + /// The result from the output + var/datum/port/output/x_pos + var/datum/port/output/y_pos + + circuit_flags = CIRCUIT_FLAG_INPUT_SIGNAL|CIRCUIT_FLAG_OUTPUT_SIGNAL + +/obj/item/circuit_component/mod_program/radar/populate_ports() + . = ..() + target = add_input_port("Target", PORT_TYPE_ATOM) + selected_by_app = add_output_port("Selected From Program", PORT_TYPE_ATOM) + x_pos = add_output_port("X", PORT_TYPE_NUMBER) + y_pos = add_output_port("Y", PORT_TYPE_NUMBER) + +/obj/item/circuit_component/mod_program/radar/register_shell(atom/movable/shell) + . = ..() + RegisterSignal(associated_program.computer, COMSIG_MODULAR_COMPUTER_RADAR_TRACKABLE, PROC_REF(can_track)) + RegisterSignal(associated_program.computer, COMSIG_MODULAR_COMPUTER_RADAR_FIND_ATOM, PROC_REF(get_atom)) + RegisterSignal(associated_program.computer, COMSIG_MODULAR_COMPUTER_RADAR_SELECTED, PROC_REF(on_selected)) + +/obj/item/circuit_component/mod_program/radar/unregister_shell() + UnregisterSignal(associated_program.computer, list( + COMSIG_MODULAR_COMPUTER_RADAR_TRACKABLE, + COMSIG_MODULAR_COMPUTER_RADAR_FIND_ATOM, + COMSIG_MODULAR_COMPUTER_RADAR_SELECTED, + )) + return ..() + +/obj/item/circuit_component/mod_program/radar/get_ui_notices() + . = ..() + . += create_ui_notice("Max range for unsupported entities: [MAX_RADAR_CIRCUIT_DISTANCE] tiles", "orange", FA_ICON_BULLSEYE) + +///Set the selected ref of the program to the target (if it exists) and update the x/y pos ports (if trackable) when triggered. +/obj/item/circuit_component/mod_program/radar/input_received(datum/port/port) + var/datum/computer_file/program/radar/radar = associated_program + var/atom/radar_atom = radar.find_atom() + if(target.value != radar_atom) + radar.selected = REF(target.value) + SStgui.update_uis(radar.computer) + if(radar.trackable(radar_atom)) + var/turf/turf = get_turf(radar_atom) + x_pos.set_output(turf.x) + y_pos.set_output(turf.y) + else + x_pos.set_output(null) + y_pos.set_output(null) + +/** + * Check if we can track the object. When making different definitions of this proc for subtypes, include typical + * targets as an exception to this (e.g humans for lifeline) so that even if they're coming from a circuit input + * they won't get filtered by the maximum distance, because they're "supported entities". + */ +/obj/item/circuit_component/mod_program/radar/proc/can_track(datum/source, atom/signal, signal_turf, computer_turf) + SIGNAL_HANDLER + if(target.value && get_dist_euclidian(computer_turf, signal_turf) > MAX_RADAR_CIRCUIT_DISTANCE) + return COMPONENT_RADAR_DONT_TRACK + return COMPONENT_RADAR_TRACK_ANYWAY + +///Return the value of the target port. +/obj/item/circuit_component/mod_program/radar/proc/get_atom(datum/source, list/atom_container) + SIGNAL_HANDLER + atom_container[1] = target.value + +/** + * When a target is selected by the app, reset the target port, update the x/pos ports (if trackable) + * and set selected_by_app port to the target atom. + */ +/obj/item/circuit_component/mod_program/radar/proc/on_selected(datum/source, selected_ref) + SIGNAL_HANDLER + target.set_value(null) + var/datum/computer_file/program/radar/radar = associated_program + var/atom/selected_atom = radar.find_atom() + selected_by_app.set_output(selected_atom) + if(radar.trackable(selected_atom)) + var/turf/turf = get_turf(radar.selected) + x_pos.set_output(turf.x) + y_pos.set_output(turf.y) + else + x_pos.set_output(null) + y_pos.set_output(null) + + trigger_output.set_output(COMPONENT_SIGNAL) + + +/obj/item/circuit_component/mod_program/radar/medical + associated_program = /datum/computer_file/program/radar/lifeline + +/obj/item/circuit_component/mod_program/radar/medical/can_track(datum/source, atom/signal, signal_turf, computer_turf) + if(target.value in GLOB.human_list) + return NONE + return ..() + +/obj/item/circuit_component/mod_program/radar/janitor + associated_program = /datum/computer_file/program/radar/custodial_locator + +/obj/item/circuit_component/mod_program/radar/janitor/can_track(datum/source, atom/signal, signal_turf, computer_turf) + if(target.value in GLOB.janitor_devices) + return NONE + return ..() +/obj/item/circuit_component/mod_program/radar/nukie + associated_program = /datum/computer_file/program/radar/fission360 + +/obj/item/circuit_component/mod_program/radar/nukie/can_track(datum/source, atom/signal, signal_turf, computer_turf) + if(target.value in SSmachines.get_machines_by_type_and_subtypes(/obj/machinery/nuclearbomb)) + return NONE + if(target.value in SSpoints_of_interest.real_nuclear_disks) + return NONE + if(target.value == SSshuttle.getShuttle("syndicate")) + return NONE + return ..() + +#undef MAX_RADAR_CIRCUIT_DISTANCE + +#undef RADAR_NOT_TRACKABLE +#undef RADAR_TRACKABLE +#undef RADAR_TRACKABLE_ANYWAY diff --git a/code/modules/modular_computers/file_system/programs/robocontrol.dm b/code/modules/modular_computers/file_system/programs/robocontrol.dm index 37ae20f5260..68f7ba3ddef 100644 --- a/code/modules/modular_computers/file_system/programs/robocontrol.dm +++ b/code/modules/modular_computers/file_system/programs/robocontrol.dm @@ -49,6 +49,7 @@ var/mob/living/simple_animal/bot/mulebot/simple_mulebot = simple_bot mulelist += list(list( "name" = simple_mulebot.name, + "id" = simple_mulebot.id, "dest" = simple_mulebot.destination, "power" = simple_mulebot.cell ? simple_mulebot.cell.percent() : 0, "home" = simple_mulebot.home_destination, @@ -56,9 +57,8 @@ "autoPickup" = simple_mulebot.auto_pickup, "reportDelivery" = simple_mulebot.report_delivery, "mule_ref" = REF(simple_mulebot), + "load" = simple_mulebot.get_load_name(), )) - if(simple_mulebot.load) - data["load"] = simple_mulebot.load.name newbot["mule_check"] = TRUE botlist += list(newbot) @@ -83,7 +83,8 @@ return data -/datum/computer_file/program/robocontrol/ui_act(action, list/params, datum/tgui/ui) +/datum/computer_file/program/robocontrol/ui_act(action, list/params, datum/tgui/ui, datum/ui_state/state) + . = ..() var/mob/current_user = ui.user var/obj/item/card/id/id_card = computer?.computer_id_slot diff --git a/code/modules/modular_computers/file_system/programs/robotact.dm b/code/modules/modular_computers/file_system/programs/robotact.dm index d7a7122090d..8a2a824d004 100644 --- a/code/modules/modular_computers/file_system/programs/robotact.dm +++ b/code/modules/modular_computers/file_system/programs/robotact.dm @@ -84,6 +84,7 @@ return data /datum/computer_file/program/robotact/ui_act(action, params, datum/tgui/ui, datum/ui_state/state) + . = ..() //Implied type, memes var/obj/item/modular_computer/pda/silicon/tablet = computer var/mob/living/silicon/robot/cyborg = tablet.silicon_owner diff --git a/code/modules/modular_computers/file_system/programs/secureye.dm b/code/modules/modular_computers/file_system/programs/secureye.dm index 8298b9ea2b5..3b2b9d5d1fe 100644 --- a/code/modules/modular_computers/file_system/programs/secureye.dm +++ b/code/modules/modular_computers/file_system/programs/secureye.dm @@ -61,7 +61,6 @@ cam_background = new cam_background.assigned_map = map_name cam_background.del_on_map_removal = FALSE - RegisterSignal(src, COMSIG_TRACKABLE_TRACKING_TARGET, PROC_REF(on_track_target)) /datum/computer_file/program/secureye/Destroy() QDEL_NULL(cam_screen) @@ -138,8 +137,8 @@ playsound(computer, get_sfx(SFX_TERMINAL_TYPE), 25, FALSE) if(isnull(camera_ref)) return TRUE - if(internal_tracker && internal_tracker.tracking) - internal_tracker.set_tracking(FALSE) + if(internal_tracker) + internal_tracker.reset_tracking() update_active_camera_screen() return TRUE @@ -147,7 +146,8 @@ if("start_tracking") if(!internal_tracker) internal_tracker = new(src) - internal_tracker.set_tracked_mob(usr) + RegisterSignal(internal_tracker, COMSIG_TRACKABLE_TRACKING_TARGET, PROC_REF(on_track_target)) + internal_tracker.track_input(usr) return TRUE /datum/computer_file/program/secureye/proc/on_track_target(datum/trackable/source, mob/living/target) @@ -169,8 +169,8 @@ /datum/computer_file/program/secureye/ui_close(mob/user) . = ..() //don't track anyone while we're shutting off. - if(internal_tracker && internal_tracker.tracking) - internal_tracker.set_tracking(FALSE) + if(internal_tracker) + internal_tracker.reset_tracking() var/user_ref = REF(user) var/is_living = isliving(user) // Living creature or not, we remove you anyway. diff --git a/code/modules/modular_computers/file_system/programs/signalcommander.dm b/code/modules/modular_computers/file_system/programs/signalcommander.dm index 2032ad5461b..1e6e3e54051 100644 --- a/code/modules/modular_computers/file_system/programs/signalcommander.dm +++ b/code/modules/modular_computers/file_system/programs/signalcommander.dm @@ -8,6 +8,8 @@ tgui_id = "NtosSignaler" program_icon = "satellite-dish" can_run_on_flags = PROGRAM_PDA | PROGRAM_LAPTOP + program_flags = /datum/computer_file/program::program_flags | PROGRAM_CIRCUITS_RUN_WHEN_CLOSED + circuit_comp_type = /obj/item/circuit_component/mod_program/signaler ///What is the saved signal frequency? var/signal_frequency = FREQ_SIGNALER /// What is the saved signal code? @@ -36,10 +38,11 @@ data["maxFrequency"] = MAX_FREE_FREQ return data -/datum/computer_file/program/signal_commander/ui_act(action, list/params) +/datum/computer_file/program/signal_commander/ui_act(action, list/params, datum/tgui/ui, datum/ui_state/state) + . = ..() switch(action) if("signal") - INVOKE_ASYNC(src, PROC_REF(signal)) + INVOKE_ASYNC(src, PROC_REF(signal), usr) . = TRUE if("freq") var/new_signal_frequency = sanitize_frequency(unformat_frequency(params["freq"]), TRUE) @@ -56,27 +59,65 @@ signal_code = initial(signal_code) . = TRUE -/datum/computer_file/program/signal_commander/proc/signal() +/datum/computer_file/program/signal_commander/proc/signal(atom/source) if(!radio_connection) return + var/mob/user + var/obj/item/circuit_component/signaling + if(ismob(source)) + user = source + else if(istype(source, /obj/item/circuit_component)) + signaling = source + if(!COOLDOWN_FINISHED(src, signal_cooldown)) - computer.balloon_alert(usr, "cooling down!") + if(user) + computer.balloon_alert(user, "cooling down!") return COOLDOWN_START(src, signal_cooldown, signal_cooldown_time) - computer.balloon_alert(usr, "signaled") + if(user) + computer.balloon_alert(user, "signaled") var/time = time2text(world.realtime,"hh:mm:ss") var/turf/T = get_turf(computer) - - var/logging_data = "[time] : [key_name(usr)] used the computer '[initial(computer.name)]' @ location ([T.x],[T.y],[T.z]) : [format_frequency(signal_frequency)]/[signal_code]" + var/user_deets + if(signaling) + user_deets = "[signaling.parent.get_creator()]" + else + user_deets = "[key_name(usr)]" + var/logging_data = "[time] : [user_deets] used the computer '[initial(computer.name)]' @ location ([T.x],[T.y],[T.z]) : [format_frequency(signal_frequency)]/[signal_code]" add_to_signaler_investigate_log(logging_data) - var/datum/signal/signal = new(list("code" = signal_code), logging_data = logging_data) + var/datum/signal/signal = new(list("code" = signal_code, "key" = signaling?.parent.owner_id), logging_data = logging_data) radio_connection.post_signal(computer, signal) /datum/computer_file/program/signal_commander/proc/set_frequency(new_frequency) SSradio.remove_object(computer, signal_frequency) signal_frequency = new_frequency radio_connection = SSradio.add_object(computer, signal_frequency, RADIO_SIGNALER) + +/obj/item/circuit_component/mod_program/signaler + associated_program = /datum/computer_file/program/signal_commander + circuit_flags = CIRCUIT_FLAG_INPUT_SIGNAL + + /// Frequency input + var/datum/port/input/freq + /// Signal input + var/datum/port/input/code + +/obj/item/circuit_component/mod_program/signaler/populate_ports() + . = ..() + freq = add_input_port("Frequency", PORT_TYPE_NUMBER, trigger = PROC_REF(set_freq), default = FREQ_SIGNALER) + code = add_input_port("Code", PORT_TYPE_NUMBER, trigger = PROC_REF(set_code), default = DEFAULT_SIGNALER_CODE) + +/obj/item/circuit_component/mod_program/signaler/proc/set_freq(datum/port/port) + var/datum/computer_file/program/signal_commander/signaler = associated_program + signaler.set_frequency(clamp(freq.value, MIN_FREE_FREQ, MAX_FREE_FREQ)) + +/obj/item/circuit_component/mod_program/signaler/proc/set_code(datum/port/port) + var/datum/computer_file/program/signal_commander/signaler = associated_program + signaler.signal_code = round(clamp(code.value, 1, 100)) + +/obj/item/circuit_component/mod_program/signaler/input_received(datum/port/port) + INVOKE_ASYNC(associated_program, TYPE_PROC_REF(/datum/computer_file/program/signal_commander, signal), src) diff --git a/code/modules/modular_computers/file_system/programs/skill_tracker.dm b/code/modules/modular_computers/file_system/programs/skill_tracker.dm index 9063e3e239d..bd208dcef52 100644 --- a/code/modules/modular_computers/file_system/programs/skill_tracker.dm +++ b/code/modules/modular_computers/file_system/programs/skill_tracker.dm @@ -50,7 +50,8 @@ return null -/datum/computer_file/program/skill_tracker/ui_act(action, params, datum/tgui/ui) +/datum/computer_file/program/skill_tracker/ui_act(action, params, datum/tgui/ui, datum/ui_state/state) + . = ..() switch(action) if("PRG_reward") var/skill_type = find_skilltype(params["skill"]) diff --git a/code/modules/modular_computers/file_system/programs/sm_monitor.dm b/code/modules/modular_computers/file_system/programs/sm_monitor.dm index 0002aa983cc..72ab4d094c0 100644 --- a/code/modules/modular_computers/file_system/programs/sm_monitor.dm +++ b/code/modules/modular_computers/file_system/programs/sm_monitor.dm @@ -55,6 +55,7 @@ return data /datum/computer_file/program/supermatter_monitor/ui_act(action, params, datum/tgui/ui, datum/ui_state/state) + . = ..() switch(action) if("PRG_refresh") refresh() diff --git a/code/modules/modular_computers/file_system/programs/statusdisplay.dm b/code/modules/modular_computers/file_system/programs/statusdisplay.dm index ab5654ef490..b5cbb0b7b94 100644 --- a/code/modules/modular_computers/file_system/programs/statusdisplay.dm +++ b/code/modules/modular_computers/file_system/programs/statusdisplay.dm @@ -4,6 +4,7 @@ program_icon = "signal" program_open_overlay = "generic" size = 1 + circuit_comp_type = /obj/item/circuit_component/mod_program/status extended_desc = "An app used to change the message on the station status displays." tgui_id = "NtosStatus" @@ -42,16 +43,16 @@ * * upper - Top text * * lower - Bottom text */ -/datum/computer_file/program/status/proc/post_message(upper, lower) +/datum/computer_file/program/status/proc/post_message(upper, lower, log_usr = key_name(usr)) post_status("message", upper, lower) - log_game("[key_name(usr)] has changed the station status display message to \"[upper] [lower]\" [loc_name(usr)]") + log_game("[log_usr] has changed the station status display message to \"[upper] [lower]\" [loc_name(usr)]") /** * Post a picture to status displays * Arguments: * * picture - The picture name */ -/datum/computer_file/program/status/proc/post_picture(picture) +/datum/computer_file/program/status/proc/post_picture(picture, log_usr = key_name(usr)) if (!(picture in GLOB.status_display_approved_pictures)) return if(picture in GLOB.status_display_state_pictures) @@ -80,9 +81,10 @@ else post_status("alert", picture) - log_game("[key_name(usr)] has changed the station status display message to \"[picture]\" [loc_name(usr)]") + log_game("[log_usr] has changed the station status display message to \"[picture]\" [loc_name(usr)]") -/datum/computer_file/program/status/ui_act(action, list/params, datum/tgui/ui) +/datum/computer_file/program/status/ui_act(action, list/params, datum/tgui/ui, datum/ui_state/state) + . = ..() switch(action) if("setStatusMessage") upper_text = reject_bad_text(params["upperText"] || "", MAX_STATUS_LINE_LENGTH) @@ -104,3 +106,31 @@ data["lowerText"] = lower_text return data + + +/obj/item/circuit_component/mod_program/status + associated_program = /datum/computer_file/program/status + circuit_flags = CIRCUIT_FLAG_INPUT_SIGNAL|CIRCUIT_FLAG_OUTPUT_SIGNAL + + ///When the trigger is signaled, this will be the upper text of status displays. + var/datum/port/input/upper_text + ///When the trigger is signaled, this will be the bottom text. + var/datum/port/input/bottom_text + ///A list port that, when signaled, will set the status image to one of its values + var/datum/port/input/status_display_pics + +/obj/item/circuit_component/mod_program/status/populate_ports() + . = ..() + upper_text = add_input_port("Upper text", PORT_TYPE_STRING) + bottom_text = add_input_port("Bottom text", PORT_TYPE_STRING) + +/obj/item/circuit_component/mod_program/status/populate_options() + status_display_pics = add_option_port("Set Status Display Picture", GLOB.status_display_approved_pictures, trigger = PROC_REF(set_picture)) + +/obj/item/circuit_component/mod_program/status/proc/set_picture(datum/port/port) + var/datum/computer_file/program/status/status = associated_program + INVOKE_ASYNC(status, TYPE_PROC_REF(/datum/computer_file/program/status, post_picture), status_display_pics.value, parent.get_creator()) + +/obj/item/circuit_component/mod_program/status/input_received(datum/port/port) + var/datum/computer_file/program/status/status = associated_program + INVOKE_ASYNC(status, TYPE_PROC_REF(/datum/computer_file/program/status, post_message), upper_text.value, bottom_text.value, parent.get_creator()) diff --git a/code/modules/modular_computers/file_system/programs/techweb.dm b/code/modules/modular_computers/file_system/programs/techweb.dm index 3d9af432b69..bf9e7b1e9b8 100644 --- a/code/modules/modular_computers/file_system/programs/techweb.dm +++ b/code/modules/modular_computers/file_system/programs/techweb.dm @@ -88,7 +88,8 @@ ) return data -/datum/computer_file/program/science/ui_act(action, list/params) +/datum/computer_file/program/science/ui_act(action, list/params, datum/tgui/ui, datum/ui_state/state) + . = ..() // Check if the console is locked to block any actions occuring if (locked && action != "toggleLock") computer.say("Console is locked, cannot perform further actions.") @@ -110,7 +111,8 @@ /datum/computer_file/program/science/ui_static_data(mob/user) . = list( - "static_data" = list() + "static_data" = list(), + "point_types_abbreviations" = SSresearch.point_types, ) // Build node cache... diff --git a/code/modules/modular_computers/file_system/programs/theme_selector.dm b/code/modules/modular_computers/file_system/programs/theme_selector.dm index 5fdf1c8d365..6190f9b15ab 100644 --- a/code/modules/modular_computers/file_system/programs/theme_selector.dm +++ b/code/modules/modular_computers/file_system/programs/theme_selector.dm @@ -23,6 +23,7 @@ return data /datum/computer_file/program/themeify/ui_act(action, params, datum/tgui/ui, datum/ui_state/state) + . = ..() switch(action) if("PRG_change_theme") var/selected_theme = params["selected_theme"] diff --git a/code/modules/modular_computers/file_system/programs/wirecarp.dm b/code/modules/modular_computers/file_system/programs/wirecarp.dm index 64ef7137b00..f5a0a374aac 100644 --- a/code/modules/modular_computers/file_system/programs/wirecarp.dm +++ b/code/modules/modular_computers/file_system/programs/wirecarp.dm @@ -9,8 +9,10 @@ program_flags = PROGRAM_ON_NTNET_STORE | PROGRAM_REQUIRES_NTNET tgui_id = "NtosNetMonitor" program_icon = "network-wired" + circuit_comp_type = /obj/item/circuit_component/mod_program/ntnetmonitor -/datum/computer_file/program/ntnetmonitor/ui_act(action, list/params, datum/tgui/ui) +/datum/computer_file/program/ntnetmonitor/ui_act(action, list/params, datum/tgui/ui, datum/ui_state/state) + . = ..() switch(action) if("resetIDS") SSmodular_computers.intrusion_detection_alarm = FALSE @@ -66,3 +68,65 @@ data["tablets"] += list(tablet_data) return data + +/obj/item/circuit_component/mod_program/ntnetmonitor + associated_program = /datum/computer_file/program/ntnetmonitor + circuit_flags = CIRCUIT_FLAG_OUTPUT_SIGNAL + ///The stored NTnet relay or PDA to be used as the target of triggers + var/datum/port/input/target + ///Sets `intrusion_detection_alarm` when triggered + var/datum/port/input/toggle_ids + ///Toggles the target ntnet relay on/off when triggered + var/datum/port/input/toggle_relay + ///Purges modpc logs when triggered + var/datum/port/input/purge_logs + ///Toggles the spam mode of the target PDA when triggered + var/datum/port/input/toggle_mass_pda + ///Toggle mime mode of the target PDA when triggered + var/datum/port/input/toggle_mime_mode + ///Returns a list of all PDA Messengers when the "Get Messengers" input is pinged + var/datum/port/output/all_messengers + ///See above + var/datum/port/input/get_pdas + +/obj/item/circuit_component/mod_program/ntnetmonitor/populate_ports() + . = ..() + target = add_input_port("Target Messenger/Relay", PORT_TYPE_ATOM) + toggle_ids = add_input_port("Toggle IDS Status", PORT_TYPE_SIGNAL, trigger = PROC_REF(toggle_ids)) + toggle_relay = add_input_port("Toggle NTnet Relay", PORT_TYPE_SIGNAL, trigger = PROC_REF(toggle_relay)) + purge_logs = add_input_port("Purge Logs", PORT_TYPE_SIGNAL, trigger = PROC_REF(purge_logs)) + toggle_mass_pda = add_input_port("Toggle Mass Messenger", PORT_TYPE_SIGNAL, trigger = PROC_REF(toggle_pda_stuff)) + toggle_mime_mode = add_input_port("Toggle Mime Mode", PORT_TYPE_SIGNAL, trigger = PROC_REF(toggle_pda_stuff)) + get_pdas = add_input_port("Get PDAs", PORT_TYPE_SIGNAL, trigger = PROC_REF(get_pdas)) + all_messengers = add_output_port("List of PDAs", PORT_TYPE_LIST(PORT_TYPE_ATOM)) + +/obj/item/circuit_component/mod_program/ntnetmonitor/proc/get_pdas(datum/port/port) + var/list/computers_with_messenger = list() + for(var/messenger_ref as anything in GLOB.pda_messengers) + var/datum/computer_file/program/messenger/messenger = GLOB.pda_messengers[messenger_ref] + computers_with_messenger |= WEAKREF(messenger.computer) + all_messengers.set_output(computers_with_messenger) + +/obj/item/circuit_component/mod_program/ntnetmonitor/proc/toggle_ids(datum/port/port) + SSmodular_computers.intrusion_detection_enabled = !SSmodular_computers.intrusion_detection_enabled + +/obj/item/circuit_component/mod_program/ntnetmonitor/proc/toggle_relay(datum/port/port) + var/obj/machinery/ntnet_relay/target_relay = target.value + if(!istype(target_relay)) + return + target_relay.set_relay_enabled(!target_relay.relay_enabled) + +/obj/item/circuit_component/mod_program/ntnetmonitor/proc/purge_logs(datum/port/port) + SSmodular_computers.purge_logs() + +/obj/item/circuit_component/mod_program/ntnetmonitor/proc/toggle_pda_stuff(datum/port/port) + var/obj/item/modular_computer/computer = target.value + if(!istype(computer)) + return + var/datum/computer_file/program/messenger/target_messenger = locate() in computer.stored_files + if(isnull(target_messenger)) + return + if(COMPONENT_TRIGGERED_BY(toggle_mass_pda, port)) + target_messenger.spam_mode = !target_messenger.spam_mode + if(COMPONENT_TRIGGERED_BY(toggle_mime_mode, port)) + target_messenger.mime_mode = !target_messenger.mime_mode diff --git a/code/modules/movespeed/modifiers/items.dm b/code/modules/movespeed/modifiers/items.dm index 9fd3d051fac..6bdf2f31760 100644 --- a/code/modules/movespeed/modifiers/items.dm +++ b/code/modules/movespeed/modifiers/items.dm @@ -17,8 +17,12 @@ /datum/movespeed_modifier/sphere multiplicative_slowdown = -0.5 +/datum/movespeed_modifier/hook_jawed + multiplicative_slowdown = 4 + /datum/movespeed_modifier/shooting_assistant multiplicative_slowdown = 0.5 /datum/movespeed_modifier/binocs_wielded multiplicative_slowdown = 1.5 + diff --git a/code/modules/pai/pai.dm b/code/modules/pai/pai.dm index 19e00a04556..0ead2e9fd2c 100644 --- a/code/modules/pai/pai.dm +++ b/code/modules/pai/pai.dm @@ -16,7 +16,7 @@ light_flags = LIGHT_ATTACHED light_on = FALSE light_range = 3 - light_system = MOVABLE_LIGHT + light_system = OVERLAY_LIGHT maxHealth = 500 mob_size = MOB_SIZE_TINY mobility_flags = MOBILITY_FLAGS_REST_CAPABLE_DEFAULT @@ -80,6 +80,9 @@ /// Remote signaler var/obj/item/assembly/signaler/internal/signaler + ///The messeenger ability that pAIs get when they are put in a PDA. + var/datum/action/innate/pai/messenger/messenger_ability + // Static lists /// List of all available downloads var/static/list/available_software = list( @@ -149,6 +152,7 @@ return ..(target, action_bitflags) /mob/living/silicon/pai/Destroy() + QDEL_NULL(messenger_ability) QDEL_NULL(atmos_analyzer) QDEL_NULL(hacking_cable) QDEL_NULL(instrument) @@ -203,6 +207,8 @@ /mob/living/silicon/pai/Initialize(mapload) . = ..() + if(istype(loc, /obj/item/modular_computer)) + give_messenger_ability() START_PROCESSING(SSfastprocess, src) GLOB.pai_list += src make_laws() @@ -457,3 +463,14 @@ if (new_distance < HOLOFORM_MIN_RANGE || new_distance > HOLOFORM_MAX_RANGE) return leash.set_distance(new_distance) + +///Gives the messenger ability to the pAI, creating a new one if it doesn't have one already. +/mob/living/silicon/pai/proc/give_messenger_ability() + if(!messenger_ability) + messenger_ability = new(src) + messenger_ability.Grant(src) + +///Removes the messenger ability from the pAI, but does not delete it. +/mob/living/silicon/pai/proc/remove_messenger_ability() + if(messenger_ability) + messenger_ability.Remove(src) diff --git a/code/modules/paperwork/carbonpaper.dm b/code/modules/paperwork/carbonpaper.dm index b2f985dc357..1dfe4ea7821 100644 --- a/code/modules/paperwork/carbonpaper.dm +++ b/code/modules/paperwork/carbonpaper.dm @@ -20,6 +20,12 @@ return . += span_notice("Right-click to tear off the carbon-copy (you must use both hands).") +/obj/item/paper/carbon/AltClick(mob/living/user) + if(!copied) + to_chat(user, span_notice("Take off the carbon copy first.")) + return + return ..() + /obj/item/paper/carbon/proc/removecopy(mob/living/user) if(copied) to_chat(user, span_notice("There are no more carbon copies attached to this paper!")) diff --git a/code/modules/paperwork/paper.dm b/code/modules/paperwork/paper.dm index 82517f72494..1c1daaad511 100644 --- a/code/modules/paperwork/paper.dm +++ b/code/modules/paperwork/paper.dm @@ -319,6 +319,7 @@ /obj/item/paper/examine(mob/user) . = ..() + . += span_notice("Alt-click [src] to fold it into a paper plane.") if(!in_range(user, src) && !isobserver(user)) . += span_warning("You're too far away to read it!") return @@ -358,6 +359,31 @@ return TRUE return ..() +/obj/item/paper/AltClick(mob/living/user) + . = ..() + if(!user.can_perform_action(src, NEED_DEXTERITY|NEED_HANDS)) + return + if(HAS_TRAIT(user, TRAIT_PAPER_MASTER)) + return make_plane(user, /obj/item/paperplane/syndicate) + return make_plane(user, /obj/item/paperplane) + + +/** + * Paper plane folding + * Makes a paperplane depending on args and returns it. + * + * Arguments: + * * mob/living/user - who's folding + * * obj/item/paperplane/plane_type - what it will be folded into (path) + */ +/obj/item/paper/proc/make_plane(mob/living/user, obj/item/paperplane/plane_type = /obj/item/paperplane) + balloon_alert(user, "folded into a plane") + user.temporarilyRemoveItemFromInventory(src) + var/obj/item/paperplane/new_plane = new plane_type(loc, src) + if(user.Adjacent(new_plane)) + user.put_in_hands(new_plane) + return new_plane + /obj/item/proc/burn_paper_product_attackby_check(obj/item/attacking_item, mob/living/user, bypass_clumsy = FALSE) //can't be put on fire! if((resistance_flags & FIRE_PROOF) || !(resistance_flags & FLAMMABLE)) diff --git a/code/modules/paperwork/paper_premade.dm b/code/modules/paperwork/paper_premade.dm index 47588a65706..b72ce806dd3 100644 --- a/code/modules/paperwork/paper_premade.dm +++ b/code/modules/paperwork/paper_premade.dm @@ -167,8 +167,8 @@ /////////// Lavaland /obj/item/paper/fluff/stations/lavaland/orm_notice - name = "URGENT!" - default_raw_text = "A hastily written note has been scribbled here...

    Please use the ore redemption machine in the cargo office for smelting. PLEASE!

    --The Research Staff" + name = "URGENT! RENOVATIONS!" + default_raw_text = "A hastily written note has been scribbled here...

    Please use the ore redemption machine smelter and refinery in the cargo office for smelting. PLEASE! Leave boulders alone for the BRM to pick up!

    --The Research Staff" /////////// Space Ruins diff --git a/code/modules/paperwork/paperplane.dm b/code/modules/paperwork/paperplane.dm index 3b377ddd6a9..9f1eec94ed0 100644 --- a/code/modules/paperwork/paperplane.dm +++ b/code/modules/paperwork/paperplane.dm @@ -3,6 +3,7 @@ desc = "Paper, folded in the shape of a plane." icon = 'icons/obj/service/bureaucracy.dmi' icon_state = "paperplane" + base_icon_state = "paperplane" custom_fire_overlay = "paperplane_onfire" throw_range = 7 throw_speed = 1 @@ -11,8 +12,10 @@ resistance_flags = FLAMMABLE max_integrity = 50 - var/hit_probability = 2 //% - var/obj/item/paper/internalPaper + ///The chance of hitting a mob in the eye when thrown, in percentage. + var/hit_probability = 2 + ///Reference to the paper that's folded up in this paperplane, which we return when unfolded. + var/obj/item/paper/internal_paper // NOVA EDIT START - Better paper planes /// How long does getting shot in the eyes knock you down for? @@ -27,38 +30,38 @@ /obj/item/paperplane/syndicate desc = "Paper, masterfully folded in the shape of a plane." - throwforce = 20 //same as throwing stars, but no chance of embedding. - hit_probability = 100 //guaranteed to cause eye damage when it hits a mob. + throwforce = 20 + hit_probability = 100 -/obj/item/paperplane/Initialize(mapload, obj/item/paper/newPaper) +/obj/item/paperplane/Initialize(mapload, obj/item/paper/paper_made_of) . = ..() pixel_x = base_pixel_x + rand(-9, 9) pixel_y = base_pixel_y + rand(-8, 8) - if(newPaper) - internalPaper = newPaper - flags_1 = newPaper.flags_1 - color = newPaper.color - newPaper.forceMove(src) + if(paper_made_of) + internal_paper = paper_made_of + flags_1 = paper_made_of.flags_1 + color = paper_made_of.color + paper_made_of.forceMove(src) else - internalPaper = new(src) - if(internalPaper.icon_state == "cpaper" || internalPaper.icon_state == "cpaper_words") - icon_state = "paperplane_carbon" // It's the purple carbon copy. Use the purple paper plane - update_appearance() + internal_paper = new(src) + if(istype(internal_paper, /obj/item/paper/carbon_copy)) + icon_state = "[base_icon_state]_carbon" + update_appearance(UPDATE_ICON) /obj/item/paperplane/Exited(atom/movable/gone, direction) . = ..() - if (internalPaper == gone) - internalPaper = null + if (internal_paper == gone) + internal_paper = null if(!QDELETED(src)) qdel(src) /obj/item/paperplane/Destroy() - internalPaper = null + internal_paper = null return ..() /obj/item/paperplane/suicide_act(mob/living/user) var/obj/item/organ/internal/eyes/eyes = user.get_organ_slot(ORGAN_SLOT_EYES) - user.Stun(200) + user.Stun(20 SECONDS) user.visible_message(span_suicide("[user] jams [src] in [user.p_their()] nose. It looks like [user.p_theyre()] trying to commit suicide!")) user.adjust_eye_blur(12 SECONDS) if(eyes) @@ -68,8 +71,8 @@ /obj/item/paperplane/update_overlays() . = ..() - for(var/stamp in internalPaper.stamp_cache) - . += "paperplane_[stamp]" + for(var/stamp in internal_paper.stamp_cache) + . += "[base_icon_state]_[stamp]" /obj/item/paperplane/attack_self(mob/user) balloon_alert(user, "unfolded") @@ -77,94 +80,45 @@ var/atom/location = drop_location() // Need to keep a reference to the internal paper // when we move it out of the plane, our ref gets set to null - var/obj/item/paper/internal_paper = internalPaper - internal_paper.forceMove(location) + var/obj/item/paper/released_paper = internal_paper + released_paper.forceMove(location) // This will as a side effect, qdel the paper plane, making the user's hands empty - user.put_in_hands(internal_paper) + user.put_in_hands(released_paper) -/obj/item/paperplane/attackby(obj/item/P, mob/living/carbon/human/user, params) - if(burn_paper_product_attackby_check(P, user)) +/obj/item/paperplane/attackby(obj/item/attacking_item, mob/user, params) + if(burn_paper_product_attackby_check(attacking_item, user)) return - if(istype(P, /obj/item/pen) || istype(P, /obj/item/toy/crayon)) + if(istype(attacking_item, /obj/item/pen) || istype(attacking_item, /obj/item/toy/crayon)) to_chat(user, span_warning("You should unfold [src] before changing it!")) return - - else if(istype(P, /obj/item/stamp)) //we don't randomize stamps on a paperplane - internalPaper.attackby(P, user) //spoofed attack to update internal paper. + else if(istype(attacking_item, /obj/item/stamp)) //we don't randomize stamps on a paperplane + internal_paper.attackby(attacking_item, user) //spoofed attack to update internal paper. update_appearance() add_fingerprint(user) return - return ..() - -/obj/item/paperplane/throw_at(atom/target, range, speed, mob/thrower, spin=FALSE, diagonals_first = FALSE, datum/callback/callback, gentle, quickstart = TRUE) - . = ..(target, range, speed, thrower, FALSE, diagonals_first, callback, quickstart = quickstart) - /obj/item/paperplane/throw_impact(atom/hit_atom, datum/thrownthing/throwingdatum) - if(iscarbon(hit_atom)) - var/mob/living/carbon/C = hit_atom - if(C.can_catch_item(TRUE)) - var/datum/action/innate/origami/origami_action = locate() in C.actions - if(origami_action?.active) //if they're a master of origami and have the ability turned on, force throwmode on so they'll automatically catch the plane. - C.throw_mode_on(THROW_MODE_TOGGLE) - - if(..() || !ishuman(hit_atom))//if the plane is caught or it hits a nonhuman - // NOVA EDIT START - Better paper planes - if(delete_on_impact) - qdel(src) - // NOVA EDIT END - return - var/mob/living/carbon/human/H = hit_atom - var/obj/item/organ/internal/eyes/eyes = H.get_organ_slot(ORGAN_SLOT_EYES) - if(prob(hit_probability)) - if(H.is_eyes_covered()) - // NOVA EDIT START - Better paper planes - if(delete_on_impact) - qdel(src) - // NOVA EDIT END - return - visible_message(span_danger("\The [src] hits [H] in the eye[eyes ? "" : " socket"]!")) - H.adjust_eye_blur(12 SECONDS) - eyes?.apply_organ_damage(rand(impact_eye_damage_lower, impact_eye_damage_higher)) - H.Knockdown(40) - H.emote("scream") + if(iscarbon(hit_atom) && HAS_TRAIT(hit_atom, TRAIT_PAPER_MASTER)) + var/mob/living/carbon/hit_carbon = hit_atom + if(hit_carbon.can_catch_item(TRUE)) + hit_carbon.throw_mode_on(THROW_MODE_TOGGLE) - if(delete_on_impact) - qdel(src) - // NOVA EDIT END - -/obj/item/paper/examine(mob/user) . = ..() - . += span_notice("Alt-click [src] to fold it into a paper plane.") - -/obj/item/paper/AltClick(mob/living/user, obj/item/I) - if(!user.can_perform_action(src, NEED_DEXTERITY|NEED_HANDS)) + if(. || !ishuman(hit_atom)) //if the plane is caught or it hits a nonhuman return - if(istype(src, /obj/item/paper/carbon)) - var/obj/item/paper/carbon/Carbon = src - if(!Carbon.copied) - to_chat(user, span_notice("Take off the carbon copy first.")) - return - //Origami Master - var/datum/action/innate/origami/origami_action = locate() in user.actions - if(origami_action?.active) - make_plane(user, I, /obj/item/paperplane/syndicate) - else - make_plane(user, I, /obj/item/paperplane) + var/mob/living/carbon/human/hit_human = hit_atom + var/obj/item/organ/internal/eyes/eyes = hit_human.get_organ_slot(ORGAN_SLOT_EYES) + if(!prob(hit_probability)) + return + if(hit_human.is_eyes_covered()) + return + visible_message(span_danger("\The [src] hits [hit_human] in the eye[eyes ? "" : " socket"]!")) + hit_human.adjust_eye_blur(12 SECONDS) + eyes?.apply_organ_damage(rand(6, 8)) + hit_human.Paralyze(4 SECONDS) + hit_human.emote("scream") -/** - * Paper plane folding - * - * Arguments: - * * mob/living/user - who's folding - * * obj/item/I - what's being folded - * * obj/item/paperplane/plane_type - what it will be folded into (path) - */ -/obj/item/paper/proc/make_plane(mob/living/user, obj/item/I, obj/item/paperplane/plane_type = /obj/item/paperplane) - balloon_alert(user, "folded into a plane") - user.temporarilyRemoveItemFromInventory(src) - I = new plane_type(loc, src) - if(user.Adjacent(I)) - user.put_in_hands(I) +/obj/item/paperplane/throw_at(atom/target, range, speed, mob/thrower, spin=FALSE, diagonals_first = FALSE, datum/callback/callback, gentle, quickstart = TRUE) + return ..(target, range, speed, thrower, FALSE, diagonals_first, callback, quickstart = quickstart) diff --git a/code/modules/paperwork/pen.dm b/code/modules/paperwork/pen.dm index 5ee432b365e..10a15e88196 100644 --- a/code/modules/paperwork/pen.dm +++ b/code/modules/paperwork/pen.dm @@ -325,7 +325,7 @@ armour_penetration = 20 bare_wound_bonus = 10 item_flags = NO_BLOOD_ON_ITEM - light_system = MOVABLE_LIGHT + light_system = OVERLAY_LIGHT light_range = 1.5 light_power = 0.75 light_color = COLOR_SOFT_RED diff --git a/code/modules/paperwork/ticketmachine.dm b/code/modules/paperwork/ticketmachine.dm index c24b8fd73e8..56b7343995a 100644 --- a/code/modules/paperwork/ticketmachine.dm +++ b/code/modules/paperwork/ticketmachine.dm @@ -39,10 +39,8 @@ tickets.Cut() return ..() -/obj/machinery/ticket_machine/deconstruct(disassembled = TRUE) - if(!(obj_flags & NO_DECONSTRUCTION)) - new /obj/item/wallframe/ticket_machine(loc) - qdel(src) +/obj/machinery/ticket_machine/on_deconstruction(disassembled = TRUE) + new /obj/item/wallframe/ticket_machine(loc) MAPPING_DIRECTIONAL_HELPERS(/obj/machinery/ticket_machine, 32) diff --git a/code/modules/photography/camera/camera.dm b/code/modules/photography/camera/camera.dm index dae12f33bd4..3f721c1cefc 100644 --- a/code/modules/photography/camera/camera.dm +++ b/code/modules/photography/camera/camera.dm @@ -10,7 +10,7 @@ worn_icon_state = "camera" lefthand_file = 'icons/mob/inhands/items/devices_lefthand.dmi' righthand_file = 'icons/mob/inhands/items/devices_righthand.dmi' - light_system = MOVABLE_LIGHT //Used as a flash here. + light_system = OVERLAY_LIGHT //Used as a flash here. light_range = 8 light_color = COLOR_WHITE light_power = FLASH_LIGHT_POWER diff --git a/code/modules/photography/photos/album.dm b/code/modules/photography/photos/album.dm index f8f8a8fb062..ddc896fe758 100644 --- a/code/modules/photography/photos/album.dm +++ b/code/modules/photography/photos/album.dm @@ -58,12 +58,17 @@ max_total_storage = 42 max_slots = 21 -/datum/storage/photo_album/New(atom/parent, max_slots, max_specific_storage, max_total_storage, numerical_stacking, allow_quick_gather, allow_quick_empty, collection_mode, attack_hand_interact) +/datum/storage/photo_album/New( + atom/parent, + max_slots, + max_specific_storage, + max_total_storage, +) . = ..() - set_holdable(list(/obj/item/photo)) + set_holdable(/obj/item/photo) /datum/storage/photo_album/proc/save_everything() - var/obj/item/storage/photo_album/album = parent.resolve() + var/obj/item/storage/photo_album/album = parent ASSERT(istype(album)) SSpersistence.photo_albums_database.set_key(album.persistence_id, album.get_picture_id_list()) diff --git a/code/modules/plumbing/plumbers/iv_drip.dm b/code/modules/plumbing/plumbers/iv_drip.dm index dc6242779d1..bbdb80f57b1 100644 --- a/code/modules/plumbing/plumbers/iv_drip.dm +++ b/code/modules/plumbing/plumbers/iv_drip.dm @@ -7,9 +7,9 @@ density = TRUE use_internal_storage = TRUE -/obj/machinery/iv_drip/plumbing/Initialize(mapload) +/obj/machinery/iv_drip/plumbing/Initialize(mapload, bolt, layer) . = ..() - AddComponent(/datum/component/plumbing/iv_drip, anchored) + AddComponent(/datum/component/plumbing/iv_drip, bolt, layer) AddComponent(/datum/component/simple_rotation) /obj/machinery/iv_drip/plumbing/add_context(atom/source, list/context, obj/item/held_item, mob/living/user) @@ -36,5 +36,5 @@ if(default_unfasten_wrench(user, tool) == SUCCESSFUL_UNFASTEN) return ITEM_INTERACT_SUCCESS -/obj/machinery/iv_drip/plumbing/deconstruct(disassembled = TRUE) +/obj/machinery/iv_drip/plumbing/on_deconstruction(disassembled) qdel(src) diff --git a/code/modules/power/apc/apc_attack.dm b/code/modules/power/apc/apc_attack.dm index aaa63c05d85..509eb4f05b9 100644 --- a/code/modules/power/apc/apc_attack.dm +++ b/code/modules/power/apc/apc_attack.dm @@ -299,6 +299,8 @@ return TRUE /obj/machinery/power/apc/proc/set_broken() + if(machine_stat & BROKEN) + return if(malfai && operating) malfai.malf_picker.processing_time = clamp(malfai.malf_picker.processing_time - 10,0,1000) operating = FALSE diff --git a/code/modules/power/apc/apc_main.dm b/code/modules/power/apc/apc_main.dm index cbc1db293e7..9835ae4aef8 100644 --- a/code/modules/power/apc/apc_main.dm +++ b/code/modules/power/apc/apc_main.dm @@ -299,9 +299,7 @@ else . += "The cover is closed." -/obj/machinery/power/apc/deconstruct(disassembled = TRUE) - if(obj_flags & NO_DECONSTRUCTION) - return +/obj/machinery/power/apc/on_deconstruction(disassembled = TRUE) if(!(machine_stat & BROKEN)) set_broken() if(opened != APC_COVER_REMOVED) @@ -463,12 +461,13 @@ update() if("emergency_lighting") emergency_lights = !emergency_lights - for(var/turf/area_turf as anything in area.get_contained_turfs()) - for(var/obj/machinery/light/area_light in area_turf) - if(!initial(area_light.no_low_power)) //If there was an override set on creation, keep that override - area_light.no_low_power = emergency_lights - INVOKE_ASYNC(area_light, TYPE_PROC_REF(/obj/machinery/light/, update), FALSE) - CHECK_TICK + for (var/list/zlevel_turfs as anything in area.get_zlevel_turf_lists()) + for(var/turf/area_turf as anything in zlevel_turfs) + for(var/obj/machinery/light/area_light in area_turf) + if(!initial(area_light.no_low_power)) //If there was an override set on creation, keep that override + area_light.no_low_power = emergency_lights + INVOKE_ASYNC(area_light, TYPE_PROC_REF(/obj/machinery/light/, update), FALSE) + CHECK_TICK return TRUE /obj/machinery/power/apc/ui_close(mob/user) @@ -678,11 +677,12 @@ INVOKE_ASYNC(src, PROC_REF(break_lights)) /obj/machinery/power/apc/proc/break_lights() - for(var/turf/area_turf as anything in area.get_contained_turfs()) - for(var/obj/machinery/light/breaked_light in area_turf) - breaked_light.on = TRUE - breaked_light.break_light_tube() - stoplag() + for (var/list/zlevel_turfs as anything in area.get_zlevel_turf_lists()) + for(var/turf/area_turf as anything in zlevel_turfs) + for(var/obj/machinery/light/breaked_light in area_turf) + breaked_light.on = TRUE + breaked_light.break_light_tube() + stoplag() /obj/machinery/power/apc/should_atmos_process(datum/gas_mixture/air, exposed_temperature) return (exposed_temperature > 2000) diff --git a/code/modules/power/apc/apc_malf.dm b/code/modules/power/apc/apc_malf.dm index 3b070368804..62134de146e 100644 --- a/code/modules/power/apc/apc_malf.dm +++ b/code/modules/power/apc/apc_malf.dm @@ -37,7 +37,7 @@ if(!is_station_level(z)) return malf.ShutOffDoomsdayDevice() - occupier = new /mob/living/silicon/ai(src, malf.laws, malf) //DEAR GOD WHY? //IKR???? + occupier = new /mob/living/silicon/ai(src, malf.laws.copy_lawset(), malf) //DEAR GOD WHY? //IKR???? occupier.adjustOxyLoss(malf.getOxyLoss()) if(!findtext(occupier.name, "APC Copy")) occupier.name = "[malf.name] APC Copy" diff --git a/code/modules/power/apc/apc_power_proc.dm b/code/modules/power/apc/apc_power_proc.dm index 6118791c15c..52a671f00f5 100644 --- a/code/modules/power/apc/apc_power_proc.dm +++ b/code/modules/power/apc/apc_power_proc.dm @@ -138,9 +138,10 @@ if(nightshift_lights == on) return //no change nightshift_lights = on - for(var/turf/area_turf as anything in area.get_contained_turfs()) - for(var/obj/machinery/light/night_light in area_turf) - if(night_light.nightshift_allowed) - night_light.nightshift_enabled = nightshift_lights - night_light.update(FALSE) - CHECK_TICK + for (var/list/zlevel_turfs as anything in area.get_zlevel_turf_lists()) + for(var/turf/area_turf as anything in zlevel_turfs) + for(var/obj/machinery/light/night_light in area_turf) + if(night_light.nightshift_allowed) + night_light.nightshift_enabled = nightshift_lights + night_light.update(FALSE) + CHECK_TICK diff --git a/code/modules/power/apc/apc_tool_act.dm b/code/modules/power/apc/apc_tool_act.dm index b35f4de3fba..e712f474464 100644 --- a/code/modules/power/apc/apc_tool_act.dm +++ b/code/modules/power/apc/apc_tool_act.dm @@ -77,6 +77,7 @@ return toggle_panel_open() balloon_alert(user, "wires [panel_open ? "exposed" : "unexposed"]") + W.play_tool_sound(src) update_appearance() return diff --git a/code/modules/power/cell.dm b/code/modules/power/cell.dm index 68d40c85d11..ec6c23b00c6 100644 --- a/code/modules/power/cell.dm +++ b/code/modules/power/cell.dm @@ -162,16 +162,8 @@ /obj/item/stock_parts/cell/examine(mob/user) . = ..() - // NOVA EDIT ADDITION - if(ratingdesc && !microfusion_readout) - . += "This one has a rating of [display_energy(maxcharge)], and you should not swallow it." - // NOVA EDIT END if(rigged) . += span_danger("This power cell seems to be faulty!") - // NOVA EDIT ADDITION - else if(microfusion_readout) - . += "The charge meter reads [charge]/[maxcharge] MF." - // NOVA EDIT END else . += "The charge meter reads [CEILING(percent(), 0.1)]%." //so it doesn't say 0% charge when the overlay indicates it still has charge diff --git a/code/modules/power/generator.dm b/code/modules/power/generator.dm deleted file mode 100644 index d86b178ea0c..00000000000 --- a/code/modules/power/generator.dm +++ /dev/null @@ -1,231 +0,0 @@ -/obj/machinery/power/generator - name = "thermoelectric generator" - desc = "It's a high efficiency thermoelectric generator." - icon_state = "teg" - density = TRUE - use_power = NO_POWER_USE - - circuit = /obj/item/circuitboard/machine/generator - - var/obj/machinery/atmospherics/components/binary/circulator/cold_circ - var/obj/machinery/atmospherics/components/binary/circulator/hot_circ - - var/lastgen = 0 - var/lastgenlev = -1 - var/lastcirc = "00" - - -/obj/machinery/power/generator/Initialize(mapload) - . = ..() - AddComponent(/datum/component/simple_rotation) - find_circs() - connect_to_network() - SSair.start_processing_machine(src) - update_appearance() - -/obj/machinery/power/generator/Destroy() - kill_circs() - SSair.stop_processing_machine(src) - return ..() - -/obj/machinery/power/generator/update_overlays() - . = ..() - if(machine_stat & (NOPOWER|BROKEN)) - return - - var/L = min(round(lastgenlev / 100000), 11) - if(L != 0) - . += mutable_appearance('icons/obj/machines/engine/other.dmi', "teg-op[L]") - if(hot_circ && cold_circ) - . += "teg-oc[lastcirc]" - - -#define GENRATE 800 // generator output coefficient from Q - -/obj/machinery/power/generator/process_atmos() - - if(!cold_circ || !hot_circ) - return - - if(powernet) - var/datum/gas_mixture/cold_air = cold_circ.return_transfer_air() - var/datum/gas_mixture/hot_air = hot_circ.return_transfer_air() - - if(cold_air && hot_air) - - var/cold_air_heat_capacity = cold_air.heat_capacity() - var/hot_air_heat_capacity = hot_air.heat_capacity() - - var/delta_temperature = hot_air.temperature - cold_air.temperature - - - if(delta_temperature > 0 && cold_air_heat_capacity > 0 && hot_air_heat_capacity > 0) - var/efficiency = 0.65 - - var/energy_transfer = delta_temperature*hot_air_heat_capacity*cold_air_heat_capacity/(hot_air_heat_capacity+cold_air_heat_capacity) - - var/heat = energy_transfer*(1-efficiency) - lastgen += energy_transfer*efficiency - - hot_air.temperature = hot_air.temperature - energy_transfer/hot_air_heat_capacity - cold_air.temperature = cold_air.temperature + heat/cold_air_heat_capacity - - //add_avail(lastgen) This is done in process now - // update icon overlays only if displayed level has changed - - if(hot_air) - var/datum/gas_mixture/hot_circ_air1 = hot_circ.airs[1] - hot_circ_air1.merge(hot_air) - - if(cold_air) - var/datum/gas_mixture/cold_circ_air1 = cold_circ.airs[1] - cold_circ_air1.merge(cold_air) - - update_appearance() - - var/circ = "[cold_circ?.last_pressure_delta > 0 ? "1" : "0"][hot_circ?.last_pressure_delta > 0 ? "1" : "0"]" - if(circ != lastcirc) - lastcirc = circ - update_appearance() - - src.updateDialog() - -/obj/machinery/power/generator/process() - //Setting this number higher just makes the change in power output slower, it doesnt actualy reduce power output cause **math** - var/power_output = round(lastgen / 10) - add_avail(power_output) - lastgenlev = power_output - lastgen -= power_output - -/obj/machinery/power/generator/proc/get_menu(include_link = TRUE) - var/t = "" - if(!powernet) - t += "Unable to connect to the power network!" - else if(cold_circ && hot_circ) - var/datum/gas_mixture/cold_circ_air1 = cold_circ.airs[1] - var/datum/gas_mixture/cold_circ_air2 = cold_circ.airs[2] - var/datum/gas_mixture/hot_circ_air1 = hot_circ.airs[1] - var/datum/gas_mixture/hot_circ_air2 = hot_circ.airs[2] - - t += "
    " - - t += "Output: [display_power(lastgenlev)]" - - t += "
    " - - t += "Cold loop
    " - t += "Temperature Inlet: [round(cold_circ_air2.temperature, 0.1)] K / Outlet: [round(cold_circ_air1.temperature, 0.1)] K
    " - t += "Pressure Inlet: [round(cold_circ_air2.return_pressure(), 0.1)] kPa / Outlet: [round(cold_circ_air1.return_pressure(), 0.1)] kPa
    " - - t += "Hot loop
    " - t += "Temperature Inlet: [round(hot_circ_air2.temperature, 0.1)] K / Outlet: [round(hot_circ_air1.temperature, 0.1)] K
    " - t += "Pressure Inlet: [round(hot_circ_air2.return_pressure(), 0.1)] kPa / Outlet: [round(hot_circ_air1.return_pressure(), 0.1)] kPa
    " - - t += "
    " - else if(!hot_circ && cold_circ) - t += "Unable to locate hot circulator!" - else if(hot_circ && !cold_circ) - t += "Unable to locate cold circulator!" - else - t += "Unable to locate any parts!" - if(include_link) - t += "
    Close" - - return t - -/obj/machinery/power/generator/ui_interact(mob/user) - . = ..() - var/datum/browser/popup = new(user, "teg", "Thermo-Electric Generator", 460, 300) - popup.set_content(get_menu()) - popup.open() - -/obj/machinery/power/generator/Topic(href, href_list) - if(..()) - return - if( href_list["close"] ) - usr << browse(null, "window=teg") - usr.unset_machine() - return FALSE - return TRUE - - - -/obj/machinery/power/generator/proc/find_circs() - kill_circs() - var/list/circs = list() - var/obj/machinery/atmospherics/components/binary/circulator/C - var/circpath = /obj/machinery/atmospherics/components/binary/circulator - if(dir == NORTH || dir == SOUTH) - C = locate(circpath) in get_step(src, EAST) - if(C && C.dir == WEST) - circs += C - - C = locate(circpath) in get_step(src, WEST) - if(C && C.dir == EAST) - circs += C - - else - C = locate(circpath) in get_step(src, NORTH) - if(C && C.dir == SOUTH) - circs += C - - C = locate(circpath) in get_step(src, SOUTH) - if(C && C.dir == NORTH) - circs += C - - if(circs.len) - for(C in circs) - if(C.mode == CIRCULATOR_COLD && !cold_circ) - cold_circ = C - C.generator = src - else if(C.mode == CIRCULATOR_HOT && !hot_circ) - hot_circ = C - C.generator = src - -/obj/machinery/power/generator/wrench_act(mob/living/user, obj/item/I) - . = ..() - if(!panel_open) - return - set_anchored(!anchored) - I.play_tool_sound(src) - if(!anchored) - kill_circs() - connect_to_network() - to_chat(user, span_notice("You [anchored?"secure":"unsecure"] [src].")) - return TRUE - -/obj/machinery/power/generator/multitool_act(mob/living/user, obj/item/I) - . = ..() - if(!anchored) - return - find_circs() - to_chat(user, span_notice("You update [src]'s circulator links.")) - return TRUE - -/obj/machinery/power/generator/screwdriver_act(mob/user, obj/item/I) - if(..()) - return TRUE - toggle_panel_open() - I.play_tool_sound(src) - to_chat(user, span_notice("You [panel_open?"open":"close"] the panel on [src].")) - return TRUE - -/obj/machinery/power/generator/crowbar_act(mob/user, obj/item/I) - default_deconstruction_crowbar(I) - return TRUE - -/obj/machinery/power/generator/AltClick(mob/user) - return ..() // This hotkey is BLACKLISTED since it's used by /datum/component/simple_rotation - -/obj/machinery/power/generator/on_deconstruction() - kill_circs() - -/obj/machinery/power/generator/proc/kill_circs() - if(hot_circ) - hot_circ.generator = null - hot_circ = null - if(cold_circ) - cold_circ.generator = null - cold_circ = null - -#undef GENRATE diff --git a/code/modules/power/lighting/light.dm b/code/modules/power/lighting/light.dm index f2abba090dc..4addd59d21c 100644 --- a/code/modules/power/lighting/light.dm +++ b/code/modules/power/lighting/light.dm @@ -186,9 +186,12 @@ . += mutable_appearance(overlay_icon, base_state) -//NOVA EDIT ADDITION BEGIN - AESTHETICS +// NOVA EDIT ADDITION BEGIN - AESTHETICS #define LIGHT_ON_DELAY_UPPER (2 SECONDS) #define LIGHT_ON_DELAY_LOWER (0.25 SECONDS) +/// Dynamically calculate nightshift brightness +#define NIGHTSHIFT_LIGHT_MODIFIER 0.15 +#define NIGHTSHIFT_COLOR_MODIFIER 0.15 //NOVA EDIT END // Area sensitivity is traditionally tied directly to power use, as an optimization @@ -211,16 +214,15 @@ /obj/machinery/light/proc/handle_fire(area/source, new_fire) SIGNAL_HANDLER - update(instant = TRUE, play_sound = FALSE) //NOVA EDIT CHANGE + update(instant = TRUE, play_sound = FALSE) //NOVA EDIT CHANGE - ORIGINAL: update() // update the icon_state and luminosity of the light depending on its state -/obj/machinery/light/proc/update(trigger = TRUE, instant = FALSE, play_sound = TRUE) //NOVA EDIT CHANGE +/obj/machinery/light/proc/update(trigger = TRUE, instant = FALSE, play_sound = TRUE) // NOVA EDIT CHANGE switch(status) if(LIGHT_BROKEN,LIGHT_BURNED,LIGHT_EMPTY) on = FALSE low_power_mode = FALSE if(on) - /* NOVA EDIT ORIGINAL var/brightness_set = brightness var/power_set = bulb_power var/color_set = bulb_colour @@ -234,15 +236,31 @@ power_set = fire_power brightness_set = fire_brightness else if (nightshift_enabled) - brightness_set = nightshift_brightness - power_set = nightshift_light_power + brightness_set -= brightness_set * NIGHTSHIFT_LIGHT_MODIFIER // NOVA EDIT CHANGE - ORIGINAL: brightness_set = nightshift_brightness + power_set -= power_set * NIGHTSHIFT_LIGHT_MODIFIER // NOVA EDIT CHANGE - ORIGINAL: power_set = nightshift_light_power if(!color) color_set = nightshift_light_color + // NOVA EDIT ADDITION START - Dynamic nightshift color + if(!color_set) + // Adjust light values to be warmer. I doubt caching would speed this up by any worthwhile amount, as it's all very fast number and string operations. + // Convert to numbers for easier manipulation. + var/list/color_parts = rgb2num(bulb_colour) + var/red = color_parts[1] + var/green = color_parts[2] + var/blue = color_parts[3] + + red += round(red * NIGHTSHIFT_COLOR_MODIFIER) + green -= round(green * NIGHTSHIFT_COLOR_MODIFIER * 0.3) + red = clamp(red, 0, 255) // clamp to be safe, or you can end up with an invalid hex value + green = clamp(green, 0, 255) + blue = clamp(blue, 0, 255) + color_set = rgb(red, green, blue) // Splice the numbers together and turn them back to hex. + // NOVA EDIT ADDITION END else if (major_emergency) color_set = bulb_low_power_colour brightness_set = brightness * bulb_major_emergency_brightness_mul var/matching = light && brightness_set == light.light_range && power_set == light.light_power && color_set == light.light_color - if(!matching) + if(!matching && (maploaded || instant)) // NOVA EDIT CHANGE - ORIGINAL: if(!matching) switchcount++ if( prob( min(60, (switchcount**2)*0.01) ) ) if(trigger) @@ -254,17 +272,15 @@ l_power = power_set, l_color = color_set ) - */ - //NOVA EDIT CHANGE BEGIN - AESTHETICS - if(instant) - turn_on(trigger, play_sound) - else if(maploaded) - turn_on(trigger, play_sound) - maploaded = FALSE - else if(!turning_on) + // NOVA EDIT ADDITION START + maploaded = FALSE + if(play_sound) + playsound(src.loc, 'modular_nova/modules/aesthetics/lights/sound/light_on.ogg', 65, 1) + else if(!matching && !turning_on) + switchcount++ turning_on = TRUE - addtimer(CALLBACK(src, PROC_REF(turn_on), trigger, play_sound), rand(LIGHT_ON_DELAY_LOWER, LIGHT_ON_DELAY_UPPER)) - //NOVA EDIT END + addtimer(CALLBACK(src, PROC_REF(delayed_turn_on), trigger, play_sound, color_set, power_set, brightness_set), rand(LIGHT_ON_DELAY_LOWER, LIGHT_ON_DELAY_UPPER)) + // NOVA EDIT ADDITION END else if(has_emergency_power(LIGHT_EMERGENCY_POWER_USE) && !turned_off()) use_power = IDLE_POWER_USE low_power_mode = TRUE @@ -280,7 +296,9 @@ //NOVA EDIT ADDITION BEGIN - AESTHETICS #undef LIGHT_ON_DELAY_UPPER #undef LIGHT_ON_DELAY_LOWER -//NOVA EDIT END +#undef NIGHTSHIFT_LIGHT_MODIFIER +#undef NIGHTSHIFT_COLOR_MODIFIER +// NOVA EDIT ADDITION END /obj/machinery/light/update_current_power_usage() if(!on && static_power_used > 0) //Light is off but still powered @@ -412,10 +430,7 @@ if (prob(75)) electrocute_mob(user, get_area(src), src, (rand(7,10) * 0.1), TRUE) -/obj/machinery/light/deconstruct(disassembled = TRUE) - if(obj_flags & NO_DECONSTRUCTION) - qdel(src) - return +/obj/machinery/light/on_deconstruction(disassembled) var/obj/structure/light_construct/new_light = null var/current_stage = 2 if(!disassembled) @@ -444,7 +459,6 @@ new_light.cell = real_cell real_cell.forceMove(new_light) cell = null - qdel(src) /obj/machinery/light/attacked_by(obj/item/attacking_object, mob/living/user) ..() diff --git a/code/modules/power/power.dm b/code/modules/power/power.dm index 798bf2a2d75..f12da549da3 100644 --- a/code/modules/power/power.dm +++ b/code/modules/power/power.dm @@ -143,17 +143,17 @@ * - Amount: How much power the APC's cell is to be costed. */ /obj/machinery/proc/directly_use_power(amount) - var/area/A = get_area(src) - var/obj/machinery/power/apc/local_apc - if(!A) - return FALSE - local_apc = A.apc - if(!local_apc) + var/area/my_area = get_area(src) + if(isnull(my_area)) + stack_trace("machinery is somehow not in an area, nullspace?") return FALSE - if(!local_apc.cell) + if(!my_area.requires_power) + return TRUE + + var/obj/machinery/power/apc/my_apc = my_area.apc + if(isnull(my_apc)) return FALSE - local_apc.cell.use(amount) - return TRUE + return my_apc.cell.use(amount) /** * Attempts to draw power directly from the APC's Powernet rather than the APC's battery. For high-draw machines, like the cell charger diff --git a/code/modules/power/singularity/emitter.dm b/code/modules/power/singularity/emitter.dm index 0c7f5897e73..c4cec88f992 100644 --- a/code/modules/power/singularity/emitter.dm +++ b/code/modules/power/singularity/emitter.dm @@ -141,6 +141,9 @@ if(!active || !powernet) icon_state = base_icon_state return ..() + if(panel_open) + icon_state = "[base_icon_state]_open" + return ..() icon_state = avail(active_power_usage) ? icon_state_on : icon_state_underpowered return ..() @@ -310,7 +313,7 @@ /obj/machinery/power/emitter/screwdriver_act(mob/living/user, obj/item/item) if(..()) return TRUE - default_deconstruction_screwdriver(user, "emitter_open", "emitter", item) + default_deconstruction_screwdriver(user, "[base_icon_state]_open", base_icon_state, item) return TRUE /// Attempt to toggle the controls lock of the emitter @@ -424,7 +427,7 @@ return buckled_mob.forceMove(get_turf(src)) ..() - playsound(src,'sound/mecha/mechmove01.ogg', 50, TRUE) + playsound(src, 'sound/mecha/mechmove01.ogg', 50, TRUE) buckled_mob.pixel_y = 14 layer = 4.1 if(buckled_mob.client) @@ -434,7 +437,7 @@ auto.Grant(buckled_mob, src) /datum/action/innate/proto_emitter - check_flags = AB_CHECK_HANDS_BLOCKED | AB_CHECK_IMMOBILE | AB_CHECK_CONSCIOUS | AB_CHECK_INCAPACITATED + check_flags = AB_CHECK_HANDS_BLOCKED | AB_CHECK_CONSCIOUS | AB_CHECK_INCAPACITATED ///Stores the emitter the user is currently buckled on var/obj/machinery/power/emitter/prototype/proto_emitter ///Stores the mob instance that is buckled to the emitter diff --git a/code/modules/power/singularity/field_generator.dm b/code/modules/power/singularity/field_generator.dm index 93a339c2cc2..54615fb1fc8 100644 --- a/code/modules/power/singularity/field_generator.dm +++ b/code/modules/power/singularity/field_generator.dm @@ -413,6 +413,14 @@ no power level overlay is currently in the overlays list. if(fields.len) ..() +/obj/machinery/field/generator/starts_on + anchored = TRUE + state = FG_WELDED + +/obj/machinery/field/generator/starts_on/Initialize(mapload) + . = ..() + turn_on() + #undef FG_UNSECURED #undef FG_SECURED #undef FG_WELDED diff --git a/code/modules/power/smes.dm b/code/modules/power/smes.dm index fdc193b9866..45587fa48d9 100644 --- a/code/modules/power/smes.dm +++ b/code/modules/power/smes.dm @@ -189,7 +189,7 @@ return ..() -/obj/machinery/power/smes/on_deconstruction() +/obj/machinery/power/smes/on_deconstruction(disassembled) for(var/obj/item/stock_parts/cell/cell in component_parts) cell.charge = (charge / capacity) * cell.maxcharge diff --git a/code/modules/power/solar.dm b/code/modules/power/solar.dm index 64c09a987ed..c62552913bb 100644 --- a/code/modules/power/solar.dm +++ b/code/modules/power/solar.dm @@ -121,18 +121,16 @@ visually_turn(new_angle) azimuth_current = new_angle -/obj/machinery/power/solar/deconstruct(disassembled = TRUE) - if(!(obj_flags & NO_DECONSTRUCTION)) - if(disassembled) - var/obj/item/solar_assembly/S = locate() in src - if(S) - S.forceMove(loc) - S.give_glass(machine_stat & BROKEN) - else - playsound(src, SFX_SHATTER, 70, TRUE) - new /obj/item/shard(src.loc) - new /obj/item/shard(src.loc) - qdel(src) +/obj/machinery/power/solar/on_deconstruction(disassembled) + if(disassembled) + var/obj/item/solar_assembly/S = locate() in src + if(S) + S.forceMove(loc) + S.give_glass(machine_stat & BROKEN) + else + playsound(src, SFX_SHATTER, 70, TRUE) + new /obj/item/shard(src.loc) + new /obj/item/shard(src.loc) /obj/machinery/power/solar/update_overlays() . = ..() diff --git a/code/modules/power/supermatter/supermatter.dm b/code/modules/power/supermatter/supermatter.dm index 6325bf21553..7782f686498 100644 --- a/code/modules/power/supermatter/supermatter.dm +++ b/code/modules/power/supermatter/supermatter.dm @@ -318,7 +318,7 @@ GLOBAL_DATUM(main_supermatter_engine, /obj/machinery/power/supermatter_crystal) damage_factors = calculate_damage() if(damage == 0) // Clear any in game forced delams if on full health. set_delam(SM_DELAM_PRIO_IN_GAME, SM_DELAM_STRATEGY_PURGE) - else if(damage <= explosion_point) + else if(!final_countdown) set_delam(SM_DELAM_PRIO_NONE, SM_DELAM_STRATEGY_PURGE) // This one cant clear any forced delams. delamination_strategy.delam_progress(src) if(damage > explosion_point && !final_countdown) @@ -565,7 +565,6 @@ GLOBAL_DATUM(main_supermatter_engine, /obj/machinery/power/supermatter_crystal) header = "Meltdown Incoming", ) - var/datum/sm_delam/last_delamination_strategy = delamination_strategy var/list/count_down_messages = delamination_strategy.count_down_messages() radio.talk_into( @@ -588,10 +587,6 @@ GLOBAL_DATUM(main_supermatter_engine, /obj/machinery/power/supermatter_crystal) ) for(var/i in delamination_countdown_time to 0 step -10) - if(last_delamination_strategy != delamination_strategy) - count_down_messages = delamination_strategy.count_down_messages() - last_delamination_strategy = delamination_strategy - var/message var/healed = FALSE diff --git a/code/modules/power/supermatter/supermatter_delamination/cascade_delam.dm b/code/modules/power/supermatter/supermatter_delamination/cascade_delam.dm index 5d8cfecaa40..a9c7a87045d 100644 --- a/code/modules/power/supermatter/supermatter_delamination/cascade_delam.dm +++ b/code/modules/power/supermatter/supermatter_delamination/cascade_delam.dm @@ -28,8 +28,7 @@ "Something feels very off.", "A drowning sense of dread washes over you.", ) - for(var/mob/victim as anything in GLOB.player_list) - to_chat(victim, span_danger(pick(messages))) + dispatch_announcement_to_players(span_danger(pick(messages)), should_play_sound = FALSE) return TRUE diff --git a/code/modules/power/thermoelectric_generator.dm b/code/modules/power/thermoelectric_generator.dm new file mode 100644 index 00000000000..bded1482825 --- /dev/null +++ b/code/modules/power/thermoelectric_generator.dm @@ -0,0 +1,222 @@ +#define TEG_EFFICIENCY 0.65 + +/obj/machinery/power/thermoelectric_generator + name = "thermoelectric generator" + desc = "It's a high efficiency thermoelectric generator." + icon_state = "teg" + base_icon_state = "teg" + density = TRUE + use_power = NO_POWER_USE + circuit = /obj/item/circuitboard/machine/thermoelectric_generator + + ///The cold circulator machine, containing cold gas for the mix. + var/obj/machinery/atmospherics/components/binary/circulator/cold_circ + ///The hot circulator machine, containing very hot gas for the mix. + var/obj/machinery/atmospherics/components/binary/circulator/hot_circ + ///The amount of power the generator is currently producing. + var/lastgen = 0 + ///The amount of power the generator has last produced. + var/lastgenlev = -1 + /** + * Used in overlays for the TEG, basically; + * one number is for the cold mix, one is for the hot mix + * If the cold mix has pressure in it, then the first number is 1, else 0 + * If the hot mix has pressure in it, then the second number is 1, else 0 + * Neither has pressure: 00 + * Only cold has pressure: 10 + * Only hot has pressure: 01 + * Both has pressure: 11 + */ + var/last_pressure_overlay = "00" + +/obj/machinery/power/thermoelectric_generator/Initialize(mapload) + . = ..() + AddComponent(/datum/component/simple_rotation) + find_circulators() + connect_to_network() + SSair.start_processing_machine(src) + update_appearance() + +/obj/machinery/power/thermoelectric_generator/Destroy() + null_circulators() + SSair.stop_processing_machine(src) + return ..() + +/obj/machinery/power/thermoelectric_generator/on_deconstruction(disassembled) + null_circulators() + +/obj/machinery/power/thermoelectric_generator/update_overlays() + . = ..() + if(machine_stat & (NOPOWER|BROKEN)) + return + + var/level = min(round(lastgenlev / 100000), 11) + if(level) + . += mutable_appearance('icons/obj/machines/engine/other.dmi', "[base_icon_state]-op[level]") + if(hot_circ && cold_circ) + . += "[base_icon_state]-oc[last_pressure_overlay]" + +/obj/machinery/power/thermoelectric_generator/wrench_act(mob/living/user, obj/item/tool) + if(!panel_open) + balloon_alert(user, "open the panel!") + return + set_anchored(!anchored) + tool.play_tool_sound(src) + if(anchored) + connect_to_network() + else + null_circulators() + balloon_alert(user, "[anchored ? "secure" : "unsecure"]") + return TRUE + +/obj/machinery/power/thermoelectric_generator/multitool_act(mob/living/user, obj/item/tool) + . = ..() + if(!anchored) + return + find_circulators() + balloon_alert(user, "circulators updated") + return TRUE + +/obj/machinery/power/thermoelectric_generator/screwdriver_act(mob/user, obj/item/tool) + if(!anchored) + balloon_alert(user, "anchor it down!") + return + toggle_panel_open() + tool.play_tool_sound(src) + balloon_alert(user, "panel [panel_open ? "open" : "closed"]") + return TRUE + +/obj/machinery/power/thermoelectric_generator/crowbar_act(mob/living/user, obj/item/tool) + default_deconstruction_crowbar(tool) + return TRUE + +/obj/machinery/power/thermoelectric_generator/process() + //Setting this number higher just makes the change in power output slower, it doesnt actualy reduce power output cause **math** + var/power_output = round(lastgen / 10) + add_avail(power_output) + lastgenlev = power_output + lastgen -= power_output + +/obj/machinery/power/thermoelectric_generator/process_atmos() + if(!cold_circ || !hot_circ) + return + if(!powernet) + return + + var/datum/gas_mixture/cold_air = cold_circ.return_transfer_air() + var/datum/gas_mixture/hot_air = hot_circ.return_transfer_air() + if(cold_air && hot_air) + var/cold_air_heat_capacity = cold_air.heat_capacity() + var/hot_air_heat_capacity = hot_air.heat_capacity() + var/delta_temperature = hot_air.temperature - cold_air.temperature + if(delta_temperature > 0 && cold_air_heat_capacity > 0 && hot_air_heat_capacity > 0) + var/efficiency = TEG_EFFICIENCY + var/energy_transfer = delta_temperature*hot_air_heat_capacity*cold_air_heat_capacity/(hot_air_heat_capacity+cold_air_heat_capacity) + var/heat = energy_transfer*(1-efficiency) + lastgen += energy_transfer*efficiency + hot_air.temperature = hot_air.temperature - energy_transfer/hot_air_heat_capacity + cold_air.temperature = cold_air.temperature + heat/cold_air_heat_capacity + + if(hot_air) + var/datum/gas_mixture/hot_circ_air1 = hot_circ.airs[1] + hot_circ_air1.merge(hot_air) + + if(cold_air) + var/datum/gas_mixture/cold_circ_air1 = cold_circ.airs[1] + cold_circ_air1.merge(cold_air) + + var/current_pressure = "[cold_circ?.last_pressure_delta > 0 ? "1" : "0"][hot_circ?.last_pressure_delta > 0 ? "1" : "0"]" + if(current_pressure != last_pressure_overlay) + //this requires an update to overlays. + last_pressure_overlay = current_pressure + + update_appearance(UPDATE_ICON) + +/obj/machinery/power/thermoelectric_generator/ui_interact(mob/user, datum/tgui/ui) + ui = SStgui.try_update_ui(user, src, ui) + if(!ui) + ui = new(user, src, "ThermoElectricGenerator", name) + ui.open() + +/obj/machinery/power/thermoelectric_generator/ui_data(mob/user) + var/list/data = list() + data["error_message"] = null + if(!powernet) + data["error_message"] = "Unable to connect to the power network!" + return data + if(!cold_circ && !hot_circ) + data["error_message"] = "Unable to locate any parts! Multitool the machine to sync to nearby parts." + return data + if(!cold_circ) + data["error_message"] = "Unable to locate cold circulator!" + return data + if(!hot_circ) + data["error_message"] = "Unable to locate hot circulator!" + return data + + var/datum/gas_mixture/cold_circ_air1 = cold_circ.airs[1] + var/datum/gas_mixture/cold_circ_air2 = cold_circ.airs[2] + + var/datum/gas_mixture/hot_circ_air1 = hot_circ.airs[1] + var/datum/gas_mixture/hot_circ_air2 = hot_circ.airs[2] + + data["last_power_output"] = display_power(lastgenlev) + + var/list/cold_data = list() + cold_data["temperature_inlet"] = round(cold_circ_air2.temperature, 0.1) + cold_data["temperature_outlet"] = round(cold_circ_air1.temperature, 0.1) + cold_data["pressure_inlet"] = round(cold_circ_air2.return_pressure(), 0.1) + cold_data["pressure_outlet"] = round(cold_circ_air1.return_pressure(), 0.1) + data["cold_data"] = list(cold_data) + + var/list/hot_data = list() + hot_data["temperature_inlet"] = round(hot_circ_air2.temperature, 0.1) + hot_data["temperature_outlet"] = round(hot_circ_air1.temperature, 0.1) + hot_data["pressure_inlet"] = round(hot_circ_air2.return_pressure(), 0.1) + hot_data["pressure_outlet"] = round(hot_circ_air1.return_pressure(), 0.1) + data["hot_data"] = list(hot_data) + + return data + +///Finds and connects nearby valid circulators to the machine, nulling out previous ones. +/obj/machinery/power/thermoelectric_generator/proc/find_circulators() + null_circulators() + var/list/valid_circulators = list() + + if(dir & (NORTH|SOUTH)) + var/obj/machinery/atmospherics/components/binary/circulator/east_circulator = locate() in get_step(src, EAST) + if(east_circulator && east_circulator.dir == WEST) + valid_circulators += east_circulator + var/obj/machinery/atmospherics/components/binary/circulator/west_circulator = locate() in get_step(src, WEST) + if(west_circulator && west_circulator.dir == EAST) + valid_circulators += west_circulator + else + var/obj/machinery/atmospherics/components/binary/circulator/north_circulator = locate() in get_step(src, NORTH) + if(north_circulator && north_circulator.dir == SOUTH) + valid_circulators += north_circulator + var/obj/machinery/atmospherics/components/binary/circulator/south_circulator = locate() in get_step(src, SOUTH) + if(south_circulator && south_circulator.dir == NORTH) + valid_circulators += south_circulator + + if(!valid_circulators.len) + return + + for(var/obj/machinery/atmospherics/components/binary/circulator/circulators as anything in valid_circulators) + if(circulators.mode == CIRCULATOR_COLD && !cold_circ) + cold_circ = circulators + circulators.generator = src + continue + if(circulators.mode == CIRCULATOR_HOT && !hot_circ) + hot_circ = circulators + circulators.generator = src + +///Removes hot and cold circulators from the generator, nulling them. +/obj/machinery/power/thermoelectric_generator/proc/null_circulators() + if(hot_circ) + hot_circ.generator = null + hot_circ = null + if(cold_circ) + cold_circ.generator = null + cold_circ = null + +#undef TEG_EFFICIENCY diff --git a/code/modules/power/tracker.dm b/code/modules/power/tracker.dm index d39840f875e..a6118e9ac09 100644 --- a/code/modules/power/tracker.dm +++ b/code/modules/power/tracker.dm @@ -137,18 +137,16 @@ playsound(loc, 'sound/effects/glassbr3.ogg', 100, TRUE) unset_control() -/obj/machinery/power/tracker/deconstruct(disassembled = TRUE) - if(!(obj_flags & NO_DECONSTRUCTION)) - if(disassembled) - var/obj/item/solar_assembly/S = locate() in src - if(S) - S.forceMove(loc) - S.give_glass(machine_stat & BROKEN) - else - playsound(src, SFX_SHATTER, 70, TRUE) - new /obj/item/shard(src.loc) - new /obj/item/shard(src.loc) - qdel(src) +/obj/machinery/power/tracker/on_deconstruction(disassembled) + if(disassembled) + var/obj/item/solar_assembly/S = locate() in src + if(S) + S.forceMove(loc) + S.give_glass(machine_stat & BROKEN) + else + playsound(src, SFX_SHATTER, 70, TRUE) + new /obj/item/shard(src.loc) + new /obj/item/shard(src.loc) // Tracker Electronic diff --git a/code/modules/power/turbine/turbine.dm b/code/modules/power/turbine/turbine.dm index fa1a885044a..3f4d3fd8446 100644 --- a/code/modules/power/turbine/turbine.dm +++ b/code/modules/power/turbine/turbine.dm @@ -179,7 +179,7 @@ if(default_deconstruction_crowbar(tool)) return ITEM_INTERACT_SUCCESS -/obj/machinery/power/turbine/on_deconstruction() +/obj/machinery/power/turbine/on_deconstruction(disassembled) installed_part?.forceMove(loc) return ..() @@ -547,7 +547,7 @@ disconnect_from_network() SSair.stop_processing_machine(src) -/obj/machinery/power/turbine/core_rotor/on_deconstruction() +/obj/machinery/power/turbine/core_rotor/on_deconstruction(disassembled) deactivate_parts() return ..() diff --git a/code/modules/procedural_mapping/mapGenerators/lavaland.dm b/code/modules/procedural_mapping/mapGenerators/lavaland.dm index 2c8ae376a3c..5251f5e8435 100644 --- a/code/modules/procedural_mapping/mapGenerators/lavaland.dm +++ b/code/modules/procedural_mapping/mapGenerators/lavaland.dm @@ -3,10 +3,10 @@ spawnableTurfs = list(/turf/open/misc/asteroid/basalt/lava_land_surface = 100) /datum/map_generator_module/bottom_layer/lavaland_mineral - spawnableTurfs = list(/turf/closed/mineral/random/volcanic = 100) + spawnableTurfs = list(/turf/closed/mineral/volcanic = 100) /datum/map_generator_module/bottom_layer/lavaland_mineral/dense - spawnableTurfs = list(/turf/closed/mineral/random/high_chance/volcanic = 100) + spawnableTurfs = list(/turf/closed/mineral/volcanic = 100) /datum/map_generator_module/splatter_layer/lavaland_monsters spawnableTurfs = list() diff --git a/code/modules/projectiles/guns/ballistic/bows/bow_quivers.dm b/code/modules/projectiles/guns/ballistic/bows/bow_quivers.dm index 7d8669c8618..07d7cc93ce1 100644 --- a/code/modules/projectiles/guns/ballistic/bows/bow_quivers.dm +++ b/code/modules/projectiles/guns/ballistic/bows/bow_quivers.dm @@ -15,9 +15,7 @@ atom_storage.max_specific_storage = WEIGHT_CLASS_TINY atom_storage.max_slots = 40 atom_storage.max_total_storage = 100 - atom_storage.set_holdable(list( - /obj/item/ammo_casing/arrow, - )) + atom_storage.set_holdable(/obj/item/ammo_casing/arrow) /obj/item/storage/bag/quiver/PopulateContents() . = ..() diff --git a/code/modules/projectiles/guns/ballistic/shotgun.dm b/code/modules/projectiles/guns/ballistic/shotgun.dm index 3888402b2af..62b6de253ee 100644 --- a/code/modules/projectiles/guns/ballistic/shotgun.dm +++ b/code/modules/projectiles/guns/ballistic/shotgun.dm @@ -38,7 +38,7 @@ // RIOT SHOTGUN // -/obj/item/gun/ballistic/shotgun/riot //for spawn in the armory //ICON OVERRIDEN IN SKYRAT AESTHETICS - SEE MODULE +/obj/item/gun/ballistic/shotgun/riot name = "riot shotgun" desc = "A sturdy shotgun with a longer magazine and a fixed tactical stock designed for non-lethal riot control." icon_state = "riotshotgun" diff --git a/code/modules/projectiles/guns/energy.dm b/code/modules/projectiles/guns/energy.dm index 05fbb8a31de..b89c48a3fe2 100644 --- a/code/modules/projectiles/guns/energy.dm +++ b/code/modules/projectiles/guns/energy.dm @@ -123,7 +123,6 @@ ammo_type[i] = shot shot = ammo_type[select] fire_sound = shot.fire_sound - fire_sound_volume = shot.fire_sound_volume //NOVA EDIT ADDITION fire_delay = shot.delay /obj/item/gun/energy/Destroy() @@ -205,7 +204,6 @@ select = 1 var/obj/item/ammo_casing/energy/shot = ammo_type[select] fire_sound = shot.fire_sound - fire_sound_volume = shot.fire_sound_volume //NOVA EDIT ADDITION fire_delay = shot.delay if (shot.select_name && user) balloon_alert(user, "set to [shot.select_name]") diff --git a/code/modules/projectiles/guns/energy/dueling.dm b/code/modules/projectiles/guns/energy/dueling.dm index 932117abb5b..f35769e663c 100644 --- a/code/modules/projectiles/guns/energy/dueling.dm +++ b/code/modules/projectiles/guns/energy/dueling.dm @@ -370,7 +370,7 @@ . = ..() atom_storage.max_specific_storage = WEIGHT_CLASS_SMALL atom_storage.max_slots = 2 - atom_storage.set_holdable(list(/obj/item/gun/energy/dueling)) + atom_storage.set_holdable(/obj/item/gun/energy/dueling) /obj/item/storage/lockbox/dueling/update_icon_state() if(atom_storage?.locked) diff --git a/code/modules/projectiles/guns/energy/kinetic_accelerator.dm b/code/modules/projectiles/guns/energy/kinetic_accelerator.dm index 242296b4002..7ff033d7720 100644 --- a/code/modules/projectiles/guns/energy/kinetic_accelerator.dm +++ b/code/modules/projectiles/guns/energy/kinetic_accelerator.dm @@ -150,10 +150,10 @@ M.modify_projectile(K) /obj/item/gun/energy/recharge/kinetic_accelerator/cyborg - icon_state = "kineticgun" // NOVA EDIT CHANGE + icon_state = "kineticgun_b" holds_charge = TRUE unique_frequency = TRUE - max_mod_capacity = 100 // NOVA EDIT CHANGE FROM 80 - Balance due to fauna changes and no level perks applying + max_mod_capacity = 90 /obj/item/gun/energy/recharge/kinetic_accelerator/minebot trigger_guard = TRIGGER_GUARD_ALLOW_ALL diff --git a/code/modules/projectiles/projectile.dm b/code/modules/projectiles/projectile.dm index 8c456c26863..bb5c160ba90 100644 --- a/code/modules/projectiles/projectile.dm +++ b/code/modules/projectiles/projectile.dm @@ -810,9 +810,7 @@ set_angle(get_angle(src, target)) original_angle = Angle if(!nondirectional_sprite) - var/matrix/matrix = new - matrix.Turn(Angle) - transform = matrix + transform = transform.Turn(Angle) trajectory_ignore_forcemove = TRUE forceMove(starting) trajectory_ignore_forcemove = FALSE @@ -829,11 +827,9 @@ pixel_move(pixel_speed_multiplier, FALSE) //move it now! /obj/projectile/proc/set_angle(new_angle) //wrapper for overrides. - Angle = new_angle if(!nondirectional_sprite) - var/matrix/matrix = new - matrix.Turn(Angle) - transform = matrix + transform = transform.TurnTo(Angle, new_angle) + Angle = new_angle if(trajectory) trajectory.set_angle(new_angle) if(fired && hitscan && isloc(loc) && (loc != last_angle_set_hitscan_store)) @@ -845,11 +841,9 @@ /// Same as set_angle, but the reflection continues from the center of the object that reflects it instead of the side /obj/projectile/proc/set_angle_centered(new_angle) - Angle = new_angle if(!nondirectional_sprite) - var/matrix/matrix = new - matrix.Turn(Angle) - transform = matrix + transform = transform.TurnTo(Angle, new_angle) + Angle = new_angle if(trajectory) trajectory.set_angle(new_angle) @@ -927,10 +921,6 @@ if(!loc || !trajectory) return last_projectile_move = world.time - if(!nondirectional_sprite && !hitscanning) - var/matrix/matrix = new - matrix.Turn(Angle) - transform = matrix if(homing) process_homing() var/forcemoved = FALSE diff --git a/code/modules/projectiles/projectile/beams.dm b/code/modules/projectiles/projectile/beams.dm index 2a7095af0f2..f3791f174f6 100644 --- a/code/modules/projectiles/projectile/beams.dm +++ b/code/modules/projectiles/projectile/beams.dm @@ -9,7 +9,7 @@ armor_flag = LASER eyeblur = 4 SECONDS impact_effect_type = /obj/effect/temp_visual/impact_effect/red_laser - light_system = MOVABLE_LIGHT + light_system = OVERLAY_LIGHT light_range = 1 light_power = 1 light_color = COLOR_SOFT_RED diff --git a/code/modules/reagents/chemistry/equilibrium.dm b/code/modules/reagents/chemistry/equilibrium.dm index c07c349f893..4ab88b3caa6 100644 --- a/code/modules/reagents/chemistry/equilibrium.dm +++ b/code/modules/reagents/chemistry/equilibrium.dm @@ -84,6 +84,8 @@ * Don't call this unless you know what you're doing, this is an internal proc */ /datum/equilibrium/proc/check_inital_conditions() + PRIVATE_PROC(TRUE) + if(QDELETED(holder)) stack_trace("an equilibrium is missing it's holder.") return FALSE @@ -95,20 +97,20 @@ return FALSE //Make sure we have the right multipler for on_reaction() - for(var/single_reagent in reaction.required_reagents) + for(var/datum/reagent/single_reagent as anything in reaction.required_reagents) multiplier = min(multiplier, holder.get_reagent_amount(single_reagent) / reaction.required_reagents[single_reagent]) multiplier = round(multiplier, CHEMICAL_QUANTISATION_LEVEL) if(!multiplier) //we have no more or very little reagents left return FALSE //To prevent reactions outside of the pH window from starting. - if(!((holder.ph >= (reaction.optimal_ph_min - reaction.determin_ph_range)) && (holder.ph <= (reaction.optimal_ph_max + reaction.determin_ph_range)))) + if(holder.ph < (reaction.optimal_ph_min - reaction.determin_ph_range) || holder.ph > (reaction.optimal_ph_max + reaction.determin_ph_range)) return FALSE //All checks pass. cache the product ratio if(length(reaction.results)) product_ratio = 0 - for(var/product in reaction.results) + for(var/datum/reagent/product as anything in reaction.results) product_ratio += reaction.results[product] else product_ratio = 1 @@ -123,6 +125,8 @@ * otherwise, generally, don't call this directed except internally */ /datum/equilibrium/proc/check_reagent_properties() + PRIVATE_PROC(TRUE) + //Have we exploded from on_reaction or did we run out of reagents? if(QDELETED(holder.my_atom) || !holder.reagent_list.len) return FALSE @@ -150,8 +154,10 @@ * Generally an internal proc */ /datum/equilibrium/proc/calculate_yield() + PRIVATE_PROC(TRUE) + multiplier = INFINITY - for(var/reagent in reaction.required_reagents) + for(var/datum/reagent/reagent as anything in reaction.required_reagents) multiplier = min(multiplier, holder.get_reagent_amount(reagent) / reaction.required_reagents[reagent]) multiplier = round(multiplier, CHEMICAL_QUANTISATION_LEVEL) if(!multiplier) //we have no more or very little reagents left @@ -160,14 +166,14 @@ //Incase of no reagent product if(!length(reaction.results)) step_target_vol = INFINITY - for(var/reagent in reaction.required_reagents) + for(var/datum/reagent/reagent as anything in reaction.required_reagents) step_target_vol = min(step_target_vol, multiplier * reaction.required_reagents[reagent]) return TRUE //If we have reagent products step_target_vol = 0 reacted_vol = 0 //Because volumes can be lost mid reactions - for(var/product in reaction.results) + for(var/datum/reagent/product as anything in reaction.results) step_target_vol += multiplier * reaction.results[product] reacted_vol += holder.get_reagent_amount(product) target_vol = reacted_vol + step_target_vol @@ -181,6 +187,8 @@ * step_volume_added is how much product (across all products) was added for this single step */ /datum/equilibrium/proc/check_fail_states(step_volume_added) + PRIVATE_PROC(TRUE) + //Are we overheated? if(reaction.is_cold_recipe) if(holder.chem_temp < reaction.overheat_temp && reaction.overheat_temp != NO_OVERHEAT) //This is before the process - this is here so that overly_impure and overheated() share the same code location (and therefore vars) for calls. @@ -192,7 +200,7 @@ reaction.overheated(holder, src, step_volume_added) //is our product too impure? - for(var/product in reaction.results) + for(var/datum/reagent/product as anything in reaction.results) var/datum/reagent/reagent = holder.has_reagent(product) if(!reagent) //might be missing from overheat exploding continue @@ -212,6 +220,8 @@ * * seconds_per_tick - the time between the last proc in world.time */ /datum/equilibrium/proc/deal_with_time(seconds_per_tick) + PRIVATE_PROC(TRUE) + if(seconds_per_tick > 1) time_deficit += seconds_per_tick - 1 seconds_per_tick = 1 //Lets make sure reactions aren't super speedy and blow people up from a big lag spike @@ -255,24 +265,23 @@ //Begin checks //Calculate DeltapH (Deviation of pH from optimal) //Within mid range + var/acceptable_ph if (cached_ph >= reaction.optimal_ph_min && cached_ph <= reaction.optimal_ph_max) delta_ph = 1 //100% purity for this step //Lower range else if (cached_ph < reaction.optimal_ph_min) //If we're outside of the optimal lower bound - if (cached_ph < (reaction.optimal_ph_min - reaction.determin_ph_range)) //If we're outside of the deterministic bound + acceptable_ph = reaction.optimal_ph_min - reaction.determin_ph_range + if (cached_ph < acceptable_ph) //If we're outside of the deterministic bound delta_ph = 0 //0% purity else //We're in the deterministic phase - delta_ph = (((cached_ph - (reaction.optimal_ph_min - reaction.determin_ph_range)) ** reaction.ph_exponent_factor) / ((reaction.determin_ph_range ** reaction.ph_exponent_factor))) //main pH calculation + delta_ph = ((cached_ph - acceptable_ph) / reaction.determin_ph_range) ** reaction.ph_exponent_factor //Upper range else if (cached_ph > reaction.optimal_ph_max) //If we're above of the optimal lower bound - if (cached_ph > (reaction.optimal_ph_max + reaction.determin_ph_range)) //If we're outside of the deterministic bound + acceptable_ph = reaction.optimal_ph_max + reaction.determin_ph_range + if (cached_ph > acceptable_ph) //If we're outside of the deterministic bound delta_ph = 0 //0% purity else //We're in the deterministic phase - delta_ph = (((- cached_ph + (reaction.optimal_ph_max + reaction.determin_ph_range)) ** reaction.ph_exponent_factor) / (reaction.determin_ph_range ** reaction.ph_exponent_factor))//Reverse - to + to prevent math operation failures. - - //This should never proc, but it's a catch incase someone puts in incorrect values - else - stack_trace("[holder.my_atom] attempted to determine FermiChem pH for '[reaction.type]' which had an invalid pH of [cached_ph] for set recipie pH vars. It's likely the recipe vars are wrong.") + delta_ph = ((acceptable_ph - cached_ph) / reaction.determin_ph_range) ** reaction.ph_exponent_factor //Calculate DeltaT (Deviation of T from optimal) if(!reaction.is_cold_recipe) @@ -306,7 +315,7 @@ purity = delta_ph //Then adjust purity of result with beaker reagent purity. - purity *= reactant_purity(reaction) + purity *= holder.get_average_purity() //Then adjust it from the input modifier purity *= purity_modifier @@ -324,13 +333,13 @@ //Calculate how much product to make and how much reactant to remove factors.. var/required_amount + var/pH_adjust for(var/datum/reagent/requirement as anything in reaction.required_reagents) required_amount = reaction.required_reagents[requirement] if(!holder.remove_reagent(requirement, delta_chem_factor * required_amount)) to_delete = TRUE return //Apply pH changes - var/pH_adjust if(reaction.reaction_flags & REACTION_PH_VOL_CONSTANT) pH_adjust = ((delta_chem_factor * required_amount) / target_vol) * (reaction.H_ion_release * h_ion_mod) else //Default adds pH independant of volume @@ -347,7 +356,6 @@ return //Apply pH changes - var/pH_adjust if(reaction.reaction_flags & REACTION_PH_VOL_CONSTANT) pH_adjust = (step_add / target_vol) * (reaction.H_ion_release * h_ion_mod) else @@ -382,29 +390,15 @@ reaction_quality = purity //post reaction checks - if(!(check_fail_states(total_step_added))) + if(!check_fail_states(total_step_added)) to_delete = TRUE return - //end reactions faster so plumbing is faster - //length is so that plumbing is faster - but it doesn't disable competitive reactions. Basically, competitive reactions will likely reach their step target at the start, so this will disable that. We want to avoid that. But equally, we do want to full stop a holder from reacting asap so plumbing isn't waiting an tick to resolve. - if((step_add >= step_target_vol) && (length(holder.reaction_list) == 1)) + //If the volume of reagents created(total_step_added) >= volume of reagents still to be created(step_target_vol) then end + //i.e. we have created all the reagents needed for this reaction + //This is only accurate when a single reaction is present and we don't have multiple reactions where + //reaction B consumes the products formed from reaction A(which can happen in add_reagent() as it also triggers handle_reactions() which can consume the reagent just added) + //because total_step_added will be higher than the actual volume that was created leading to the reaction ending early + //and yielding less products than intended + if(total_step_added >= step_target_vol && length(holder.reaction_list) == 1) to_delete = TRUE - -/* -* Calculates the total sum normalised purity of ALL reagents in a holder -* Currently calculates it irrespective of required reagents at the start, but this should be changed if this is powergamed to required reagents -* It's not currently because overly_impure affects all reagents -*/ -/datum/equilibrium/proc/reactant_purity(datum/chemical_reaction/C) - var/list/cached_reagents = holder.reagent_list - - var/num_of_reagents = cached_reagents.len - if(!num_of_reagents)//I've never seen it get here with 0, but in case - it gets here when it blows up from overheat - stack_trace("No reactants found mid reaction for [C.type]. Beaker: [holder.my_atom]") - return 0 //we exploded and cleared reagents - but lets not kill the process - - var/cached_purity - for(var/datum/reagent/reagent as anything in cached_reagents) - cached_purity += reagent.purity - return cached_purity / num_of_reagents diff --git a/code/modules/reagents/chemistry/holder/holder.dm b/code/modules/reagents/chemistry/holder/holder.dm index 5872f5db1ae..d32cd92361b 100644 --- a/code/modules/reagents/chemistry/holder/holder.dm +++ b/code/modules/reagents/chemistry/holder/holder.dm @@ -304,29 +304,36 @@ return total_removed //this should be amount unless the loop is prematurely broken, in which case it'll be lower. It shouldn't ever go OVER amount. /** - * Removes all reagents by an amount equal to - * [amount specified] / total volume present in this holder + * Removes all reagents either proportionally(amount is the direct volume to remove) + * when proportional the total volume of all reagents removed will equal to amount + * or relatively(amount is a percentile between 0->1) when relative amount is the % + * of each reagent to be removed + * * Arguments * - * * amount - the volume of each reagent + * * amount - the amount to remove + * * relative - if TRUE amount is treated as an percentage between 0->1. If FALSE amount is the direct volume to remove */ - -/datum/reagents/proc/remove_all(amount = 1) +/datum/reagents/proc/remove_all(amount = 1, relative = FALSE) if(!total_volume) return FALSE if(!IS_FINITE(amount)) stack_trace("non finite amount passed to remove all reagents [amount]") return FALSE + if(relative && (amount < 0 || amount > 1)) + stack_trace("illegal percentage value passed to remove all reagents [amount]") + return FALSE amount = round(amount, CHEMICAL_QUANTISATION_LEVEL) if(amount <= 0) return FALSE var/list/cached_reagents = reagent_list - var/part = amount / total_volume var/total_removed_amount = 0 - + var/part = amount + if(!relative) + part /= total_volume for(var/datum/reagent/reagent as anything in cached_reagents) total_removed_amount += remove_reagent(reagent.type, reagent.volume * part) @@ -532,9 +539,14 @@ remove_reagent(reagent.type, transfer_amount) transfer_log[reagent.type] = list(REAGENT_TRANSFER_AMOUNT = transfer_amount, REAGENT_PURITY = reagent.purity) + //combat log if(transferred_by && target_atom) - target_atom.add_hiddenprint(transferred_by) //log prints so admins can figure out who touched it last. - log_combat(transferred_by, target_atom, "transferred reagents ([get_external_reagent_log_string(transfer_log)]) from [my_atom] to") + var/atom/log_target = target_atom + if(isorgan(target_atom)) + var/obj/item/organ/organ_item = target_atom + log_target = organ_item.owner ? organ_item.owner : organ_item + log_target.add_hiddenprint(transferred_by) //log prints so admins can figure out who touched it last. + log_combat(transferred_by, log_target, "transferred reagents to", my_atom, "which had [get_external_reagent_log_string(transfer_log)]") update_total() target_holder.update_total() @@ -642,7 +654,7 @@ reagent_volume = round(reagent.volume, CHEMICAL_QUANTISATION_LEVEL) //round to this many decimal places //remove very small amounts of reagents - if(!reagent_volume || (reagent_volume <= 0.05 && !is_reacting)) + if(reagent_volume <= 0 || (!is_reacting && reagent_volume < CHEMICAL_VOLUME_ROUNDING)) //end metabolization if(isliving(my_atom)) if(reagent.metabolizing) diff --git a/code/modules/reagents/chemistry/holder/reactions.dm b/code/modules/reagents/chemistry/holder/reactions.dm index e9f0bbbe433..5d0e5480e5a 100644 --- a/code/modules/reagents/chemistry/holder/reactions.dm +++ b/code/modules/reagents/chemistry/holder/reactions.dm @@ -97,8 +97,6 @@ if((selected_reaction.reaction_flags & REACTION_INSTANT) || (flags & REAGENT_HOLDER_INSTANT_REACT)) //If we have instant reactions, we process them here instant_react(selected_reaction) .++ - update_total() - continue else var/exists = FALSE for(var/datum/equilibrium/E_exist as anything in reaction_list) @@ -308,36 +306,39 @@ var/list/cached_required_reagents = selected_reaction.required_reagents var/list/cached_results = selected_reaction.results var/datum/cached_my_atom = my_atom - var/multiplier = INFINITY - for(var/reagent in cached_required_reagents) - multiplier = round(min(multiplier, get_reagent_amount(reagent) / cached_required_reagents[reagent])) - if(!multiplier)//Incase we're missing reagents - usually from on_reaction being called in an equlibrium when the results.len == 0 handlier catches a misflagged reaction + //find how much ration of products to create + var/multiplier = INFINITY + for(var/datum/reagent/requirement as anything in cached_required_reagents) + multiplier = min(multiplier, get_reagent_amount(requirement) / cached_required_reagents[requirement]) + multiplier = round(multiplier, CHEMICAL_QUANTISATION_LEVEL) + if(!multiplier)//Incase we're missing reagents - usually from on_reaction being called in an equlibrium when the results.len == 0 handler catches a misflagged reaction return FALSE - var/sum_purity = 0 - for(var/_reagent in cached_required_reagents)//this is not an object - var/datum/reagent/reagent = has_reagent(_reagent) - if (!reagent) - continue - sum_purity += reagent.purity - remove_reagent(_reagent, (multiplier * cached_required_reagents[_reagent])) - sum_purity /= cached_required_reagents.len - for(var/product in selected_reaction.results) - multiplier = max(multiplier, 1) //this shouldn't happen ... - var/yield = (cached_results[product]*multiplier)*sum_purity + //average purity to be used in scaling the yield of products formed + var/average_purity = get_average_purity() + + //remove the required reagents + for(var/datum/reagent/requirement as anything in cached_required_reagents)//this is not an object + remove_reagent(requirement, cached_required_reagents[requirement] * multiplier) + + //add the result reagents whose yield depend on the average purity + var/yield + for(var/datum/reagent/product as anything in cached_results) + yield = cached_results[product] * multiplier * average_purity SSblackbox.record_feedback("tally", "chemical_reaction", yield, product) - add_reagent(product, yield, null, chem_temp, sum_purity) + add_reagent(product, yield, null, chem_temp, average_purity) + //play sounds on the target atom var/list/seen = viewers(4, get_turf(my_atom)) var/iconhtml = icon2html(cached_my_atom, seen) if(cached_my_atom) if(!ismob(cached_my_atom)) // No bubbling mobs if(selected_reaction.mix_sound) playsound(get_turf(cached_my_atom), selected_reaction.mix_sound, 80, TRUE) - my_atom.audible_message(span_notice("[iconhtml] [selected_reaction.mix_message]")) + //use slime extract if(istype(cached_my_atom, /obj/item/slime_extract)) var/obj/item/slime_extract/extract = my_atom extract.extract_uses-- @@ -353,4 +354,5 @@ my_turf.pollute_turf(selected_reaction.pollutant_type, selected_reaction.pollutant_amount * multiplier) //NOVA EDIT END + //finish the reaction selected_reaction.on_reaction(src, null, multiplier) diff --git a/code/modules/reagents/chemistry/machinery/chem_dispenser.dm b/code/modules/reagents/chemistry/machinery/chem_dispenser.dm index 2559379c94c..d2e5fdaea29 100644 --- a/code/modules/reagents/chemistry/machinery/chem_dispenser.dm +++ b/code/modules/reagents/chemistry/machinery/chem_dispenser.dm @@ -303,11 +303,11 @@ beaker_data["maxVolume"] = beaker.volume beaker_data["transferAmounts"] = beaker.possible_transfer_amounts beaker_data["pH"] = round(beaker.reagents.ph, 0.01) - beaker_data["currentVolume"] = round(beaker.reagents.total_volume, 0.01) + beaker_data["currentVolume"] = round(beaker.reagents.total_volume, CHEMICAL_VOLUME_ROUNDING) var/list/beakerContents = list() if(length(beaker.reagents.reagent_list)) for(var/datum/reagent/reagent in beaker.reagents.reagent_list) - beakerContents += list(list("name" = reagent.name, "volume" = round(reagent.volume, 0.01))) // list in a list because Byond merges the first list... + beakerContents += list(list("name" = reagent.name, "volume" = round(reagent.volume, CHEMICAL_VOLUME_ROUNDING))) // list in a list because Byond merges the first list... beaker_data["contents"] = beakerContents .["beaker"] = beaker_data @@ -552,7 +552,7 @@ update_appearance() return TRUE -/obj/machinery/chem_dispenser/on_deconstruction() +/obj/machinery/chem_dispenser/on_deconstruction(disassembled) cell = null if(beaker) beaker.forceMove(drop_location()) @@ -781,7 +781,7 @@ /obj/machinery/chem_dispenser/mutagensaltpeter name = "botanical chemical dispenser" desc = "Creates and dispenses chemicals useful for botany." - obj_flags = /obj::obj_flags | NO_DECONSTRUCTION + obj_flags = parent_type::obj_flags | NO_DECONSTRUCTION circuit = /obj/item/circuitboard/machine/chem_dispenser/mutagensaltpeter /// The default list of dispensable reagents available in the mutagensaltpeter chem dispenser diff --git a/code/modules/reagents/chemistry/machinery/chem_heater.dm b/code/modules/reagents/chemistry/machinery/chem_heater.dm index b5a43adb4cb..a07fd289f07 100644 --- a/code/modules/reagents/chemistry/machinery/chem_heater.dm +++ b/code/modules/reagents/chemistry/machinery/chem_heater.dm @@ -25,7 +25,7 @@ create_reagents(200, NO_REACT) register_context() -/obj/machinery/chem_heater/on_deconstruction() +/obj/machinery/chem_heater/on_deconstruction(disassembled) beaker?.forceMove(drop_location()) /obj/machinery/chem_heater/Destroy() @@ -34,12 +34,31 @@ QDEL_NULL(beaker) return ..() -/obj/machinery/chem_heater/Exited(atom/movable/gone, direction) - . = ..() - if(gone == beaker) - UnregisterSignal(beaker.reagents, COMSIG_REAGENTS_REACTION_STEP) - beaker = null - update_appearance() + +/obj/machinery/chem_heater/add_context(atom/source, list/context, obj/item/held_item, mob/user) + if(isnull(held_item) || (held_item.item_flags & ABSTRACT) || (held_item.flags_1 & HOLOGRAM_1)) + return NONE + + if(!QDELETED(beaker)) + if(istype(held_item, /obj/item/reagent_containers/dropper) || istype(held_item, /obj/item/reagent_containers/syringe)) + context[SCREENTIP_CONTEXT_LMB] = "Inject" + return CONTEXTUAL_SCREENTIP_SET + if(is_reagent_container(held_item) && held_item.is_open_container()) + context[SCREENTIP_CONTEXT_LMB] = "Replace beaker" + return CONTEXTUAL_SCREENTIP_SET + else if(is_reagent_container(held_item) && held_item.is_open_container()) + context[SCREENTIP_CONTEXT_LMB] = "Insert beaker" + return CONTEXTUAL_SCREENTIP_SET + + if(held_item.tool_behaviour == TOOL_SCREWDRIVER) + context[SCREENTIP_CONTEXT_LMB] = "Open panel" + return CONTEXTUAL_SCREENTIP_SET + else if(panel_open && held_item.tool_behaviour == TOOL_CROWBAR) + context[SCREENTIP_CONTEXT_LMB] = "Deconstruct" + return CONTEXTUAL_SCREENTIP_SET + + return NONE + /obj/machinery/chem_heater/update_icon_state() icon_state = "[base_icon_state][beaker ? 1 : 0]b" @@ -54,6 +73,13 @@ replace_beaker(user) return SECONDARY_ATTACK_CANCEL_ATTACK_CHAIN +/obj/machinery/chem_heater/Exited(atom/movable/gone, direction) + . = ..() + if(gone == beaker) + UnregisterSignal(beaker.reagents, COMSIG_REAGENTS_REACTION_STEP) + beaker = null + update_appearance() + /obj/machinery/chem_heater/attack_robot_secondary(mob/user, list/modifiers) return attack_hand_secondary(user, modifiers) @@ -116,30 +142,6 @@ for(var/datum/tgui/ui in src.open_uis) ui.send_update() -/obj/machinery/chem_heater/add_context(atom/source, list/context, obj/item/held_item, mob/user) - if(isnull(held_item) || (held_item.item_flags & ABSTRACT) || (held_item.flags_1 & HOLOGRAM_1)) - return NONE - - if(!QDELETED(beaker)) - if(istype(held_item, /obj/item/reagent_containers/dropper) || istype(held_item, /obj/item/reagent_containers/syringe)) - context[SCREENTIP_CONTEXT_LMB] = "Inject" - return CONTEXTUAL_SCREENTIP_SET - if(is_reagent_container(held_item) && held_item.is_open_container()) - context[SCREENTIP_CONTEXT_LMB] = "Replace beaker" - return CONTEXTUAL_SCREENTIP_SET - else if(is_reagent_container(held_item) && held_item.is_open_container()) - context[SCREENTIP_CONTEXT_LMB] = "Insert beaker" - return CONTEXTUAL_SCREENTIP_SET - - if(held_item.tool_behaviour == TOOL_SCREWDRIVER) - context[SCREENTIP_CONTEXT_LMB] = "Open panel" - return CONTEXTUAL_SCREENTIP_SET - else if(panel_open && held_item.tool_behaviour == TOOL_CROWBAR) - context[SCREENTIP_CONTEXT_LMB] = "Deconstruct" - return CONTEXTUAL_SCREENTIP_SET - - return NONE - /obj/machinery/chem_heater/examine(mob/user) . = ..() if(in_range(user, src) || isobserver(user)) @@ -220,13 +222,12 @@ if(!QDELETED(beaker)) beaker_data = list() beaker_data["maxVolume"] = beaker.volume - beaker_data["transferAmounts"] = beaker.possible_transfer_amounts beaker_data["pH"] = round(beaker.reagents.ph, 0.01) - beaker_data["currentVolume"] = round(beaker.reagents.total_volume, 0.01) + beaker_data["currentVolume"] = round(beaker.reagents.total_volume, CHEMICAL_VOLUME_ROUNDING) var/list/beakerContents = list() if(length(beaker.reagents.reagent_list)) for(var/datum/reagent/reagent in beaker.reagents.reagent_list) - beakerContents += list(list("name" = reagent.name, "volume" = round(reagent.volume, 0.01))) // list in a list because Byond merges the first list... + beakerContents += list(list("name" = reagent.name, "volume" = round(reagent.volume, CHEMICAL_VOLUME_ROUNDING))) // list in a list because Byond merges the first list... beaker_data["contents"] = beakerContents chem_temp = beaker.reagents.chem_temp .["beaker"] = beaker_data @@ -234,15 +235,13 @@ var/list/active_reactions = list() var/flashing = DISABLE_FLASHING //for use with alertAfter - since there is no alertBefore, I set the after to 0 if true, or to the max value if false - for(var/_reaction in beaker?.reagents.reaction_list) - var/datum/equilibrium/equilibrium = _reaction + for(var/datum/equilibrium/equilibrium as anything in beaker?.reagents.reaction_list) if(!equilibrium.reaction.results)//Incase of no result reactions continue - var/_reagent = equilibrium.reaction.results[1] - var/datum/reagent/reagent = beaker?.reagents.has_reagent(_reagent) //Reactions are named after their primary products + var/datum/reagents/beaker_reagents = beaker.reagents + var/datum/reagent/reagent = beaker_reagents.has_reagent(equilibrium.reaction.results[1]) //Reactions are named after their primary products if(!reagent) continue - var/datum/reagents/beaker_reagents = beaker.reagents //check for danger levels primirarly overheating var/overheat = FALSE diff --git a/code/modules/reagents/chemistry/machinery/chem_mass_spec.dm b/code/modules/reagents/chemistry/machinery/chem_mass_spec.dm index 90de91a6aaf..c871fa47110 100644 --- a/code/modules/reagents/chemistry/machinery/chem_mass_spec.dm +++ b/code/modules/reagents/chemistry/machinery/chem_mass_spec.dm @@ -58,14 +58,13 @@ This will not clean any inverted reagents. Inverted reagents will still be corre for(var/datum/stock_part/micro_laser/laser in component_parts) cms_coefficient /= laser.tier -/obj/machinery/chem_mass_spec/deconstruct(disassembled) +/obj/machinery/chem_mass_spec/on_deconstruction(disassembled) if(beaker1) beaker1.forceMove(drop_location()) beaker1 = null if(beaker2) beaker2.forceMove(drop_location()) beaker2 = null - . = ..() /obj/machinery/chem_mass_spec/update_overlays() . = ..() diff --git a/code/modules/reagents/chemistry/machinery/chem_master.dm b/code/modules/reagents/chemistry/machinery/chem_master.dm index b263baefb82..c07b62d732c 100644 --- a/code/modules/reagents/chemistry/machinery/chem_master.dm +++ b/code/modules/reagents/chemistry/machinery/chem_master.dm @@ -59,7 +59,7 @@ QDEL_NULL(beaker) return ..() -/obj/machinery/chem_master/on_deconstruction() +/obj/machinery/chem_master/on_deconstruction(disassembled) replace_beaker() return ..() diff --git a/code/modules/reagents/chemistry/machinery/chem_recipe_debug.dm b/code/modules/reagents/chemistry/machinery/chem_recipe_debug.dm index b5f2d31dfa5..9d81188fb40 100644 --- a/code/modules/reagents/chemistry/machinery/chem_recipe_debug.dm +++ b/code/modules/reagents/chemistry/machinery/chem_recipe_debug.dm @@ -2,238 +2,277 @@ * A debug chem tester that will process through all recipies automatically and try to react them. * Highlights low purity reactions and and reactions that don't happen */ + +///don't alter the temperatrue of the reaction +#define USE_REACTION_TEMPERATURE 0 +///force a user specified value for temperature on the reaction +#define USE_USER_TEMPERATURE 1 +///force the minimum required temperature for the reaction to start on the reaction +#define USE_MINIMUM_TEMPERATURE 2 +///force the optimal temperature for the reaction +#define USE_OPTIMAL_TEMPERATURE 3 +///force the overheat temperature for the reaction. At this point reagents start to decrease +#define USE_OVERHEAT_TEMPERATURE 4 + +///Play the next reaction i.e. increment current_reaction_index +#define PLAY_NEXT_REACTION 0 +///Play the previous reaction i.e. decrement current_reaction_index +#define PLAY_PREVIOUS_REACTION 1 +///Pick a reaction at random i.e. user decides via input list what the value of current_reaction_index should be +#define PLAY_USER_REACTION 2 + +///Maximum volume of reagents this machine & its required container can hold +#define MAXIMUM_HOLDER_VOLUME 9000 + /obj/machinery/chem_recipe_debug name = "chemical reaction tester" - density = TRUE icon = 'icons/obj/medical/chemical.dmi' icon_state = "HPLC_debug" + density = TRUE idle_power_usage = BASE_MACHINE_IDLE_CONSUMPTION * 0.4 resistance_flags = FIRE_PROOF | ACID_PROOF | INDESTRUCTIBLE - ///List of every reaction in the game kept locally for easy access - var/list/cached_reactions = list() - ///What index in the cached_reactions we're in - var/index = 1 - ///If the machine is currently processing through the list - var/processing = FALSE - ///Final output that highlights all of the reactions with inoptimal purity/voolume at base - var/problem_string - ///Final output that highlights all of the reactions with inoptimal purity/voolume at base - var/impure_string - ///The count of reactions that resolve between 1 - 0.9 purity - var/minorImpurity - ///The count of reactions that resolve below 0.9 purity - var/majorImpurity - ///If we failed to react this current chem so use a lower temp - all reactions only - var/failed = 0 - ///If we're forcing optimal conditions - var/should_force_temp = FALSE - var/should_force_ph = FALSE - ///Forced values - var/force_temp = 300 - var/force_ph = 7 - ///Multiplier of product - var/vol_multiplier = 20 - ///If we're reacting - var/react = FALSE - ///Number of delta times taken to react - var/react_time = 0 - ///IF we're doing EVERY reaction - var/process_all = FALSE - ///The name - var/list/reaction_names = list() - ///If it's started - var/reaction_stated = FALSE - ///If we spawn a beaker at the end of a reaction or not - var/beaker_spawn = FALSE - ///If we force min temp on reaction setup - var/min_temp = FALSE - ///The recipe we're editing - var/datum/chemical_reaction/edit_recipe - -///Create reagents datum + + ///Temperature to be imposed on the reaction + var/forced_temp = DEFAULT_REAGENT_TEMPERATURE + ///The mode for setting reaction temps. see temp defines + var/temp_mode = USE_REACTION_TEMPERATURE + ///The ph to be imposed on the reaction + var/forced_ph = CHEMICAL_NORMAL_PH + ///if TRUE will use forced_ph else don't alter the ph of the reaction + var/use_forced_ph = FALSE + ///The purity of all reagents to be imposed on the reaction + var/forced_purity = 1.0 + ///If TRUE will use forced_purity else don't alter the purity of the reaction + var/use_forced_purity = FALSE + ///The multiplier to be applied on the selected reaction required reagents to start the reaction + var/volume_multiplier = 1 + + ///Cached copy all reactions mapped with their name + var/static/list/all_reaction_list + ///The list of reactions to test + var/list/datum/chemical_reaction/reactions_to_test = list() + ///The index in reactions_to_test list which points to the current reaction under test + var/current_reaction_index = 0 + ///Decides which reaction to play in the reactions_to_test list see Play defines + var/current_reaction_mode = PLAY_NEXT_REACTION + ///The current reaction we are editing + var/datum/chemical_reaction/edit_reaction + ///The current var of the reaction we are editing + var/edit_var = "Required Temp" + + ///The target reagents to we are working with. can vary if an reaction requires a specific container + var/datum/reagents/target_reagents + ///The beaker inside this machine, if null will create a new one + var/obj/item/reagent_containers/cup/beaker/bluespace/beaker + ///The default reagent container required for the selected test reaction if any + var/obj/item/reagent_containers/required_container + /obj/machinery/chem_recipe_debug/Initialize(mapload) . = ..() - create_reagents(9000)//I want to make sure everything fits - end_processing() -///Enable the machine -/obj/machinery/chem_recipe_debug/attackby(obj/item/I, mob/user, params) + create_reagents(MAXIMUM_HOLDER_VOLUME) + target_reagents = reagents + RegisterSignal(reagents, COMSIG_REAGENTS_REACTION_STEP, TYPE_PROC_REF(/obj/machinery/chem_recipe_debug, on_reaction_step)) + register_context() + + if(isnull(all_reaction_list)) + all_reaction_list = list() + for(var/datum/reagent/reagent as anything in GLOB.chemical_reactions_list_reactant_index) + for(var/datum/chemical_reaction/reaction as anything in GLOB.chemical_reactions_list_reactant_index[reagent]) + all_reaction_list[extract_reaction_name(reaction)] = reaction + +/obj/machinery/chem_recipe_debug/Destroy() + reactions_to_test.Cut() + target_reagents = null + edit_reaction = null + QDEL_NULL(beaker) + QDEL_NULL(required_container) + UnregisterSignal(reagents, COMSIG_REAGENTS_REACTION_STEP) . = ..() - ui_interact(usr) -///Enable the machine -/obj/machinery/chem_recipe_debug/AltClick(mob/living/user) +/obj/machinery/chem_recipe_debug/add_context(atom/source, list/context, obj/item/held_item, mob/user) . = ..() - if(processing) - say("currently processing reaction [index]: [cached_reactions[index]] of [cached_reactions.len]") - return - process_all = TRUE - say("Starting processing") - setup_reactions() - begin_processing() - -///Resets the index, and creates the cached_reaction list from all possible reactions -/obj/machinery/chem_recipe_debug/proc/setup_reactions() - cached_reactions = list() - if(process_all) - for(var/reaction in GLOB.chemical_reactions_list_reactant_index) - if(is_type_in_list(GLOB.chemical_reactions_list_reactant_index[reaction], cached_reactions)) - continue - cached_reactions += GLOB.chemical_reactions_list_reactant_index[reaction] + if(isnull(held_item) || (held_item.item_flags & ABSTRACT) || (held_item.flags_1 & HOLOGRAM_1)) + return NONE + + if(!QDELETED(beaker)) + if(is_reagent_container(held_item) && held_item.is_open_container()) + context[SCREENTIP_CONTEXT_LMB] = "Replace beaker" + return CONTEXTUAL_SCREENTIP_SET + else if(is_reagent_container(held_item) && held_item.is_open_container()) + context[SCREENTIP_CONTEXT_LMB] = "Insert beaker" + return CONTEXTUAL_SCREENTIP_SET + +/obj/machinery/chem_recipe_debug/examine(mob/user) + . = ..() + if(!QDELETED(beaker)) + . += span_notice("A beaker of [beaker.reagents.maximum_volume]u capacity is inside.") else - cached_reactions = reaction_names - reagents.clear_reagents() - index = 1 - processing = TRUE + . += span_notice("No beaker is present. A new will be created when ejecting.") + +/obj/machinery/chem_recipe_debug/Exited(atom/movable/gone, direction) + . = ..() + if(gone == beaker) + beaker = null + +/obj/machinery/chem_recipe_debug/attackby(obj/item/held_item, mob/user, params) + if((held_item.item_flags & ABSTRACT) || (held_item.flags_1 & HOLOGRAM_1)) + return ..() + + if(is_reagent_container(held_item) && held_item.is_open_container()) + . = TRUE + if(!QDELETED(beaker)) + try_put_in_hand(beaker, user) + if(!user.transferItemToLoc(held_item, src)) + return + beaker = held_item + +/** + * Extracts a human readable name for this chemical reaction + * Arguments + * + * * datum/chemical_reaction/reaction - the reaction who's name we have to decode + */ +/obj/machinery/chem_recipe_debug/proc/extract_reaction_name(datum/chemical_reaction/reaction) + PRIVATE_PROC(TRUE) + SHOULD_BE_PURE(TRUE) + + var/reaction_name = "[reaction]" + reaction_name = copytext(reaction_name, findlasttext(reaction_name, "/") + 1) + reaction_name = replacetext(reaction_name, "_", " ") + return full_capitalize(reaction_name) + +///Retrives the target temperature to be imposed on the test reaction based on temp_mode +/obj/machinery/chem_recipe_debug/proc/decode_target_temperature() + PRIVATE_PROC(TRUE) + SHOULD_BE_PURE(TRUE) + + if(temp_mode == USE_REACTION_TEMPERATURE) + return null //simply means don't alter the reaction temperature + else if(temp_mode == USE_USER_TEMPERATURE) + return forced_temp + else + var/datum/chemical_reaction/test_reaction = reactions_to_test[current_reaction_index || 1] + switch(temp_mode) + if(USE_MINIMUM_TEMPERATURE) + return test_reaction.required_temp + (test_reaction.is_cold_recipe ? - 20 : 20) //20k is good enough offset to account for reaction rate rounding + if(USE_OPTIMAL_TEMPERATURE) + return test_reaction.optimal_temp + if(USE_OVERHEAT_TEMPERATURE) + return test_reaction.overheat_temp + + +/** + * Adjusts the temperature, ph & purity of the holder + * Arguments + * + * * seconds_per_tick - passed from on_reaction_step or process + */ +/obj/machinery/chem_recipe_debug/proc/adjust_environment(seconds_per_tick) + PRIVATE_PROC(TRUE) + + var/target_temperature = decode_target_temperature() + if(!isnull(target_temperature)) + target_reagents.adjust_thermal_energy((target_temperature - target_reagents.chem_temp) * 0.4 * seconds_per_tick * SPECIFIC_HEAT_DEFAULT * target_reagents.total_volume) + + if(use_forced_purity) + target_reagents.set_all_reagents_purity(forced_purity) + + if(use_forced_ph) + for(var/datum/reagent/reagent as anything in target_reagents.reagent_list) + reagent.ph = clamp(forced_ph, CHEMICAL_MIN_PH, CHEMICAL_MAX_PH) + + target_reagents.update_total() -/* -* The main loop that sets up, creates and displays results from a reaction -* warning: this code is a hot mess -*/ /obj/machinery/chem_recipe_debug/process(seconds_per_tick) - if(processing == FALSE) - setup_reactions() - if(should_force_ph) - reagents.ph = force_ph - if(should_force_temp) - reagents.chem_temp = force_temp - if(reagents.is_reacting == TRUE) - react_time += seconds_per_tick - return - if(reaction_stated == TRUE) - reaction_stated = FALSE - relay_ended_reaction() - if(index > cached_reactions.len) - relay_all_reactions() + if(!target_reagents.is_reacting) + adjust_environment(seconds_per_tick) + target_reagents.handle_reactions() + + //send updates to ui. faster than SStgui.update_uis + for(var/datum/tgui/ui in src.open_uis) + ui.send_update() + +/obj/machinery/chem_recipe_debug/proc/on_reaction_step(datum/reagents/holder, num_reactions, seconds_per_tick) + SIGNAL_HANDLER + + adjust_environment(seconds_per_tick) + + //send updates to ui. faster than SStgui.update_uis + for(var/datum/tgui/ui in src.open_uis) + ui.send_update() + +/** + * Decodes the ui reaction var into it's original name + * Arguments + * + * * variable - the name of the variable as seen in the UI + */ +/obj/machinery/chem_recipe_debug/proc/decode_var(variable) + PRIVATE_PROC(TRUE) + + . = null + + if(isnull(edit_reaction)) return - setup_reaction() - reaction_stated = TRUE - -/obj/machinery/chem_recipe_debug/proc/relay_all_reactions() - say("Completed testing, missing reactions products (may have exploded) are:") - say("[problem_string]", sanitize=FALSE) - say("Problem with results are:") - say("[impure_string]", sanitize=FALSE) - say("Reactions with minor impurity: [minorImpurity], reactions with major impurity: [majorImpurity]") - processing = FALSE - problem_string = null - impure_string = null - minorImpurity = null - majorImpurity = null - end_processing() - -/obj/machinery/chem_recipe_debug/proc/relay_ended_reaction() - if(reagents.reagent_list) - var/cached_purity - say("Reaction completed for [cached_reactions[index]] final temperature = [reagents.chem_temp], ph = [reagents.ph], time taken = [react_time]s.") - var/datum/chemical_reaction/reaction = cached_reactions[index] - for(var/reagent_type in reaction.results) - var/datum/reagent/reagent = reagents.has_reagent(reagent_type) - if(!reagent) - say(span_warning("Unable to find product [reagent_type] in holder after reaction! reagents found are:")) - for(var/other_reagent in reagents.reagent_list) - say("[other_reagent]") - var/obj/item/reagent_containers/cup/beaker/bluespace/beaker = new /obj/item/reagent_containers/cup/beaker/bluespace(loc) - reagents.trans_to(beaker) - beaker.name = "[cached_reactions[index]] failed" - if(!failed) - problem_string += "[cached_reactions[index]] [span_warning("Unable to find product [reagent_type] in holder after reaction! Trying alternative setup. index:[index]")]\n" - failed++ - return - say("Reaction has a product [reagent_type] [reagent.volume]u purity of [reagent.purity]") - if(reagent.purity < 0.9) - impure_string += "Reaction [cached_reactions[index]] has a product [reagent_type] [reagent.volume]u [span_boldwarning("purity of [reagent.purity]")] index:[index]\n" - majorImpurity++ - else if (reagent.purity < 1) - impure_string += "Reaction [cached_reactions[index]] has a product [reagent_type] [reagent.volume]u [span_warning("purity of [reagent.purity]")] index:[index]\n" - minorImpurity++ - if(reagent.volume < reaction.results[reagent_type]) - impure_string += "Reaction [cached_reactions[index]] has a product [reagent_type] [span_warning("[reagent.volume]u")] purity of [reagent.purity] index:[index]\n" - cached_purity = reagent.purity - if(beaker_spawn && reagents.total_volume) - var/obj/item/reagent_containers/cup/beaker/bluespace/beaker = new /obj/item/reagent_containers/cup/beaker/bluespace(loc) - reagents.trans_to(beaker) - beaker.name = "[cached_reactions[index]] purity: [cached_purity]" - reagents.clear_reagents() - reagents.chem_temp = 300 - index++ - failed = 0 - else - say("No reagents left in beaker!") - index++ - -/obj/machinery/chem_recipe_debug/proc/setup_reaction() - react_time = 0 - if(!length(cached_reactions)) - return FALSE - var/datum/chemical_reaction/reaction = cached_reactions[index] - if(!reaction) - say("Unable to find reaction on index: [index]") - say("Using forced temperatures.") - if(reaction.reaction_flags & REACTION_INSTANT) - say("This reaction is instant") - for(var/reagent_type in reaction.required_reagents) - reagents.add_reagent(reagent_type, reaction.required_reagents[reagent_type]*vol_multiplier) - for(var/catalyst_type in reaction.required_catalysts) - reagents.add_reagent(catalyst_type, reaction.required_catalysts[catalyst_type]) - if(should_force_temp && !min_temp) - say("Using forced temperatures.") - reagents.chem_temp = force_temp ? force_temp : reaction.optimal_temp - if(should_force_ph) - say("Using forced pH.") - reagents.ph = force_ph ? force_ph : (reaction.optimal_ph_max + reaction.optimal_ph_min)/2 - if(failed == 0 && !should_force_temp) - reagents.chem_temp = reaction.optimal_temp - if(failed == 1 && !should_force_temp) - reagents.chem_temp = reaction.required_temp+25 - failed++ - if(min_temp) - say("Overriding temperature to required temp.") - reagents.chem_temp = reaction.is_cold_recipe ? reaction.required_temp - 1 : reaction.required_temp + 1 - say("Reacting [span_nicegreen("[cached_reactions[index]]")] starting pH: [reagents.ph] index [index] of [cached_reactions.len]") + + var/static/list/ui_to_var + if(isnull(ui_to_var)) + ui_to_var = list( + "Required Temp" = "required_temp", + "Optimal Temp" = "optimal_temp", + "Overheat Temp" = "overheat_temp", + "Optimal Min Ph" = "optimal_ph_min", + "Optimal Max Ph" = "optimal_ph_max", + "Ph Range" = "determin_ph_range", + "Temp Exp Factor" = "temp_exponent_factor", + "Ph Exp Factor" = "ph_exponent_factor", + "Thermic Constant" = "thermic_constant", + "H Ion Release" = "H_ion_release", + "Rate Up Limit" = "rate_up_lim", + "Purity Min" = "purity_min", + ) + + var/value = ui_to_var[variable] + if(!isnull(value)) + . = value + +/obj/machinery/chem_recipe_debug/ui_interact(mob/user, datum/tgui/ui) + ui = SStgui.try_update_ui(user, src, ui) + if(!ui) + ui = new(user, src, "ChemRecipeDebug", name) + ui.open() /obj/machinery/chem_recipe_debug/ui_data(mob/user) - var/data = list() - data["targetTemp"] = force_temp - data["targatpH"] = force_ph - data["isActive"] = reagents.is_reacting - data["forcepH"] = should_force_ph - data["forceTemp"] = should_force_temp - data["targetVol"] = vol_multiplier - data["processAll"] = process_all - data["currentTemp"] = reagents.chem_temp - data["currentpH"] = round(reagents.ph, 0.01) - data["processing"] = processing - data["index"] = index - data["endIndex"] = cached_reactions.len - data["beakerSpawn"] = beaker_spawn - data["minTemp"] = min_temp - data["editRecipe"] = null - - var/list/beaker_contents = list() - for(var/datum/reagent/reagent as anything in reagents.reagent_list) - beaker_contents.len++ - beaker_contents[length(beaker_contents)] = list("name" = reagent.name, "volume" = round(reagent.volume, 0.01), "purity" = round(reagent.purity)) - data["chamberContents"] = beaker_contents - - var/list/queued_reactions = list() - for(var/datum/chemical_reaction/reaction as anything in reaction_names) - var/datum/reagent/reagent = find_reagent_object_from_type(reaction.results[1]) - queued_reactions.len++ - queued_reactions[length(queued_reactions)] = list("name" = reagent.name) - data["queuedReactions"] = queued_reactions + . = list() + + .["forced_temp"] = forced_temp + .["temp_mode"] = temp_mode + .["forced_ph"] = forced_ph + .["use_forced_ph"] = use_forced_ph + .["forced_purity"] = forced_purity + .["use_forced_purity"] = use_forced_purity + .["volume_multiplier"] = volume_multiplier + + var/datum/chemical_reaction/current_reaction = null + if(reactions_to_test.len) + current_reaction = reactions_to_test[current_reaction_index || 1] + if(isnull(current_reaction)) + .["current_reaction_name"] = "N/A" + else + .["current_reaction_name"] = extract_reaction_name(current_reaction) + .["current_reaction_mode"] = current_reaction_mode var/list/active_reactions = list() var/flashing = DISABLE_FLASHING //for use with alertAfter - since there is no alertBefore, I set the after to 0 if true, or to the max value if false - for(var/datum/equilibrium/equilibrium as anything in reagents.reaction_list) - if(!length(reagents.reaction_list))//I'm not sure why when it explodes it causes the gui to fail (it's missing danger (?) ) - stack_trace("Chem debug managed to find an equilibrium in a location where there should be none (skipping this entry and continuing). This is usually because of an ill timed explosion.") - continue + for(var/datum/equilibrium/equilibrium as anything in target_reagents.reaction_list) if(!equilibrium.reaction.results)//Incase of no result reactions continue - var/datum/reagent/reagent = reagents.has_reagent(equilibrium.reaction.results[1]) //Reactions are named after their primary products + var/datum/reagent/reagent = target_reagents.has_reagent(equilibrium.reaction.results[1]) //Reactions are named after their primary products if(!reagent) continue + + //check for danger levels primirarly overheating var/overheat = FALSE var/danger = FALSE var/purity_alert = 2 //same as flashing @@ -241,16 +280,32 @@ purity_alert = ENABLE_FLASHING//Because 0 is seen as null danger = TRUE if(flashing != ENABLE_FLASHING)//So that the pH meter flashes for ANY reactions out of optimal - if(equilibrium.reaction.optimal_ph_min > reagents.ph || equilibrium.reaction.optimal_ph_max < reagents.ph) + if(equilibrium.reaction.optimal_ph_min > target_reagents.ph || equilibrium.reaction.optimal_ph_max < target_reagents.ph) flashing = ENABLE_FLASHING if(equilibrium.reaction.is_cold_recipe) - if(equilibrium.reaction.overheat_temp > reagents.chem_temp && equilibrium.reaction.overheat_temp != NO_OVERHEAT) + if(equilibrium.reaction.overheat_temp > target_reagents.chem_temp && equilibrium.reaction.overheat_temp != NO_OVERHEAT) danger = TRUE overheat = TRUE else - if(equilibrium.reaction.overheat_temp < reagents.chem_temp) + if(equilibrium.reaction.overheat_temp < target_reagents.chem_temp) danger = TRUE overheat = TRUE + + //create ui data + active_reactions += list(list( + "name" = reagent.name, + "danger" = danger, + "overheat" = overheat, + "purityAlert" = purity_alert, + "quality" = equilibrium.reaction_quality, + "inverse" = reagent.inverse_chem_val, + "minPure" = equilibrium.reaction.purity_min, + "reactedVol" = equilibrium.reacted_vol, + "targetVol" = round(equilibrium.target_vol, 1) + ) + ) + + //additional data for competitive reactions if(equilibrium.reaction.reaction_flags & REACTION_COMPETITIVE) //We have a compeitive reaction - concatenate the results for the different reactions for(var/entry in active_reactions) if(entry["name"] == reagent.name) //If we have multiple reaction methods for the same result - combine them @@ -258,149 +313,373 @@ entry["targetVol"] = round(equilibrium.target_vol, 1)//Use the first result reagent to name the reaction detected entry["quality"] = (entry["quality"] + equilibrium.reaction_quality) /2 continue - active_reactions.len++ - active_reactions[length(active_reactions)] = list("name" = reagent.name, "danger" = danger, "purityAlert" = purity_alert, "quality" = equilibrium.reaction_quality, "overheat" = overheat, "inverse" = reagent.inverse_chem_val, "minPure" = equilibrium.reaction.purity_min, "reactedVol" = equilibrium.reacted_vol, "targetVol" = round(equilibrium.target_vol, 1))//Use the first result reagent to name the reaction detected - data["activeReactions"] = active_reactions - data["isFlashing"] = flashing - - if(edit_recipe) - data["editRecipeName"] = edit_recipe.type - data["editRecipeCold"] = edit_recipe.is_cold_recipe - data["editRecipe"] = list( - list("name" = "required_temp" , "var" = edit_recipe.required_temp), - list("name" = "optimal_temp" , "var" = edit_recipe.optimal_temp), - list("name" = "overheat_temp" , "var" = edit_recipe.overheat_temp), - list("name" = "optimal_ph_min" , "var" = edit_recipe.optimal_ph_min), - list("name" = "optimal_ph_max" , "var" = edit_recipe.optimal_ph_max), - list("name" = "determin_ph_range" , "var" = edit_recipe.determin_ph_range), - list("name" = "temp_exponent_factor" , "var" = edit_recipe.temp_exponent_factor), - list("name" = "ph_exponent_factor" , "var" = edit_recipe.ph_exponent_factor), - list("name" = "thermic_constant" , "var" = edit_recipe.thermic_constant), - list("name" = "H_ion_release" , "var" = edit_recipe.H_ion_release), - list("name" = "rate_up_lim" , "var" = edit_recipe.rate_up_lim), - list("name" = "purity_min" , "var" = edit_recipe.purity_min), + .["activeReactions"] = active_reactions + + .["isFlashing"] = flashing + .["isReacting"] = target_reagents.is_reacting + + var/list/reaction_data = null + if(!isnull(edit_reaction)) + var/reaction_name + if(length(edit_reaction.results)) //soups can have no results + var/datum/reagent/reagent = edit_reaction.results[1] + reaction_name = initial(reagent.name) + else + reaction_name = "[edit_reaction]" + reaction_data = list( + "name" = reaction_name, + "editVar" = edit_var, + "editValue" = edit_reaction.vars[decode_var(edit_var)] ) + .["editReaction"] = reaction_data - return data + var/list/beaker_data = null + if(target_reagents.reagent_list.len) + beaker_data = list() + beaker_data["maxVolume"] = target_reagents.maximum_volume + beaker_data["pH"] = round(target_reagents.ph, 0.01) + beaker_data["purity"] = round(target_reagents.get_average_purity(), 0.01) + beaker_data["currentVolume"] = round(target_reagents.total_volume, CHEMICAL_VOLUME_ROUNDING) + beaker_data["currentTemp"] = round(target_reagents.chem_temp, 1) + beaker_data["purity"] = round(target_reagents.get_average_purity(), 0.001) + var/list/beakerContents = list() + if(length(target_reagents.reagent_list)) + for(var/datum/reagent/reagent in target_reagents.reagent_list) + beakerContents += list(list("name" = reagent.name, "volume" = round(reagent.volume, CHEMICAL_VOLUME_ROUNDING))) -/obj/machinery/chem_recipe_debug/ui_act(action, params) + if(!QDELETED(required_container)) + //as of now we only decode soup pots. If more exotic containers are made make sure to add them here + if(istype(required_container, /obj/item/reagent_containers/cup/soup_pot)) + var/obj/item/reagent_containers/cup/soup_pot/pot = required_container + for(var/obj/item as anything in pot.added_ingredients) + //increment count if item already exists + var/entry_found = FALSE + for(var/list/entry as anything in beakerContents) + if(entry["name"] == item.name) + entry["volume"] += 1 + entry_found = TRUE + break + //new entry if non existent + if(!entry_found) + beakerContents += list(list("name" = item.name, "volume" = 1)) + + beaker_data["contents"] = beakerContents + .["beaker"] = beaker_data + +/obj/machinery/chem_recipe_debug/ui_act(action, list/params, datum/tgui/ui, datum/ui_state/state) . = ..() if(.) return + switch(action) - if("power") - return - if("temperature") + if("forced_temp") + var/target = params["target"] + if(isnull(target)) + return + + target = text2num(target) + if(isnull(target)) + return + + forced_temp = target + return TRUE + + if("temp_mode") var/target = params["target"] - if(text2num(target) != null) - target = text2num(target) - . = TRUE - if(.) - force_temp = clamp(target, 0, 1000) - if("pH") + if(isnull(target)) + return + + switch(target) + if("Reaction Temp") + temp_mode = USE_REACTION_TEMPERATURE + return TRUE + if("Forced Temp") + temp_mode = USE_USER_TEMPERATURE + return TRUE + if("Minimum Temp") + temp_mode = USE_MINIMUM_TEMPERATURE + return TRUE + if("Optimal Temp") + temp_mode = USE_OPTIMAL_TEMPERATURE + return TRUE + if("Overheat Temp") + temp_mode = USE_OVERHEAT_TEMPERATURE + return TRUE + + if("forced_ph") var/target = params["target"] - if(text2num(target) != null) - target = text2num(target) - . = TRUE - if(.) - force_ph = target - if("forceTemp") - should_force_temp = ! should_force_temp - . = TRUE - if("forcepH") - should_force_ph = ! should_force_ph - . = TRUE - if("react") - react = TRUE + if(isnull(target)) + return + + target = text2num(target) + if(isnull(target)) + return + + forced_ph = target return TRUE - if("all") - process_all = !process_all + + if("toggle_forced_ph") + use_forced_ph = !use_forced_ph return TRUE - if("beakerSpawn") - beaker_spawn = !beaker_spawn + + if("forced_purity") + var/target = params["target"] + if(isnull(target)) + return + + target = text2num(target) + if(isnull(target)) + return + + forced_purity = target return TRUE - if("setTargetList") - var/text = tgui_input_text(usr, "Enter a list of Recipe product names separated by commas", "Recipe List", multiline = TRUE) - reaction_names = list() - if(!text) - say("Could not find reaction") - var/list/names = splittext("[text]", ",") - for(var/name in names) - var/datum/reagent/reagent = find_reagent_object_from_type(get_chem_id(name)) - if(!reagent) - say("Could not find [name]") - continue - var/datum/chemical_reaction/reaction = GLOB.chemical_reactions_list_product_index[reagent.type] - if(!reaction) - say("Could not find [name] reaction!") - continue - reaction_names += reaction - if("vol") + + if("toggle_forced_purity") + use_forced_purity = !use_forced_purity + return TRUE + + if("volume_multiplier") var/target = params["target"] - if(text2num(target) != null) - target = text2num(target) - . = TRUE - if(.) - vol_multiplier = clamp(target, 1, 200) - if("start") - if(processing) - say("currently processing reaction [index]: [cached_reactions[index]] of [cached_reactions.len]") + if(isnull(target)) return - say("Starting processing") - index = 1 - setup_reactions() - begin_processing() + + target = text2num(target) + if(isnull(target)) + return + + volume_multiplier = target return TRUE - if("stop") - relay_all_reactions() - if("minTemp") - min_temp = !min_temp - if("setEdit") - var/name = (input("Enter the name of any reagent", "Input") as text|null) - reaction_names = list() - if(!text) - say("Could not find reaction") - var/datum/reagent/reagent = find_reagent_object_from_type(get_chem_id(name)) - if(!reagent) - say("Could not find [name]") + + if("pick_reaction") + var/mode = tgui_alert(usr, "Play all or an specific reaction?","Select Reaction", list("All", "Specific")) + if(mode == "All") + reactions_to_test.Cut() + for(var/reaction as anything in all_reaction_list) + reactions_to_test += all_reaction_list[reaction] + current_reaction_index = 0 + return TRUE + + var/selected_reaction = tgui_input_list(ui.user, "Select Reaction", "Reaction", all_reaction_list) + if(!selected_reaction) return - var/datum/chemical_reaction/reaction = GLOB.chemical_reactions_list_product_index[reagent.type] + + var/datum/chemical_reaction/reaction = all_reaction_list[selected_reaction] if(!reaction) - say("Could not find [name] reaction!") return - edit_recipe = reaction[1] - if("updateVar") + + reactions_to_test.Cut() + reactions_to_test += reaction + current_reaction_index = 0 + return TRUE + + if("reaction_mode") var/target = params["target"] - edit_recipe.vars[params["type"]] = target - if("export") - var/export = {"[edit_recipe.type] -[edit_recipe.is_cold_recipe ? "is_cold_recipe = TRUE" : ""] -required_temp = [edit_recipe.required_temp] -optimal_temp = [edit_recipe.optimal_temp] -overheat_temp = [edit_recipe.overheat_temp] -optimal_ph_min = [edit_recipe.optimal_ph_min] -optimal_ph_max = [edit_recipe.optimal_ph_max] -determin_ph_range = [edit_recipe.determin_ph_range] -temp_exponent_factor = [edit_recipe.temp_exponent_factor] -ph_exponent_factor = [edit_recipe.ph_exponent_factor] -thermic_constant = [edit_recipe.thermic_constant] -H_ion_release = [edit_recipe.H_ion_release] -rate_up_lim = [edit_recipe.rate_up_lim] -purity_min = [edit_recipe.purity_min]"} - say(export) - text2file(export, "[GLOB.log_directory]/chem_parse.txt") + if(isnull(target)) + return + switch(target) + if("Next Reaction") + current_reaction_mode = PLAY_NEXT_REACTION + return TRUE + if("Previous Reaction") + current_reaction_mode = PLAY_PREVIOUS_REACTION + return TRUE + if("Pick Reaction") + current_reaction_mode = PLAY_USER_REACTION + return TRUE -/obj/machinery/chem_recipe_debug/ui_interact(mob/user, datum/tgui/ui) - ui = SStgui.try_update_ui(user, src, ui) - if(!ui) - ui = new(user, src, "ChemRecipeDebug", name) - ui.open() + if("start_reaction") + var/datum/chemical_reaction/test_reaction + + //pick the reaction based on the reaction mode + var/len = reactions_to_test.len + if(len > 1) + switch(current_reaction_mode) + if(PLAY_NEXT_REACTION) + current_reaction_index = (current_reaction_index + 1) % len + if(PLAY_PREVIOUS_REACTION) + current_reaction_index = max(current_reaction_index - 1, 1) + if(PLAY_USER_REACTION) + var/list/reaction_names = list() + for(var/datum/chemical_reaction/reaction as anything in reactions_to_test) + reaction_names += extract_reaction_name(reaction) + if(!reaction_names.len) + return + + var/selected_reaction = tgui_input_list(ui.user, "Select Reaction", "Reaction", reaction_names) + if(!selected_reaction) + return + for(var/i = 1; i <= reaction_names.len; i++) + if(selected_reaction == reaction_names[i]) + current_reaction_index = i + break + test_reaction = reactions_to_test[current_reaction_index] + else if(len == 1) + current_reaction_index = 1 + test_reaction = reactions_to_test[1] + + //clear the previous reaction stuff + target_reagents.force_stop_reacting() + target_reagents.clear_reagents() + + //If the reaction requires a specific container initialize & do other stuff accordingly + target_reagents = reagents + if(!QDELETED(required_container)) + UnregisterSignal(required_container.reagents, COMSIG_REAGENTS_REACTION_STEP) + QDEL_NULL(required_container) + if(!isnull(test_reaction.required_container)) + required_container = new test_reaction.required_container(src) + required_container.create_reagents(MAXIMUM_HOLDER_VOLUME) + target_reagents = required_container.reagents + RegisterSignal(target_reagents, COMSIG_REAGENTS_REACTION_STEP, TYPE_PROC_REF(/obj/machinery/chem_recipe_debug, on_reaction_step)) + + //append everything required + var/list/reagent_list = list() + if(length(test_reaction.required_catalysts)) + reagent_list += test_reaction.required_catalysts + if(length(test_reaction.required_reagents)) + reagent_list += test_reaction.required_reagents + //now add the required reagents + var/target_temperature + switch(temp_mode) + if(USE_REACTION_TEMPERATURE) + target_temperature = DEFAULT_REAGENT_TEMPERATURE + else + target_temperature = decode_target_temperature() + for(var/datum/reagent/_reagent as anything in reagent_list) + var/vol_mul = volume_multiplier + if(length(test_reaction.required_catalysts) && test_reaction.required_catalysts[_reagent.type]) + vol_mul = 1 //catalysts don't need to be present in large amounts + + //add the required reagents with the precise conditions + target_reagents.add_reagent( + _reagent, + reagent_list[_reagent] * vol_mul, + reagtemp = target_temperature, + added_purity = use_forced_purity ? forced_purity : null, + added_ph = use_forced_ph ? forced_ph : null, + no_react = TRUE + ) + + //add solid ingredients for soups + if(istype(test_reaction, /datum/chemical_reaction/food/soup)) + var/datum/chemical_reaction/food/soup/soup_reaction = test_reaction + var/obj/item/reagent_containers/cup/soup_pot/pot = required_container + for(var/obj/item as anything in soup_reaction.required_ingredients) + for(var/_ in 1 to soup_reaction.required_ingredients[item]) + LAZYADD(pot.added_ingredients, new item(pot)) -///Moves a type of buffer from the heater to the beaker, + target_reagents.handle_reactions() + return TRUE + + if("edit_reaction") + var/selected_reaction = tgui_input_list(ui.user, "Select Reaction", "Reaction", all_reaction_list) + if(!selected_reaction) + return -/obj/machinery/chem_recipe_debug/ui_status(mob/user) - return UI_INTERACTIVE + var/datum/chemical_reaction/reaction = all_reaction_list[selected_reaction] + if(!reaction) + return + + edit_reaction = reaction + edit_var = initial(edit_var) + return TRUE + + if("edit_var") + var/target = params["target"] + if(isnull(target)) + return + if(isnull(decode_var(target))) + return + edit_var = target + return TRUE + + if("edit_value") + var/target = params["target"] + if(isnull(target)) + return + + target = text2num(target) + if(isnull(target)) + return + + edit_reaction.vars[decode_var(edit_var)] = target + return TRUE + + if("reset_value") + switch(edit_var) + if("Required Temp") + edit_reaction.required_temp = initial(edit_reaction.required_temp) + return TRUE + if("Optimal Temp") + edit_reaction.optimal_temp = initial(edit_reaction.optimal_temp) + return TRUE + if("Overheat Temp") + edit_reaction.overheat_temp = initial(edit_reaction.overheat_temp) + return TRUE + if("Optimal Min Ph") + edit_reaction.optimal_ph_min = initial(edit_reaction.optimal_ph_min) + return TRUE + if("Optimal Max Ph") + edit_reaction.optimal_ph_max = initial(edit_reaction.optimal_ph_max) + return TRUE + if("Ph Range") + edit_reaction.determin_ph_range = initial(edit_reaction.determin_ph_range) + return TRUE + if("Temp Exp Factor") + edit_reaction.temp_exponent_factor = initial(edit_reaction.temp_exponent_factor) + return TRUE + if("Ph Exp Factor") + edit_reaction.ph_exponent_factor = initial(edit_reaction.ph_exponent_factor) + return TRUE + if("Thermic Constant") + edit_reaction.thermic_constant = initial(edit_reaction.thermic_constant) + return TRUE + if("H Ion Release") + edit_reaction.H_ion_release = initial(edit_reaction.H_ion_release) + return TRUE + if("Rate Up Limit") + edit_reaction.rate_up_lim = initial(edit_reaction.rate_up_lim) + return TRUE + if("Purity Min") + edit_reaction.purity_min = initial(edit_reaction.purity_min) + return TRUE + + if("export") + var/export = "[edit_reaction]\n" + export += "\tis_cold_recipe = [edit_reaction.is_cold_recipe]\n" + export += "\trequired_temp = [edit_reaction.required_temp]\n" + export += "\toptimal_temp = [edit_reaction.optimal_temp]\n" + export += "\toverheat_temp = [edit_reaction.overheat_temp]\n" + export += "\toptimal_ph_min = [edit_reaction.optimal_ph_min]\n" + export += "\toptimal_ph_max = [edit_reaction.optimal_ph_max]\n" + export += "\tdetermin_ph_range = [edit_reaction.determin_ph_range]\n" + export += "\ttemp_exponent_factor = [edit_reaction.temp_exponent_factor]\n" + export += "\tph_exponent_factor = [edit_reaction.ph_exponent_factor]\n" + export += "\tthermic_constant = [edit_reaction.thermic_constant]\n" + export += "\tH_ion_release = [edit_reaction.H_ion_release]\n" + export += "\trate_up_lim = [edit_reaction.rate_up_lim]\n" + export += "\tpurity_min = [edit_reaction.purity_min]\n" + + var/dest = "[GLOB.log_directory]/chem_parse.txt" + text2file(export, dest) + tgui_alert(ui.user, "Saved to [dest]") + + if("eject") + if(!target_reagents.total_volume) + return + if(QDELETED(beaker)) + beaker = new /obj/item/reagent_containers/cup/beaker/bluespace(src) + target_reagents.trans_to(beaker, target_reagents.total_volume) + try_put_in_hand(beaker, ui.user) + return TRUE -/obj/machinery/chem_recipe_debug/ui_state(mob/user) - return GLOB.physical_state +#undef USE_REACTION_TEMPERATURE +#undef USE_MINIMUM_TEMPERATURE +#undef USE_USER_TEMPERATURE +#undef USE_OPTIMAL_TEMPERATURE +#undef USE_OVERHEAT_TEMPERATURE +#undef PLAY_NEXT_REACTION +#undef PLAY_PREVIOUS_REACTION +#undef PLAY_USER_REACTION +#undef MAXIMUM_HOLDER_VOLUME diff --git a/code/modules/reagents/chemistry/machinery/chem_synthesizer.dm b/code/modules/reagents/chemistry/machinery/chem_synthesizer.dm index 686196b73ff..c0cb45dda2a 100644 --- a/code/modules/reagents/chemistry/machinery/chem_synthesizer.dm +++ b/code/modules/reagents/chemistry/machinery/chem_synthesizer.dm @@ -6,7 +6,7 @@ base_icon_state = "dispenser" amount = 10 resistance_flags = INDESTRUCTIBLE | FIRE_PROOF | ACID_PROOF | LAVA_PROOF - obj_flags = /obj::obj_flags | NO_DECONSTRUCTION + obj_flags = parent_type::obj_flags | NO_DECONSTRUCTION use_power = NO_POWER_USE var/static/list/shortcuts = list( "meth" = /datum/reagent/drug/methamphetamine diff --git a/code/modules/reagents/chemistry/machinery/pandemic.dm b/code/modules/reagents/chemistry/machinery/pandemic.dm index 586cb0ce8fa..bbde13c78a8 100644 --- a/code/modules/reagents/chemistry/machinery/pandemic.dm +++ b/code/modules/reagents/chemistry/machinery/pandemic.dm @@ -108,7 +108,7 @@ update_appearance() SStgui.update_uis(src) -/obj/machinery/computer/pandemic/on_deconstruction() +/obj/machinery/computer/pandemic/on_deconstruction(disassembled) eject_beaker() . = ..() diff --git a/code/modules/reagents/chemistry/machinery/portable_chem_mixer.dm b/code/modules/reagents/chemistry/machinery/portable_chem_mixer.dm index 9ad8e3ecfc5..791feb80039 100644 --- a/code/modules/reagents/chemistry/machinery/portable_chem_mixer.dm +++ b/code/modules/reagents/chemistry/machinery/portable_chem_mixer.dm @@ -1,6 +1,6 @@ /obj/item/storage/portable_chem_mixer name = "Portable Chemical Mixer" - desc = "A portable device that dispenses and mixes chemicals. All necessary reagents need to be supplied with beakers. A label indicates that the 'CTRL'-button on the device may be used to open it for refills. This device can be worn as a belt. The letters 'S&T' are imprinted on the side." + desc = "A portable device that dispenses and mixes chemicals using the beakers inserted inside." icon = 'icons/obj/medical/chemical.dmi' icon_state = "portablechemicalmixer_open" worn_icon_state = "portable_chem_mixer" @@ -11,7 +11,7 @@ custom_premium_price = PAYCHECK_CREW * 14 ///Creating an empty slot for a beaker that can be added to dispense into - var/obj/item/reagent_containers/beaker = null + var/obj/item/reagent_containers/beaker ///The amount of reagent that is to be dispensed currently var/amount = 30 ///List in which all currently dispensable reagents go @@ -31,12 +31,11 @@ register_context() /obj/item/storage/portable_chem_mixer/Destroy() + dispensable_reagents.Cut() QDEL_NULL(beaker) return ..() /obj/item/storage/portable_chem_mixer/add_context(atom/source, list/context, obj/item/held_item, mob/user) - . = ..() - context[SCREENTIP_CONTEXT_CTRL_LMB] = "[atom_storage.locked ? "Un" : ""]Lock storage" if(atom_storage.locked && !QDELETED(beaker)) context[SCREENTIP_CONTEXT_ALT_LMB] = "Eject beaker" @@ -44,6 +43,7 @@ if(!isnull(held_item)) if (!atom_storage.locked || \ (held_item.item_flags & ABSTRACT) || \ + (held_item.flags_1 & HOLOGRAM_1) || \ !is_reagent_container(held_item) || \ !held_item.is_open_container() \ ) @@ -55,70 +55,34 @@ /obj/item/storage/portable_chem_mixer/examine(mob/user) . = ..() if(!atom_storage.locked) - . += span_notice("Use [EXAMINE_HINT("ctrl click")] to lock in order to use its interface.") + . += span_notice("Use [EXAMINE_HINT("Ctrl Click")] to lock in order to use its interface.") else - . += span_notice("Its storage is locked, use [EXAMINE_HINT("ctrl click")] to unlock it.") + . += span_notice("Its storage is locked, use [EXAMINE_HINT("Ctrl Click")] to unlock it.") if(QDELETED(beaker)) . += span_notice("A beaker can be inserted to dispense reagents after it is locked.") else - . += span_notice("A beaker of [beaker.reagents.maximum_volume] units capacity is inserted.") - . += span_notice("It can be ejected with [EXAMINE_HINT("alt click")].") - -/obj/item/storage/portable_chem_mixer/ex_act(severity, target) - return severity > EXPLODE_LIGHT ? ..() : FALSE - -/obj/item/storage/portable_chem_mixer/attackby(obj/item/weapon, mob/user, params) - if (!atom_storage.locked || \ - (weapon.item_flags & ABSTRACT) || \ - !is_reagent_container(weapon) || \ - !weapon.is_open_container() \ - ) - return ..() - - replace_beaker(user, weapon) - update_appearance() - return TRUE + . += span_notice("A beaker of [beaker.reagents.maximum_volume]u capacity is inserted.") + . += span_notice("It can be ejected with [EXAMINE_HINT("Alt Click")].") /obj/item/storage/portable_chem_mixer/update_icon_state() if(!atom_storage.locked) icon_state = "portablechemicalmixer_open" return ..() - if(beaker) + if(!QDELETED(beaker)) icon_state = "portablechemicalmixer_full" return ..() icon_state = "portablechemicalmixer_empty" return ..() -/obj/item/storage/portable_chem_mixer/AltClick(mob/living/user) - if(!atom_storage.locked) - balloon_alert(user, "lock first to use alt eject!") - return ..() - if(!can_interact(user) || !user.can_perform_action(src, FORBID_TELEKINESIS_REACH)) - return - - replace_beaker(user) - update_appearance() - -/obj/item/storage/portable_chem_mixer/CtrlClick(mob/living/user) - if(atom_storage.locked == STORAGE_FULLY_LOCKED) - atom_storage.locked = STORAGE_NOT_LOCKED - replace_beaker(user) - SStgui.close_uis(src) - else - atom_storage.locked = STORAGE_FULLY_LOCKED - atom_storage.hide_contents(usr) - - update_appearance() - -/obj/item/storage/portable_chem_mixer/Exited(atom/movable/gone, direction) +/obj/item/storage/portable_chem_mixer/Entered(atom/movable/arrived, atom/old_loc, list/atom/old_locs) . = ..() - if(gone == beaker) - beaker = null - else + if(!atom_storage.locked) update_contents() /// Reload dispensable reagents from new contents /obj/item/storage/portable_chem_mixer/proc/update_contents() + PRIVATE_PROC(TRUE) + dispensable_reagents.Cut() for (var/obj/item/reagent_containers/container in contents) var/datum/reagent/key = container.reagents.get_master_reagent() @@ -131,11 +95,29 @@ dispensable_reagents[key_type]["reagents"] = list() dispensable_reagents[key_type]["reagents"] += container.reagents -/obj/item/storage/portable_chem_mixer/Entered(atom/movable/arrived, atom/old_loc, list/atom/old_locs) +/obj/item/storage/portable_chem_mixer/Exited(atom/movable/gone, direction) . = ..() - if(!atom_storage.locked) + if(gone == beaker) + beaker = null + else update_contents() +/obj/item/storage/portable_chem_mixer/ex_act(severity, target) + return severity > EXPLODE_LIGHT ? ..() : FALSE + +/obj/item/storage/portable_chem_mixer/attackby(obj/item/weapon, mob/user, params) + if (!atom_storage.locked || \ + (weapon.item_flags & ABSTRACT) || \ + (weapon.flags_1 & HOLOGRAM_1) || \ + !is_reagent_container(weapon) || \ + !weapon.is_open_container() \ + ) + return ..() + + replace_beaker(user, weapon) + update_appearance() + return TRUE + /** * Replaces the beaker of the portable chemical mixer with another beaker, or simply adds the new beaker if none is in currently * @@ -145,21 +127,16 @@ * * obj/item/reagent_containers/new_beaker - The new beaker that the user wants to put into the device */ /obj/item/storage/portable_chem_mixer/proc/replace_beaker(mob/living/user, obj/item/reagent_containers/new_beaker) - if(beaker) + PRIVATE_PROC(TRUE) + + if(!QDELETED(beaker)) user.put_in_hands(beaker) - if(new_beaker) + + if(!QDELETED(new_beaker)) if(!user.transferItemToLoc(new_beaker, src)) return beaker = new_beaker -/obj/item/storage/portable_chem_mixer/MouseDrop(obj/over_object) - . = ..() - if(ismob(loc)) - var/mob/M = loc - if(!M.incapacitated() && istype(over_object, /atom/movable/screen/inventory/hand)) - var/atom/movable/screen/inventory/hand/H = over_object - M.putItemFromInventoryInHandIfPossible(src, H.held_index) - /obj/item/storage/portable_chem_mixer/ui_interact(mob/user, datum/tgui/ui) if(loc != user) balloon_alert(user, "hold it in your hand!") @@ -183,26 +160,24 @@ . = list() .["amount"] = amount - var/list/chemicals = list() var/is_hallucinating = FALSE if(isliving(user)) var/mob/living/living_user = user is_hallucinating = !!living_user.has_status_effect(/datum/status_effect/hallucination) - for(var/re in dispensable_reagents) - var/value = dispensable_reagents[re] - var/datum/reagent/temp = GLOB.chemical_reagents_list[re] + .["chemicals"] = list() + for(var/datum/reagent/reagent_type as anything in dispensable_reagents) + var/datum/reagent/temp = GLOB.chemical_reagents_list[reagent_type] if(temp) var/chemname = temp.name var/total_volume = 0 var/total_ph = 0 - for (var/datum/reagents/rs in value["reagents"]) + for (var/datum/reagents/rs as anything in dispensable_reagents[reagent_type]["reagents"]) total_volume += rs.total_volume total_ph = rs.ph if(is_hallucinating && prob(5)) chemname = "[pick_list_replacements("hallucination.json", "chemicals")]" - chemicals += list(list("title" = chemname, "id" = temp.name, "volume" = total_volume, "pH" = total_ph)) - .["chemicals"] = chemicals + .["chemicals"] += list(list("title" = chemname, "id" = temp.name, "volume" = total_volume, "pH" = total_ph)) var/list/beaker_data = null if(!QDELETED(beaker)) @@ -212,7 +187,7 @@ beaker_data["pH"] = round(beaker.reagents.ph, 0.01) beaker_data["currentVolume"] = round(beaker.reagents.total_volume, 0.01) var/list/beakerContents = list() - if(length(beaker?.reagents.reagent_list)) + if(length(beaker.reagents.reagent_list)) for(var/datum/reagent/reagent in beaker.reagents.reagent_list) beakerContents += list(list("name" = reagent.name, "volume" = round(reagent.volume, 0.01))) // list in a list because Byond merges the first list... beaker_data["contents"] = beakerContents @@ -225,7 +200,15 @@ switch(action) if("amount") - amount = text2num(params["target"]) + var/target = params["target"] + if(isnull(target)) + return + + target = text2num(target) + if(isnull(target)) + return + + amount = target return TRUE if("dispense") @@ -236,17 +219,54 @@ if(!QDELETED(beaker)) var/datum/reagents/container = beaker.reagents var/actual = min(amount, container.maximum_volume - container.total_volume) - for (var/datum/reagents/source in dispensable_reagents[reagent]["reagents"]) + for(var/datum/reagents/source as anything in dispensable_reagents[reagent]["reagents"]) actual -= source.trans_to(beaker, min(source.total_volume, actual), transferred_by = ui.user) - if (actual <= 0) + if(actual <= 0) break - return TRUE + return TRUE if("remove") - beaker.reagents.remove_all(text2num(params["amount"])) + var/target = params["amount"] + if(isnull(target)) + return + + target = text2num(target) + if(isnull(target)) + return + + beaker.reagents.remove_all(target) return TRUE if("eject") replace_beaker(ui.user) update_appearance() return TRUE + +/obj/item/storage/portable_chem_mixer/MouseDrop(obj/over_object) + . = ..() + if(ismob(loc)) + var/mob/M = loc + if(!M.incapacitated() && istype(over_object, /atom/movable/screen/inventory/hand)) + var/atom/movable/screen/inventory/hand/H = over_object + M.putItemFromInventoryInHandIfPossible(src, H.held_index) + +/obj/item/storage/portable_chem_mixer/AltClick(mob/living/user) + if(!atom_storage.locked) + balloon_alert(user, "lock first to use alt eject!") + return ..() + if(!can_interact(user) || !user.can_perform_action(src, FORBID_TELEKINESIS_REACH)) + return + + replace_beaker(user) + update_appearance() + +/obj/item/storage/portable_chem_mixer/CtrlClick(mob/living/user) + if(atom_storage.locked == STORAGE_FULLY_LOCKED) + atom_storage.locked = STORAGE_NOT_LOCKED + replace_beaker(user) + SStgui.close_uis(src) + else + atom_storage.locked = STORAGE_FULLY_LOCKED + atom_storage.hide_contents(usr) + + update_appearance() diff --git a/code/modules/reagents/chemistry/machinery/reagentgrinder.dm b/code/modules/reagents/chemistry/machinery/reagentgrinder.dm index f4be905a073..e7a6c9839eb 100644 --- a/code/modules/reagents/chemistry/machinery/reagentgrinder.dm +++ b/code/modules/reagents/chemistry/machinery/reagentgrinder.dm @@ -42,11 +42,10 @@ QDEL_NULL(beaker) update_appearance() -/obj/machinery/reagentgrinder/deconstruct() +/obj/machinery/reagentgrinder/on_deconstruction(disassmbled) drop_all_items() beaker?.forceMove(drop_location()) beaker = null - return ..() /obj/machinery/reagentgrinder/Destroy() QDEL_NULL(beaker) diff --git a/code/modules/reagents/chemistry/machinery/smoke_machine.dm b/code/modules/reagents/chemistry/machinery/smoke_machine.dm index a8d1765891b..e91aea78d59 100644 --- a/code/modules/reagents/chemistry/machinery/smoke_machine.dm +++ b/code/modules/reagents/chemistry/machinery/smoke_machine.dm @@ -111,10 +111,9 @@ return return ..() -/obj/machinery/smoke_machine/deconstruct() +/obj/machinery/smoke_machine/on_deconstruction(disassembled) reagents.expose(loc, TOUCH) reagents.clear_reagents() - return ..() /obj/machinery/smoke_machine/ui_interact(mob/user, datum/tgui/ui) ui = SStgui.try_update_ui(user, src, ui) diff --git a/code/modules/reagents/chemistry/reagents/drinks/alcohol_reagents.dm b/code/modules/reagents/chemistry/reagents/drinks/alcohol_reagents.dm index 0479ed8ea41..7ae1b3f4ffa 100644 --- a/code/modules/reagents/chemistry/reagents/drinks/alcohol_reagents.dm +++ b/code/modules/reagents/chemistry/reagents/drinks/alcohol_reagents.dm @@ -420,7 +420,7 @@ description = "A sweet and strongly alcoholic drink, made after numerous distillations and years of maturing. Classy as fornication." color = "#AB3C05" // rgb: 171, 60, 5 boozepwr = 75 - taste_description = "angry and irish" + taste_description = "smooth and french" ph = 3.5 chemical_flags = REAGENT_CAN_BE_SYNTHESIZED glass_price = DRINK_PRICE_STOCK @@ -589,37 +589,55 @@ taste_description = "oranges" chemical_flags = REAGENT_CAN_BE_SYNTHESIZED -/datum/reagent/consumable/ethanol/screwdrivercocktail/on_transfer(atom/atom, methods = TOUCH, trans_volume) - if(!(methods & INGEST)) - return ..() - - if(src == atom.reagents.get_master_reagent() && istype(atom, /obj/item/reagent_containers/cup/glass/drinkingglass)) - var/obj/item/reagent_containers/cup/glass/drinkingglass/drink = atom - drink.tool_behaviour = TOOL_SCREWDRIVER +/datum/reagent/consumable/ethanol/screwdrivercocktail/on_new(data) + . = ..() + // We want to turn only base drinking glasses with screwdriver(cocktail) into screwdrivers(tool), + // but we can't check style so we have to check type, and we don't want it match subtypes like istype does + if(holder?.my_atom && holder.my_atom.type == /obj/item/reagent_containers/cup/glass/drinkingglass/) var/list/reagent_change_signals = list( COMSIG_REAGENTS_ADD_REAGENT, COMSIG_REAGENTS_NEW_REAGENT, COMSIG_REAGENTS_REM_REAGENT, - COMSIG_REAGENTS_DEL_REAGENT, - COMSIG_REAGENTS_CLEAR_REAGENTS, - COMSIG_REAGENTS_REACTED, ) - RegisterSignals(drink.reagents, reagent_change_signals, PROC_REF(on_reagent_change)) - - return ..() + RegisterSignals(holder, reagent_change_signals, PROC_REF(on_reagent_change)) + RegisterSignal(holder, COMSIG_REAGENTS_CLEAR_REAGENTS, PROC_REF(on_reagents_clear)) + RegisterSignal(holder, COMSIG_REAGENTS_DEL_REAGENT, PROC_REF(on_reagent_delete)) + if(src == holder.get_master_reagent()) + var/obj/item/reagent_containers/cup/glass/drinkingglass/drink = holder.my_atom + drink.tool_behaviour = TOOL_SCREWDRIVER + drink.usesound = list('sound/items/screwdriver.ogg', 'sound/items/screwdriver2.ogg') /datum/reagent/consumable/ethanol/screwdrivercocktail/proc/on_reagent_change(datum/reagents/reagents) SIGNAL_HANDLER - if(src != reagents.get_master_reagent()) - var/obj/item/reagent_containers/cup/glass/drinkingglass/drink = reagents.my_atom + var/obj/item/reagent_containers/cup/glass/drinkingglass/drink = reagents.my_atom + if(reagents.get_master_reagent() == src) + drink.tool_behaviour = TOOL_SCREWDRIVER + drink.usesound = list('sound/items/screwdriver.ogg', 'sound/items/screwdriver2.ogg') + else drink.tool_behaviour = initial(drink.tool_behaviour) - UnregisterSignal(reagents, list( + drink.usesound = initial(drink.usesound) + +/datum/reagent/consumable/ethanol/screwdrivercocktail/proc/on_reagents_clear(datum/reagents/reagents) + SIGNAL_HANDLER + unregister_screwdriver(reagents) + +/datum/reagent/consumable/ethanol/screwdrivercocktail/proc/on_reagent_delete(datum/reagents/reagents, datum/reagent/deleted_reagent) + SIGNAL_HANDLER + if(deleted_reagent != src) + return + unregister_screwdriver(reagents) + +/datum/reagent/consumable/ethanol/screwdrivercocktail/proc/unregister_screwdriver(datum/reagents/reagents) + var/obj/item/reagent_containers/cup/glass/drinkingglass/drink = reagents.my_atom + if(drink.tool_behaviour == TOOL_SCREWDRIVER) + drink.tool_behaviour = initial(drink.tool_behaviour) + drink.usesound = initial(drink.usesound) + UnregisterSignal(reagents, list( COMSIG_REAGENTS_ADD_REAGENT, COMSIG_REAGENTS_NEW_REAGENT, COMSIG_REAGENTS_REM_REAGENT, COMSIG_REAGENTS_DEL_REAGENT, COMSIG_REAGENTS_CLEAR_REAGENTS, - COMSIG_REAGENTS_REACTED, )) /datum/reagent/consumable/ethanol/screwdrivercocktail/on_mob_life(mob/living/carbon/drinker, seconds_per_tick, times_fired) @@ -1195,7 +1213,7 @@ /datum/reagent/consumable/ethanol/changelingsting/on_mob_life(mob/living/carbon/target, seconds_per_tick, times_fired) . = ..() - var/datum/antagonist/changeling/changeling = target.mind?.has_antag_datum(/datum/antagonist/changeling) + var/datum/antagonist/changeling/changeling = IS_CHANGELING(target) changeling?.adjust_chemicals(metabolization_rate * REM * seconds_per_tick) /datum/reagent/consumable/ethanol/irishcarbomb @@ -2728,7 +2746,7 @@ description = "A drink glorifying Cybersun's enduring business." boozepwr = 20 color = "#F54040" - quality = DRINK_NICE + quality = DRINK_FANTASTIC taste_description = "betrayal" chemical_flags = REAGENT_CAN_BE_SYNTHESIZED @@ -2737,7 +2755,7 @@ description = "A variation on the Long Island Iced Tea, made with yuyake for an alternative flavour that's hard to place." boozepwr = 40 color = "#F54040" - quality = DRINK_NICE + quality = DRINK_VERYGOOD taste_description = "an asian twist on the liquor cabinet" chemical_flags = REAGENT_CAN_BE_SYNTHESIZED @@ -2746,7 +2764,7 @@ description = "It's a melon cream soda, except with alcohol- what's not to love? Well... possibly the hangovers." boozepwr = 6 color = "#F54040" - quality = DRINK_NICE + quality = DRINK_GOOD taste_description = "creamy melon soda" chemical_flags = REAGENT_CAN_BE_SYNTHESIZED @@ -2755,7 +2773,7 @@ description = "A new take on a classic cocktail, the Kumicho takes the Godfather formula and adds shochu for an Asian twist." boozepwr = 62 color = "#F54040" - quality = DRINK_NICE + quality = DRINK_VERYGOOD taste_description = "rice and rye" chemical_flags = REAGENT_CAN_BE_SYNTHESIZED @@ -2764,7 +2782,7 @@ description = "Made in celebration of the Martian Concession, the Red Planet is based on the classic El Presidente, and is as patriotic as it is bright crimson." boozepwr = 45 color = "#F54040" - quality = DRINK_NICE + quality = DRINK_VERYGOOD taste_description = "the spirit of freedom" chemical_flags = REAGENT_CAN_BE_SYNTHESIZED @@ -2773,7 +2791,7 @@ description = "Named for Amaterasu, the Shinto Goddess of the Sun, this cocktail embodies radiance- or something like that, anyway." boozepwr = 54 //1 part bitters is a lot color = "#F54040" - quality = DRINK_NICE + quality = DRINK_VERYGOOD taste_description = "sweet nectar of the gods" chemical_flags = REAGENT_CAN_BE_SYNTHESIZED @@ -2782,7 +2800,7 @@ description = "An overly sweet cocktail, made with melon liqueur, melon juice, and champagne (which contains no melon, unfortunately)." boozepwr = 17 color = "#FF0C8D" - quality = DRINK_NICE + quality = DRINK_GOOD taste_description = "MELON" chemical_flags = REAGENT_CAN_BE_SYNTHESIZED @@ -2791,7 +2809,7 @@ description = "Based on the galaxy-famous \"Kyūkyoku no Ninja Pawā Sentai\", the Sentai Quencha is a favourite at anime conventions and weeb bars." boozepwr = 28 color = "#F54040" - quality = DRINK_NICE + quality = DRINK_GOOD taste_description = "ultimate ninja power" chemical_flags = REAGENT_CAN_BE_SYNTHESIZED @@ -2800,7 +2818,7 @@ description = "A simple summer drink from Mars, made from a 1:1 mix of rice beer and lemonade." boozepwr = 6 color = "#F54040" - quality = DRINK_NICE + quality = DRINK_GOOD taste_description = "bittersweet lemon" chemical_flags = REAGENT_CAN_BE_SYNTHESIZED @@ -2809,7 +2827,7 @@ description = "Sweet, bitter, spicy- that's a great combination." boozepwr = 6 color = "#F54040" - quality = DRINK_NICE + quality = DRINK_VERYGOOD taste_description = "spicy pineapple beer" chemical_flags = REAGENT_CAN_BE_SYNTHESIZED @@ -2827,7 +2845,7 @@ description = "A stiff, bitter drink with an odd name and odder recipe." boozepwr = 26 color = "#F54040" - quality = DRINK_NICE + quality = DRINK_VERYGOOD taste_description = "bitter raspberry" chemical_flags = REAGENT_CAN_BE_SYNTHESIZED @@ -2836,7 +2854,7 @@ description = "A drink to power your typing hands." boozepwr = 26 color = "#F54040" - quality = DRINK_NICE + quality = DRINK_GOOD taste_description = "cyberspace" chemical_flags = REAGENT_CAN_BE_SYNTHESIZED @@ -2845,7 +2863,7 @@ description = "A take on the classic White Russian, subbing out the classics for some tropical flavours." boozepwr = 16 color = "#F54040" - quality = DRINK_NICE + quality = DRINK_GOOD taste_description = "COCONUT" chemical_flags = REAGENT_CAN_BE_SYNTHESIZED @@ -2854,7 +2872,7 @@ description = "Behind this drink's red facade lurks a sharp, complex flavour." boozepwr = 15 color = "#F54040" - quality = DRINK_NICE + quality = DRINK_VERYGOOD taste_description = "sunrise over the pacific" chemical_flags = REAGENT_CAN_BE_SYNTHESIZED @@ -2863,7 +2881,7 @@ description = "For when orgeat is in short supply, do as the spacers do- make do and mend." boozepwr = 52 color = "#F54040" - quality = DRINK_NICE + quality = DRINK_VERYGOOD taste_description = "spicy nutty rum" chemical_flags = REAGENT_CAN_BE_SYNTHESIZED @@ -2872,7 +2890,7 @@ description = "Coconut rum, coffee liqueur, and espresso- an odd combination, to be sure, but a welcomed one." boozepwr = 20 color = "#F54040" - quality = DRINK_NICE + quality = DRINK_VERYGOOD taste_description = "coconut coffee" chemical_flags = REAGENT_CAN_BE_SYNTHESIZED @@ -2881,7 +2899,7 @@ description = "Sweet, sharp and coconutty." boozepwr = 30 color = "#F54040" - quality = DRINK_NICE + quality = DRINK_VERYGOOD taste_description = "the aloha state" chemical_flags = REAGENT_CAN_BE_SYNTHESIZED diff --git a/code/modules/reagents/chemistry/reagents/drinks/drink_reagents.dm b/code/modules/reagents/chemistry/reagents/drinks/drink_reagents.dm index e76e0e8fbb5..8443dc3ea32 100644 --- a/code/modules/reagents/chemistry/reagents/drinks/drink_reagents.dm +++ b/code/modules/reagents/chemistry/reagents/drinks/drink_reagents.dm @@ -454,8 +454,10 @@ affected_mob.set_drugginess(1 MINUTES * REM * seconds_per_tick) affected_mob.adjust_dizzy(3 SECONDS * REM * seconds_per_tick) affected_mob.remove_status_effect(/datum/status_effect/drowsiness) - affected_mob.AdjustSleeping(-40 * REM * seconds_per_tick) + affected_mob.AdjustSleeping(-4 SECONDS * REM * seconds_per_tick) affected_mob.adjust_bodytemperature(-5 * REM * TEMPERATURE_DAMAGE_COEFFICIENT * seconds_per_tick, affected_mob.get_body_temp_normal()) + if (SSradiation.can_irradiate_basic(affected_mob)) + affected_mob.AddComponent(/datum/component/irradiated) /datum/reagent/consumable/rootbeer name = "root beer" @@ -1170,6 +1172,7 @@ quality = DRINK_GOOD taste_description = "citrus soda with cucumber" chemical_flags = REAGENT_CAN_BE_SYNTHESIZED + glass_price = DRINK_PRICE_HIGH /datum/reagent/consumable/cucumberlemonade/on_mob_life(mob/living/carbon/doll, seconds_per_tick, times_fired) . = ..() diff --git a/code/modules/reagents/chemistry/reagents/impure_reagents/impure_medicine_reagents.dm b/code/modules/reagents/chemistry/reagents/impure_reagents/impure_medicine_reagents.dm index 2846492a5f6..ac4c887f6c5 100644 --- a/code/modules/reagents/chemistry/reagents/impure_reagents/impure_medicine_reagents.dm +++ b/code/modules/reagents/chemistry/reagents/impure_reagents/impure_medicine_reagents.dm @@ -771,18 +771,18 @@ Basically, we fill the time between now and 2s from now with hands based off the liver_damage = 0.1 metabolization_rate = 0.04 * REM ///The random span we start hearing in - var/randomSpan + var/random_span /datum/reagent/impurity/inacusiate/on_mob_metabolize(mob/living/affected_mob, seconds_per_tick, times_fired) . = ..() - randomSpan = pick(list("clown", "small", "big", "hypnophrase", "alien", "cult", "alert", "danger", "emote", "yell", "brass", "sans", "papyrus", "robot", "his_grace", "phobia")) + random_span = pick("clown", "small", "big", "hypnophrase", "alien", "cult", "alert", "danger", "emote", "yell", "brass", "sans", "papyrus", "robot", "his_grace", "phobia") RegisterSignal(affected_mob, COMSIG_MOVABLE_HEAR, PROC_REF(owner_hear)) - to_chat(affected_mob, span_warning("Your hearing seems to be a bit off!")) + to_chat(affected_mob, span_warning("Your hearing seems to be a bit off[affected_mob.can_hear() ? "!" : " - wait, that's normal."]")) /datum/reagent/impurity/inacusiate/on_mob_end_metabolize(mob/living/affected_mob) . = ..() UnregisterSignal(affected_mob, COMSIG_MOVABLE_HEAR) - to_chat(affected_mob, span_notice("You start hearing things normally again.")) + to_chat(affected_mob, span_notice("You start hearing things normally again[affected_mob.can_hear() ? "" : " - no, wait, no you don't"].")) /datum/reagent/impurity/inacusiate/proc/owner_hear(mob/living/owner, list/hearing_args) SIGNAL_HANDLER @@ -790,8 +790,12 @@ Basically, we fill the time between now and 2s from now with hands based off the // don't skip messages that the owner says or can't understand (since they still make sounds) if(!owner.can_hear()) return + // not technically hearing + var/atom/movable/speaker = hearing_args[HEARING_SPEAKER] + if(!isnull(speaker) && HAS_TRAIT(speaker, TRAIT_SIGN_LANG)) + return - hearing_args[HEARING_RAW_MESSAGE] = "[hearing_args[HEARING_RAW_MESSAGE]]" + hearing_args[HEARING_SPANS] |= random_span /datum/reagent/inverse/sal_acid name = "Benzoic Acid" diff --git a/code/modules/reagents/chemistry/reagents/medicine_reagents.dm b/code/modules/reagents/chemistry/reagents/medicine_reagents.dm index 303a85c6b4b..b2c8689b73c 100644 --- a/code/modules/reagents/chemistry/reagents/medicine_reagents.dm +++ b/code/modules/reagents/chemistry/reagents/medicine_reagents.dm @@ -279,9 +279,9 @@ . = ..() var/need_mob_update if(affected_mob.getFireLoss() > 25) - need_mob_update = affected_mob.adjustFireLoss(-4 * REM * seconds_per_tick, updating_health = FALSE, required_bodytype = affected_bodytype) //Twice as effective as AIURI for severe burns + need_mob_update = affected_mob.adjustFireLoss(-4 * REM * seconds_per_tick * normalise_creation_purity(), updating_health = FALSE, required_bodytype = affected_bodytype) //Twice as effective as AIURI for severe burns else - need_mob_update = affected_mob.adjustFireLoss(-0.5 * REM * seconds_per_tick, updating_health = FALSE, required_bodytype = affected_bodytype) //But only a quarter as effective for more minor ones + need_mob_update = affected_mob.adjustFireLoss(-0.5 * REM * seconds_per_tick * normalise_creation_purity(), updating_health = FALSE, required_bodytype = affected_bodytype) //But only a quarter as effective for more minor ones if(need_mob_update) return UPDATE_MOB_HEALTH @@ -554,9 +554,9 @@ . = ..() var/need_mob_update if(affected_mob.getBruteLoss() > 25) - need_mob_update = affected_mob.adjustBruteLoss(-4 * REM * seconds_per_tick, updating_health = FALSE, required_bodytype = affected_bodytype) + need_mob_update = affected_mob.adjustBruteLoss(-4 * REM * seconds_per_tick * normalise_creation_purity(), updating_health = FALSE, required_bodytype = affected_bodytype) else - need_mob_update = affected_mob.adjustBruteLoss(-0.5 * REM * seconds_per_tick, updating_health = FALSE, required_bodytype = affected_bodytype) + need_mob_update = affected_mob.adjustBruteLoss(-0.5 * REM * seconds_per_tick * normalise_creation_purity(), updating_health = FALSE, required_bodytype = affected_bodytype) if(need_mob_update) return UPDATE_MOB_HEALTH @@ -1278,7 +1278,7 @@ need_mob_update = affected_mob.adjustBruteLoss(-5 * REM * seconds_per_tick, updating_health = FALSE) //A ton of healing - this is a 50 telecrystal investment. need_mob_update += affected_mob.adjustFireLoss(-5 * REM * seconds_per_tick, updating_health = FALSE) need_mob_update += affected_mob.adjustOxyLoss(-15 * REM * seconds_per_tick, updating_health = FALSE) - need_mob_update += affected_mob.adjustToxLoss(-5 * REM * seconds_per_tick, updating_health = FALSE) + need_mob_update += affected_mob.adjustToxLoss(-5 * REM * seconds_per_tick, updating_health = FALSE, forced = TRUE, required_biotype = affected_biotype) need_mob_update += affected_mob.adjustOrganLoss(ORGAN_SLOT_BRAIN, -15 * REM * seconds_per_tick) if(need_mob_update) return UPDATE_MOB_HEALTH @@ -1739,6 +1739,14 @@ if(!affected_mob.blood_volume) return + // NOVA EDIT CHANGE BEGIN -- Adds check for owner_flags + var/owner_flags + if (iscarbon(affected_mob)) + var/mob/living/carbon/carbon_mob = affected_mob + owner_flags = carbon_mob.dna.species.reagent_flags + if (!isnull(owner_flags) && !(owner_flags & PROCESS_ORGANIC)) + return + // NOVA EDIT CHANGE END if(SPT_PROB(7.5, seconds_per_tick)) affected_mob.losebreath += rand(2, 4) affected_mob.adjustOxyLoss(rand(1, 3), updating_health = FALSE, required_biotype = affected_biotype, required_respiration_type = affected_respiration_type) diff --git a/code/modules/reagents/chemistry/reagents/other_reagents.dm b/code/modules/reagents/chemistry/reagents/other_reagents.dm index ea069d51fc5..eae91eb38a5 100644 --- a/code/modules/reagents/chemistry/reagents/other_reagents.dm +++ b/code/modules/reagents/chemistry/reagents/other_reagents.dm @@ -642,31 +642,17 @@ exposed_human.skin_tone = "mixed3" //take current alien color and darken it slightly else if(HAS_TRAIT(exposed_human, TRAIT_MUTANT_COLORS) && !HAS_TRAIT(exposed_human, TRAIT_FIXED_MUTANT_COLORS)) - var/newcolor = "" - var/string = exposed_human.dna.features["mcolor"] - var/len = length(string) - var/char = "" - var/ascii = 0 - for(var/i=1, i <= len, i += length(char)) - char = string[i] - ascii = text2ascii(char) - switch(ascii) - if(48) - newcolor += "0" - if(49 to 57) - newcolor += ascii2text(ascii-1) //numbers 1 to 9 - if(97) - newcolor += "9" - if(98 to 102) - newcolor += ascii2text(ascii-1) //letters b to f lowercase - if(65) - newcolor += "9" - if(66 to 70) - newcolor += ascii2text(ascii+31) //letters B to F - translates to lowercase - else - break - if(ReadHSV(newcolor)[3] >= ReadHSV("#7F7F7F")[3]) - exposed_human.dna.features["mcolor"] = newcolor + var/list/existing_color = rgb2num(exposed_human.dna.features["mcolor"]) + var/list/darkened_color = list() + // Reduces each part of the color by 16 + for(var/channel in existing_color) + darkened_color += max(channel - 17, 0) + + var/new_color = rgb(darkened_color[1], darkened_color[2], darkened_color[3]) + var/list/new_hsv = rgb2hsv(new_color) + // Can't get too dark now + if(new_hsv[3] >= 50) + exposed_human.dna.features["mcolor"] = new_color exposed_human.update_body(is_creating = TRUE) if((methods & INGEST) && show_message) @@ -2570,7 +2556,7 @@ /datum/reagent/bz_metabolites/on_mob_life(mob/living/carbon/target, seconds_per_tick, times_fired) . = ..() if(target.mind) - var/datum/antagonist/changeling/changeling = target.mind.has_antag_datum(/datum/antagonist/changeling) + var/datum/antagonist/changeling/changeling = IS_CHANGELING(target) if(changeling) changeling.adjust_chemicals(-4 * REM * seconds_per_tick) //NOVA EDIT - BZ-BUFF-VS-LING - ORIGINAL: changeling.adjust_chemicals(-2 * REM * seconds_per_tick) @@ -2893,10 +2879,16 @@ taste_description = "tiny legs scuttling down the back of your throat" metabolization_rate = 5 * REAGENTS_METABOLISM //1u per second ph = 4.6 // Ants contain Formic Acid - /// How much damage the ants are going to be doing (rises with each tick the ants are in someone's body) - var/ant_damage = 0 + /// Number of ticks the ants have been in the person's body + var/ant_ticks = 0 + /// Amount of damage done per tick the ants have been in the person's system + var/ant_damage = 0.025 /// Tells the debuff how many ants we are being covered with. var/amount_left = 0 + /// Decal to spawn when spilled + var/ants_decal = /obj/effect/decal/cleanable/ants + /// Status effect applied by splashing ants + var/status_effect = /datum/status_effect/ants /// List of possible common statements to scream when eating ants var/static/list/ant_screams = list( "THEY'RE UNDER MY SKIN!!", @@ -2913,15 +2905,15 @@ /datum/reagent/ants/on_mob_life(mob/living/carbon/victim, seconds_per_tick) . = ..() - victim.adjustBruteLoss(max(0.1, round((ant_damage * 0.025),0.1))) //Scales with time. Roughly 32 brute with 100u. - ant_damage++ - if(ant_damage < 5) // Makes ant food a little more appetizing, since you won't be screaming as much. + victim.adjustBruteLoss(max(0.1, round((ant_ticks * ant_damage),0.1))) //Scales with time. Roughly 32 brute with 100u. + ant_ticks++ + if(ant_ticks < 5) // Makes ant food a little more appetizing, since you won't be screaming as much. return if(SPT_PROB(5, seconds_per_tick)) if(SPT_PROB(5, seconds_per_tick)) //Super rare statement - victim.say("AUGH NO NOT THE ANTS! NOT THE ANTS! AAAAUUGH THEY'RE IN MY EYES! MY EYES! AUUGH!!", forced = /datum/reagent/ants) + victim.say("AUGH NO NOT THE ANTS! NOT THE ANTS! AAAAUUGH THEY'RE IN MY EYES! MY EYES! AUUGH!!", forced = type) else - victim.say(pick(ant_screams), forced = /datum/reagent/ants) + victim.say(pick(ant_screams), forced = type) if(SPT_PROB(15, seconds_per_tick)) victim.emote("scream") if(SPT_PROB(2, seconds_per_tick)) // Stuns, but purges ants. @@ -2929,8 +2921,8 @@ /datum/reagent/ants/on_mob_end_metabolize(mob/living/living_anthill) . = ..() - ant_damage = 0 - to_chat(living_anthill, "You feel like the last of the ants are out of your system.") + ant_ticks = 0 + to_chat(living_anthill, span_notice("You feel like the last of the [name] are out of your system.")) /datum/reagent/ants/expose_mob(mob/living/exposed_mob, methods=TOUCH, reac_volume) . = ..() @@ -2938,7 +2930,7 @@ return if(methods & (PATCH|TOUCH|VAPOR)) amount_left = round(reac_volume,0.1) - exposed_mob.apply_status_effect(/datum/status_effect/ants, amount_left) + exposed_mob.apply_status_effect(status_effect, amount_left) /datum/reagent/ants/expose_obj(obj/exposed_obj, reac_volume) . = ..() @@ -2957,14 +2949,28 @@ if((reac_volume <= 10)) // Makes sure people don't duplicate ants. return - var/obj/effect/decal/cleanable/ants/pests = exposed_turf.spawn_unique_cleanable(/obj/effect/decal/cleanable/ants) + var/obj/effect/decal/cleanable/ants/pests = exposed_turf.spawn_unique_cleanable(ants_decal) if(!pests) return var/spilled_ants = (round(reac_volume,1) - 5) // To account for ant decals giving 3-5 ants on initialize. - pests.reagents.add_reagent(/datum/reagent/ants, spilled_ants) + pests.reagents.add_reagent(type, spilled_ants) pests.update_ant_damage() +/datum/reagent/ants/fire + name = "Fire ants" + description = "A rare mutation of space ants, born from the heat of a plasma fire. Their bites land a 3.7 on the Schmidt Pain Scale." + color = "#b51f1f" + taste_description = "tiny flaming legs scuttling down the back of your throat" + ant_damage = 0.05 // Roughly 64 brute with 100u + ants_decal = /obj/effect/decal/cleanable/ants/fire + status_effect = /datum/status_effect/ants/fire + +/datum/glass_style/drinking_glass/fire_ants + required_drink_type = /datum/reagent/ants/fire + name = "glass of fire ants" + desc = "This is a terrible idea." + //This is intended to a be a scarce reagent to gate certain drugs and toxins with. Do not put in a synthesizer. Renewable sources of this reagent should be inefficient. /datum/reagent/lead name = "Lead" diff --git a/code/modules/reagents/reagent_containers/cups/_cup.dm b/code/modules/reagents/reagent_containers/cups/_cup.dm index c8aa790fa15..47fcc4ddda3 100644 --- a/code/modules/reagents/reagent_containers/cups/_cup.dm +++ b/code/modules/reagents/reagent_containers/cups/_cup.dm @@ -126,6 +126,7 @@ var/trans = reagents.trans_to(target, amount_per_transfer_from_this, transferred_by = user) to_chat(user, span_notice("You transfer [trans] unit\s of the solution to [target].")) + SEND_SIGNAL(src, COMSIG_REAGENTS_CUP_TRANSFER_TO, target) else if(target.is_drainable()) //A dispenser. Transfer FROM it TO us. if(!target.reagents.total_volume) @@ -138,6 +139,7 @@ var/trans = target.reagents.trans_to(src, amount_per_transfer_from_this, transferred_by = user) to_chat(user, span_notice("You fill [src] with [trans] unit\s of the contents of [target].")) + SEND_SIGNAL(src, COMSIG_REAGENTS_CUP_TRANSFER_FROM, target) target.update_appearance() diff --git a/code/modules/reagents/reagent_containers/cups/drinkingglass.dm b/code/modules/reagents/reagent_containers/cups/drinkingglass.dm index 8745e61cd92..adcd2ff79fa 100644 --- a/code/modules/reagents/reagent_containers/cups/drinkingglass.dm +++ b/code/modules/reagents/reagent_containers/cups/drinkingglass.dm @@ -30,6 +30,7 @@ CALLBACK(src, PROC_REF(on_cup_reset)), \ base_container_type = base_container_type, \ ) + RegisterSignal(src, COMSIG_COMPONENT_CLEAN_ACT, PROC_REF(on_cleaned)) /obj/item/reagent_containers/cup/glass/drinkingglass/on_reagent_change(datum/reagents/holder, ...) . = ..() @@ -46,6 +47,22 @@ . = ..() fill_icon_thresholds ||= list(0) +/obj/item/reagent_containers/cup/glass/drinkingglass/examine(mob/user) + . = ..() + if(HAS_TRAIT(src, TRAIT_WAS_RENAMED)) + . += span_notice("This glass has been given a custom name. It can be removed by washing it.") + +/obj/item/reagent_containers/cup/glass/drinkingglass/proc/on_cleaned(obj/source_component, obj/source) + SIGNAL_HANDLER + if(!HAS_TRAIT(src, TRAIT_WAS_RENAMED)) + return + + REMOVE_TRAIT(src, TRAIT_WAS_RENAMED, SHAKER_LABEL_TRAIT) + REMOVE_TRAIT(src, TRAIT_WAS_RENAMED, PEN_LABEL_TRAIT) + name = initial(name) + desc = initial(desc) + update_appearance(UPDATE_NAME | UPDATE_DESC) + //Shot glasses!// // This lets us add shots in here instead of lumping them in with drinks because >logic // // The format for shots is the exact same as iconstates for the drinking glass, except you use a shot glass instead. // diff --git a/code/modules/reagents/reagent_containers/cups/drinks.dm b/code/modules/reagents/reagent_containers/cups/drinks.dm index 12a3d023c72..cba2f937da4 100644 --- a/code/modules/reagents/reagent_containers/cups/drinks.dm +++ b/code/modules/reagents/reagent_containers/cups/drinks.dm @@ -426,6 +426,7 @@ // itself), in Chemistry-Recipes.dm (for the reaction that changes the components into the drink), and here (for the drinking glass // icon states. + /obj/item/reagent_containers/cup/glass/shaker name = "shaker" desc = "A metal shaker to mix drinks in." @@ -435,14 +436,86 @@ amount_per_transfer_from_this = 10 volume = 100 isGlass = FALSE + /// Whether or not poured drinks should use custom names and descriptions + var/using_custom_drinks = FALSE + /// Name custom drinks will have + var/custom_drink_name = "Custom drink" + /// Description custom drinks will have + var/custom_drink_desc = "Mixed by your favourite bartender!" /obj/item/reagent_containers/cup/glass/shaker/Initialize(mapload) . = ..() + register_context() if(prob(10)) name = "\improper Nanotrasen 20th Anniversary Shaker" desc += " It has an emblazoned Nanotrasen logo on it." icon_state = "shaker_n" +/obj/item/reagent_containers/cup/glass/shaker/add_context(atom/source, list/context, obj/item/held_item, mob/user) + . = ..() + context[SCREENTIP_CONTEXT_ALT_LMB] = "[using_custom_drinks ? "Disable" : "Enable"] custom drinks" + return CONTEXTUAL_SCREENTIP_SET + +/obj/item/reagent_containers/cup/glass/shaker/examine(mob/user) + . = ..() + . += span_notice("Alt-click to [using_custom_drinks ? "disable" : "enable"] custom drink naming") + if(using_custom_drinks) + . += span_notice("Drinks poured from this shaker will have the following name: [custom_drink_name]") + . += span_notice("Drinks poured from this shaker will have the following description: [custom_drink_desc]") + +/obj/item/reagent_containers/cup/glass/shaker/AltClick(mob/user) + . = ..() + if(!user.can_perform_action(src, NEED_HANDS|FORBID_TELEKINESIS_REACH)) + return + + if(using_custom_drinks) + using_custom_drinks = FALSE + disable_custom_drinks() + balloon_alert(user, "custom drinks disabled") + return + + var/new_name = reject_bad_text(tgui_input_text(user, "Drink name", "Set drink name", custom_drink_name, 45, FALSE), 64) + if(!new_name) + balloon_alert(user, "invalid drink name!") + using_custom_drinks = FALSE + return + + if(!user.can_perform_action(src, NEED_HANDS|FORBID_TELEKINESIS_REACH)) + return + + var/new_desc = reject_bad_text(tgui_input_text(user, "Drink description", "Set drink description", custom_drink_desc, 64, TRUE), 128) + if(!new_desc) + balloon_alert(user, "invalid drink description!") + using_custom_drinks = FALSE + return + + if(!user.can_perform_action(src, NEED_HANDS|FORBID_TELEKINESIS_REACH)) + return + + using_custom_drinks = TRUE + custom_drink_name = new_name + custom_drink_desc = new_desc + + enable_custom_drinks() + balloon_alert(user, "now pouring custom drinks") + +/obj/item/reagent_containers/cup/glass/shaker/proc/enable_custom_drinks() + RegisterSignal(src, COMSIG_REAGENTS_CUP_TRANSFER_TO, PROC_REF(handle_transfer)) + +/obj/item/reagent_containers/cup/glass/shaker/proc/disable_custom_drinks() + UnregisterSignal(src, COMSIG_REAGENTS_CUP_TRANSFER_TO) + +/obj/item/reagent_containers/cup/glass/shaker/proc/handle_transfer(atom/origin, atom/target) + SIGNAL_HANDLER + // Should only work on drinking/shot glasses + if(!istype(target, /obj/item/reagent_containers/cup/glass/drinkingglass)) + return + + var/obj/item/reagent_containers/cup/glass/drinkingglass/target_glass = target + target_glass.name = custom_drink_name + target_glass.desc = custom_drink_desc + ADD_TRAIT(target_glass, TRAIT_WAS_RENAMED, SHAKER_LABEL_TRAIT) + /obj/item/reagent_containers/cup/glass/flask name = "flask" desc = "Every good spaceman knows it's a good idea to bring along a couple of pints of whiskey wherever they go." diff --git a/code/modules/reagents/reagent_containers/hypospray.dm b/code/modules/reagents/reagent_containers/hypospray.dm index af246ae6e67..4cbb4839416 100644 --- a/code/modules/reagents/reagent_containers/hypospray.dm +++ b/code/modules/reagents/reagent_containers/hypospray.dm @@ -352,3 +352,11 @@ volume = 15 amount_per_transfer_from_this = 15 list_reagents = list(/datum/reagent/medicine/mutadone = 15) + +/obj/item/reagent_containers/hypospray/medipen/penthrite + name = "penthrite autoinjector" + desc = "Experimental heart medication." + icon_state = "atropen" + inhand_icon_state = "atropen" + base_icon_state = "atropen" + list_reagents = list(/datum/reagent/medicine/c2/penthrite = 10) diff --git a/code/modules/reagents/reagent_containers/syringes.dm b/code/modules/reagents/reagent_containers/syringes.dm index 4366482460e..3bff3a3abba 100644 --- a/code/modules/reagents/reagent_containers/syringes.dm +++ b/code/modules/reagents/reagent_containers/syringes.dm @@ -267,6 +267,12 @@ list_reagents = list((toxin_to_get) = 5) return ..() +/obj/item/reagent_containers/syringe/crude/mushroom + list_reagents = list(/datum/reagent/drug/mushroomhallucinogen = 5) + +/obj/item/reagent_containers/syringe/crude/blastoff + list_reagents = list(/datum/reagent/drug/blastoff = 5) + /obj/item/reagent_containers/syringe/spider_extract name = "spider extract syringe" desc = "Contains crikey juice - makes any gold core create the most deadly companions in the world." diff --git a/code/modules/reagents/reagent_dispenser.dm b/code/modules/reagents/reagent_dispenser.dm index 14b7abaaa9a..711b4322187 100644 --- a/code/modules/reagents/reagent_dispenser.dm +++ b/code/modules/reagents/reagent_dispenser.dm @@ -31,6 +31,8 @@ var/mutable_appearance/assembliesoverlay /// The person who attached an assembly to this dispenser, for bomb logging purposes var/last_rigger = "" + /// is it climbable? some of our wall-mounted dispensers should not have this + var/climbable = FALSE // This check is necessary for assemblies to automatically detect that we are compatible /obj/structure/reagent_dispensers/IsSpecialAssembly() @@ -53,6 +55,9 @@ if(icon_state == "water" && check_holidays(APRIL_FOOLS)) icon_state = "water_fools" + if(climbable) + AddElement(/datum/element/climbable, climb_time = 4 SECONDS, climb_stun = 4 SECONDS) + AddElement(/datum/element/elevation, pixel_shift = 14) /obj/structure/reagent_dispensers/examine(mob/user) . = ..() @@ -236,6 +241,7 @@ desc = "A water tank." icon_state = "water" openable = TRUE + climbable = TRUE /obj/structure/reagent_dispensers/watertank/high name = "high-capacity water tank" @@ -250,6 +256,7 @@ reagent_id = /datum/reagent/firefighting_foam tank_volume = 500 openable = TRUE + climbable = TRUE /obj/structure/reagent_dispensers/fueltank//NOVA EDIT - ICON OVERRIDEN BY AESTHETICS - SEE MODULE name = "fuel tank" @@ -258,6 +265,7 @@ reagent_id = /datum/reagent/fuel openable = TRUE accepts_rig = TRUE + climbable = TRUE /obj/structure/reagent_dispensers/fueltank/Initialize(mapload) . = ..() diff --git a/code/modules/reagents/withdrawal/generic_addictions.dm b/code/modules/reagents/withdrawal/generic_addictions.dm index b42345ae97d..4eabfa1095a 100644 --- a/code/modules/reagents/withdrawal/generic_addictions.dm +++ b/code/modules/reagents/withdrawal/generic_addictions.dm @@ -74,8 +74,8 @@ /datum/addiction/hallucinogens/withdrawal_enters_stage_2(mob/living/carbon/affected_carbon) . = ..() var/atom/movable/plane_master_controller/game_plane_master_controller = affected_carbon.hud_used.plane_master_controllers[PLANE_MASTERS_GAME] - game_plane_master_controller.add_filter("hallucinogen_wave", 10, wave_filter(300, 300, 3, 0, WAVE_SIDEWAYS)) game_plane_master_controller.add_filter("hallucinogen_blur", 10, angular_blur_filter(0, 0, 3)) + game_plane_master_controller.add_filter("hallucinogen_wave", 10, wave_filter(300, 300, 3, 0, WAVE_SIDEWAYS)) /datum/addiction/hallucinogens/withdrawal_enters_stage_3(mob/living/carbon/affected_carbon) diff --git a/code/modules/recycling/conveyor.dm b/code/modules/recycling/conveyor.dm index 14108f22bd9..cb008252037 100644 --- a/code/modules/recycling/conveyor.dm +++ b/code/modules/recycling/conveyor.dm @@ -92,6 +92,10 @@ GLOBAL_LIST_EMPTY(conveyors_by_id) if(.) set_operating(TRUE) +/obj/machinery/conveyor/auto/inverted + icon_state = "conveyor_map_inverted" + flipped = TRUE + // create a conveyor /obj/machinery/conveyor/Initialize(mapload, new_dir, new_id) ..() diff --git a/code/modules/recycling/disposal/bin.dm b/code/modules/recycling/disposal/bin.dm index cc0b100a1c0..1550e0ac968 100644 --- a/code/modules/recycling/disposal/bin.dm +++ b/code/modules/recycling/disposal/bin.dm @@ -61,7 +61,7 @@ RegisterSignal(src, COMSIG_RAT_INTERACT, PROC_REF(on_rat_rummage)) RegisterSignal(src, COMSIG_STORAGE_DUMP_CONTENT, PROC_REF(on_storage_dump)) var/static/list/loc_connections = list( - COMSIG_CARBON_DISARM_COLLIDE = PROC_REF(trash_carbon), + COMSIG_LIVING_DISARM_COLLIDE = PROC_REF(trash_living), COMSIG_TURF_RECEIVE_SWEEPED_ITEMS = PROC_REF(ready_for_trash), ) AddElement(/datum/element/connect_loc, loc_connections) @@ -276,39 +276,45 @@ H.vent_gas(loc) qdel(H) -/obj/machinery/disposal/deconstruct(disassembled = TRUE) +/obj/machinery/disposal/on_deconstruction(disassembled) var/turf/T = loc - if(!(obj_flags & NO_DECONSTRUCTION)) - if(stored) - var/obj/structure/disposalconstruct/construct = stored - stored = null - construct.forceMove(T) - transfer_fingerprints_to(construct) - construct.set_anchored(FALSE) - construct.set_density(TRUE) - construct.update_appearance() + if(stored) + var/obj/structure/disposalconstruct/construct = stored + stored = null + construct.forceMove(T) + transfer_fingerprints_to(construct) + construct.set_anchored(FALSE) + construct.set_density(TRUE) + construct.update_appearance() for(var/atom/movable/AM in src) //out, out, darned crowbar! AM.forceMove(T) - ..() ///How disposal handles getting a storage dump from a storage object -/obj/machinery/disposal/proc/on_storage_dump(datum/source, obj/item/storage_source, mob/user) +/obj/machinery/disposal/proc/on_storage_dump(datum/source, datum/storage/storage, mob/user) SIGNAL_HANDLER . = STORAGE_DUMP_HANDLED - to_chat(user, span_notice("You dump out [storage_source] into [src].")) + to_chat(user, span_notice("You dump out [storage.parent] into [src].")) - for(var/obj/item/to_dump in storage_source) - if(to_dump.loc != storage_source) - continue - if(user.active_storage != storage_source && to_dump.on_found(user)) + for(var/obj/item/to_dump in storage.real_location) + if(user.active_storage != storage && to_dump.on_found(user)) return - if(!storage_source.atom_storage.attempt_remove(to_dump, src, silent = TRUE)) + if(!storage.attempt_remove(to_dump, src, silent = TRUE)) continue to_dump.pixel_x = to_dump.base_pixel_x + rand(-5, 5) to_dump.pixel_y = to_dump.base_pixel_y + rand(-5, 5) +/obj/machinery/disposal/force_pushed(atom/movable/pusher, force = MOVE_FORCE_DEFAULT, direction) + . = ..() + visible_message(span_warning("[src] is ripped free from the floor!")) + deconstruct() + +/obj/machinery/disposal/move_crushed(atom/movable/pusher, force = MOVE_FORCE_DEFAULT, direction) + . = ..() + visible_message(span_warning("[src] is ripped free from the floor!")) + deconstruct() + // Disposal bin // Holds items for disposal into pipe system // Draws air from turf, gradually charges internal reservoir @@ -551,17 +557,17 @@ return COMPONENT_RAT_INTERACTED /// Handles a carbon mob getting shoved into the disposal bin -/obj/machinery/disposal/proc/trash_carbon(datum/source, mob/living/carbon/shover, mob/living/carbon/target, shove_blocked) +/obj/machinery/disposal/proc/trash_living(datum/source, mob/living/shover, mob/living/target, shove_flags, obj/item/weapon) SIGNAL_HANDLER - if(!shove_blocked) + if((shove_flags & SHOVE_KNOCKDOWN_BLOCKED) || !(shove_flags & SHOVE_BLOCKED)) return target.Knockdown(SHOVE_KNOCKDOWN_SOLID) target.forceMove(src) target.visible_message(span_danger("[shover.name] shoves [target.name] into \the [src]!"), - span_userdanger("You're shoved into \the [src] by [target.name]!"), span_hear("You hear aggressive shuffling followed by a loud thud!"), COMBAT_MESSAGE_RANGE, src) + span_userdanger("You're shoved into \the [src] by [target.name]!"), span_hear("You hear aggressive shuffling followed by a loud thud!"), COMBAT_MESSAGE_RANGE, shover) to_chat(src, span_danger("You shove [target.name] into \the [src]!")) - log_combat(shover, target, "shoved", "into [src] (disposal bin)") - return COMSIG_CARBON_SHOVE_HANDLED + log_combat(shover, target, "shoved", "into [src] (disposal bin)[weapon ? " with [weapon]" : ""]") + return COMSIG_LIVING_SHOVE_HANDLED ///Called when a push broom is trying to sweep items onto the turf this object is standing on. Garbage will be moved inside. /obj/machinery/disposal/proc/ready_for_trash(datum/source, obj/item/pushbroom/broom, mob/user, list/items_to_sweep) diff --git a/code/modules/recycling/disposal/construction.dm b/code/modules/recycling/disposal/construction.dm index b1556ca679f..4b8fef12924 100644 --- a/code/modules/recycling/disposal/construction.dm +++ b/code/modules/recycling/disposal/construction.dm @@ -33,12 +33,12 @@ pipename = initial(pipe_type.name) - AddComponent(/datum/component/simple_rotation, AfterRotation = CALLBACK(src, PROC_REF(AfterRotation))) + AddComponent(/datum/component/simple_rotation, post_rotation = CALLBACK(src, PROC_REF(post_rotation))) AddElement(/datum/element/undertile, TRAIT_T_RAY_VISIBLE) if(flip) var/datum/component/simple_rotation/rotcomp = GetComponent(/datum/component/simple_rotation) - rotcomp.Rotate(usr, ROTATION_FLIP) // this only gets used by pipes created by RPDs or pipe dispensers + rotcomp.rotate(usr, ROTATION_FLIP) // this only gets used by pipes created by RPDs or pipe dispensers update_appearance(UPDATE_ICON) @@ -86,7 +86,7 @@ dpdir |= REVERSE_DIR(dir) return dpdir -/obj/structure/disposalconstruct/proc/AfterRotation(mob/user, degrees) +/obj/structure/disposalconstruct/proc/post_rotation(mob/user, degrees) if(degrees == ROTATION_FLIP) var/obj/structure/disposalpipe/temp = pipe_type if(initial(temp.flip_type)) diff --git a/code/modules/recycling/disposal/outlet.dm b/code/modules/recycling/disposal/outlet.dm index 4fa9f1e0aab..6773e574d35 100644 --- a/code/modules/recycling/disposal/outlet.dm +++ b/code/modules/recycling/disposal/outlet.dm @@ -137,6 +137,24 @@ eject_range = EJECT_RANGE_YEET return TRUE +/obj/structure/disposaloutlet/force_pushed(atom/movable/pusher, force = MOVE_FORCE_DEFAULT, direction) + . = ..() + if(!isnull(stored)) + stored.forceMove(loc) + transfer_fingerprints_to(stored) + stored = null + visible_message(span_warning("[src] is ripped free from the floor!")) + qdel(src) + +/obj/structure/disposaloutlet/move_crushed(atom/movable/pusher, force = MOVE_FORCE_DEFAULT, direction) + . = ..() + if(!isnull(stored)) + stored.forceMove(loc) + transfer_fingerprints_to(stored) + stored = null + visible_message(span_warning("[src] is ripped free from the floor!")) + qdel(src) + #undef EJECT_SPEED_SLOW #undef EJECT_SPEED_MED #undef EJECT_SPEED_FAST diff --git a/code/modules/recycling/sortingmachinery.dm b/code/modules/recycling/sortingmachinery.dm index 785fab73097..10108c83048 100644 --- a/code/modules/recycling/sortingmachinery.dm +++ b/code/modules/recycling/sortingmachinery.dm @@ -1,5 +1,5 @@ /obj/item/delivery - icon = 'icons/obj/storage/wrapping.dmi' //ICON OVERRIDEN IN SKYRAT AESTHETICS - SEE MODULE + icon = 'icons/obj/storage/wrapping.dmi' inhand_icon_state = "deliverypackage" var/giftwrapped = 0 var/sort_tag = 0 diff --git a/code/modules/religion/burdened/psyker.dm b/code/modules/religion/burdened/psyker.dm index f43e33aa25a..bd063dea439 100644 --- a/code/modules/religion/burdened/psyker.dm +++ b/code/modules/religion/burdened/psyker.dm @@ -317,8 +317,8 @@ var/atom/movable/plane_master_controller/game_plane_master_controller = owner.hud_used?.plane_master_controllers[PLANE_MASTERS_GAME] if(!game_plane_master_controller) return FALSE - game_plane_master_controller.add_filter("psychic_wave", 10, wave_filter(240, 240, 3, 0, WAVE_SIDEWAYS)) game_plane_master_controller.add_filter("psychic_blur", 10, angular_blur_filter(0, 0, 3)) + game_plane_master_controller.add_filter("psychic_wave", 10, wave_filter(240, 240, 3, 0, WAVE_SIDEWAYS)) return TRUE /datum/status_effect/psychic_projection/on_remove() diff --git a/code/modules/religion/pyre/pyre_rites.dm b/code/modules/religion/pyre/pyre_rites.dm index c36783e6b12..79f95ad6af6 100644 --- a/code/modules/religion/pyre/pyre_rites.dm +++ b/code/modules/religion/pyre/pyre_rites.dm @@ -10,9 +10,9 @@ name = "Unmelting Protection" desc = "Grants fire immunity to any piece of clothing." ritual_length = 12 SECONDS - ritual_invocations = list("And so to support the holder of the Ever-Burning candle...", + ritual_invocations = list("And so to support the holder of the Ever-Burning candle ...", "... allow this unworthy apparel to serve you ...", - "... make it strong enough to burn a thousand time and more ...") + "... make it strong enough to burn a thousand times and more ...") invoke_msg = "... Come forth in your new form, and join the unmelting wax of the one true flame!" favor_cost = 1000 ///the piece of clothing that will be fireproofed, only one per rite diff --git a/code/modules/research/anomaly/anomaly_refinery.dm b/code/modules/research/anomaly/anomaly_refinery.dm index 533443a1995..1805a252318 100644 --- a/code/modules/research/anomaly/anomaly_refinery.dm +++ b/code/modules/research/anomaly/anomaly_refinery.dm @@ -295,7 +295,7 @@ return FALSE tank_to_target = (tank_to_target == inserted_bomb.tank_one) ? inserted_bomb.tank_two : inserted_bomb.tank_one -/obj/machinery/research/anomaly_refinery/on_deconstruction() +/obj/machinery/research/anomaly_refinery/on_deconstruction(disassembled) eject_bomb() eject_core() return ..() diff --git a/code/modules/research/designs.dm b/code/modules/research/designs.dm index a7124bf122b..ce68dd8d454 100644 --- a/code/modules/research/designs.dm +++ b/code/modules/research/designs.dm @@ -32,7 +32,7 @@ other types of metals and chemistry for reagents). /// List of materials required to create one unit of the product. Format is (typepath or caregory) -> amount var/list/materials = list() /// The amount of time required to create one unit of the product. - var/construction_time + var/construction_time = 3.2 SECONDS /// The typepath of the object produced by this design var/build_path = null /// Reagent produced by this design. Currently only supported by the biogenerator. diff --git a/code/modules/research/designs/autolathe/mining.dm b/code/modules/research/designs/autolathe/mining.dm new file mode 100644 index 00000000000..bc83d27123d --- /dev/null +++ b/code/modules/research/designs/autolathe/mining.dm @@ -0,0 +1,32 @@ +// Autolathe-able circuitboards for starting with boulder processing machines. +/datum/design/board/smelter + name = "Boulder Smelter" + desc = "A circuitboard for a boulder smelter. Lowtech enough to be printed from the lathe." + id = "b_smelter" + build_type = AUTOLATHE + materials = list( + /datum/material/glass = SHEET_MATERIAL_AMOUNT, + /datum/material/iron = SHEET_MATERIAL_AMOUNT, + ) + build_path = /obj/item/circuitboard/machine/smelter + category = list( + RND_CATEGORY_INITIAL, + RND_CATEGORY_MACHINE + RND_SUBCATEGORY_MACHINE_CARGO, + ) + departmental_flags = DEPARTMENT_BITFLAG_CARGO + +/datum/design/board/refinery + name = "Boulder Refinery" + desc = "A circuitboard for a boulder refinery. Lowtech enough to be printed from the lathe." + id = "b_refinery" + build_type = AUTOLATHE + materials = list( + /datum/material/glass = SHEET_MATERIAL_AMOUNT, + /datum/material/iron = SHEET_MATERIAL_AMOUNT, + ) + build_path = /obj/item/circuitboard/machine/refinery + category = list( + RND_CATEGORY_INITIAL, + RND_CATEGORY_MACHINE + RND_SUBCATEGORY_MACHINE_CARGO, + ) + departmental_flags = DEPARTMENT_BITFLAG_CARGO diff --git a/code/modules/research/designs/autolathe/service_designs.dm b/code/modules/research/designs/autolathe/service_designs.dm index cccef8e740d..6b8d7f474fc 100644 --- a/code/modules/research/designs/autolathe/service_designs.dm +++ b/code/modules/research/designs/autolathe/service_designs.dm @@ -580,3 +580,14 @@ RND_CATEGORY_CONSTRUCTION + RND_SUBCATEGORY_CONSTRUCTION_MOUNTS, ) departmental_flags = DEPARTMENT_BITFLAG_SERVICE + +/datum/design/barcode_scanner + name = "Barcode Scanner" + id = "barcode_scanner" + build_type = PROTOLATHE | AWAY_LATHE + materials = list(/datum/material/iron = SHEET_MATERIAL_AMOUNT * 2) + build_path = /obj/item/barcodescanner + category = list( + RND_CATEGORY_TOOLS + RND_SUBCATEGORY_TOOLS_SERVICE, + ) + departmental_flags = DEPARTMENT_BITFLAG_SERVICE diff --git a/code/modules/research/designs/machine_designs.dm b/code/modules/research/designs/machine_designs.dm index 11e6f026f68..a73b4459333 100644 --- a/code/modules/research/designs/machine_designs.dm +++ b/code/modules/research/designs/machine_designs.dm @@ -1135,3 +1135,16 @@ RND_CATEGORY_MACHINE + RND_SUBCATEGORY_MACHINE_SERVICE ) departmental_flags = DEPARTMENT_BITFLAG_SERVICE | DEPARTMENT_BITFLAG_CARGO | DEPARTMENT_BITFLAG_SCIENCE + +/datum/design/board/brm + name = "Boulder Retrieval Matrix" + id = "brm" + materials = list( + /datum/material/glass = SHEET_MATERIAL_AMOUNT, + ) + build_path = /obj/item/circuitboard/machine/brm + category = list( + RND_CATEGORY_INITIAL, + RND_CATEGORY_MACHINE + RND_SUBCATEGORY_MACHINE_TELEPORT, + ) + departmental_flags = DEPARTMENT_BITFLAG_CARGO diff --git a/code/modules/research/designs/mecha_designs.dm b/code/modules/research/designs/mecha_designs.dm index 098cac6a389..21deb54280c 100644 --- a/code/modules/research/designs/mecha_designs.dm +++ b/code/modules/research/designs/mecha_designs.dm @@ -226,7 +226,7 @@ build_type = MECHFAB build_path = /obj/item/mecha_parts/mecha_equipment/weapon/ballistic/scattershot materials = list(/datum/material/iron=SHEET_MATERIAL_AMOUNT*5) - construction_time = 100 + construction_time = 10 SECONDS category = list( RND_CATEGORY_MECHFAB_EQUIPMENT + RND_SUBCATEGORY_MECHFAB_EQUIPMENT_WEAPONS, RND_CATEGORY_MECHFAB_PADDY + RND_SUBCATEGORY_MECHFAB_SUPPORTED_EQUIPMENT, @@ -244,7 +244,7 @@ build_type = MECHFAB build_path = /obj/item/mecha_ammo/scattershot materials = list(/datum/material/iron=SHEET_MATERIAL_AMOUNT*3) - construction_time = 20 + construction_time = 2 SECONDS category = list( RND_CATEGORY_MECHFAB_EQUIPMENT + RND_SUBCATEGORY_MECHFAB_EQUIPMENT_WEAPONS, RND_CATEGORY_MECHFAB_PADDY + RND_SUBCATEGORY_MECHFAB_SUPPORTED_EQUIPMENT, @@ -262,7 +262,7 @@ build_type = MECHFAB build_path = /obj/item/mecha_parts/mecha_equipment/weapon/ballistic/carbine materials = list(/datum/material/iron=SHEET_MATERIAL_AMOUNT*5) - construction_time = 100 + construction_time = 10 SECONDS category = list( RND_CATEGORY_MECHFAB_EQUIPMENT + RND_SUBCATEGORY_MECHFAB_EQUIPMENT_WEAPONS, RND_CATEGORY_MECHFAB_PADDY + RND_SUBCATEGORY_MECHFAB_SUPPORTED_EQUIPMENT, @@ -280,7 +280,7 @@ build_type = MECHFAB build_path = /obj/item/mecha_ammo/incendiary materials = list(/datum/material/iron=SHEET_MATERIAL_AMOUNT*3) - construction_time = 20 + construction_time = 2 SECONDS category = list( RND_CATEGORY_MECHFAB_EQUIPMENT + RND_SUBCATEGORY_MECHFAB_EQUIPMENT_WEAPONS, RND_CATEGORY_MECHFAB_PADDY + RND_SUBCATEGORY_MECHFAB_SUPPORTED_EQUIPMENT, @@ -298,7 +298,7 @@ build_type = MECHFAB build_path = /obj/item/mecha_parts/mecha_equipment/weapon/energy/ion materials = list(/datum/material/iron=SHEET_MATERIAL_AMOUNT*10,/datum/material/silver=SHEET_MATERIAL_AMOUNT*3,/datum/material/uranium=SHEET_MATERIAL_AMOUNT) - construction_time = 100 + construction_time = 10 SECONDS category = list( RND_CATEGORY_MECHFAB_EQUIPMENT + RND_SUBCATEGORY_MECHFAB_EQUIPMENT_WEAPONS, RND_CATEGORY_MECHFAB_PADDY + RND_SUBCATEGORY_MECHFAB_SUPPORTED_EQUIPMENT, @@ -316,7 +316,7 @@ build_type = MECHFAB build_path = /obj/item/mecha_parts/mecha_equipment/weapon/energy/tesla materials = list(/datum/material/iron=SHEET_MATERIAL_AMOUNT*10,/datum/material/silver=SHEET_MATERIAL_AMOUNT*4) - construction_time = 100 + construction_time = 10 SECONDS category = list( RND_CATEGORY_MECHFAB_EQUIPMENT + RND_SUBCATEGORY_MECHFAB_EQUIPMENT_WEAPONS, RND_CATEGORY_MECHFAB_PADDY + RND_SUBCATEGORY_MECHFAB_SUPPORTED_EQUIPMENT, @@ -334,7 +334,7 @@ build_type = MECHFAB build_path = /obj/item/mecha_parts/mecha_equipment/weapon/energy/laser materials = list(/datum/material/iron=SHEET_MATERIAL_AMOUNT*5) - construction_time = 100 + construction_time = 10 SECONDS category = list( RND_CATEGORY_MECHFAB_EQUIPMENT + RND_SUBCATEGORY_MECHFAB_EQUIPMENT_WEAPONS, RND_CATEGORY_MECHFAB_PADDY + RND_SUBCATEGORY_MECHFAB_SUPPORTED_EQUIPMENT, @@ -352,7 +352,7 @@ build_type = MECHFAB build_path = /obj/item/mecha_parts/mecha_equipment/weapon/energy/laser/heavy materials = list(/datum/material/iron=SHEET_MATERIAL_AMOUNT*5) - construction_time = 100 + construction_time = 10 SECONDS category = list( RND_CATEGORY_MECHFAB_EQUIPMENT + RND_SUBCATEGORY_MECHFAB_EQUIPMENT_WEAPONS, RND_CATEGORY_MECHFAB_PADDY + RND_SUBCATEGORY_MECHFAB_SUPPORTED_EQUIPMENT, @@ -370,7 +370,7 @@ build_type = MECHFAB build_path = /obj/item/mecha_parts/mecha_equipment/weapon/energy/disabler materials = list(/datum/material/iron=SHEET_MATERIAL_AMOUNT*5) - construction_time = 100 + construction_time = 10 SECONDS category = list( RND_CATEGORY_MECHFAB_EQUIPMENT + RND_SUBCATEGORY_MECHFAB_EQUIPMENT_WEAPONS, RND_CATEGORY_MECHFAB_PADDY + RND_SUBCATEGORY_MECHFAB_SUPPORTED_EQUIPMENT, @@ -388,7 +388,7 @@ build_type = MECHFAB build_path = /obj/item/mecha_parts/mecha_equipment/weapon/ballistic/launcher/flashbang materials = list(/datum/material/iron=SHEET_MATERIAL_AMOUNT*11,/datum/material/gold=SHEET_MATERIAL_AMOUNT*3,/datum/material/silver=SHEET_MATERIAL_AMOUNT*4) - construction_time = 100 + construction_time = 10 SECONDS category = list( RND_CATEGORY_MECHFAB_EQUIPMENT + RND_SUBCATEGORY_MECHFAB_EQUIPMENT_WEAPONS, RND_CATEGORY_MECHFAB_PADDY + RND_SUBCATEGORY_MECHFAB_SUPPORTED_EQUIPMENT, @@ -406,7 +406,7 @@ build_type = MECHFAB build_path = /obj/item/mecha_ammo/flashbang materials = list(/datum/material/iron=SHEET_MATERIAL_AMOUNT*2,/datum/material/gold=SMALL_MATERIAL_AMOUNT*5) - construction_time = 20 + construction_time = 2 SECONDS category = list( RND_CATEGORY_MECHFAB_EQUIPMENT + RND_SUBCATEGORY_MECHFAB_EQUIPMENT_WEAPONS, RND_CATEGORY_MECHFAB_PADDY + RND_SUBCATEGORY_MECHFAB_SUPPORTED_EQUIPMENT, @@ -424,7 +424,7 @@ build_type = MECHFAB build_path = /obj/item/mecha_parts/mecha_equipment/weapon/ballistic/missile_rack/breaching materials = list(/datum/material/iron=SHEET_MATERIAL_AMOUNT*11,/datum/material/gold=SHEET_MATERIAL_AMOUNT*3,/datum/material/silver=SHEET_MATERIAL_AMOUNT*4) - construction_time = 100 + construction_time = 10 SECONDS category = list( RND_CATEGORY_MECHFAB_EQUIPMENT + RND_SUBCATEGORY_MECHFAB_EQUIPMENT_WEAPONS, RND_CATEGORY_MECHFAB_PADDY + RND_SUBCATEGORY_MECHFAB_SUPPORTED_EQUIPMENT, @@ -442,7 +442,7 @@ build_type = MECHFAB build_path = /obj/item/mecha_ammo/missiles_pep materials = list(/datum/material/iron=SHEET_MATERIAL_AMOUNT*4,/datum/material/gold=SMALL_MATERIAL_AMOUNT*5) - construction_time = 20 + construction_time = 2 SECONDS category = list( RND_CATEGORY_MECHFAB_EQUIPMENT + RND_SUBCATEGORY_MECHFAB_EQUIPMENT_WEAPONS, RND_CATEGORY_MECHFAB_PADDY + RND_SUBCATEGORY_MECHFAB_SUPPORTED_EQUIPMENT, @@ -460,7 +460,7 @@ build_type = MECHFAB build_path = /obj/item/mecha_parts/mecha_equipment/weapon/ballistic/launcher/flashbang/clusterbang materials = list(/datum/material/iron=SHEET_MATERIAL_AMOUNT*10,/datum/material/gold=SHEET_MATERIAL_AMOUNT*5,/datum/material/uranium=SHEET_MATERIAL_AMOUNT*5) - construction_time = 100 + construction_time = 10 SECONDS category = list( RND_CATEGORY_MECHFAB_EQUIPMENT + RND_SUBCATEGORY_MECHFAB_EQUIPMENT_WEAPONS, RND_CATEGORY_MECHFAB_PADDY + RND_SUBCATEGORY_MECHFAB_SUPPORTED_EQUIPMENT, @@ -478,7 +478,7 @@ build_type = MECHFAB build_path = /obj/item/mecha_ammo/clusterbang materials = list(/datum/material/iron=SHEET_MATERIAL_AMOUNT*3,/datum/material/gold=HALF_SHEET_MATERIAL_AMOUNT * 1.5,/datum/material/uranium=HALF_SHEET_MATERIAL_AMOUNT * 1.5) - construction_time = 20 + construction_time = 2 SECONDS category = list( RND_CATEGORY_MECHFAB_EQUIPMENT + RND_SUBCATEGORY_MECHFAB_EQUIPMENT_WEAPONS, RND_CATEGORY_MECHFAB_PADDY + RND_SUBCATEGORY_MECHFAB_SUPPORTED_EQUIPMENT, @@ -496,7 +496,7 @@ build_type = MECHFAB build_path = /obj/item/mecha_parts/mecha_equipment/wormhole_generator materials = list(/datum/material/iron=SHEET_MATERIAL_AMOUNT*5) - construction_time = 100 + construction_time = 10 SECONDS category = list( RND_CATEGORY_MECHFAB_EQUIPMENT + RND_SUBCATEGORY_MECHFAB_EQUIPMENT_MISC, RND_CATEGORY_MECHFAB_RIPLEY + RND_SUBCATEGORY_MECHFAB_SUPPORTED_EQUIPMENT, @@ -517,7 +517,7 @@ build_type = MECHFAB build_path = /obj/item/mecha_parts/mecha_equipment/teleporter materials = list(/datum/material/iron=SHEET_MATERIAL_AMOUNT*5,/datum/material/diamond=SHEET_MATERIAL_AMOUNT*5) - construction_time = 100 + construction_time = 10 SECONDS category = list( RND_CATEGORY_MECHFAB_EQUIPMENT + RND_SUBCATEGORY_MECHFAB_EQUIPMENT_MISC, RND_CATEGORY_MECHFAB_RIPLEY + RND_SUBCATEGORY_MECHFAB_SUPPORTED_EQUIPMENT, @@ -538,7 +538,7 @@ build_type = MECHFAB build_path = /obj/item/mecha_parts/mecha_equipment/rcd materials = list(/datum/material/iron=SHEET_MATERIAL_AMOUNT*15,/datum/material/gold=SHEET_MATERIAL_AMOUNT*10,/datum/material/plasma=SHEET_MATERIAL_AMOUNT*12.5,/datum/material/silver=SHEET_MATERIAL_AMOUNT*10) - construction_time = 1200 + construction_time = 2 MINUTES category = list( RND_CATEGORY_MECHFAB_EQUIPMENT + RND_SUBCATEGORY_MECHFAB_EQUIPMENT_MISC, RND_CATEGORY_MECHFAB_RIPLEY + RND_SUBCATEGORY_MECHFAB_SUPPORTED_EQUIPMENT, @@ -559,7 +559,7 @@ build_type = MECHFAB build_path = /obj/item/mecha_parts/mecha_equipment/thrusters/gas materials = list(/datum/material/iron=SHEET_MATERIAL_AMOUNT*12.5,/datum/material/titanium=SHEET_MATERIAL_AMOUNT * 2.5,/datum/material/silver=SHEET_MATERIAL_AMOUNT*1.5) - construction_time = 100 + construction_time = 10 SECONDS category = list( RND_CATEGORY_MECHFAB_EQUIPMENT + RND_SUBCATEGORY_MECHFAB_EQUIPMENT_MODULES, RND_CATEGORY_MECHFAB_RIPLEY + RND_SUBCATEGORY_MECHFAB_SUPPORTED_EQUIPMENT, @@ -579,7 +579,7 @@ build_type = MECHFAB build_path = /obj/item/mecha_parts/mecha_equipment/gravcatapult materials = list(/datum/material/iron=SHEET_MATERIAL_AMOUNT*5) - construction_time = 100 + construction_time = 10 SECONDS category = list( RND_CATEGORY_MECHFAB_EQUIPMENT + RND_SUBCATEGORY_MECHFAB_EQUIPMENT_MISC, RND_CATEGORY_MECHFAB_RIPLEY + RND_SUBCATEGORY_MECHFAB_SUPPORTED_EQUIPMENT, @@ -600,7 +600,7 @@ build_type = MECHFAB build_path = /obj/item/mecha_parts/mecha_equipment/repair_droid materials = list(/datum/material/iron=SHEET_MATERIAL_AMOUNT*5,/datum/material/glass =SHEET_MATERIAL_AMOUNT * 2.5,/datum/material/gold=HALF_SHEET_MATERIAL_AMOUNT,/datum/material/silver=SHEET_MATERIAL_AMOUNT) - construction_time = 100 + construction_time = 10 SECONDS category = list( RND_CATEGORY_MECHFAB_EQUIPMENT + RND_SUBCATEGORY_MECHFAB_EQUIPMENT_MODULES, RND_CATEGORY_MECHFAB_RIPLEY + RND_SUBCATEGORY_MECHFAB_SUPPORTED_EQUIPMENT, @@ -621,7 +621,7 @@ build_type = MECHFAB build_path = /obj/item/mecha_parts/mecha_equipment/armor/anticcw_armor_booster materials = list(/datum/material/iron=SHEET_MATERIAL_AMOUNT*10,/datum/material/silver=SHEET_MATERIAL_AMOUNT * 2.5) - construction_time = 100 + construction_time = 10 SECONDS category = list( RND_CATEGORY_MECHFAB_EQUIPMENT + RND_SUBCATEGORY_MECHFAB_EQUIPMENT_MODULES, RND_CATEGORY_MECHFAB_RIPLEY + RND_SUBCATEGORY_MECHFAB_SUPPORTED_EQUIPMENT, @@ -642,7 +642,7 @@ build_type = MECHFAB build_path = /obj/item/mecha_parts/mecha_equipment/armor/antiproj_armor_booster materials = list(/datum/material/iron=SHEET_MATERIAL_AMOUNT*10,/datum/material/gold=SHEET_MATERIAL_AMOUNT * 2.5) - construction_time = 100 + construction_time = 10 SECONDS category = list( RND_CATEGORY_MECHFAB_EQUIPMENT + RND_SUBCATEGORY_MECHFAB_EQUIPMENT_MODULES, RND_CATEGORY_MECHFAB_RIPLEY + RND_SUBCATEGORY_MECHFAB_SUPPORTED_EQUIPMENT, @@ -663,7 +663,7 @@ build_type = MECHFAB build_path = /obj/item/mecha_parts/mecha_equipment/drill/diamonddrill materials = list(/datum/material/iron=SHEET_MATERIAL_AMOUNT*5,/datum/material/diamond=SHEET_MATERIAL_AMOUNT*3.25) - construction_time = 100 + construction_time = 10 SECONDS category = list( RND_CATEGORY_MECHFAB_EQUIPMENT + RND_SUBCATEGORY_MECHFAB_EQUIPMENT_MINING, RND_CATEGORY_MECHFAB_RIPLEY + RND_SUBCATEGORY_MECHFAB_EQUIPMENT_MINING, @@ -678,7 +678,7 @@ build_type = MECHFAB build_path = /obj/item/mecha_parts/mecha_equipment/weapon/energy/plasma materials = list(/datum/material/iron = SHEET_MATERIAL_AMOUNT*4, /datum/material/glass =HALF_SHEET_MATERIAL_AMOUNT, /datum/material/plasma =SHEET_MATERIAL_AMOUNT) - construction_time = 100 + construction_time = 10 SECONDS category = list( RND_CATEGORY_MECHFAB_EQUIPMENT + RND_SUBCATEGORY_MECHFAB_EQUIPMENT_MINING, RND_CATEGORY_MECHFAB_RIPLEY + RND_SUBCATEGORY_MECHFAB_SUPPORTED_EQUIPMENT, @@ -698,7 +698,7 @@ build_type = MECHFAB build_path = /obj/item/mecha_parts/mecha_equipment/weapon/energy/mecha_kineticgun materials = list(/datum/material/iron = SHEET_MATERIAL_AMOUNT*4, /datum/material/glass =HALF_SHEET_MATERIAL_AMOUNT) - construction_time = 100 + construction_time = 10 SECONDS category = list( RND_CATEGORY_MECHFAB_EQUIPMENT + RND_SUBCATEGORY_MECHFAB_EQUIPMENT_MINING, RND_CATEGORY_MECHFAB_RIPLEY + RND_SUBCATEGORY_MECHFAB_SUPPORTED_EQUIPMENT, @@ -718,7 +718,7 @@ build_type = MECHFAB build_path = /obj/item/mecha_parts/mecha_equipment/weapon/ballistic/lmg materials = list(/datum/material/iron=SHEET_MATERIAL_AMOUNT*5) - construction_time = 100 + construction_time = 10 SECONDS category = list( RND_CATEGORY_MECHFAB_EQUIPMENT + RND_SUBCATEGORY_MECHFAB_EQUIPMENT_MINING, RND_CATEGORY_MECHFAB_PADDY + RND_SUBCATEGORY_MECHFAB_SUPPORTED_EQUIPMENT, @@ -735,7 +735,7 @@ build_type = MECHFAB build_path = /obj/item/mecha_ammo/lmg materials = list(/datum/material/iron= SHEET_MATERIAL_AMOUNT *2) - construction_time = 20 + construction_time = 2 SECONDS category = list( RND_CATEGORY_MECHFAB_EQUIPMENT + RND_SUBCATEGORY_MECHFAB_EQUIPMENT_MINING, RND_CATEGORY_MECHFAB_PADDY + RND_SUBCATEGORY_MECHFAB_SUPPORTED_EQUIPMENT, @@ -752,7 +752,7 @@ build_type = MECHFAB build_path = /obj/item/mecha_parts/mecha_equipment/medical/sleeper materials = list(/datum/material/iron=SHEET_MATERIAL_AMOUNT * 2.5, /datum/material/glass = SHEET_MATERIAL_AMOUNT*5) - construction_time = 100 + construction_time = 10 SECONDS category = list( RND_CATEGORY_MECHFAB_EQUIPMENT + RND_SUBCATEGORY_MECHFAB_EQUIPMENT_MEDICAL, RND_CATEGORY_MECHFAB_ODYSSEUS + RND_SUBCATEGORY_MECHFAB_SUPPORTED_EQUIPMENT @@ -766,7 +766,7 @@ build_type = MECHFAB build_path = /obj/item/mecha_parts/mecha_equipment/medical/syringe_gun materials = list(/datum/material/iron=SHEET_MATERIAL_AMOUNT*1.5, /datum/material/glass =SHEET_MATERIAL_AMOUNT) - construction_time = 200 + construction_time = 20 SECONDS category = list( RND_CATEGORY_MECHFAB_EQUIPMENT + RND_SUBCATEGORY_MECHFAB_EQUIPMENT_MEDICAL, RND_CATEGORY_MECHFAB_ODYSSEUS + RND_SUBCATEGORY_MECHFAB_SUPPORTED_EQUIPMENT @@ -779,7 +779,7 @@ id = "mech_medi_beam" build_type = MECHFAB materials = list(/datum/material/iron = SHEET_MATERIAL_AMOUNT*7.5, /datum/material/glass = SHEET_MATERIAL_AMOUNT*4, /datum/material/plasma =SHEET_MATERIAL_AMOUNT*1.5, /datum/material/gold = SHEET_MATERIAL_AMOUNT*4, /datum/material/diamond =SHEET_MATERIAL_AMOUNT) - construction_time = 250 + construction_time = 25 SECONDS build_path = /obj/item/mecha_parts/mecha_equipment/medical/mechmedbeam category = list( RND_CATEGORY_MECHFAB_EQUIPMENT + RND_SUBCATEGORY_MECHFAB_EQUIPMENT_MEDICAL, diff --git a/code/modules/research/designs/mechfabricator_designs.dm b/code/modules/research/designs/mechfabricator_designs.dm index 38d9f1700cb..e73dccf3b49 100644 --- a/code/modules/research/designs/mechfabricator_designs.dm +++ b/code/modules/research/designs/mechfabricator_designs.dm @@ -7,7 +7,7 @@ build_type = MECHFAB build_path = /obj/item/robot_suit materials = list(/datum/material/iron=SHEET_MATERIAL_AMOUNT*7.5) - construction_time = 500 + construction_time = 50 SECONDS category = list( RND_CATEGORY_MECHFAB_CYBORG + RND_SUBCATEGORY_MECHFAB_CYBORG_CHASSIS ) @@ -18,7 +18,7 @@ build_type = MECHFAB build_path = /obj/item/bodypart/chest/robot materials = list(/datum/material/iron= SHEET_MATERIAL_AMOUNT*20) - construction_time = 350 + construction_time = 35 SECONDS category = list( RND_CATEGORY_MECHFAB_CYBORG + RND_SUBCATEGORY_MECHFAB_CYBORG_CHASSIS ) @@ -29,7 +29,7 @@ build_type = MECHFAB build_path = /obj/item/bodypart/head/robot materials = list(/datum/material/iron=SHEET_MATERIAL_AMOUNT * 2.5) - construction_time = 350 + construction_time = 35 SECONDS category = list( RND_CATEGORY_MECHFAB_CYBORG + RND_SUBCATEGORY_MECHFAB_CYBORG_CHASSIS ) @@ -40,7 +40,7 @@ build_type = MECHFAB build_path = /obj/item/bodypart/arm/left/robot materials = list(/datum/material/iron=SHEET_MATERIAL_AMOUNT*5) - construction_time = 200 + construction_time = 20 SECONDS category = list( RND_CATEGORY_MECHFAB_CYBORG + RND_SUBCATEGORY_MECHFAB_CYBORG_CHASSIS ) @@ -51,7 +51,7 @@ build_type = MECHFAB build_path = /obj/item/bodypart/arm/right/robot materials = list(/datum/material/iron=SHEET_MATERIAL_AMOUNT*5) - construction_time = 200 + construction_time = 20 SECONDS category = list( RND_CATEGORY_MECHFAB_CYBORG + RND_SUBCATEGORY_MECHFAB_CYBORG_CHASSIS ) @@ -62,7 +62,7 @@ build_type = MECHFAB build_path = /obj/item/bodypart/leg/left/robot materials = list(/datum/material/iron=SHEET_MATERIAL_AMOUNT*5) - construction_time = 200 + construction_time = 20 SECONDS category = list( RND_CATEGORY_MECHFAB_CYBORG + RND_SUBCATEGORY_MECHFAB_CYBORG_CHASSIS ) @@ -73,7 +73,7 @@ build_type = MECHFAB build_path = /obj/item/bodypart/leg/right/robot materials = list(/datum/material/iron=SHEET_MATERIAL_AMOUNT*5) - construction_time = 200 + construction_time = 20 SECONDS category = list( RND_CATEGORY_MECHFAB_CYBORG + RND_SUBCATEGORY_MECHFAB_CYBORG_CHASSIS ) @@ -148,7 +148,7 @@ build_type = MECHFAB build_path = /obj/item/mecha_parts/chassis/ripley materials = list(/datum/material/iron=SHEET_MATERIAL_AMOUNT*10) - construction_time = 100 + construction_time = 10 SECONDS category = list( RND_CATEGORY_MECHFAB_RIPLEY + RND_SUBCATEGORY_MECHFAB_CHASSIS ) @@ -162,7 +162,7 @@ /datum/material/iron=SHEET_MATERIAL_AMOUNT*10, /datum/material/glass =SHEET_MATERIAL_AMOUNT*3.75, ) - construction_time = 200 + construction_time = 20 SECONDS category = list( RND_CATEGORY_MECHFAB_RIPLEY + RND_SUBCATEGORY_MECHFAB_CHASSIS ) @@ -173,7 +173,7 @@ build_type = MECHFAB build_path = /obj/item/mecha_parts/part/ripley_left_arm materials = list(/datum/material/iron=SHEET_MATERIAL_AMOUNT*7.5) - construction_time = 150 + construction_time = 15 SECONDS category = list( RND_CATEGORY_MECHFAB_RIPLEY + RND_SUBCATEGORY_MECHFAB_CHASSIS ) @@ -184,7 +184,7 @@ build_type = MECHFAB build_path = /obj/item/mecha_parts/part/ripley_right_arm materials = list(/datum/material/iron=SHEET_MATERIAL_AMOUNT*7.5) - construction_time = 150 + construction_time = 15 SECONDS category = list( RND_CATEGORY_MECHFAB_RIPLEY + RND_SUBCATEGORY_MECHFAB_CHASSIS ) @@ -195,7 +195,7 @@ build_type = MECHFAB build_path = /obj/item/mecha_parts/part/ripley_left_leg materials = list(/datum/material/iron=SHEET_MATERIAL_AMOUNT*7.5) - construction_time = 150 + construction_time = 15 SECONDS category = list( RND_CATEGORY_MECHFAB_RIPLEY + RND_SUBCATEGORY_MECHFAB_CHASSIS ) @@ -206,7 +206,7 @@ build_type = MECHFAB build_path = /obj/item/mecha_parts/part/ripley_right_leg materials = list(/datum/material/iron=SHEET_MATERIAL_AMOUNT*7.5) - construction_time = 150 + construction_time = 15 SECONDS category = list( RND_CATEGORY_MECHFAB_RIPLEY + RND_SUBCATEGORY_MECHFAB_CHASSIS ) @@ -218,7 +218,7 @@ build_type = MECHFAB build_path = /obj/item/mecha_parts/chassis/odysseus materials = list(/datum/material/iron=SHEET_MATERIAL_AMOUNT*10) - construction_time = 100 + construction_time = 10 SECONDS category = list( RND_CATEGORY_MECHFAB_ODYSSEUS + RND_SUBCATEGORY_MECHFAB_CHASSIS ) @@ -229,7 +229,7 @@ build_type = MECHFAB build_path = /obj/item/mecha_parts/part/odysseus_torso materials = list(/datum/material/iron=SHEET_MATERIAL_AMOUNT*6) - construction_time = 180 + construction_time = 18 SECONDS category = list( RND_CATEGORY_MECHFAB_ODYSSEUS + RND_SUBCATEGORY_MECHFAB_CHASSIS ) @@ -243,7 +243,7 @@ /datum/material/iron=SHEET_MATERIAL_AMOUNT*3, /datum/material/glass =SHEET_MATERIAL_AMOUNT*5 ) - construction_time = 100 + construction_time = 10 SECONDS category = list( RND_CATEGORY_MECHFAB_ODYSSEUS + RND_SUBCATEGORY_MECHFAB_CHASSIS ) @@ -254,7 +254,7 @@ build_type = MECHFAB build_path = /obj/item/mecha_parts/part/odysseus_left_arm materials = list(/datum/material/iron=SHEET_MATERIAL_AMOUNT*3) - construction_time = 120 + construction_time = 12 SECONDS category = list( RND_CATEGORY_MECHFAB_ODYSSEUS + RND_SUBCATEGORY_MECHFAB_CHASSIS ) @@ -265,7 +265,7 @@ build_type = MECHFAB build_path = /obj/item/mecha_parts/part/odysseus_right_arm materials = list(/datum/material/iron=SHEET_MATERIAL_AMOUNT*3) - construction_time = 120 + construction_time = 12 SECONDS category = list( RND_CATEGORY_MECHFAB_ODYSSEUS + RND_SUBCATEGORY_MECHFAB_CHASSIS ) @@ -276,7 +276,7 @@ build_type = MECHFAB build_path = /obj/item/mecha_parts/part/odysseus_left_leg materials = list(/datum/material/iron=SHEET_MATERIAL_AMOUNT*3.5) - construction_time = 130 + construction_time = 13 SECONDS category = list( RND_CATEGORY_MECHFAB_ODYSSEUS + RND_SUBCATEGORY_MECHFAB_CHASSIS ) @@ -287,7 +287,7 @@ build_type = MECHFAB build_path = /obj/item/mecha_parts/part/odysseus_right_leg materials = list(/datum/material/iron=SHEET_MATERIAL_AMOUNT*3.5) - construction_time = 130 + construction_time = 13 SECONDS category = list( RND_CATEGORY_MECHFAB_ODYSSEUS + RND_SUBCATEGORY_MECHFAB_CHASSIS ) @@ -299,7 +299,7 @@ build_type = MECHFAB build_path = /obj/item/mecha_parts/chassis/gygax materials = list(/datum/material/iron=SHEET_MATERIAL_AMOUNT*10) - construction_time = 100 + construction_time = 10 SECONDS category = list( RND_CATEGORY_MECHFAB_GYGAX + RND_SUBCATEGORY_MECHFAB_CHASSIS ) @@ -315,7 +315,7 @@ /datum/material/gold=SHEET_MATERIAL_AMOUNT, /datum/material/silver=SHEET_MATERIAL_AMOUNT, ) - construction_time = 300 + construction_time = 30 SECONDS category = list( RND_CATEGORY_MECHFAB_GYGAX + RND_SUBCATEGORY_MECHFAB_CHASSIS ) @@ -331,7 +331,7 @@ /datum/material/gold=SHEET_MATERIAL_AMOUNT, /datum/material/silver=SHEET_MATERIAL_AMOUNT, ) - construction_time = 200 + construction_time = 20 SECONDS category = list( RND_CATEGORY_MECHFAB_GYGAX + RND_SUBCATEGORY_MECHFAB_CHASSIS ) @@ -346,7 +346,7 @@ /datum/material/gold=HALF_SHEET_MATERIAL_AMOUNT, /datum/material/silver=HALF_SHEET_MATERIAL_AMOUNT, ) - construction_time = 200 + construction_time = 20 SECONDS category = list( RND_CATEGORY_MECHFAB_GYGAX + RND_SUBCATEGORY_MECHFAB_CHASSIS ) @@ -361,7 +361,7 @@ /datum/material/gold=HALF_SHEET_MATERIAL_AMOUNT, /datum/material/silver=HALF_SHEET_MATERIAL_AMOUNT, ) - construction_time = 200 + construction_time = 20 SECONDS category = list( RND_CATEGORY_MECHFAB_GYGAX + RND_SUBCATEGORY_MECHFAB_CHASSIS ) @@ -376,7 +376,7 @@ /datum/material/gold=HALF_SHEET_MATERIAL_AMOUNT, /datum/material/silver=HALF_SHEET_MATERIAL_AMOUNT, ) - construction_time = 200 + construction_time = 20 SECONDS category = list( RND_CATEGORY_MECHFAB_GYGAX + RND_SUBCATEGORY_MECHFAB_CHASSIS ) @@ -391,7 +391,7 @@ /datum/material/gold=HALF_SHEET_MATERIAL_AMOUNT, /datum/material/silver=HALF_SHEET_MATERIAL_AMOUNT, ) - construction_time = 200 + construction_time = 20 SECONDS category = list( RND_CATEGORY_MECHFAB_GYGAX + RND_SUBCATEGORY_MECHFAB_CHASSIS ) @@ -407,7 +407,7 @@ /datum/material/silver=SHEET_MATERIAL_AMOUNT*5, /datum/material/titanium=SHEET_MATERIAL_AMOUNT*5, ) - construction_time = 600 + construction_time = 60 SECONDS category = list( RND_CATEGORY_MECHFAB_GYGAX + RND_SUBCATEGORY_MECHFAB_CHASSIS ) @@ -419,7 +419,7 @@ build_type = MECHFAB build_path = /obj/item/mecha_parts/chassis/durand materials = list(/datum/material/iron=SHEET_MATERIAL_AMOUNT*12.5) - construction_time = 100 + construction_time = 10 SECONDS category = list( RND_CATEGORY_MECHFAB_DURAND + RND_SUBCATEGORY_MECHFAB_CHASSIS ) @@ -434,7 +434,7 @@ /datum/material/glass =SHEET_MATERIAL_AMOUNT*5, /datum/material/silver=SHEET_MATERIAL_AMOUNT*5, ) - construction_time = 300 + construction_time = 30 SECONDS category = list( RND_CATEGORY_MECHFAB_DURAND + RND_SUBCATEGORY_MECHFAB_CHASSIS ) @@ -449,7 +449,7 @@ /datum/material/glass =SHEET_MATERIAL_AMOUNT*7.5, /datum/material/silver=SHEET_MATERIAL_AMOUNT, ) - construction_time = 200 + construction_time = 20 SECONDS category = list( RND_CATEGORY_MECHFAB_DURAND + RND_SUBCATEGORY_MECHFAB_CHASSIS ) @@ -463,7 +463,7 @@ /datum/material/iron=SHEET_MATERIAL_AMOUNT*5, /datum/material/silver=SHEET_MATERIAL_AMOUNT*2, ) - construction_time = 200 + construction_time = 20 SECONDS category = list( RND_CATEGORY_MECHFAB_DURAND + RND_SUBCATEGORY_MECHFAB_CHASSIS ) @@ -477,7 +477,7 @@ /datum/material/iron=SHEET_MATERIAL_AMOUNT*5, /datum/material/silver=SHEET_MATERIAL_AMOUNT*2, ) - construction_time = 200 + construction_time = 20 SECONDS category = list( RND_CATEGORY_MECHFAB_DURAND + RND_SUBCATEGORY_MECHFAB_CHASSIS ) @@ -491,7 +491,7 @@ /datum/material/iron=SHEET_MATERIAL_AMOUNT*5, /datum/material/silver=SHEET_MATERIAL_AMOUNT*2, ) - construction_time = 200 + construction_time = 20 SECONDS category = list( RND_CATEGORY_MECHFAB_DURAND + RND_SUBCATEGORY_MECHFAB_CHASSIS ) @@ -505,7 +505,7 @@ /datum/material/iron=SHEET_MATERIAL_AMOUNT*5, /datum/material/silver=SHEET_MATERIAL_AMOUNT*2, ) - construction_time = 200 + construction_time = 20 SECONDS category = list( RND_CATEGORY_MECHFAB_DURAND + RND_SUBCATEGORY_MECHFAB_CHASSIS ) @@ -520,7 +520,7 @@ /datum/material/uranium=SHEET_MATERIAL_AMOUNT*12.5, /datum/material/titanium=SHEET_MATERIAL_AMOUNT*10, ) - construction_time = 600 + construction_time = 60 SECONDS category = list( RND_CATEGORY_MECHFAB_DURAND + RND_SUBCATEGORY_MECHFAB_CHASSIS ) @@ -532,7 +532,7 @@ build_type = MECHFAB build_path = /obj/item/mecha_parts/chassis/honker materials = list(/datum/material/iron=SHEET_MATERIAL_AMOUNT*10) - construction_time = 100 + construction_time = 10 SECONDS category = list( RND_CATEGORY_MECHFAB_HONK + RND_SUBCATEGORY_MECHFAB_CHASSIS ) @@ -547,7 +547,7 @@ /datum/material/glass =SHEET_MATERIAL_AMOUNT*5, /datum/material/bananium=SHEET_MATERIAL_AMOUNT*5, ) - construction_time = 300 + construction_time = 30 SECONDS category = list( RND_CATEGORY_MECHFAB_HONK + RND_SUBCATEGORY_MECHFAB_CHASSIS ) @@ -562,7 +562,7 @@ /datum/material/glass =SHEET_MATERIAL_AMOUNT * 2.5, /datum/material/bananium=SHEET_MATERIAL_AMOUNT * 2.5, ) - construction_time = 200 + construction_time = 20 SECONDS category = list( RND_CATEGORY_MECHFAB_HONK + RND_SUBCATEGORY_MECHFAB_CHASSIS ) @@ -576,7 +576,7 @@ /datum/material/iron=SHEET_MATERIAL_AMOUNT*7.5, /datum/material/bananium=SHEET_MATERIAL_AMOUNT * 2.5, ) - construction_time = 200 + construction_time = 20 SECONDS category = list( RND_CATEGORY_MECHFAB_HONK + RND_SUBCATEGORY_MECHFAB_CHASSIS ) @@ -590,7 +590,7 @@ /datum/material/iron=SHEET_MATERIAL_AMOUNT*7.5, /datum/material/bananium=SHEET_MATERIAL_AMOUNT * 2.5, ) - construction_time = 200 + construction_time = 20 SECONDS category = list( RND_CATEGORY_MECHFAB_HONK + RND_SUBCATEGORY_MECHFAB_CHASSIS ) @@ -604,7 +604,7 @@ /datum/material/iron=SHEET_MATERIAL_AMOUNT*7.5, /datum/material/bananium=SHEET_MATERIAL_AMOUNT * 2.5, ) - construction_time = 200 + construction_time = 20 SECONDS category = list( RND_CATEGORY_MECHFAB_HONK + RND_SUBCATEGORY_MECHFAB_CHASSIS ) @@ -618,7 +618,7 @@ /datum/material/iron=SHEET_MATERIAL_AMOUNT*7.5, /datum/material/bananium=SHEET_MATERIAL_AMOUNT * 2.5, ) - construction_time = 200 + construction_time = 20 SECONDS category = list( RND_CATEGORY_MECHFAB_HONK + RND_SUBCATEGORY_MECHFAB_CHASSIS ) @@ -630,7 +630,7 @@ build_type = MECHFAB build_path = /obj/item/mecha_parts/chassis/phazon materials = list(/datum/material/iron=SHEET_MATERIAL_AMOUNT*10) - construction_time = 100 + construction_time = 10 SECONDS category = list( RND_CATEGORY_MECHFAB_PHAZON + RND_SUBCATEGORY_MECHFAB_CHASSIS ) @@ -645,7 +645,7 @@ /datum/material/glass =SHEET_MATERIAL_AMOUNT*5, /datum/material/plasma=SHEET_MATERIAL_AMOUNT*10, ) - construction_time = 300 + construction_time = 30 SECONDS category = list( RND_CATEGORY_MECHFAB_PHAZON + RND_SUBCATEGORY_MECHFAB_CHASSIS ) @@ -660,7 +660,7 @@ /datum/material/glass =SHEET_MATERIAL_AMOUNT * 2.5, /datum/material/plasma=SHEET_MATERIAL_AMOUNT*5, ) - construction_time = 200 + construction_time = 20 SECONDS category = list( RND_CATEGORY_MECHFAB_PHAZON + RND_SUBCATEGORY_MECHFAB_CHASSIS ) @@ -674,7 +674,7 @@ /datum/material/iron=SHEET_MATERIAL_AMOUNT*10, /datum/material/plasma=SHEET_MATERIAL_AMOUNT*5, ) - construction_time = 200 + construction_time = 20 SECONDS category = list( RND_CATEGORY_MECHFAB_PHAZON + RND_SUBCATEGORY_MECHFAB_CHASSIS ) @@ -688,7 +688,7 @@ /datum/material/iron=SHEET_MATERIAL_AMOUNT*10, /datum/material/plasma=SHEET_MATERIAL_AMOUNT*5, ) - construction_time = 200 + construction_time = 20 SECONDS category = list( RND_CATEGORY_MECHFAB_PHAZON + RND_SUBCATEGORY_MECHFAB_CHASSIS ) @@ -702,7 +702,7 @@ /datum/material/iron=SHEET_MATERIAL_AMOUNT*10, /datum/material/plasma=SHEET_MATERIAL_AMOUNT*5, ) - construction_time = 200 + construction_time = 20 SECONDS category = list( RND_CATEGORY_MECHFAB_PHAZON + RND_SUBCATEGORY_MECHFAB_CHASSIS ) @@ -716,7 +716,7 @@ /datum/material/iron=SHEET_MATERIAL_AMOUNT*10, /datum/material/plasma=SHEET_MATERIAL_AMOUNT*5, ) - construction_time = 200 + construction_time = 20 SECONDS category = list( RND_CATEGORY_MECHFAB_PHAZON + RND_SUBCATEGORY_MECHFAB_CHASSIS ) @@ -731,7 +731,7 @@ /datum/material/plasma=SHEET_MATERIAL_AMOUNT*10, /datum/material/titanium=SHEET_MATERIAL_AMOUNT*10, ) - construction_time = 300 + construction_time = 30 SECONDS category = list( RND_CATEGORY_MECHFAB_PHAZON + RND_SUBCATEGORY_MECHFAB_CHASSIS ) @@ -743,7 +743,7 @@ build_type = MECHFAB build_path = /obj/item/mecha_parts/chassis/savannah_ivanov materials = list(/datum/material/iron=SHEET_MATERIAL_AMOUNT*10) - construction_time = 100 + construction_time = 10 SECONDS category = list( RND_CATEGORY_MECHFAB_SAVANNAH_IVANOV + RND_SUBCATEGORY_MECHFAB_CHASSIS ) @@ -757,7 +757,7 @@ /datum/material/iron=SHEET_MATERIAL_AMOUNT*10, /datum/material/glass =SHEET_MATERIAL_AMOUNT*3.75, ) - construction_time = 200 + construction_time = 20 SECONDS category = list( RND_CATEGORY_MECHFAB_SAVANNAH_IVANOV + RND_SUBCATEGORY_MECHFAB_CHASSIS ) @@ -771,7 +771,7 @@ /datum/material/iron=SHEET_MATERIAL_AMOUNT*3, /datum/material/glass =SHEET_MATERIAL_AMOUNT*5, ) - construction_time = 100 + construction_time = 10 SECONDS category = list( RND_CATEGORY_MECHFAB_SAVANNAH_IVANOV + RND_SUBCATEGORY_MECHFAB_CHASSIS ) @@ -782,7 +782,7 @@ build_type = MECHFAB build_path = /obj/item/mecha_parts/part/savannah_ivanov_left_arm materials = list(/datum/material/iron=SHEET_MATERIAL_AMOUNT*7.5) - construction_time = 150 + construction_time = 15 SECONDS category = list( RND_CATEGORY_MECHFAB_SAVANNAH_IVANOV + RND_SUBCATEGORY_MECHFAB_CHASSIS ) @@ -793,7 +793,7 @@ build_type = MECHFAB build_path = /obj/item/mecha_parts/part/savannah_ivanov_right_arm materials = list(/datum/material/iron=SHEET_MATERIAL_AMOUNT*7.5) - construction_time = 150 + construction_time = 15 SECONDS category = list( RND_CATEGORY_MECHFAB_SAVANNAH_IVANOV + RND_SUBCATEGORY_MECHFAB_CHASSIS ) @@ -804,7 +804,7 @@ build_type = MECHFAB build_path = /obj/item/mecha_parts/chassis/savannah_ivanov materials = list(/datum/material/iron=SHEET_MATERIAL_AMOUNT*12.5) - construction_time = 100 + construction_time = 10 SECONDS category = list( RND_CATEGORY_MECHFAB_SAVANNAH_IVANOV + RND_SUBCATEGORY_MECHFAB_CHASSIS ) @@ -819,7 +819,7 @@ /datum/material/glass =SHEET_MATERIAL_AMOUNT*5, /datum/material/silver=SHEET_MATERIAL_AMOUNT*5, ) - construction_time = 300 + construction_time = 30 SECONDS category = list( RND_CATEGORY_MECHFAB_SAVANNAH_IVANOV + RND_SUBCATEGORY_MECHFAB_CHASSIS ) @@ -834,7 +834,7 @@ /datum/material/glass =SHEET_MATERIAL_AMOUNT*7.5, /datum/material/silver=SHEET_MATERIAL_AMOUNT, ) - construction_time = 200 + construction_time = 20 SECONDS category = list( RND_CATEGORY_MECHFAB_SAVANNAH_IVANOV + RND_SUBCATEGORY_MECHFAB_CHASSIS ) @@ -848,7 +848,7 @@ /datum/material/iron=SHEET_MATERIAL_AMOUNT*5, /datum/material/silver=SHEET_MATERIAL_AMOUNT*2, ) - construction_time = 200 + construction_time = 20 SECONDS category = list( RND_CATEGORY_MECHFAB_SAVANNAH_IVANOV + RND_SUBCATEGORY_MECHFAB_CHASSIS ) @@ -862,7 +862,7 @@ /datum/material/iron=SHEET_MATERIAL_AMOUNT*5, /datum/material/silver=SHEET_MATERIAL_AMOUNT*2, ) - construction_time = 200 + construction_time = 20 SECONDS category = list( RND_CATEGORY_MECHFAB_SAVANNAH_IVANOV + RND_SUBCATEGORY_MECHFAB_CHASSIS ) @@ -876,7 +876,7 @@ /datum/material/iron=SHEET_MATERIAL_AMOUNT*5, /datum/material/silver=SHEET_MATERIAL_AMOUNT*2, ) - construction_time = 200 + construction_time = 20 SECONDS category = list( RND_CATEGORY_MECHFAB_SAVANNAH_IVANOV + RND_SUBCATEGORY_MECHFAB_CHASSIS ) @@ -890,7 +890,7 @@ /datum/material/iron=SHEET_MATERIAL_AMOUNT*5, /datum/material/silver=SHEET_MATERIAL_AMOUNT*2, ) - construction_time = 200 + construction_time = 20 SECONDS category = list( RND_CATEGORY_MECHFAB_SAVANNAH_IVANOV + RND_SUBCATEGORY_MECHFAB_CHASSIS ) @@ -905,7 +905,7 @@ /datum/material/uranium=SHEET_MATERIAL_AMOUNT*12.5, /datum/material/titanium=SHEET_MATERIAL_AMOUNT*10, ) - construction_time = 600 + construction_time = 60 SECONDS category = list( RND_CATEGORY_MECHFAB_SAVANNAH_IVANOV + RND_SUBCATEGORY_MECHFAB_CHASSIS ) @@ -917,7 +917,7 @@ build_type = MECHFAB build_path = /obj/item/mecha_parts/chassis/clarke materials = list(/datum/material/iron=SHEET_MATERIAL_AMOUNT*10) - construction_time = 100 + construction_time = 10 SECONDS category = list( RND_CATEGORY_MECHFAB_CLARKE + RND_SUBCATEGORY_MECHFAB_CHASSIS ) @@ -931,7 +931,7 @@ /datum/material/iron=SHEET_MATERIAL_AMOUNT*10, /datum/material/glass =SHEET_MATERIAL_AMOUNT*3.75, ) - construction_time = 200 + construction_time = 20 SECONDS category = list( RND_CATEGORY_MECHFAB_CLARKE + RND_SUBCATEGORY_MECHFAB_CHASSIS ) @@ -945,7 +945,7 @@ /datum/material/iron=SHEET_MATERIAL_AMOUNT*3, /datum/material/glass =SHEET_MATERIAL_AMOUNT*5, ) - construction_time = 100 + construction_time = 10 SECONDS category = list( RND_CATEGORY_MECHFAB_CLARKE + RND_SUBCATEGORY_MECHFAB_CHASSIS ) @@ -956,7 +956,7 @@ build_type = MECHFAB build_path = /obj/item/mecha_parts/part/clarke_left_arm materials = list(/datum/material/iron=SHEET_MATERIAL_AMOUNT*7.5) - construction_time = 150 + construction_time = 15 SECONDS category = list( RND_CATEGORY_MECHFAB_CLARKE + RND_SUBCATEGORY_MECHFAB_CHASSIS ) @@ -967,7 +967,7 @@ build_type = MECHFAB build_path = /obj/item/mecha_parts/part/clarke_right_arm materials = list(/datum/material/iron=SHEET_MATERIAL_AMOUNT*7.5) - construction_time = 150 + construction_time = 15 SECONDS category = list( RND_CATEGORY_MECHFAB_CLARKE + RND_SUBCATEGORY_MECHFAB_CHASSIS ) @@ -982,7 +982,7 @@ /datum/material/iron=SHEET_MATERIAL_AMOUNT*5, /datum/material/plasma=SHEET_MATERIAL_AMOUNT*5, ) - construction_time = 100 + construction_time = 10 SECONDS category = list( RND_CATEGORY_MECHFAB_EQUIPMENT + RND_SUBCATEGORY_MECHFAB_EQUIPMENT_MODULES, RND_CATEGORY_MECHFAB_RIPLEY + RND_SUBCATEGORY_MECHFAB_SUPPORTED_EQUIPMENT, @@ -998,7 +998,7 @@ /datum/material/glass = SHEET_MATERIAL_AMOUNT * 5, /datum/material/titanium = SHEET_MATERIAL_AMOUNT *5, ) - construction_time = 100 + construction_time = 10 SECONDS category = list( RND_CATEGORY_MECHFAB_EQUIPMENT + RND_SUBCATEGORY_MECHFAB_EQUIPMENT_MODULES, RND_CATEGORY_MECHFAB_PADDY + RND_SUBCATEGORY_MECHFAB_CHASSIS, @@ -1010,7 +1010,7 @@ build_type = MECHFAB build_path = /obj/item/mecha_parts/mecha_equipment/hydraulic_clamp materials = list(/datum/material/iron=SHEET_MATERIAL_AMOUNT*5) - construction_time = 100 + construction_time = 10 SECONDS category = list( RND_CATEGORY_MECHFAB_EQUIPMENT + RND_SUBCATEGORY_MECHFAB_EQUIPMENT_MISC, RND_CATEGORY_MECHFAB_RIPLEY + RND_SUBCATEGORY_MECHFAB_SUPPORTED_EQUIPMENT, @@ -1022,7 +1022,7 @@ build_type = MECHFAB build_path = /obj/item/mecha_parts/mecha_equipment/weapon/paddy_claw materials = list(/datum/material/iron=SHEET_MATERIAL_AMOUNT*5) - construction_time = 100 + construction_time = 10 SECONDS category = list( RND_CATEGORY_MECHFAB_EQUIPMENT + RND_SUBCATEGORY_MECHFAB_EQUIPMENT_MISC, RND_CATEGORY_MECHFAB_PADDY + RND_SUBCATEGORY_MECHFAB_SUPPORTED_EQUIPMENT, @@ -1034,7 +1034,7 @@ build_type = MECHFAB build_path = /obj/item/mecha_parts/mecha_equipment/drill materials = list(/datum/material/iron=SHEET_MATERIAL_AMOUNT*5) - construction_time = 100 + construction_time = 10 SECONDS category = list( RND_CATEGORY_MECHFAB_EQUIPMENT + RND_SUBCATEGORY_MECHFAB_EQUIPMENT_MINING, RND_CATEGORY_MECHFAB_RIPLEY + RND_SUBCATEGORY_MECHFAB_SUPPORTED_EQUIPMENT, @@ -1055,7 +1055,7 @@ /datum/material/iron=SHEET_MATERIAL_AMOUNT * 2.5, /datum/material/glass = SHEET_MATERIAL_AMOUNT *1.25, ) - construction_time = 50 + construction_time = 5 SECONDS category = list( RND_CATEGORY_MECHFAB_EQUIPMENT + RND_SUBCATEGORY_MECHFAB_EQUIPMENT_MINING, RND_CATEGORY_MECHFAB_RIPLEY + RND_SUBCATEGORY_MECHFAB_SUPPORTED_EQUIPMENT, @@ -1068,7 +1068,7 @@ build_type = MECHFAB build_path = /obj/item/mecha_parts/mecha_equipment/extinguisher materials = list(/datum/material/iron=SHEET_MATERIAL_AMOUNT*5) - construction_time = 100 + construction_time = 10 SECONDS category = list( RND_CATEGORY_MECHFAB_EQUIPMENT + RND_SUBCATEGORY_MECHFAB_EQUIPMENT_MISC, RND_CATEGORY_MECHFAB_RIPLEY + RND_SUBCATEGORY_MECHFAB_SUPPORTED_EQUIPMENT, @@ -1086,7 +1086,7 @@ /datum/material/silver=SHEET_MATERIAL_AMOUNT, /datum/material/plasma=SHEET_MATERIAL_AMOUNT * 2.5, ) - construction_time = 100 + construction_time = 10 SECONDS category = list( RND_CATEGORY_MECHFAB_EQUIPMENT + RND_SUBCATEGORY_MECHFAB_EQUIPMENT_MISC, RND_CATEGORY_MECHFAB_RIPLEY + RND_SUBCATEGORY_MECHFAB_SUPPORTED_EQUIPMENT, @@ -1107,7 +1107,7 @@ /datum/material/iron=SHEET_MATERIAL_AMOUNT*10, /datum/material/bananium=SHEET_MATERIAL_AMOUNT * 2.5, ) - construction_time = 300 + construction_time = 30 SECONDS category = list( RND_CATEGORY_MECHFAB_EQUIPMENT + RND_SUBCATEGORY_MECHFAB_EQUIPMENT_HONK, RND_CATEGORY_MECHFAB_HONK + RND_SUBCATEGORY_MECHFAB_SUPPORTED_EQUIPMENT @@ -1123,7 +1123,7 @@ /datum/material/iron=SHEET_MATERIAL_AMOUNT*10, /datum/material/bananium=SHEET_MATERIAL_AMOUNT * 2.5, ) - construction_time = 300 + construction_time = 30 SECONDS category = list( RND_CATEGORY_MECHFAB_EQUIPMENT + RND_SUBCATEGORY_MECHFAB_EQUIPMENT_HONK, RND_CATEGORY_MECHFAB_HONK + RND_SUBCATEGORY_MECHFAB_SUPPORTED_EQUIPMENT @@ -1139,7 +1139,7 @@ /datum/material/iron=SHEET_MATERIAL_AMOUNT*10, /datum/material/bananium=SHEET_MATERIAL_AMOUNT*5, ) - construction_time = 500 + construction_time = 50 SECONDS category = list( RND_CATEGORY_MECHFAB_EQUIPMENT + RND_SUBCATEGORY_MECHFAB_EQUIPMENT_HONK, RND_CATEGORY_MECHFAB_HONK + RND_SUBCATEGORY_MECHFAB_SUPPORTED_EQUIPMENT @@ -1155,7 +1155,7 @@ /datum/material/iron=SHEET_MATERIAL_AMOUNT*10, /datum/material/bananium=SHEET_MATERIAL_AMOUNT*3.75, ) - construction_time = 400 + construction_time = 40 SECONDS category = list( RND_CATEGORY_MECHFAB_EQUIPMENT + RND_SUBCATEGORY_MECHFAB_EQUIPMENT_HONK, RND_CATEGORY_MECHFAB_HONK + RND_SUBCATEGORY_MECHFAB_SUPPORTED_EQUIPMENT @@ -1168,7 +1168,7 @@ build_type = MECHFAB build_path = /obj/item/mecha_parts/mecha_equipment/radio materials = list(/datum/material/iron=SHEET_MATERIAL_AMOUNT*2.5) - construction_time = 100 + construction_time = 10 SECONDS category = list( RND_CATEGORY_MECHFAB_EQUIPMENT + RND_SUBCATEGORY_MECHFAB_EQUIPMENT_MINING, RND_CATEGORY_MECHFAB_RIPLEY + RND_SUBCATEGORY_MECHFAB_SUPPORTED_EQUIPMENT, @@ -1186,7 +1186,7 @@ build_type = MECHFAB build_path = /obj/item/mecha_parts/mecha_equipment/air_tank materials = list(/datum/material/iron=SHEET_MATERIAL_AMOUNT*5) - construction_time = 100 + construction_time = 10 SECONDS category = list( RND_CATEGORY_MECHFAB_EQUIPMENT + RND_SUBCATEGORY_MECHFAB_EQUIPMENT_MINING, RND_CATEGORY_MECHFAB_RIPLEY + RND_SUBCATEGORY_MECHFAB_SUPPORTED_EQUIPMENT, @@ -1208,7 +1208,7 @@ build_type = MECHFAB build_path = /obj/item/borg/upgrade/rename materials = list(/datum/material/iron =SHEET_MATERIAL_AMOUNT * 2.5) - construction_time = 120 + construction_time = 12 SECONDS category = list( RND_CATEGORY_MECHFAB_CYBORG_MODULES + RND_SUBCATEGORY_MECHFAB_CYBORG_MODULES_ALL ) @@ -1222,7 +1222,7 @@ /datum/material/iron = SHEET_MATERIAL_AMOUNT*10, /datum/material/glass =SHEET_MATERIAL_AMOUNT * 2.5, ) - construction_time = 120 + construction_time = 12 SECONDS category = list( RND_CATEGORY_MECHFAB_CYBORG_MODULES + RND_SUBCATEGORY_MECHFAB_CYBORG_MODULES_ALL ) @@ -1238,7 +1238,7 @@ /datum/material/plasma =SHEET_MATERIAL_AMOUNT * 2.5, /datum/material/uranium =SHEET_MATERIAL_AMOUNT*3, ) - construction_time = 120 + construction_time = 12 SECONDS category = list( RND_CATEGORY_MECHFAB_CYBORG_MODULES + RND_SUBCATEGORY_MECHFAB_CYBORG_MODULES_ALL ) @@ -1254,7 +1254,7 @@ /datum/material/gold =SHEET_MATERIAL_AMOUNT, /datum/material/diamond =SHEET_MATERIAL_AMOUNT, ) - construction_time = 120 + construction_time = 12 SECONDS category = list( RND_CATEGORY_MECHFAB_CYBORG_MODULES + RND_SUBCATEGORY_MECHFAB_CYBORG_MODULES_SECURITY ) @@ -1269,7 +1269,7 @@ /datum/material/glass =SHEET_MATERIAL_AMOUNT*3, /datum/material/diamond =SHEET_MATERIAL_AMOUNT, ) - construction_time = 80 + construction_time = 8 SECONDS category = list( RND_CATEGORY_MECHFAB_CYBORG_MODULES + RND_SUBCATEGORY_MECHFAB_CYBORG_MODULES_MINING ) @@ -1284,7 +1284,7 @@ /datum/material/gold =SHEET_MATERIAL_AMOUNT, /datum/material/uranium =HALF_SHEET_MATERIAL_AMOUNT, ) - construction_time = 40 + construction_time = 4 SECONDS category = list( RND_CATEGORY_MECHFAB_CYBORG_MODULES + RND_SUBCATEGORY_MECHFAB_CYBORG_MODULES_MINING ) @@ -1299,7 +1299,7 @@ /datum/material/plasma =SHEET_MATERIAL_AMOUNT*2, /datum/material/titanium =SHEET_MATERIAL_AMOUNT * 2.5, ) - construction_time = 120 + construction_time = 12 SECONDS category = list( RND_CATEGORY_MECHFAB_CYBORG_MODULES + RND_SUBCATEGORY_MECHFAB_CYBORG_MODULES_MINING ) @@ -1314,7 +1314,7 @@ /datum/material/glass =SHEET_MATERIAL_AMOUNT*7.5, /datum/material/diamond =SHEET_MATERIAL_AMOUNT*5, ) - construction_time = 120 + construction_time = 12 SECONDS category = list( RND_CATEGORY_MECHFAB_CYBORG_MODULES + RND_SUBCATEGORY_MECHFAB_CYBORG_MODULES_ALL ) @@ -1329,7 +1329,7 @@ /datum/material/glass =SHEET_MATERIAL_AMOUNT*7.5, /datum/material/bananium =HALF_SHEET_MATERIAL_AMOUNT, ) - construction_time = 120 + construction_time = 12 SECONDS category = list( RND_CATEGORY_MECHFAB_CYBORG_MODULES + RND_SUBCATEGORY_MECHFAB_CYBORG_MODULES_ALL ) @@ -1343,7 +1343,7 @@ /datum/material/iron =SHEET_MATERIAL_AMOUNT*7.5, /datum/material/glass =SHEET_MATERIAL_AMOUNT*7.5, ) - construction_time = 80 + construction_time = 8 SECONDS category = list( RND_CATEGORY_MECHFAB_CYBORG_MODULES + RND_SUBCATEGORY_MECHFAB_CYBORG_MODULES_ALL ) @@ -1359,7 +1359,7 @@ /datum/material/plasma =SHEET_MATERIAL_AMOUNT*4, /datum/material/uranium =SHEET_MATERIAL_AMOUNT*4, ) - construction_time = 80 + construction_time = 8 SECONDS category = list( RND_CATEGORY_MECHFAB_CYBORG_MODULES + RND_SUBCATEGORY_MECHFAB_CYBORG_MODULES_MEDICAL ) @@ -1375,7 +1375,7 @@ /datum/material/titanium =SHEET_MATERIAL_AMOUNT * 2.5, /datum/material/diamond =SHEET_MATERIAL_AMOUNT * 1.5, ) - construction_time = 80 + construction_time = 8 SECONDS category = list( RND_CATEGORY_MECHFAB_CYBORG_MODULES + RND_SUBCATEGORY_MECHFAB_CYBORG_MODULES_MEDICAL ) @@ -1391,7 +1391,7 @@ /datum/material/silver =SHEET_MATERIAL_AMOUNT*2, /datum/material/gold =SHEET_MATERIAL_AMOUNT * 1.5, ) - construction_time = 80 + construction_time = 8 SECONDS category = list( RND_CATEGORY_MECHFAB_CYBORG_MODULES + RND_SUBCATEGORY_MECHFAB_CYBORG_MODULES_MEDICAL ) @@ -1406,7 +1406,7 @@ /datum/material/glass =SHEET_MATERIAL_AMOUNT*2, /datum/material/silver =SHEET_MATERIAL_AMOUNT*2, ) - construction_time = 40 + construction_time = 4 SECONDS category = list( RND_CATEGORY_MECHFAB_CYBORG_MODULES + RND_SUBCATEGORY_MECHFAB_CYBORG_MODULES_MEDICAL ) @@ -1420,7 +1420,7 @@ /datum/material/gold =SHEET_MATERIAL_AMOUNT, /datum/material/uranium =HALF_SHEET_MATERIAL_AMOUNT, ) - construction_time = 40 + construction_time = 4 SECONDS category = list( RND_CATEGORY_MECHFAB_CYBORG_MODULES + RND_SUBCATEGORY_MECHFAB_CYBORG_MODULES_JANITOR ) @@ -1434,7 +1434,7 @@ /datum/material/iron =SHEET_MATERIAL_AMOUNT, /datum/material/glass =SHEET_MATERIAL_AMOUNT, ) - construction_time = 40 + construction_time = 4 SECONDS category = list( RND_CATEGORY_MECHFAB_CYBORG_MODULES + RND_SUBCATEGORY_MECHFAB_CYBORG_MODULES_JANITOR ) @@ -1448,7 +1448,7 @@ /datum/material/iron = SHEET_MATERIAL_AMOUNT*1.125, /datum/material/glass = HALF_SHEET_MATERIAL_AMOUNT*0.75, ) - construction_time = 40 + construction_time = 4 SECONDS category = list( RND_CATEGORY_MECHFAB_CYBORG_MODULES + RND_SUBCATEGORY_MECHFAB_CYBORG_MODULES_JANITOR ) @@ -1546,7 +1546,7 @@ /datum/material/iron = SHEET_MATERIAL_AMOUNT*100, /datum/material/titanium =SHEET_MATERIAL_AMOUNT * 2.5, ) - construction_time = 120 + construction_time = 12 SECONDS category = list( RND_CATEGORY_MECHFAB_CYBORG_MODULES + RND_SUBCATEGORY_MECHFAB_CYBORG_MODULES_ALL ) @@ -1561,7 +1561,7 @@ /datum/material/glass =HALF_SHEET_MATERIAL_AMOUNT * 1.5, /datum/material/gold =SMALL_MATERIAL_AMOUNT * 2, ) - construction_time = 50 + construction_time = 5 SECONDS category = list( RND_CATEGORY_MECHFAB_CYBORG + RND_SUBCATEGORY_MECHFAB_CYBORG_CONTROL_INTERFACES ) @@ -1576,7 +1576,7 @@ /datum/material/iron =SHEET_MATERIAL_AMOUNT*5, /datum/material/glass =SHEET_MATERIAL_AMOUNT * 2.5, ) - construction_time = 120 + construction_time = 12 SECONDS category = list( RND_CATEGORY_MECHFAB_CYBORG_MODULES + RND_SUBCATEGORY_MECHFAB_CYBORG_MODULES_ENGINEERING ) @@ -1587,7 +1587,7 @@ build_type = MECHFAB build_path = /obj/item/borg/upgrade/inducer materials = list(/datum/material/iron = SHEET_MATERIAL_AMOUNT * 5, /datum/material/glass = SHEET_MATERIAL_AMOUNT * 2.5, /datum/material/silver = SHEET_MATERIAL_AMOUNT * 2) - construction_time = 120 + construction_time = 12 SECONDS category = list( RND_CATEGORY_MECHFAB_CYBORG_MODULES + RND_SUBCATEGORY_MECHFAB_CYBORG_MODULES_ENGINEERING ) @@ -1601,7 +1601,7 @@ /datum/material/iron =SHEET_MATERIAL_AMOUNT, /datum/material/titanium =SMALL_MATERIAL_AMOUNT*5, ) - construction_time = 120 + construction_time = 12 SECONDS category = list( RND_CATEGORY_MECHFAB_CYBORG_MODULES + RND_SUBCATEGORY_MECHFAB_CYBORG_MODULES_ENGINEERING ) @@ -1615,7 +1615,7 @@ /datum/material/iron =SHEET_MATERIAL_AMOUNT, /datum/material/glass = SHEET_MATERIAL_AMOUNT*1.125, ) //Need glass for the new beaker too - construction_time = 120 + construction_time = 12 SECONDS category = list( RND_CATEGORY_MECHFAB_CYBORG_MODULES + RND_SUBCATEGORY_MECHFAB_CYBORG_MODULES_MEDICAL ) @@ -1629,7 +1629,7 @@ /datum/material/iron =HALF_SHEET_MATERIAL_AMOUNT, /datum/material/glass =SMALL_MATERIAL_AMOUNT*5, ) - construction_time = 120 + construction_time = 12 SECONDS category = list( RND_CATEGORY_MECHFAB_CYBORG_MODULES + RND_SUBCATEGORY_MECHFAB_CYBORG_MODULES_MEDICAL ) @@ -1643,7 +1643,7 @@ /datum/material/iron =SHEET_MATERIAL_AMOUNT*2, /datum/material/glass =SMALL_MATERIAL_AMOUNT*5, ) - construction_time = 120 + construction_time = 12 SECONDS category = list( RND_CATEGORY_MECHFAB_CYBORG_MODULES + RND_SUBCATEGORY_MECHFAB_CYBORG_MODULES_JANITOR ) @@ -1657,7 +1657,7 @@ /datum/material/iron =HALF_SHEET_MATERIAL_AMOUNT, /datum/material/glass =SMALL_MATERIAL_AMOUNT*5, ) - construction_time = 75 + construction_time = 7.5 SECONDS build_path = /obj/item/mmi category = list( RND_CATEGORY_MECHFAB_CYBORG + RND_SUBCATEGORY_MECHFAB_CYBORG_CONTROL_INTERFACES @@ -1682,7 +1682,7 @@ /datum/material/glass = HALF_SHEET_MATERIAL_AMOUNT*1.35, /datum/material/gold =SMALL_MATERIAL_AMOUNT*5 ) - construction_time = 75 + construction_time = 7.5 SECONDS build_path = /obj/item/mmi/posibrain category = list( RND_CATEGORY_MECHFAB_CYBORG + RND_SUBCATEGORY_MECHFAB_CYBORG_CONTROL_INTERFACES @@ -1696,7 +1696,7 @@ build_type = MECHFAB build_path =/obj/item/mecha_parts/mecha_tracking materials = list(/datum/material/iron=SMALL_MATERIAL_AMOUNT*5) - construction_time = 50 + construction_time = 5 SECONDS category = list( RND_CATEGORY_MECHFAB_EQUIPMENT + RND_SUBCATEGORY_MECHFAB_EQUIPMENT_MISC, RND_CATEGORY_MECHFAB_RIPLEY + RND_SUBCATEGORY_MECHFAB_SUPPORTED_EQUIPMENT, @@ -1718,7 +1718,7 @@ /datum/material/glass =SMALL_MATERIAL_AMOUNT*5, /datum/material/silver =SMALL_MATERIAL_AMOUNT * 2, ) - construction_time = 50 + construction_time = 5 SECONDS category = list( RND_CATEGORY_MECHFAB_EQUIPMENT + RND_SUBCATEGORY_MECHFAB_EQUIPMENT_CONTROL_INTERFACES, RND_CATEGORY_MECHFAB_RIPLEY + RND_SUBCATEGORY_MECHFAB_CONTROL_INTERFACES, @@ -1742,7 +1742,7 @@ /datum/material/plasma =SMALL_MATERIAL_AMOUNT * 2, /datum/material/titanium =SMALL_MATERIAL_AMOUNT * 2, ) - construction_time = 50 + construction_time = 5 SECONDS category = list( RND_CATEGORY_MECHFAB_EQUIPMENT + RND_SUBCATEGORY_MECHFAB_EQUIPMENT_CONTROL_INTERFACES, RND_CATEGORY_MECHFAB_RIPLEY + RND_SUBCATEGORY_MECHFAB_CONTROL_INTERFACES, @@ -1763,7 +1763,7 @@ /datum/material/iron = SMALL_MATERIAL_AMOUNT * 7.5, /datum/material/glass = SMALL_MATERIAL_AMOUNT * 7.5, ) - construction_time = 100 + construction_time = 10 SECONDS build_path = /obj/item/assembly/flash/handheld category = list( RND_CATEGORY_MECHFAB_CYBORG diff --git a/code/modules/research/designs/medical_designs.dm b/code/modules/research/designs/medical_designs.dm index 9f83ae957ee..46e43b0ac66 100644 --- a/code/modules/research/designs/medical_designs.dm +++ b/code/modules/research/designs/medical_designs.dm @@ -390,7 +390,7 @@ desc = "This simple implant adds an internals connector to your back, allowing you to use internals without a mask and protecting you from being choked." id = "ci-breather" build_type = PROTOLATHE | AWAY_LATHE | MECHFAB - construction_time = 35 + construction_time = 3.5 SECONDS materials = list(/datum/material/iron = SMALL_MATERIAL_AMOUNT*6, /datum/material/glass = SMALL_MATERIAL_AMOUNT*2.5) build_path = /obj/item/organ/internal/cyberimp/mouth/breathing_tube category = list( @@ -404,7 +404,7 @@ id = "ci-surgery" build_type = PROTOLATHE | AWAY_LATHE | MECHFAB materials = list (/datum/material/iron = SHEET_MATERIAL_AMOUNT*1.25, /datum/material/glass =HALF_SHEET_MATERIAL_AMOUNT * 1.5, /datum/material/silver =HALF_SHEET_MATERIAL_AMOUNT * 1.5) - construction_time =SMALL_MATERIAL_AMOUNT * 2 + construction_time = 2 SECONDS build_path = /obj/item/organ/internal/cyberimp/arm/surgery category = list( RND_CATEGORY_CYBERNETICS + RND_SUBCATEGORY_CYBERNETICS_IMPLANTS_UTILITY @@ -417,7 +417,7 @@ id = "ci-toolset" build_type = PROTOLATHE | AWAY_LATHE | MECHFAB materials = list (/datum/material/iron = SHEET_MATERIAL_AMOUNT*1.25, /datum/material/glass =HALF_SHEET_MATERIAL_AMOUNT * 1.5, /datum/material/silver =HALF_SHEET_MATERIAL_AMOUNT * 1.5) - construction_time =SMALL_MATERIAL_AMOUNT * 2 + construction_time = 2 SECONDS build_path = /obj/item/organ/internal/cyberimp/arm/toolset category = list( RND_CATEGORY_CYBERNETICS + RND_SUBCATEGORY_CYBERNETICS_IMPLANTS_UTILITY @@ -429,7 +429,7 @@ desc = "These cybernetic eyes will display a medical HUD over everything you see. Wiggle eyes to control." id = "ci-medhud" build_type = PROTOLATHE | AWAY_LATHE | MECHFAB - construction_time = 50 + construction_time = 5 SECONDS materials = list( /datum/material/iron = SMALL_MATERIAL_AMOUNT*6, /datum/material/glass = SMALL_MATERIAL_AMOUNT*6, @@ -447,7 +447,7 @@ desc = "These cybernetic eyes will display a security HUD over everything you see. Wiggle eyes to control." id = "ci-sechud" build_type = PROTOLATHE | AWAY_LATHE | MECHFAB - construction_time = 50 + construction_time = 5 SECONDS materials = list( /datum/material/iron = SMALL_MATERIAL_AMOUNT*6, /datum/material/glass = SMALL_MATERIAL_AMOUNT*6, @@ -465,7 +465,7 @@ desc = "These cybernetic eyes will display a diagnostic HUD over everything you see. Wiggle eyes to control." id = "ci-diaghud" build_type = PROTOLATHE | AWAY_LATHE | MECHFAB - construction_time = 50 + construction_time = 5 SECONDS materials = list( /datum/material/iron = SMALL_MATERIAL_AMOUNT*6, /datum/material/glass = SMALL_MATERIAL_AMOUNT*6, @@ -483,7 +483,7 @@ desc = "These cybernetic eyes will give you X-ray vision. Blinking is futile." id = "ci-xray" build_type = PROTOLATHE | AWAY_LATHE | MECHFAB - construction_time = 60 + construction_time = 6 SECONDS materials = list( /datum/material/iron = SMALL_MATERIAL_AMOUNT*6, /datum/material/glass = SMALL_MATERIAL_AMOUNT*6, @@ -510,7 +510,7 @@ desc = "These cybernetic eyes will give you Thermal vision. Vertical slit pupil included." id = "ci-thermals" build_type = PROTOLATHE | AWAY_LATHE | MECHFAB - construction_time = 60 + construction_time = 6 SECONDS materials = list( /datum/material/iron = SMALL_MATERIAL_AMOUNT*6, /datum/material/glass = SMALL_MATERIAL_AMOUNT*6, @@ -535,7 +535,7 @@ desc = "This cybernetic brain implant will allow you to force your hand muscles to contract, preventing item dropping. Twitch ear to toggle." id = "ci-antidrop" build_type = PROTOLATHE | AWAY_LATHE | MECHFAB - construction_time = 60 + construction_time = 6 SECONDS materials = list( /datum/material/iron = SMALL_MATERIAL_AMOUNT*6, /datum/material/glass = SMALL_MATERIAL_AMOUNT*6, @@ -553,7 +553,7 @@ desc = "This implant will automatically give you back control over your central nervous system, reducing downtime when stunned." id = "ci-antistun" build_type = PROTOLATHE | AWAY_LATHE | MECHFAB - construction_time = 60 + construction_time = 6 SECONDS materials = list( /datum/material/iron = SMALL_MATERIAL_AMOUNT*6, /datum/material/glass = SMALL_MATERIAL_AMOUNT*6, @@ -571,7 +571,7 @@ desc = "This implant with synthesize and pump into your bloodstream a small amount of nutriment when you are starving." id = "ci-nutriment" build_type = PROTOLATHE | AWAY_LATHE | MECHFAB - construction_time = 40 + construction_time = 4 SECONDS materials = list( /datum/material/iron =SMALL_MATERIAL_AMOUNT*5, /datum/material/glass =SMALL_MATERIAL_AMOUNT*5, @@ -588,7 +588,7 @@ desc = "This implant with synthesize and pump into your bloodstream a small amount of nutriment when you are hungry." id = "ci-nutrimentplus" build_type = PROTOLATHE | AWAY_LATHE | MECHFAB - construction_time = 50 + construction_time = 5 SECONDS materials = list( /datum/material/iron = SMALL_MATERIAL_AMOUNT*6, /datum/material/glass = SMALL_MATERIAL_AMOUNT*6, @@ -606,7 +606,7 @@ desc = "This implant will attempt to revive you if you lose consciousness. For the faint of heart!" id = "ci-reviver" build_type = PROTOLATHE | AWAY_LATHE | MECHFAB - construction_time = 60 + construction_time = 6 SECONDS materials = list( /datum/material/iron = SMALL_MATERIAL_AMOUNT*8, /datum/material/glass = SMALL_MATERIAL_AMOUNT*8, @@ -624,7 +624,7 @@ desc = "This implant will allow you to use gas from environment or your internals for propulsion in zero-gravity areas." id = "ci-thrusters" build_type = PROTOLATHE | AWAY_LATHE | MECHFAB - construction_time = 80 + construction_time = 8 SECONDS materials = list( /datum/material/iron = SHEET_MATERIAL_AMOUNT*2, /datum/material/glass =SHEET_MATERIAL_AMOUNT, @@ -679,28 +679,64 @@ /datum/design/implant_chem name = "Chemical Implant Case" - desc = "A glass case containing an implant." + desc = "A glass case containing a chemical implant." id = "implant_chem" build_type = PROTOLATHE | AWAY_LATHE - materials = list(/datum/material/glass = SMALL_MATERIAL_AMOUNT*7) + materials = list(/datum/material/glass = SMALL_MATERIAL_AMOUNT * 7) build_path = /obj/item/implantcase/chem category = list( - RND_CATEGORY_CYBERNETICS + RND_SUBCATEGORY_CYBERNETICS_IMPLANTS_MISC + RND_CATEGORY_CYBERNETICS + RND_SUBCATEGORY_CYBERNETICS_IMPLANTS_SECURITY ) departmental_flags = DEPARTMENT_BITFLAG_SECURITY | DEPARTMENT_BITFLAG_MEDICAL /datum/design/implant_tracking name = "Tracking Implant Case" - desc = "A glass case containing an implant." + desc = "A glass case containing a tracking implant." id = "implant_tracking" build_type = PROTOLATHE | AWAY_LATHE - materials = list(/datum/material/iron =SMALL_MATERIAL_AMOUNT*5, /datum/material/glass =SMALL_MATERIAL_AMOUNT*5) + materials = list(/datum/material/iron = SMALL_MATERIAL_AMOUNT * 5, /datum/material/glass = SMALL_MATERIAL_AMOUNT * 5) build_path = /obj/item/implantcase/tracking category = list( - RND_CATEGORY_CYBERNETICS + RND_SUBCATEGORY_CYBERNETICS_IMPLANTS_MISC + RND_CATEGORY_CYBERNETICS + RND_SUBCATEGORY_CYBERNETICS_IMPLANTS_SECURITY ) departmental_flags = DEPARTMENT_BITFLAG_SECURITY | DEPARTMENT_BITFLAG_MEDICAL +/datum/design/implant_beacon + name = "Beacon Implant Case" + desc = "A glass case containing a beacon implant." + id = "implant_beacon" + build_type = PROTOLATHE | AWAY_LATHE + materials = list(/datum/material/iron = SMALL_MATERIAL_AMOUNT * 5, /datum/material/glass = SMALL_MATERIAL_AMOUNT * 5, /datum/material/bluespace = SMALL_MATERIAL_AMOUNT * 3) + build_path = /obj/item/implantcase/beacon + category = list( + RND_CATEGORY_CYBERNETICS + RND_SUBCATEGORY_CYBERNETICS_IMPLANTS_SECURITY + ) + departmental_flags = DEPARTMENT_BITFLAG_SECURITY + +/datum/design/implant_bluespace + name = "Bluespace Grounding Implant Case" + desc = "A glass case containing a teleport blocker implant." + id = "implant_bluespace" + build_type = PROTOLATHE | AWAY_LATHE + materials = list(/datum/material/iron = SMALL_MATERIAL_AMOUNT * 5, /datum/material/glass = SMALL_MATERIAL_AMOUNT * 5, /datum/material/bluespace = SMALL_MATERIAL_AMOUNT * 3) + build_path = /obj/item/implantcase/teleport_blocker + category = list( + RND_CATEGORY_CYBERNETICS + RND_SUBCATEGORY_CYBERNETICS_IMPLANTS_SECURITY + ) + departmental_flags = DEPARTMENT_BITFLAG_SECURITY + +/datum/design/implant_exile + name = "Exile Implant Case" + desc = "A glass case containing an exile implant." + id = "implant_exile" + build_type = PROTOLATHE | AWAY_LATHE + materials = list(/datum/material/iron = SMALL_MATERIAL_AMOUNT * 5, /datum/material/glass = SMALL_MATERIAL_AMOUNT * 5, /datum/material/titanium = SMALL_MATERIAL_AMOUNT * 3) + build_path = /obj/item/implantcase/exile + category = list( + RND_CATEGORY_CYBERNETICS + RND_SUBCATEGORY_CYBERNETICS_IMPLANTS_SECURITY + ) + departmental_flags = DEPARTMENT_BITFLAG_SECURITY + //Cybernetic organs /datum/design/cybernetic_liver @@ -708,7 +744,7 @@ desc = "A basic cybernetic liver." id = "cybernetic_liver" build_type = PROTOLATHE | AWAY_LATHE | MECHFAB - construction_time = 40 + construction_time = 4 SECONDS materials = list(/datum/material/iron =SMALL_MATERIAL_AMOUNT*5, /datum/material/glass =SMALL_MATERIAL_AMOUNT*5) build_path = /obj/item/organ/internal/liver/cybernetic category = list( @@ -731,7 +767,7 @@ name = "Upgraded Cybernetic Liver" desc = "An upgraded cybernetic liver." id = "cybernetic_liver_tier3" - construction_time = 50 + construction_time = 5 SECONDS materials = list(/datum/material/iron =SMALL_MATERIAL_AMOUNT*5, /datum/material/glass =SMALL_MATERIAL_AMOUNT*5, /datum/material/silver=SMALL_MATERIAL_AMOUNT*5) build_path = /obj/item/organ/internal/liver/cybernetic/tier3 category = list( @@ -744,7 +780,7 @@ desc = "A basic cybernetic heart." id = "cybernetic_heart" build_type = PROTOLATHE | AWAY_LATHE | MECHFAB - construction_time = 40 + construction_time = 4 SECONDS materials = list(/datum/material/iron =SMALL_MATERIAL_AMOUNT*5, /datum/material/glass =SMALL_MATERIAL_AMOUNT*5) build_path = /obj/item/organ/internal/heart/cybernetic category = list( @@ -767,7 +803,7 @@ name = "Upgraded Cybernetic Heart" desc = "An upgraded cybernetic heart." id = "cybernetic_heart_tier3" - construction_time = 50 + construction_time = 5 SECONDS materials = list(/datum/material/iron =SMALL_MATERIAL_AMOUNT*5, /datum/material/glass =SMALL_MATERIAL_AMOUNT*5, /datum/material/silver=SMALL_MATERIAL_AMOUNT*5) build_path = /obj/item/organ/internal/heart/cybernetic/tier3 category = list( @@ -780,7 +816,7 @@ desc = "A basic pair of cybernetic lungs." id = "cybernetic_lungs" build_type = PROTOLATHE | AWAY_LATHE | MECHFAB - construction_time = 40 + construction_time = 4 SECONDS materials = list(/datum/material/iron =SMALL_MATERIAL_AMOUNT*5, /datum/material/glass =SMALL_MATERIAL_AMOUNT*5) build_path = /obj/item/organ/internal/lungs/cybernetic category = list( @@ -803,7 +839,7 @@ name = "Upgraded Cybernetic Lungs" desc = "A pair of upgraded cybernetic lungs." id = "cybernetic_lungs_tier3" - construction_time = 50 + construction_time = 5 SECONDS materials = list(/datum/material/iron =SMALL_MATERIAL_AMOUNT*5, /datum/material/glass =SMALL_MATERIAL_AMOUNT*5, /datum/material/silver =SMALL_MATERIAL_AMOUNT*5) build_path = /obj/item/organ/internal/lungs/cybernetic/tier3 category = list( @@ -816,7 +852,7 @@ desc = "A basic cybernetic stomach." id = "cybernetic_stomach" build_type = PROTOLATHE | AWAY_LATHE | MECHFAB - construction_time = 40 + construction_time = 4 SECONDS materials = list(/datum/material/iron =SMALL_MATERIAL_AMOUNT*5, /datum/material/glass =SMALL_MATERIAL_AMOUNT*5) build_path = /obj/item/organ/internal/stomach/cybernetic category = list( @@ -839,7 +875,7 @@ name = "Upgraded Cybernetic Stomach" desc = "An upgraded cybernetic stomach." id = "cybernetic_stomach_tier3" - construction_time = 50 + construction_time = 5 SECONDS materials = list(/datum/material/iron =SMALL_MATERIAL_AMOUNT*5, /datum/material/glass =SMALL_MATERIAL_AMOUNT*5, /datum/material/silver =SMALL_MATERIAL_AMOUNT*5) build_path = /obj/item/organ/internal/stomach/cybernetic/tier3 category = list( @@ -852,7 +888,7 @@ desc = "A Basic pair of cybernetic ears." id = "cybernetic_ears" build_type = PROTOLATHE | AWAY_LATHE | MECHFAB - construction_time = 30 + construction_time = 3 SECONDS materials = list(/datum/material/iron = SMALL_MATERIAL_AMOUNT*2.5, /datum/material/glass = SMALL_MATERIAL_AMOUNT*4) build_path = /obj/item/organ/internal/ears/cybernetic category = list( @@ -865,7 +901,7 @@ desc = "A pair of cybernetic ears." id = "cybernetic_ears_u" build_type = PROTOLATHE | AWAY_LATHE | MECHFAB - construction_time = 40 + construction_time = 4 SECONDS materials = list( /datum/material/iron = SMALL_MATERIAL_AMOUNT*5, /datum/material/glass = SMALL_MATERIAL_AMOUNT*5, @@ -882,7 +918,7 @@ desc = "A pair of whisper-sensitive cybernetic ears." id = "cybernetic_ears_whisper" build_type = PROTOLATHE | AWAY_LATHE | MECHFAB - construction_time = 40 + construction_time = 4 SECONDS materials = list( /datum/material/iron = SMALL_MATERIAL_AMOUNT*5, /datum/material/glass = SMALL_MATERIAL_AMOUNT*5, @@ -899,7 +935,7 @@ desc = "A pair of wall-penetrating cybernetic ears." id = "cybernetic_ears_xray" build_type = PROTOLATHE | AWAY_LATHE | MECHFAB - construction_time = 40 + construction_time = 4 SECONDS materials = list( /datum/material/iron = SMALL_MATERIAL_AMOUNT*5, /datum/material/glass = SMALL_MATERIAL_AMOUNT*5, @@ -916,7 +952,7 @@ desc = "A basic pair of cybernetic eyes." id = "cybernetic_eyes" build_type = PROTOLATHE | AWAY_LATHE | MECHFAB - construction_time = 30 + construction_time = 3 SECONDS materials = list(/datum/material/iron = SMALL_MATERIAL_AMOUNT*2.5, /datum/material/glass = SMALL_MATERIAL_AMOUNT*4) build_path = /obj/item/organ/internal/eyes/robotic/basic category = list( @@ -949,7 +985,7 @@ desc = "These reactive micro-shields will protect you from welders and flashes without obscuring your vision." id = "ci-welding" build_type = PROTOLATHE | AWAY_LATHE | MECHFAB - construction_time = 40 + construction_time = 4 SECONDS materials = list(/datum/material/iron = SMALL_MATERIAL_AMOUNT*6, /datum/material/glass = SMALL_MATERIAL_AMOUNT*4) build_path = /obj/item/organ/internal/eyes/robotic/shield category = list( @@ -967,7 +1003,7 @@ desc = "A pair of cybernetic eyes that can emit multicolored light" id = "ci-gloweyes" build_type = PROTOLATHE | AWAY_LATHE | MECHFAB - construction_time = 40 + construction_time = 4 SECONDS materials = list(/datum/material/iron = SMALL_MATERIAL_AMOUNT*6, /datum/material/glass =HALF_SHEET_MATERIAL_AMOUNT) build_path = /obj/item/organ/internal/eyes/robotic/glow category = list( diff --git a/code/modules/research/designs/misc_designs.dm b/code/modules/research/designs/misc_designs.dm index ae8f7e43a40..e17b53da692 100644 --- a/code/modules/research/designs/misc_designs.dm +++ b/code/modules/research/designs/misc_designs.dm @@ -972,7 +972,7 @@ category = list( RND_CATEGORY_EQUIPMENT + RND_SUBCATEGORY_EQUIPMENT_SERVICE ) - departmental_flags = DEPARTMENT_BITFLAG_SERVICE + departmental_flags = DEPARTMENT_BITFLAG_SERVICE | DEPARTMENT_BITFLAG_CARGO | DEPARTMENT_BITFLAG_SCIENCE /datum/design/stabilized_hook name = "Gyro-Stabilized Hook" @@ -984,7 +984,19 @@ category = list( RND_CATEGORY_EQUIPMENT + RND_SUBCATEGORY_EQUIPMENT_SERVICE ) - departmental_flags = DEPARTMENT_BITFLAG_SERVICE + departmental_flags = DEPARTMENT_BITFLAG_SERVICE | DEPARTMENT_BITFLAG_CARGO | DEPARTMENT_BITFLAG_SCIENCE + +/datum/design/auto_reel + name = "Fishing Line Auto-Reel" + desc = "An advanced line reel which can be used speed up both fishing and casually snagging other items in your direction." + id = "auto_reel" + build_type = PROTOLATHE | AWAY_LATHE + materials = list(/datum/material/iron = SMALL_MATERIAL_AMOUNT * 4, /datum/material/gold = SMALL_MATERIAL_AMOUNT * 3, /datum/material/silver = SMALL_MATERIAL_AMOUNT * 3) + build_path = /obj/item/fishing_line/auto_reel + category = list( + RND_CATEGORY_EQUIPMENT + RND_SUBCATEGORY_EQUIPMENT_SERVICE + ) + departmental_flags = DEPARTMENT_BITFLAG_SERVICE | DEPARTMENT_BITFLAG_CARGO | DEPARTMENT_BITFLAG_SCIENCE /datum/design/fish_analyzer name = "Fish Analyzer" @@ -996,7 +1008,7 @@ category = list( RND_CATEGORY_EQUIPMENT + RND_SUBCATEGORY_EQUIPMENT_SERVICE ) - departmental_flags = DEPARTMENT_BITFLAG_SERVICE + departmental_flags = DEPARTMENT_BITFLAG_SERVICE | DEPARTMENT_BITFLAG_CARGO | DEPARTMENT_BITFLAG_SCIENCE // Coffeemaker Stuff diff --git a/code/modules/research/designs/power_designs.dm b/code/modules/research/designs/power_designs.dm index 80844562eb4..3548d8ac38d 100644 --- a/code/modules/research/designs/power_designs.dm +++ b/code/modules/research/designs/power_designs.dm @@ -8,7 +8,7 @@ id = "basic_cell" build_type = PROTOLATHE | AWAY_LATHE | AUTOLATHE |MECHFAB materials = list(/datum/material/iron = SMALL_MATERIAL_AMOUNT * 7, /datum/material/glass =SMALL_MATERIAL_AMOUNT * 0.5) - construction_time=100 + construction_time = 10 SECONDS build_path = /obj/item/stock_parts/cell/empty category = list( RND_CATEGORY_STOCK_PARTS + RND_SUBCATEGORY_STOCK_PARTS_1 @@ -21,7 +21,7 @@ id = "high_cell" build_type = PROTOLATHE | AWAY_LATHE | AUTOLATHE | MECHFAB materials = list(/datum/material/iron = SMALL_MATERIAL_AMOUNT * 7, /datum/material/glass = SMALL_MATERIAL_AMOUNT * 0.6) - construction_time=100 + construction_time = 10 SECONDS build_path = /obj/item/stock_parts/cell/high/empty category = list( RND_CATEGORY_STOCK_PARTS + RND_SUBCATEGORY_STOCK_PARTS_2 @@ -34,7 +34,7 @@ id = "super_cell" build_type = PROTOLATHE | AWAY_LATHE | MECHFAB materials = list(/datum/material/iron = SMALL_MATERIAL_AMOUNT * 7, /datum/material/glass = SMALL_MATERIAL_AMOUNT * 0.7) - construction_time=100 + construction_time = 10 SECONDS build_path = /obj/item/stock_parts/cell/super/empty category = list( RND_CATEGORY_STOCK_PARTS + RND_SUBCATEGORY_STOCK_PARTS_3 @@ -47,7 +47,7 @@ id = "hyper_cell" build_type = PROTOLATHE | AWAY_LATHE | MECHFAB materials = list(/datum/material/iron = SMALL_MATERIAL_AMOUNT * 7, /datum/material/gold = SMALL_MATERIAL_AMOUNT * 1.5, /datum/material/silver = SMALL_MATERIAL_AMOUNT * 1.5, /datum/material/glass = SMALL_MATERIAL_AMOUNT * 0.8) - construction_time=100 + construction_time = 10 SECONDS build_path = /obj/item/stock_parts/cell/hyper/empty category = list( RND_CATEGORY_STOCK_PARTS + RND_SUBCATEGORY_STOCK_PARTS_3 @@ -60,7 +60,7 @@ id = "bluespace_cell" build_type = PROTOLATHE | AWAY_LATHE | MECHFAB materials = list(/datum/material/iron = SMALL_MATERIAL_AMOUNT * 8, /datum/material/gold = SMALL_MATERIAL_AMOUNT * 1.2, /datum/material/glass = SMALL_MATERIAL_AMOUNT * 1.6, /datum/material/diamond = SMALL_MATERIAL_AMOUNT * 1.6, /datum/material/titanium =SMALL_MATERIAL_AMOUNT * 3, /datum/material/bluespace =SMALL_MATERIAL_AMOUNT) - construction_time=100 + construction_time = 10 SECONDS build_path = /obj/item/stock_parts/cell/bluespace/empty category = list( RND_CATEGORY_STOCK_PARTS + RND_SUBCATEGORY_STOCK_PARTS_4 @@ -107,7 +107,7 @@ id = "turbine_part_compressor" build_type = PROTOLATHE | AWAY_LATHE materials = list(/datum/material/iron =SMALL_MATERIAL_AMOUNT*5) - construction_time = 100 + construction_time = 10 SECONDS build_path = /obj/item/turbine_parts/compressor category = list( RND_CATEGORY_STOCK_PARTS + RND_SUBCATEGORY_STOCK_PARTS_TURBINE @@ -120,7 +120,7 @@ id = "turbine_part_rotor" build_type = PROTOLATHE | AWAY_LATHE materials = list(/datum/material/iron =SMALL_MATERIAL_AMOUNT*5) - construction_time = 100 + construction_time = 10 SECONDS build_path = /obj/item/turbine_parts/rotor category = list( RND_CATEGORY_STOCK_PARTS + RND_SUBCATEGORY_STOCK_PARTS_TURBINE @@ -133,7 +133,7 @@ id = "turbine_part_stator" build_type = PROTOLATHE | AWAY_LATHE materials = list(/datum/material/iron = SMALL_MATERIAL_AMOUNT*5) - construction_time = 100 + construction_time = 10 SECONDS build_path = /obj/item/turbine_parts/stator category = list( RND_CATEGORY_STOCK_PARTS + RND_SUBCATEGORY_STOCK_PARTS_TURBINE diff --git a/code/modules/research/destructive_analyzer.dm b/code/modules/research/destructive_analyzer.dm index 72fd12ced70..e9e34bfd806 100644 --- a/code/modules/research/destructive_analyzer.dm +++ b/code/modules/research/destructive_analyzer.dm @@ -14,16 +14,29 @@ base_icon_state = "d_analyzer" circuit = /obj/item/circuitboard/machine/destructive_analyzer -/obj/machinery/rnd/destructive_analyzer/Initialize(mapload) +/obj/machinery/rnd/destructive_analyzer/add_context(atom/source, list/context, obj/item/held_item, mob/living/user) . = ..() - register_context() -/obj/machinery/rnd/destructive_analyzer/add_context(atom/source, list/context, obj/item/held_item, mob/living/user) + var/screentip_set = FALSE if(loaded_item) context[SCREENTIP_CONTEXT_ALT_LMB] = "Remove Item" + screentip_set = TRUE else if(!isnull(held_item)) context[SCREENTIP_CONTEXT_LMB] = "Insert Item" - return CONTEXTUAL_SCREENTIP_SET + screentip_set = TRUE + + if(screentip_set) + . = CONTEXTUAL_SCREENTIP_SET + +/obj/machinery/rnd/destructive_analyzer/examine(mob/user) + . = ..() + if(!in_range(user, src) && !isobserver(user)) + return + + if(loaded_item) + . += span_notice("[EXAMINE_HINT("Left-Click")] to remove loaded item inside.") + else + . += span_notice("An item can be loaded inside via [EXAMINE_HINT("Left-Click")].") /obj/machinery/rnd/destructive_analyzer/attackby(obj/item/weapon, mob/living/user, params) if(user.combat_mode) diff --git a/code/modules/research/experimentor.dm b/code/modules/research/experimentor.dm index a1bf7cfa775..10ed939c55b 100644 --- a/code/modules/research/experimentor.dm +++ b/code/modules/research/experimentor.dm @@ -26,7 +26,7 @@ density = TRUE use_power = IDLE_POWER_USE circuit = /obj/item/circuitboard/machine/experimentor - interaction_flags_machine = INTERACT_MACHINE_WIRES_IF_OPEN|INTERACT_MACHINE_ALLOW_SILICON|INTERACT_MACHINE_OPEN_SILICON|INTERACT_MACHINE_SET_MACHINE + interaction_flags_machine = INTERACT_MACHINE_WIRES_IF_OPEN|INTERACT_MACHINE_ALLOW_SILICON|INTERACT_MACHINE_OPEN_SILICON var/recentlyExperimented = 0 /// Weakref to the first ian we can find at init var/datum/weakref/tracked_ian_ref @@ -98,7 +98,6 @@ /obj/item/aicard, /obj/item/storage/backpack/holding, /obj/item/slime_extract, - /obj/item/onetankbomb, /obj/item/transfer_valve)) /obj/machinery/rnd/experimentor/RefreshParts() @@ -117,14 +116,6 @@ if(in_range(user, src) || isobserver(user)) . += span_notice("The status display reads: Malfunction probability reduced by [malfunction_probability_coeff]%.
    Cooldown interval between experiments at [resetTime*0.1] seconds.") -/obj/machinery/rnd/experimentor/proc/checkCircumstances(obj/item/O) - //snowflake check to only take "made" bombs - if(istype(O, /obj/item/transfer_valve)) - var/obj/item/transfer_valve/T = O - if(!T.tank_one || !T.tank_two || !T.attached_device) - return FALSE - return TRUE - /obj/machinery/rnd/experimentor/attackby(obj/item/weapon, mob/living/user, params) if(user.combat_mode) return ..() @@ -142,117 +133,115 @@ ejectItem() return ..(O) -/obj/machinery/rnd/experimentor/ui_interact(mob/user) - var/list/dat = list("
    ") - if(loaded_item) - dat += "Loaded Item: [loaded_item]" - - dat += "
    Available tests:" - dat += "Poke" - dat += "Irradiate" - dat += "Gas" - dat += "Burn" - dat += "Freeze" - dat += "Destroy
    " - if(istype(loaded_item,/obj/item/relic)) - dat += "Discover" - dat += "Eject" - var/list/listin = techweb_item_unlock_check(src) - if(listin) - var/list/output = list("Research Boost Data:") - var/list/res = list("Already researched:") - for(var/node_id in listin) - var/datum/techweb_node/N = SSresearch.techweb_node_by_id(node_id) - var/str = "[N.display_name]: [listin[N]] points." - var/datum/techweb/science_web = locate(/datum/techweb/science) in SSresearch.techwebs - if(science_web.researched_nodes[N.id]) - res += str - if(science_web.visible_nodes[N.id]) //JOY OF DISCOVERY! - output += str - output += res - dat += output - else - dat += "Nothing loaded." - dat += "Refresh" - dat += "Close
    " - var/datum/browser/popup = new(user, "experimentor","Experimentor", 700, 400, src) - popup.set_content(dat.Join("
    ")) - popup.open() - onclose(user, "experimentor") - -/obj/machinery/rnd/experimentor/Topic(href, href_list) - if(..()) +/obj/machinery/rnd/experimentor/ui_interact(mob/user, datum/tgui/ui) + ui = SStgui.try_update_ui(user, src, ui) + if(!ui) + ui = new (user, src, "Experimentator") + ui.open() + +/obj/machinery/rnd/experimentor/ui_data(mob/user) + var/list/data = list() + + data["hasItem"] = !!loaded_item + data["isOnCooldown"] = recentlyExperimented + data["isServerConnected"] = !!stored_research + + if(!isnull(loaded_item)) + var/list/item_data = list() + + item_data["name"] = loaded_item.name + item_data["icon"] = icon2base64(getFlatIcon(loaded_item, no_anim = TRUE)) + item_data["isRelic"] = istype(loaded_item, /obj/item/relic) + + item_data["associatedNodes"] = list() + var/list/unlockable_nodes = techweb_item_unlock_check(loaded_item) + for(var/node_id in unlockable_nodes) + var/datum/techweb_node/node = SSresearch.techweb_node_by_id(node_id) + + item_data["associatedNodes"] += list(list( + "name" = node.display_name, + "isUnlocked" = !(node_id in stored_research.hidden_nodes), + )) + + data["loadedItem"] = item_data + + return data + +/obj/machinery/rnd/experimentor/ui_act(action, list/params) + . = ..() + if(.) return - usr.set_machine(src) - var/scantype = href_list["function"] - var/obj/item/process = locate(href_list["item"]) in src + switch(action) + if("eject") + ejectItem() + return TRUE + + if("experiment") + var/reaction = text2num(params["id"]) + if(isnull(reaction)) + return + + try_perform_experiment(reaction) + return TRUE - if(href_list["close"]) - usr << browse(null, "window=experimentor") +/obj/machinery/rnd/experimentor/proc/ejectItem(delete = FALSE) + if(isnull(loaded_item)) return - else if(scantype == "eject") - ejectItem() - else if(scantype == "refresh") - updateUsrDialog() - else - if(recentlyExperimented) - to_chat(usr, span_warning("[src] has been used too recently!")) - else if(!loaded_item) - to_chat(usr, span_warning("[src] is not currently loaded!")) - else if(!process || process != loaded_item) //Interface exploit protection (such as hrefs or swapping items with interface set to old item) - to_chat(usr, span_danger("Interface failure detected in [src]. Please try again.")) - else - var/dotype - if(text2num(scantype) == SCANTYPE_DISCOVER) - dotype = SCANTYPE_DISCOVER - else - dotype = matchReaction(process,scantype) - experiment(dotype,process) - use_power(750) - if(dotype != FAIL) - var/list/nodes = techweb_item_unlock_check(process) - var/picked = pick_weight(nodes) //This should work. - stored_research.unhide_node(SSresearch.techweb_node_by_id(picked)) - updateUsrDialog() - -/obj/machinery/rnd/experimentor/proc/matchReaction(matching,reaction) - var/obj/item/D = matching - if(D) - var/list/item_reactions = item_reactions() - if(item_reactions.Find("[D.type]")) - var/tor = item_reactions["[D.type]"] - if(tor == text2num(reaction)) - return tor - else - return FAIL - else - return FAIL - else + + if(delete) + QDEL_NULL(loaded_item) + return + + var/atom/drop_atom = get_step(src, EAST) || drop_location() + if(cloneMode) + visible_message(span_notice("A duplicate of \the [loaded_item] pops out!")) + new loaded_item.type(drop_atom) + cloneMode = FALSE + return + + loaded_item.forceMove(drop_atom) + loaded_item = null + +/obj/machinery/rnd/experimentor/proc/match_reaction(obj/item/matching, target_reaction) + PRIVATE_PROC(TRUE) + if(isnull(matching) || isnull(target_reaction)) return FAIL -/obj/machinery/rnd/experimentor/proc/ejectItem(delete=FALSE) - if(loaded_item) - if(cloneMode) - visible_message(span_notice("A duplicate [loaded_item] pops out!")) - var/type_to_make = loaded_item.type - new type_to_make(get_turf(pick(oview(1,src)))) - cloneMode = FALSE - return - var/turf/dropturf = get_turf(pick(view(1,src))) - if(!dropturf) //Failsafe to prevent the object being lost in the void forever. - dropturf = drop_location() - loaded_item.forceMove(dropturf) - if(delete) - qdel(loaded_item) - loaded_item = null + var/list/item_reactions = item_reactions() + if("[matching.type]" in item_reactions) + var/associated_reaction = item_reactions["[matching.type]"] + if(associated_reaction == target_reaction) + return associated_reaction + + return FAIL + +/obj/machinery/rnd/experimentor/proc/try_perform_experiment(reaction) + PRIVATE_PROC(TRUE) + if(isnull(stored_research)) + return + + if(recentlyExperimented) + return + + if(isnull(loaded_item)) + return + + if(reaction != SCANTYPE_DISCOVER) + reaction = match_reaction(loaded_item, reaction) + + if(reaction != FAIL) + var/picked_node_id = pick(techweb_item_unlock_check(loaded_item)) + stored_research.unhide_node(SSresearch.techweb_node_by_id(picked_node_id)) + + experiment(reaction, loaded_item) + use_power(750) /obj/machinery/rnd/experimentor/proc/throwSmoke(turf/where) var/datum/effect_system/fluid_spread/smoke/smoke = new smoke.set_up(0, holder = src, location = where) smoke.start() - /obj/machinery/rnd/experimentor/proc/experiment(exp,obj/item/exp_on) recentlyExperimented = 1 icon_state = "[base_icon_state]_wloop" diff --git a/code/modules/research/machinery/_production.dm b/code/modules/research/machinery/_production.dm index 0b3924827fd..9e4f3adaec3 100644 --- a/code/modules/research/machinery/_production.dm +++ b/code/modules/research/machinery/_production.dm @@ -1,38 +1,38 @@ /obj/machinery/rnd/production name = "technology fabricator" desc = "Makes researched and prototype items with materials and energy." - layer = BELOW_OBJ_LAYER /// The efficiency coefficient. Material costs and print times are multiplied by this number; - /// better parts result in a higher efficiency (and lower value). var/efficiency_coeff = 1 - /// The material storage used by this fabricator. var/datum/component/remote_materials/materials - - /// Which departments forego the lathe tax when using this lathe. + /// Which departments are allowed to process this design var/allowed_department_flags = ALL - - /// What's flick()'d on print. + /// Icon state when production has started var/production_animation - /// The types of designs this fabricator can print. var/allowed_buildtypes = NONE - /// All designs in the techweb that can be fabricated by this machine, since the last update. var/list/datum/design/cached_designs - /// What color is this machine's stripe? Leave null to not have a stripe. var/stripe_color = null - - /// Does this charge the user's ID on fabrication? - var/charges_tax = TRUE + ///direction we output onto (if 0, on top of us) + var/drop_direction = 0 /obj/machinery/rnd/production/Initialize(mapload) . = ..() cached_designs = list() - materials = AddComponent(/datum/component/remote_materials, mapload) + + materials = AddComponent( + /datum/component/remote_materials, \ + mapload, \ + mat_container_signals = list( \ + COMSIG_MATCONTAINER_ITEM_CONSUMED = TYPE_PROC_REF(/obj/machinery/rnd, local_material_insert) + ) \ + ) + + RegisterSignal(src, COMSIG_SILO_ITEM_CONSUMED, TYPE_PROC_REF(/obj/machinery/rnd/production, silo_material_insert)) AddComponent( /datum/component/payment, \ @@ -42,9 +42,48 @@ TRUE, \ ) - RefreshParts() update_icon(UPDATE_OVERLAYS) +/obj/machinery/rnd/production/Destroy() + materials = null + cached_designs = null + return ..() + + +// Stuff for the stripe on the department machines +/obj/machinery/rnd/production/default_deconstruction_screwdriver(mob/user, icon_state_open, icon_state_closed, obj/item/screwdriver) + . = ..() + + update_icon(UPDATE_OVERLAYS) + +/obj/machinery/rnd/production/update_overlays() + . = ..() + + if(!stripe_color) + return + + var/mutable_appearance/stripe = mutable_appearance('icons/obj/machines/research.dmi', "protolathe_stripe[panel_open ? "_t" : ""]") + stripe.color = stripe_color + . += stripe + +/obj/machinery/rnd/production/examine(mob/user) + . = ..() + if(!in_range(user, src) && !isobserver(user)) + return + + . += span_notice("Material usage cost at [efficiency_coeff * 100]%") + if(drop_direction) + . += span_notice("Currently configured to drop printed objects [dir2text(drop_direction)].") + . += span_notice("[EXAMINE_HINT("Alt-click")] to reset.") + else + . += span_notice("[EXAMINE_HINT("Drag")] towards a direction (while next to it) to change drop direction.") + +/obj/machinery/rnd/production/add_context(atom/source, list/context, obj/item/held_item, mob/user) + . = ..() + if(drop_direction) + context[SCREENTIP_CONTEXT_ALT_LMB] = "Reset Drop" + return CONTEXTUAL_SCREENTIP_SET + /obj/machinery/rnd/production/connect_techweb(datum/techweb/new_techweb) if(stored_research) UnregisterSignal(stored_research, list(COMSIG_TECHWEB_ADD_DESIGN, COMSIG_TECHWEB_REMOVE_DESIGN)) @@ -55,24 +94,14 @@ RegisterSignals( stored_research, list(COMSIG_TECHWEB_ADD_DESIGN, COMSIG_TECHWEB_REMOVE_DESIGN), - PROC_REF(on_techweb_update) + TYPE_PROC_REF(/obj/machinery/rnd/production, on_techweb_update) ) update_designs() -/obj/machinery/rnd/production/Destroy() - materials = null - cached_designs = null - return ..() - -/obj/machinery/rnd/production/proc/on_techweb_update() - SIGNAL_HANDLER - - // We're probably going to get more than one update (design) at a time, so batch - // them together. - addtimer(CALLBACK(src, PROC_REF(update_designs)), 2 SECONDS, TIMER_UNIQUE | TIMER_OVERRIDE) - /// Updates the list of designs this fabricator can print. /obj/machinery/rnd/production/proc/update_designs() + PROTECTED_PROC(TRUE) + var/previous_design_count = cached_designs.len cached_designs.Cut() @@ -91,12 +120,100 @@ update_static_data_for_all_viewers() +/obj/machinery/rnd/production/proc/on_techweb_update() + SIGNAL_HANDLER + + // We're probably going to get more than one update (design) at a time, so batch + // them together. + addtimer(CALLBACK(src, PROC_REF(update_designs)), 2 SECONDS, TIMER_UNIQUE | TIMER_OVERRIDE) + +///When materials are instered via silo link +/obj/machinery/rnd/proc/silo_material_insert(obj/machinery/rnd/machine, container, obj/item/item_inserted, last_inserted_id, list/mats_consumed, amount_inserted) + SIGNAL_HANDLER + + process_item(item_inserted, mats_consumed, amount_inserted) + +/** + * Consumes power for the item inserted either into silo or local storage. + * Arguments + * + * * obj/item/item_inserted - the item to process + * * list/mats_consumed - list of mats consumed + * * amount_inserted - amount of material actually processed + */ +/obj/machinery/rnd/proc/process_item(obj/item/item_inserted, list/mats_consumed, amount_inserted) + PRIVATE_PROC(TRUE) + + //we use initial(active_power_usage) because higher tier parts will have higher active usage but we have no benifit from it + if(directly_use_power(ROUND_UP((amount_inserted / (MAX_STACK_SIZE * SHEET_MATERIAL_AMOUNT)) * 0.01 * initial(active_power_usage)))) + var/mat_name = "iron" + + var/highest_mat = 0 + for(var/datum/material/mat as anything in mats_consumed) + var/present_mat = mats_consumed[mat] + if(present_mat > highest_mat) + mat_name = initial(mat.name) + if(mat_name == "silver" || mat_name == "titanium" || mat_name == "plastic") //these materials have similar appearances so use an common overlay for them + mat_name = "shiny" + highest_mat = present_mat + + flick_animation(mat_name) +/** + * Plays an visual animation when materials are inserted + * Arguments + * + * * mat_name - the name of the material we are trying to animate on the machine + */ +/obj/machinery/rnd/proc/flick_animation(mat_name) + PROTECTED_PROC(TRUE) + SHOULD_CALL_PARENT(FALSE) + + flick_overlay_view(mutable_appearance('icons/obj/machines/research.dmi', "protolathe_[mat_name]"), 1 SECONDS) + +///When materials are instered into local storage +/obj/machinery/rnd/proc/local_material_insert(container, obj/item/item_inserted, last_inserted_id, list/mats_consumed, amount_inserted, atom/context) + SIGNAL_HANDLER + + process_item(item_inserted, mats_consumed, amount_inserted) + /obj/machinery/rnd/production/RefreshParts() . = ..() - calculate_efficiency() + if(materials) + var/total_storage = 0 + for(var/datum/stock_part/matter_bin/bin in component_parts) + total_storage += bin.tier * 37.5 * SHEET_MATERIAL_AMOUNT + materials.set_local_size(total_storage) + + efficiency_coeff = compute_efficiency() + update_static_data_for_all_viewers() +///Computes this machines cost efficiency based on the available parts +/obj/machinery/rnd/production/proc/compute_efficiency() + PROTECTED_PROC(TRUE) + + var/efficiency = 1.2 + for(var/datum/stock_part/servo/servo in component_parts) + efficiency -= servo.tier * 0.1 + + return efficiency + +/** + * The cost efficiency for an particular design + * Arguments + * + * * path - the design path to check for + */ +/obj/machinery/rnd/production/proc/build_efficiency(path) + PROTECTED_PROC(TRUE) // NOVA EDIT CHANGE - ORIGINAL: PRIVATE_PROC(TRUE) + SHOULD_BE_PURE(TRUE) + + if(ispath(path, /obj/item/stack/sheet) || ispath(path, /obj/item/stack/ore/bluespace_crystal)) + return 1 + else + return efficiency_coeff + /obj/machinery/rnd/production/ui_assets(mob/user) return list( get_asset_datum(/datum/asset/spritesheet/sheetmaterials), @@ -117,16 +234,13 @@ var/datum/asset/spritesheet/research_designs/spritesheet = get_asset_datum(/datum/asset/spritesheet/research_designs) var/size32x32 = "[spritesheet.name]32x32" - var/max_multiplier = INFINITY var/coefficient for(var/datum/design/design in cached_designs) var/cost = list() - max_multiplier = INFINITY coefficient = build_efficiency(design.build_path) for(var/datum/material/mat in design.materials) cost[mat.name] = OPTIMAL_COST(design.materials[mat] * coefficient) - max_multiplier = min(max_multiplier, 50, round(materials.mat_container.get_material_amount(mat) / cost[mat.name])) var/icon_size = spritesheet.icon_size_id(design.id) designs[design.id] = list( @@ -135,9 +249,7 @@ "cost" = cost, "id" = design.id, "categories" = design.category, - "icon" = "[icon_size == size32x32 ? "" : "[icon_size] "][design.id]", - "constructionTime" = 0, - "maxmult" = max_multiplier + "icon" = "[icon_size == size32x32 ? "" : "[icon_size] "][design.id]" ) data["designs"] = designs @@ -156,167 +268,176 @@ return data -/obj/machinery/rnd/production/ui_act(action, list/params) +/obj/machinery/rnd/production/ui_act(action, list/params, datum/tgui/ui) . = ..() - if(.) return - . = TRUE - switch (action) if("remove_mat") var/datum/material/material = locate(params["ref"]) - var/amount = text2num(params["amount"]) - // SAFETY: eject_sheets checks for valid mats - materials.eject_sheets(material, amount) + if(!istype(material)) + return - if("build") - user_try_print_id(params["ref"], params["amount"]) - -/// Updates the fabricator's efficiency coefficient based on the installed parts. -/obj/machinery/rnd/production/proc/calculate_efficiency() - efficiency_coeff = 1 - - if(materials) - var/total_storage = 0 - - for(var/datum/stock_part/matter_bin/bin in component_parts) - total_storage += bin.tier * (37.5*SHEET_MATERIAL_AMOUNT) + var/amount = params["amount"] + if(isnull(amount)) + return - materials.set_local_size(total_storage) + amount = text2num(amount) + if(isnull(amount)) + return - var/total_rating = 1.2 + //we use initial(active_power_usage) because higher tier parts will have higher active usage but we have no benifit from it + if(!directly_use_power(ROUND_UP((amount / MAX_STACK_SIZE) * 0.01 * initial(active_power_usage)))) + say("No power to dispense sheets") + return - for(var/datum/stock_part/servo/servo in component_parts) - total_rating -= servo.tier * 0.1 + materials.eject_sheets(material, amount) + return TRUE - efficiency_coeff = max(total_rating, 0) + if("build") + if(busy) + say("Warning: fabricator is busy!") + return + + //validate design + var/design_id = params["ref"] + if(!design_id) + return + var/datum/design/design = stored_research.researched_designs[design_id] ? SSresearch.techweb_design_by_id(design_id) : null + if(!istype(design)) + return FALSE + if(!(isnull(allowed_department_flags) || (design.departmental_flags & allowed_department_flags))) + say("This fabricator does not have the necessary keys to decrypt this design.") + return FALSE + if(design.build_type && !(design.build_type & allowed_buildtypes)) + say("This fabricator does not have the necessary manipulation systems for this design.") + return FALSE + + //validate print quantity + var/print_quantity = params["amount"] + if(isnull(print_quantity)) + return + print_quantity = text2num(print_quantity) + if(isnull(print_quantity)) + return + print_quantity = clamp(print_quantity, 1, 50) + + //efficiency for this design, stacks use exact materials + var/coefficient = build_efficiency(design.build_path) + + //check for materials + if(!materials.can_use_resource()) + return + if(!materials.mat_container.has_materials(design.materials, coefficient, print_quantity)) + say("Not enough materials to complete prototype[print_quantity > 1 ? "s" : ""].") + return FALSE + + //compute power & time to print 1 item + var/charge_per_item = 0 + for(var/material in design.materials) + charge_per_item += design.materials[material] + charge_per_item = ROUND_UP((charge_per_item / (MAX_STACK_SIZE * SHEET_MATERIAL_AMOUNT)) * coefficient * 0.05 * active_power_usage) + var/build_time_per_item = (design.construction_time * design.lathe_time_factor) ** 0.8 + + //start production + busy = TRUE + SStgui.update_uis(src) + if(production_animation) + icon_state = production_animation + start_printing_visuals() // NOVA EDIT ADDITION - COLONY FABRICATOR STUFF + var/turf/target_location + if(drop_direction) + target_location = get_step(src, drop_direction) + if(isclosedturf(target_location)) + target_location = get_turf(src) + else + target_location = get_turf(src) + addtimer(CALLBACK(src, PROC_REF(do_make_item), design, print_quantity, build_time_per_item, coefficient, charge_per_item, target_location), build_time_per_item) + + return TRUE + +/** + * Callback for start_making, actually makes the item + * Arguments + * + * * datum/design/design - the design we are trying to print + * * items_remaining - the number of designs left out to print + * * build_time_per_item - the time taken to print 1 item + * * material_cost_coefficient - the cost efficiency to print 1 design + * * charge_per_item - the amount of power to print 1 item + * * turf/target - the location to drop the printed item on +*/ +/obj/machinery/rnd/production/proc/do_make_item(datum/design/design, items_remaining, build_time_per_item, material_cost_coefficient, charge_per_item, turf/target) + PROTECTED_PROC(TRUE) + + if(!items_remaining) // how + finalize_build() + return -/obj/machinery/rnd/production/proc/do_print(path, amount) - for(var/i in 1 to amount) - new path(get_turf(src)) + if(!is_operational || !directly_use_power(charge_per_item)) + say("Unable to continue production, power failure.") + finalize_build() + return + if(!materials.can_use_resource()) + finalize_build() + return - SSblackbox.record_feedback("nested tally", "item_printed", amount, list("[type]", "[path]")) + var/is_stack = ispath(design.build_path, /obj/item/stack) + var/list/design_materials = design.materials + if(!materials.mat_container.has_materials(design_materials, material_cost_coefficient, is_stack ? items_remaining : 1)) + say("Unable to continue production, missing materials.") + return + materials.use_materials(design_materials, material_cost_coefficient, is_stack ? items_remaining : 1, "built", "[design.name]") -/obj/machinery/rnd/production/proc/build_efficiency(path) - if(ispath(path, /obj/item/stack/sheet) || ispath(path, /obj/item/stack/ore/bluespace_crystal)) - return 1 + var/atom/movable/created + if(is_stack) + created = new design.build_path(target, items_remaining) else - return efficiency_coeff - -/obj/machinery/rnd/production/proc/user_try_print_id(design_id, print_quantity) - if(!design_id) - return FALSE - - if(istext(print_quantity)) - print_quantity = text2num(print_quantity) + created = new design.build_path(target) + split_materials_uniformly(design_materials, material_cost_coefficient, created) - if(isnull(print_quantity)) - print_quantity = 1 + created.pixel_x = created.base_pixel_x + rand(-6, 6) + created.pixel_y = created.base_pixel_y + rand(-6, 6) - var/datum/design/design = stored_research.researched_designs[design_id] ? SSresearch.techweb_design_by_id(design_id) : null - - if(!istype(design)) - return FALSE - - if(busy) - say("Warning: fabricator is busy!") - return FALSE - - if(!(isnull(allowed_department_flags) || (design.departmental_flags & allowed_department_flags))) - say("This fabricator does not have the necessary keys to decrypt this design.") - return FALSE - - if(design.build_type && !(design.build_type & allowed_buildtypes)) - say("This fabricator does not have the necessary manipulation systems for this design.") - return FALSE - - if(!materials.mat_container) - say("No connection to material storage, please contact the quartermaster.") - return FALSE - - if(materials.on_hold()) - say("Mineral access is on hold, please contact the quartermaster.") - return FALSE - - print_quantity = clamp(print_quantity, 1, 50) - var/coefficient = build_efficiency(design.build_path) - - //check if sufficient materials are available - if(!materials.mat_container.has_materials(design.materials, coefficient, print_quantity)) - say("Not enough materials to complete prototype[print_quantity > 1? "s" : ""].") - return FALSE - - //use power - var/power = active_power_usage - for(var/material in design.materials) - power += round(design.materials[material] * print_quantity / 35) - power = min(active_power_usage, power) - use_power(power) - - // Charge the lathe tax at least once per ten items. - var/total_cost = LATHE_TAX * max(round(print_quantity / 10), 1) - if(!charges_tax) - total_cost = 0 - if(isliving(usr)) - var/mob/living/user = usr - var/obj/item/card/id/card = user.get_idcard(TRUE) - - if(!card && istype(user.pulling, /obj/item/card/id)) - card = user.pulling - - if(card && card.registered_account) - var/datum/bank_account/our_acc = card.registered_account - if(our_acc.account_job.departments_bitflags & allowed_department_flags) - total_cost = 0 // We are not charging crew for printing their own supplies and equipment. - if(attempt_charge(src, usr, total_cost) & COMPONENT_OBJ_CANCEL_CHARGE) - say("Insufficient funds to complete prototype. Please present a holochip or valid ID card.") - return FALSE - if(iscyborg(usr)) - var/mob/living/silicon/robot/borg = usr - if(!borg.cell) - return FALSE - borg.cell.use(SILICON_LATHE_TAX) - - //consume materials - materials.use_materials(design.materials, coefficient, print_quantity, "built", "[design.name]") - //produce item - busy = TRUE - if(production_animation) - flick(production_animation, src) - var/time_coefficient = design.lathe_time_factor * efficiency_coeff - addtimer(CALLBACK(src, PROC_REF(reset_busy)), (30 * time_coefficient * print_quantity) ** 0.5) - addtimer(CALLBACK(src, PROC_REF(do_print), design.build_path, print_quantity), (32 * time_coefficient * print_quantity) ** 0.8) - update_static_data_for_all_viewers() + if(is_stack) + items_remaining = 0 + else + items_remaining -= 1 - return TRUE + if(!items_remaining) + finalize_build() + return + addtimer(CALLBACK(src, PROC_REF(do_make_item), design, items_remaining, build_time_per_item, material_cost_coefficient, charge_per_item, target), build_time_per_item) -// Stuff for the stripe on the department machines -/obj/machinery/rnd/production/default_deconstruction_screwdriver(mob/user, icon_state_open, icon_state_closed, obj/item/screwdriver) - . = ..() +/// Resets the busy flag +/// Called at the end of do_make_item's timer loop +/obj/machinery/rnd/production/proc/finalize_build() + PROTECTED_PROC(TRUE) - update_icon(UPDATE_OVERLAYS) + busy = FALSE + SStgui.update_uis(src) + icon_state = initial(icon_state) -/obj/machinery/rnd/production/update_overlays() +/obj/machinery/rnd/production/MouseDrop(atom/over, src_location, over_location, src_control, over_control, params) . = ..() - - if(!stripe_color) + if((!issilicon(usr) && !isAdminGhostAI(usr)) && !Adjacent(usr)) return + if(busy) + balloon_alert(usr, "busy printing!") + return + var/direction = get_dir(src, over_location) + if(!direction) + return + drop_direction = direction + balloon_alert(usr, "dropping [dir2text(drop_direction)]") - var/mutable_appearance/stripe = mutable_appearance('icons/obj/machines/research.dmi', "protolate_stripe") - - if(!panel_open) - stripe.icon_state = "protolathe_stripe" - else - stripe.icon_state = "protolathe_stripe_t" - - stripe.color = stripe_color - - . += stripe - -/obj/machinery/rnd/production/examine(mob/user) +/obj/machinery/rnd/production/AltClick(mob/user) . = ..() - - if(in_range(user, src) || isobserver(user)) - . += span_notice("The status display reads: Storing up to [materials.local_size] material units.
    Material consumption at [efficiency_coeff * 100]%.
    Build time reduced by [100 - efficiency_coeff * 100]%.") + if(!drop_direction || !can_interact(user)) + return + if(busy) + balloon_alert(user, "busy printing!") + return + balloon_alert(user, "drop direction reset") + drop_direction = 0 diff --git a/code/modules/research/machinery/circuit_imprinter.dm b/code/modules/research/machinery/circuit_imprinter.dm index 8127bc45d0a..2dcbde23663 100644 --- a/code/modules/research/machinery/circuit_imprinter.dm +++ b/code/modules/research/machinery/circuit_imprinter.dm @@ -2,23 +2,22 @@ name = "circuit imprinter" desc = "Manufactures circuit boards for the construction of machines." icon_state = "circuit_imprinter" - circuit = /obj/item/circuitboard/machine/circuit_imprinter production_animation = "circuit_imprinter_ani" + circuit = /obj/item/circuitboard/machine/circuit_imprinter allowed_buildtypes = IMPRINTER -/obj/machinery/rnd/production/circuit_imprinter/calculate_efficiency() - . = ..() - +/obj/machinery/rnd/production/circuit_imprinter/compute_efficiency() var/rating = 0 - for(var/datum/stock_part/servo/servo in component_parts) - rating += servo.tier // There is only one. + rating += servo.tier + + return 0.5 ** max(rating - 1, 0) // One sheet, half sheet, quarter sheet, eighth sheet. - efficiency_coeff = 0.5 ** max(rating - 1, 0) // One sheet, half sheet, quarter sheet, eighth sheet. +/obj/machinery/rnd/production/circuit_imprinter/flick_animation(mat_name) + return //we presently have no animation /obj/machinery/rnd/production/circuit_imprinter/offstation name = "ancient circuit imprinter" desc = "Manufactures circuit boards for the construction of machines. Its ancient construction may limit its ability to print all known technology." allowed_buildtypes = AWAY_IMPRINTER circuit = /obj/item/circuitboard/machine/circuit_imprinter/offstation - charges_tax = FALSE diff --git a/code/modules/research/machinery/departmental_protolathe.dm b/code/modules/research/machinery/departmental_protolathe.dm index a4874876ba2..70e3959f5f7 100644 --- a/code/modules/research/machinery/departmental_protolathe.dm +++ b/code/modules/research/machinery/departmental_protolathe.dm @@ -11,10 +11,6 @@ stripe_color = "#EFB341" payment_department = ACCOUNT_ENG -/obj/machinery/rnd/production/protolathe/department/engineering/no_tax - circuit = /obj/item/circuitboard/machine/protolathe/department/engineering/no_tax - charges_tax = FALSE - /obj/machinery/rnd/production/protolathe/department/service name = "department protolathe (Service)" allowed_department_flags = DEPARTMENT_BITFLAG_SERVICE diff --git a/code/modules/research/machinery/protolathe.dm b/code/modules/research/machinery/protolathe.dm index b48f64ca9d7..7a81a5cd36f 100644 --- a/code/modules/research/machinery/protolathe.dm +++ b/code/modules/research/machinery/protolathe.dm @@ -6,7 +6,7 @@ production_animation = "protolathe_n" allowed_buildtypes = PROTOLATHE -/obj/machinery/rnd/production/protolathe/deconstruct(disassembled) +/obj/machinery/rnd/production/protolathe/on_deconstruction(disassembled) log_game("Protolathe of type [type] [disassembled ? "disassembled" : "deconstructed"] by [key_name(usr)] at [get_area_name(src, TRUE)]") return ..() @@ -23,4 +23,3 @@ desc = "Converts raw materials into useful objects. Its ancient construction may limit its ability to print all known technology." circuit = /obj/item/circuitboard/machine/protolathe/offstation allowed_buildtypes = AWAY_LATHE - charges_tax = FALSE diff --git a/code/modules/research/machinery/techfab.dm b/code/modules/research/machinery/techfab.dm index 38df3fc038d..7f1428882e7 100644 --- a/code/modules/research/machinery/techfab.dm +++ b/code/modules/research/machinery/techfab.dm @@ -3,6 +3,5 @@ desc = "Produces researched prototypes with raw materials and energy." icon_state = "protolathe" circuit = /obj/item/circuitboard/machine/techfab - console_link = FALSE production_animation = "protolathe_n" allowed_buildtypes = PROTOLATHE | IMPRINTER diff --git a/code/modules/research/ordnance/doppler_array.dm b/code/modules/research/ordnance/doppler_array.dm index a109e5061df..a6fe3c9f3ac 100644 --- a/code/modules/research/ordnance/doppler_array.dm +++ b/code/modules/research/ordnance/doppler_array.dm @@ -18,7 +18,7 @@ var/obj/item/computer_disk/inserted_disk // Lighting system to better communicate the directions. - light_system = MOVABLE_LIGHT_DIRECTIONAL + light_system = OVERLAY_LIGHT_DIRECTIONAL light_range = 4 light_power = 1 light_color = COLOR_RED @@ -237,7 +237,7 @@ else if (machine_stat & NOPOWER) . += mutable_appearance(icon, "[base_icon_state]_screen-off") -/obj/machinery/doppler_array/on_deconstruction() +/obj/machinery/doppler_array/on_deconstruction(disassembled) eject_disk() . = ..() diff --git a/code/modules/research/ordnance/tank_compressor.dm b/code/modules/research/ordnance/tank_compressor.dm index 85a2cf44836..830c004acad 100644 --- a/code/modules/research/ordnance/tank_compressor.dm +++ b/code/modules/research/ordnance/tank_compressor.dm @@ -85,9 +85,6 @@ update_appearance() return TRUE -/obj/machinery/atmospherics/components/binary/circulator/get_node_connects() - return list(REVERSE_DIR(dir), dir) // airs[2] is input which is facing dir, airs[1] is output which is facing the other side of dir - /obj/machinery/atmospherics/components/binary/tank_compressor/screwdriver_act(mob/living/user, obj/item/tool) if(active || inserted_tank) return FALSE @@ -241,7 +238,7 @@ update_appearance() return ..() -/obj/machinery/atmospherics/components/binary/tank_compressor/on_deconstruction() +/obj/machinery/atmospherics/components/binary/tank_compressor/on_deconstruction(disassembled) eject_tank() eject_disk() return ..() diff --git a/code/modules/research/rdconsole.dm b/code/modules/research/rdconsole.dm index fdfcf9bf72d..b2b468db120 100644 --- a/code/modules/research/rdconsole.dm +++ b/code/modules/research/rdconsole.dm @@ -236,7 +236,8 @@ Nothing else in the console has ID requirements. /obj/machinery/computer/rdconsole/ui_static_data(mob/user) . = list( - "static_data" = list() + "static_data" = list(), + "point_types_abbreviations" = SSresearch.point_types, ) // Build node cache... diff --git a/code/modules/research/rdmachines.dm b/code/modules/research/rdmachines.dm index 4ab9d73dca7..58d7f1f29cf 100644 --- a/code/modules/research/rdmachines.dm +++ b/code/modules/research/rdmachines.dm @@ -7,21 +7,22 @@ icon = 'icons/obj/machines/research.dmi' density = TRUE use_power = IDLE_POWER_USE + + ///Are we currently printing a machine var/busy = FALSE + ///Is this machne hacked via wires var/hacked = FALSE - var/console_link = TRUE //allow console link. + ///Is this machine disabled via wires var/disabled = FALSE - /// Ref to global science techweb. + ///Ref to global science techweb. var/datum/techweb/stored_research ///The item loaded inside the machine, used by experimentors and destructive analyzers only. var/obj/item/loaded_item -/obj/machinery/rnd/proc/reset_busy() - busy = FALSE - /obj/machinery/rnd/Initialize(mapload) . = ..() set_wires(new /datum/wires/rnd(src)) + register_context() /obj/machinery/rnd/LateInitialize() . = ..() @@ -37,6 +38,46 @@ QDEL_NULL(wires) return ..() +/obj/machinery/rnd/examine(mob/user) + . = ..() + if(!in_range(user, src) && !isobserver(user)) + return + + . += span_notice("A [EXAMINE_HINT("multitool")] with techweb designs can be uploaded here.") + . += span_notice("Its maintainence panel can be [EXAMINE_HINT("screwed")] [panel_open ? "closed" : "open"].") + if(panel_open) + . += span_notice("Use a [EXAMINE_HINT("multitool")] or [EXAMINE_HINT("wirecutters")] to interact with wires.") + . += span_notice("The machine can be [EXAMINE_HINT("pried")] apart.") + +/obj/machinery/rnd/add_context(atom/source, list/context, obj/item/held_item, mob/user) + . = NONE + if(isnull(held_item)) + return + + if(held_item.tool_behaviour == TOOL_SCREWDRIVER) + context[SCREENTIP_CONTEXT_LMB] = "[panel_open ? "Close" : "Open"] Panel" + context[SCREENTIP_CONTEXT_RMB] = "[panel_open ? "Close" : "Open"] Panel" + return CONTEXTUAL_SCREENTIP_SET + + if(panel_open) + var/msg + if(held_item.tool_behaviour == TOOL_CROWBAR) + msg = "Deconstruct" + else if(is_wire_tool(held_item)) + msg = "Open Wires" + + if(msg) + context[SCREENTIP_CONTEXT_LMB] = msg + context[SCREENTIP_CONTEXT_RMB] = msg + return CONTEXTUAL_SCREENTIP_SET + else + if(held_item.tool_behaviour == TOOL_MULTITOOL) + var/obj/item/multitool/tool = held_item + if(!QDELETED(tool.buffer) && istype(tool.buffer, /datum/techweb)) + context[SCREENTIP_CONTEXT_LMB] = "Upload Techweb" + context[SCREENTIP_CONTEXT_RMB] = "Upload Techweb" + return CONTEXTUAL_SCREENTIP_SET + ///Called when attempting to connect the machine to a techweb, forgetting the old. /obj/machinery/rnd/proc/connect_techweb(datum/techweb/new_techweb) if(stored_research) @@ -49,52 +90,42 @@ /obj/machinery/rnd/proc/on_connected_techweb() SHOULD_CALL_PARENT(FALSE) -/obj/machinery/rnd/proc/shock(mob/user, prb) - if(machine_stat & (BROKEN|NOPOWER)) // unpowered, no shock - return FALSE - if(!prob(prb)) - return FALSE - do_sparks(5, TRUE, src) - if (electrocute_mob(user, get_area(src), src, 0.7, TRUE)) - return TRUE - else - return FALSE +///Reset the state of this machine +/obj/machinery/rnd/proc/reset_busy() + busy = FALSE /obj/machinery/rnd/crowbar_act(mob/living/user, obj/item/tool) return default_deconstruction_crowbar(tool) /obj/machinery/rnd/crowbar_act_secondary(mob/living/user, obj/item/tool) - return default_deconstruction_crowbar(tool) + return crowbar_act(user, tool) /obj/machinery/rnd/screwdriver_act(mob/living/user, obj/item/tool) return default_deconstruction_screwdriver(user, "[initial(icon_state)]_t", initial(icon_state), tool) /obj/machinery/rnd/screwdriver_act_secondary(mob/living/user, obj/item/tool) - return default_deconstruction_screwdriver(user, "[initial(icon_state)]_t", initial(icon_state), tool) + return screwdriver_act(user, tool) /obj/machinery/rnd/multitool_act(mob/living/user, obj/item/multitool/tool) + . = ITEM_INTERACT_BLOCKING if(panel_open) wires.interact(user) - return TRUE + return ITEM_INTERACT_SUCCESS if(!QDELETED(tool.buffer) && istype(tool.buffer, /datum/techweb)) connect_techweb(tool.buffer) - return TRUE - return FALSE + return ITEM_INTERACT_SUCCESS /obj/machinery/rnd/multitool_act_secondary(mob/living/user, obj/item/tool) - if(panel_open) - wires.interact(user) - return TRUE + return multitool_act(user, tool) /obj/machinery/rnd/wirecutter_act(mob/living/user, obj/item/tool) + . = ITEM_INTERACT_BLOCKING if(panel_open) wires.interact(user) - return TRUE + return ITEM_INTERACT_SUCCESS /obj/machinery/rnd/wirecutter_act_secondary(mob/living/user, obj/item/tool) - if(panel_open) - wires.interact(user) - return TRUE + return wirecutter_act(user, tool) //whether the machine can have an item inserted in its current state. /obj/machinery/rnd/proc/is_insertion_ready(mob/user) @@ -119,19 +150,7 @@ return TRUE //we eject the loaded item when deconstructing the machine -/obj/machinery/rnd/on_deconstruction() +/obj/machinery/rnd/on_deconstruction(disassembled) if(loaded_item) loaded_item.forceMove(drop_location()) ..() - -/obj/machinery/rnd/proc/AfterMaterialInsert(item_inserted, id_inserted, amount_inserted) - var/stack_name - if(istype(item_inserted, /obj/item/stack/ore/bluespace_crystal)) - stack_name = "bluespace" - use_power(SHEET_MATERIAL_AMOUNT / 10) - else - var/obj/item/stack/S = item_inserted - stack_name = S.name - use_power(min(active_power_usage, (amount_inserted / 100))) - add_overlay("protolathe_[stack_name]") - addtimer(CALLBACK(src, TYPE_PROC_REF(/atom, cut_overlay), "protolathe_[stack_name]"), 10) diff --git a/code/modules/research/server.dm b/code/modules/research/server.dm index b3c10eaac93..e446672bc33 100644 --- a/code/modules/research/server.dm +++ b/code/modules/research/server.dm @@ -230,7 +230,7 @@ to_chat(user, span_notice("You delicately cut the wire. [hdd_wires] wire\s left...")) return TRUE -/obj/machinery/rnd/server/master/on_deconstruction() +/obj/machinery/rnd/server/master/on_deconstruction(disassembled) // If the machine contains a source code HDD, destroying it will negatively impact research speed. Safest to log this. if(source_code_hdd) // Destroyed with a hard drive inside = harm income diff --git a/code/modules/research/stock_parts.dm b/code/modules/research/stock_parts.dm index 8e19be9418e..3dc359acb94 100644 --- a/code/modules/research/stock_parts.dm +++ b/code/modules/research/stock_parts.dm @@ -1,7 +1,7 @@ /*Power cells are in code\modules\power\cell.dm If you create T5+ please take a pass at mech_fabricator.dm. The parts being good enough allows it to go into minus values and create materials out of thin air when printing stuff.*/ -/obj/item/storage/part_replacer//NOVA EDIT - ICON OVERRIDEN BY AESTHETICS - SEE MODULE +/obj/item/storage/part_replacer //NOVA EDIT - ICON OVERRIDEN BY AESTHETICS - SEE MODULE name = "rapid part exchange device" desc = "Special mechanical module made to store, sort, and apply standard machine parts." icon_state = "RPED" @@ -69,7 +69,7 @@ If you create T5+ please take a pass at mech_fabricator.dm. The parts being good else playsound(src, pshoom_or_beepboopblorpzingshadashwoosh, 40, TRUE) -/obj/item/storage/part_replacer/bluespace//NOVA EDIT - ICON OVERRIDEN BY AESTHETICS - SEE MODULE +/obj/item/storage/part_replacer/bluespace //NOVA EDIT - ICON OVERRIDEN BY AESTHETICS - SEE MODULE name = "bluespace rapid part exchange device" desc = "A version of the RPED that allows for replacement of parts and scanning from a distance, along with higher capacity for parts." icon_state = "BS_RPED" diff --git a/code/modules/research/techweb/__techweb_helpers.dm b/code/modules/research/techweb/__techweb_helpers.dm index 469c467bc13..d1d3b6ecfde 100644 --- a/code/modules/research/techweb/__techweb_helpers.dm +++ b/code/modules/research/techweb/__techweb_helpers.dm @@ -23,7 +23,7 @@ /proc/techweb_point_display_generic(pointlist) var/list/ret = list() for(var/i in pointlist) - if(SSresearch.point_types[i]) + if(i in SSresearch.point_types) ret += "[SSresearch.point_types[i]]: [pointlist[i]]" else ret += "ERRORED POINT TYPE: [pointlist[i]]" @@ -32,7 +32,7 @@ /proc/techweb_point_display_rdconsole(pointlist, last_pointlist) var/list/ret = list() for(var/i in pointlist) - var/research_line = "[SSresearch.point_types[i] || "ERRORED POINT TYPE"]: [pointlist[i]]" + var/research_line = "[(i in SSresearch.point_types) || "ERRORED POINT TYPE"]: [pointlist[i]]" if(last_pointlist[i] > 0) research_line += " (+[(last_pointlist[i]) * ((SSresearch.flags & SS_TICKER)? (600 / (world.tick_lag * SSresearch.wait)) : (600 / SSresearch.wait))]/ minute)" ret += research_line diff --git a/code/modules/research/techweb/_techweb.dm b/code/modules/research/techweb/_techweb.dm index 86ed41e4cb4..b4b137d8e21 100644 --- a/code/modules/research/techweb/_techweb.dm +++ b/code/modules/research/techweb/_techweb.dm @@ -107,7 +107,7 @@ /datum/techweb/proc/add_point_list(list/pointlist) for(var/i in pointlist) - if(SSresearch.point_types[i] && pointlist[i] > 0) + if((i in SSresearch.point_types) && pointlist[i] > 0) research_points[i] += pointlist[i] /datum/techweb/proc/add_points_all(amount) @@ -118,7 +118,7 @@ /datum/techweb/proc/remove_point_list(list/pointlist) for(var/i in pointlist) - if(SSresearch.point_types[i] && pointlist[i] > 0) + if((i in SSresearch.point_types) && pointlist[i] > 0) research_points[i] = max(0, research_points[i] - pointlist[i]) /datum/techweb/proc/remove_points_all(amount) @@ -129,7 +129,7 @@ /datum/techweb/proc/modify_point_list(list/pointlist) for(var/i in pointlist) - if(SSresearch.point_types[i] && pointlist[i] != 0) + if((i in SSresearch.point_types) && pointlist[i] != 0) research_points[i] = max(0, research_points[i] + pointlist[i]) /datum/techweb/proc/modify_points_all(amount) @@ -170,19 +170,19 @@ return researched_nodes - hidden_nodes /datum/techweb/proc/add_point_type(type, amount) - if(!SSresearch.point_types[type] || (amount <= 0)) + if(!(type in SSresearch.point_types) || (amount <= 0)) return FALSE research_points[type] += amount return TRUE /datum/techweb/proc/modify_point_type(type, amount) - if(!SSresearch.point_types[type]) + if(!(type in SSresearch.point_types)) return FALSE research_points[type] = max(0, research_points[type] + amount) return TRUE /datum/techweb/proc/remove_point_type(type, amount) - if(!SSresearch.point_types[type] || (amount <= 0)) + if(!(type in SSresearch.point_types) || (amount <= 0)) return FALSE research_points[type] = max(0, research_points[type] - amount) return TRUE diff --git a/code/modules/research/techweb/all_nodes.dm b/code/modules/research/techweb/all_nodes.dm index c0041aae7d7..4a02e368a8e 100644 --- a/code/modules/research/techweb/all_nodes.dm +++ b/code/modules/research/techweb/all_nodes.dm @@ -1180,10 +1180,11 @@ description = "Computers and how they work." prereq_ids = list("datatheory") design_ids = list( + "bankmachine", + "barcode_scanner", "cargo", "cargorequest", "comconsole", - "bankmachine", "crewconsole", "idcard", "libraryconsole", @@ -1339,12 +1340,24 @@ "c38_trac", "implant_chem", "implant_tracking", + "implant_exile", "implantcase", "implanter", "locator", ) research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 2500) +/datum/techweb_node/advanced_implants + id = "adv_subdermal_implants" + display_name = "Advanced Subdermal Implants" + description = "Subdermal implants that leverage bluespace research to control their bluespace signature." + prereq_ids = list("subdermal_implants", "micro_bluespace") + design_ids = list( + "implant_beacon", + "implant_bluespace", + ) + research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 2500) + /datum/techweb_node/cyber_organs id = "cyber_organs" display_name = "Cybernetic Organs" @@ -1471,6 +1484,9 @@ "superresonator", "triggermod", "mining_scanner", + "brm", + "b_smelter", + "b_refinery", )//e a r l y g a m e) research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 2500) @@ -1533,6 +1549,7 @@ design_ids = list( "fishing_rod_tech", "stabilized_hook", + "auto_reel", "fish_analyzer", ) research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 2000) diff --git a/code/modules/research/xenobiology/crossbreeding/chilling.dm b/code/modules/research/xenobiology/crossbreeding/chilling.dm index 1eec00033e5..8890db9a890 100644 --- a/code/modules/research/xenobiology/crossbreeding/chilling.dm +++ b/code/modules/research/xenobiology/crossbreeding/chilling.dm @@ -58,9 +58,10 @@ Chilling extracts: to_chat(user, span_warning("[src] can't affect such a large area.")) return user.visible_message(span_notice("[src] shatters, and a healing aura fills the room briefly.")) - for(var/turf/area_turf as anything in user_area.get_contained_turfs()) - for(var/mob/living/carbon/nearby in area_turf) - nearby.reagents?.add_reagent(/datum/reagent/medicine/regen_jelly,10) + for (var/list/zlevel_turfs as anything in user_area.get_zlevel_turf_lists()) + for(var/turf/area_turf as anything in zlevel_turfs) + for(var/mob/living/carbon/nearby in area_turf) + nearby.reagents?.add_reagent(/datum/reagent/medicine/regen_jelly,10) ..() /obj/item/slimecross/chilling/blue @@ -108,7 +109,7 @@ Chilling extracts: to_chat(user, span_warning("[src] can't affect such a large area.")) return var/filtered = FALSE - for(var/turf/open/T in A.get_contained_turfs()) + for(var/turf/open/T in A.get_turfs_from_all_zlevels()) var/datum/gas_mixture/G = T.air if(istype(G)) G.assert_gas(/datum/gas/plasma) @@ -336,7 +337,8 @@ Chilling extracts: to_chat(user, span_warning("[src] can't affect such a large area.")) return user.visible_message(span_warning("[src] reflects an array of dazzling colors and light, energy rushing to nearby doors!")) - for(var/turf/area_turf as anything in area.get_contained_turfs()) - for(var/obj/machinery/door/airlock/door in area_turf) - new /obj/effect/forcefield/slimewall/rainbow(door.loc) + for (var/list/zlevel_turfs as anything in area.get_zlevel_turf_lists()) + for(var/turf/area_turf as anything in zlevel_turfs) + for(var/obj/machinery/door/airlock/door in area_turf) + new /obj/effect/forcefield/slimewall/rainbow(door.loc) return ..() diff --git a/code/modules/research/xenobiology/xenobiology.dm b/code/modules/research/xenobiology/xenobiology.dm index efc6f3aa8b0..49f7bfa61f3 100644 --- a/code/modules/research/xenobiology/xenobiology.dm +++ b/code/modules/research/xenobiology/xenobiology.dm @@ -1065,9 +1065,10 @@ /obj/item/areaeditor/blueprints/slime/edit_area() ..() - var/area/A = get_area(src) - for(var/turf/T as anything in A.get_contained_turfs()) - T.remove_atom_colour(WASHABLE_COLOUR_PRIORITY) - T.add_atom_colour("#2956B2", FIXED_COLOUR_PRIORITY) - A.area_flags |= XENOBIOLOGY_COMPATIBLE + var/area/area = get_area(src) + for (var/list/zlevel_turfs as anything in area.get_zlevel_turf_lists()) + for(var/turf/area_turf as anything in zlevel_turfs) + area_turf.remove_atom_colour(WASHABLE_COLOUR_PRIORITY) + area_turf.add_atom_colour("#2956B2", FIXED_COLOUR_PRIORITY) + area.area_flags |= XENOBIOLOGY_COMPATIBLE qdel(src) diff --git a/code/modules/security_levels/keycard_authentication.dm b/code/modules/security_levels/keycard_authentication.dm index a3cda3fda0f..5e193e4dbf6 100644 --- a/code/modules/security_levels/keycard_authentication.dm +++ b/code/modules/security_levels/keycard_authentication.dm @@ -180,21 +180,25 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/machinery/keycard_auth, 26) GLOBAL_VAR_INIT(emergency_access, FALSE) /proc/make_maint_all_access() - for(var/area/station/maintenance/A in GLOB.areas) - for(var/turf/in_area as anything in A.get_contained_turfs()) - for(var/obj/machinery/door/airlock/D in in_area) - D.emergency = TRUE - D.update_icon(ALL, 0) + for(var/area/station/maintenance/area in GLOB.areas) + for (var/list/zlevel_turfs as anything in area.get_zlevel_turf_lists()) + for(var/turf/area_turf as anything in zlevel_turfs) + for(var/obj/machinery/door/airlock/airlock in area_turf) + airlock.emergency = TRUE + airlock.update_icon(ALL, 0) + minor_announce("Access restrictions on maintenance and external airlocks have been lifted.", "Attention! Station-wide emergency declared!",1) GLOB.emergency_access = TRUE SSblackbox.record_feedback("nested tally", "keycard_auths", 1, list("emergency maintenance access", "enabled")) /proc/revoke_maint_all_access() - for(var/area/station/maintenance/A in GLOB.areas) - for(var/turf/in_area as anything in A.get_contained_turfs()) - for(var/obj/machinery/door/airlock/D in in_area) - D.emergency = FALSE - D.update_icon(ALL, 0) + for(var/area/station/maintenance/area in GLOB.areas) + for (var/list/zlevel_turfs as anything in area.get_zlevel_turf_lists()) + for(var/turf/area_turf as anything in zlevel_turfs) + for(var/obj/machinery/door/airlock/airlock in area_turf) + airlock.emergency = FALSE + airlock.update_icon(ALL, 0) + minor_announce("Access restrictions in maintenance areas have been restored.", "Attention! Station-wide emergency rescinded:") GLOB.emergency_access = FALSE SSblackbox.record_feedback("nested tally", "keycard_auths", 1, list("emergency maintenance access", "disabled")) diff --git a/code/modules/shuttle/arrivals.dm b/code/modules/shuttle/arrivals.dm index 81b456603b4..3b32bec5539 100644 --- a/code/modules/shuttle/arrivals.dm +++ b/code/modules/shuttle/arrivals.dm @@ -37,11 +37,12 @@ var/list/new_latejoin = list() for(var/area/shuttle/arrival/arrival_area in GLOB.areas) - for(var/turf/arrival_turf as anything in arrival_area.get_contained_turfs()) - for(var/obj/structure/chair/shuttle_chair in arrival_turf) - new_latejoin += shuttle_chair - if(isnull(console)) - console = locate() in arrival_turf + for (var/list/zlevel_turfs as anything in arrival_area.get_zlevel_turf_lists()) + for(var/turf/arrival_turf as anything in zlevel_turfs) + for(var/obj/structure/chair/shuttle_chair in arrival_turf) + new_latejoin += shuttle_chair + if(isnull(console)) + console = locate() in arrival_turf areas += arrival_area if(SSjob.latejoin_trackers.len) diff --git a/code/modules/shuttle/emergency.dm b/code/modules/shuttle/emergency.dm index 490570a67e0..08d06e36bb7 100644 --- a/code/modules/shuttle/emergency.dm +++ b/code/modules/shuttle/emergency.dm @@ -88,6 +88,11 @@ if(!isliving(usr)) return + var/area/my_area = get_area(src) + if(!istype(my_area, /area/shuttle/escape)) + say("Error - Network connectivity: Console has lost connection to the shuttle.") + return + var/mob/living/user = usr . = FALSE @@ -206,6 +211,10 @@ if(HAS_TRAIT(user, TRAIT_HANDS_BLOCKED)) to_chat(user, span_warning("You need your hands free before you can manipulate [src].")) return + var/area/my_area = get_area(src) + if(!istype(my_area, /area/shuttle/escape)) + say("Error - Network connectivity: Console has lost connection to the shuttle.") + return if(!user?.mind?.get_hijack_speed()) to_chat(user, span_warning("You manage to open a user-mode shell on [src], and hundreds of lines of debugging output fly through your vision. It is probably best to leave this alone.")) return diff --git a/code/modules/shuttle/navigation_computer.dm b/code/modules/shuttle/navigation_computer.dm index e564247bee4..a5479e02016 100644 --- a/code/modules/shuttle/navigation_computer.dm +++ b/code/modules/shuttle/navigation_computer.dm @@ -96,17 +96,18 @@ the_eye.setDir(shuttle_port.dir) var/turf/origin = locate(shuttle_port.x + x_offset, shuttle_port.y + y_offset, shuttle_port.z) for(var/area/shuttle_area as anything in shuttle_port.shuttle_areas) - for(var/turf/shuttle_turf as anything in shuttle_area.get_contained_turfs()) - if(shuttle_turf.z != origin.z) - continue - var/image/I = image('icons/effects/alphacolors.dmi', origin, "red") - var/x_off = shuttle_turf.x - origin.x - var/y_off = shuttle_turf.y - origin.y - I.loc = locate(origin.x + x_off, origin.y + y_off, origin.z) //we have to set this after creating the image because it might be null, and images created in nullspace are immutable. - I.layer = ABOVE_NORMAL_TURF_LAYER - SET_PLANE(I, ABOVE_GAME_PLANE, shuttle_turf) - I.mouse_opacity = MOUSE_OPACITY_TRANSPARENT - the_eye.placement_images[I] = list(x_off, y_off) + for (var/list/zlevel_turfs as anything in shuttle_area.get_zlevel_turf_lists()) + for(var/turf/shuttle_turf as anything in zlevel_turfs) + if(shuttle_turf.z != origin.z) + continue + var/image/I = image('icons/effects/alphacolors.dmi', origin, "red") + var/x_off = shuttle_turf.x - origin.x + var/y_off = shuttle_turf.y - origin.y + I.loc = locate(origin.x + x_off, origin.y + y_off, origin.z) //we have to set this after creating the image because it might be null, and images created in nullspace are immutable. + I.layer = ABOVE_NORMAL_TURF_LAYER + SET_PLANE(I, ABOVE_GAME_PLANE, shuttle_turf) + I.mouse_opacity = MOUSE_OPACITY_TRANSPARENT + the_eye.placement_images[I] = list(x_off, y_off) /obj/machinery/computer/camera_advanced/shuttle_docker/give_eye_control(mob/user) ..() diff --git a/code/modules/shuttle/shuttle.dm b/code/modules/shuttle/shuttle.dm index d9e20b07f1b..c46f68c2fb2 100644 --- a/code/modules/shuttle/shuttle.dm +++ b/code/modules/shuttle/shuttle.dm @@ -516,13 +516,14 @@ var/min_y = -1 var/max_x = WORLDMAXX_CUTOFF var/max_y = WORLDMAXY_CUTOFF - for(var/area/area as anything in shuttle_areas) - for(var/turf/turf as anything in area.get_contained_turfs()) - min_x = max(turf.x, min_x) - max_x = min(turf.x, max_x) - min_y = max(turf.y, min_y) - max_y = min(turf.y, max_y) - CHECK_TICK + for(var/area/shuttle_area as anything in shuttle_areas) + for (var/list/zlevel_turfs as anything in shuttle_area.get_zlevel_turf_lists()) + for(var/turf/turf as anything in zlevel_turfs) + min_x = max(turf.x, min_x) + max_x = min(turf.x, max_x) + min_y = max(turf.y, min_y) + max_y = min(turf.y, max_y) + CHECK_TICK if(min_x == -1 || max_x == WORLDMAXX_CUTOFF) CRASH("Failed to locate shuttle boundaries when iterating through shuttle areas, somehow.") diff --git a/code/modules/shuttle/spaceship_navigation_beacon.dm b/code/modules/shuttle/spaceship_navigation_beacon.dm index 7338d336bde..2c0b95239b6 100644 --- a/code/modules/shuttle/spaceship_navigation_beacon.dm +++ b/code/modules/shuttle/spaceship_navigation_beacon.dm @@ -5,7 +5,7 @@ icon_state = "beacon_active" base_icon_state = "beacon" density = TRUE - obj_flags = /obj::obj_flags | NO_DECONSTRUCTION + obj_flags = parent_type::obj_flags | NO_DECONSTRUCTION /// Locked beacons cannot be jumped to by ships. var/locked = FALSE diff --git a/code/modules/shuttle/special.dm b/code/modules/shuttle/special.dm index 1dd54369dba..e5b8d5e87ff 100644 --- a/code/modules/shuttle/special.dm +++ b/code/modules/shuttle/special.dm @@ -79,7 +79,7 @@ var/obj/machinery/power/emitter/energycannon/magical/our_statue var/list/mob/living/sleepers = list() var/never_spoken = TRUE - obj_flags = /obj::obj_flags | NO_DECONSTRUCTION + obj_flags = parent_type::obj_flags | NO_DECONSTRUCTION /obj/structure/table/abductor/wabbajack/Initialize(mapload) . = ..() @@ -198,7 +198,7 @@ /obj/structure/table/wood/shuttle_bar resistance_flags = LAVA_PROOF | FIRE_PROOF | ACID_PROOF - obj_flags = /obj::obj_flags | NO_DECONSTRUCTION + obj_flags = parent_type::obj_flags | NO_DECONSTRUCTION max_integrity = 1000 var/boot_dir = 1 diff --git a/code/modules/shuttle/supply.dm b/code/modules/shuttle/supply.dm index 515d3b38cfe..cbeec46225d 100644 --- a/code/modules/shuttle/supply.dm +++ b/code/modules/shuttle/supply.dm @@ -30,6 +30,7 @@ GLOBAL_LIST_INIT(blacklisted_cargo_types, typecacheof(list( /obj/structure/blob, /obj/structure/checkoutmachine, /obj/structure/disposalpipe, + /obj/structure/disposaloutlet, /obj/structure/extraction_point, /obj/structure/guardian_beacon, /obj/tear_in_reality, @@ -59,22 +60,23 @@ GLOBAL_LIST_INIT(blacklisted_cargo_types, typecacheof(list( return ..() /obj/docking_port/mobile/supply/proc/check_blacklist(areaInstances) - for(var/place in areaInstances) - var/area/shuttle/shuttle_area = place - for(var/turf/shuttle_turf in shuttle_area.get_contained_turfs()) - for(var/atom/passenger in shuttle_turf.get_all_contents()) - if((is_type_in_typecache(passenger, GLOB.blacklisted_cargo_types) || HAS_TRAIT(passenger, TRAIT_BANNED_FROM_CARGO_SHUTTLE)) && !istype(passenger, /obj/docking_port)) - return FALSE + for(var/area/shuttle_area as anything in areaInstances) + for (var/list/zlevel_turfs as anything in shuttle_area.get_zlevel_turf_lists()) + for(var/turf/shuttle_turf as anything in zlevel_turfs) + for(var/atom/passenger in shuttle_turf.get_all_contents()) + if((is_type_in_typecache(passenger, GLOB.blacklisted_cargo_types) || HAS_TRAIT(passenger, TRAIT_BANNED_FROM_CARGO_SHUTTLE)) && !istype(passenger, /obj/docking_port)) + return FALSE return TRUE /// Returns anything on the cargo blacklist found within areas_to_check back to the turf of the home docking port via Centcom branded supply pod. /obj/docking_port/mobile/supply/proc/return_blacklisted_things_home(list/area/areas_to_check, obj/docking_port/stationary/home) var/list/stuff_to_send_home = list() for(var/area/shuttle_area as anything in areas_to_check) - for(var/turf/shuttle_turf in shuttle_area.get_contained_turfs()) - for(var/atom/passenger in shuttle_turf.get_all_contents()) - if((is_type_in_typecache(passenger, GLOB.blacklisted_cargo_types) || HAS_TRAIT(passenger, TRAIT_BANNED_FROM_CARGO_SHUTTLE)) && !istype(passenger, /obj/docking_port)) - stuff_to_send_home += passenger + for (var/list/zlevel_turfs as anything in shuttle_area.get_zlevel_turf_lists()) + for(var/turf/shuttle_turf as anything in zlevel_turfs) + for(var/atom/passenger in shuttle_turf.get_all_contents()) + if((is_type_in_typecache(passenger, GLOB.blacklisted_cargo_types) || HAS_TRAIT(passenger, TRAIT_BANNED_FROM_CARGO_SHUTTLE)) && !istype(passenger, /obj/docking_port)) + stuff_to_send_home += passenger if(!length(stuff_to_send_home)) return FALSE @@ -135,7 +137,7 @@ GLOBAL_LIST_INIT(blacklisted_cargo_types, typecacheof(list( var/list/empty_turfs = list() for(var/area/shuttle/shuttle_area as anything in shuttle_areas) - for(var/turf/open/floor/shuttle_turf in shuttle_area.get_contained_turfs()) + for(var/turf/open/floor/shuttle_turf in shuttle_area.get_turfs_from_all_zlevels()) if(shuttle_turf.is_blocked_turf()) continue empty_turfs += shuttle_turf @@ -283,13 +285,14 @@ GLOBAL_LIST_INIT(blacklisted_cargo_types, typecacheof(list( var/datum/export_report/report = new for(var/area/shuttle/shuttle_area as anything in shuttle_areas) - for(var/turf/shuttle_turf as anything in shuttle_area.get_contained_turfs()) - for(var/atom/movable/exporting_atom in shuttle_turf) - if(iscameramob(exporting_atom)) - continue - if(exporting_atom.anchored) - continue - export_item_and_contents(exporting_atom, apply_elastic = TRUE, dry_run = FALSE, external_report = report) + for (var/list/zlevel_turfs as anything in shuttle_area.get_zlevel_turf_lists()) + for(var/turf/shuttle_turf as anything in zlevel_turfs) + for(var/atom/movable/exporting_atom in shuttle_turf) + if(iscameramob(exporting_atom)) + continue + if(exporting_atom.anchored) + continue + export_item_and_contents(exporting_atom, apply_elastic = TRUE, dry_run = FALSE, external_report = report) if(report.exported_atoms) report.exported_atoms += "." //ugh @@ -318,7 +321,7 @@ GLOBAL_LIST_INIT(blacklisted_cargo_types, typecacheof(list( //spawn crate var/list/empty_turfs = list() for(var/area/shuttle/shuttle_area as anything in shuttle_areas) - for(var/turf/open/floor/shuttle_floor in shuttle_area.get_contained_turfs()) + for(var/turf/open/floor/shuttle_floor in shuttle_area.get_turfs_from_all_zlevels()) if(shuttle_floor.is_blocked_turf()) continue empty_turfs += shuttle_floor diff --git a/code/modules/shuttle/syndicate.dm b/code/modules/shuttle/syndicate.dm index 4c59d9848fc..f08446b650d 100644 --- a/code/modules/shuttle/syndicate.dm +++ b/code/modules/shuttle/syndicate.dm @@ -11,7 +11,7 @@ shuttleId = "syndicate" possible_destinations = "syndicate_away;syndicate_z5;syndicate_ne;syndicate_nw;syndicate_n;syndicate_se;syndicate_sw;syndicate_s;syndicate_custom" resistance_flags = INDESTRUCTIBLE | LAVA_PROOF | FIRE_PROOF | ACID_PROOF - obj_flags = /obj::obj_flags | NO_DECONSTRUCTION + obj_flags = parent_type::obj_flags | NO_DECONSTRUCTION /obj/machinery/computer/shuttle/syndicate/launch_check(mob/user) . = ..() diff --git a/code/modules/spells/spell_types/pointed/finger_guns.dm b/code/modules/spells/spell_types/pointed/finger_guns.dm index 5ed666d9e64..24f51a0e908 100644 --- a/code/modules/spells/spell_types/pointed/finger_guns.dm +++ b/code/modules/spells/spell_types/pointed/finger_guns.dm @@ -46,4 +46,7 @@ /datum/action/cooldown/spell/pointed/projectile/finger_guns/before_cast(atom/cast_on) . = ..() - invocation = span_notice("[cast_on] fires [cast_on.p_their()] finger gun!") + if(isnull(owner)) + invocation = initial(invocation) + else + invocation = span_notice("[owner] fires [owner.p_their()] finger gun!") diff --git a/code/modules/spells/spell_types/self/stop_time.dm b/code/modules/spells/spell_types/self/stop_time.dm index cab47375eb3..d3e937972fd 100644 --- a/code/modules/spells/spell_types/self/stop_time.dm +++ b/code/modules/spells/spell_types/self/stop_time.dm @@ -16,9 +16,14 @@ /// The duration of the time stop. var/timestop_duration = 10 SECONDS + /// if TRUE, the owner is immune to all time stop, from anyone + var/owner_is_immune_to_all_timestop = TRUE + /// if TRUE, the owner is immune to their own timestop (but not other people's, if above is FALSE) + var/owner_is_immune_to_self_timestop = TRUE + /datum/action/cooldown/spell/timestop/Grant(mob/grant_to) . = ..() - if(owner) + if(!isnull(owner) && owner_is_immune_to_all_timestop) ADD_TRAIT(owner, TRAIT_TIME_STOP_IMMUNE, REF(src)) /datum/action/cooldown/spell/timestop/Remove(mob/remove_from) @@ -27,4 +32,17 @@ /datum/action/cooldown/spell/timestop/cast(atom/cast_on) . = ..() - new /obj/effect/timestop/magic(get_turf(cast_on), timestop_range, timestop_duration, list(cast_on)) + var/list/default_immune_atoms = list() + if(owner_is_immune_to_self_timestop) + default_immune_atoms += cast_on + new /obj/effect/timestop/magic(get_turf(cast_on), timestop_range, timestop_duration, default_immune_atoms) + +/datum/action/cooldown/spell/timestop/vv_edit_var(var_name, var_value) + . = ..() + if(var_name != NAMEOF(src, owner_is_immune_to_all_timestop) || isnull(owner)) + return + + if(var_value) + ADD_TRAIT(owner, TRAIT_TIME_STOP_IMMUNE, REF(src)) + else + REMOVE_TRAIT(owner, TRAIT_TIME_STOP_IMMUNE, REF(src)) diff --git a/code/modules/spells/spell_types/touch/smite.dm b/code/modules/spells/spell_types/touch/smite.dm index f02ea8247dd..7bef97c8a65 100644 --- a/code/modules/spells/spell_types/touch/smite.dm +++ b/code/modules/spells/spell_types/touch/smite.dm @@ -57,3 +57,13 @@ icon = 'icons/obj/weapons/hand.dmi' icon_state = "disintegrate" inhand_icon_state = "disintegrate" + +/obj/item/melee/touch_attack/smite/suicide_act(mob/living/user) + + user.visible_message(span_suicide("[user] spreads [user.p_their()] arms apart, lightning arcing between them! It looks like [user.p_theyre()] going out with a bang!")) + user.say("SHIA KAZING!!", forced = "smite suicide") + do_sparks(4, FALSE, get_turf(user)) + explosion(user, heavy_impact_range = 2, explosion_cause = src) //Cheap explosion imitation because putting detonate() here causes runtimes + user.gib(DROP_BODYPARTS) + qdel(src) + return MANUAL_SUICIDE diff --git a/code/modules/station_goals/dna_vault.dm b/code/modules/station_goals/dna_vault.dm index 83fb1f0ea7f..5c146758d12 100644 --- a/code/modules/station_goals/dna_vault.dm +++ b/code/modules/station_goals/dna_vault.dm @@ -101,8 +101,8 @@ F.parent = src fillers += F - var/datum/station_goal/dna_vault/dna_vault_goal = locate() in GLOB.station_goals - if (!isnull(dna_vault_goal)) + var/datum/station_goal/dna_vault/dna_vault_goal = SSstation.get_station_goal(/datum/station_goal/dna_vault) + if(!isnull(dna_vault_goal)) animals_max = dna_vault_goal.animal_count plants_max = dna_vault_goal.plant_count dna_max = dna_vault_goal.human_count diff --git a/code/modules/station_goals/generate_goals.dm b/code/modules/station_goals/generate_goals.dm index 102212c1212..b37543d6de8 100644 --- a/code/modules/station_goals/generate_goals.dm +++ b/code/modules/station_goals/generate_goals.dm @@ -1,13 +1 @@ /// Creates the initial station goals. -/proc/generate_station_goals(goal_budget) - var/list/possible = subtypesof(/datum/station_goal) - // Remove all goals that require space if space is not present - if(SSmapping.is_planetary()) - for(var/datum/station_goal/goal as anything in possible) - if(initial(goal.requires_space)) - possible -= goal - var/goal_weights = 0 - while(possible.len && goal_weights < goal_budget) - var/datum/station_goal/picked = pick_n_take(possible) - goal_weights += initial(picked.weight) - GLOB.station_goals += new picked diff --git a/code/modules/station_goals/meteor_shield.dm b/code/modules/station_goals/meteor_shield.dm index 3b87ef74578..84a61395a4b 100644 --- a/code/modules/station_goals/meteor_shield.dm +++ b/code/modules/station_goals/meteor_shield.dm @@ -14,8 +14,9 @@ // Satellites be actived to generate a shield that will block unorganic matter from passing it. /datum/station_goal/station_shield name = "Station Shield" - var/coverage_goal = 500 requires_space = TRUE + var/coverage_goal = 500 + VAR_PRIVATE/cached_coverage_length /datum/station_goal/station_shield/get_report() return list( @@ -37,17 +38,24 @@ /datum/station_goal/station_shield/check_completion() if(..()) return TRUE - if(get_coverage() >= coverage_goal) + update_coverage() + if(cached_coverage_length >= coverage_goal) return TRUE return FALSE -/datum/station_goal/proc/get_coverage() +/datum/station_goal/station_shield/proc/get_coverage() + return cached_coverage_length + +/// Gets the coverage of all active meteor shield satellites +/// Can be expensive, ensure you need this before calling it +/datum/station_goal/station_shield/proc/update_coverage() var/list/coverage = list() for(var/obj/machinery/satellite/meteor_shield/shield_satt as anything in SSmachines.get_machines_by_type_and_subtypes(/obj/machinery/satellite/meteor_shield)) if(!shield_satt.active || !is_station_level(shield_satt.z)) continue - coverage |= view(shield_satt.kill_range, shield_satt) - return coverage.len + for(var/turf/covered in view(shield_satt.kill_range, shield_satt)) + coverage |= covered + cached_coverage_length = length(coverage) /obj/machinery/satellite/meteor_shield name = "\improper Meteor Shield Satellite" @@ -109,6 +117,9 @@ if(obj_flags & EMAGGED) update_emagged_meteor_sat(user) + var/datum/station_goal/station_shield/goal = SSstation.get_station_goal(/datum/station_goal/station_shield) + goal?.update_coverage() + /obj/machinery/satellite/meteor_shield/Destroy() . = ..() if(obj_flags & EMAGGED) diff --git a/code/modules/station_goals/station_goal.dm b/code/modules/station_goals/station_goal.dm index 30ed0b78b6c..d7fd5e7f752 100644 --- a/code/modules/station_goals/station_goal.dm +++ b/code/modules/station_goals/station_goal.dm @@ -1,6 +1,3 @@ -/// List of available station goals for the crew to be working on -GLOBAL_LIST_EMPTY_TYPED(station_goals, /datum/station_goal) - /datum/station_goal var/name = "Generic Goal" var/weight = 1 //In case of multiple goals later. @@ -30,13 +27,8 @@ GLOBAL_LIST_EMPTY_TYPED(station_goals, /datum/station_goal) else return "
  • [name] : [span_redtext("Failed!")]
  • " -/datum/station_goal/Destroy() - GLOB.station_goals -= src - return ..() - /datum/station_goal/Topic(href, href_list) ..() - if(!check_rights(R_ADMIN) || !usr.client.holder.CheckAdminHref(href, href_list)) return @@ -45,3 +37,15 @@ GLOBAL_LIST_EMPTY_TYPED(station_goals, /datum/station_goal) send_report() else if(href_list["remove"]) qdel(src) + +/datum/station_goal/New() + if(type in SSstation.goals_by_type) + stack_trace("Creating a new station_goal of type [type] when one already exists in SSstation.goals_by_type this is not supported anywhere. I trust you tho") + else + SSstation.goals_by_type[type] = src + return ..() + +/datum/station_goal/Destroy(force) + if(SSstation.goals_by_type[type] == src) + SSstation.goals_by_type -= type + return ..() diff --git a/code/modules/surgery/bodyparts/_bodyparts.dm b/code/modules/surgery/bodyparts/_bodyparts.dm index e51d083ddc4..83d4200bb65 100644 --- a/code/modules/surgery/bodyparts/_bodyparts.dm +++ b/code/modules/surgery/bodyparts/_bodyparts.dm @@ -17,6 +17,8 @@ VAR_PROTECTED/icon_invisible = 'icons/mob/human/bodyparts.dmi' ///The type of husk for building an iconstate var/husk_type = "humanoid" + ///The color to multiply the greyscaled husk sprites by. Can be null. Old husk sprite chest color is #A6A6A6 + var/husk_color = "#A6A6A6" layer = BELOW_MOB_LAYER //so it isn't hidden behind objects when on the floor grind_results = list(/datum/reagent/bone_dust = 10, /datum/reagent/consumable/liquidgibs = 5) // robotic bodyparts and chests/heads cannot be ground /// The mob that "owns" this limb @@ -364,7 +366,11 @@ if(ishuman(victim)) var/mob/living/carbon/human/human_victim = victim - if(HAS_TRAIT(victim, TRAIT_LIMBATTACHMENT)) + if(HAS_TRAIT(victim, TRAIT_LIMBATTACHMENT) || HAS_TRAIT(victim, TRAIT_ROBOTIC_LIMBATTACHMENT)) // NOVA EDIT CHANGE - ORIGINAL: if(HAS_TRAIT(victim, TRAIT_LIMBATTACHMENT)) + // NOVA EDIT ADDITION START - robot_limb_detach_quirk + if (HAS_TRAIT(victim, TRAIT_ROBOTIC_LIMBATTACHMENT) && !(bodytype & BODYTYPE_ROBOTIC)) //if we're trying to attach something that's not robotic, end out + return + // NOVA EDIT ADDITION END if(!human_victim.get_bodypart(body_zone)) user.temporarilyRemoveItemFromInventory(src, TRUE) if(!try_attach_limb(victim)) @@ -1016,16 +1022,6 @@ var/image/limb = image(layer = -BODYPARTS_LAYER, dir = image_dir) var/image/aux - // Handles making bodyparts look husked - if(is_husked) - limb.icon = icon_husk - limb.icon_state = "[husk_type]_husk_[body_zone]" - icon_exists(limb.icon, limb.icon_state, scream = TRUE) //Prints a stack trace on the first failure of a given iconstate. - . += limb - if(aux_zone) //Hand shit - aux = image(limb.icon, "[husk_type]_husk_[aux_zone]", -aux_layer, image_dir) - . += aux - // Handles invisibility (not alpha or actual invisibility but invisibility) if(is_invisible) limb.icon = icon_invisible @@ -1034,42 +1030,43 @@ return . // Normal non-husk handling - if(!is_husked) // This is the MEAT of limb icon code - limb.icon = icon_greyscale - if(!should_draw_greyscale || !icon_greyscale) - limb.icon = icon_static + limb.icon = icon_greyscale + if(!should_draw_greyscale || !icon_greyscale) + limb.icon = icon_static - if(is_dimorphic) //Does this type of limb have sexual dimorphism? - limb.icon_state = "[limb_id]_[body_zone]_[limb_gender]" - else - limb.icon_state = "[limb_id]_[body_zone]" - - icon_exists(limb.icon, limb.icon_state, TRUE) //Prints a stack trace on the first failure of a given iconstate. - - . += limb + if(is_dimorphic) //Does this type of limb have sexual dimorphism? + limb.icon_state = "[limb_id]_[body_zone]_[limb_gender]" + else + limb.icon_state = "[limb_id]_[body_zone]" - if(aux_zone) //Hand shit - aux = image(limb.icon, "[limb_id]_[aux_zone]", -aux_layer, image_dir) - . += aux + icon_exists(limb.icon, limb.icon_state, TRUE) //Prints a stack trace on the first failure of a given iconstate. - draw_color = variable_color - if(should_draw_greyscale) //Should the limb be colored outside of a forced color? - draw_color ||= (species_color) || (skin_tone && skintone2hex(skin_tone)) + . += limb - if(draw_color) - //NOVA EDIT BEGIN - Alpha values on limbs //We check if the limb is attached and if the owner has an alpha value to append - var/limb_color = alpha != 255 ? "[draw_color][num2hex(alpha, 2)]" : "[draw_color]" + if(aux_zone) //Hand shit + aux = image(limb.icon, "[limb_id]_[aux_zone]", -aux_layer, image_dir) + . += aux + draw_color = variable_color + if(should_draw_greyscale) //Should the limb be colored outside of a forced color? + draw_color ||= (species_color) || (skin_tone && skintone2hex(skin_tone)) - limb.color = limb_color - if(aux_zone) - aux.color = limb_color - //NOVA EDIT END + if(is_husked) + huskify_image(thing_to_husk = limb) + if(aux) + huskify_image(thing_to_husk = aux) + draw_color = husk_color + if(draw_color) + var/limb_color = alpha != 255 ? "[draw_color][num2hex(alpha, 2)]" : "[draw_color]" // NOVA EDIT ADDITION - Alpha values on limbs. We check if the limb is attached and if the owner has an alpha value to append + limb.color = limb_color // NOVA EDIT CHANGE - ORIGINAL: limb.color = "[draw_color]" + if(aux_zone) + aux.color = limb_color // NOVA EDIT CHANGE - ORIGINAL: aux.color = "[draw_color]" //EMISSIVE CODE START // For some reason this was applied as an overlay on the aux image and limb image before. // I am very sure that this is unnecessary, and i need to treat it as part of the return list // to be able to mask it proper in case this limb is a leg. + if(!is_husked) if(blocks_emissive != EMISSIVE_BLOCK_NONE) var/atom/location = loc || owner || src var/mutable_appearance/limb_em_block = emissive_blocker(limb.icon, limb.icon_state, location, layer = limb.layer, alpha = limb.alpha) @@ -1162,6 +1159,17 @@ return . +/obj/item/bodypart/proc/huskify_image(image/thing_to_husk, draw_blood = TRUE) + var/icon/husk_icon = new(thing_to_husk.icon) + husk_icon.ColorTone(HUSK_COLOR_TONE) + thing_to_husk.icon = husk_icon + if(draw_blood) + var/mutable_appearance/husk_blood = mutable_appearance(icon_husk, "[husk_type]_husk_[body_zone]") + husk_blood.blend_mode = BLEND_INSET_OVERLAY + husk_blood.appearance_flags |= RESET_COLOR + husk_blood.dir = thing_to_husk.dir + thing_to_husk.add_overlay(husk_blood) + ///Add a bodypart overlay and call the appropriate update procs /obj/item/bodypart/proc/add_bodypart_overlay(datum/bodypart_overlay/overlay) bodypart_overlays += overlay diff --git a/code/modules/surgery/bodyparts/dismemberment.dm b/code/modules/surgery/bodyparts/dismemberment.dm index 293db57a74f..dc107e973da 100644 --- a/code/modules/surgery/bodyparts/dismemberment.dm +++ b/code/modules/surgery/bodyparts/dismemberment.dm @@ -26,7 +26,7 @@ if (wounding_type) LAZYSET(limb_owner.body_zone_dismembered_by, body_zone, wounding_type) - drop_limb() + drop_limb(dismembered = TRUE) limb_owner.update_equipment_speed_mods() // Update in case speed affecting item unequipped by dismemberment var/turf/owner_location = limb_owner.loc @@ -189,46 +189,6 @@ var/datum/wound/loss/dismembering = new return dismembering.apply_dismember(src, wounding_type) -/obj/item/organ/internal/eyes/on_bodypart_insert(obj/item/bodypart/head/head) - if(istype(head)) - head.eyes = src - return ..() - -/obj/item/organ/internal/ears/on_bodypart_insert(obj/item/bodypart/head/head) - if(istype(head)) - head.ears = src - return ..() - -/obj/item/organ/internal/tongue/on_bodypart_insert(obj/item/bodypart/head/head) - if(istype(head)) - head.tongue = src - return ..() - -/obj/item/organ/internal/brain/on_bodypart_insert(obj/item/bodypart/head/head) - if(istype(head)) - head.brain = src - return ..() - -/obj/item/organ/internal/eyes/on_bodypart_remove(obj/item/bodypart/head/head) - if(istype(head)) - head.eyes = null - return ..() - -/obj/item/organ/internal/ears/on_bodypart_remove(obj/item/bodypart/head/head) - if(istype(head)) - head.ears = null - return ..() - -/obj/item/organ/internal/tongue/on_bodypart_remove(obj/item/bodypart/head/head) - if(istype(head)) - head.tongue = null - return ..() - -/obj/item/organ/internal/brain/on_bodypart_remove(obj/item/bodypart/head/head) - if(istype(head)) - head.brain = null - return ..() - /obj/item/bodypart/chest/drop_limb(special, dismembered, move_to_floor = TRUE) if(special) return ..() @@ -255,8 +215,8 @@ associated_hand?.update_appearance() if(arm_owner.gloves) arm_owner.dropItemToGround(arm_owner.gloves, TRUE) + . = ..() arm_owner.update_worn_gloves() //to remove the bloody hands overlay - return ..() /obj/item/bodypart/leg/drop_limb(special, dismembered, move_to_floor = TRUE) if(owner && !special) @@ -407,6 +367,14 @@ new_head_owner.update_body() new_head_owner.update_damage_overlays() +/obj/item/bodypart/arm/try_attach_limb(mob/living/carbon/new_arm_owner, special = FALSE) + . = ..() + + if(!.) + return + + new_arm_owner.update_worn_gloves() // To apply bloody hands overlay + /mob/living/carbon/proc/regenerate_limbs(list/excluded_zones = list()) SEND_SIGNAL(src, COMSIG_CARBON_REGENERATE_LIMBS, excluded_zones) var/list/zone_list = list(BODY_ZONE_HEAD, BODY_ZONE_CHEST, BODY_ZONE_R_ARM, BODY_ZONE_L_ARM, BODY_ZONE_R_LEG, BODY_ZONE_L_LEG) diff --git a/code/modules/surgery/bodyparts/head.dm b/code/modules/surgery/bodyparts/head.dm index e6e805664d3..eb9a9f56df5 100644 --- a/code/modules/surgery/bodyparts/head.dm +++ b/code/modules/surgery/bodyparts/head.dm @@ -26,11 +26,6 @@ unarmed_effectiveness = 0 bodypart_trait_source = HEAD_TRAIT - var/obj/item/organ/internal/brain/brain //The brain organ - var/obj/item/organ/internal/eyes/eyes - var/obj/item/organ/internal/ears/ears - var/obj/item/organ/internal/tongue/tongue - /// Do we show the information about missing organs upon being examined? Defaults to TRUE, useful for Dullahan heads. var/show_organs_on_examine = TRUE @@ -75,11 +70,6 @@ ///Current lipstick trait, if any (such as TRAIT_KISS_OF_DEATH) var/stored_lipstick_trait - /// Draw this head as "debrained" - VAR_PROTECTED/show_debrained = FALSE - /// Draw this head as missing eyes - VAR_PROTECTED/show_eyeless = FALSE - /// Offset to apply to equipment worn on the ears var/datum/worn_feature_offset/worn_ears_offset /// Offset to apply to equipment worn on the eyes @@ -91,6 +81,16 @@ /// Offset to apply to overlays placed on the face var/datum/worn_feature_offset/worn_face_offset + VAR_PROTECTED + /// Draw this head as "debrained" + show_debrained = FALSE + + /// Draw this head as missing eyes + show_eyeless = FALSE + + /// Can this head be dismembered normally? + can_dismember = TRUE //FLUFFY FRONTIER EDIT. ORIGINAL //can_dismember = FALSE + /obj/item/bodypart/head/Destroy() QDEL_NULL(worn_ears_offset) QDEL_NULL(worn_glasses_offset) @@ -99,22 +99,10 @@ QDEL_NULL(worn_face_offset) return ..() -/obj/item/bodypart/head/Exited(atom/movable/gone, direction) - if(gone == brain) - brain = null - update_icon_dropped() - if(gone == eyes) - eyes = null - update_icon_dropped() - if(gone == ears) - ears = null - if(gone == tongue) - tongue = null - return ..() - /obj/item/bodypart/head/examine(mob/user) . = ..() if(show_organs_on_examine && IS_ORGANIC_LIMB(src)) + var/obj/item/organ/internal/brain/brain = locate(/obj/item/organ/internal/brain) in src if(!brain) . += span_info("The brain has been removed from [src].") else if(brain.suicided || (brain.brainmob && HAS_TRAIT(brain.brainmob, TRAIT_SUICIDED))) @@ -131,23 +119,28 @@ else . += span_info("It's completely lifeless.") - if(!eyes) + if(!(locate(/obj/item/organ/internal/eyes) in src)) . += span_info("[real_name]'s eyes have been removed.") - if(!ears) + if(!(locate(/obj/item/organ/internal/ears) in src)) . += span_info("[real_name]'s ears have been removed.") - if(!tongue) + if(!(locate(/obj/item/organ/internal/tongue) in src)) . += span_info("[real_name]'s tongue has been removed.") /obj/item/bodypart/head/can_dismember(obj/item/item) + if (!can_dismember) + return FALSE + if(owner.stat < HARD_CRIT) return FALSE + return ..() /obj/item/bodypart/head/drop_organs(mob/user, violent_removal) if(user) user.visible_message(span_warning("[user] saws [src] open and pulls out a brain!"), span_notice("You saw [src] open and pull out a brain.")) + var/obj/item/organ/internal/brain/brain = locate(/obj/item/organ/internal/brain) in src if(brain && violent_removal && prob(90)) //ghetto surgery can damage the brain. to_chat(user, span_warning("[brain] was damaged in the process!")) brain.set_organ_damage(brain.maxHealth) @@ -172,6 +165,7 @@ . += get_hair_and_lips_icon(dropped) // We need to get the eyes if we are dropped (ugh) if(dropped) + var/obj/item/organ/internal/eyes/eyes = locate(/obj/item/organ/internal/eyes) in src // This is a bit of copy/paste code from eyes.dm:generate_body_overlay if(eyes?.eye_icon_state && (head_flags & HEAD_EYESPRITES)) var/image/eye_left = image('icons/mob/human/human_face.dmi', "[eyes.eye_icon_state]_l", -BODY_LAYER, SOUTH) diff --git a/code/modules/surgery/bodyparts/head_hair_and_lips.dm b/code/modules/surgery/bodyparts/head_hair_and_lips.dm index 4b23b9cc256..faf6ae1c5f0 100644 --- a/code/modules/surgery/bodyparts/head_hair_and_lips.dm +++ b/code/modules/surgery/bodyparts/head_hair_and_lips.dm @@ -49,12 +49,12 @@ else show_eyeless = FALSE else - if(!hair_hidden && !brain && !istype(src, /obj/item/bodypart/head/robot/synth)) // NOVA EDIT CHANGE - ORIGINAL: if(!hair_hidden && !brain) + if(!hair_hidden && !(locate(/obj/item/organ/internal/brain) in src) && !istype(src, /obj/item/bodypart/head/robot/synth)) // NOVA EDIT CHANGE - ORIGINAL: if(!hair_hidden && !(locate(/obj/item/organ/internal/brain) in src)) show_debrained = TRUE else show_debrained = FALSE - if(!eyes) + if(!(locate(/obj/item/organ/internal/eyes) in src)) show_eyeless = TRUE else show_eyeless = FALSE diff --git a/code/modules/surgery/bodyparts/parts.dm b/code/modules/surgery/bodyparts/parts.dm index c657e89cefd..2031ea4c723 100644 --- a/code/modules/surgery/bodyparts/parts.dm +++ b/code/modules/surgery/bodyparts/parts.dm @@ -227,7 +227,7 @@ if(bodypart_disabled) owner.set_usable_hands(owner.usable_hands - 1) if(owner.stat < UNCONSCIOUS) - to_chat(owner, span_userdanger("You lose control of your [name]!")) + to_chat(owner, span_userdanger("You lose control of your [plaintext_zone]!")) if(held_index) owner.dropItemToGround(owner.get_item_for_held_index(held_index)) else if(!bodypart_disabled) @@ -324,7 +324,7 @@ if(bodypart_disabled) owner.set_usable_hands(owner.usable_hands - 1) if(owner.stat < UNCONSCIOUS) - to_chat(owner, span_userdanger("You lose control of your [name]!")) + to_chat(owner, span_userdanger("You lose control of your [plaintext_zone]!")) if(held_index) owner.dropItemToGround(owner.get_item_for_held_index(held_index)) else if(!bodypart_disabled) @@ -443,7 +443,7 @@ if(bodypart_disabled) owner.set_usable_legs(owner.usable_legs - 1) if(owner.stat < UNCONSCIOUS) - to_chat(owner, span_userdanger("You lose control of your [name]!")) + to_chat(owner, span_userdanger("You lose control of your [plaintext_zone]!")) else if(!bodypart_disabled) owner.set_usable_legs(owner.usable_legs + 1) @@ -532,7 +532,7 @@ if(bodypart_disabled) owner.set_usable_legs(owner.usable_legs - 1) if(owner.stat < UNCONSCIOUS) - to_chat(owner, span_userdanger("You lose control of your [name]!")) + to_chat(owner, span_userdanger("You lose control of your [plaintext_zone]!")) else if(!bodypart_disabled) owner.set_usable_legs(owner.usable_legs + 1) diff --git a/code/modules/surgery/bodyparts/species_parts/misc_bodyparts.dm b/code/modules/surgery/bodyparts/species_parts/misc_bodyparts.dm index 7f514ecdaf4..30f34cb35d0 100644 --- a/code/modules/surgery/bodyparts/species_parts/misc_bodyparts.dm +++ b/code/modules/surgery/bodyparts/species_parts/misc_bodyparts.dm @@ -183,6 +183,7 @@ is_dimorphic = FALSE should_draw_greyscale = FALSE head_flags = HEAD_EYESPRITES|HEAD_DEBRAIN + can_dismember = TRUE /obj/item/bodypart/chest/zombie limb_id = SPECIES_ZOMBIE diff --git a/code/modules/surgery/bodyparts/wounds.dm b/code/modules/surgery/bodyparts/wounds.dm index deaa734dd64..1fc16c7ca8f 100644 --- a/code/modules/surgery/bodyparts/wounds.dm +++ b/code/modules/surgery/bodyparts/wounds.dm @@ -75,7 +75,7 @@ injury_roll += check_woundings_mods(woundtype, damage, wound_bonus, bare_wound_bonus) var/list/series_wounding_mods = check_series_wounding_mods() - if(injury_roll > WOUND_DISMEMBER_OUTRIGHT_THRESH && prob(get_damage() / max_damage * 100)) + if(injury_roll > WOUND_DISMEMBER_OUTRIGHT_THRESH && prob(get_damage() / max_damage * 100) && can_dismember()) var/datum/wound/loss/dismembering = new dismembering.apply_dismember(src, woundtype, outright = TRUE, attack_direction = attack_direction) return @@ -123,10 +123,13 @@ possible_wounds -= other_path continue - while (length(possible_wounds)) + while (TRUE) var/datum/wound/possible_wound = pick_weight(possible_wounds) - var/datum/wound_pregen_data/possible_pregen_data = GLOB.all_wound_pregen_data[possible_wound] + if (isnull(possible_wound)) + break + possible_wounds -= possible_wound + var/datum/wound_pregen_data/possible_pregen_data = GLOB.all_wound_pregen_data[possible_wound] var/datum/wound/replaced_wound for(var/datum/wound/existing_wound as anything in wounds) diff --git a/code/modules/surgery/bone_mending.dm b/code/modules/surgery/bone_mending.dm index 48114fe6d04..cac9051ceb4 100644 --- a/code/modules/surgery/bone_mending.dm +++ b/code/modules/surgery/bone_mending.dm @@ -153,15 +153,18 @@ var/obj/item/stack/used_stack = tool used_stack.use(1) +#define IMPLEMENTS_THAT_FIX_BONES list( \ + /obj/item/stack/medical/bone_gel = 100, \ + /obj/item/stack/sticky_tape/surgical = 100, \ + /obj/item/stack/sticky_tape/super = 50, \ + /obj/item/stack/sticky_tape = 30, \ +) + ///// Repair Compound Fracture (Crticial) /datum/surgery_step/repair_bone_compound name = "repair compound fracture (bone gel/tape)" - implements = list( - /obj/item/stack/medical/bone_gel = 100, - /obj/item/stack/sticky_tape/surgical = 100, - /obj/item/stack/sticky_tape/super = 50, - /obj/item/stack/sticky_tape = 30) + implements = IMPLEMENTS_THAT_FIX_BONES time = 40 /datum/surgery_step/repair_bone_compound/preop(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery) @@ -200,3 +203,87 @@ if(isstack(tool)) var/obj/item/stack/used_stack = tool used_stack.use(1) + +/// Surgery to repair cranial fissures +/datum/surgery/cranial_reconstruction + name = "Cranial reconstruction" + surgery_flags = SURGERY_REQUIRE_RESTING | SURGERY_REQUIRE_LIMB | SURGERY_REQUIRES_REAL_LIMB + targetable_wound = /datum/wound/cranial_fissure + possible_locs = list( + BODY_ZONE_HEAD, + ) + steps = list( + /datum/surgery_step/clamp_bleeders/discard_skull_debris, + /datum/surgery_step/repair_skull + ) + +/datum/surgery/cranial_reconstruction/can_start(mob/living/user, mob/living/carbon/target) + . = ..() + if(!.) + return FALSE + + var/obj/item/bodypart/targeted_bodypart = target.get_bodypart(user.zone_selected) + return !isnull(targeted_bodypart.get_wound_type(targetable_wound)) + +/datum/surgery_step/clamp_bleeders/discard_skull_debris + name = "discard skull debris (hemostat)" + implements = list( + TOOL_HEMOSTAT = 100, + TOOL_WIRECUTTER = 40, + TOOL_SCREWDRIVER = 40, + ) + time = 2.4 SECONDS + preop_sound = 'sound/surgery/hemostat1.ogg' + +/datum/surgery_step/clamp_bleeders/discard_skull_debris/preop(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery) + display_results( + user, + target, + span_notice("You begin to discard the smaller skull debris in [target]'s [parse_zone(target_zone)]..."), + span_notice("[user] begins to discard the smaller skull debris in [target]'s [parse_zone(target_zone)]..."), + span_notice("[user] begins to poke around in [target]'s [parse_zone(target_zone)]..."), + ) + + display_pain(target, "Your brain feels like it's getting stabbed by little shards of glass!") + +/datum/surgery_step/repair_skull + name = "repair skull (bone gel/tape)" + implements = IMPLEMENTS_THAT_FIX_BONES + time = 4 SECONDS + +/datum/surgery_step/repair_skull/preop(mob/user, mob/living/target, target_zone, obj/item/tool, datum/surgery/surgery) + ASSERT(surgery.operated_wound, "Repairing skull without a wound") + + display_results( + user, + target, + span_notice("You begin to repair [target]'s skull as best you can..."), + span_notice("[user] begins to repair [target]'s skull with [tool]."), + span_notice("[user] begins to repair [target]'s skull."), + ) + + display_pain(target, "You can feel pieces of your skull rubbing against your brain!") + +/datum/surgery_step/repair_skull/success(mob/user, mob/living/target, target_zone, obj/item/tool, datum/surgery/surgery, default_display_results) + if (isnull(surgery.operated_wound)) + to_chat(user, span_warning("[target]'s skull is fine!")) + return ..() + + + if (isstack(tool)) + var/obj/item/stack/used_stack = tool + used_stack.use(1) + + display_results( + user, + target, + span_notice("You successfully repair [target]'s skull."), + span_notice("[user] successfully repairs [target]'s skull with [tool]."), + span_notice("[user] successfully repairs [target]'s skull.") + ) + + qdel(surgery.operated_wound) + + return ..() + +#undef IMPLEMENTS_THAT_FIX_BONES diff --git a/code/modules/surgery/organic_steps.dm b/code/modules/surgery/organic_steps.dm index 73e48db857f..aa697cb1072 100644 --- a/code/modules/surgery/organic_steps.dm +++ b/code/modules/surgery/organic_steps.dm @@ -156,8 +156,8 @@ /obj/item/melee/arm_blade = 75, /obj/item/fireaxe = 50, /obj/item/hatchet = 35, - /obj/item/knife/butcher = 25, - /obj/item = 20) //20% success (sort of) with any sharp item with a force >= 10 + /obj/item/knife/butcher = 35, + /obj/item = 25) //20% success (sort of) with any sharp item with a force >= 10 time = 54 preop_sound = list( /obj/item/circular_saw = 'sound/surgery/saw.ogg', diff --git a/code/modules/surgery/organs/external/_external_organ.dm b/code/modules/surgery/organs/external/_external_organ.dm index 5b9f9d67347..23b74ef9b4e 100644 --- a/code/modules/surgery/organs/external/_external_organ.dm +++ b/code/modules/surgery/organs/external/_external_organ.dm @@ -57,6 +57,15 @@ if(restyle_flags) RegisterSignal(src, COMSIG_ATOM_RESTYLE, PROC_REF(on_attempt_feature_restyle)) +/obj/item/organ/external/Insert(mob/living/carbon/receiver, special, movement_flags) + . = ..() + receiver.update_body_parts() + +/obj/item/organ/external/Remove(mob/living/carbon/organ_owner, special, movement_flags) + . = ..() + if(!special) + organ_owner.update_body_parts() + /obj/item/organ/external/mob_insert(mob/living/carbon/receiver, special, movement_flags) if(!should_external_organ_apply_to(type, receiver)) stack_trace("adding a [type] to a [receiver.type] when it shouldn't be!") diff --git a/code/modules/surgery/organs/external/spines.dm b/code/modules/surgery/organs/external/spines.dm index 86bc8c800a1..8865de124fc 100644 --- a/code/modules/surgery/organs/external/spines.dm +++ b/code/modules/surgery/organs/external/spines.dm @@ -8,42 +8,33 @@ slot = ORGAN_SLOT_EXTERNAL_SPINES preference = "feature_lizard_spines" + //dna_block = DNA_SPINES_BLOCK // NOVA EDIT REMOVAL - Customization - We have our own system to handle DNA. restyle_flags = EXTERNAL_RESTYLE_FLESH bodypart_overlay = /datum/bodypart_overlay/mutant/spines - ///A two-way reference between the tail and the spines because of wagging sprites. Bruh. - var/obj/item/organ/external/tail/lizard/paired_tail - /obj/item/organ/external/spines/Insert(mob/living/carbon/receiver, special, movement_flags) - . = ..() - if(.) - paired_tail = locate(/obj/item/organ/external/tail/lizard) in receiver.organs //We want specifically a lizard tail, so we don't use the slot. - paired_tail?.paired_spines = src + // If we have a tail, attempt to add a tail spines overlay + var/obj/item/organ/external/tail/our_tail = receiver.get_organ_slot(ORGAN_SLOT_EXTERNAL_TAIL) + our_tail?.try_insert_tail_spines(our_tail.bodypart_owner) + return ..() /obj/item/organ/external/spines/Remove(mob/living/carbon/organ_owner, special, movement_flags) - . = ..() - if(paired_tail) - paired_tail.paired_spines = null - paired_tail = null + // If we have a tail, remove any tail spines overlay + var/obj/item/organ/external/tail/our_tail = organ_owner.get_organ_slot(ORGAN_SLOT_EXTERNAL_TAIL) + our_tail?.remove_tail_spines(our_tail.bodypart_owner) + return ..() -///Bodypart overlay for spines (wagging gets updated by tail) +///Bodypart overlay for spines /datum/bodypart_overlay/mutant/spines layers = EXTERNAL_ADJACENT|EXTERNAL_BEHIND feature_key = "spines" - ///Spines moth with the tail, so track it - var/wagging = FALSE /datum/bodypart_overlay/mutant/spines/get_global_feature_list() return GLOB.sprite_accessories["spines"] // NOVA EDIT - Customization - ORIGINAL: return GLOB.spines_list -/datum/bodypart_overlay/mutant/spines/get_base_icon_state() - return (wagging ? "wagging_" : "") + sprite_datum.icon_state //add the wagging tag if we be wagging - - /datum/bodypart_overlay/mutant/spines/can_draw_on_bodypart(mob/living/carbon/human/human) . = ..() if(human.wear_suit && (human.wear_suit.flags_inv & HIDEJUMPSUIT)) return FALSE - diff --git a/code/modules/surgery/organs/external/tails.dm b/code/modules/surgery/organs/external/tails.dm index 5c620eea161..5a9ffad05d3 100644 --- a/code/modules/surgery/organs/external/tails.dm +++ b/code/modules/surgery/organs/external/tails.dm @@ -17,11 +17,12 @@ var/wag_flags = NONE ///The original owner of this tail var/original_owner //Yay, snowflake code! + ///The overlay for tail spines, if any + var/datum/bodypart_overlay/mutant/tail_spines/tail_spines_overlay /obj/item/organ/external/tail/Insert(mob/living/carbon/receiver, special, movement_flags) . = ..() if(.) - RegisterSignal(receiver, COMSIG_ORGAN_WAG_TAIL, PROC_REF(wag)) original_owner ||= WEAKREF(receiver) receiver.clear_mood_event("tail_lost") @@ -32,54 +33,98 @@ else if(type in receiver.dna.species.external_organs) receiver.add_mood_event("wrong_tail_regained", /datum/mood_event/tail_regained_wrong) +/obj/item/organ/external/tail/on_bodypart_insert(obj/item/bodypart/bodypart) + var/obj/item/organ/external/spines/our_spines = bodypart.owner.get_organ_slot(ORGAN_SLOT_EXTERNAL_SPINES) + if(our_spines) + try_insert_tail_spines(bodypart) + return ..() + +/obj/item/organ/external/tail/on_bodypart_remove(obj/item/bodypart/bodypart) + remove_tail_spines(bodypart) + return ..() + +/// If the owner has spines and an appropriate overlay exists, add a tail spines overlay. +/obj/item/organ/external/tail/proc/try_insert_tail_spines(obj/item/bodypart/bodypart) + // Don't insert another overlay if there already is one. + if(tail_spines_overlay) + return + // If this tail doesn't have a valid set of tail spines, don't insert them + var/datum/sprite_accessory/tails/tail_sprite_datum = bodypart_overlay.sprite_datum + if(!istype(tail_sprite_datum)) + return + var/tail_spine_key = tail_sprite_datum.spine_key + if(!tail_spine_key) + return + + tail_spines_overlay = new + tail_spines_overlay.tail_spine_key = tail_spine_key + var/feature_name = bodypart.owner.dna.mutant_bodyparts["spines"][MUTANT_INDEX_NAME] // NOVA EDIT CHANGE - ORIGINAL: var/feature_name = bodypart.owner.dna.features["spines"] //tail spines don't live in DNA, but share feature names with regular spines + tail_spines_overlay.set_appearance_from_dna(bodypart.owner.dna, feature_name, feature_key = "spines") // NOVA EDIT CHANGE - ORIGINAL: tail_spines_overlay.set_appearance_from_name(feature_name) + bodypart.add_bodypart_overlay(tail_spines_overlay) + +/// If we have a tail spines overlay, delete it +/obj/item/organ/external/tail/proc/remove_tail_spines(obj/item/bodypart/bodypart) + if(!tail_spines_overlay) + return + bodypart.remove_bodypart_overlay(tail_spines_overlay) + QDEL_NULL(tail_spines_overlay) + /obj/item/organ/external/tail/on_mob_remove(mob/living/carbon/organ_owner, special) . = ..() if(wag_flags & WAG_WAGGING) - wag(organ_owner, start = FALSE) - - UnregisterSignal(organ_owner, COMSIG_ORGAN_WAG_TAIL) + stop_wag(organ_owner) if(type in organ_owner.dna.species.external_organs) organ_owner.add_mood_event("tail_lost", /datum/mood_event/tail_lost) organ_owner.add_mood_event("tail_balance_lost", /datum/mood_event/tail_balance_lost) -/obj/item/organ/external/tail/proc/wag(mob/living/carbon/organ_owner, start = TRUE, stop_after = 0) - if(!(wag_flags & WAG_ABLE)) - return - - if(start) - if(start_wag(organ_owner) && stop_after) - addtimer(CALLBACK(src, PROC_REF(wag), organ_owner, FALSE), stop_after, TIMER_STOPPABLE|TIMER_DELETE_ME) - else - stop_wag(organ_owner) - ///We need some special behaviour for accessories, wrapped here so we can easily add more interactions later -/obj/item/organ/external/tail/proc/start_wag(mob/living/carbon/organ_owner) - if(wag_flags & WAG_WAGGING) // we are already wagging +///Accepts an optional timeout after which we remove the tail wagging +///Returns false if the wag worked, true otherwise +/obj/item/organ/external/tail/proc/start_wag(mob/living/carbon/organ_owner, stop_after = INFINITY) + if(wag_flags & WAG_WAGGING || !(wag_flags & WAG_ABLE)) // we are already wagging return FALSE if(organ_owner.stat == DEAD || organ_owner != owner) // no wagging when owner is dead or tail has been disembodied return FALSE + if(stop_after != INFINITY) + addtimer(CALLBACK(src, PROC_REF(stop_wag), organ_owner), stop_after, TIMER_STOPPABLE|TIMER_DELETE_ME) + var/datum/bodypart_overlay/mutant/tail/accessory = bodypart_overlay wag_flags |= WAG_WAGGING accessory.wagging = TRUE + if(tail_spines_overlay) //if there are spines, they should wag with the tail + tail_spines_overlay.wagging = TRUE organ_owner.update_body_parts() - RegisterSignal(organ_owner, COMSIG_LIVING_DEATH, PROC_REF(stop_wag)) + RegisterSignal(organ_owner, COMSIG_LIVING_DEATH, PROC_REF(owner_died)) return TRUE +/obj/item/organ/external/tail/proc/owner_died(mob/living/carbon/organ_owner) // Resisting the urge to replace owner with daddy + SIGNAL_HANDLER + stop_wag(organ_owner) + ///We need some special behaviour for accessories, wrapped here so we can easily add more interactions later +///Returns false if the wag stopping worked, true otherwise /obj/item/organ/external/tail/proc/stop_wag(mob/living/carbon/organ_owner) - SIGNAL_HANDLER + if(!(wag_flags & WAG_ABLE)) + return FALSE - var/datum/bodypart_overlay/mutant/tail/accessory = bodypart_overlay - wag_flags &= ~WAG_WAGGING - accessory.wagging = FALSE + var/succeeded = FALSE + if(wag_flags & WAG_WAGGING) + wag_flags &= ~WAG_WAGGING + succeeded = TRUE + + var/datum/bodypart_overlay/mutant/tail/tail_overlay = bodypart_overlay + tail_overlay.wagging = FALSE + if(tail_spines_overlay) //if there are spines, they should stop wagging with the tail + tail_spines_overlay.wagging = FALSE if(isnull(organ_owner)) - return + return succeeded organ_owner.update_body_parts() UnregisterSignal(organ_owner, COMSIG_LIVING_DEATH) + return succeeded ///Tail parent type, with wagging functionality /datum/bodypart_overlay/mutant/tail @@ -135,32 +180,7 @@ bodypart_overlay = /datum/bodypart_overlay/mutant/tail/lizard wag_flags = WAG_ABLE - ///A reference to the paired_spines, since for some fucking reason tail spines are tied to the spines themselves. - var/obj/item/organ/external/spines/paired_spines - -/obj/item/organ/external/tail/lizard/Insert(mob/living/carbon/receiver, special, movement_flags) - . = ..() - if(.) - paired_spines = bodypart_owner.owner.get_organ_slot(ORGAN_SLOT_EXTERNAL_SPINES) - paired_spines?.paired_tail = src - -/obj/item/organ/external/tail/lizard/Remove(mob/living/carbon/organ_owner, special, movement_flags) - . = ..() - if(paired_spines) - paired_spines.paired_tail = null - paired_spines = null - -/obj/item/organ/external/tail/lizard/start_wag() - if(paired_spines) - var/datum/bodypart_overlay/mutant/spines/accessory = paired_spines.bodypart_overlay - accessory.wagging = TRUE - return ..() - -/obj/item/organ/external/tail/lizard/stop_wag() - if(paired_spines) - var/datum/bodypart_overlay/mutant/spines/accessory = paired_spines.bodypart_overlay - accessory.wagging = FALSE - return ..() + //dna_block = DNA_LIZARD_TAIL_BLOCK // NOVA EDIT REMOVAL - Customization - We have our own system to handle DNA. ///Lizard tail bodypart overlay datum /datum/bodypart_overlay/mutant/tail/lizard @@ -172,3 +192,23 @@ /obj/item/organ/external/tail/lizard/fake name = "fabricated lizard tail" desc = "A fabricated severed lizard tail. This one's made of synthflesh. Probably not usable for lizard wine." + +///Bodypart overlay for tail spines. Handled by the tail - has no actual organ associated. +/datum/bodypart_overlay/mutant/tail_spines + layers = EXTERNAL_ADJACENT|EXTERNAL_BEHIND + feature_key = "tailspines" + ///Spines wag when the tail does + var/wagging = FALSE + /// Key for tail spine states, depends on the shape of the tail. Defined in the tail sprite datum. + var/tail_spine_key = NONE + +/datum/bodypart_overlay/mutant/tail_spines/get_global_feature_list() + return GLOB.sprite_accessories["tailspines"] // NOVA EDIT CHANGE - ORIGINAL: return GLOB.tail_spines_list + +/datum/bodypart_overlay/mutant/tail_spines/get_base_icon_state() + return (!isnull(tail_spine_key) ? "[tail_spine_key]_" : "") + (wagging ? "wagging_" : "") + sprite_datum.icon_state // Select the wagging state if appropriate + +/datum/bodypart_overlay/mutant/tail_spines/can_draw_on_bodypart(mob/living/carbon/human/human) + . = ..() + if(human.wear_suit && (human.wear_suit.flags_inv & HIDEJUMPSUIT)) + return FALSE diff --git a/code/modules/surgery/organs/internal/cyberimp/augments_arms.dm b/code/modules/surgery/organs/internal/cyberimp/augments_arms.dm index 463e34977ee..a2eeb4eac32 100644 --- a/code/modules/surgery/organs/internal/cyberimp/augments_arms.dm +++ b/code/modules/surgery/organs/internal/cyberimp/augments_arms.dm @@ -78,19 +78,32 @@ /obj/item/organ/internal/cyberimp/arm/on_mob_insert(mob/living/carbon/arm_owner) . = ..() - var/side = zone == BODY_ZONE_R_ARM? RIGHT_HANDS : LEFT_HANDS - hand = arm_owner.hand_bodyparts[side] - if(hand) - RegisterSignal(hand, COMSIG_ITEM_ATTACK_SELF, PROC_REF(on_item_attack_self)) //If the limb gets an attack-self, open the menu. Only happens when hand is empty - RegisterSignal(arm_owner, COMSIG_KB_MOB_DROPITEM_DOWN, PROC_REF(dropkey)) //We're nodrop, but we'll watch for the drop hotkey anyway and then stow if possible. + RegisterSignal(arm_owner, COMSIG_CARBON_POST_ATTACH_LIMB, PROC_REF(on_limb_attached)) + RegisterSignal(arm_owner, COMSIG_KB_MOB_DROPITEM_DOWN, PROC_REF(dropkey)) //We're nodrop, but we'll watch for the drop hotkey anyway and then stow if possible. + on_limb_attached(arm_owner, arm_owner.hand_bodyparts[zone == BODY_ZONE_R_ARM ? RIGHT_HANDS : LEFT_HANDS]) /obj/item/organ/internal/cyberimp/arm/on_mob_remove(mob/living/carbon/arm_owner) . = ..() Retract() + UnregisterSignal(arm_owner, list(COMSIG_CARBON_POST_ATTACH_LIMB, COMSIG_KB_MOB_DROPITEM_DOWN)) + on_limb_detached(hand) + +/obj/item/organ/internal/cyberimp/arm/proc/on_limb_attached(mob/living/carbon/source, obj/item/bodypart/limb) + SIGNAL_HANDLER + if(!limb || QDELETED(limb) || limb.body_zone != zone) + return if(hand) - UnregisterSignal(hand, COMSIG_ITEM_ATTACK_SELF) - UnregisterSignal(arm_owner, COMSIG_KB_MOB_DROPITEM_DOWN) - hand = null + on_limb_detached(hand) + RegisterSignal(limb, COMSIG_ITEM_ATTACK_SELF, PROC_REF(on_item_attack_self)) + RegisterSignal(limb, COMSIG_BODYPART_REMOVED, PROC_REF(on_limb_detached)) + hand = limb + +/obj/item/organ/internal/cyberimp/arm/proc/on_limb_detached(obj/item/bodypart/source) + SIGNAL_HANDLER + if(source != hand || QDELETED(hand)) + return + UnregisterSignal(hand, list(COMSIG_ITEM_ATTACK_SELF, COMSIG_BODYPART_REMOVED)) + hand = null /obj/item/organ/internal/cyberimp/arm/proc/on_item_attack_self() SIGNAL_HANDLER diff --git a/code/modules/surgery/organs/internal/ears/_ears.dm b/code/modules/surgery/organs/internal/ears/_ears.dm index d0255d5a060..76d8751dc5d 100644 --- a/code/modules/surgery/organs/internal/ears/_ears.dm +++ b/code/modules/surgery/organs/internal/ears/_ears.dm @@ -93,15 +93,13 @@ /obj/item/organ/internal/ears/penguin/on_mob_insert(mob/living/carbon/human/ear_owner) . = ..() - if(istype(ear_owner)) - to_chat(ear_owner, span_notice("You suddenly feel like you've lost your balance.")) - ear_owner.AddElement(/datum/element/waddling) + to_chat(ear_owner, span_notice("You suddenly feel like you've lost your balance.")) + ear_owner.AddElementTrait(TRAIT_WADDLING, ORGAN_TRAIT, /datum/element/waddling) /obj/item/organ/internal/ears/penguin/on_mob_remove(mob/living/carbon/human/ear_owner) . = ..() - if(istype(ear_owner)) - to_chat(ear_owner, span_notice("Your sense of balance comes back to you.")) - ear_owner.RemoveElement(/datum/element/waddling) + to_chat(ear_owner, span_notice("Your sense of balance comes back to you.")) + REMOVE_TRAIT(ear_owner, TRAIT_WADDLING, ORGAN_TRAIT) /obj/item/organ/internal/ears/cybernetic name = "basic cybernetic ears" diff --git a/code/modules/surgery/organs/internal/eyes/_eyes.dm b/code/modules/surgery/organs/internal/eyes/_eyes.dm index e52b772479e..d962585951e 100644 --- a/code/modules/surgery/organs/internal/eyes/_eyes.dm +++ b/code/modules/surgery/organs/internal/eyes/_eyes.dm @@ -86,8 +86,13 @@ affected_human.eye_color_right = eye_color_right else eye_color_right = affected_human.eye_color_right - if(HAS_TRAIT(affected_human, TRAIT_NIGHT_VISION) && !lighting_cutoff) - lighting_cutoff = LIGHTING_CUTOFF_REAL_LOW + if(HAS_TRAIT(affected_human, TRAIT_NIGHT_VISION)) // NOVA EDIT CHANGE - ORIGINAL: if(HAS_TRAIT(affected_human, TRAIT_NIGHT_VISION) && !lighting_cutoff) + //lighting_cutoff = LIGHTING_CUTOFF_REAL_LOW // NOVA EDIT REMOVAL + // NOVA EDIT ADDITION START - NIGHT VISION ADJUSTMENT - adjusts color cutoffs based on chosen quirk color, or left eye colour if not available + var/datum/quirk/night_vision/nv_quirk = affected_human.get_quirk(/datum/quirk/night_vision) + nv_quirk.nv_color_cutoffs = nv_quirk.calculate_color_cutoffs(nv_quirk.nv_color) + color_cutoffs = nv_quirk.nv_color_cutoffs + // NOVA EDIT ADDITION END if(CONFIG_GET(flag/native_fov) && native_fov) affected_human.add_fov_trait(type, native_fov) @@ -310,7 +315,7 @@ /datum/action/cooldown/golem_ore_sight/Activate(atom/target) . = ..() - mineral_scan_pulse(get_turf(target)) + mineral_scan_pulse(get_turf(target), scanner = target) ///Robotic @@ -749,16 +754,9 @@ low_light_cutoff = list(5, 12, 20) medium_light_cutoff = list(15, 20, 30) high_light_cutoff = list(30, 35, 50) - var/obj/item/flashlight/eyelight/adapted/adapt_light /obj/item/organ/internal/eyes/night_vision/maintenance_adapted/on_mob_insert(mob/living/carbon/eye_owner) . = ..() - //add lighting - if(!adapt_light) - adapt_light = new /obj/item/flashlight/eyelight/adapted() - adapt_light.set_light_on(TRUE) - adapt_light.forceMove(eye_owner) - adapt_light.update_brightness(eye_owner) ADD_TRAIT(eye_owner, TRAIT_UNNATURAL_RED_GLOWY_EYES, ORGAN_TRAIT) /obj/item/organ/internal/eyes/night_vision/maintenance_adapted/on_life(seconds_per_tick, times_fired) @@ -771,9 +769,5 @@ . = ..() /obj/item/organ/internal/eyes/night_vision/maintenance_adapted/on_mob_remove(mob/living/carbon/unadapted, special = FALSE) - //remove lighting - adapt_light.set_light_on(FALSE) - adapt_light.update_brightness(unadapted) - adapt_light.forceMove(src) REMOVE_TRAIT(unadapted, TRAIT_UNNATURAL_RED_GLOWY_EYES, ORGAN_TRAIT) return ..() diff --git a/code/modules/surgery/organs/internal/heart/heart_ethereal.dm b/code/modules/surgery/organs/internal/heart/heart_ethereal.dm index 50659115872..bd30318a722 100644 --- a/code/modules/surgery/organs/internal/heart/heart_ethereal.dm +++ b/code/modules/surgery/organs/internal/heart/heart_ethereal.dm @@ -88,12 +88,12 @@ crystalize_timer_id = addtimer(CALLBACK(src, PROC_REF(crystalize), victim), CRYSTALIZE_PRE_WAIT_TIME, TIMER_STOPPABLE) - RegisterSignal(victim, COMSIG_HUMAN_DISARM_HIT, PROC_REF(reset_crystalizing)) + RegisterSignal(victim, COMSIG_LIVING_DISARM_HIT, PROC_REF(reset_crystalizing)) RegisterSignal(victim, COMSIG_ATOM_EXAMINE, PROC_REF(on_examine), override = TRUE) RegisterSignal(victim, COMSIG_MOB_APPLY_DAMAGE, PROC_REF(on_take_damage)) ///Ran when disarmed, prevents the ethereal from reviving -/obj/item/organ/internal/heart/ethereal/proc/reset_crystalizing(mob/living/defender, mob/living/attacker, zone) +/obj/item/organ/internal/heart/ethereal/proc/reset_crystalizing(mob/living/defender, mob/living/attacker, zone, obj/item/weapon) SIGNAL_HANDLER defender.visible_message( span_notice("The crystals on [defender] are gently broken off."), @@ -120,7 +120,7 @@ ///Stop the crystalization process, unregistering any signals and resetting any variables. /obj/item/organ/internal/heart/ethereal/proc/stop_crystalization_process(mob/living/ethereal, succesful = FALSE) - UnregisterSignal(ethereal, COMSIG_HUMAN_DISARM_HIT) + UnregisterSignal(ethereal, COMSIG_LIVING_DISARM_HIT) UnregisterSignal(ethereal, COMSIG_ATOM_EXAMINE) UnregisterSignal(ethereal, COMSIG_MOB_APPLY_DAMAGE) diff --git a/code/modules/surgery/organs/internal/lungs/_lungs.dm b/code/modules/surgery/organs/internal/lungs/_lungs.dm index 874ec320648..78afbd9871e 100644 --- a/code/modules/surgery/organs/internal/lungs/_lungs.dm +++ b/code/modules/surgery/organs/internal/lungs/_lungs.dm @@ -47,6 +47,7 @@ var/safe_plasma_min = 0 ///How much breath partial pressure is a safe amount of plasma. 0 means that we are immune to plasma. var/safe_plasma_max = 0.05 + var/n2o_detect_min = 0.08 //Minimum n2o for effects var/n2o_para_min = 1 //Sleeping agent var/n2o_sleep_min = 5 //Sleeping agent var/BZ_trip_balls_min = 1 //BZ gas @@ -503,12 +504,12 @@ /obj/item/organ/internal/lungs/proc/too_much_n2o(mob/living/carbon/breather, datum/gas_mixture/breath, n2o_pp, old_n2o_pp) if(n2o_pp < n2o_para_min) // Small amount of N2O, small side-effects. - if(n2o_pp <= 0.01) - if(old_n2o_pp > 0.01) + if(n2o_pp <= n2o_detect_min) + if(old_n2o_pp > n2o_detect_min) return BREATH_LOST return // No alert for small amounts, but the mob randomly feels euphoric. - if(old_n2o_pp >= n2o_para_min || old_n2o_pp <= 0.01) + if(old_n2o_pp >= n2o_para_min || old_n2o_pp <= n2o_detect_min) breather.clear_alert(ALERT_TOO_MUCH_N2O) if(prob(20)) diff --git a/code/modules/surgery/organs/internal/tongue/_tongue.dm b/code/modules/surgery/organs/internal/tongue/_tongue.dm index 50e4e8fa478..927847dbc13 100644 --- a/code/modules/surgery/organs/internal/tongue/_tongue.dm +++ b/code/modules/surgery/organs/internal/tongue/_tongue.dm @@ -195,6 +195,7 @@ liked_foodtypes = GORE | MEAT | SEAFOOD | NUTS | BUGS disliked_foodtypes = GRAIN | DAIRY | CLOTH | GROSS voice_filter = @{"[0:a] asplit [out0][out2]; [out0] asetrate=%SAMPLE_RATE%*0.9,aresample=%SAMPLE_RATE%,atempo=1/0.9,aformat=channel_layouts=mono,volume=0.2 [p0]; [out2] asetrate=%SAMPLE_RATE%*1.1,aresample=%SAMPLE_RATE%,atempo=1/1.1,aformat=channel_layouts=mono,volume=0.2[p2]; [p0][0][p2] amix=inputs=3"} + /obj/item/organ/internal/tongue/lizard/modify_speech(datum/source, list/speech_args) var/static/regex/lizard_hiss = new("s+", "g") var/static/regex/lizard_hiSS = new("S+", "g") @@ -334,7 +335,7 @@ return // the statue ended up getting destroyed while in nullspace? var/mob/living/carbon/carbon_owner = owner - RegisterSignal(carbon_owner, COMSIG_MOVABLE_MOVED) + UnregisterSignal(carbon_owner, COMSIG_MOVABLE_MOVED) to_chat(carbon_owner, span_userdanger("Your existence as a living creature snaps as your statue form crumbles!")) carbon_owner.forceMove(get_turf(statue)) @@ -574,7 +575,7 @@ GLOBAL_LIST_INIT(english_to_zombie, list()) taste_sensitivity = 25 // not as good as an organic tongue voice_filter = "alimiter=0.9,acompressor=threshold=0.2:ratio=20:attack=10:release=50:makeup=2,highpass=f=1000" -/obj/item/organ/internal/tongue/robot/can_speak_language(language) +/obj/item/organ/internal/tongue/robot/could_speak_language(datum/language/language_path) return TRUE // THE MAGIC OF ELECTRONICS /obj/item/organ/internal/tongue/robot/modify_speech(datum/source, list/speech_args) diff --git a/code/modules/surgery/surgery_step.dm b/code/modules/surgery/surgery_step.dm index 526094f2b6f..d0d898f9f5e 100644 --- a/code/modules/surgery/surgery_step.dm +++ b/code/modules/surgery/surgery_step.dm @@ -23,7 +23,9 @@ if(!tool) success = TRUE if(iscyborg(user)) - success = TRUE + var/mob/living/silicon/robot/borg = user + if(istype(borg.module_active, /obj/item/borg/cyborghug)) + success = TRUE if(accept_any_item) if(tool && tool_check(user, tool)) @@ -63,8 +65,8 @@ return FALSE -#define SURGERY_SLOWDOWN_CAP_MULTIPLIER 2 //increase to make surgery slower but fail less, and decrease to make surgery faster but fail more #define SURGERY_SPEEDUP_AREA 0.5 // NOVA EDIT Addition - reward for doing surgery in surgery +#define SURGERY_SLOWDOWN_CAP_MULTIPLIER 2.5 //increase to make surgery slower but fail less, and decrease to make surgery faster but fail more ///Modifier given to surgery speed for dissected bodies. #define SURGERY_SPEED_DISSECTION_MODIFIER 0.8 ///Modifier given to users with TRAIT_MORBID on certain surgeries diff --git a/code/modules/surgery/tools.dm b/code/modules/surgery/tools.dm index 571e8c422d9..fee7f389dca 100644 --- a/code/modules/surgery/tools.dm +++ b/code/modules/surgery/tools.dm @@ -93,7 +93,7 @@ hitsound = 'sound/items/welder.ogg' w_class = WEIGHT_CLASS_NORMAL toolspeed = 0.7 - light_system = MOVABLE_LIGHT + light_system = OVERLAY_LIGHT light_range = 1 light_color = COLOR_SOFT_RED @@ -378,7 +378,7 @@ force = 16 w_class = WEIGHT_CLASS_NORMAL toolspeed = 0.7 - light_system = MOVABLE_LIGHT + light_system = OVERLAY_LIGHT light_range = 1 light_color = LIGHT_COLOR_BLUE sharpness = SHARP_EDGED diff --git a/code/modules/tgs/v5/api.dm b/code/modules/tgs/v5/api.dm index 25d49b3e3bd..a5c064a8eaf 100644 --- a/code/modules/tgs/v5/api.dm +++ b/code/modules/tgs/v5/api.dm @@ -8,8 +8,12 @@ var/reboot_mode = TGS_REBOOT_MODE_NORMAL + /// List of chat messages list()s that attempted to be sent during a topic call. To be bundled in the result of the call var/list/intercepted_message_queue + /// List of chat messages list()s that attempted to be sent during a topic call. To be bundled in the result of the call + var/list/offline_message_queue + var/list/custom_commands var/list/test_merges @@ -194,17 +198,7 @@ var/datum/tgs_chat_channel/channel = I ids += channel.id - message2 = UpgradeDeprecatedChatMessage(message2) - - if (!length(channels)) - return - - var/list/data = message2._interop_serialize() - data[DMAPI5_CHAT_MESSAGE_CHANNEL_IDS] = ids - if(intercepted_message_queue) - intercepted_message_queue += list(data) - else - Bridge(DMAPI5_BRIDGE_COMMAND_CHAT_SEND, list(DMAPI5_BRIDGE_PARAMETER_CHAT_MESSAGE = data)) + SendChatMessageRaw(message2, ids) /datum/tgs_api/v5/ChatTargetedBroadcast(datum/tgs_message_content/message2, admin_only) var/list/channels = list() @@ -213,26 +207,42 @@ if (!channel.is_private_channel && ((channel.is_admin_channel && admin_only) || (!channel.is_admin_channel && !admin_only))) channels += channel.id + SendChatMessageRaw(message2, channels) + +/datum/tgs_api/v5/ChatPrivateMessage(datum/tgs_message_content/message2, datum/tgs_chat_user/user) + SendChatMessageRaw(message2, list(user.channel.id)) + +/datum/tgs_api/v5/proc/SendChatMessageRaw(datum/tgs_message_content/message2, list/channel_ids) message2 = UpgradeDeprecatedChatMessage(message2) - if (!length(channels)) + if (!length(channel_ids)) return var/list/data = message2._interop_serialize() - data[DMAPI5_CHAT_MESSAGE_CHANNEL_IDS] = channels + data[DMAPI5_CHAT_MESSAGE_CHANNEL_IDS] = channel_ids if(intercepted_message_queue) intercepted_message_queue += list(data) - else - Bridge(DMAPI5_BRIDGE_COMMAND_CHAT_SEND, list(DMAPI5_BRIDGE_PARAMETER_CHAT_MESSAGE = data)) + return -/datum/tgs_api/v5/ChatPrivateMessage(datum/tgs_message_content/message2, datum/tgs_chat_user/user) - message2 = UpgradeDeprecatedChatMessage(message2) - var/list/data = message2._interop_serialize() - data[DMAPI5_CHAT_MESSAGE_CHANNEL_IDS] = list(user.channel.id) - if(intercepted_message_queue) - intercepted_message_queue += list(data) + if(offline_message_queue) + offline_message_queue += list(data) + return + + if(detached) + offline_message_queue = list(data) + + WaitForReattach(FALSE) + + data = offline_message_queue + offline_message_queue = null + + for(var/queued_message in data) + SendChatDataRaw(queued_message) else - Bridge(DMAPI5_BRIDGE_COMMAND_CHAT_SEND, list(DMAPI5_BRIDGE_PARAMETER_CHAT_MESSAGE = data)) + SendChatDataRaw(data) + +/datum/tgs_api/v5/proc/SendChatDataRaw(list/data) + Bridge(DMAPI5_BRIDGE_COMMAND_CHAT_SEND, list(DMAPI5_BRIDGE_PARAMETER_CHAT_MESSAGE = data)) /datum/tgs_api/v5/ChatChannelInfo() RequireInitialBridgeResponse() diff --git a/code/modules/tgui/external.dm b/code/modules/tgui/external.dm index bcd97a91245..1168b6c619a 100644 --- a/code/modules/tgui/external.dm +++ b/code/modules/tgui/external.dm @@ -86,7 +86,7 @@ */ /datum/proc/ui_act(action, list/params, datum/tgui/ui, datum/ui_state/state) SHOULD_CALL_PARENT(TRUE) - SEND_SIGNAL(src, COMSIG_UI_ACT, usr, action) + SEND_SIGNAL(src, COMSIG_UI_ACT, usr, action, params) // If UI is not interactive or usr calling Topic is not the UI user, bail. if(!ui || ui.status != UI_INTERACTIVE) return TRUE diff --git a/code/modules/tgui/states/greyscale_menu.dm b/code/modules/tgui/states/greyscale_menu.dm index 9de6140e709..b08c0b8c980 100644 --- a/code/modules/tgui/states/greyscale_menu.dm +++ b/code/modules/tgui/states/greyscale_menu.dm @@ -9,6 +9,6 @@ GLOBAL_DATUM_INIT(greyscale_menu_state, /datum/ui_state/greyscale_menu_state, ne /datum/ui_state/greyscale_menu_state/can_use_topic(src_object, mob/user) var/datum/greyscale_modify_menu/menu = src_object if(!isatom(menu.target)) - return TRUE + return UI_INTERACTIVE return GLOB.default_state.can_use_topic(menu.target, user) diff --git a/code/modules/tgui_input/keycombo.dm b/code/modules/tgui_input/keycombo.dm new file mode 100644 index 00000000000..948dbaea234 --- /dev/null +++ b/code/modules/tgui_input/keycombo.dm @@ -0,0 +1,126 @@ +/** + * Creates a TGUI window with a key input. Returns the user's response as a full key with modifiers, eg ShiftK. + * + * This proc should be used to create windows for key entry that the caller will wait for a response from. + * If tgui fancy chat is turned off: Will return a normal input. + * + * Arguments: + * * user - The user to show the number input to. + * * message - The content of the number input, shown in the body of the TGUI window. + * * title - The title of the number input modal, shown on the top of the TGUI window. + * * default - The default (or current) key, shown as a placeholder. + */ +/proc/tgui_input_keycombo(mob/user = usr, message, title = "Key Input", default = 0, timeout = 0, ui_state = GLOB.always_state) + if (!istype(user)) + if (istype(user, /client)) + var/client/client = user + user = client.mob + else + return null + + if (isnull(user.client)) + return null + + // Client does NOT have tgui_input on: Returns regular input + if(!user.client.prefs.read_preference(/datum/preference/toggle/tgui_input)) + var/input_key = input(user, message, title + "(Modifiers are TGUI only, sorry!)", default) as null|text + return input_key[1] + var/datum/tgui_input_keycombo/key_input = new(user, message, title, default, timeout, ui_state) + key_input.ui_interact(user) + key_input.wait() + if (key_input) + . = key_input.entry + qdel(key_input) + +/** + * # tgui_input_keycombo + * + * Datum used for instantiating and using a TGUI-controlled key input that prompts the user with + * a message and listens for key presses. + */ +/datum/tgui_input_keycombo + /// Boolean field describing if the tgui_input_number was closed by the user. + var/closed + /// The default (or current) value, shown as a default. Users can press reset with this. + var/default + /// The entry that the user has return_typed in. + var/entry + /// The prompt's body, if any, of the TGUI window. + var/message + /// The time at which the number input was created, for displaying timeout progress. + var/start_time + /// The lifespan of the number input, after which the window will close and delete itself. + var/timeout + /// The title of the TGUI window + var/title + /// The TGUI UI state that will be returned in ui_state(). Default: always_state + var/datum/ui_state/state + +/datum/tgui_input_keycombo/New(mob/user, message, title, default, timeout, ui_state) + src.default = default + src.message = message + src.title = title + src.state = ui_state + if (timeout) + src.timeout = timeout + start_time = world.time + QDEL_IN(src, timeout) + +/datum/tgui_input_keycombo/Destroy(force) + SStgui.close_uis(src) + state = null + return ..() + +/** + * Waits for a user's response to the tgui_input_keycombo's prompt before returning. Returns early if + * the window was closed by the user. + */ +/datum/tgui_input_keycombo/proc/wait() + while (!entry && !closed && !QDELETED(src)) + stoplag(1) + +/datum/tgui_input_keycombo/ui_interact(mob/user, datum/tgui/ui) + ui = SStgui.try_update_ui(user, src, ui) + if(!ui) + ui = new(user, src, "KeyComboModal") + ui.open() + +/datum/tgui_input_keycombo/ui_close(mob/user) + . = ..() + closed = TRUE + +/datum/tgui_input_keycombo/ui_state(mob/user) + return state + +/datum/tgui_input_keycombo/ui_static_data(mob/user) + var/list/data = list() + data["init_value"] = default // Default is a reserved keyword + data["large_buttons"] = user.client.prefs.read_preference(/datum/preference/toggle/tgui_input_large) + data["message"] = message + data["swapped_buttons"] = user.client.prefs.read_preference(/datum/preference/toggle/tgui_input_swapped) + data["title"] = title + return data + +/datum/tgui_input_keycombo/ui_data(mob/user) + var/list/data = list() + if(timeout) + data["timeout"] = CLAMP01((timeout - (world.time - start_time) - 1 SECONDS) / (timeout - 1 SECONDS)) + return data + +/datum/tgui_input_keycombo/ui_act(action, list/params) + . = ..() + if (.) + return + switch(action) + if("submit") + set_entry(params["entry"]) + closed = TRUE + SStgui.close_uis(src) + return TRUE + if("cancel") + closed = TRUE + SStgui.close_uis(src) + return TRUE + +/datum/tgui_input_keycombo/proc/set_entry(entry) + src.entry = entry diff --git a/code/modules/tooltip/tooltip.dm b/code/modules/tooltip/tooltip.dm index 757fe67d81e..22027a3cf8e 100644 --- a/code/modules/tooltip/tooltip.dm +++ b/code/modules/tooltip/tooltip.dm @@ -107,22 +107,22 @@ Notes: //Open a tooltip for user, at a location based on params //Theme is a CSS class in tooltip.html, by default this wrapper chooses a CSS class based on the user's UI_style (Midnight, Plasmafire, Retro, etc) //Includes sanity.checks -/proc/openToolTip(mob/user = null, atom/movable/tip_src = null, params = null,title = "",content = "",theme = "") - if(istype(user)) - if(user.client && user.client.tooltips) - var/ui_style = user.client?.prefs?.read_preference(/datum/preference/choiced/ui_style) - if(!theme && ui_style) - theme = lowertext(ui_style) - if(!theme) - theme = "default" - user.client.tooltips.show(tip_src, params,title,content,theme) +/proc/openToolTip(mob/user = null, atom/movable/tip_src = null, params = null, title = "", content = "", theme = "") + if(!istype(user) || !user.client?.tooltips) + return + var/ui_style = user.client?.prefs?.read_preference(/datum/preference/choiced/ui_style) + if(!theme && ui_style) + theme = lowertext(ui_style) + if(!theme) + theme = "default" + user.client.tooltips.show(tip_src, params, title, content, theme) //Arbitrarily close a user's tooltip //Includes sanity checks. /proc/closeToolTip(mob/user) - if(istype(user)) - if(user.client && user.client.tooltips) - user.client.tooltips.hide() + if(!istype(user) || !user.client?.tooltips) + return + user.client.tooltips.hide() diff --git a/code/modules/transport/tram/tram_controller.dm b/code/modules/transport/tram/tram_controller.dm index ed84ba2cfe0..c7fc895184f 100644 --- a/code/modules/transport/tram/tram_controller.dm +++ b/code/modules/transport/tram/tram_controller.dm @@ -128,6 +128,7 @@ /datum/transport_controller/linear/tram/Destroy() paired_cabinet = null set_status_code(SYSTEM_FAULT, TRUE) + SEND_SIGNAL(SStransport, COMSIG_TRANSPORT_ACTIVE, src, FALSE, controller_status, travel_direction, destination_platform) tram_registration.active = FALSE SSblackbox.record_feedback("amount", "tram_destroyed", 1) SSpersistence.save_tram_history(specific_transport_id) @@ -528,6 +529,7 @@ paired_cabinet = null log_transport("TC: [specific_transport_id] received QDEL from controller cabinet.") set_status_code(SYSTEM_FAULT, TRUE) + send_transport_active_signal() /** * Tram malfunction random event. Set comm error, increase tram lethality. @@ -670,6 +672,11 @@ dispatch_transport(destination_platform = push_destination) return push_destination + +/datum/transport_controller/linear/tram/slow //for some reason speed is set to initial() in the code but if i touched it it would probably break so + speed_limiter = 3 + base_speed_limiter = 3 + /** * The physical cabinet on the tram. Acts as the interface between players and the controller datum. */ @@ -686,8 +693,8 @@ integrity_failure = 0.25 layer = SIGN_LAYER req_access = list(ACCESS_TCOMMS) - idle_power_usage = BASE_MACHINE_IDLE_CONSUMPTION * 4.8 - active_power_usage = BASE_MACHINE_ACTIVE_CONSUMPTION * 4.8 + idle_power_usage = BASE_MACHINE_IDLE_CONSUMPTION * 0.25 + power_channel = AREA_USAGE_ENVIRON var/datum/transport_controller/linear/tram/controller_datum /// If the cover is open var/cover_open = FALSE @@ -697,7 +704,7 @@ /obj/machinery/transport/tram_controller/hilbert configured_transport_id = HILBERT_LINE_1 - obj_flags = /obj::obj_flags | NO_DECONSTRUCTION + obj_flags = parent_type::obj_flags | NO_DECONSTRUCTION /obj/machinery/transport/tram_controller/Initialize(mapload) . = ..() @@ -742,6 +749,9 @@ return CONTEXTUAL_SCREENTIP_SET +/obj/machinery/transport/tram_controller/update_current_power_usage() + return // We get power from area rectifiers + /obj/machinery/transport/tram_controller/examine(mob/user) . = ..() . += span_notice("The door appears to be [cover_locked ? "locked. Swipe an ID card to unlock" : "unlocked. Swipe an ID card to lock"].") @@ -847,10 +857,7 @@ balloon_alert(user, "[panel_open ? "mounting bolts exposed" : "mounting bolts hidden"]") return SECONDARY_ATTACK_CANCEL_ATTACK_CHAIN -/obj/machinery/transport/tram_controller/deconstruct(disassembled = TRUE) - if(obj_flags & NO_DECONSTRUCTION) - return - +/obj/machinery/transport/tram_controller/on_deconstruction(disassembled) var/turf/drop_location = find_obstruction_free_location(1, src) if(disassembled) @@ -858,7 +865,6 @@ else new /obj/item/stack/sheet/mineral/titanium(drop_location, 2) new /obj/item/stack/sheet/iron(drop_location, 1) - qdel(src) /** * Update the blinky lights based on the controller status, allowing to quickly check without opening up the cabinet. diff --git a/code/modules/transport/tram/tram_controls.dm b/code/modules/transport/tram/tram_controls.dm index 2ecdad304bb..db8fe767155 100644 --- a/code/modules/transport/tram/tram_controls.dm +++ b/code/modules/transport/tram/tram_controls.dm @@ -9,6 +9,8 @@ density = FALSE max_integrity = 400 integrity_failure = 0.1 + power_channel = AREA_USAGE_ENVIRON + idle_power_usage = BASE_MACHINE_IDLE_CONSUMPTION * 0.25 armor_type = /datum/armor/transport_machinery circuit = /obj/item/circuitboard/computer/tram_controls light_color = COLOR_BLUE_LIGHT @@ -64,6 +66,9 @@ if(tram) RegisterSignal(SStransport, COMSIG_TRANSPORT_ACTIVE, PROC_REF(update_display)) +/obj/machinery/computer/tram_controls/update_current_power_usage() + return // We get power from area rectifiers + /** * Finds the tram from the console * diff --git a/code/modules/transport/tram/tram_displays.dm b/code/modules/transport/tram/tram_displays.dm index 0e36295f97e..47fe21f2ff1 100644 --- a/code/modules/transport/tram/tram_displays.dm +++ b/code/modules/transport/tram/tram_displays.dm @@ -81,9 +81,7 @@ if(panel_open) . += span_notice("It is secured to the tram wall with [EXAMINE_HINT("bolts.")]") -/obj/machinery/transport/destination_sign/deconstruct(disassembled = TRUE) - if(obj_flags & NO_DECONSTRUCTION) - return +/obj/machinery/transport/destination_sign/on_deconstruction(disassembled) if(disassembled) new /obj/item/wallframe/indicator_display(drop_location()) else @@ -91,7 +89,6 @@ new /obj/item/stack/sheet/iron(drop_location(), 1) new /obj/item/shard(drop_location()) new /obj/item/shard(drop_location()) - qdel(src) /obj/machinery/transport/destination_sign/indicator/wrench_act_secondary(mob/living/user, obj/item/tool) . = ..() diff --git a/code/modules/transport/tram/tram_power.dm b/code/modules/transport/tram/tram_power.dm new file mode 100644 index 00000000000..ff0251e9090 --- /dev/null +++ b/code/modules/transport/tram/tram_power.dm @@ -0,0 +1,73 @@ +/obj/machinery/transport/power_rectifier + name = "tram power rectifier" + desc = "An electrical device that converts alternating current (AC) to direct current (DC) for powering the tram." + icon = 'icons/obj/tram/tram_controllers.dmi' + icon_state = "rectifier" + idle_power_usage = BASE_MACHINE_IDLE_CONSUMPTION * 11.4 + active_power_usage = BASE_MACHINE_ACTIVE_CONSUMPTION * 114 + power_channel = AREA_USAGE_ENVIRON + anchored = TRUE + density = FALSE + armor_type = /datum/armor/transport_module + resistance_flags = LAVA_PROOF | FIRE_PROOF | UNACIDABLE | ACID_PROOF + max_integrity = 750 + pixel_y = 32 + /// The tram platform we're connected to and providing power + var/obj/effect/landmark/transport/nav_beacon/tram/platform/connected_platform + +/obj/machinery/transport/power_rectifier/Initialize(mapload) + . = ..() + return INITIALIZE_HINT_LATELOAD + +/obj/machinery/transport/power_rectifier/LateInitialize(mapload) + . = ..() + RegisterSignal(SStransport, COMSIG_TRANSPORT_ACTIVE, PROC_REF(power_tram)) + find_platform() + +/** + * The mapper should have placed the rectifier in the area containing the station, the object will search for a landmark within + * its control area and set its idle position. + */ +/obj/machinery/transport/power_rectifier/proc/find_platform() + var/area/my_area = get_area(src) + for(var/obj/effect/landmark/transport/nav_beacon/tram/platform/candidate_platform in SStransport.nav_beacons[configured_transport_id]) + if(get_area(candidate_platform) == my_area) + connected_platform = candidate_platform + RegisterSignal(connected_platform, COMSIG_QDELETING, PROC_REF(on_landmark_qdel)) + log_transport("[id_tag]: Power rectifier linked to landmark [connected_platform.name]") + return + +/obj/machinery/transport/power_rectifier/proc/power_tram(datum/source, datum/transport_controller/linear/tram/controller, controller_active, controller_status, travel_direction, obj/effect/landmark/transport/nav_beacon/tram/platform/destination_platform) + SIGNAL_HANDLER + + if(controller_active && destination_platform == connected_platform) + update_use_power(ACTIVE_POWER_USE) + else + update_use_power(IDLE_POWER_USE) + + update_appearance() + +/** + * Update the lights based on the rectifier status. + */ +/obj/machinery/transport/power_rectifier/update_overlays() + . = ..() + + if(machine_stat & NOPOWER) + . += mutable_appearance(icon, "rec-power-0") + . += emissive_appearance(icon, "rec-power-0", src, alpha = src.alpha) + return + + . += mutable_appearance(icon, "rec-power-1") + . += emissive_appearance(icon, "rec-power-1", src, alpha = src.alpha) + + var/is_active = use_power == ACTIVE_POWER_USE + . += mutable_appearance(icon, "rec-active-[is_active]") + . += emissive_appearance(icon, "rec-active-[is_active]", src, alpha = src.alpha) + +/** + * Clear reference to the connected landmark if it gets destroyed. + */ +/obj/machinery/transport/power_rectifier/proc/on_landmark_qdel() + log_transport("[id_tag]: Power rectifier received QDEL from landmark [connected_platform.name]") + connected_platform = null diff --git a/code/modules/transport/tram/tram_remote.dm b/code/modules/transport/tram/tram_remote.dm index 71433d56ddf..4176117d8b2 100644 --- a/code/modules/transport/tram/tram_remote.dm +++ b/code/modules/transport/tram/tram_remote.dm @@ -108,6 +108,10 @@ SEND_SIGNAL(src, COMSIG_TRANSPORT_REQUEST, specific_transport_id, destination, options) /obj/item/assembly/control/transport/remote/AltClick(mob/user) + . = ..() + if(!can_interact(user)) + return + link_tram(user) /obj/item/assembly/control/transport/remote/proc/link_tram(mob/user) diff --git a/code/modules/transport/tram/tram_signals.dm b/code/modules/transport/tram/tram_signals.dm index 9e297e8e829..101ae1027a3 100644 --- a/code/modules/transport/tram/tram_signals.dm +++ b/code/modules/transport/tram/tram_signals.dm @@ -10,13 +10,14 @@ integrity_failure = 0.25 light_range = 2 light_power = 0.7 - idle_power_usage = BASE_MACHINE_IDLE_CONSUMPTION * 2.4 - active_power_usage = BASE_MACHINE_ACTIVE_CONSUMPTION * 0.48 + idle_power_usage = BASE_MACHINE_IDLE_CONSUMPTION * 3.6 + active_power_usage = BASE_MACHINE_ACTIVE_CONSUMPTION * 0.72 anchored = TRUE density = FALSE + interaction_flags_machine = INTERACT_MACHINE_OPEN circuit = /obj/item/circuitboard/machine/crossing_signal // pointless if it only takes 2 seconds to cross but updates every 2 seconds - subsystem_type = /datum/controller/subsystem/processing/transport + subsystem_type = /datum/controller/subsystem/processing/fastprocess light_color = LIGHT_COLOR_BABY_BLUE /// green, amber, or red for tram, blue if it's emag, tram missing, etc. var/signal_state = XING_STATE_MALF @@ -74,8 +75,7 @@ layer = TRAM_SIGNAL_LAYER max_integrity = 250 integrity_failure = 0.25 - idle_power_usage = BASE_MACHINE_IDLE_CONSUMPTION * 2.4 - active_power_usage = BASE_MACHINE_ACTIVE_CONSUMPTION * 0.74 + idle_power_usage = BASE_MACHINE_IDLE_CONSUMPTION * 3.6 anchored = TRUE density = FALSE light_range = 1.5 @@ -172,6 +172,8 @@ /obj/machinery/transport/crossing_signal/AltClick(mob/living/user) . = ..() + if(!can_interact(user)) + return var/obj/item/tool = user.get_active_held_item() if(!panel_open || tool?.tool_behaviour != TOOL_WRENCH) @@ -308,13 +310,14 @@ * Returns whether we are still processing. */ /obj/machinery/transport/crossing_signal/proc/update_operating() - use_power(idle_power_usage) update_appearance() // Immediately process for snappy feedback var/should_process = process() != PROCESS_KILL if(should_process) + update_use_power(ACTIVE_POWER_USE) begin_processing() return + update_use_power(IDLE_POWER_USE) end_processing() /obj/machinery/transport/crossing_signal/process() @@ -328,8 +331,6 @@ set_signal_state(XING_STATE_MALF, force = !is_operational) return PROCESS_KILL - use_power(active_power_usage) - var/obj/structure/transport/linear/tram_part = tram.return_closest_platform_to(src) if(QDELETED(tram_part)) @@ -499,7 +500,7 @@ icon_state = "sensor-base" desc = "Uses an infrared beam to detect passing trams. Works when paired with a sensor on the other side of the track." layer = TRAM_RAIL_LAYER - use_power = 0 + use_power = NO_POWER_USE circuit = /obj/item/circuitboard/machine/guideway_sensor /// Sensors work in a married pair var/datum/weakref/paired_sensor diff --git a/code/modules/transport/tram/tram_structures.dm b/code/modules/transport/tram/tram_structures.dm index ccf6a99d929..74532d87be7 100644 --- a/code/modules/transport/tram/tram_structures.dm +++ b/code/modules/transport/tram/tram_structures.dm @@ -31,6 +31,7 @@ opacity = FALSE anchored = TRUE flags_1 = PREVENT_CLICK_UNDER_1 + pass_flags_self = PASSWINDOW armor_type = /datum/armor/tram_structure smoothing_flags = SMOOTH_BITMASK smoothing_groups = SMOOTH_GROUP_TRAM_STRUCTURE diff --git a/code/modules/transport/transport_module.dm b/code/modules/transport/transport_module.dm index 7a7facea1b3..c33d729e75c 100644 --- a/code/modules/transport/transport_module.dm +++ b/code/modules/transport/transport_module.dm @@ -86,6 +86,7 @@ if(radial_travel) AddElement(/datum/element/contextual_screentip_bare_hands, lmb_text = "Send Transport") + ADD_TRAIT(src, TRAIT_CHASM_STOPPER, INNATE_TRAIT) set_movement_registrations() //since transport_controller datums find all connected platforms when a transport structure first creates it and then @@ -931,10 +932,13 @@ addtimer(CALLBACK(src, PROC_REF(clear_turfs), turfs, iterations), 1) /obj/structure/transport/linear/tram/proc/estop_throw(throw_direction) - if(prob(50)) - do_sparks(2, FALSE, src) for(var/mob/living/passenger in transport_contents) to_chat(passenger, span_userdanger("The tram comes to a sudden, grinding stop!")) + if(prob(17.5)) // sometimes you go through a window + passenger.AddElement(/datum/element/window_smashing, duration = 1.5 SECONDS) var/throw_target = get_edge_target_turf(src, throw_direction) - var/datum/callback/land_slam = new(passenger, TYPE_PROC_REF(/mob/living/, tram_slam_land)) - passenger.throw_at(throw_target, 400, 4, force = MOVE_FORCE_OVERPOWERING, callback = land_slam) + passenger.throw_at(throw_target, 30, 7, force = MOVE_FORCE_OVERPOWERING) + +/obj/structure/transport/linear/tram/slow + transport_controller_type = /datum/transport_controller/linear/tram/slow + speed_limiter = /datum/transport_controller/linear/tram/slow::speed_limiter diff --git a/code/modules/unit_tests/achievements.dm b/code/modules/unit_tests/achievements.dm index 44e1384c2e0..decda52a2f5 100644 --- a/code/modules/unit_tests/achievements.dm +++ b/code/modules/unit_tests/achievements.dm @@ -2,13 +2,13 @@ /datum/unit_test/achievements /datum/unit_test/achievements/Run() - var/award_icons = icon_states(ACHIEVEMENTS_SET) for(var/datum/award/award as anything in subtypesof(/datum/award)) if(!initial(award.name)) //Skip abstract achievements types continue var/init_icon = initial(award.icon) - if(!init_icon || !(init_icon in award_icons)) - TEST_FAIL("Award [initial(award.name)] has an unexistent icon: \"[init_icon || "null"]\"") + var/init_icon_state = initial(award.icon_state) + if(!init_icon_state || !icon_exists(init_icon, init_icon_state)) + TEST_FAIL("Award [initial(award.name)] has a non-existent icon in [init_icon]: \"[init_icon_state || "null"]\"") if(length(initial(award.database_id)) > 32) //sql schema limit TEST_FAIL("Award [initial(award.name)] database id is too long") var/init_category = initial(award.category) diff --git a/code/modules/unit_tests/area_contents.dm b/code/modules/unit_tests/area_contents.dm index 8a48d644ee9..52394dd60ec 100644 --- a/code/modules/unit_tests/area_contents.dm +++ b/code/modules/unit_tests/area_contents.dm @@ -6,23 +6,28 @@ /datum/unit_test/area_contents/Run() // First, we check that there are no entries in more then one area // That or duplicate entries - for(var/area/space in GLOB.areas) - for(var/turf/position as anything in space.get_contained_turfs()) - if(!isturf(position)) - TEST_FAIL("Found a [position.type] in [space.type]'s turf listing") + for (var/area/area_to_test in GLOB.areas) + area_to_test.cannonize_contained_turfs() + for (var/i in 1 to area_to_test.turfs_by_zlevel.len) + if (!islist(area_to_test.turfs_by_zlevel[i])) + TEST_FAIL("zlevel index [i] in [area_to_test.type] is not a list.") - if(position.in_contents_of) - var/area/existing = position.in_contents_of - if(existing == space) - TEST_FAIL("Found a duplicate turf [position.type] inside [space.type]'s turf listing") - else - TEST_FAIL("Found a shared turf [position.type] between [space.type] and [existing.type]'s turf listings") + for (var/turf/turf_to_check as anything in area_to_test.turfs_by_zlevel[i]) + if (!isturf(turf_to_check)) + TEST_FAIL("Found a [turf_to_check.type] in [area_to_test.type]'s turf listing") - var/area/dream_spot = position.loc - if(dream_spot != space) - TEST_FAIL("Found a turf [position.type] which is IN [dream_spot.type], but is registered as being in [space.type]") + if (turf_to_check.in_contents_of) + var/area/existing = turf_to_check.in_contents_of + if (existing == turf_to_check) + TEST_FAIL("Found a duplicate turf [turf_to_check.type] inside [area_to_test.type]'s turf listing") + else + TEST_FAIL("Found a shared turf [turf_to_check.type] between [area_to_test.type] and [existing.type]'s turf listings") - position.in_contents_of = space + var/area/turfs_actual_area = turf_to_check.loc + if (turfs_actual_area != area_to_test) + TEST_FAIL("Found a turf [turf_to_check.type] which is IN [turfs_actual_area.type], but is registered as being in [area_to_test.type]") + + turf_to_check.in_contents_of = turf_to_check for(var/turf/position in ALL_TURFS()) if(!position.in_contents_of) diff --git a/code/modules/unit_tests/atmospherics_sanity.dm b/code/modules/unit_tests/atmospherics_sanity.dm index c4f024e9178..ff177ae4517 100644 --- a/code/modules/unit_tests/atmospherics_sanity.dm +++ b/code/modules/unit_tests/atmospherics_sanity.dm @@ -101,7 +101,7 @@ UNTIL(crawls == 0) for(var/area/missed as anything in remaining_areas) if(missed.has_contained_turfs()) - var/turf/first_turf = missed.get_contained_turfs()[1] + var/turf/first_turf = missed.get_zlevel_turf_lists()[1][1] TEST_FAIL("Disconnected Area '[missed]'([missed.type]) at ([first_turf.x], [first_turf.y], [first_turf.z])") else TEST_NOTICE(src, "Disconnected Area '[missed]'([missed.type]) with no turfs?") diff --git a/code/modules/unit_tests/changeling.dm b/code/modules/unit_tests/changeling.dm index b209e34aebb..b13a0d5434d 100644 --- a/code/modules/unit_tests/changeling.dm +++ b/code/modules/unit_tests/changeling.dm @@ -8,7 +8,7 @@ /datum/unit_test/transformation_sting/Run() var/mob/living/carbon/human/ling = setup_ling() var/mob/living/carbon/human/victim = setup_victim() - var/datum/antagonist/changeling/ling_datum = ling.mind.has_antag_datum(/datum/antagonist/changeling) + var/datum/antagonist/changeling/ling_datum = IS_CHANGELING(ling) // Get the ability we're testing ling_datum.give_power(/datum/action/changeling/sting/transformation) // NOVA EDIT CHANGE - Transformation sting not purchasable here - ORIGINAL : ling_datum.purchase_power(/datum/action/changeling/sting/transformation) diff --git a/code/modules/unit_tests/find_reference_sanity.dm b/code/modules/unit_tests/find_reference_sanity.dm index 0dda1559819..4bc6445f024 100644 --- a/code/modules/unit_tests/find_reference_sanity.dm +++ b/code/modules/unit_tests/find_reference_sanity.dm @@ -15,6 +15,8 @@ return ..() /atom/movable/ref_test + // Gotta make sure we do a full check + references_to_clear = INFINITY var/atom/movable/ref_test/self_ref /atom/movable/ref_test/Destroy(force) @@ -29,9 +31,9 @@ //Sanity check var/refcount = refcount(victim) TEST_ASSERT_EQUAL(refcount, 3, "Should be: test references: 0 + baseline references: 3 (victim var,loc,allocated list)") - victim.DoSearchVar(testbed, "Sanity Check", search_time = 1) //We increment search time to get around an optimization + victim.DoSearchVar(testbed, "Sanity Check") //We increment search time to get around an optimization - TEST_ASSERT(!victim.found_refs.len, "The ref-tracking tool found a ref where none existed") + TEST_ASSERT(!LAZYLEN(victim.found_refs), "The ref-tracking tool found a ref where none existed") SSgarbage.should_save_refs = FALSE /datum/unit_test/find_reference_baseline/Run() @@ -46,11 +48,11 @@ var/refcount = refcount(victim) TEST_ASSERT_EQUAL(refcount, 6, "Should be: test references: 3 + baseline references: 3 (victim var,loc,allocated list)") - victim.DoSearchVar(testbed, "First Run", search_time = 2) + victim.DoSearchVar(testbed, "First Run") - TEST_ASSERT(victim.found_refs["test"], "The ref-tracking tool failed to find a regular value") - TEST_ASSERT(victim.found_refs[testbed.test_list], "The ref-tracking tool failed to find a list entry") - TEST_ASSERT(victim.found_refs[testbed.test_assoc_list], "The ref-tracking tool failed to find an assoc list value") + TEST_ASSERT(LAZYACCESS(victim.found_refs, "test"), "The ref-tracking tool failed to find a regular value") + TEST_ASSERT(LAZYACCESS(victim.found_refs, testbed.test_list), "The ref-tracking tool failed to find a list entry") + TEST_ASSERT(LAZYACCESS(victim.found_refs, testbed.test_assoc_list), "The ref-tracking tool failed to find an assoc list value") SSgarbage.should_save_refs = FALSE /datum/unit_test/find_reference_exotic/Run() @@ -65,12 +67,12 @@ var/refcount = refcount(victim) TEST_ASSERT_EQUAL(refcount, 6, "Should be: test references: 3 + baseline references: 3 (victim var,loc,allocated list)") - victim.DoSearchVar(testbed, "Second Run", search_time = 3) + victim.DoSearchVar(testbed, "Second Run") //This is another sanity check - TEST_ASSERT(!victim.found_refs[testbed.overlays], "The ref-tracking tool found an overlays entry? That shouldn't be possible") - TEST_ASSERT(victim.found_refs[testbed.vis_contents], "The ref-tracking tool failed to find a vis_contents entry") - TEST_ASSERT(victim.found_refs[testbed.test_assoc_list], "The ref-tracking tool failed to find an assoc list key") + TEST_ASSERT(!LAZYACCESS(victim.found_refs, testbed.overlays), "The ref-tracking tool found an overlays entry? That shouldn't be possible") + TEST_ASSERT(LAZYACCESS(victim.found_refs, testbed.vis_contents), "The ref-tracking tool failed to find a vis_contents entry") + TEST_ASSERT(LAZYACCESS(victim.found_refs, testbed.test_assoc_list), "The ref-tracking tool failed to find an assoc list key") SSgarbage.should_save_refs = FALSE /datum/unit_test/find_reference_esoteric/Run() @@ -87,12 +89,12 @@ var/refcount = refcount(victim) TEST_ASSERT_EQUAL(refcount, 6, "Should be: test references: 3 + baseline references: 3 (victim var,loc,allocated list)") - victim.DoSearchVar(victim, "Third Run Self", search_time = 4) - victim.DoSearchVar(testbed, "Third Run Testbed", search_time = 4) + victim.DoSearchVar(victim, "Third Run Self") + victim.DoSearchVar(testbed, "Third Run Testbed") - TEST_ASSERT(victim.found_refs["self_ref"], "The ref-tracking tool failed to find a self reference") - TEST_ASSERT(victim.found_refs[to_find], "The ref-tracking tool failed to find a nested list entry") - TEST_ASSERT(victim.found_refs[to_find_assoc], "The ref-tracking tool failed to find a nested assoc list entry") + TEST_ASSERT(LAZYACCESS(victim.found_refs, "self_ref"), "The ref-tracking tool failed to find a self reference") + TEST_ASSERT(LAZYACCESS(victim.found_refs, to_find), "The ref-tracking tool failed to find a nested list entry") + TEST_ASSERT(LAZYACCESS(victim.found_refs, to_find_assoc), "The ref-tracking tool failed to find a nested assoc list entry") SSgarbage.should_save_refs = FALSE /datum/unit_test/find_reference_null_key_entry/Run() @@ -104,9 +106,9 @@ testbed.test_assoc_list = list(null = victim) var/refcount = refcount(victim) TEST_ASSERT_EQUAL(refcount, 4, "Should be: test references: 1 + baseline references: 3 (victim var,loc,allocated list)") - victim.DoSearchVar(testbed, "Fourth Run", search_time = 5) + victim.DoSearchVar(testbed, "Fourth Run") - TEST_ASSERT(testbed.test_assoc_list, "The ref-tracking tool failed to find a null key'd assoc list entry") + TEST_ASSERT(LAZYACCESS(victim.found_refs, testbed.test_assoc_list), "The ref-tracking tool failed to find a null key'd assoc list entry") /datum/unit_test/find_reference_assoc_investigation/Run() var/atom/movable/ref_test/victim = allocate(/atom/movable/ref_test) @@ -121,10 +123,10 @@ var/refcount = refcount(victim) TEST_ASSERT_EQUAL(refcount, 5, "Should be: test references: 2 + baseline references: 3 (victim var,loc,allocated list)") - victim.DoSearchVar(testbed, "Fifth Run", search_time = 6) + victim.DoSearchVar(testbed, "Fifth Run") - TEST_ASSERT(victim.found_refs[to_find_in_key], "The ref-tracking tool failed to find a nested assoc list key") - TEST_ASSERT(victim.found_refs[to_find_null_assoc_nested], "The ref-tracking tool failed to find a null key'd nested assoc list entry") + TEST_ASSERT(LAZYACCESS(victim.found_refs, to_find_in_key), "The ref-tracking tool failed to find a nested assoc list key") + TEST_ASSERT(LAZYACCESS(victim.found_refs, to_find_null_assoc_nested), "The ref-tracking tool failed to find a null key'd nested assoc list entry") SSgarbage.should_save_refs = FALSE /datum/unit_test/find_reference_static_investigation/Run() @@ -144,7 +146,7 @@ var/refcount = refcount(victim) TEST_ASSERT_EQUAL(refcount, 5, "Should be: test references: 2 + baseline references: 3 (victim var,loc,allocated list)") - victim.DoSearchVar(global_vars, "Sixth Run", search_time = 7) + victim.DoSearchVar(global_vars, "Sixth Run") - TEST_ASSERT(victim.found_refs[global_vars], "The ref-tracking tool failed to find a natively global variable") + TEST_ASSERT(LAZYACCESS(victim.found_refs, global_vars), "The ref-tracking tool failed to find a natively global variable") SSgarbage.should_save_refs = FALSE diff --git a/code/modules/unit_tests/ling_decap.dm b/code/modules/unit_tests/ling_decap.dm index 5d6f01caf9a..4c8c7e4e031 100644 --- a/code/modules/unit_tests/ling_decap.dm +++ b/code/modules/unit_tests/ling_decap.dm @@ -9,11 +9,12 @@ var/obj/item/bodypart/head/noggin = ling.get_bodypart(BODY_ZONE_HEAD) noggin.dismember() TEST_ASSERT_NULL(ling.get_bodypart(BODY_ZONE_HEAD), "Changeling failed to be decapitated.") - TEST_ASSERT_NULL(noggin.brain.brainmob.mind, "Changeling's mind was moved to their brain after decapitation, but it should have remained in their body.") + var/obj/item/organ/internal/brain/brain = locate(/obj/item/organ/internal/brain) in noggin + TEST_ASSERT_NULL(brain.brainmob.mind, "Changeling's mind was moved to their brain after decapitation, but it should have remained in their body.") - var/obj/item/organ/internal/brain/oldbrain = noggin.brain + var/obj/item/organ/internal/brain/oldbrain = locate(/obj/item/organ/internal/brain) in noggin noggin.drop_organs() - TEST_ASSERT_NULL(noggin.brain, "Changeling's head failed to drop its brain.") + TEST_ASSERT_NULL(locate(/obj/item/organ/internal/brain) in noggin, "Changeling's head failed to drop its brain.") TEST_ASSERT_NULL(oldbrain.brainmob.mind, "Changeling's mind was moved to their brain after decapitation and organ dropping, but it should have remained in their body.") TEST_ASSERT_EQUAL(ling.stat, CONSCIOUS, "Changeling was not conscious after losing their head.") @@ -33,9 +34,10 @@ var/obj/item/bodypart/head/noggin = normal_guy.get_bodypart(BODY_ZONE_HEAD) noggin.dismember() - TEST_ASSERT_EQUAL(noggin.brain.brainmob.mind, my_guys_mind, "Dummy's mind was not moved to their brain after decapitation.") + var/obj/item/organ/internal/brain/brain = locate(/obj/item/organ/internal/brain) in noggin + TEST_ASSERT_EQUAL(brain.brainmob.mind, my_guys_mind, "Dummy's mind was not moved to their brain after decapitation.") - var/obj/item/organ/internal/brain/oldbrain = noggin.brain + var/obj/item/organ/internal/brain/oldbrain = locate(/obj/item/organ/internal/brain) in noggin noggin.drop_organs() TEST_ASSERT_EQUAL(oldbrain.brainmob.mind, my_guys_mind, "Dummy's mind was not moved to their brain after being removed from their head.") diff --git a/code/modules/unit_tests/screenshots/screenshot_antag_icons_changeling.png b/code/modules/unit_tests/screenshots/screenshot_antag_icons_changeling.png index e1bdbea1058..e564519829e 100644 Binary files a/code/modules/unit_tests/screenshots/screenshot_antag_icons_changeling.png and b/code/modules/unit_tests/screenshots/screenshot_antag_icons_changeling.png differ diff --git a/code/modules/unit_tests/screenshots/screenshot_antag_icons_changelingmidround.png b/code/modules/unit_tests/screenshots/screenshot_antag_icons_changelingmidround.png index d002f746667..2aa52df66b9 100644 Binary files a/code/modules/unit_tests/screenshots/screenshot_antag_icons_changelingmidround.png and b/code/modules/unit_tests/screenshots/screenshot_antag_icons_changelingmidround.png differ diff --git a/code/modules/unit_tests/screenshots/screenshot_antag_icons_nightmare.png b/code/modules/unit_tests/screenshots/screenshot_antag_icons_nightmare.png index 3b723129ac8..853ef845383 100644 Binary files a/code/modules/unit_tests/screenshots/screenshot_antag_icons_nightmare.png and b/code/modules/unit_tests/screenshots/screenshot_antag_icons_nightmare.png differ diff --git a/code/modules/unit_tests/screenshots/screenshot_antag_icons_stowawaychangeling.png b/code/modules/unit_tests/screenshots/screenshot_antag_icons_stowawaychangeling.png index e1bdbea1058..e564519829e 100644 Binary files a/code/modules/unit_tests/screenshots/screenshot_antag_icons_stowawaychangeling.png and b/code/modules/unit_tests/screenshots/screenshot_antag_icons_stowawaychangeling.png differ diff --git a/code/modules/unit_tests/screenshots/screenshot_humanoids__datum_species_shadow_nightmare.png b/code/modules/unit_tests/screenshots/screenshot_humanoids__datum_species_shadow_nightmare.png index 61656a88892..5cdeedeffca 100644 Binary files a/code/modules/unit_tests/screenshots/screenshot_humanoids__datum_species_shadow_nightmare.png and b/code/modules/unit_tests/screenshots/screenshot_humanoids__datum_species_shadow_nightmare.png differ diff --git a/code/modules/unit_tests/screenshots/screenshot_humanoids__datum_species_snail.png b/code/modules/unit_tests/screenshots/screenshot_humanoids__datum_species_snail.png index a9e62a2ac8d..f699cf7b702 100644 Binary files a/code/modules/unit_tests/screenshots/screenshot_humanoids__datum_species_snail.png and b/code/modules/unit_tests/screenshots/screenshot_humanoids__datum_species_snail.png differ diff --git a/code/modules/unit_tests/screenshots/screenshot_husk_body.png b/code/modules/unit_tests/screenshots/screenshot_husk_body.png index 2911277fcd9..f7f1f8a7ac3 100644 Binary files a/code/modules/unit_tests/screenshots/screenshot_husk_body.png and b/code/modules/unit_tests/screenshots/screenshot_husk_body.png differ diff --git a/code/modules/unit_tests/screenshots/screenshot_husk_body_missing_limbs.png b/code/modules/unit_tests/screenshots/screenshot_husk_body_missing_limbs.png index 6c526af2ebb..aff3f07f97e 100644 Binary files a/code/modules/unit_tests/screenshots/screenshot_husk_body_missing_limbs.png and b/code/modules/unit_tests/screenshots/screenshot_husk_body_missing_limbs.png differ diff --git a/code/modules/unit_tests/simple_animal_freeze.dm b/code/modules/unit_tests/simple_animal_freeze.dm index f47fc72fbf3..a8d7e62f756 100644 --- a/code/modules/unit_tests/simple_animal_freeze.dm +++ b/code/modules/unit_tests/simple_animal_freeze.dm @@ -95,28 +95,6 @@ //MODULAR SKYRAT ENTRIES //PLEASE REFACTOR THESE AS YOU CAN /mob/living/simple_animal/hostile/bigcrab, - /mob/living/simple_animal/hostile/blackmesa, - /mob/living/simple_animal/hostile/blackmesa/blackops, - /mob/living/simple_animal/hostile/blackmesa/blackops/ranged, - /mob/living/simple_animal/hostile/blackmesa/hecu, - /mob/living/simple_animal/hostile/blackmesa/hecu/ranged, - /mob/living/simple_animal/hostile/blackmesa/hecu/ranged/smg, - /mob/living/simple_animal/hostile/blackmesa/sec, - /mob/living/simple_animal/hostile/blackmesa/sec/ranged, - /mob/living/simple_animal/hostile/blackmesa/xen, - /mob/living/simple_animal/hostile/blackmesa/xen/bullsquid, - /mob/living/simple_animal/hostile/blackmesa/xen/headcrab, - /mob/living/simple_animal/hostile/blackmesa/xen/headcrab/fast, - /mob/living/simple_animal/hostile/blackmesa/xen/headcrab_zombie, - /mob/living/simple_animal/hostile/blackmesa/xen/headcrab_zombie/gordon_freeman, - /mob/living/simple_animal/hostile/blackmesa/xen/headcrab_zombie/guard, - /mob/living/simple_animal/hostile/blackmesa/xen/headcrab_zombie/hecu, - /mob/living/simple_animal/hostile/blackmesa/xen/headcrab_zombie/hev, - /mob/living/simple_animal/hostile/blackmesa/xen/headcrab_zombie/scientist, - /mob/living/simple_animal/hostile/blackmesa/xen/houndeye, - /mob/living/simple_animal/hostile/blackmesa/xen/nihilanth, - /mob/living/simple_animal/hostile/blackmesa/xen/vortigaunt, - /mob/living/simple_animal/hostile/blackmesa/xen/vortigaunt/slave, /mob/living/simple_animal/hostile/cazador, /mob/living/simple_animal/hostile/cult, /mob/living/simple_animal/hostile/cult/assassin, diff --git a/code/modules/unit_tests/spell_mindswap.dm b/code/modules/unit_tests/spell_mindswap.dm index 133f9662d91..f598bcc7263 100644 --- a/code/modules/unit_tests/spell_mindswap.dm +++ b/code/modules/unit_tests/spell_mindswap.dm @@ -11,6 +11,10 @@ var/mob/living/carbon/human/swapper = allocate(/mob/living/carbon/human/consistent) var/mob/living/carbon/human/to_swap = allocate(/mob/living/carbon/human/consistent) + swapper.real_name = "The Mindswapper" + swapper.name = swapper.real_name + to_swap.real_name = "The Guy Who Gets Mindswapped" + to_swap.name = to_swap.real_name swapper.forceMove(run_loc_floor_bottom_left) to_swap.forceMove(locate(run_loc_floor_bottom_left.x + 1, run_loc_floor_bottom_left.y, run_loc_floor_bottom_left.z)) diff --git a/code/modules/unit_tests/station_trait_tests.dm b/code/modules/unit_tests/station_trait_tests.dm index 430e83b9af7..21173e152d7 100644 --- a/code/modules/unit_tests/station_trait_tests.dm +++ b/code/modules/unit_tests/station_trait_tests.dm @@ -6,5 +6,7 @@ for(var/datum/job/job as anything in subtypesof(/datum/job)) if(!(initial(job.job_flags) & JOB_CREW_MEMBER)) continue + if((initial(job.job_flags) & STATION_TRAIT_JOB_FLAGS) == STATION_TRAIT_JOB_FLAGS) + continue if(!(job in cyber_trait.job_to_cybernetic)) TEST_FAIL("Job [job] does not have an assigned cybernetic for [cyber_trait.type] station trait.") diff --git a/code/modules/unit_tests/tail_wag.dm b/code/modules/unit_tests/tail_wag.dm index ceb82e98c0d..cd82dfdfd50 100644 --- a/code/modules/unit_tests/tail_wag.dm +++ b/code/modules/unit_tests/tail_wag.dm @@ -11,22 +11,34 @@ // SANITY TEST // start wagging - SEND_SIGNAL(dummy, COMSIG_ORGAN_WAG_TAIL, TRUE) + dummy.wag_tail() if(!(dummy_tail.wag_flags & WAG_WAGGING)) TEST_FAIL("Tail did not start wagging when it should have!") // stop wagging - SEND_SIGNAL(dummy, COMSIG_ORGAN_WAG_TAIL, FALSE) + dummy.unwag_tail() if(dummy_tail.wag_flags & WAG_WAGGING) TEST_FAIL("Tail did not stop wagging when it should have!") + // TESTING WAG EMOTE + + // start wagging + dummy.emote("wag") + if(!(dummy_tail.wag_flags & WAG_WAGGING)) + TEST_FAIL("Tail did not start wagging after using the *wag emote!") + + // stop wagging + dummy.emote("wag") + if(dummy_tail.wag_flags & WAG_WAGGING) + TEST_FAIL("Tail did not stop wagging after using the *wag emote!") + // TESTING WAG_ABLE FLAG // flip the wag flag to unwaggable dummy_tail.wag_flags &= ~WAG_ABLE // try to wag it again - SEND_SIGNAL(dummy, COMSIG_ORGAN_WAG_TAIL, TRUE) + dummy.wag_tail() if(dummy_tail.wag_flags & WAG_WAGGING) TEST_FAIL("Tail should not have the ability to wag, yet it did!") @@ -34,19 +46,19 @@ dummy_tail.wag_flags |= WAG_ABLE // start wagging again - SEND_SIGNAL(dummy, COMSIG_ORGAN_WAG_TAIL, TRUE) + dummy.wag_tail() if(!(dummy_tail.wag_flags & WAG_WAGGING)) TEST_FAIL("Tail did not start wagging when it should have!") // TESTING STOP_AFTER // stop wagging - SEND_SIGNAL(dummy, COMSIG_ORGAN_WAG_TAIL, FALSE) + dummy.unwag_tail() if(dummy_tail.wag_flags & WAG_WAGGING) TEST_FAIL("Tail did not stop wagging when it should have!") // start wagging, stop after 0.1 seconds - SEND_SIGNAL(dummy, COMSIG_ORGAN_WAG_TAIL, TRUE, 0.1 SECONDS) + dummy.wag_tail(0.1 SECONDS) // because timers are a pain addtimer(VARSET_CALLBACK(src, timer_finished, TRUE), 0.2 SECONDS) if(!(dummy_tail.wag_flags & WAG_WAGGING)) @@ -67,7 +79,7 @@ TEST_FAIL("Tail was still wagging after being removed!") // try to wag the removed tail - SEND_SIGNAL(dummy, COMSIG_ORGAN_WAG_TAIL, TRUE) + dummy.wag_tail() if(dummy_tail.wag_flags & WAG_WAGGING) TEST_FAIL("A disembodied tail was able to start wagging!") @@ -75,7 +87,7 @@ // put it back and start wagging again dummy_tail.Insert(dummy, special = TRUE, movement_flags = DELETE_IF_REPLACED) - SEND_SIGNAL(dummy, COMSIG_ORGAN_WAG_TAIL, TRUE) + dummy.wag_tail() if(!(dummy_tail.wag_flags & WAG_WAGGING)) TEST_FAIL("Tail did not start wagging when it should have!") @@ -85,6 +97,6 @@ TEST_FAIL("A mob's tail was still wagging after being killed!") // check if we are still able to wag the tail after death - SEND_SIGNAL(dummy, COMSIG_ORGAN_WAG_TAIL, TRUE) + dummy.wag_tail() if(dummy_tail.wag_flags & WAG_WAGGING) TEST_FAIL("A dead mob was able to wag their tail!") diff --git a/code/modules/uplink/uplink_items.dm b/code/modules/uplink/uplink_items.dm index 32783504fe8..65935f077e3 100644 --- a/code/modules/uplink/uplink_items.dm +++ b/code/modules/uplink/uplink_items.dm @@ -1,4 +1,3 @@ - // TODO: Work into reworked uplinks. /// Selects a set number of unique items from the uplink, and deducts a percentage discount from them /proc/create_uplink_sales(num, datum/uplink_category/category, limited_stock, list/sale_items) @@ -8,7 +7,20 @@ var/datum/uplink_item/taken_item = pick_n_take(sale_items_copy) var/datum/uplink_item/uplink_item = new taken_item.type() var/discount = uplink_item.get_discount() - var/list/disclaimer = list("Void where prohibited.", "Not recommended for children.", "Contains small parts.", "Check local laws for legality in region.", "Do not taunt.", "Not responsible for direct, indirect, incidental or consequential damages resulting from any defect, error or failure to perform.", "Keep away from fire or flames.", "Product is provided \"as is\" without any implied or expressed warranties.", "As seen on TV.", "For recreational use only.", "Use only as directed.", "16% sales tax will be charged for orders originating within Space Nebraska.") + var/static/list/disclaimer = list( + "Void where prohibited.", + "Not recommended for children.", + "Contains small parts.", + "Check local laws for legality in region.", + "Do not taunt.", + "Not responsible for direct, indirect, incidental or consequential damages resulting from any defect, error or failure to perform.", + "Keep away from fire or flames.", + "Product is provided \"as is\" without any implied or expressed warranties.", + "As seen on TV.", + "For recreational use only.", + "Use only as directed.", + "16% sales tax will be charged for orders originating within Space Nebraska.", + ) uplink_item.limited_stock = limited_stock if(uplink_item.cost >= 20) //Tough love for nuke ops discount *= 0.5 @@ -111,10 +123,10 @@ /// Spawns an item and logs its purchase /datum/uplink_item/proc/purchase(mob/user, datum/uplink_handler/uplink_handler, atom/movable/source) - var/atom/A = spawn_item(item, user, uplink_handler, source) + var/atom/spawned_item = spawn_item(item, user, uplink_handler, source) log_uplink("[key_name(user)] purchased [src] for [cost] telecrystals from [source]'s uplink") if(purchase_log_vis && uplink_handler.purchase_log) - uplink_handler.purchase_log.LogPurchase(A, src, cost) + uplink_handler.purchase_log.LogPurchase(spawned_item, src, cost) if(lock_other_purchases) uplink_handler.shop_locked = TRUE @@ -122,20 +134,20 @@ /datum/uplink_item/proc/spawn_item(spawn_path, mob/user, datum/uplink_handler/uplink_handler, atom/movable/source) if(!spawn_path) return - var/atom/A + var/atom/spawned_item if(ispath(spawn_path)) - A = new spawn_path(get_turf(user)) + spawned_item = new spawn_path(get_turf(user)) else - A = spawn_path + spawned_item = spawn_path if(refundable) - A.AddElement(/datum/element/uplink_reimburse, (refund_amount ? refund_amount : cost)) - if(ishuman(user) && isitem(A)) - var/mob/living/carbon/human/H = user - if(H.put_in_hands(A)) - to_chat(H, span_boldnotice("[A] materializes into your hands!")) - return A - to_chat(user, span_boldnotice("[A] materializes onto the floor!")) - return A + spawned_item.AddElement(/datum/element/uplink_reimburse, (refund_amount ? refund_amount : cost)) + var/mob/living/carbon/human/human_user = user + if(istype(human_user) && isitem(spawned_item) && human_user.put_in_hands(spawned_item)) + to_chat(human_user, span_boldnotice("[spawned_item] materializes into your hands!")) + else + to_chat(user, span_boldnotice("[spawned_item] materializes onto the floor!")) + SEND_SIGNAL(uplink_handler, COMSIG_ON_UPLINK_PURCHASE, spawned_item, user) + return spawned_item ///For special overrides if an item can be bought or not. /datum/uplink_item/proc/can_be_bought(datum/uplink_handler/source) diff --git a/code/modules/uplink/uplink_items/contractor.dm b/code/modules/uplink/uplink_items/contractor.dm index 1364f8b088b..6004caf9745 100644 --- a/code/modules/uplink/uplink_items/contractor.dm +++ b/code/modules/uplink/uplink_items/contractor.dm @@ -13,7 +13,7 @@ item = /obj/item/storage/box/syndicate/contract_kit category = /datum/uplink_category/contractor cost = 20 - purchasable_from = UPLINK_INFILTRATORS + purchasable_from = ~(UPLINK_CLOWN_OPS | UPLINK_NUKE_OPS | UPLINK_TRAITORS) /datum/uplink_item/bundles_tc/contract_kit/purchase(mob/user, datum/uplink_handler/uplink_handler, atom/movable/source) . = ..() @@ -82,28 +82,9 @@ cost = 1 /datum/uplink_item/contractor/partner - name = "Reinforcements" - desc = "Upon purchase we'll contact available units in the area. Should there be an agent free, \ - we'll send them down to assist you immediately. If no units are free, we give a full refund." - item = /obj/effect/gibspawner/generic + name = "Contractor Reinforcement" + desc = "A reinforecment operative will be sent to aid you in your goals, \ + they are paid separately, and will not take a cut from your profits." + item = /obj/item/antag_spawner/loadout/contractor limited_stock = 1 cost = 2 - -/datum/uplink_item/contractor/partner/spawn_item(spawn_path, mob/user, datum/uplink_handler/uplink_handler, atom/movable/source) - to_chat(user, span_notice("The uplink vibrates quietly, connecting to nearby agents...")) - var/list/candidates = SSpolling.poll_ghost_candidates( - question = "Do you want to play as the Contractor Support Unit for [user.real_name]?", - check_jobban = ROLE_TRAITOR, - role = ROLE_TRAITOR, - poll_time = 10 SECONDS, - ignore_category = POLL_IGNORE_CONTRACTOR_SUPPORT, - pic_source = /obj/item/modular_computer/pda/syndicate_contract_uplink, - role_name_text = "contractor support unit", - ) - if(!LAZYLEN(candidates)) - to_chat(user, span_notice("No available agents at this time, please try again later.")) - limited_stock++ - return //bobux no icon - var/mob/dead/observer/selected_player = pick(candidates) - uplink_handler.contractor_hub.contractor_teammate = spawn_contractor_partner(user, selected_player.key) - return source //for log icon diff --git a/code/modules/uplink/uplink_items/job.dm b/code/modules/uplink/uplink_items/job.dm index a0b189bd220..eaf83e8fabc 100644 --- a/code/modules/uplink/uplink_items/job.dm +++ b/code/modules/uplink/uplink_items/job.dm @@ -372,3 +372,14 @@ restricted_roles = list(JOB_ASSISTANT, JOB_MIME, JOB_CLOWN) restricted = TRUE refundable = FALSE + + +/datum/uplink_item/role_restricted/reticence + name = "Reticence Cloaked Assasination exosuit" + desc = "A silent, fast, and nigh-invisible but exceptionally fragile miming exosuit! \ + fully equipped with a near-silenced pistol, and a RCD for your best assasination needs, Does not include tools, No refunds." + item = /obj/vehicle/sealed/mecha/reticence/loaded + cost = 20 + restricted_roles = list(JOB_MIME) + restricted = TRUE + refundable = FALSE diff --git a/code/modules/uplink/uplink_items/stealthy.dm b/code/modules/uplink/uplink_items/stealthy.dm index 1f1bcf4b5d0..617ca698ef8 100644 --- a/code/modules/uplink/uplink_items/stealthy.dm +++ b/code/modules/uplink/uplink_items/stealthy.dm @@ -99,7 +99,7 @@ These shocks are capable of affecting the inner circuitry of most robots as well, applying a short stun. \ Has the added benefit of affecting the vocal cords of your victim, causing them to slur as if inebriated." item = /obj/item/melee/baton/telescopic/contractor_baton - cost = 12 + cost = 7 surplus = 50 limited_stock = 1 - purchasable_from = ~(UPLINK_NUKE_OPS | UPLINK_CLOWN_OPS) + purchasable_from = ~(UPLINK_NUKE_OPS | UPLINK_CLOWN_OPS | UPLINK_INFILTRATORS) diff --git a/code/modules/vehicles/cars/clowncar.dm b/code/modules/vehicles/cars/clowncar.dm index d5a3d7bdc7d..37f6eb7efa5 100644 --- a/code/modules/vehicles/cars/clowncar.dm +++ b/code/modules/vehicles/cars/clowncar.dm @@ -9,7 +9,7 @@ movedelay = 0.6 car_traits = CAN_KIDNAP key_type = /obj/item/bikehorn - light_system = MOVABLE_LIGHT_DIRECTIONAL + light_system = OVERLAY_LIGHT_DIRECTIONAL light_range = 8 light_power = 2 light_on = FALSE @@ -179,7 +179,7 @@ to_chat(user, span_danger("You scramble [src]'s child safety lock, and a panel with six colorful buttons appears!")) initialize_controller_action_type(/datum/action/vehicle/sealed/roll_the_dice, VEHICLE_CONTROL_DRIVE) initialize_controller_action_type(/datum/action/vehicle/sealed/cannon, VEHICLE_CONTROL_DRIVE) - AddElement(/datum/element/waddling) + AddElementTrait(TRAIT_WADDLING, INNATE_TRAIT, /datum/element/waddling) return TRUE /obj/vehicle/sealed/car/clowncar/atom_destruction(damage_flag) diff --git a/code/modules/vehicles/cars/vim.dm b/code/modules/vehicles/cars/vim.dm index a37c6e18b8e..53eee5105a9 100644 --- a/code/modules/vehicles/cars/vim.dm +++ b/code/modules/vehicles/cars/vim.dm @@ -13,7 +13,7 @@ enter_delay = 20 movedelay = 0.6 engine_sound_length = 0.3 SECONDS - light_system = MOVABLE_LIGHT_DIRECTIONAL + light_system = OVERLAY_LIGHT_DIRECTIONAL light_range = 4 light_power = 2 light_on = FALSE diff --git a/code/modules/vehicles/mecha/_mecha.dm b/code/modules/vehicles/mecha/_mecha.dm index dc7304a1388..05b3470358f 100644 --- a/code/modules/vehicles/mecha/_mecha.dm +++ b/code/modules/vehicles/mecha/_mecha.dm @@ -29,7 +29,7 @@ move_force = MOVE_FORCE_VERY_STRONG move_resist = MOVE_FORCE_EXTREMELY_STRONG COOLDOWN_DECLARE(mecha_bump_smash) - light_system = MOVABLE_LIGHT_DIRECTIONAL + light_system = OVERLAY_LIGHT_DIRECTIONAL light_on = FALSE light_range = 8 generic_canpass = FALSE diff --git a/code/modules/vehicles/mecha/combat/durand.dm b/code/modules/vehicles/mecha/combat/durand.dm index f1c7bac4f81..35b53c30ccf 100644 --- a/code/modules/vehicles/mecha/combat/durand.dm +++ b/code/modules/vehicles/mecha/combat/durand.dm @@ -164,7 +164,7 @@ own integrity back to max. Shield is automatically dropped if we run out of powe pixel_y = 4 max_integrity = 10000 anchored = TRUE - light_system = MOVABLE_LIGHT + light_system = OVERLAY_LIGHT light_range = MINIMUM_USEFUL_LIGHT_RANGE light_power = 5 light_color = LIGHT_COLOR_ELECTRIC_CYAN diff --git a/code/modules/vehicles/mecha/combat/reticence.dm b/code/modules/vehicles/mecha/combat/reticence.dm index ea8c72cae23..5e400b12d97 100644 --- a/code/modules/vehicles/mecha/combat/reticence.dm +++ b/code/modules/vehicles/mecha/combat/reticence.dm @@ -3,12 +3,12 @@ name = "\improper reticence" icon_state = "reticence" base_icon_state = "reticence" - movedelay = 2 - max_integrity = 100 + movedelay = 1 + max_integrity = 120 armor_type = /datum/armor/mecha_reticence max_temperature = 15000 force = 30 - destruction_sleep_duration = 40 + destruction_sleep_duration = 1 exit_delay = 40 wreckage = /obj/structure/mecha_wreckage/reticence accesses = list(ACCESS_MECH_SCIENCE, ACCESS_THEATRE) @@ -25,10 +25,10 @@ color = "#87878715" /datum/armor/mecha_reticence - melee = 25 - bullet = 20 - laser = 30 - energy = 15 + melee = 40 + bullet = 40 + laser = 50 + energy = 20 fire = 100 acid = 100 @@ -36,13 +36,13 @@ equip_by_category = list( MECHA_L_ARM = /obj/item/mecha_parts/mecha_equipment/weapon/ballistic/silenced, MECHA_R_ARM = /obj/item/mecha_parts/mecha_equipment/rcd, - MECHA_UTILITY = list(), - MECHA_POWER = list(), + MECHA_UTILITY = list(/obj/item/mecha_parts/mecha_equipment/radio, /obj/item/mecha_parts/mecha_equipment/air_tank/full, /obj/item/mecha_parts/mecha_equipment/thrusters/ion), + MECHA_POWER = /obj/item/mecha_parts/mecha_equipment/generator, MECHA_ARMOR = list(), ) /obj/vehicle/sealed/mecha/reticence/loaded/populate_parts() - cell = new /obj/item/stock_parts/cell/hyper(src) + cell = new /obj/item/stock_parts/cell/bluespace(src) scanmod = new /obj/item/stock_parts/scanning_module/phasic(src) capacitor = new /obj/item/stock_parts/capacitor/super(src) servo = new /obj/item/stock_parts/servo/pico(src) diff --git a/code/modules/vehicles/mecha/equipment/tools/mining_tools.dm b/code/modules/vehicles/mecha/equipment/tools/mining_tools.dm index de96f3ad5f6..42a61e03b5e 100644 --- a/code/modules/vehicles/mecha/equipment/tools/mining_tools.dm +++ b/code/modules/vehicles/mecha/equipment/tools/mining_tools.dm @@ -29,12 +29,19 @@ butcher_sound = null, \ disabled = TRUE, \ ) - -/obj/item/mecha_parts/mecha_equipment/drill/action(mob/source, atom/target, list/modifiers) - // Check if we can even use the equipment to begin with. + ADD_TRAIT(src, TRAIT_INSTANTLY_PROCESSES_BOULDERS, INNATE_TRAIT) + ADD_TRAIT(src, TRAIT_BOULDER_BREAKER, INNATE_TRAIT) + +/obj/item/mecha_parts/mecha_equipment/drill/do_after_checks(atom/target) + // Gotta be close to the target + if(!loc.Adjacent(target)) + return FALSE + // Check if we can still use the equipment & use power for every iteration of do after if(!action_checks(target)) - return + return FALSE + return ..() +/obj/item/mecha_parts/mecha_equipment/drill/action(mob/source, atom/target, list/modifiers) // We can only drill non-space turfs, living mobs and objects. if(isspaceturf(target) || !(isliving(target) || isobj(target) || isturf(target))) return @@ -48,17 +55,23 @@ // You can't drill harder by clicking more. if(!DOING_INTERACTION_WITH_TARGET(source, target) && do_after_cooldown(target, source, DOAFTER_SOURCE_MECHADRILL)) - target.visible_message(span_warning("[chassis] starts to drill [target]."), \ span_userdanger("[chassis] starts to drill [target]..."), \ span_hear("You hear drilling.")) log_message("Started drilling [target]", LOG_MECHA) + // Drilling a turf is a one-and-done procedure. if(isturf(target)) + // Check if we can even use the equipment to begin with. + if(!action_checks(target)) + return + var/turf/T = target T.drill_act(src, source) + return ..() + // Drilling objects and mobs is a repeating procedure. while(do_after_mecha(target, source, drill_delay)) if(isliving(target)) @@ -66,8 +79,12 @@ playsound(src,'sound/weapons/drill.ogg',40,TRUE) else if(isobj(target)) var/obj/O = target - O.take_damage(15, BRUTE, 0, FALSE, get_dir(chassis, target)) - playsound(src,'sound/weapons/drill.ogg',40,TRUE) + if(istype(O, /obj/item/boulder)) + var/obj/item/boulder/nu_boulder = O + nu_boulder.manual_process(src, source) + else + O.take_damage(15, BRUTE, 0, FALSE, get_dir(chassis, target)) + playsound(src,'sound/weapons/drill.ogg', 40, TRUE) // If we caused a qdel drilling the target, we can stop drilling them. // Prevents starting a do_after on a qdeleted target. @@ -154,10 +171,11 @@ name = "exosuit mining scanner" desc = "Equipment for working exosuits. It will automatically check surrounding rock for useful minerals." icon_state = "mecha_analyzer" - equip_cooldown = 15 + equip_cooldown = 1.5 SECONDS equipment_slot = MECHA_UTILITY mech_flags = EXOSUIT_MODULE_WORKING var/scanning_time = 0 + COOLDOWN_DECLARE(area_scan_cooldown) /obj/item/mecha_parts/mecha_equipment/mining_scanner/Initialize(mapload) . = ..() @@ -174,7 +192,25 @@ if(!LAZYLEN(chassis.occupants)) return scanning_time = world.time + equip_cooldown - mineral_scan_pulse(get_turf(src)) + mineral_scan_pulse(get_turf(src), scanner = src) + +/obj/item/mecha_parts/mecha_equipment/mining_scanner/get_snowflake_data() + return list( + "snowflake_id" = MECHA_SNOWFLAKE_ID_ORE_SCANNER, + "cooldown" = COOLDOWN_TIMELEFT(src, area_scan_cooldown), + ) + +/obj/item/mecha_parts/mecha_equipment/mining_scanner/handle_ui_act(action, list/params) + switch(action) + if("area_scan") + if(!COOLDOWN_FINISHED(src, area_scan_cooldown)) + return FALSE + COOLDOWN_START(src, area_scan_cooldown, 15 SECONDS) + for(var/mob/living/carbon/human/driver in chassis.return_drivers()) + for(var/obj/structure/ore_vent/vent as anything in range(5, chassis)) + if(istype(vent, /obj/structure/ore_vent)) + vent.scan_and_confirm(driver, TRUE) + return TRUE #undef DRILL_BASIC #undef DRILL_HARDENED diff --git a/code/modules/vehicles/mecha/equipment/tools/work_tools.dm b/code/modules/vehicles/mecha/equipment/tools/work_tools.dm index 13041e11220..1960303baab 100644 --- a/code/modules/vehicles/mecha/equipment/tools/work_tools.dm +++ b/code/modules/vehicles/mecha/equipment/tools/work_tools.dm @@ -217,117 +217,88 @@ attempt_refill(usr) return TRUE -#define MODE_DECONSTRUCT 0 -#define MODE_WALL 1 -#define MODE_AIRLOCK 2 - /obj/item/mecha_parts/mecha_equipment/rcd name = "mounted RCD" desc = "An exosuit-mounted Rapid Construction Device." icon_state = "mecha_rcd" - equip_cooldown = 10 - energy_drain = 250 + equip_cooldown = 0 // internal RCD already handles it + energy_drain = 0 // internal RCD handles power consumption based on matter use range = MECHA_MELEE|MECHA_RANGED item_flags = NO_MAT_REDEMPTION - ///determines what we'll so when clicking on a turf - var/mode = MODE_DECONSTRUCT + ///Maximum range the RCD can construct at. + var/rcd_range = 3 + ///Whether or not to deconstruct instead. + var/deconstruct_active = FALSE + ///The type of internal RCD this equipment uses. + var/rcd_type = /obj/item/construction/rcd/exosuit + ///The internal RCD item used by this equipment. + var/obj/item/construction/rcd/internal_rcd /obj/item/mecha_parts/mecha_equipment/rcd/Initialize(mapload) . = ..() + internal_rcd = new rcd_type(src) GLOB.rcd_list += src /obj/item/mecha_parts/mecha_equipment/rcd/Destroy() GLOB.rcd_list -= src + qdel(internal_rcd) return ..() /obj/item/mecha_parts/mecha_equipment/rcd/get_snowflake_data() return list( - "snowflake_id" = MECHA_SNOWFLAKE_ID_MODE, - "mode" = get_mode_name(), - "mode_label" = "RCD control", + "snowflake_id" = MECHA_SNOWFLAKE_ID_RCD, + "scan_ready" = COOLDOWN_FINISHED(internal_rcd, destructive_scan_cooldown), + "deconstructing" = deconstruct_active, + "mode" = internal_rcd.design_title, ) -/// fetches the mode name to display in the UI -/obj/item/mecha_parts/mecha_equipment/rcd/proc/get_mode_name() - switch(mode) - if(MODE_DECONSTRUCT) - return "Deconstruct" - if(MODE_WALL) - return "Build wall" - if(MODE_AIRLOCK) - return "Build Airlock" - else - return "Someone didnt set this" +/// Set the RCD's owner when attaching and detaching it +/obj/item/mecha_parts/mecha_equipment/rcd/attach(obj/vehicle/sealed/mecha/new_mecha, attach_right) + internal_rcd.owner = new_mecha + return ..() + +/obj/item/mecha_parts/mecha_equipment/rcd/detach(atom/moveto) + internal_rcd.owner = null + return ..() /obj/item/mecha_parts/mecha_equipment/rcd/handle_ui_act(action, list/params) - if(action == "change_mode") - mode++ - if(mode > MODE_AIRLOCK) - mode = MODE_DECONSTRUCT - switch(mode) - if(MODE_DECONSTRUCT) - to_chat(chassis.occupants, "[icon2html(src, chassis.occupants)][span_notice("Switched RCD to Deconstruct.")]") - energy_drain = initial(energy_drain) - if(MODE_WALL) - to_chat(chassis.occupants, "[icon2html(src, chassis.occupants)][span_notice("Switched RCD to Construct Walls and Flooring.")]") - energy_drain = 2*initial(energy_drain) - if(MODE_AIRLOCK) - to_chat(chassis.occupants, "[icon2html(src, chassis.occupants)][span_notice("Switched RCD to Construct Airlock.")]") - energy_drain = 2*initial(energy_drain) - return TRUE + switch(action) + if("rcd_scan") + if(!COOLDOWN_FINISHED(internal_rcd, destructive_scan_cooldown)) + return FALSE + rcd_scan(internal_rcd) + COOLDOWN_START(internal_rcd, destructive_scan_cooldown, RCD_DESTRUCTIVE_SCAN_COOLDOWN) + return TRUE + if("toggle_deconstruct") + deconstruct_active = !deconstruct_active + return TRUE + if("change_mode") + for(var/mob/driver as anything in chassis.return_drivers()) + internal_rcd.ui_interact(driver) + return TRUE /obj/item/mecha_parts/mecha_equipment/rcd/action(mob/source, atom/target, list/modifiers) - if(!isturf(target) && !istype(target, /obj/machinery/door/airlock)) - target = get_turf(target) - if(!action_checks(target) || !(target in view(3, chassis)) || istype(target, /turf/open/space/transit)) + if(!action_checks(target)) return - playsound(chassis, 'sound/machines/click.ogg', 50, TRUE) - - switch(mode) - if(MODE_DECONSTRUCT) - to_chat(source, "[icon2html(src, source)][span_notice("Deconstructing [target]...")]") - if(iswallturf(target)) - var/turf/closed/wall/wall_turf = target - if(!do_after_cooldown(wall_turf, source)) - return - wall_turf.ScrapeAway() - else if(isfloorturf(target)) - var/turf/open/floor/floor_turf = target - if(!do_after_cooldown(floor_turf, source)) - return - floor_turf.ScrapeAway(flags = CHANGETURF_INHERIT_AIR) - else if (istype(target, /obj/machinery/door/airlock)) - if(!do_after_cooldown(target, source)) - return - qdel(target) - if(MODE_WALL) - if(isfloorturf(target)) - var/turf/open/floor/floor_turf = target - to_chat(source, "[icon2html(src, source)][span_notice("Building Wall...")]") - if(!do_after_cooldown(floor_turf, source)) - return - floor_turf.place_on_top(/turf/closed/wall) - else if(isopenturf(target)) - var/turf/open/open_turf = target - to_chat(source, "[icon2html(src, source)][span_notice("Building Floor...")]") - if(!do_after_cooldown(open_turf, source)) - return - open_turf.place_on_top(/turf/open/floor/plating, flags = CHANGETURF_INHERIT_AIR) - if(MODE_AIRLOCK) - if(isfloorturf(target)) - to_chat(source, "[icon2html(src, source)][span_notice("Building Airlock...")]") - if(!do_after_cooldown(target, source)) - return - var/obj/machinery/door/airlock/airlock_door = new /obj/machinery/door/airlock(target) - airlock_door.autoclose = TRUE - playsound(target, 'sound/effects/sparks2.ogg', 50, TRUE) - chassis.spark_system.start() - playsound(target, 'sound/items/deconstruct.ogg', 50, TRUE) - return ..() + if(get_dist(chassis, target) > rcd_range) + balloon_alert(source, "out of range!") + return + if(!internal_rcd) // if it somehow went missing + internal_rcd = new rcd_type(src) + stack_trace("Exosuit-mounted RCD had no internal RCD!") + ..() // do this now because the do_after can take a while + var/construction_mode = internal_rcd.mode + if(deconstruct_active) // deconstruct isn't in the RCD menu so switch it to deconstruct mode and set it back when it's done + internal_rcd.mode = RCD_DECONSTRUCT + internal_rcd.rcd_create(target, source) + internal_rcd.mode = construction_mode + return TRUE -#undef MODE_DECONSTRUCT -#undef MODE_WALL -#undef MODE_AIRLOCK +/obj/item/mecha_parts/mecha_equipment/rcd/attackby(obj/item/attacking_item, mob/user, params) + if(istype(attacking_item, /obj/item/rcd_upgrade)) + internal_rcd.install_upgrade(attacking_item, user) + return + return ..() //Dunno where else to put this so shrug /obj/item/mecha_parts/mecha_equipment/ripleyupgrade @@ -388,7 +359,8 @@ equipment.detach(newmech) equipment.attach(newmech, righthandgun) newmech.dna_lock = markone.dna_lock - newmech.mecha_flags = markone.mecha_flags + newmech.mecha_flags |= markone.mecha_flags & ~initial(markone.mecha_flags) // transfer any non-inherent flags like PANEL_OPEN and LIGHTS_ON + newmech.set_light_on(newmech.mecha_flags & LIGHTS_ON) // in case the lights were on newmech.strafe = markone.strafe //Integ set to the same percentage integ as the old mecha, rounded to be whole number newmech.update_integrity(round((markone.get_integrity() / markone.max_integrity) * newmech.get_integrity())) diff --git a/code/modules/vehicles/mecha/mecha_defense.dm b/code/modules/vehicles/mecha/mecha_defense.dm index e88ce2925ac..c1207c2677f 100644 --- a/code/modules/vehicles/mecha/mecha_defense.dm +++ b/code/modules/vehicles/mecha/mecha_defense.dm @@ -225,6 +225,10 @@ ammo_resupply(weapon, user) return + if(istype(weapon, /obj/item/rcd_upgrade)) + upgrade_rcd(weapon, user) + return + if(weapon.GetID()) if(!allowed(user)) if(mecha_flags & ID_LOCK_ON) @@ -344,21 +348,9 @@ ..() . = TRUE - if(!(mecha_flags & PANEL_OPEN) && LAZYLEN(occupants)) - for(var/mob/occupant as anything in occupants) - occupant.show_message( - span_userdanger("[user] is trying to open the maintenance panel of [src]!"), MSG_VISUAL, - span_userdanger("You hear someone trying to open the maintenance panel of [src]!"), MSG_AUDIBLE, - ) - visible_message(span_danger("[user] is trying to open the maintenance panel of [src]!")) - if(!do_after(user, 5 SECONDS, src)) - return - for(var/mob/occupant as anything in occupants) - occupant.show_message( - span_userdanger("[user] has opened the maintenance panel of [src]!"), MSG_VISUAL, - span_userdanger("You hear someone opening the maintenance panel of [src]!"), MSG_AUDIBLE, - ) - visible_message(span_danger("[user] has opened the maintenance panel of [src]!")) + if(LAZYLEN(occupants)) + balloon_alert(user, "panel blocked") + return mecha_flags ^= PANEL_OPEN balloon_alert(user, (mecha_flags & PANEL_OPEN) ? "panel open" : "panel closed") @@ -522,3 +514,9 @@ else balloon_alert(user, "can't use this ammo!") return FALSE + +///Upgrades any attached RCD equipment. +/obj/vehicle/sealed/mecha/proc/upgrade_rcd(obj/item/rcd_upgrade/rcd_upgrade, mob/user) + for(var/obj/item/mecha_parts/mecha_equipment/rcd/rcd_equip in flat_equipment) + if(rcd_equip.internal_rcd.install_upgrade(rcd_upgrade, user)) + return diff --git a/code/modules/vehicles/mecha/mecha_mob_interaction.dm b/code/modules/vehicles/mecha/mecha_mob_interaction.dm index 0789216400c..e9d7f5a1e1f 100644 --- a/code/modules/vehicles/mecha/mecha_mob_interaction.dm +++ b/code/modules/vehicles/mecha/mecha_mob_interaction.dm @@ -35,13 +35,14 @@ return FALSE return ..() -///proc called when a new non-mmi/AI mob enters this mech +///proc called when a new non-mmi mob enters this mech /obj/vehicle/sealed/mecha/proc/moved_inside(mob/living/newoccupant) if(!(newoccupant?.client)) return FALSE if(ishuman(newoccupant) && !Adjacent(newoccupant)) return FALSE add_occupant(newoccupant) + mecha_flags &= ~PANEL_OPEN //Close panel if open newoccupant.forceMove(src) newoccupant.update_mouse_pointer() add_fingerprint(newoccupant) @@ -92,6 +93,7 @@ brain_obj.set_mecha(src) add_occupant(brain_mob)//Note this forcemoves the brain into the mech to allow relaymove + mecha_flags &= ~PANEL_OPEN //Close panel if open mecha_flags |= SILICON_PILOT brain_mob.reset_perspective(src) brain_mob.remote_control = src diff --git a/code/modules/vehicles/mecha/mecha_movement.dm b/code/modules/vehicles/mecha/mecha_movement.dm index 766826e8f5a..a77381fe97a 100644 --- a/code/modules/vehicles/mecha/mecha_movement.dm +++ b/code/modules/vehicles/mecha/mecha_movement.dm @@ -19,6 +19,11 @@ //we can reach it and it's in front of us? grab it! if(ore.Adjacent(src) && ((get_dir(src, ore) & dir) || ore.loc == loc)) ore.forceMove(ore_box) + for(var/obj/item/boulder/boulder in range(1, src)) + //As above, but for boulders + if(boulder.Adjacent(src) && ((get_dir(src, boulder) & dir) || boulder.loc == loc)) + boulder.forceMove(ore_box) + ///Plays the mech step sound effect. Split from movement procs so that other mechs (HONK) can override this one specific part. /obj/vehicle/sealed/mecha/proc/play_stepsound() diff --git a/code/modules/vehicles/mecha/mecha_ui.dm b/code/modules/vehicles/mecha/mecha_ui.dm index 826a746c849..1bf5b8674a4 100644 --- a/code/modules/vehicles/mecha/mecha_ui.dm +++ b/code/modules/vehicles/mecha/mecha_ui.dm @@ -190,7 +190,7 @@ if(userinput == format_text(name)) //default mecha names may have improper span artefacts in their name, so we format the name to_chat(usr, span_notice("You rename [name] to... well, [userinput].")) return - name = userinput + name = "\proper [userinput]" chassis_camera?.update_c_tag(src) if("toggle_safety") set_safety(usr) diff --git a/code/modules/vending/_vending.dm b/code/modules/vending/_vending.dm index bc2f38b2d9f..6d269a7ca22 100644 --- a/code/modules/vending/_vending.dm +++ b/code/modules/vending/_vending.dm @@ -236,6 +236,11 @@ voice = vendor_voice_by_type[type] if(build_inv) //non-constructable vending machine + ///Non-constructible vending machines do not have a refill canister to populate its products list from, + ///Which apparently is still needed in the case we use product categories instead. + if(product_categories) + for(var/list/category as anything in product_categories) + products |= category["products"] build_inventories() slogan_list = splittext(product_slogans, ";") @@ -298,12 +303,10 @@ for(var/obj/item/vending_refill/installed_refill in component_parts) restock(installed_refill) -/obj/machinery/vending/deconstruct(disassembled = TRUE) +/obj/machinery/vending/on_deconstruction(disassembled) if(refill_canister) return ..() - if(!(obj_flags & NO_DECONSTRUCTION)) //the non constructable vendors drop metal instead of a machine frame. - new /obj/item/stack/sheet/iron(loc, 3) - qdel(src) + new /obj/item/stack/sheet/iron(loc, 3) /obj/machinery/vending/update_appearance(updates=ALL) . = ..() @@ -1085,7 +1088,7 @@ replacer.play_rped_sound() return TRUE -/obj/machinery/vending/on_deconstruction() +/obj/machinery/vending/on_deconstruction(disassembled) update_canister() . = ..() @@ -1590,7 +1593,7 @@ if(loaded_item.custom_price) return TRUE -/obj/machinery/vending/custom/ui_interact(mob/user) +/obj/machinery/vending/custom/ui_interact(mob/user, datum/tgui/ui) if(!linked_account) balloon_alert(user, "no registered owner!") return FALSE @@ -1656,14 +1659,13 @@ /obj/machinery/vending/custom/crowbar_act(mob/living/user, obj/item/attack_item) return FALSE -/obj/machinery/vending/custom/deconstruct(disassembled) +/obj/machinery/vending/custom/on_deconstruction(disassembled) unbuckle_all_mobs(TRUE) var/turf/current_turf = get_turf(src) if(current_turf) for(var/obj/item/stored_item in contents) stored_item.forceMove(current_turf) explosion(src, devastation_range = -1, light_impact_range = 3) - return ..() /** * Vends an item to the user. Handles all the logic: diff --git a/code/modules/vending/clothesmate.dm b/code/modules/vending/clothesmate.dm index eeca2422e0c..47276acb259 100644 --- a/code/modules/vending/clothesmate.dm +++ b/code/modules/vending/clothesmate.dm @@ -18,6 +18,7 @@ /obj/item/clothing/mask/bandana = 3, /obj/item/clothing/mask/bandana/striped = 3, /obj/item/clothing/mask/bandana/skull = 3, + /obj/item/clothing/mask/facescarf = 3, /obj/item/clothing/neck/scarf = 6, /obj/item/clothing/neck/large_scarf = 6, /obj/item/clothing/neck/large_scarf/red = 6, @@ -161,6 +162,8 @@ /obj/item/clothing/suit/hooded/ethereal_raincoat = 3, /obj/item/clothing/under/ethereal_tunic = 3, + /obj/item/clothing/mask/kitsune = 3, + /obj/item/clothing/mask/rebellion = 6, /obj/item/clothing/suit/costume/wellworn_shirt/graphic/ian = 1, /obj/item/clothing/suit/costume/irs = 20, /obj/item/clothing/head/costume/irs = 20, diff --git a/code/modules/wiremod/components/bci/hud/bar_overlay.dm b/code/modules/wiremod/components/bci/hud/bar_overlay.dm index 5a1a46f5716..07d13a4ccfb 100644 --- a/code/modules/wiremod/components/bci/hud/bar_overlay.dm +++ b/code/modules/wiremod/components/bci/hud/bar_overlay.dm @@ -58,6 +58,7 @@ /datum/atom_hud/alternate_appearance/basic/one_person, "bar_overlay_[REF(src)]", cool_overlay, + null, owner, ) alt_appearance.show_to(owner) diff --git a/code/modules/wiremod/components/bci/hud/counter_overlay.dm b/code/modules/wiremod/components/bci/hud/counter_overlay.dm index d46c34ab047..a0f83b6f72e 100644 --- a/code/modules/wiremod/components/bci/hud/counter_overlay.dm +++ b/code/modules/wiremod/components/bci/hud/counter_overlay.dm @@ -76,6 +76,7 @@ /datum/atom_hud/alternate_appearance/basic/one_person, "counter_overlay_[REF(src)]", counter, + null, owner, ) alt_appearance.show_to(owner) @@ -101,6 +102,7 @@ /datum/atom_hud/alternate_appearance/basic/one_person, "counter_overlay_[REF(src)]_[i]", number, + null, owner, ) number_alt_appearance.show_to(owner) diff --git a/code/modules/wiremod/components/bci/hud/object_overlay.dm b/code/modules/wiremod/components/bci/hud/object_overlay.dm index ad32a5408cd..07e0f76761e 100644 --- a/code/modules/wiremod/components/bci/hud/object_overlay.dm +++ b/code/modules/wiremod/components/bci/hud/object_overlay.dm @@ -27,8 +27,12 @@ var/datum/port/input/signal_on var/datum/port/input/signal_off + /// Reference to the BCI we're implanted inside var/obj/item/organ/internal/cyberimp/bci/bci + + /// Assoc list of REF to the target atom to the overlay alt appearance it is using var/list/active_overlays = list() + var/list/options_map /obj/item/circuit_component/object_overlay/populate_ports() @@ -42,8 +46,7 @@ image_rotation = add_input_port("Overlay Rotation", PORT_TYPE_NUMBER) /obj/item/circuit_component/object_overlay/Destroy() - for(var/active_overlay in active_overlays) - QDEL_NULL(active_overlay) + QDEL_LIST_ASSOC_VAL(active_overlays) return ..() /obj/item/circuit_component/object_overlay/populate_options() @@ -78,26 +81,24 @@ var/mob/living/owner = bci.owner var/atom/target_atom = target.value - if(!owner || !istype(owner) || !owner.client || !target_atom) + if(!istype(owner) || !owner.client || isnull(target_atom)) return if(COMPONENT_TRIGGERED_BY(signal_on, port)) show_to_owner(target_atom, owner) - if(COMPONENT_TRIGGERED_BY(signal_off, port) && (target_atom in active_overlays)) - var/datum/weakref/overlay_ref = active_overlays[target_atom] - var/datum/atom_hud/overlay = overlay_ref?.resolve() - QDEL_NULL(overlay) - active_overlays.Remove(target_atom) + var/datum/atom_hud/existing_overlay = active_overlays[REF(target_atom)] + if(COMPONENT_TRIGGERED_BY(signal_off, port) && !isnull(existing_overlay)) + qdel(existing_overlay) + active_overlays -= REF(target_atom) /obj/item/circuit_component/object_overlay/proc/show_to_owner(atom/target_atom, mob/living/owner) - if(LAZYLEN(active_overlays) >= OBJECT_OVERLAY_LIMIT) + if(length(active_overlays) >= OBJECT_OVERLAY_LIMIT) return - if(active_overlays[target_atom]) - var/datum/weakref/overlay_ref = active_overlays[target_atom] - var/datum/atom_hud/overlay = overlay_ref?.resolve() - QDEL_NULL(overlay) + var/datum/atom_hud/existing_overlay = active_overlays[REF(target_atom)] + if(!isnull(existing_overlay)) + qdel(existing_overlay) var/image/cool_overlay = image(icon = 'icons/hud/screen_bci.dmi', loc = target_atom, icon_state = options_map[object_overlay_options.value], layer = RIPPLE_LAYER) SET_PLANE_EXPLICIT(cool_overlay, ABOVE_LIGHTING_PLANE, target_atom) @@ -117,19 +118,16 @@ /datum/atom_hud/alternate_appearance/basic/one_person, "object_overlay_[REF(src)]", cool_overlay, + null, owner, ) alt_appearance.show_to(owner) - active_overlays[target_atom] = WEAKREF(alt_appearance) + active_overlays[REF(target_atom)] = alt_appearance /obj/item/circuit_component/object_overlay/proc/on_organ_removed(datum/source, mob/living/carbon/owner) SIGNAL_HANDLER - for(var/atom/target_atom in active_overlays) - var/datum/weakref/overlay_ref = active_overlays[target_atom] - var/datum/atom_hud/overlay = overlay_ref?.resolve() - QDEL_NULL(overlay) - active_overlays.Remove(target_atom) + QDEL_LIST_ASSOC_VAL(active_overlays) #undef OBJECT_OVERLAY_LIMIT diff --git a/code/modules/wiremod/core/component.dm b/code/modules/wiremod/core/component.dm index ebabd211f70..39f33809073 100644 --- a/code/modules/wiremod/core/component.dm +++ b/code/modules/wiremod/core/component.dm @@ -174,6 +174,7 @@ qdel(input_port) if(parent) SStgui.update_uis(parent) + return null //explicitly set the port to null if used like this: `port = remove_input_port(port)` /** * Adds an output port and returns it @@ -203,6 +204,7 @@ qdel(output_port) if(parent) SStgui.update_uis(parent) + return null //explicitly set the port to null if used like this: `port = remove_output_port(port)` /** @@ -340,6 +342,7 @@ if(length(input_ports)) . += create_ui_notice("Power Usage Per Input: [power_usage_per_input]", "orange", "bolt") + /** * Called when a special button is pressed on this component in the UI. * diff --git a/code/modules/wiremod/core/component_printer.dm b/code/modules/wiremod/core/component_printer.dm index 3fb736540ec..7c691e3a4c4 100644 --- a/code/modules/wiremod/core/component_printer.dm +++ b/code/modules/wiremod/core/component_printer.dm @@ -184,8 +184,7 @@ "cost" = cost, "id" = researched_design_id, "categories" = design.category, - "icon" = "[icon_size == size32x32 ? "" : "[icon_size] "][design.id]", - "constructionTime" = -1 + "icon" = "[icon_size == size32x32 ? "" : "[icon_size] "][design.id]" ) data["designs"] = designs diff --git a/code/modules/wiremod/core/marker.dm b/code/modules/wiremod/core/marker.dm index ecd68be413c..50d4324c154 100644 --- a/code/modules/wiremod/core/marker.dm +++ b/code/modules/wiremod/core/marker.dm @@ -32,6 +32,13 @@ if(marked_atom || !user.Adjacent(target) || is_right_clicking) return ..() + if(isliving(target)) + INVOKE_ASYNC(src, PROC_REF(mark_mob_or_contents), user, target) + return TRUE + + mark_target(target) + +/obj/item/multitool/circuit/proc/mark_target(atom/target) say("Marked [target].") marked_atom = target RegisterSignal(marked_atom, COMSIG_QDELETING, PROC_REF(cleanup_marked_atom)) @@ -40,6 +47,51 @@ playsound(src.loc, 'sound/misc/compiler-stage2.ogg', 30, TRUE) return TRUE +/// Allow users to mark items equipped by the target that are visible. +/obj/item/multitool/circuit/proc/mark_mob_or_contents(mob/user, mob/living/target) + var/list/visible_items + var/mob/living/carbon/carbon_target + if(iscarbon(target)) + carbon_target = target + visible_items = carbon_target.get_visible_items() + else + visible_items = target.get_equipped_items() + + visible_items -= src // the multitool cannot mark itself. + + if(!length(visible_items)) + mark_target(target) + return + + var/list/selectable_targets = list() + var/datum/radial_menu_choice/mob_choice = new + mob_choice.image = image(icon = 'icons/hud/radial.dmi', icon_state = "radial_mob") + mob_choice.name = target.name + selectable_targets[REF(target)] = mob_choice + for(var/obj/item/item as anything in visible_items) + var/datum/radial_menu_choice/item_choice = new + + var/mutable_appearance/item_appearance = new(item) + item_appearance.layer = FLOAT_LAYER + item_appearance.plane = FLOAT_PLANE + + item_choice.name = item.name + item_choice.image = item_appearance + selectable_targets[REF(item)] = item_choice + + var/picked_ref = show_radial_menu(user, src, selectable_targets, uniqueid = TRUE, radius = 38, custom_check = CALLBACK(src, PROC_REF(check_menu), user, target), tooltips = TRUE) + if(!picked_ref) + return + + var/atom/movable/chosen = locate(picked_ref) + if(chosen == target || (chosen in (carbon_target ? carbon_target.get_visible_items() : target.get_equipped_items()))) + mark_target(chosen) + else + balloon_alert(user, "cannot mark entity") + +/obj/item/multitool/circuit/proc/check_menu(mob/user, mob/living/target) + return !marked_atom && user.is_holding(src) && user.Adjacent(target) + /obj/item/multitool/circuit/update_overlays() . = ..() cut_overlays() diff --git a/code/modules/wiremod/shell/bot.dm b/code/modules/wiremod/shell/bot.dm index dfd9845bc05..533c654e787 100644 --- a/code/modules/wiremod/shell/bot.dm +++ b/code/modules/wiremod/shell/bot.dm @@ -9,7 +9,7 @@ icon_state = "setup_medium_box" density = FALSE - light_system = MOVABLE_LIGHT + light_system = OVERLAY_LIGHT light_on = FALSE /obj/structure/bot/Initialize(mapload) diff --git a/code/modules/wiremod/shell/brain_computer_interface.dm b/code/modules/wiremod/shell/brain_computer_interface.dm index f41d4fa8bf1..57bb2ed45cb 100644 --- a/code/modules/wiremod/shell/brain_computer_interface.dm +++ b/code/modules/wiremod/shell/brain_computer_interface.dm @@ -283,7 +283,7 @@ . = ..() occupant_typecache = typecacheof(/mob/living/carbon) -/obj/machinery/bci_implanter/on_deconstruction() +/obj/machinery/bci_implanter/on_deconstruction(disassembled) drop_stored_bci() /obj/machinery/bci_implanter/Destroy() diff --git a/code/modules/wiremod/shell/compact_remote.dm b/code/modules/wiremod/shell/compact_remote.dm index 38fdfccf951..3336be06ddb 100644 --- a/code/modules/wiremod/shell/compact_remote.dm +++ b/code/modules/wiremod/shell/compact_remote.dm @@ -11,7 +11,7 @@ worn_icon_state = "electronic" lefthand_file = 'icons/mob/inhands/items/devices_lefthand.dmi' righthand_file = 'icons/mob/inhands/items/devices_righthand.dmi' - light_system = MOVABLE_LIGHT_DIRECTIONAL + light_system = OVERLAY_LIGHT_DIRECTIONAL light_on = FALSE /obj/item/compact_remote/Initialize(mapload) diff --git a/code/modules/wiremod/shell/controller.dm b/code/modules/wiremod/shell/controller.dm index 3092d3315f1..ad03867b89b 100644 --- a/code/modules/wiremod/shell/controller.dm +++ b/code/modules/wiremod/shell/controller.dm @@ -12,7 +12,7 @@ worn_icon_state = "electronic" lefthand_file = 'icons/mob/inhands/items/devices_lefthand.dmi' righthand_file = 'icons/mob/inhands/items/devices_righthand.dmi' - light_system = MOVABLE_LIGHT_DIRECTIONAL + light_system = OVERLAY_LIGHT_DIRECTIONAL light_on = FALSE /obj/item/controller/Initialize(mapload) diff --git a/code/modules/wiremod/shell/dispenser.dm b/code/modules/wiremod/shell/dispenser.dm index 5fa2d2b1a8e..4ea2d03c9d7 100644 --- a/code/modules/wiremod/shell/dispenser.dm +++ b/code/modules/wiremod/shell/dispenser.dm @@ -9,7 +9,7 @@ icon_state = "setup_drone_arms" density = FALSE - light_system = MOVABLE_LIGHT + light_system = OVERLAY_LIGHT light_on = FALSE var/max_weight = WEIGHT_CLASS_NORMAL diff --git a/code/modules/wiremod/shell/drone.dm b/code/modules/wiremod/shell/drone.dm index 6f7afcfea04..96fe3b2fa0a 100644 --- a/code/modules/wiremod/shell/drone.dm +++ b/code/modules/wiremod/shell/drone.dm @@ -10,7 +10,7 @@ maxHealth = 300 health = 300 living_flags = 0 - light_system = MOVABLE_LIGHT_DIRECTIONAL + light_system = OVERLAY_LIGHT_DIRECTIONAL light_on = FALSE /mob/living/circuit_drone/Initialize(mapload) diff --git a/code/modules/wiremod/shell/gun.dm b/code/modules/wiremod/shell/gun.dm index e9176d8c6ca..3a37501e8e1 100644 --- a/code/modules/wiremod/shell/gun.dm +++ b/code/modules/wiremod/shell/gun.dm @@ -11,7 +11,7 @@ ammo_type = list(/obj/item/ammo_casing/energy/wiremod_gun) cell_type = /obj/item/stock_parts/cell/emproof/wiremod_gun item_flags = NONE - light_system = MOVABLE_LIGHT_DIRECTIONAL + light_system = OVERLAY_LIGHT_DIRECTIONAL light_on = FALSE automatic_charge_overlays = FALSE trigger_guard = TRIGGER_GUARD_ALLOW_ALL diff --git a/code/modules/wiremod/shell/keyboard.dm b/code/modules/wiremod/shell/keyboard.dm index 05b9ded074b..0b28959aa9c 100644 --- a/code/modules/wiremod/shell/keyboard.dm +++ b/code/modules/wiremod/shell/keyboard.dm @@ -6,7 +6,7 @@ worn_icon_state = "electronic" lefthand_file = 'icons/mob/inhands/items/devices_lefthand.dmi' righthand_file = 'icons/mob/inhands/items/devices_righthand.dmi' - light_system = MOVABLE_LIGHT_DIRECTIONAL + light_system = OVERLAY_LIGHT_DIRECTIONAL light_on = FALSE /obj/item/keyboard_shell/Initialize(mapload) diff --git a/code/modules/wiremod/shell/moneybot.dm b/code/modules/wiremod/shell/moneybot.dm index 20eb596eb72..cacb457149d 100644 --- a/code/modules/wiremod/shell/moneybot.dm +++ b/code/modules/wiremod/shell/moneybot.dm @@ -9,7 +9,7 @@ icon_state = "setup_large" density = FALSE - light_system = MOVABLE_LIGHT + light_system = OVERLAY_LIGHT light_on = FALSE var/stored_money = 0 diff --git a/code/modules/wiremod/shell/scanner.dm b/code/modules/wiremod/shell/scanner.dm index 3012fe65e49..c88d7b1fb5f 100644 --- a/code/modules/wiremod/shell/scanner.dm +++ b/code/modules/wiremod/shell/scanner.dm @@ -11,7 +11,7 @@ worn_icon_state = "electronic" lefthand_file = 'icons/mob/inhands/items/devices_lefthand.dmi' righthand_file = 'icons/mob/inhands/items/devices_righthand.dmi' - light_system = MOVABLE_LIGHT_DIRECTIONAL + light_system = OVERLAY_LIGHT_DIRECTIONAL light_on = FALSE /obj/item/wiremod_scanner/Initialize(mapload) diff --git a/code/modules/wiremod/shell/server.dm b/code/modules/wiremod/shell/server.dm index fc71bfaa265..24501797197 100644 --- a/code/modules/wiremod/shell/server.dm +++ b/code/modules/wiremod/shell/server.dm @@ -10,7 +10,7 @@ icon_state = "setup_stationary" density = TRUE - light_system = MOVABLE_LIGHT + light_system = OVERLAY_LIGHT light_on = FALSE /obj/structure/server/Initialize(mapload) diff --git a/config/awaymissionconfig.txt b/config/awaymissionconfig.txt index 7278655a39b..15d6b0ac718 100644 --- a/config/awaymissionconfig.txt +++ b/config/awaymissionconfig.txt @@ -7,13 +7,11 @@ #Do NOT tick the maps during compile -- the game uses this list to decide which map to load. Ticking the maps will result in them ALL being loaded at once. #DO tick the associated code file for the away mission you are enabling. Otherwise, the map will be trying to reference objects which do not exist, which will cause runtime errors! -#_maps/RandomZLevels/blackmarketpackers.dmm #_maps/RandomZLevels/TheBeach.dmm -#_maps/RandomZLevels/centcomAway.dmm #_maps/RandomZLevels/moonoutpost19.dmm #_maps/RandomZLevels/undergroundoutpost45.dmm #_maps/RandomZLevels/caves.dmm #_maps/RandomZLevels/snowdin.dmm #_maps/RandomZLevels/research.dmm #_maps/RandomZLevels/SnowCabin.dmm -#_maps/RandomZLevels/blackmesa.dmm +#_maps/RandomZLevels/museum.dmm diff --git a/config/config.txt b/config/config.txt index 28889c89dbf..687bb9916dc 100644 --- a/config/config.txt +++ b/config/config.txt @@ -545,9 +545,9 @@ URGENT_AHELP_COOLDOWN 300 MOTD motd.txt #MOTD motd_extra.txt -## Assets can opt-in to caching their results into `tmp`. +## Assets can opt-in to caching their results into `cache/`. ## This is important, as preferences assets take upwards of 30 seconds (without sleeps) to collect. -## The cache is assumed to be cleared by TGS recompiling, which deletes `tmp`. +## The cache is assumed to be cleared by TGS recompiling, which deletes `cache/`. ## This should be disabled (through `CACHE_ASSETS 0`) on development, ## but enabled on production (the default). CACHE_ASSETS 0 diff --git a/dependencies.sh b/dependencies.sh index b0d457a9424..04e1fb62404 100644 --- a/dependencies.sh +++ b/dependencies.sh @@ -5,10 +5,10 @@ # byond version export BYOND_MAJOR=515 -export BYOND_MINOR=1626 +export BYOND_MINOR=1630 #rust_g git tag -export RUST_G_VERSION=3.0.0 +export RUST_G_VERSION=3.1.0 #node version export NODE_VERSION=14 diff --git a/html/changelogs/AutoChangeLog-pr-1556.yml b/html/changelogs/AutoChangeLog-pr-1556.yml new file mode 100644 index 00000000000..26590e5c5f0 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-1556.yml @@ -0,0 +1,6 @@ +author: "Mothblocks" +delete-after: True +changes: + - balance: "Instead of too much damage to the head beheading someone, it\nwill now split their skull in half. While their skull is open, you can\nrip out their eyes with your hands. and they will spill their brain out\nof their head if they slip." + - balance: "The Path of Blades ascension will accept either a beheaded\nperson, or someone with their skull split open." + - rscdel: "Removed the beheading objectives from traitor." \ No newline at end of file diff --git a/html/changelogs/archive/2024-01.yml b/html/changelogs/archive/2024-01.yml index 26d5e07507b..0b06e1b4bdd 100644 --- a/html/changelogs/archive/2024-01.yml +++ b/html/changelogs/archive/2024-01.yml @@ -609,3 +609,603 @@ any extra damage with their kicks. zxaber: - bugfix: Borg tools that hold and use specific items now work correctly again. +2024-01-17: + Ben10Omintrix: + - bugfix: fix bileworm ai going insane after eating someone + JohnFulpWillard: + - qol: Using a Lawyer badge in your hand now shows a thought bubble with the badge, + rather than giving a lousy message in your chat. + OrionTheFox: + - rscadd: Added a long-sleeve greyscale undershirt, and moved the Lizared Top to + be a Bra, along with a few other small tweaks - double-check your worn underwear! + - image: Updated some out of date underwear sprites to match TG's new resprite + aKromatopzia: + - rscadd: digitigrade cybernetics + - image: sprites for digitigrade cybernetics +2024-01-18: + 00-Steven: + - bugfix: Immobile shells no longer work regardless of anchor state if you put the + circuit in while it's unanchored. + - bugfix: Immobile shells properly propagate their on/off state after wrenching + to inner modules. + - image: Resprited several fishes, and the aquarium. + - bugfix: Bystanders will no longer think they've pulled out a victim's eyes after + seeing someone else do it. + - qol: They will also be able to tell when someone starts pulling out a victim's + eyes. + - refactor: Refactored Ore Silo Ui. + - bugfix: Autolathes no longer allow you to duplicate materials at higher levels + of stock parts + - qol: Autolathes now show name instead of typepath when selecting a custom material + - qol: Autolathe now print out items one by one instead of waiting for all of them + to print at once + - bugfix: Signers no longer use the wrong verb when speaking directly into a radio + for the first message after toggling sign language. + - refactor: Moved the updating of verb variables into a new method which is called + earlier in living's say, which should avoid this happening for other things + which updated their verbs the same way. + 13spacemen: + - code_imp: Hub status shows if server is restarting, starting, time to start. The + "Time" is more accurate and based on roundstart now + Ghommie: + - rscadd: Most fishing rods come with a hook and line preinstalled. Fishing toolboxes + come with separate reel and lines as usual. + - balance: Fishing hooks are now required to fish. + - balance: Without a reel line, the range of fishing rods is reduced by two tiles. + Conversely, having one installed gives a mild buff to the minigame completion + speed. + - balance: The craftable sinewy reel line can now be used to fish on lava or liquid + plasma, but it's a bit harder to use. + - balance: The rare-to-find-in-maintenance master fishing rod now comes with a flexible + line and weighted hook preinstalled, and has better range than other rods. + - balance: Fishing reel lines are now small enough to fit pockets. + - rscadd: The rescue and jawed hook can now snag and reel in mobs, not only items. + The jawed hook also slows down when applied, a la beartrap. + - qol: Fish bounties now accept filled (stasis) fish cases. + - qol: Several balloon alerts for fishing rod interactions. + - bugfix: Reeling in items (and mobs) now respects movement resistance and anchorage. + - bugfix: Fixed the fishing rod equipment UI being too small to fit its components. + - sound: Reeling in something now plays a sound. + - image: Resprited several fishes, and the aquarium. + JohnFulpWillard: + - refactor: Implant pads now use TGUI + - refactor: Ice cream vats now use a radial menu instead of an HTML one. + Time-Green: + - bugfix: Radiation shelters (wherever they are) will protect against nebula storms + Voudez: + - qol: Players are now able to see in chat when they are being hit by obj/machinery, + got crushed into dense turf or get hit by thrown non carbon mob. + - admin: Scenarios like mob hits dense turf, obj/machinery hits mob, item without + "living thrower" hitting mob, mob gets hit by thrown non carbon mob now appear + in logs. + ZephyrTFA: + - bugfix: Autolathes no longer allow you to duplicate materials at higher levels + of stock parts + - qol: Autolathes now show name instead of typepath when selecting a custom material + - qol: Autolathe now print out items one by one instead of waiting for all of them + to print at once + aKromatopzia: + - rscadd: Teshari cybernetics + - image: sprites for teshari cybernetics + honkpocket: + - bugfix: Removes unintended structures cluttering in Blueshift's space + - rscadd: Markus the cargo dog no longer takes disposal-chute damage thanks to his + diet + intercepti0n: + - refactor: Refactored Ore Silo Ui. + mc-oofert: + - image: the plumbing chemical splitter no longer has a wrongly rotated direction + - code_imp: slightly cleans up dance machine code + - bugfix: disco dances are less comparable to having a seizure + nikothedude: + - rscadd: Interdyne botany now has separating windoors + sqnztb: + - bugfix: void raptor's chemistry now is properly wired + tf4, orion: + - rscadd: Added cow print underwear. + the-orange-cow: + - bugfix: Lock heretics may once again access 'the relentless heartbeat' after purchasing + 'burglars fineness'. + vinylspiders: + - code_imp: removed a dupe trait entry in the traits_by_type list + - code_imp: removed the timeout_mod arg from add_mood_event, which was only used + for one thing and causes more issues than it's worth +2024-01-20: + 13spacemen: + - bugfix: Hub time should be correct again + Ben10Omintrix: + - bugfix: fix a runtime when loading ghosts to a mulebot + Ghommie: + - image: The "One Lean, Mean, Cleaning Machine" achievement now has its own icon. + Paxilmaniac: + - balance: Ore thumpers require twice as much power (50 kW), take twice as long + to make ore, and can have half as many ores around them before they stop producing. + - qol: Ore thumpers now relay more information to the player about themselves, making + them easier to set up and maintain. + nikothedude: + - bugfix: Synth burn wounds now apply scars + - spellcheck: Certain synth wounds have been rewritten +2024-01-21: + Absolucy: + - bugfix: Tool arm implant hotkeys will properly work even after you change your + arm/species now. + Ben10Omintrix: + - bugfix: fixes megafauna AI getting stuck attacking some corpses + Ghommie: + - rscadd: Modular Computers now support integrated circuits. What can be done with + them depends on the programs installed and whether they're running (open or + background). + - rscadd: Modular Consoles (the machinery) now have a small backup cell they draw + power from if the power goes out. + - image: The honkbot now looks up to date. + - bugfix: fixed some visual artifacts from achievement icons. + Iajret: + - bugfix: Fixed Gladiator arena, NRI Starship and Babylon Station not spawning. + JohnFulpWillard: + - bugfix: Prototype emitters now work. + - bugfix: Prototype emitters don't go invisible if screwdriver'd open. + - bugfix: Emitters no longer show up as their panel being closed when it is open. + LemonInTheDark: + - bugfix: The map saving tool will no longer lock up and prevent all further action + at random + - bugfix: Map saving now takes on the order of seconds, not minutes + - bugfix: Fixes an issue with lists that caused strongdmm to report saved maps as + broken + Majkl-J: + - bugfix: Borgs now use the hug module to substitute for hands, allowing them to + finish previously unfinishable surgeries + Melbert: + - bugfix: Items and mobs no longer hide behind big runes (heretic, cult, wizard) + Momo8289, Pepsilawn, Sinsinins, JohnFulpWillard, Diamond-74: + - bugfix: Clown ops now get a code set for their nuke. + - bugfix: Monkeys don't get stuck on obstacles as often. + Paxilmaniac: + - rscadd: sol emt and peacekeeper outfits have been added to the loadout under jumpsuits + - bugfix: Gun racks no longer shift wide guns too far to the right + - image: Gun racks have been resprited to not be so old + - refactor: Code around weapon racks and armory gun spawners have been refactored. + The biggest note is that gun rotation on gunracks isn't handled by guns themselves + anymore, instead being on the rack. + Rex9001: + - bugfix: Lunatics spawned from moon ascension now actually have an objective to + assist their ringleader + - bugfix: Lunatics now get a moonlight amulette on the ground if they have full + hands + Rhials: + - spellcheck: Modifies some existing Emergency Shuttle prerequisite messages, and + adds some missing ones. + Time-Green: + - rscadd: Adds a geared assistant station trait! Spawn with a skateboard, toolbelt + or in your favorite bee suit! + - code_imp: Moves assistant code around + YehnBeep: + - bugfix: Blueshift Science and Engineering now have some missing tools and equipment + for better parity with other maps. + - bugfix: Icebox perma's cytology lab is now useable without outside repairs. + Zergspower: + - bugfix: fixes whispering formatting + carshalash: + - bugfix: Nanotrasen is now stocking proper french Cognac instead of discount Irish + Cognac. It will now taste Smooth and French + lizardqueenlexi: + - bugfix: Wagging tail spines now sync up properly with the tails they're attached + to. + - bugfix: Filled trash bags show up properly when worn. + mc-oofert: + - bugfix: cyborg inducer respects cell changes + nikothedude: + - bugfix: Interdyne's ambience is now isolated to interdyne + - rscdel: Interdyne's main musical track is gone + - spellcheck: The akula plural form is now akulae + - rscadd: Borgs can now right click hats and themselves to put on hats or take them + off, respectively + - rscadd: Borgs can now spawn with hats from the loadout + - balance: Coagulants now work on electrical damage + - rscadd: Dinitrogen Plasmide, a chem used to cool synthetic burns. Does not have + the side effects of hercuri, making it safer to use. + sergeirocks100: + - bugfix: The "Panties" option in the underwear menu no longer changes itself to + something else. + vinylspiders: + - bugfix: fixes ammo counter hud being in the wrong position on the screen, fixes + an ammo counter related hard del + - code_imp: cleans up a bunch of unused ui related defines + yooriss: + - balance: Hemophages are now properly disgusted and suffer a 5 minute mood debuff + by consuming blood from monkey-adjacent sources, and also find synthetic blood + slightly gross while digesting it. + - balance: When hemophages drink blood from another player character with an active + mind, they receive a small mood boost for 5 minutes. + - balance: The bonus blood hemophages receive from draining from sentient mobs has + been reduced to 15% from 50%. + - rscadd: The messaging for both the hemophage and the victim during blood draining + is now much more informative. +2024-01-24: + 00-Steven: + - sound: APCs actually play the tool sound when exposing their wires. + A.C.M.O.: + - rscadd: Added the forked cybernetic tongue to Augments+. + - rscadd: Added the robotic lizard voicebox to Augments+ and the RoboDrobe vendor. + ArcaneMusic: + - bugfix: The smelter and refinery now properly hold mining points, only taking + a small amount out of net gained points. + FernandoJ8: + - bugfix: the blur effects for hallucinogenic withdrawal and psychic projection + are now properly centered on the screen + Ghommie: + - bugfix: Goldgrubs should no longer spit out things that aren't ore (e.g. stasised + mobs from the polymorph belt). + Hatterhat: + - image: Proto-kinetic glaive sprites have been tweaked to be less... something. + I don't know, but they look better to me and I'm the only one poking at them, + so. + JohnFulpWillard: + - bugfix: Moved the curator's treasure hunter fedora up by a single pixel. + - bugfix: pAIs downloaded while in a PDA now gets the action button to control said + PDA. + - bugfix: pAI cards can now be ejected from a PDA when there is no pAI inhabiting + it. + - bugfix: Contractor support units now don't have flavortext telling them they work + for someone else but their agent. + - bugfix: Contractor support units now comes in an antag spawner (like syndicate + monkey, nukie borgs/reinforcements). + - bugfix: Syndicate monkeys now get their monkey antag datum. + LT3: + - bugfix: Server announcements again no longer escape HTML by default + - bugfix: You can no longer interact with medical beds while incapacitated + Lutowski: + - rscadd: Fluffier than ever before, moths can now have hair & facial hair. + Melbert: + - bugfix: Replacing a limb fully claimed by an infested burn wound now properly + grants you control of the limb back + - bugfix: Losing control of a limb now sounds less weird in chat + Nerev4r: + - image: Snails have been resprited, as well as the ivory versions of their shells + to allow for more accurate recoloring. + Nerev4r, Vol: + - rscadd: A new jacket option for Security has appeared in the loadout and their + vendors. + Orion_the_Fox, Halcyon: + - image: updated the Crop Top Turtleneck sprite, including adding a Teshari-compatible + version! + - balance: removed on-the-fly recoloring, BUT now the turtleneck can carry some + basic items and warms you up a bit! ... as much as a croptop really can, I guess. + Paxilmaniac: + - image: A single missing frame from the prefab shutter closing animation has been + re-placed, meaning they wont vanish for 1/10 of a second whenever closing + - bugfix: Plastic wall panels, as well as prefab floor tiles have been fixed to + not eat way more materials than they should be + - rscdel: The milsim domain's one clf3 grenade is gone + - balance: The equipment that the bitrunners get in the milsim domain has been changed, + mostly to use the new-ish solfed gear rather than HECU stuff + - bugfix: The wylom in the milsim domain on the bitrunner side has been given its + actual magazines around it, rather than lanca magazines + - rscadd: Hunter shotgun slugs can now mine mineral walls, shotgun mining time baby. + - bugfix: Hunter slugs and .60 AMR ammo will now properly do extra damage to the + biotypes they are strong against. + - bugfix: Tabletop griddles can now actually be printed again + - bugfix: the stirling generator can now actually be printed + - rscadd: Cargo, and the rapid construction fabricator, are now hosts to a new source + of power. The stirling generator, operating something like the old TEG, creates + power from large differences in temperature. Handy! + - rscadd: A variety of special kitchen machines have been created for the rapid + construction fabricator. While they might not perform *too* much different from + their standard counterparts, they are easier to move around and can be printed + whole. + - rscadd: Three new crates have been added to cargo, each one featuring a bundle + of frontier equipment. In the service tab, kits for frontier kitchens and botany + chemical synthesizers can be found. In the engineering tab, the colony starter + kit can be found. + - qol: Many flatpack machines that were needlessly large have been made normal sized, + meaning they fit inside of backpacks now! + - bugfix: A large number of flatpack machines that were missing custom materials + now have them, meaning they can now be recycled as well. + - image: New sprites for all the new machines and whatnot made by me + - spellcheck: Every instance of Flat-packed has been changed to Flat-Packed where + appropriate + SyncIt21: + - bugfix: reactions that create multiple reagents now terminate without looping + endlessly. + - bugfix: oatmeal reactions now terminate & produce the right quantity of results + but without milk. + - bugfix: fixes runtime when mineral scanning, passes right argument for scanner + in golem eyes + Zergspower: + - code_imp: added an override file for pirate event spawns + - rscdel: Interdyne Pirates no longer can roll as a pirate antag + lizardqueenlexi: + - bugfix: Feature manipulation surgery will now properly update the patient's appearance. + - refactor: The tail portion of lizard spines will no longer draw on people who + do not have a tail. + nikothedude: + - bugfix: Synth wound oscillations will no longer cause you to reel from impacts + if there were no impacts + - balance: Synth blunt wounds are now faster to treat + - balance: Wirecutters on electrical damage have been streamlined and are always + fix 4x more than suturing + - balance: Synth wound oscillations now have a minimum of 3 seconds between each + oscillation + - spellcheck: Fixed a typo in systemic fault's examine text + scriptis: + - spellcheck: iron sheets's what? + vinylspiders: + - bugfix: fixed ammo counter hud not updating for self-recharging energy weapons + - bugfix: fixes features not updating when changing character slots + - bugfix: synthliz tail can have spines again + - bugfix: fixes a spurious CI failure from do_charge() signal overrides + yooriss: + - rscadd: A bunch of new stuff has been added to the loadout tab, such as civil + defense & frontier medkits, a ton of Kahraman frontier clothing, wheely-heels + and in-hand empty gun cases! MODlink scryers are also now available as a pocket + slot option too, so you can video-call your friends with a scarf. + - bugfix: Holobadges are now accessible from both the neck and accessory loadout + slots (since they fit in both). + - bugfix: Prisoners joining a round now properly have their implants removed as + intended. + - bugfix: Custom say emotes now properly apply lowercase at the start where appropriate + and also trim excess whitespace. Cleaner and easier for everyone! + - rscadd: 'A new variant of the DeForest civil defense medical kit is now available: + the civil defense symptom support kit. Loaded with three pens of psifinil and + a bottle of alifil, this little thing''ll fit in your pocket and give your characters + guaranteed relief from sleepiness, stuttering and sickliness. Some side effects + may occur. Consult your doctor before use. This new kit is available cheaply + from cargo and from medical''s departmental orders, too.' + - balance: People with the Spacer or Narcolepsy quirks now start with a civil defense + symptom support kit. Spacers no longer start with a bottle of atrociously, unbelievably + useless ondansetron patches. + - bugfix: Loadout holobadges are now considered accessory category only, meaning + they can be paired up with neck slot loadout items without occupying both slots. + Wear a scarf and a holobadge together! + - bugfix: Anti-gravity harnesses now properly apply various interactions with the + Spacer quirk. + - bugfix: Players now receive a visible status effect alert when benefitting from + the gravity wellness buff given by the Spacer quirk. +2024-01-25: + ArcaneMusic: + - refactor: Stock market events are now their own objects, and are handled by the + stock market individually. +2024-01-27: + 1393F: + - bugfix: Blueshift had some fake belts in EVA and gateway, they have been replaced + with real toolbelts + 13spacemen: + - bugfix: The hub time should be accurate for servers with different timezones + Ben10Omintrix: + - refactor: airlock controllers now use tgui + Ghommie: + - rscadd: Shields (and pillows) can be used to shove people around the same way + barehanded right-clicking does. Xenos and borgs can actually be moved this way. + - rscadd: Added a new MODsuit module, the bulwark module, which prevents knockdown + and staggering from shoving, and getting pushed away by thrown objects. Inbuilt + for the safeguard MODsuit, but one might also it in the black market. + - refactor: Disarming has been refactored. You can now shove simple critters onto + tables and into bins and closets + - balance: Shields now take their own armor values and the armor penetration of + the attack they blocked when damaged. This means shields are a bit sturdier + now. + - balance: Riot shields can tank a lot more damage against melee weapons, but less + against bullets. + - qol: strobe shields can now be used to bash people while combat mode is on. + Isratosh: + - bugfix: Missing fire alarms added to several rooms on Birdshot + - bugfix: Kidnapping traitor objective now properly returns the victim to the station + with their items + JohnFulpWillard: + - bugfix: The library console's category search box now displays the category being + searched. + - refactor: Newspapers now use TGUI. + - bugfix: Fixed the newscaster's wanted section showing a non-existent photo. + JohnFulpWillard, Unit2E teaching me the TEG: + - bugfix: The TEG now works again (still unobtainable by regular means though). + - bugfix: the TEG and its circulators can now be rotated counterclockwise again. + - refactor: The TEG now uses a TGUI interface rather than the old HTML one. + LT3: + - bugfix: Fixed alignment of RPG titles + LemonInTheDark: + - bugfix: Icebox will no longer spawn a fuck ton of plasma after gibonite blows. + YW besties + Melbert: + - bugfix: Click CD applies to looking up and down correctly. + - bugfix: Fixed AIs who shunt to APCs causing their laws to be deleted. + - bugfix: You can no longer neck snap anyone with martial arts assuming you've got + someone in a tight grip. + OrionTheFox: + - image: the T-Ray Scanner, Geiger Counter, and Gas Analyzer have been resprited + (by TG)! + Paxilmaniac: + - balance: The times that many colony lathe designs take to print have been changed + to better reflect what the resulting items are + - bugfix: Ration printers are no longer pixel shifted way too high up + - qol: All of the colony lathe appliances that printed as full machines that then + got randomly pixel shifted now print as just the items that deploy them. + SyncIt21: + - qol: 'adds more examines, screentips & balloon alerts for cryo actions, + + cryo can be pried open with a crowbar when there is no power to free + + someone trapped inside' + - qol: 'cryo auto turns on immediately without a 2 second delay & without + + needing auto eject mode on' + - bugfix: 'ejecting beaker from cryotube will put it in the players hand & not + + drop it on the floor' + - bugfix: 'mobs & other stuff now render on top of cryo tubes and not bottom + + of it' + - bugfix: 'cryo checks for if the mob is on the same turf as cryo is now + + fixed, i.e. you can no longer close the machine on yourself' + - code_imp: 'removed unused vars from cryo, autodocs vars, removed unused + + `transfer_amounts` from some chem machinery ui' + - refactor: 'removed unused icon states for cryo tube, cryo no longer + + processes round start and it''s UI is now typescript' + - bugfix: items that contain recursive contents inside them (like foam dart boxes + from autolathes) now have their custom materials set to match with its design + cost rather than being nullified, meaning they are now recyclable. + - code_imp: all custom materials are now integer values. Improved code for how materials + are used in techfab & auto lathe for printing + - qol: added more screen tips & examines for ore silo, made UI wider, attach location + name to each machine & grey out paused machines to make it more noticeable. + - code_imp: auto docs proc & vars for silo log entry. Fixed return values of all + tool acts + - bugfix: ore silo UI now functions correctly after removing an entry from the UI + - bugfix: no runtimes when connecting a machine to silo that was previously disconnected + via the ore silo UI + cherdaq: + - rscadd: Added a longer gloomier hair option. + intercepti0n: + - refactor: Refactored Ore Processing Unit UI. + - bugfix: Ore Processing Unit UI no longer lags client. + vinylspiders: + - bugfix: fixes a hard del with decals + yooriss: + - balance: The Night Vision quirk is now slightly stronger by default, allows you + to choose a colour determine the hue of the darkness overlay, and becomes 75% + more potent for each level of eye sensitivity you have. Individuals with hypersensitive + eyes can see almost as well in the dark as Ashwalkers and Icecats can! + - rscadd: The Photophobia quirk can now have its severity chosen as a character + preference option, allowing any character to gain hypersensitive eyes if they're + willing to deal with the consequences. + - rscadd: The Cybernetic Limb Mounts quirk is now available, allowing organic characters + with robotic limbs to freely remove them and reattach other robotic limbs at + will if the limb in question isn't wounded. Humanoid synthetics can take the + quirk to allow themselves to remove their own limbs without the need for exterior + coaxing. +2024-01-30: + 00-Steven: + - spellcheck: You no longer fail to find "a anything" when swabbing something for + cytology that doesn't have swabbing results. + - bugfix: Blobs sitting on APCs no longer break them when already broken, and so + no longer spam the power down noise. + - bugfix: Cats can be swabbed for feliform cells again. + - sound: Cats have had their mastery of silent walking revoked, and have their pitter-pattering + footsteps back again. + - bugfix: Jerry Tramstation can get laid again! (Fixed cat breeding.) + - bugfix: Removed kitten omniscience. (They stop pointing at you now.) + - bugfix: Rootbread soup now uses poached egg (egg reagents in soup pot) instead + of raw unpeeled egg (which would break into reagents upon coming into contact + with the soup pot) and is thus craftable again. + 13spacemen: + - refactor: Husk icons are now dynamically generated. See if you can identify what + species it was! + ArcaneMusic: + - rscdel: The lathe tax on printing items has been removed from the game for both + humans and silicons. + Archemagus: + - rscadd: Fines will now automatically be changed to crime warrants if unpaid + Ben10Omintrix: + - bugfix: fixes a runtime that sometimes happens in ai controllers + DaCoolBoss: + - spellcheck: typos fixed in the fireproof clothing religious rite + Ghommie: + - image: Resprited the goldfish and lanternfish as well. + - image: Added an icon to the "My Watchlist Status is Not Important" achievement. + Hatterhat: + - bugfix: Retracting your MODsuit with an ash accretion module enabled disables + the benefits from the module. + - balance: The mining MODsuit, with full ash, negates its own slowdown and has 60 + melee armor, comparable to the explorer suit. + - balance: The Nakamura MODs import company no longer has ash accretion modules + in stock. + - code_imp: Moved some overrides to the master files folder, instead of being in... + the company imports folder. + Iajret: + - bugfix: Ore Thumpers can now be placed on Tarkon asteroid + Inari-Whitebear: + - bugfix: Bone daggers and shivs are now longer electrically conductive + Krypandenej: + - bugfix: pesto pizza (cooked) is no longer raw, and cilbir is meat instead of fruit + LT3: + - bugfix: Emergency shuttle console now only works while on the emergency shuttle + - bugfix: Tramstation external atmos ports are now properly connected + Melbert: + - bugfix: You can build on some niche tables again, such as the Wabbajack Altar. + - bugfix: Wizarditis Timestop now has the desired effect. + - admin: Admins can now VV Timestop to make the caster not immune to their own Timestop. + If they really wanted. + - bugfix: Rush Gland now triggers correctly on being grabbed by a Goliath + MortoSasye: + - code_imp: The amount of slots for hearthkin (primitive demihumans) was changed + to 12 from 9. + Nerev4r: + - rscadd: To cope with a number of recent audio and recording issues and to provide + structural stability and insulation, mechanists across the Orion Spur have began + installing their client's auditory sensors and microphones in their chests, + rather than their heads. + - bugfix: Mechanists have also began switching to a more refined spraypainting process, + to allow a wider variety of designs for prosthetic limbs. + Profakos: + - bugfix: The construction console drone becomes visible again while its in use + Rhials: + - bugfix: The encrypted bitrunner cache is now impervious to most conventional means + of destruction. + SyncIt21: + - bugfix: sets minimum volume of reagent allowed to exist inside anything to 0.01 + therefore allowing plumbing iv drip small transfer rates to occur without reagents + disappearing. + - spellcheck: shortened description for the PCM and capitalized some text for its + examines. + - code_imp: adds sanity checks and removed deprecated `content` tag from PCM UI. + Stops hologram items from being inserted. + - bugfix: auto lathes don't hog local apc supply when printing items + - refactor: chemical reaction tester in runtime station has been remastered from + ground up. + Whoneedspacee: + - refactor: Legions abilities have been changed into actions that can be added to + any mob. + distributivgesetz: + - bugfix: Ambient loops will now refresh when entering a mob. + honkpocket: + - balance: The forge weapons all gained +5 force, except the axe which became significantly + smaller + - balance: The forge dagger can be thrown effectively + - balance: The forge hammer needs two empty hands to be held + - balance: The forge katana gained some blockchance + - balance: The crusader-belt can now fit the forge katana, bokken, and dagger as + well as the forge sword + intercepti0n: + - refactor: 'Refactored Telecommunications Monitoring Console UI: added search bar, + made UI more compact.' + jjpark-kb: + - code_imp: added the code that allows the image overlays to work for the circulator + (teg) + - image: changed circulator's (teg) fast/slow turbine sprite + - image: added an anchor, panel, and flow overlay for the circulator (teg) + rageguy505: + - bugfix: ' The buttons for flashers on birdshot/tramstation now work' + sqnztb: + - bugfix: removed a few unintended cafe interactions + - qol: now anyone can hang in the vox box's nitrogen atmosphere. + - qol: all ds-2 and interdyne operatives now have a NIF box in their backpacks +2024-01-31: + Jacquerel: + - bugfix: Cult pylons will no longer cover up "open space" (or water) with cult + floors + LT3: + - bugfix: Tram power consumption will no longer will randomly drain APCs + - bugfix: Tram power moved to area based rectifiers + - bugfix: ID card examine text shows how to set your linked bank account + - bugfix: ID card withdrawal from an unassigned account will ask if you want to + link an account + Melbert: + - bugfix: Fixed ore vent descriptions looking weird sometimes + - bugfix: Fixed being able to scan an ore vent multiple times at once + - bugfix: Fixed gaining scan points from scannning an ore vent without finishing + the scan + OrionTheFox: + - rscdel: Removed unused "Peacekeeper Belt" and put the remaining "Peacekeeper Webbing" + in-line with TG Sec Webbing + - image: updated the icon used for the "Slim" variant of sec belts (now called "Basic") + Paxilmaniac: + - rscadd: Four new implants have been added to either company imports in deforest + medical, or in combat implants research for free from robotics. + - image: Sprites for everything for the new implants done by me. + SapphicOverload: + - bugfix: Mk-II Ripley exosuits are spaceproof again. + - bugfix: Converted mechs now have their lights on if they did before the conversion. + distributivgesetz: + - bugfix: All Within Theoretical Limits should properly unlock now when the crystal + comes back from the countdown. diff --git a/html/changelogs/archive/2024-02.yml b/html/changelogs/archive/2024-02.yml new file mode 100644 index 00000000000..c9849b35ce9 --- /dev/null +++ b/html/changelogs/archive/2024-02.yml @@ -0,0 +1,779 @@ +2024-02-05: + ReezeBL: + - balance: deforest cyber implants are bought from restricted consoles + - balance: deforest cyber deck is bought from contraband access and requires illegal + tech to craft. +2024-02-06: + 00-Steven: + - bugfix: Robotic voicebox actually lets you speak any language again (as long as + you know it). + CliffracerX: + - image: NT now supplies camo shorts appropriate for non-woodland environments! + - refactor: shorts & pants no longer use nonmodular edits, as a gift to your local + maintainers + Donglesplonge: + - bugfix: the top and top righthand doors of northstars cargo mail sorting room + now use any supply general, mining, and bitden access, and the top righthand + door no longer says its mining decontamination and uses the proper mail sorting + room airlock instead. + FernandoJ8: + - sound: The Guide to Advanced Mimery book series now only make a very faint noise + when turning their pages, in order to match their description + Hatterhat: + - rscadd: Drifting contractors now get their own bank account, and exploitables + access. + - balance: The contractor MODsuit now has no slowdown when deactivated to facilitate + use of its integrated chameleon module. + - balance: The contractor MODsuit's 0-complexity chameleon module is now unremovable. + - balance: The contractor MODsuit now has slowdown when activated, and its armor + booster has been made consistent (it now reduces slowdown instead of adding + it, when toggled on). + - bugfix: Ghostrole bank accounts no longer steal money from the station civilian + account. + Higgin: + - bugfix: fixes contractor abduction RRing people in the offmap hideout without + any feedback. You might not like how it turns out, but your body will get back + to the station now. + - qol: portable air pumps, scrubbers, heaters, canisters, liquid tanks, and racks + are now climbable. + Jacquerel: + - rscadd: Reading a newspaper will conceal your identity. + - bugfix: Making a mob sentient no longer gives you all of their factions. + JohnFulpWillard: + - bugfix: Cultists can now vote for a Cult leader again. + - bugfix: Slimes using Feed while buckled now stops feeding. + - bugfix: Slimes are no longer prompted to feed off of dead people. + - bugfix: Slimes that can only feed onto one person now immediately feeds off of + them. + - balance: Pirate suits can now hold the laser musket and smoothbore disabler. + Justavidya: + - image: modified the cherry cupcake and blue-cherry cupcake sprites + K4rlox: + - bugfix: makes the experiment chamber in syndicate lavaland base no longer explode + when testing grenades + LT3: + - bugfix: Fixed alt-click validation for tram interactions + Melbert: + - bugfix: Tinacusiate should break less, and break less things + - bugfix: Speaking to a Sign Languager with Tinacusiate in your system doesn't mess + with their text, because they're not speaking. + - bugfix: Fixed examining modular PCs + - bugfix: Robocontrol app maybe works better now. + - refactor: Jukebox has been refactored. Jukebox music now updates as the player + moves, mutes when the player is deafened, and overall sounds wayyy better. You + can also now toggle song repeat on jukeboxes. + Momo8289: + - rscadd: There's now a small chance to be a smartass when affected by Voice of + God + Motho: + - rscadd: Surplus equipment was added to Blueshift's engineering secure storage. + - rscdel: A donor item was removed from Blueshift's thrift shop. + OrionTheFox: + - image: Removed the RnD sprite overrides now that TG has resprited the items - + this comes with updates to all related Digitigrade icons as well as a resprite + of the "Science Utility Uniform"! + - rscdel: Removed the "Sleek Roboticist Jumpsuit" and "Research Director's Jumpsuit/Jumpskirt", + holdovers that were also from the RnD overrides + RatFromTheJungle: + - spellcheck: added a 'with' where needed on the sol EMT gear + Rhials: + - qol: Spider eggs will now close their spawn menu when you move away from them. + SapphicOverload: + - rscadd: Exosuit-mounted RCDs now have the same functionality as the handheld version. + - code_imp: Removes /obj/item/onetankbomb, assembly bombs are now handled by the + tank itself. + Swiftfeather: + - qol: Increased threshold of trace n2o required to make euphoria and giggles happen. + Whoneedspacee: + - bugfix: Ash drake's fire breath attack has proper cooldowns again + Xander3359: + - bugfix: burning a bible no longer gives you INFINITY curses + ZephyrTFA: + - bugfix: Meteor Satellites no longer erroneously count every piece of paper as + a protected turf. + - bugfix: As a result the station goal is slightly more difficult + - bugfix: lathes now respect always-powered areas + - balance: lathes now use power as they print instead of all at once + distributivgesetz: + - bugfix: Teleportations will no longer exceed reservation bounds. + intercepti0n: + - refactor: refactored experimentor UI to TGUI. + - bugfix: fixed ore vent's well being drawn over ash storm. + sqnztb: + - qol: '*turf can now be used while buckled to things' + - bugfix: lidocaine no longer makes you addicted to opioids. + sylvia-from-fulp-station: + - rscadd: '[IceBox] Botany now has a service accessible bio generator' + - qol: '[IceBox] Kitchen and service hall rearranged' + tf-4: + - rscadd: Caligram's Fleet surplus clothes are now available in SolFed markets. + (Navy reskins for Caligram fleet clothing and removal of the ckey whitelist.) + vinylspiders: + - bugfix: fixes being able to flip holographic tables into reality and harvest them + for materials + yooriss: + - rscadd: The Colonist, Doorman, Trauma Team Responder, Cyberneticist and Resonance + Researcher job alternate titles have been added to their appropriate jobs (Assistant, + Service Guard, Paramedic, Roboticist and Scientist respectively). Chaplain and + Cargo Technician have also received several gendered versions of existing titles + (Mail Carrier, High Priestess, Priestess, Nun, Shrine Maiden, Shrine Guardian, + etc). + zxaber: + - balance: Mech wire panels are now blocked when the mech is occupied. I guess it + was moved to be behind the seat. +2024-02-07: + Jacquerel: + - rscadd: Mothic Fleet Rations now no longer get dirty or decompose if left on the + floor, due to their wrappers. + Lutowski: + - rscadd: Void Raptor's Kitchen is renovated and more spacious. + - bugfix: Void Raptor Mining Dock should have air again. + Momo8289: + - bugfix: Automated IV drips will now be on the layer set by the plumbing constructor + when created. + MortoSasye: + - rscadd: Modifies the hearthkin map to increase the mess hall size, as well as + place new objects in it. + SkeletalElite: + - rscadd: Wearing certain gloves (such as black gloves and combat oriented gloves) + allow you to cuff people faster + - balance: base handcuffing time is now 4 seconds + - balance: latex gloves now hide your fingerprints + burgerenergy: + - rscadd: Nanotransen has rolled back some of their religious restrictions; various + chaplain job clothes have been added to the suit, hat, and neck tabs of loadout! + chemistrymain2: + - balance: balancejakked the mantis blade implant into not being hackable by the + binyat + mc-oofert: + - bugfix: you may not toggle health assemblies from any range, even while crit + - bugfix: you may no longer rip pillow tags at range without telekinesis or crit + or any other time you shouldnt be capable of it + - bugfix: you may no longer altclick tape recorders at range to play them + - bugfix: you may no longer altclick ethereal disco balls while unconscious to anchor/unanchor +2024-02-08: + EEASAS: + - bugfix: Fixed some things in Ice Box's gas station ruin + - rscadd: Adds some things in Ice Box's gas station ruin + Ghommie: + - bugfix: Fixed text effects for runechat messages (the stuff enclosed in +, | and + _ characters). + - spellcheck: Improved the tip for say/text effects. + Higgin: + - bugfix: fixes ghetto surgery by gently adjusting time sensitivity cap and making + the cleaver not unintuitively bad at bone-sawing. + - bugfix: removed ability to buckle megafauna, constructs, blob minions, dragons, + and slimes. + IndieanaJones: + - bugfix: Regenerative Materia blobs can no longer drug non-carbons. + - bugfix: Alien Hunter's pounce ability no longer has any weird offset issues once + the pounce is completed. + Jacquerel: + - bugfix: Being consumed by the flesh of the necropolis while inside a cryo tube + will no longer convert the tube into a legion spawn point until the tube is + destroyed + JohnFulpWillard: + - bugfix: Science Xenos no longer turn the entire roundend report into bold letters. + - rscadd: Paradox clones now have a bluespace stream instead of a syndicate poster + as their ghost poll icon. + - spellcheck: Mechs that have been renamed now are proper names, so are not described + as 'the' mech. + - qol: Service personnel now show up in green in the crew monitor console. + Justice12354: + - qol: You no longer need to manually set the CC Commander's Headset to high-volume. + Melbert: + - refactor: Big martial arts refactor, they should now overall act a ton more consistent. + Also technically any mob can do martial arts. Let me know if something is funky. + - bugfix: The object overlay circuit component will no longer take things with it. + PapaMichael: + - bugfix: tramstation isolation cells now properly open on their timer. + Rhials: + - bugfix: You can no longer convert assassination targets to your blood brother + team. + - balance: Wallmounts now respect cameranets, and cannot be accessed from a view + of the adjacent wall. + SyncIt21: + - bugfix: deleting objects with local material storage(autolathe, drone dispenser + etc) no longer drops sheets, they only drop materials when deconstructed + ViktorKoL: + - bugfix: smoothed out a few asymmetries in the heretic research tree + - bugfix: ash mark now properly lowers the cooldown of mansus grasp when triggered + Xander3359: + - balance: Contractor baton costs 7 TC (down from 12 TC) + - balance: Midroll/Latejoin traitors can no longer buy the baton, they must buy + the whole kit + - bugfix: Midroll/Latejoin traitors no longer have access to roundstart traitor + exclusive items + cnleth: + - balance: RD and QM coats can hold telebatons now + - qol: Quartermaster's coat can hold items that a normal jacket can hold, such as + small oxygen tanks + mc-oofert: + - bugfix: you may no longer reset autolathe drop direction at times when you shouldnt + be able to + optimumtact, whomst didn't write this CL entry.: + - bugfix: Fixed the colorful lights of the ethereal disco ball. + vinylspiders: + - bugfix: fixes a runtime in AI search_tactic +2024-02-09: + IndieanaJones: + - bugfix: Xenomorphs now have legcuffs applied to them properly. + JohnFulpWillard: + - qol: The barcode scanner is now part of computer tech and can be printed at the + service techfab. + LT3: + - bugfix: SM cascade delam messages no longer display to clients not in game + Melbert: + - bugfix: When placing an item into storage (such as backpacks), all nearby mobs + now get a message, rather than just the first mob. + - bugfix: TGC decks of cards should act a bit less odd when looking inside. + - refactor: Refactored a bit of storage, cleaned up a fair bit of its code. Let + me know if you notice anything funky about storage (like backpacks). + - bugfix: Krav Maga users can shove again + Swiftfeather: + - qol: Added a new head-only target hotkey, unbound by default. + Wallem: + - rscadd: Adds a new suicide_act() to the smite spell +2024-02-10: + 00-Steven: + - bugfix: As they should've for a while, screwdrivers (cocktail) actually work as + screwdrivers (tool). + - sound: The screwdriver cocktail also actually plays the screwdriver sound when + used. + 1393F: + - bugfix: The HFR now provides the max temperature for recipes + - bugfix: the crystallizer now provides the dangerous object created instead of + itself in admin logging + ArcaneMusic: + - bugfix: Icebox should have it's ore distribution and it's ore vents fixed, so + that vents should now produce ore. + - spellcheck: Boulder processing machines now don't mention things they don't do. + Ben10Omintrix: + - rscadd: settlers can rename their pets + CliffracerX: + - image: Habits, hoods & veils for religious staff now support GAGS. Resprited + the Monk Habit with actual shading. + - image: Pencilskirts now support GAGS, and include variants without the top to + allow combination with undershirts. + - image: the Qipao & Cheongsam allow colorable trim, the Yukata's sash is colorable, + and Cheongsam pants are colorable. + - image: office & executive casual suits kitbashed from slacks & pencilskirt tops, + for when you wanna push papers in style. + - qol: added the Voyager Trekkie uniforms to the loadout menu, and made all Trekkie + uniforms recolorable. + - refactor: Trekkie uniforms no longer have nonmodular edits to assign their digitigrade + variants. + - admin: icspawning supports quirks & loadout items now + - admin: bluespace technician RPED has been significantly upgraded + - bugfix: hotfix for loadout wallets not filling properly + - bugfix: camo pants now available for digi legs (again) + FernandoJ8: + - code_imp: added an IS_CHANGELING() helper and used it where applicable + Holoo-1: + - admin: remade everyone is traitor into everyone is antag in secrets panel + IndieanaJones: + - bugfix: Bolas in your pockets no longer slow you down. + JohnFulpWillard: + - bugfix: Species that can eat mice don't get disgusted from seeing one in the toilet + bong. + - rscadd: Grabbing an unwrenched statue/mannequin/skeleton model will now move its + direction as you move yours, and you can talk through it. + - bugfix: Space Dragon's carp allies no longer turn the entire roundend report into + bold. + - bugfix: Bar bots asking for Cucumber Lemonade now gives you money for completing + it. + - rscadd: Changeling's reviving stasis ability now puts you in stasis. + LT3: + - qol: Health analyzer will now display blood alcohol content + LemonInTheDark: + - rscdel: Removes halloween screen tint, we're taking him to retire by the seaside + (he was alone and unloved) + - rscadd: Ghost hair looks better now. Insert nerd shit about RGB vs HSL color space + here, go watch a youtube video or whatever. + Lutowski: + - rscadd: The barbers have been hard at work! Emo Long & Gloomy Bangs hairstyles + are updated to modern standards. + - bugfix: Service Hall's disposal pipes are fixed on Void Raptor. + Melbert: + - bugfix: You know that one bug that makes the cryo cells on Deltastation unusuable? + Well it's not fixed but at least those cryo cells are usuable again, maybe at + the cost of another station's cryo cells. Who knows! + - bugfix: Fixed Finger Guns giving a misleading chat message + - bugfix: Fixed some situations in which you couldn't interact with heretic runes + - balance: Rats are now 5x less likely to decide to eat a cable when idling. (1%, + down from 5%) + MortoSasye: + - rscadd: Adds more clothes to the hearthkin's wardrobe, three of them being exclusively + made for their use. + OrionTheFox: + - image: fixed some minor icon inconsistencies on the White Suit and Tan Suit + Paxilmaniac: + - rscadd: Adds the cropped jacket, it's like a jacket but some barbarian seems to + have ripped the bottom half off it + - bugfix: A few suit items that really ought to have some suit storage stuff, now + have that. + - rscadd: The DeForest Med-Vend has been added to the selection of random vendors + that can be found around the station, these machines sell medical items at an + upcharge over the company imported price for the convenience of having the items + right then and there. + - rscadd: The wall med-station has been added, which is a simple biogenerator-type + machine that hooks onto walls and prints both basic medical items and blood + packs of nearly all types. + - rscadd: The treatment zone indicator can now be gotten from cargo, this is a holoprojector + that makes a 3x3 tile red warning square to give onlookers the hint that they + should keep their distance while medical staff do their work. + - balance: A large number of Deforest medical items have been made cheaper, namely + medpens and medkits as a result. + SomeRandomOwl: + - rscadd: Drones default laws and flavor text warning has been changed. + - rscadd: Drones can now UNDERSTAND sol but not speak it. + Stalkeros: + - rscadd: Blueshift Xen asteroid has been reworked into an OG red mining asteroid, + with appropriate fauna + - rscdel: Effectivelly everything else that was related to Black Mesa. + SyncIt21: + - bugfix: reactions now compute purity of reagents based on their volume, meaning + larger amounts of reagents created will have more significant effects on the + final purity of the solution + - qol: adds screentips & examines for screwdriver & crowbar acts & alt click. + - qol: techfabs can now use the mouse drop functionality to set drop target. + - qol: lathe printing animation plays on loop while printing rather than flicking + once for more visual feedback + - bugfix: lathe sheet insertion animations are now linked & work again for all material + types inserted via remote silo/local storage + - bugfix: printing custom materials items from autolathe works again. + - bugfix: printing multiple items from lathes will actually print that correct quantity + of items requested. + - bugfix: printing items the 2nd time around from lathes won't cause the UI to reload + each time. + - code_imp: autodoc for some vars & procs, merges procs. + - refactor: Optimized code for autolathe & techfabs in general. Report bugs on github + ViktorKoL: + - bugfix: fix heretic's rust mark failing to damage any items if the victim has + any container on them with another item inside, and maybe other bugs of similar + nature + Zargoar: + - rscadd: 'Adds in the Red Mons, The Wizard, The Rune and MOTHS-MOTHS-MOTHS bar + signs from the bar sign contest. + + Congratulations to the winners!' + - image: Adds in the Red Mons, The Wizard, The Rune and MOTHS-MOTHS-MOTHS bar signs + from the bar sign contest. + Zergspower: + - rscadd: Hilbert Hotel - Adds a beach condo + - bugfix: Apartment in Hilberts hotel regains its birb plush + - balance: Brings back non-proximity based ore spawns + - bugfix: fixes Icemoon not spawning ore + larentoun: + - bugfix: Now falsewalls visually don't close when they shouldn't. + mc-oofert: + - bugfix: you may no longer altclick unanchored toiletbongs from any range in any + condition to rotate them + necromanceranne: + - bugfix: The shove blocker module parent type now has the correct typepath. + nikothedude: + - bugfix: Synthetic organ manipulation no longer causes screaming +2024-02-11: + Absolucy: + - bugfix: Fix succumb last words being double-encoded (i.e `i'm` becoming `i'lm`) + Higgin: + - bugfix: deathtrap recycler can now be moved. + - refactor: moved check for NO_DECONSTRUCTION flag to be inside can_be_unfasten_wrench, + allowing us to set specific machines to be movable but not deconstructable. + JohnFulpWillard: + - bugfix: Uplinks now update their UI when you add telecrystals in them, so you + don't need to close and reopen it. + Melbert: + - rscadd: Shaft Miner's Bluespace Survival Capsules will now throw people away from + it when it deploys. Be sure to heed the warning to "Stand back". + - rscadd: Freedom Implants and Biodegrade can you free you of the shackles of knotted + shoes. + - refactor: Fire effects get added to mobs in a different way now. Maybe it will + get stuck less. Report any oddities. + Momo8289: + - rscadd: Fire ants can now be scooped up and used as a chem like normal space ants + - rscadd: Shakers can now pour drinks with custom names and descriptions! Alt-click + the shaker to enable this. + Rhials: + - bugfix: You can now refine ectoplasmic raw cores at the implosion machine thing. + - bugfix: The Energy Cake slice now does its on-eat effect AFTER being eaten, instead + of before. + - balance: Beacon and Teleport Blocker implants have been moved from cargo to the + security lathe. + - balance: A new research node has been created, requiring Subdermal Implants and + Miniature Bluespace, to unlock Beacon/Teleport Blocker implants. + - balance: Exile implants can now be printed from the security lathe after researching + basic cybernetic implants. + - bugfix: The beach bar virtual domain's bar closets no longer have default locker + doors. + SyncIt21: + - bugfix: lathes now use moderate power for printing operations + Zergspower: + - bugfix: fixes apartment hotel dorm not loading properly + vinylspiders: + - bugfix: '''Sharp Claws'' quirk now has a different icon, to distinguish it from + the new ''Touchy'' quirk' +2024-02-12: + Iajret: + - rscadd: Added Blue slim reskin for security belt, armadyne skin for webbing and + red messenger bag skin for messenger bag +2024-02-13: + 00-Steven: + - bugfix: Fixed stamps not accounting for scroll offset. You can actually stamp + paperwork properly without using accursed knowledge again. + - bugfix: Fixed PDA messenger not scrolling to the bottom when a new message gets + sent. + - bugfix: Paperwork should actually use the writing utensil's font, colour, and + boldness outside of input fields again. + Atlasle, JohnFulpWillard: + - rscadd: Adds the Touchy quirk, you need to be next to something to examine it, + for 2 extra quirk points. + Aylong: + - rscadd: Added `Mute` button into `Chat Tabs` settings, it disables tab unread + counter + - rscadd: Added `Clear chat` button into `General` settings, you can clear your + dirty chat like you did it before TGchat + - bugfix: Case-sensitive highlighting now works properly + Dreathtil: + - rscadd: Added Quirk support to all of the Hotel Spawners + - rscadd: Added Loadout support to all of the Hotel Spawners + Ed640: + - bugfix: Sculpted statues stop including light layers. + LT3: + - bugfix: MULEbot will correctly display its loaded cargo on BotKeeper + - bugfix: MULEbot home beacon can be set from control panel + - code_imp: MULEbot home location is automatically set on init + Lunar248: + - rscadd: Added the Rapid Constructor Fab and a Colonial Supply core to the Freighter + ghost role. + - bugfix: Fixed a few missing lights, and vents aboard the Freighter ghost role. + Melbert: + - bugfix: You can once again see love on Valentines Day + - qol: Glasses colors should be a lot less harsh, and being blind no longer also + blinds your hud. + - bugfix: Lavaland Beech Bartender's clothing storage is named the right thing now + MelokGleb and KREKS, McRamon, Ghommie: + - image: New sprites for changeling powers and items. Woooh. + MortoSasye: + - rscadd: A new primitive bonesetter has been added, as well as a function to melt + iron rods in a forge. + - image: Primitive Bonesetter icon + Rex9001: + - balance: Smile of the moon's effects now last for longer and have a longer minimum + active time + - balance: Mark of moon detonations now do sanity damage + - qol: Ascended moon heretics and lunatics are now able to see who is and isn't + a lunatic. + - qol: People inside the ascended moon heretics sanity draining aura now gain an + effect under their tile. + Rhials: + - bugfix: You can now click things as an alien larva again. + - qol: Venus Human Traps are now visible in the orbit menu. Cool! + - bugfix: Spawning as a Venus Human Trap now properly gives you an antag datum/objective. + - bugfix: Venus human trap flowers no longer have a second, identical flower under + themselves. + - qol: Map hazard anomalies are no longer treated as points-of-interest in the orbit + menu. + Singul0: + - balance: Brainwashed individuals can no longer be debrainwashed through a mindshield + implant, they still protect you from brainwashing though! You just need to get + medical to fix them up. + - bugfix: You can now use bluespace launchpads from shuttles (except cargo and ferry + shuttles) + - bugfix: Fixes backwards engines in a few of centcom's ferries! + Thunder12345: + - bugfix: The wizard's pets Jimmy and Jommy no longer fight to the death. + Zergspower: + - balance: ore generation on icebox is less explosive filled + intercepti0n: + - bugfix: Separated logs list into pages in ore silo UI, thus fixing lag when logs + list grows too long. + mc-oofert: + - rscadd: nanotrasen museum gateway map + siliconOpossum: + - bugfix: Getting blood on your hand when you only have one no longer makes your + hands visually permanently bloody + - bugfix: Holding bloodied gloves no longer makes your hands look bloody, bloodied + gloves now look bloody when worn, and damaged gloves now look damaged when worn + - bugfix: Gaining or losing an arm now correctly updates your hand overlays + vinylspiders: + - bugfix: contractor victims will now be sent back to the station after 4 minutes + like they're supposed to + - rscdel: contractor victims will no longer receive brain damage or random wounds + when being kidnapped. +2024-02-15: + A.C.M.O.: + - qol: Added purple color to ERP quirks on the Quirks page of Character Preferences. + JohnFulpWillard: + - bugfix: Revenants (and other flying mobs) will not make noise when walking into + pools of gibs, + LemonInTheDark: + - bugfix: Fixes fancy lights not updating their source location when picked up and + moved + Melbert: + - balance: Scientists have discovered Nuka Cola is not good for short term health. + NeonNik2245: + - rscadd: 3 new masks for your characters (thanks to Kovac for the scarf sprites) + Paxilmaniac: + - rscadd: A pair of new energy weapons has been added to replace microfusion lasers, + the modular energy weapons. Coming in both long and short versions, these persona-enabled + weapons have many different modes they can rapidly reconfigure themselves between + to fit whatever the operator's preferences may be. + - rscdel: Microfusion lasers entirely have been deleted. There are no more. Good + news, however, is that the highly curious non-modular code edits that were a + result of microfusion lasers are now gone. + Rhials: + - spellcheck: Some space ruin area names have been made more distinct. + SyncIt21: + - bugfix: machines that should not drop contents when deleted no longer do. + - refactor: refactors how machines are deconstructed. report bugs on github. + ViktorKoL: + - bugfix: knit flesh now heals organs as intended, and does not cause its victims + to be red forever if interrupted + - spellcheck: knit flesh chat messages are no longer gramatically incorrect + - bugfix: heretics no longer lose their spells when returning from a shapeshift + Zenitheevee: + - qol: port tarkon has some emergency power to help at start + - qol: port tarkon's ship has a much lower draw on spawn + - qol: port tarkon engineers' inducer now spawns in backpack + - balance: port tarkon xenos spawners rebalanced + - balance: port tarkon xenos target hybrid xeno players now + - rscadd: port tarkon unique additions for access and cameras + vinylspiders: + - bugfix: '*wag emote is now functional again' +2024-02-16: + CandleJaxx and Iamgoofball: + - bugfix: Fixes Krav Maga allowing pacifism bypasses. + IndieanaJones: + - balance: Nightmare's Light Eater takes less time in jaunt to gain a critical strike, + being reduced to 7 seconds from 15 seconds. + K4rlox: + - balance: Maintenance drones now can use RPED, RCD, Holosign, and Spray bottles + LemonInTheDark: + - rscadd: AI's acceleration now smoothly decays, instead of just falling back down + to 0 after 0.5 seconds + - bugfix: AI's standard movement (non accelerated) is smooth now, instead of constantly + jumping around + - bugfix: AIs will now follow their targets more closely, shouldn't have any issues + with them lagging behind anymore + Melbert: + - bugfix: Valentines no longer see themselves covered in hearts. They only see their + Valentine covered in hearts. + Rhials: + - bugfix: Ghost role polls should spam you less when multiple of the same roll occur + in succession. + Thlumyn: + - rscadd: Added hotspring to hearthkin ghost cafe spot. + - bugfix: Moved moved in hearth in cafe to not layer on top of fence. + Xander3359: + - balance: Contractor kit no longer gets RNG items, it's a specific pool now + vinylspiders: + - bugfix: mold should now spawn enemies again + yooriss: + - rscdel: Security and medical records can no longer be expunged or mass-purged + from their respective consoles. + - rscadd: Numerous implants have been added to the character preferences screen, + including a variety of handy toolsets and more. Every integrated tool has its + own unique description and company branding, but are always worse than their + in-hand counterparts you can find on the station. Style over substance! +2024-02-18: + 00-Steven: + - bugfix: Space cats CAN into space. (They're back to surviving being in unsuitable + atmos.) + 13spacemen: + - code_imp: Removed unused global lists and sprite accessories related to tail spines + - code_imp: removed redundant check for plasmamen in survival box code + A.C.M.O.: + - rscadd: Enabled the synth power cord implant to charge from any power cell. Renamed + it to charging implant. + GoldenAlpharex: + - bugfix: The Spawners menu now accurately displays the amount of uses left in each + spawner option, taking into account individual spawners that either allow more + than one use, or an infinite amount of uses. + IndieanaJones: + - bugfix: Blob Zombies now render their blob heads correctly again. + - bugfix: Tank spider corpses should no longer be conditionally invisible + Kylerace: + - admin: admins/maintainers can now make the profiler focus on specific subsystems + by setting the subsystem var profile_focused to TRUE + LemonInTheDark: + - refactor: Fucks with how movement keys are handled. Please report any bugs + Lutowski: + - rscadd: Parts from a discontinued synth chassis line from the Mariinsky Ballet + Company is making rounds on the black market - now available to install for + synths and chromed up organics! + - rscadd: Slightly alters Research Director's labcoat sprite. + MLGTASTICa: + - balance: Oxandrolone now scales with purity. Its default purity is 100% + - balance: Salicylic acid now scales with purity. Its default purity is 100% + Melbert: + - rscadd: Wizards have a new mobility option available, the Telegram Scepter. The + ability to travel anywhere you can see at the point of a wand... but at a price? + Roastglue: + - bugfix: Crafting Bulgogi no longer makes Bibimbap. It instead makes Bulgogi. + Sylphet: + - bugfix: cargo lockboxes update iconstates correctly now + SyncIt21: + - qol: adds examines & screentips for ore box + - code_imp: cleans up some procs for ore box + - spellcheck: corrected description & ui notice of ore box to specify it can hold + boulders too + - bugfix: Indestructible items like the pai card don't teleport to the ore silo + when you insert them into silo linked machine & also displays a message saying + it was rejected. + Thunder12345: + - qol: The bitrunning quantum console UI now lists domains in tabs by difficulty. + WinterDarkraven: + - rscadd: In an attempt to stop the greytide, NanoTrasen has increased security's + baton energy output. This has, through testing, done nothing but make the device + spark more than it used to. + destrucktoid: + - bugfix: Restorative Nanites now heal Slimepeople just as well as they do other + people. + mc-oofert: + - balance: assemblybombs are bulky + mogeoko: + - bugfix: Thermomachines now reconnect to pipes on multitool's act. + - bugfix: Multi-deck connectors won't connect pipes not located in front/top/bottom + of it. + nikothedude: + - bugfix: Characters with multiple bodytypes are no longer forced to bear broken + clothing sprites +2024-02-19: + SyncIt21: + - qol: adds examines & screentips for crowbar, screwdriver acts to BRM & refinery + machines + - qol: adds examines about the number of boulders stored & processed to BRM & refinery + machines + - qol: BRM now has its lights turn on/off depending on wether automatic boulder + retrieval is on/off for visual clarity along with examines + - qol: refinery machines now display ballon alerts & plays sounds more frequently + when processing boulders for better feedback + - bugfix: vents now spawn boulders of all sizes & not just small ones + - bugfix: expanded gulag boulders now have correct materials in them. + - bugfix: manual tapping of vents now has a cooldown applied as intended. + - bugfix: BRM has its light turned off when area power goes off + - bugfix: boulders ejected from refineries by hand no longer teleport all over the + place occasionally. + - bugfix: refineries no longer eject boulders with 0 durability + - bugfix: Boulders & refineries no longer pile up on top of BRM's & refineries in + long rounds. Their locs have to be clear of boulders before they spit out more + boulders to prevent a large pile of boulders from causing lag + - bugfix: sheets ejected from lathes no longer get rejected when inserted back which + could happen at random, no more boulders with empty materials + - code_imp: splits boulder types into its own file along with other items + - code_imp: merges & autodocs procs, vars related to boulders + - refactor: repaths BRM to a simpler subtype + - refactor: BRM now spawns boulders in batches(batch size can be increased with + upgraded parts) with a boulder appearing every second. After a batch is processed + a 3 second cooldown is applied to stop the conveyer belt from clogging up, With + this BRM wires are removed as there is no need for timers to be attached to + wires which intefers without our batch processing timings. +2024-02-20: + 1393F: + - bugfix: The crystallizer screentip for rotating it has been updated with the correct + button + A.C.M.O.: + - qol: Enabled firedoors to automatically close when forced open. + - qol: Shortened manual override of firedoors from 10 seconds to 5 seconds. + AstraFarera: + - bugfix: Interdyne map fixes, ql changes + Blackbox Recorder. + Cursor: + - rscadd: Security Officers are now Haram. + Ghommie: + - rscadd: Players holding cardboard cutouts will now assume their appearance, just + like for potted plants. + - qol: Circuit multitools can now mark (visible) items worn/held by a mob. + - rscadd: Added three new 'special' bedsheets. One of them is quite rare and made + from gondola hide. + - rscadd: Curators now get a 22.5% cut on credits spent on painting patronages (divided + by the number of curators). The service department also gets another, 12.5% + cut. + - qol: Added a zoom in and out buttons to the painting UI. + GoldenAlpharex: + - bugfix: Humanoid ghost roles now receive their job title on their mob, when that + was previously not the case. + - admin: Humanoid ghost roles can now be searched by job title in the Player Panel + directory (and will show up everywhere else that displays the job title). + - qol: Icewalkers can now go back to sleep in their hole in the ground, allowing + another kin to come back out later. + - qol: Icewalkers can now send their sleeping kins down the hole too, if they've + been sleeping for long enough (30 minutes). + JohnFulpWillard: + - bugfix: The DNA scanner's joker button no longer instantly activates itself when + the cooldown between uses is done. + - bugfix: Regenerative cores (and other monster organs) now work when using it in-hand + while resting. + Kashargul: + - qol: hides the delete button on the main tab allows to reorder all other chat + tabs + - qol: makes the tgui_input_number user friendly for negative and decimal inputs + - code_imp: the onBlur={(_, value) => onBlur(value)} event should now be used on + all uses of RestrictedInput to ensure that the number is fully sanitized whenever + the user leaves the field or submits it through a button + LT3: + - rscadd: The tram has been equipped with enhanced safety glass to reduce the severity + of crew injuries + - qol: Air alarms now display the source of triggered fire alarms/firedoors + LemonInTheDark: + - bugfix: Maps loaded in after roundstart will no longer have broken smoothing + LemonInTheDark, Kryson: + - image: Modified railing sprites to be a bit more three-d + Melbert: + - admin: You can now set someone's TC to 0 + - admin: Removing Traitor from automatically removes the uplink from them + - admin: Removing Uplink from someone no longer wipes ALL of their memories + - bugfix: Lifeline can no longer track mobs with suit sensors off + - bugfix: Fixes AI double-click tracking + - rscadd: Valentines Day now polls all players for candidates when it triggers rather + than forcing all players to be a Valentine. Consent is important. + - rscadd: Valentine silicons now gain special laws pertaining to their date. + - qol: Valentines Cards are now paper, so you can write on them, stamp them, or + burn them. + - qol: Valentine's roundend report no longer takes up a massive amount of space + and also no longer sound so, so weird. + Motho: + - rscadd: Retrofitted shoredresses have been made available in the loadout. These + new variations can fit standard body shapes. + Paxilmaniac: + - balance: Synths can now use twitch (and by extension, the qani-laaca computer), + both synths and those with vein muscles will be heated up massively by twitch, + rather than taking heart damage. + - bugfix: The radial blur overlay for twitch now once again works properly, meaning + you won't be basically entirely blinded by it anymore. + - rscadd: Two new crates can be found in the security armory tab, with renoster + shotguns and kiboko launchers. + - balance: The contents of the CIN surplus box have been changed around to contain + some of the new CIN weapons, among other things. The weighting list has been + changed as well. + - code_imp: Some unused or otherwise pointless code additions from really old gunsec + have been either tweaked or removed. + - refactor: The CIN surplus crate has had its code refactored a bit. + - code_imp: We no longer have to non-modularly comment out the russian surplus crate, + instead using a single variable to hide it. + Rhials: + - bugfix: Removes the double-newscaster from the arrivals sec post. + SyncIt21: + - bugfix: mecha drill won't use power & do other checks if the target cannot be + drilled. + - bugfix: mecha drill will stop drilling if the mech moves even without changing + direction. Also will use power & check other conditions every drill cycle. + - bugfix: boulders are no longer lost when teleported by the BRM + - bugfix: batch processing cooldown works when teleporting multiple boulders + - bugfix: multiple reactions occuring in the same holder like mixing drinks will + yield correct reagent result volumes + - code_imp: ' Removes `update_total()` from instant reactions improving performance + slightly' + - code_imp: merges `remove_all_direct()` with `remove_all()` to reduce code size + kawaiinick: + - rscadd: Your mouth now fits combat or survival knives(it's totally safe) + mc-oofert: + - bugfix: forcefully pushing disposal outlets and chutes deconstructs them instead + of making them behave like budget eigenstatium lockers + - rscadd: deathmatch minigame + - bugfix: you may not put disposal outlets on cargo shuttle + - qol: you may altclick action buttons to bind them to a key + - code_imp: deathmatch lobbies take 8 seconds to start as to give lighting a breather + rageguy505: + - bugfix: The door above tool storage on birdshot now has maintenance access on + it and officials can now enter the CC dock room. diff --git a/icons/area/areas_station.dmi b/icons/area/areas_station.dmi index c63c333fa4c..66098018f75 100644 Binary files a/icons/area/areas_station.dmi and b/icons/area/areas_station.dmi differ diff --git a/icons/effects/blood.dmi b/icons/effects/blood.dmi index 93f836f4c84..fb31da10ee9 100644 Binary files a/icons/effects/blood.dmi and b/icons/effects/blood.dmi differ diff --git a/icons/effects/cranial_fissure.dmi b/icons/effects/cranial_fissure.dmi new file mode 100644 index 00000000000..9f8f5b46021 Binary files /dev/null and b/icons/effects/cranial_fissure.dmi differ diff --git a/icons/effects/effects.dmi b/icons/effects/effects.dmi index 1be88105380..fcb4e262d7c 100644 Binary files a/icons/effects/effects.dmi and b/icons/effects/effects.dmi differ diff --git a/icons/effects/mapping_helpers.dmi b/icons/effects/mapping_helpers.dmi index d28d2770ec4..351bb5f00c4 100644 Binary files a/icons/effects/mapping_helpers.dmi and b/icons/effects/mapping_helpers.dmi differ diff --git a/icons/effects/ore_visuals.dmi b/icons/effects/ore_visuals.dmi index 5189711bc25..87c31c8c7df 100644 Binary files a/icons/effects/ore_visuals.dmi and b/icons/effects/ore_visuals.dmi differ diff --git a/icons/effects/random_spawners.dmi b/icons/effects/random_spawners.dmi index c03b196a137..08df14c0ffc 100644 Binary files a/icons/effects/random_spawners.dmi and b/icons/effects/random_spawners.dmi differ diff --git a/icons/effects/vent_overlays.dmi b/icons/effects/vent_overlays.dmi new file mode 100644 index 00000000000..54ac3d7a819 Binary files /dev/null and b/icons/effects/vent_overlays.dmi differ diff --git a/icons/hud/lobby/signup_button.dmi b/icons/hud/lobby/signup_button.dmi new file mode 100644 index 00000000000..a67cc558442 Binary files /dev/null and b/icons/hud/lobby/signup_button.dmi differ diff --git a/icons/hud/radial.dmi b/icons/hud/radial.dmi index 42d5c451018..90813b4d7d2 100644 Binary files a/icons/hud/radial.dmi and b/icons/hud/radial.dmi differ diff --git a/icons/hud/screen_alert.dmi b/icons/hud/screen_alert.dmi index dc95d505ce6..7aa32c94b8e 100755 Binary files a/icons/hud/screen_alert.dmi and b/icons/hud/screen_alert.dmi differ diff --git a/icons/hud/screen_changeling.dmi b/icons/hud/screen_changeling.dmi index 61d3513cbfa..c3bab062ac4 100644 Binary files a/icons/hud/screen_changeling.dmi and b/icons/hud/screen_changeling.dmi differ diff --git a/icons/mob/actions/actions_changeling.dmi b/icons/mob/actions/actions_changeling.dmi index 0969b03725e..bb3634a1dde 100644 Binary files a/icons/mob/actions/actions_changeling.dmi and b/icons/mob/actions/actions_changeling.dmi differ diff --git a/icons/mob/actions/backgrounds.dmi b/icons/mob/actions/backgrounds.dmi index 558045a0656..c9aa1534538 100644 Binary files a/icons/mob/actions/backgrounds.dmi and b/icons/mob/actions/backgrounds.dmi differ diff --git a/icons/mob/clothing/head/hats.dmi b/icons/mob/clothing/head/hats.dmi index 3477cb1820a..0fd0de8e425 100644 Binary files a/icons/mob/clothing/head/hats.dmi and b/icons/mob/clothing/head/hats.dmi differ diff --git a/icons/mob/clothing/mask.dmi b/icons/mob/clothing/mask.dmi index 375de246269..24e8622344e 100644 Binary files a/icons/mob/clothing/mask.dmi and b/icons/mob/clothing/mask.dmi differ diff --git a/icons/mob/clothing/neck.dmi b/icons/mob/clothing/neck.dmi index fcfdb55f522..5440bf9d99d 100644 Binary files a/icons/mob/clothing/neck.dmi and b/icons/mob/clothing/neck.dmi differ diff --git a/icons/mob/clothing/under/suits.dmi b/icons/mob/clothing/under/suits.dmi index e3800e2bd04..e8fd6a820d3 100644 Binary files a/icons/mob/clothing/under/suits.dmi and b/icons/mob/clothing/under/suits.dmi differ diff --git a/icons/mob/huds/antag_hud.dmi b/icons/mob/huds/antag_hud.dmi index d8d6dd1ac40..aa96f2338b2 100644 Binary files a/icons/mob/huds/antag_hud.dmi and b/icons/mob/huds/antag_hud.dmi differ diff --git a/icons/mob/huds/hud.dmi b/icons/mob/huds/hud.dmi index 3e32e17437c..3dff7642a96 100644 Binary files a/icons/mob/huds/hud.dmi and b/icons/mob/huds/hud.dmi differ diff --git a/icons/mob/human/bodyparts.dmi b/icons/mob/human/bodyparts.dmi index 2150b3c2c81..d6e4472973a 100644 Binary files a/icons/mob/human/bodyparts.dmi and b/icons/mob/human/bodyparts.dmi differ diff --git a/icons/mob/human/species/lizard/lizard_spines.dmi b/icons/mob/human/species/lizard/lizard_spines.dmi index 82eb636b339..5112c8a0a6e 100644 Binary files a/icons/mob/human/species/lizard/lizard_spines.dmi and b/icons/mob/human/species/lizard/lizard_spines.dmi differ diff --git a/icons/mob/human/species/lizard/lizard_tails.dmi b/icons/mob/human/species/lizard/lizard_tails.dmi index 8af62b32cfe..f27c1dcb390 100644 Binary files a/icons/mob/human/species/lizard/lizard_tails.dmi and b/icons/mob/human/species/lizard/lizard_tails.dmi differ diff --git a/icons/mob/human/species/monkey/bodyparts.dmi b/icons/mob/human/species/monkey/bodyparts.dmi index 689ef5e63d7..59a3a10c26c 100644 Binary files a/icons/mob/human/species/monkey/bodyparts.dmi and b/icons/mob/human/species/monkey/bodyparts.dmi differ diff --git a/icons/mob/inhands/antag/changeling_lefthand.dmi b/icons/mob/inhands/antag/changeling_lefthand.dmi index daf0e2fb3f6..a3723f8dab0 100644 Binary files a/icons/mob/inhands/antag/changeling_lefthand.dmi and b/icons/mob/inhands/antag/changeling_lefthand.dmi differ diff --git a/icons/mob/inhands/antag/changeling_righthand.dmi b/icons/mob/inhands/antag/changeling_righthand.dmi index aa2144c5962..d3f320a38a9 100644 Binary files a/icons/mob/inhands/antag/changeling_righthand.dmi and b/icons/mob/inhands/antag/changeling_righthand.dmi differ diff --git a/icons/mob/inhands/items/bedsheet_lefthand.dmi b/icons/mob/inhands/items/bedsheet_lefthand.dmi index 1f2d7df0075..2795277a183 100644 Binary files a/icons/mob/inhands/items/bedsheet_lefthand.dmi and b/icons/mob/inhands/items/bedsheet_lefthand.dmi differ diff --git a/icons/mob/inhands/items/bedsheet_righthand.dmi b/icons/mob/inhands/items/bedsheet_righthand.dmi index 5c831140c9e..4fe73af823a 100644 Binary files a/icons/mob/inhands/items/bedsheet_righthand.dmi and b/icons/mob/inhands/items/bedsheet_righthand.dmi differ diff --git a/icons/mob/inhands/weapons/staves_lefthand.dmi b/icons/mob/inhands/weapons/staves_lefthand.dmi index 83504696b61..5e4eb552f2a 100644 Binary files a/icons/mob/inhands/weapons/staves_lefthand.dmi and b/icons/mob/inhands/weapons/staves_lefthand.dmi differ diff --git a/icons/mob/inhands/weapons/staves_righthand.dmi b/icons/mob/inhands/weapons/staves_righthand.dmi index c83e0eed3ab..9de32d8cd95 100644 Binary files a/icons/mob/inhands/weapons/staves_righthand.dmi and b/icons/mob/inhands/weapons/staves_righthand.dmi differ diff --git a/icons/mob/nonhuman-player/alienleap.dmi b/icons/mob/nonhuman-player/alienleap.dmi index 7e10b8a5c5b..551b664c1b2 100644 Binary files a/icons/mob/nonhuman-player/alienleap.dmi and b/icons/mob/nonhuman-player/alienleap.dmi differ diff --git a/icons/mob/silicon/aibots.dmi b/icons/mob/silicon/aibots.dmi index a3da5c9cf2b..8949caa0299 100644 Binary files a/icons/mob/silicon/aibots.dmi and b/icons/mob/silicon/aibots.dmi differ diff --git a/icons/mob/simple/animal.dmi b/icons/mob/simple/animal.dmi index 3bd3438bc62..7fcf0e9d65e 100644 Binary files a/icons/mob/simple/animal.dmi and b/icons/mob/simple/animal.dmi differ diff --git a/icons/mob/simple/arachnoid.dmi b/icons/mob/simple/arachnoid.dmi index d17297f2ccf..7e15fde6852 100644 Binary files a/icons/mob/simple/arachnoid.dmi and b/icons/mob/simple/arachnoid.dmi differ diff --git a/icons/obj/aquarium.dmi b/icons/obj/aquarium.dmi index 19e2e68c4f8..aa37c035791 100644 Binary files a/icons/obj/aquarium.dmi and b/icons/obj/aquarium.dmi differ diff --git a/icons/obj/bedsheets.dmi b/icons/obj/bedsheets.dmi index 8db48b45fc6..daa0c3cdd79 100644 Binary files a/icons/obj/bedsheets.dmi and b/icons/obj/bedsheets.dmi differ diff --git a/icons/obj/card.dmi b/icons/obj/card.dmi index fdf3657c9d1..6397cf6fb5b 100644 Binary files a/icons/obj/card.dmi and b/icons/obj/card.dmi differ diff --git a/icons/obj/clothing/masks.dmi b/icons/obj/clothing/masks.dmi index 20951b3264f..1dd2ac7d71c 100644 Binary files a/icons/obj/clothing/masks.dmi and b/icons/obj/clothing/masks.dmi differ diff --git a/icons/obj/clothing/modsuit/mod_modules.dmi b/icons/obj/clothing/modsuit/mod_modules.dmi index f1d19c29da1..eb4b0c536ce 100644 Binary files a/icons/obj/clothing/modsuit/mod_modules.dmi and b/icons/obj/clothing/modsuit/mod_modules.dmi differ diff --git a/icons/obj/debris.dmi b/icons/obj/debris.dmi index d256d1ddd6e..10b73560cbb 100644 Binary files a/icons/obj/debris.dmi and b/icons/obj/debris.dmi differ diff --git a/icons/obj/fishing.dmi b/icons/obj/fishing.dmi index f7ab9fc1ad9..92d7da8238a 100644 Binary files a/icons/obj/fishing.dmi and b/icons/obj/fishing.dmi differ diff --git a/icons/obj/fluff/general.dmi b/icons/obj/fluff/general.dmi index 2628eea8746..1aa7ae5c898 100644 Binary files a/icons/obj/fluff/general.dmi and b/icons/obj/fluff/general.dmi differ diff --git a/icons/obj/food/food.dmi b/icons/obj/food/food.dmi index e9468812b99..c4d93c23b0b 100644 Binary files a/icons/obj/food/food.dmi and b/icons/obj/food/food.dmi differ diff --git a/icons/obj/food/moth.dmi b/icons/obj/food/moth.dmi index fd6db22c306..e3df78e65e6 100644 Binary files a/icons/obj/food/moth.dmi and b/icons/obj/food/moth.dmi differ diff --git a/icons/obj/machines/atmospherics/binary_devices.dmi b/icons/obj/machines/atmospherics/binary_devices.dmi index 407e9fc94f4..96528d420c2 100644 Binary files a/icons/obj/machines/atmospherics/binary_devices.dmi and b/icons/obj/machines/atmospherics/binary_devices.dmi differ diff --git a/icons/obj/machines/barsigns.dmi b/icons/obj/machines/barsigns.dmi index 01a853be18f..fa8a3e13252 100644 Binary files a/icons/obj/machines/barsigns.dmi and b/icons/obj/machines/barsigns.dmi differ diff --git a/icons/obj/machines/computer.dmi b/icons/obj/machines/computer.dmi index cba0069cf6f..aae3a83a455 100644 Binary files a/icons/obj/machines/computer.dmi and b/icons/obj/machines/computer.dmi differ diff --git a/icons/obj/machines/mining_machines.dmi b/icons/obj/machines/mining_machines.dmi index d6fc1afd716..c1a4076e3a2 100644 Binary files a/icons/obj/machines/mining_machines.dmi and b/icons/obj/machines/mining_machines.dmi differ diff --git a/icons/obj/machines/research.dmi b/icons/obj/machines/research.dmi index 02d848eb4e9..544054279e9 100644 Binary files a/icons/obj/machines/research.dmi and b/icons/obj/machines/research.dmi differ diff --git a/icons/obj/medical/cryogenics.dmi b/icons/obj/medical/cryogenics.dmi index bd82d4bbace..4dd33af8ce7 100644 Binary files a/icons/obj/medical/cryogenics.dmi and b/icons/obj/medical/cryogenics.dmi differ diff --git a/icons/obj/mining.dmi b/icons/obj/mining.dmi index 54b19553b84..cdc886d85ac 100644 Binary files a/icons/obj/mining.dmi and b/icons/obj/mining.dmi differ diff --git a/icons/obj/mining_zones/terrain.dmi b/icons/obj/mining_zones/terrain.dmi index 4db51145eee..fd930fe709d 100644 Binary files a/icons/obj/mining_zones/terrain.dmi and b/icons/obj/mining_zones/terrain.dmi differ diff --git a/icons/obj/modular_laptop.dmi b/icons/obj/modular_laptop.dmi index ee275066d16..c8ad438d1a3 100644 Binary files a/icons/obj/modular_laptop.dmi and b/icons/obj/modular_laptop.dmi differ diff --git a/icons/obj/modular_pda.dmi b/icons/obj/modular_pda.dmi index 6dfe29add9e..75553403ee2 100644 Binary files a/icons/obj/modular_pda.dmi and b/icons/obj/modular_pda.dmi differ diff --git a/icons/obj/ore.dmi b/icons/obj/ore.dmi index 23fcb8c89ea..7cc3b882057 100644 Binary files a/icons/obj/ore.dmi and b/icons/obj/ore.dmi differ diff --git a/icons/obj/pipes_n_cables/hydrochem/plumbers.dmi b/icons/obj/pipes_n_cables/hydrochem/plumbers.dmi index 19775b6eff8..555b6c6328b 100644 Binary files a/icons/obj/pipes_n_cables/hydrochem/plumbers.dmi and b/icons/obj/pipes_n_cables/hydrochem/plumbers.dmi differ diff --git a/icons/obj/railings.dmi b/icons/obj/railings.dmi index 6518908d544..7dcb4e7c6f7 100644 Binary files a/icons/obj/railings.dmi and b/icons/obj/railings.dmi differ diff --git a/icons/obj/service/bureaucracy.dmi b/icons/obj/service/bureaucracy.dmi index 36518b42799..f28eb169cf0 100644 Binary files a/icons/obj/service/bureaucracy.dmi and b/icons/obj/service/bureaucracy.dmi differ diff --git a/icons/obj/service/janitor.dmi b/icons/obj/service/janitor.dmi index 454ad36f989..0e301808323 100644 Binary files a/icons/obj/service/janitor.dmi and b/icons/obj/service/janitor.dmi differ diff --git a/icons/obj/storage/box.dmi b/icons/obj/storage/box.dmi index 6cae3e75dff..8e34ac8f8de 100644 Binary files a/icons/obj/storage/box.dmi and b/icons/obj/storage/box.dmi differ diff --git a/icons/obj/structures.dmi b/icons/obj/structures.dmi index 40420db3705..1e6a2ba6872 100644 Binary files a/icons/obj/structures.dmi and b/icons/obj/structures.dmi differ diff --git a/icons/obj/tram/tram_controllers.dmi b/icons/obj/tram/tram_controllers.dmi index 93462e0b41e..aea1f691af2 100644 Binary files a/icons/obj/tram/tram_controllers.dmi and b/icons/obj/tram/tram_controllers.dmi differ diff --git a/icons/obj/weapons/changeling_items.dmi b/icons/obj/weapons/changeling_items.dmi index 4c26dfea49e..ca577e6d2b2 100644 Binary files a/icons/obj/weapons/changeling_items.dmi and b/icons/obj/weapons/changeling_items.dmi differ diff --git a/icons/obj/weapons/guns/magic.dmi b/icons/obj/weapons/guns/magic.dmi index 90eb4bdc669..3d7238a72bb 100644 Binary files a/icons/obj/weapons/guns/magic.dmi and b/icons/obj/weapons/guns/magic.dmi differ diff --git a/icons/obj/weapons/guns/projectiles.dmi b/icons/obj/weapons/guns/projectiles.dmi index a4c321a0543..6e6b1797c42 100644 Binary files a/icons/obj/weapons/guns/projectiles.dmi and b/icons/obj/weapons/guns/projectiles.dmi differ diff --git a/icons/obj/weapons/turrets.dmi b/icons/obj/weapons/turrets.dmi index 9a9d387ef96..6582671eac0 100644 Binary files a/icons/obj/weapons/turrets.dmi and b/icons/obj/weapons/turrets.dmi differ diff --git a/icons/turf/floors.dmi b/icons/turf/floors.dmi index 6fc1178a6b4..89b4876c0ce 100644 Binary files a/icons/turf/floors.dmi and b/icons/turf/floors.dmi differ diff --git a/icons/ui_icons/achievements/achievements.dmi b/icons/ui_icons/achievements/achievements.dmi index 619ef96dda9..ff62bd7e374 100644 Binary files a/icons/ui_icons/achievements/achievements.dmi and b/icons/ui_icons/achievements/achievements.dmi differ diff --git a/modular_nova/master_files/code/_globalvars/text.dm b/modular_nova/master_files/code/_globalvars/text.dm index f730a8ff817..3517f458fea 100644 --- a/modular_nova/master_files/code/_globalvars/text.dm +++ b/modular_nova/master_files/code/_globalvars/text.dm @@ -7,3 +7,10 @@ input_text = replacetext(input_text, GLOB.noncapital_i, "I") return input_text + +/// Ensures text does not start with capital letters. +/proc/lowercase_title(input_text) + if (!input_text) + return input_text + var/start = lowertext(input_text[1]) + return splicetext(input_text, 1, 2, start) diff --git a/modular_nova/master_files/code/datums/bodypart_overlays/mutant_bodypart_overlay.dm b/modular_nova/master_files/code/datums/bodypart_overlays/mutant_bodypart_overlay.dm index 3fcf2bbe707..1a86afbea05 100644 --- a/modular_nova/master_files/code/datums/bodypart_overlays/mutant_bodypart_overlay.dm +++ b/modular_nova/master_files/code/datums/bodypart_overlays/mutant_bodypart_overlay.dm @@ -27,10 +27,14 @@ * * Arguments: * * dna - The `/datum/dna` datum from which we're going to be extracting the data to set the + * * accessory_name - instead of using the name from mutant_bodyparts[feature_key][MUTANT_INDEX_NAME] you can optionally pass one explicitly + * * feature_key - same as with accessory_key, you can optionally pass a feature_key explicitly * appearance. */ -/datum/bodypart_overlay/mutant/proc/set_appearance_from_dna(datum/dna/dna) - sprite_datum = fetch_sprite_datum_from_name(dna.mutant_bodyparts[feature_key][MUTANT_INDEX_NAME]) +/datum/bodypart_overlay/mutant/proc/set_appearance_from_dna(datum/dna/dna, accessory_name, feature_key) + if(isnull(feature_key)) // if not explicitly set, just use the feature_key of the bodypart_overlay + feature_key = src.feature_key + sprite_datum = fetch_sprite_datum_from_name(accessory_name ? accessory_name : dna.mutant_bodyparts[feature_key][MUTANT_INDEX_NAME]) modsuit_affected = sprite_datum.use_custom_mod_icon draw_color = dna.mutant_bodyparts[feature_key][MUTANT_INDEX_COLOR_LIST] build_emissive_eligibility(dna.mutant_bodyparts[feature_key][MUTANT_INDEX_EMISSIVE_LIST]) diff --git a/modular_nova/master_files/code/datums/quirks/negative_quirks/heavy_sleeper.dm b/modular_nova/master_files/code/datums/quirks/negative_quirks/heavy_sleeper.dm index 4afd45ec75e..5d922f25145 100644 --- a/modular_nova/master_files/code/datums/quirks/negative_quirks/heavy_sleeper.dm +++ b/modular_nova/master_files/code/datums/quirks/negative_quirks/heavy_sleeper.dm @@ -11,7 +11,7 @@ hardcore_value = 2 mail_goodies = list( /obj/item/clothing/glasses/blindfold, - /obj/item/bedsheet/random, + /obj/effect/spawner/random/bedsheet/any, /obj/item/clothing/under/misc/pj/red, /obj/item/clothing/head/costume/nightcap/red, /obj/item/clothing/under/misc/pj/blue, diff --git a/modular_nova/master_files/code/datums/quirks/negative_quirks/narcolepsy.dm b/modular_nova/master_files/code/datums/quirks/negative_quirks/narcolepsy.dm index 424295157c8..3807f65264f 100644 --- a/modular_nova/master_files/code/datums/quirks/negative_quirks/narcolepsy.dm +++ b/modular_nova/master_files/code/datums/quirks/negative_quirks/narcolepsy.dm @@ -16,9 +16,9 @@ var/mob/living/carbon/human/user = quirk_holder user.gain_trauma(/datum/brain_trauma/severe/narcolepsy/permanent, TRAUMA_RESILIENCE_ABSOLUTE) - var/obj/item/storage/pill_bottle/prescription_stimulant/stimmies = new() + var/obj/item/storage/medkit/civil_defense/comfort/stocked/stimmies = new() if(quirk_holder.equip_to_slot_if_possible(stimmies, ITEM_SLOT_BACKPACK, qdel_on_fail = TRUE, initial = TRUE, indirect_action = TRUE)) - to_chat(quirk_holder, span_info("You have been given a bottle of mild stimulants to assist in staying awake this shift...")) + to_chat(quirk_holder, span_info("You have been given a company-issued symptom support kit containing mild stimulants to assist in staying awake this shift. Dose responsibly. Consult your allocated care provider if you experience any side-effects.")) /datum/quirk/narcolepsy/remove() . = ..() @@ -52,17 +52,3 @@ else if(drowsy && SPT_PROB(sleep_chance, seconds_per_tick)) to_chat(owner, span_warning("You fall asleep.")) owner.Sleeping(rand(20 SECONDS, 30 SECONDS)) - -/obj/item/storage/pill_bottle/prescription_stimulant - name = "bottle of prescribed stimulant pills" - desc = "A bottle of mild and medicinally approved stimulants to help prevent drowsiness." - -/obj/item/storage/pill_bottle/prescription_stimulant/PopulateContents() - for(var/i in 1 to 5) - new /obj/item/reagent_containers/pill/prescription_stimulant(src) - -/obj/item/reagent_containers/pill/prescription_stimulant - name = "prescription stimulant pill" - desc = "Used to treat symptoms of drowsiness and sudden loss of consciousness. A warning label reads: Take in moderation." - list_reagents = list(/datum/reagent/consumable/sugar = 5, /datum/reagent/medicine/synaptizine = 5, /datum/reagent/medicine/modafinil = 3) - icon_state = "pill15" diff --git a/modular_nova/master_files/code/datums/quirks/negative_quirks/photophobia.dm b/modular_nova/master_files/code/datums/quirks/negative_quirks/photophobia.dm new file mode 100644 index 00000000000..a4224b926a7 --- /dev/null +++ b/modular_nova/master_files/code/datums/quirks/negative_quirks/photophobia.dm @@ -0,0 +1,37 @@ +/datum/quirk/photophobia + desc = "Bright lights are uncomfortable and upsetting to you for whatever reason. Your eyes are also more sensitive to light in general. This shares a unique interaction with Night Vision." + /// how much of a flash_protect deficit the quirk inflicts + var/severity = 1 + +/datum/quirk/photophobia/add_unique(client/client_source) + var/sensitivity = client_source?.prefs.read_preference(/datum/preference/choiced/photophobia_severity) + switch (sensitivity) + if ("Hypersensitive") + severity = 2 + if ("Sensitive") + severity = 1 + var/obj/item/organ/internal/eyes/holder_eyes = quirk_holder.get_organ_slot(ORGAN_SLOT_EYES) + restore_eyes(holder_eyes) // add_unique() happens after add() so we need to jank reset this to ensure sensitivity is properly applied at roundstart + check_eyes(holder_eyes) + +/datum/quirk_constant_data/photophobia + associated_typepath = /datum/quirk/photophobia + customization_options = list(/datum/preference/choiced/photophobia_severity) + +/datum/preference/choiced/photophobia_severity + category = PREFERENCE_CATEGORY_MANUALLY_RENDERED + savefile_key = "photophobia_severity" + savefile_identifier = PREFERENCE_CHARACTER + +/datum/preference/choiced/photophobia_severity/is_accessible(datum/preferences/preferences) + if (!..(preferences)) + return FALSE + + return "Photophobia" in preferences.all_quirks + +/datum/preference/choiced/photophobia_severity/init_possible_values() + var/list/values = list("Sensitive", "Hypersensitive") + return values + +/datum/preference/choiced/photophobia_severity/apply_to_human(mob/living/carbon/human/target, value) + return diff --git a/modular_nova/master_files/code/datums/quirks/positive_quirks/night_vision.dm b/modular_nova/master_files/code/datums/quirks/positive_quirks/night_vision.dm new file mode 100644 index 00000000000..2c3d0e06766 --- /dev/null +++ b/modular_nova/master_files/code/datums/quirks/positive_quirks/night_vision.dm @@ -0,0 +1,64 @@ +// This NV quirk variant applies color_offsets night vision to a mob based on its chosen eye color. +// Some eye colors will produce very slightly stronger mechanical night vision effects just by virtue of their RGB values being scaled higher (typically lighter colours). + +/datum/quirk/night_vision + desc = "You can see a little better in darkness than most ordinary humanoids. If your eyes are naturally more sensitive to light through other means (such as being photophobic or a mothperson), this effect is significantly stronger." + medical_record_text = "Patient's visual sensory organs demonstrate non-standard performance in low-light conditions." + var/nv_color = null /// Holds the player's selected night vision colour + var/list/nv_color_cutoffs = null /// Contains the color_cutoffs applied to the user's eyes w/ our custom hue (once built) + +/datum/quirk/night_vision/add_unique(client/client_source) + . = ..() + nv_color = client_source?.prefs.read_preference(/datum/preference/color/nv_color) + if (isnull(nv_color)) + var/mob/living/carbon/human/human_holder = quirk_holder + nv_color = process_chat_color(human_holder.eye_color_left) + nv_color_cutoffs = calculate_color_cutoffs(nv_color) + refresh_quirk_holder_eyes() // make double triple dog sure we apply the overlay + +/// Calculate eye organ color_cutoffs used in tinted night vision with a supplied hexcode colour, clamping and scaling appropriately. +/datum/quirk/night_vision/proc/calculate_color_cutoffs(color) + var/mob/living/carbon/human/target = quirk_holder + + // if we have more sensitive eyes, increase the power + var/obj/item/organ/internal/eyes/target_eyes = target.get_organ_slot(ORGAN_SLOT_EYES) + if (!istype(target_eyes)) + return + var/infravision_multiplier = max(0, (-(target_eyes.flash_protect) * NOVA_NIGHT_VISION_SENSITIVITY_MULT)) + 1 + + var/list/new_rgb_cutoffs = new /list(3) + for(var/i in 1 to 3) + var/base_color = hex2num(copytext(color, (i*2), (i*2)+2)) //convert their supplied hex colour value to RGB + var/adjusted_color = max(((base_color / 255) * (NOVA_NIGHT_VISION_POWER_MAX * infravision_multiplier)), (NOVA_NIGHT_VISION_POWER_MIN * infravision_multiplier)) //linear convert their eye color into a color_cutoff range, ensuring it is clamped + new_rgb_cutoffs[i] = adjusted_color + + return new_rgb_cutoffs + +/datum/quirk_constant_data/night_vision + associated_typepath = /datum/quirk/night_vision + customization_options = list(/datum/preference/color/nv_color) + +// Client preference for night vision colour +/datum/preference/color/nv_color + savefile_key = "nv_color" + savefile_identifier = PREFERENCE_CHARACTER + category = PREFERENCE_CATEGORY_MANUALLY_RENDERED + +/datum/preference/color/nv_color/is_accessible(datum/preferences/preferences) + if (!..(preferences)) + return FALSE + + return "Night Vision" in preferences.all_quirks + +/datum/preference/color/nv_color/apply_to_human(mob/living/carbon/human/target, value) + return + +// run the Blessed Runechat Proc since it does most of what we want regarding luminance clamping anyway. could it be better? probably. is it more work? yes, it's a LOT of work. +/datum/preference/color/nv_color/deserialize(input, datum/preferences/preferences) + return process_chat_color(sanitize_hexcolor(input)) + +/datum/preference/color/nv_color/serialize(input) + return process_chat_color(sanitize_hexcolor(input)) + +/datum/preference/color/nv_color/create_default_value() + return process_chat_color("#[random_color()]") diff --git a/modular_nova/master_files/code/datums/quirks/positive_quirks/spacer.dm b/modular_nova/master_files/code/datums/quirks/positive_quirks/spacer.dm new file mode 100644 index 00000000000..ac2cb947ddb --- /dev/null +++ b/modular_nova/master_files/code/datums/quirks/positive_quirks/spacer.dm @@ -0,0 +1,8 @@ +// Make spacer's gravity wellness effect visible so players know something is happening. +/datum/status_effect/spacer/gravity_wellness + alert_type = /atom/movable/screen/alert/status_effect/gravity_wellness + +/atom/movable/screen/alert/status_effect/gravity_wellness + name = "Gravity Wellness" + desc = "Your physiology thrives in low-gravity conditions: you catch your breath quicker and are more mobile." + icon_state = "negative" diff --git a/modular_nova/master_files/code/datums/traits/good.dm b/modular_nova/master_files/code/datums/traits/good.dm index aa71af7edeb..483e19630fd 100644 --- a/modular_nova/master_files/code/datums/traits/good.dm +++ b/modular_nova/master_files/code/datums/traits/good.dm @@ -27,7 +27,7 @@ gain_text = span_notice("Your palms hurt a bit from the sharpness of your nails.") lose_text = span_danger("You feel a distinct emptiness as your nails dull; good luck scratching that itch.") medical_record_text = "Patient ended up scratching through the examination table's cushions; recommended they look into clipping their claws." - icon = FA_ICON_HAND + icon = FA_ICON_LINES_LEANING /datum/quirk/sharpclaws/add(client/client_source) var/mob/living/carbon/human/human_holder = quirk_holder diff --git a/modular_nova/master_files/code/datums/votes/map_vote.dm b/modular_nova/master_files/code/datums/votes/map_vote.dm index 10dea54b2fd..83406324428 100644 --- a/modular_nova/master_files/code/datums/votes/map_vote.dm +++ b/modular_nova/master_files/code/datums/votes/map_vote.dm @@ -1,3 +1,4 @@ //Map votes shouldn't be using weighted random /datum/vote/map_vote + count_method = VOTE_COUNT_METHOD_MULTI winner_method = VOTE_WINNER_METHOD_SIMPLE diff --git a/modular_nova/master_files/code/game/area/areas/ruins/lavaland.dm b/modular_nova/master_files/code/game/area/areas/ruins/lavaland.dm index 178897c57d4..f923c5a6a52 100644 --- a/modular_nova/master_files/code/game/area/areas/ruins/lavaland.dm +++ b/modular_nova/master_files/code/game/area/areas/ruins/lavaland.dm @@ -11,12 +11,6 @@ ambient_buzz = 'sound/ambience/magma.ogg' area_flags = UNIQUE_AREA | BLOBS_ALLOWED -/area/ruin/interdyne_planetary_base/Initialize(mapload) - if(!ambientsounds) - ambientsounds = GLOB.ambience_assoc[ambience_index] - ambientsounds += 'sound/ambience/ambiicemelody2.ogg' - return ..() - /area/ruin/interdyne_planetary_base/cargo name = "Interdyne Cargo Bay" icon = 'icons/area/areas_station.dmi' @@ -39,7 +33,8 @@ /area/ruin/interdyne_planetary_base/cargo/obs/Initialize(mapload) if(!ambientsounds) - ambientsounds = GLOB.ambience_assoc[ambience_index] + var/list/temp_ambientsounds = GLOB.ambience_assoc[ambience_index] + ambientsounds = temp_ambientsounds.Copy() ambientsounds += list( 'modular_nova/modules/encounters/sounds/morse.ogg', 'sound/ambience/ambitech.ogg', @@ -133,7 +128,8 @@ /area/ruin/interdyne_planetary_base/eng/Initialize(mapload) if(!ambientsounds) - ambientsounds = GLOB.ambience_assoc[ambience_index] + var/list/temp_ambientsounds = GLOB.ambience_assoc[ambience_index] + ambientsounds = temp_ambientsounds.Copy() ambientsounds += list( 'sound/items/geiger/low1.ogg', 'sound/items/geiger/low2.ogg', diff --git a/modular_nova/master_files/code/game/gamemodes/dynamic.dm b/modular_nova/master_files/code/game/gamemodes/dynamic.dm index 3776c016ece..4a4493b4c3a 100644 --- a/modular_nova/master_files/code/game/gamemodes/dynamic.dm +++ b/modular_nova/master_files/code/game/gamemodes/dynamic.dm @@ -7,13 +7,13 @@ . = "Central Command Status Summary
    " var/greenshift = GLOB.dynamic_forced_extended || (threat_level < MIN_MIDROUND_COST && shown_threat < MIN_MIDROUND_COST) // if both shown and real threat are below any ruleset, its greenshift time - generate_station_goals(greenshift ? INFINITY : CONFIG_GET(number/station_goal_budget)) + SSstation.generate_station_goals(greenshift ? INFINITY : CONFIG_GET(number/station_goal_budget)) - if(GLOB.station_goals.len > 0) + if(!length(SSstation.get_station_goals())) . = "
    No assigned goals.
    " else var/list/texts = list("
    Special Orders for [station_name()]:
    ") - for(var/datum/station_goal/station_goal as anything in GLOB.station_goals) + for(var/datum/station_goal/station_goal as anything in SSstation.get_station_goals()) station_goal.on_report() texts += station_goal.get_report() diff --git a/modular_nova/master_files/code/game/machinery/doors/firedoor.dm b/modular_nova/master_files/code/game/machinery/doors/firedoor.dm index a05589daf99..848ef2b12c6 100644 --- a/modular_nova/master_files/code/game/machinery/doors/firedoor.dm +++ b/modular_nova/master_files/code/game/machinery/doors/firedoor.dm @@ -11,11 +11,13 @@ /obj/machinery/door/proc/try_manual_override(mob/user) if(density && !welded && !operating) balloon_alert(user, "opening...") - if(do_after(user, 10 SECONDS, target = src)) + if(do_after(user, 5 SECONDS, target = src)) try_to_crowbar(null, user) return TRUE return FALSE +// Uncomment this override to disable the auto-close feature of firedoors. +/* /obj/machinery/door/firedoor/try_to_crowbar(obj/item/used_object, mob/user) if(welded || operating) balloon_alert(user, "opening failed!") @@ -25,6 +27,7 @@ open() else close() +*/ /obj/machinery/door/firedoor/heavy/closed icon_state = "door_closed" diff --git a/modular_nova/master_files/code/game/objects/effects/decals/remains.dm b/modular_nova/master_files/code/game/objects/effects/decals/remains.dm index 559bfec759f..3dc421d40be 100644 --- a/modular_nova/master_files/code/game/objects/effects/decals/remains.dm +++ b/modular_nova/master_files/code/game/objects/effects/decals/remains.dm @@ -1,2 +1,2 @@ /obj/effect/decal/remains/NeverShouldHaveComeHere(turf/here_turf) - return !islava(here_turf) && !(istype(here_turf, /turf/open/water/beach/xen) || istype(here_turf, /turf/open/misc/beach/coastline_t) || istype(here_turf, /turf/open/water/xen_acid)) && ..() + return !islava(here_turf) && ..() diff --git a/modular_nova/master_files/code/game/objects/items/hhmirror.dm b/modular_nova/master_files/code/game/objects/items/hhmirror.dm index 70c846c2130..cc8d886c7c5 100644 --- a/modular_nova/master_files/code/game/objects/items/hhmirror.dm +++ b/modular_nova/master_files/code/game/objects/items/hhmirror.dm @@ -68,17 +68,21 @@ human_user.skin_tone = new_s_tone human_user.dna.update_ui_block(DNA_SKIN_TONE_BLOCK) + #define MIN_MCOLOR_VALUE 50 + if(HAS_TRAIT(human_user, TRAIT_MUTANT_COLORS) && !HAS_TRAIT(human_user, TRAIT_FIXED_MUTANT_COLORS)) var/new_mutantcolor = input(user, "Choose your skin color:", "Race change", human_user.dna.features["mcolor"]) as color|null if(new_mutantcolor) - var/temp_hsv = RGBtoHSV(new_mutantcolor) + var/mutantcolor_hsv = rgb2hsv(new_mutantcolor) - if(ReadHSV(temp_hsv)[3] >= ReadHSV("#7F7F7F")[3]) // mutantcolors must be bright + if(mutantcolor_hsv[3] >= MIN_MCOLOR_VALUE) // mutantcolors must be bright human_user.dna.features["mcolor"] = sanitize_hexcolor(new_mutantcolor) else to_chat(human_user, span_notice("Invalid color. Your color is not bright enough.")) + #undef MIN_MCOLOR_VALUE + human_user.update_body() human_user.update_body_parts() human_user.update_body_parts() diff --git a/modular_nova/master_files/code/game/objects/structures/tables_racks.dm b/modular_nova/master_files/code/game/objects/structures/tables_racks.dm index 1ee566b42f9..2058fbd5467 100644 --- a/modular_nova/master_files/code/game/objects/structures/tables_racks.dm +++ b/modular_nova/master_files/code/game/objects/structures/tables_racks.dm @@ -7,14 +7,3 @@ /obj/structure/table/reinforced/Initialize() . = ..() AddElement(/datum/element/liquids_height, 20) - -/// Used to numb a patient and apply stasis to them if enabled. -/obj/structure/table/optable/proc/chill_out(mob/living/target) - playsound(src, 'sound/effects/spray.ogg', 5, TRUE, 2, frequency = rand(24750, 26550)) - ADD_TRAIT(target, TRAIT_NUMBED, REF(src)) - target.throw_alert("numbed", /atom/movable/screen/alert/numbed) - -///Used to remove the effects of stasis and numbing when a patient is unbuckled -/obj/structure/table/optable/proc/thaw_them(mob/living/target) - REMOVE_TRAIT(target, TRAIT_NUMBED, REF(src)) - target.clear_alert("numbed", /atom/movable/screen/alert/numbed) diff --git a/modular_nova/master_files/code/game/sound.dm b/modular_nova/master_files/code/game/sound.dm index 24bfca732d8..b2842468319 100644 --- a/modular_nova/master_files/code/game/sound.dm +++ b/modular_nova/master_files/code/game/sound.dm @@ -97,13 +97,11 @@ soundin = pick('modular_nova/master_files/sound/weapons/punch1.ogg', 'modular_nova/master_files/sound/weapons/punch3.ogg') if ("explosion") soundin = pick( - 'modular_nova/modules/black_mesa/sound/explosions/explode1.ogg', - 'modular_nova/modules/black_mesa/sound/explosions/explode2.ogg', - 'modular_nova/modules/black_mesa/sound/explosions/explode3.ogg', - 'modular_nova/modules/black_mesa/sound/explosions/explode4.ogg', - 'modular_nova/modules/black_mesa/sound/explosions/explode5.ogg', - 'modular_nova/modules/black_mesa/sound/explosions/explode6.ogg', - 'modular_nova/modules/black_mesa/sound/explosions/explode7.ogg', + 'sound/effects/explosion1.ogg', + 'sound/effects/explosion2.ogg', + 'sound/effects/explosion3.ogg', + 'sound/effects/explosioncreak1.ogg', + 'sound/effects/explosioncreak2.ogg', ) return soundin diff --git a/modular_nova/master_files/code/modules/antagonists/pirate/pirate_gang.dm b/modular_nova/master_files/code/modules/antagonists/pirate/pirate_gang.dm new file mode 100644 index 00000000000..fc05a926507 --- /dev/null +++ b/modular_nova/master_files/code/modules/antagonists/pirate/pirate_gang.dm @@ -0,0 +1,4 @@ +// Override for Pirates for lore or policy reasons +// Interdyne isnt a hostile faction in current lore, balance reasons aside +/datum/pirate_gang/interdyne/can_roll() + return FALSE diff --git a/modular_nova/master_files/code/modules/client/preferences/middleware/limbs_and_markings.dm b/modular_nova/master_files/code/modules/client/preferences/middleware/limbs_and_markings.dm index 1099d7a3e79..493f160824f 100644 --- a/modular_nova/master_files/code/modules/client/preferences/middleware/limbs_and_markings.dm +++ b/modular_nova/master_files/code/modules/client/preferences/middleware/limbs_and_markings.dm @@ -32,6 +32,7 @@ "eyes" = "Eyes", "tongue" = "Tongue", "Mouth implant" = "Mouth implant", + "Chest implant" = "Chest implant", "Left Arm implant" = "Left Arm implant", "Right Arm implant" = "Right Arm implant", ) diff --git a/modular_nova/master_files/code/modules/client/preferences_savefile.dm b/modular_nova/master_files/code/modules/client/preferences_savefile.dm index be228d89f10..08387e9e5d2 100644 --- a/modular_nova/master_files/code/modules/client/preferences_savefile.dm +++ b/modular_nova/master_files/code/modules/client/preferences_savefile.dm @@ -169,7 +169,6 @@ if(current_version < VERSION_UNDERSHIRT_BRA_SPLIT) var/static/list/underwear_to_underwear_bra = list( - "Panties" = list("Panties - Basic", null), // Just a rename "Bikini" = list("Panties - Slim", "Bra"), "Lace Bikini" = list("Panties - Thin", "Bra - Thin"), "Bralette w/ Boyshorts" = list("Boyshorts (Alt)", "Bra, Sports"), diff --git a/modular_nova/master_files/code/modules/clothing/back/antigravityharness.dm b/modular_nova/master_files/code/modules/clothing/back/antigravityharness.dm index a75b6c1b5c8..d0f8cae6d43 100644 --- a/modular_nova/master_files/code/modules/clothing/back/antigravityharness.dm +++ b/modular_nova/master_files/code/modules/clothing/back/antigravityharness.dm @@ -101,6 +101,7 @@ user.RemoveElement(/datum/element/forced_gravity, 0) REMOVE_TRAIT(user, TRAIT_NEGATES_GRAVITY, CLOTHING_TRAIT) + var/datum/quirk/spacer_born/spacer = user.get_quirk(/datum/quirk/spacer_born) switch(target_mode) if(MODE_ANTIGRAVITY) mode = MODE_ANTIGRAVITY @@ -115,6 +116,10 @@ icon_state = ANTIGRAVITY_STATE worn_icon_state = ANTIGRAVITY_STATE + //are we a spacer? if so, let the quirk know we're back in low gravity conditions + if (!isnull(spacer)) + spacer.in_space(user) + if(MODE_EXTRAGRAVITY) mode = MODE_EXTRAGRAVITY @@ -128,6 +133,10 @@ icon_state = EXTRAGRAVITY_STATE worn_icon_state = EXTRAGRAVITY_STATE + //are we a spacer? if so, let the quirk know we're in extremely uncomfortable extragrav + if (!isnull(spacer)) + spacer.on_planet(user) + if(MODE_GRAVOFF) if(!user.has_gravity() && mode != MODE_GRAVOFF) new /obj/effect/temp_visual/mook_dust/robot(get_turf(src)) @@ -145,6 +154,10 @@ icon_state = OFF_STATE worn_icon_state = OFF_STATE + //are we a spacer? if so, make the quirk assert the correct condition based on where we are + if (!isnull(spacer)) + spacer.check_z(user) + else return FALSE @@ -153,7 +166,6 @@ return TRUE - /obj/item/gravity_harness/dropped(mob/user) . = ..() change_mode(MODE_GRAVOFF) @@ -164,6 +176,7 @@ /obj/item/gravity_harness/attack_self(mob/user) toggle_mode(user, TRUE) + /// This outputs the harness's current mode and cell charge to your status tab, so you don't need to examine it every time. /obj/item/gravity_harness/proc/get_status_tab_item(mob/living/source, list/items) SIGNAL_HANDLER diff --git a/modular_nova/master_files/code/modules/clothing/clothing_variation_overrides/under.dm b/modular_nova/master_files/code/modules/clothing/clothing_variation_overrides/under.dm index cd1c15d216f..f71cba593e6 100644 --- a/modular_nova/master_files/code/modules/clothing/clothing_variation_overrides/under.dm +++ b/modular_nova/master_files/code/modules/clothing/clothing_variation_overrides/under.dm @@ -53,9 +53,6 @@ supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION_NO_NEW_ICON gets_cropped_on_taurs = FALSE -/obj/item/clothing/under/rank/rnd/research_director/alt - supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION_NO_NEW_ICON - /obj/item/clothing/under/rank/rnd/research_director/turtleneck/skirt supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION_NO_NEW_ICON gets_cropped_on_taurs = FALSE diff --git a/modular_nova/master_files/code/modules/clothing/head/_head.dm b/modular_nova/master_files/code/modules/clothing/head/_head.dm index 6b25cd4be98..f022fc99ac8 100644 --- a/modular_nova/master_files/code/modules/clothing/head/_head.dm +++ b/modular_nova/master_files/code/modules/clothing/head/_head.dm @@ -46,6 +46,24 @@ /obj/item/clothing/head/helmet/chaplain worn_icon_muzzled = 'modular_nova/master_files/icons/mob/clothing/head/chaplain_muzzled.dmi' +/obj/item/clothing/head/hooded/monkhabit + greyscale_config = /datum/greyscale_config/monk_habit_hood + greyscale_config_worn = /datum/greyscale_config/monk_habit_hood/worn + greyscale_colors = "#8C531A#9C7132" + flags_1 = IS_PLAYER_COLORABLE_1 + +/obj/item/clothing/head/chaplain/nun_hood + greyscale_config = /datum/greyscale_config/nun_hood + greyscale_config_worn = /datum/greyscale_config/nun_hood/worn + greyscale_colors = "#373548#FFFFFF" + flags_1 = IS_PLAYER_COLORABLE_1 + +/obj/item/clothing/head/chaplain/habit_veil + greyscale_config = /datum/greyscale_config/nun_veil + greyscale_config_worn = /datum/greyscale_config/nun_veil/worn + greyscale_colors = "#373548#FFFFFF" + flags_1 = IS_PLAYER_COLORABLE_1 + /obj/item/clothing/head/collectable/welding worn_icon_muzzled = 'modular_nova/master_files/icons/mob/clothing/head_muzzled.dmi' supports_variations_flags = CLOTHING_SNOUTED_VARIATION diff --git a/modular_nova/master_files/code/modules/clothing/suits/_suits.dm b/modular_nova/master_files/code/modules/clothing/suits/_suits.dm index f2d6570c1e2..d9ffd81b445 100644 --- a/modular_nova/master_files/code/modules/clothing/suits/_suits.dm +++ b/modular_nova/master_files/code/modules/clothing/suits/_suits.dm @@ -24,3 +24,32 @@ /obj/item/clothing/suit/hooded/chaplainsuit worn_icon_digi = 'modular_nova/master_files/icons/mob/clothing/suits/chaplain_digi.dmi' + +/obj/item/clothing/suit/chaplainsuit/habit + greyscale_config = /datum/greyscale_config/chappy_habit + greyscale_config_worn = /datum/greyscale_config/chappy_habit/worn + greyscale_colors = "#373548#FFFFFF#D29722" + flags_1 = IS_PLAYER_COLORABLE_1 + +/obj/item/clothing/suit/hooded/chaplainsuit/monkhabit + greyscale_config = /datum/greyscale_config/monk_habit + greyscale_config_worn = /datum/greyscale_config/monk_habit/worn + greyscale_colors = "#8C531A#9C7132" + flags_1 = IS_PLAYER_COLORABLE_1 + +// Monk habit hood needs to match; code pulled from wintercoats. +/obj/item/clothing/suit/hooded/chaplainsuit/monkhabit/set_greyscale(list/colors, new_config, new_worn_config, new_inhand_left, new_inhand_right) + . = ..() + if(!hood) + return + var/list/coat_colors = SSgreyscale.ParseColorString(greyscale_colors) + var/list/new_coat_colors = coat_colors.Copy(1,3) + hood.set_greyscale(new_coat_colors) //Adopt the suit's grayscale coloring for visual clarity. + hood.update_slot_icon() + +//But also keep old method in case the hood is (re-)created later +/obj/item/clothing/suit/hooded/chaplainsuit/monkhabit/on_hood_created(obj/item/clothing/head/hooded/hood) + . = ..() + var/list/coat_colors = (SSgreyscale.ParseColorString(greyscale_colors)) + var/list/new_coat_colors = coat_colors.Copy(1,3) + hood.set_greyscale(new_coat_colors) //Adopt the suit's grayscale coloring for visual clarity. diff --git a/modular_nova/master_files/code/modules/clothing/under/costume.dm b/modular_nova/master_files/code/modules/clothing/under/costume.dm index 7db737f5fd6..62b30a875b9 100644 --- a/modular_nova/master_files/code/modules/clothing/under/costume.dm +++ b/modular_nova/master_files/code/modules/clothing/under/costume.dm @@ -63,25 +63,37 @@ flags_1 = IS_PLAYER_COLORABLE_1 gets_cropped_on_taurs = FALSE +/obj/item/clothing/under/costume/nova/qipao/customtrim + greyscale_colors = "#2b2b2b#ffce5b" + greyscale_config = /datum/greyscale_config/qipao_customtrim + greyscale_config_worn = /datum/greyscale_config/qipao_customtrim/worn + greyscale_config_worn_digi = /datum/greyscale_config/qipao_customtrim/worn/digi + /obj/item/clothing/under/costume/nova/cheongsam name = "cheongsam" desc = "A cheongsam, traditionally worn in ancient Earth China by men during social events and lunar new years." icon_state = "cheongsam" body_parts_covered = CHEST|GROIN|LEGS female_sprite_flags = FEMALE_UNIFORM_TOP_ONLY - greyscale_colors = "#2b2b2b" + greyscale_colors = "#2b2b2b#353535" greyscale_config = /datum/greyscale_config/cheongsam greyscale_config_worn = /datum/greyscale_config/cheongsam/worn greyscale_config_worn_digi = /datum/greyscale_config/cheongsam/worn/digi flags_1 = IS_PLAYER_COLORABLE_1 gets_cropped_on_taurs = FALSE +/obj/item/clothing/under/costume/nova/cheongsam/customtrim + greyscale_colors = "#2b2b2b#ffce5b#353535" + greyscale_config = /datum/greyscale_config/cheongsam_customtrim + greyscale_config_worn = /datum/greyscale_config/cheongsam_customtrim/worn + greyscale_config_worn_digi = /datum/greyscale_config/cheongsam_customtrim/worn/digi + /obj/item/clothing/under/costume/nova/yukata name = "yukata" desc = "A traditional ancient Earth Japanese yukata, typically worn in casual settings." icon_state = "yukata" female_sprite_flags = FEMALE_UNIFORM_TOP_ONLY - greyscale_colors = "#2b2b2b" + greyscale_colors = "#2b2b2b#666666" greyscale_config = /datum/greyscale_config/yukata greyscale_config_worn = /datum/greyscale_config/yukata/worn greyscale_config_worn_digi = /datum/greyscale_config/yukata/worn/digi @@ -136,3 +148,18 @@ name = "sexy green christmas costume" desc = "Stupid. Ugly. Out of date. If I can't find something nice to wear I'm not going." greyscale_colors = "#1a991a#c4c2c2" + +/* +* TREK CLOTHES +*/ +/obj/item/clothing/under/trek/command + greyscale_config_worn_digi = /datum/greyscale_config/trek/worn/digi + flags_1 = IS_PLAYER_COLORABLE_1 + +/obj/item/clothing/under/trek/engsec + greyscale_config_worn_digi = /datum/greyscale_config/trek/worn/digi + flags_1 = IS_PLAYER_COLORABLE_1 + +/obj/item/clothing/under/trek/medsci + greyscale_config_worn_digi = /datum/greyscale_config/trek/worn/digi + flags_1 = IS_PLAYER_COLORABLE_1 diff --git a/modular_nova/master_files/code/modules/clothing/under/jobs/cargo.dm b/modular_nova/master_files/code/modules/clothing/under/jobs/cargo.dm index 2b9e911469b..d59bb5cd1a7 100644 --- a/modular_nova/master_files/code/modules/clothing/under/jobs/cargo.dm +++ b/modular_nova/master_files/code/modules/clothing/under/jobs/cargo.dm @@ -1,5 +1,5 @@ /obj/item/clothing/under/rank/cargo - worn_icon_digi = 'modular_nova/master_files/icons/mob/clothing/under/cargo_digi.dmi' // Anything that was in the cargo.dmi, should be in the cargo_digi.dmi + worn_icon_digi = 'modular_nova/master_files/icons/mob/clothing/under/cargo_digi.dmi' /obj/item/clothing/under/rank/cargo/tech/nova icon = 'modular_nova/master_files/icons/obj/clothing/under/cargo.dmi' diff --git a/modular_nova/master_files/code/modules/clothing/under/jobs/centcom.dm b/modular_nova/master_files/code/modules/clothing/under/jobs/centcom.dm index 9c85dabdfe2..9eafc1fd565 100644 --- a/modular_nova/master_files/code/modules/clothing/under/jobs/centcom.dm +++ b/modular_nova/master_files/code/modules/clothing/under/jobs/centcom.dm @@ -2,7 +2,7 @@ //Try to keep them all a subtype of centcom/nova, for file sorting and balance - all faction representatives should have the same/similarly armored uniforms /obj/item/clothing/under/rank/centcom - worn_icon_digi = 'modular_nova/master_files/icons/mob/clothing/under/centcom_digi.dmi' // Anything that was in the rnd.dmi, should be in the rnd_digi.dmi + worn_icon_digi = 'modular_nova/master_files/icons/mob/clothing/under/centcom_digi.dmi' /obj/item/clothing/under/rank/centcom/nova icon = 'modular_nova/master_files/icons/obj/clothing/under/centcom.dmi' diff --git a/modular_nova/master_files/code/modules/clothing/under/jobs/civilian/civilian.dm b/modular_nova/master_files/code/modules/clothing/under/jobs/civilian/civilian.dm index d4e9d3f07e3..db511f58619 100644 --- a/modular_nova/master_files/code/modules/clothing/under/jobs/civilian/civilian.dm +++ b/modular_nova/master_files/code/modules/clothing/under/jobs/civilian/civilian.dm @@ -1,5 +1,5 @@ /obj/item/clothing/under/rank/civilian - worn_icon_digi = 'modular_nova/master_files/icons/mob/clothing/under/civilian_digi.dmi' //Anything that was in TG's civilian.dmi, should be in our civilian_digi.dmi + worn_icon_digi = 'modular_nova/master_files/icons/mob/clothing/under/civilian_digi.dmi' /obj/item/clothing/under/rank/civilian/lawyer // Lawyers' suits are in TG's suits.dmi worn_icon_digi = 'modular_nova/master_files/icons/mob/clothing/under/suits_digi.dmi' diff --git a/modular_nova/master_files/code/modules/clothing/under/jobs/civilian/suits.dm b/modular_nova/master_files/code/modules/clothing/under/jobs/civilian/suits.dm index ac23d6bc40f..34022e47afd 100644 --- a/modular_nova/master_files/code/modules/clothing/under/jobs/civilian/suits.dm +++ b/modular_nova/master_files/code/modules/clothing/under/jobs/civilian/suits.dm @@ -1,6 +1,6 @@ /obj/item/clothing/under/suit - worn_icon_digi = 'modular_nova/master_files/icons/mob/clothing/under/suits_digi.dmi' //Anything that was in TG's suits.dmi, should be in our suits_digi.dmi + worn_icon_digi = 'modular_nova/master_files/icons/mob/clothing/under/suits_digi.dmi' /obj/item/clothing/under/suit/nova icon = 'modular_nova/master_files/icons/obj/clothing/under/suits.dmi' @@ -34,51 +34,102 @@ greyscale_config_worn = /datum/greyscale_config/recolorable_suitskirt/worn greyscale_config_worn_digi = /datum/greyscale_config/recolorable_suitskirt/worn/digi -/* -* SUITS -*/ +/obj/item/clothing/under/suit/nova/recolorable/casual + name = "office casual suit" + desc = "A semi-formal suit, clean-cut with a matching vest and slacks." + icon_state = "fancysuit_casual" + greyscale_config = /datum/greyscale_config/fancysuit_casual + greyscale_config_worn = /datum/greyscale_config/fancysuit_casual/worn + greyscale_config_worn_digi = /datum/greyscale_config/fancysuit_casual/worn/digi + greyscale_colors = "#37373e#ffffff" + +/obj/item/clothing/under/suit/nova/recolorable/executive + name = "executive casual suit" + desc = "A formal suit, clean-cut with a matching vest, undershirt, tie and slacks." + icon_state = "fancysuit_executive" + greyscale_config = /datum/greyscale_config/fancysuit_executive + greyscale_config_worn = /datum/greyscale_config/fancysuit_executive/worn + greyscale_config_worn_digi = /datum/greyscale_config/fancysuit_executive/worn/digi + greyscale_colors = "#37373e#37373e#ffffff#ac3232" + /obj/item/clothing/under/suit/nova/pencil - name = "black pencilskirt" - desc = "A clean white shirt with a tight-fitting black pencilskirt." - icon_state = "black_pencil" + name = "pencilskirt and shirt" + desc = "A clean shirt with a tight-fitting pencilskirt." + icon_state = "pencilskirt_shirt" female_sprite_flags = FEMALE_UNIFORM_TOP_ONLY gets_cropped_on_taurs = FALSE + greyscale_colors = "#37373e#ffffff" + greyscale_config = /datum/greyscale_config/pencilskirt_withshirt + greyscale_config_worn = /datum/greyscale_config/pencilskirt_withshirt/worn + greyscale_config_worn_digi = /datum/greyscale_config/pencilskirt_withshirt/worn/digi + flags_1 = IS_PLAYER_COLORABLE_1 -/obj/item/clothing/under/suit/nova/pencil/black_really - name = "executive pencilskirt" - desc = "A sleek suit with a tight-fitting black pencilskirt." - icon_state = "really_black_pencil" +/obj/item/clothing/under/suit/nova/pencil/noshirt + name = "pencilskirt" + desc = "A tight-fitting pencilskirt, perfect to augment an undershirt." + icon_state = "pencilskirt" + greyscale_colors = "#37373e" + greyscale_config = /datum/greyscale_config/pencilskirt + greyscale_config_worn = /datum/greyscale_config/pencilskirt/worn + greyscale_config_worn_digi = /datum/greyscale_config/pencilskirt/worn/digi + body_parts_covered = GROIN|LEGS /obj/item/clothing/under/suit/nova/pencil/charcoal name = "charcoal pencilskirt" desc = "A clean white shirt with a tight-fitting charcoal pencilskirt." - icon_state = "charcoal_pencil" + greyscale_colors = "#303030#ffffff" /obj/item/clothing/under/suit/nova/pencil/navy name = "navy pencilskirt" desc = "A clean white shirt with a tight-fitting navy-blue pencilskirt." - icon_state = "navy_pencil" + greyscale_colors = "#112334#ffffff" /obj/item/clothing/under/suit/nova/pencil/burgandy name = "burgandy pencilskirt" desc = "A clean white shirt with a tight-fitting burgandy-red pencilskirt." - icon_state = "burgandy_pencil" - -/obj/item/clothing/under/suit/nova/pencil/checkered - name = "checkered pencilskirt" - desc = "A clean white shirt with a tight-fitting grey checkered pencilskirt." - icon_state = "checkered_pencil" + greyscale_colors = "#3e1111#ffffff" /obj/item/clothing/under/suit/nova/pencil/tan name = "tan pencilskirt" desc = "A clean white shirt with a tight-fitting tan pencilskirt." - icon_state = "tan_pencil" + greyscale_colors = "#8b7458#ffffff" /obj/item/clothing/under/suit/nova/pencil/green name = "green pencilskirt" desc = "A clean white shirt with a tight-fitting green pencilskirt." - icon_state = "green_pencil" + greyscale_colors = "#113e20#ffffff" +/obj/item/clothing/under/suit/nova/pencil/black_really + name = "executive pencilskirt" + desc = "A sleek suit with a tight-fitting pencilskirt." + icon_state = "pencilskirt_suit" + greyscale_colors = "#37373e#37373e#ffffff#ac3232" + greyscale_config = /datum/greyscale_config/pencilskirt_withsuit + greyscale_config_worn = /datum/greyscale_config/pencilskirt_withsuit/worn + greyscale_config_worn_digi = /datum/greyscale_config/pencilskirt_withsuit/worn/digi + +/obj/item/clothing/under/suit/nova/pencil/checkered + name = "checkered pencilskirt and shirt" + desc = "A clean shirt with a tight-fitting checkered pencilskirt." + icon_state = "pencilskirt_checkers_shirt" + greyscale_colors = "#37373e#232323#ffffff" + greyscale_config = /datum/greyscale_config/pencilskirt_checkers_withshirt + greyscale_config_worn = /datum/greyscale_config/pencilskirt_checkers_withshirt/worn + greyscale_config_worn_digi = /datum/greyscale_config/pencilskirt_checkers_withshirt/worn/digi + +/obj/item/clothing/under/suit/nova/pencil/checkered/noshirt + name = "checkered pencilskirt" + desc = "A tight-fitting checkered pencilskirt." + icon_state = "pencilskirt_checkers" + greyscale_colors = "#37373e#232323" + greyscale_config = /datum/greyscale_config/pencilskirt_checkers + greyscale_config_worn = /datum/greyscale_config/pencilskirt_checkers/worn + greyscale_config_worn_digi = /datum/greyscale_config/pencilskirt_checkers/worn/digi + body_parts_covered = GROIN|LEGS + +/* +* STATIC SUITS (NO GAGS) +*/ /obj/item/clothing/under/suit/nova/scarface name = "cuban suit" desc = "A yayo coloured silk suit with a crimson shirt. You just know how to hide, how to lie. Me, I don't have that problem. Me, I always tell the truth. Even when I lie." diff --git a/modular_nova/master_files/code/modules/clothing/under/jobs/command.dm b/modular_nova/master_files/code/modules/clothing/under/jobs/command.dm index 7e1f8884d35..0e77a1d91ea 100644 --- a/modular_nova/master_files/code/modules/clothing/under/jobs/command.dm +++ b/modular_nova/master_files/code/modules/clothing/under/jobs/command.dm @@ -1,5 +1,5 @@ /obj/item/clothing/under/rank/captain - worn_icon_digi = 'modular_nova/master_files/icons/mob/clothing/under/command_digi.dmi' //Anything that was in TG's captain.dmi, should be in our command_digi.dmi + worn_icon_digi = 'modular_nova/master_files/icons/mob/clothing/under/command_digi.dmi' //NOTE - TG uses "captain.dmi"; because we have a few non-captain items going in here for ease of access, this will just be "command.dmi" /obj/item/clothing/under/rank/captain/nova diff --git a/modular_nova/master_files/code/modules/clothing/under/jobs/engineering.dm b/modular_nova/master_files/code/modules/clothing/under/jobs/engineering.dm index 54cded01a4e..ac45a01bb58 100644 --- a/modular_nova/master_files/code/modules/clothing/under/jobs/engineering.dm +++ b/modular_nova/master_files/code/modules/clothing/under/jobs/engineering.dm @@ -1,5 +1,5 @@ /obj/item/clothing/under/rank/engineering - worn_icon_digi = 'modular_nova/master_files/icons/mob/clothing/under/engineering_digi.dmi' // Anything that was in the engineering.dmi, should be in the engineering_digi.dmi + worn_icon_digi = 'modular_nova/master_files/icons/mob/clothing/under/engineering_digi.dmi' /obj/item/clothing/under/rank/engineering/engineer/nova icon = 'modular_nova/master_files/icons/obj/clothing/under/engineering.dmi' diff --git a/modular_nova/master_files/code/modules/clothing/under/jobs/medical.dm b/modular_nova/master_files/code/modules/clothing/under/jobs/medical.dm index 225a1740bc7..d8edee5f019 100644 --- a/modular_nova/master_files/code/modules/clothing/under/jobs/medical.dm +++ b/modular_nova/master_files/code/modules/clothing/under/jobs/medical.dm @@ -1,5 +1,5 @@ /obj/item/clothing/under/rank/medical - worn_icon_digi = 'modular_nova/master_files/icons/mob/clothing/under/medical_digi.dmi' // Anything that was in the medical.dmi, should be in the medical_digi.dmi + worn_icon_digi = 'modular_nova/master_files/icons/mob/clothing/under/medical_digi.dmi' /obj/item/clothing/under/rank/medical/doctor/nova icon = 'modular_nova/master_files/icons/obj/clothing/under/medical.dmi' diff --git a/modular_nova/master_files/code/modules/clothing/under/jobs/rnd.dm b/modular_nova/master_files/code/modules/clothing/under/jobs/rnd.dm index 563d4fa79c8..a5e1c13a4ec 100644 --- a/modular_nova/master_files/code/modules/clothing/under/jobs/rnd.dm +++ b/modular_nova/master_files/code/modules/clothing/under/jobs/rnd.dm @@ -1,20 +1,23 @@ -/* - * RESEARCH DIRECTOR - */ /obj/item/clothing/under/rank/rnd - worn_icon_digi = 'modular_nova/master_files/icons/mob/clothing/under/rnd_digi.dmi' // Anything that was in the rnd.dmi, should be in the rnd_digi.dmi + worn_icon_digi = 'modular_nova/master_files/icons/mob/clothing/under/rnd_digi.dmi' + +/obj/item/clothing/under/rank/rnd/research_director/alt + greyscale_config_worn_digi = /datum/greyscale_config/buttondown_slacks/worn/digi /obj/item/clothing/under/rank/rnd/scientist/nova icon = 'modular_nova/master_files/icons/obj/clothing/under/rnd.dmi' worn_icon = 'modular_nova/master_files/icons/mob/clothing/under/rnd.dmi' + icon_state = null //debug item /obj/item/clothing/under/rank/rnd/roboticist/nova icon = 'modular_nova/master_files/icons/obj/clothing/under/rnd.dmi' worn_icon = 'modular_nova/master_files/icons/mob/clothing/under/rnd.dmi' + icon_state = null //debug item /obj/item/clothing/under/rank/rnd/research_director/nova icon = 'modular_nova/master_files/icons/obj/clothing/under/rnd.dmi' worn_icon = 'modular_nova/master_files/icons/mob/clothing/under/rnd.dmi' + icon_state = null //debug item /* * GENETICIST (TO-DO) @@ -38,7 +41,6 @@ /* * SCIENTIST */ - /obj/item/clothing/under/rank/rnd/scientist/nova/utility name = "science utility uniform" desc = "A utility uniform worn by NT-certified Science staff." @@ -57,65 +59,10 @@ icon_state = "hl_scientist" can_adjust = FALSE -/* - * ROBOTICIST - */ - -/obj/item/clothing/under/rank/rnd/roboticist/nova/sleek - name = "sleek roboticst jumpsuit" - desc = "A sleek version of the roboticist uniform, complete with amber sci-fi stripes." - icon_state = "robosleek" - can_adjust = FALSE - /* * RESEARCH DIRECTOR */ - -/obj/item/clothing/under/rank/rnd/research_director/nova/jumpsuit - name = "research director's jumpsuit" - desc = "A shiny nano-weave uniform for those holding the title of \"Research Director\". Its fabric provides minor protection from biological contaminants." - icon_state = "director_jumpsuit" - can_adjust = TRUE - alt_covers_chest = TRUE - -/obj/item/clothing/under/rank/rnd/research_director/nova/jumpsuit/skirt // I know this seems wrong, but its for consistency sake; its the skirt version OF the jumpsuit - name = "research director's jumpskirt" - icon_state = "director_jumpskirt" - body_parts_covered = CHEST|GROIN|ARMS - dying_key = DYE_REGISTRY_JUMPSKIRT - female_sprite_flags = FEMALE_UNIFORM_TOP_ONLY - supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION_NO_NEW_ICON - /obj/item/clothing/under/rank/rnd/research_director/nova/imperial //Rank pins of the Major General desc = "An off-white naval suit over black pants, with a rank badge denoting the Officer of the Internal Science Division. It's a peaceful life." name = "research director's naval jumpsuit" icon_state = "imprd" - -/* -* OVERRIDES -* ORION TODO: look over these when TG finishes their science resprites (any day now...) -*/ - -/obj/item/clothing/under/rank/rnd/scientist - icon = 'modular_nova/master_files/icons/obj/clothing/under/rnd.dmi' - worn_icon = 'modular_nova/master_files/icons/mob/clothing/under/rnd.dmi' - icon_state = "science_new" - -/obj/item/clothing/under/rank/rnd/scientist/skirt - icon_state = "sciwhite_skirt_new" - -/obj/item/clothing/under/rank/rnd/roboticist - icon = 'modular_nova/master_files/icons/obj/clothing/under/rnd.dmi' - worn_icon = 'modular_nova/master_files/icons/mob/clothing/under/rnd.dmi' - icon_state = "robotics_new" - -/obj/item/clothing/under/rank/rnd/roboticist/skirt - icon_state = "robotics_skirt_new" - -/obj/item/clothing/under/rank/rnd/geneticist - icon = 'modular_nova/master_files/icons/obj/clothing/under/rnd.dmi' - worn_icon = 'modular_nova/master_files/icons/mob/clothing/under/rnd.dmi' - icon_state = "genetics_new" - -/obj/item/clothing/under/rank/rnd/geneticist/skirt - icon_state = "geneticswhite_skirt_new" diff --git a/modular_nova/master_files/code/modules/clothing/under/jobs/security.dm b/modular_nova/master_files/code/modules/clothing/under/jobs/security.dm index fdedb02838a..9cf46dbec20 100644 --- a/modular_nova/master_files/code/modules/clothing/under/jobs/security.dm +++ b/modular_nova/master_files/code/modules/clothing/under/jobs/security.dm @@ -1,5 +1,5 @@ /obj/item/clothing/under/rank/security - worn_icon_digi = 'modular_nova/master_files/icons/mob/clothing/under/security_digi.dmi' // Anything that was in the security.dmi, should be in the security_digi.dmi + worn_icon_digi = 'modular_nova/master_files/icons/mob/clothing/under/security_digi.dmi' /obj/item/clothing/under/rank/security/nova icon = 'modular_nova/master_files/icons/obj/clothing/under/security.dmi' diff --git a/modular_nova/master_files/code/modules/clothing/under/shorts_pants.dm b/modular_nova/master_files/code/modules/clothing/under/shorts_pants.dm index 833571ab86b..22178340d6a 100644 --- a/modular_nova/master_files/code/modules/clothing/under/shorts_pants.dm +++ b/modular_nova/master_files/code/modules/clothing/under/shorts_pants.dm @@ -106,3 +106,30 @@ greyscale_colors = "#8b2c2c#222227#222227#fbc056" body_parts_covered = CHEST|GROIN|LEGS|ARMS flags_1 = IS_PLAYER_COLORABLE_1 + +/* +* Shorts that were previously using nonmodular edits to add their greyscale data, pulled from code/modules/clothing/under/shorts.dm +*/ + +/obj/item/clothing/under/shorts + greyscale_config_worn_digi = /datum/greyscale_config/shorts/worn/digi + +/obj/item/clothing/under/shorts/jeanshorts + greyscale_config_worn_digi = /datum/greyscale_config/jeanshorts/worn/digi + +/* +* Pants that were previously using nonmodular edits to add their greyscale data, pulled from code/modules/clothing/under/pants.dm +*/ + +/obj/item/clothing/under/pants/slacks + greyscale_config_worn_digi = /datum/greyscale_config/slacks/worn/digi + +/obj/item/clothing/under/pants/jeans + greyscale_config_worn_digi = /datum/greyscale_config/jeans/worn/digi + +/obj/item/clothing/under/pants/camo + greyscale_config = /datum/greyscale_config/camo_pants + greyscale_config_worn = /datum/greyscale_config/camo_pants/worn + greyscale_config_worn_digi = /datum/greyscale_config/camo_pants/worn/digi + greyscale_colors = "#69704C#6E5B4C#343741" + flags_1 = IS_PLAYER_COLORABLE_1 diff --git a/modular_nova/master_files/code/modules/clothing/under/syndicate.dm b/modular_nova/master_files/code/modules/clothing/under/syndicate.dm index b6172cc6682..504575c1252 100644 --- a/modular_nova/master_files/code/modules/clothing/under/syndicate.dm +++ b/modular_nova/master_files/code/modules/clothing/under/syndicate.dm @@ -3,7 +3,7 @@ #define RESKIN_SYNDIE "Syndicate Red" /obj/item/clothing/under/syndicate - worn_icon_digi = 'modular_nova/master_files/icons/mob/clothing/under/syndicate_digi.dmi' // Anything that was in the syndicate.dmi, should be in the syndicate_digi.dmi + worn_icon_digi = 'modular_nova/master_files/icons/mob/clothing/under/syndicate_digi.dmi' /obj/item/clothing/under/syndicate/nova icon = 'modular_nova/master_files/icons/obj/clothing/under/syndicate.dmi' diff --git a/modular_nova/master_files/code/modules/jobs/job_types/assistant/assistant.dm b/modular_nova/master_files/code/modules/jobs/job_types/assistant/assistant.dm new file mode 100644 index 00000000000..fdaf36c7db0 --- /dev/null +++ b/modular_nova/master_files/code/modules/jobs/job_types/assistant/assistant.dm @@ -0,0 +1,14 @@ +/datum/job/assistant + allow_bureaucratic_error = FALSE + +/datum/outfit/job/assistant + uniform = /obj/item/clothing/under/color/random + +// reverse the uniform override if we have a loadout uniform, we don't want to replace that +/datum/outfit/job/assistant/give_jumpsuit(mob/living/carbon/human/target) + var/original_uniform = uniform + + . = ..() + + if(modified_outfit_slots & ITEM_SLOT_ICLOTHING) + uniform = original_uniform diff --git a/modular_nova/master_files/code/modules/jobs/job_types/roboticist.dm b/modular_nova/master_files/code/modules/jobs/job_types/roboticist.dm index 35e4f206de1..1c1212b0154 100644 --- a/modular_nova/master_files/code/modules/jobs/job_types/roboticist.dm +++ b/modular_nova/master_files/code/modules/jobs/job_types/roboticist.dm @@ -23,4 +23,5 @@ /obj/item/storage/pill_bottle/system_cleaner = 6, /obj/item/storage/pill_bottle/nanite_slurry = 6, /obj/item/reagent_containers/spray/hercuri/chilled = 8, + /obj/item/reagent_containers/spray/dinitrogen_plasmide = 8, ) diff --git a/modular_nova/master_files/code/modules/jobs/job_types/spawner/ghost_role.dm b/modular_nova/master_files/code/modules/jobs/job_types/spawner/ghost_role.dm new file mode 100644 index 00000000000..fa622912aee --- /dev/null +++ b/modular_nova/master_files/code/modules/jobs/job_types/spawner/ghost_role.dm @@ -0,0 +1,2 @@ +/datum/job/ghost_role + paycheck = PAYCHECK_ZERO diff --git a/modular_nova/master_files/code/modules/jobs/prisoner.dm b/modular_nova/master_files/code/modules/jobs/prisoner.dm new file mode 100644 index 00000000000..0b9a4c40bd2 --- /dev/null +++ b/modular_nova/master_files/code/modules/jobs/prisoner.dm @@ -0,0 +1,15 @@ +/datum/outfit/job/prisoner/post_equip(mob/living/carbon/human/new_prisoner, visualsOnly) + . = ..() + + var/implants_removed = 0 + var/implants_total = 0 + + for(var/obj/item/organ/internal/cyberimp/cybernetic in new_prisoner.organs) + implants_total += 1 + if (cybernetic.cannot_confiscate) + continue + QDEL_NULL(cybernetic) + implants_removed += 1 + + if (implants_removed >= 1) + to_chat(new_prisoner, span_warning("[(implants_total > implants_removed) ? "Some of your" : "Your"] implants have been confiscated as part of your sentence.")) diff --git a/modular_nova/master_files/code/modules/language/language_holder.dm b/modular_nova/master_files/code/modules/language/language_holder.dm index 98cfd7e00af..e4046b55087 100644 --- a/modular_nova/master_files/code/modules/language/language_holder.dm +++ b/modular_nova/master_files/code/modules/language/language_holder.dm @@ -62,3 +62,68 @@ GLOBAL_DATUM_INIT(language_holder_adjustor, /datum/language_holder_adjustor, new /datum/language/machine = list(LANGUAGE_ATOM)) spoken_languages = list(/datum/language/common = list(LANGUAGE_ATOM), /datum/language/machine = list(LANGUAGE_ATOM)) + +/// Modularized the Cyborg and AI language_holder, add here the languages that you want them to be able to speak and understand. +/datum/language_holder/synthetic + understood_languages = list( + /datum/language/common = list(LANGUAGE_ATOM), + /datum/language/uncommon = list(LANGUAGE_ATOM), + /datum/language/machine = list(LANGUAGE_ATOM), + /datum/language/draconic = list(LANGUAGE_ATOM), + /datum/language/moffic = list(LANGUAGE_ATOM), + /datum/language/calcic = list(LANGUAGE_ATOM), + /datum/language/voltaic = list(LANGUAGE_ATOM), + /datum/language/nekomimetic = list(LANGUAGE_ATOM), + /datum/language/gutter = list(LANGUAGE_ATOM), + /datum/language/panslavic = list(LANGUAGE_ATOM), + /datum/language/skrell = list(LANGUAGE_ATOM), + /datum/language/spacer = list(LANGUAGE_ATOM), + /datum/language/xerxian = list(LANGUAGE_ATOM), + /datum/language/vox = list(LANGUAGE_ATOM), + /datum/language/yangyu = list(LANGUAGE_ATOM), + /datum/language/schechi = list(LANGUAGE_ATOM), + /datum/language/monkey = list(LANGUAGE_ATOM), + /datum/language/slime = list(LANGUAGE_ATOM), + /datum/language/beachbum = list(LANGUAGE_ATOM), + /datum/language/mushroom = list(LANGUAGE_ATOM), + /datum/language/shadowtongue = list(LANGUAGE_ATOM), + /datum/language/buzzwords = list(LANGUAGE_ATOM), + /datum/language/terrum = list(LANGUAGE_ATOM), + /datum/language/sylvan = list(LANGUAGE_ATOM), + /datum/language/siiktajr = list(LANGUAGE_ATOM), + /datum/language/canilunzt = list(LANGUAGE_ATOM), + /datum/language/akulan = list(LANGUAGE_ATOM), + ) + spoken_languages = list( + /datum/language/common = list(LANGUAGE_ATOM), + /datum/language/uncommon = list(LANGUAGE_ATOM), + /datum/language/machine = list(LANGUAGE_ATOM), + /datum/language/draconic = list(LANGUAGE_ATOM), + /datum/language/moffic = list(LANGUAGE_ATOM), + /datum/language/calcic = list(LANGUAGE_ATOM), + /datum/language/voltaic = list(LANGUAGE_ATOM), + /datum/language/nekomimetic = list(LANGUAGE_ATOM), + /datum/language/gutter = list(LANGUAGE_ATOM), + /datum/language/panslavic = list(LANGUAGE_ATOM), + /datum/language/skrell = list(LANGUAGE_ATOM), + /datum/language/spacer = list(LANGUAGE_ATOM), + /datum/language/xerxian = list(LANGUAGE_ATOM), + /datum/language/vox = list(LANGUAGE_ATOM), + /datum/language/yangyu = list(LANGUAGE_ATOM), + /datum/language/schechi = list(LANGUAGE_ATOM), + /datum/language/monkey = list(LANGUAGE_ATOM), + /datum/language/slime = list(LANGUAGE_ATOM), + /datum/language/beachbum = list(LANGUAGE_ATOM), + /datum/language/mushroom = list(LANGUAGE_ATOM), + /datum/language/shadowtongue = list(LANGUAGE_ATOM), + /datum/language/buzzwords = list(LANGUAGE_ATOM), + /datum/language/terrum = list(LANGUAGE_ATOM), + /datum/language/sylvan = list(LANGUAGE_ATOM), + /datum/language/siiktajr = list(LANGUAGE_ATOM), + /datum/language/canilunzt = list(LANGUAGE_ATOM), + /datum/language/akulan = list(LANGUAGE_ATOM), + ) + +/datum/language_holder/drone_nova + understood_languages = list(/datum/language/drone = list(LANGUAGE_ATOM), /datum/language/common = list(LANGUAGE_ATOM)) + spoken_languages = list(/datum/language/drone = list(LANGUAGE_ATOM)) diff --git a/modular_nova/master_files/code/modules/mob/living/carbon/carbon_defense.dm b/modular_nova/master_files/code/modules/mob/living/carbon/carbon_defense.dm new file mode 100644 index 00000000000..89120849497 --- /dev/null +++ b/modular_nova/master_files/code/modules/mob/living/carbon/carbon_defense.dm @@ -0,0 +1,46 @@ +#define PERSONAL_SPACE_DAMAGE 2 +#define ASS_SLAP_EXTRA_RANGE -1 + +// Emotes +/mob/living/carbon/disarm(mob/living/carbon/target) + if(zone_selected == BODY_ZONE_PRECISE_MOUTH) + var/target_on_help_and_unarmed = !target.combat_mode && !target.get_active_held_item() + if(target_on_help_and_unarmed || HAS_TRAIT(target, TRAIT_RESTRAINED)) + do_slap_animation(target) + playsound(target.loc, 'sound/weapons/slap.ogg', 50, TRUE, -1) + visible_message("[src] slaps [target] in the face!", + "You slap [target] in the face! ",\ + "You hear a slap.") + target.unwag_tail() + return + if(zone_selected == BODY_ZONE_PRECISE_GROIN && target.dir == src.dir) + if(HAS_TRAIT(target, TRAIT_PERSONALSPACE) && (target.stat != UNCONSCIOUS) && (!target.handcuffed)) //You need to be conscious and uncuffed to use Personal Space + if(target.combat_mode && (!HAS_TRAIT(target, TRAIT_PACIFISM))) //Being pacified prevents violent counters + var/obj/item/bodypart/affecting = src.get_bodypart(BODY_ZONE_HEAD) + if(affecting?.receive_damage(PERSONAL_SPACE_DAMAGE)) + src.update_damage_overlays() + visible_message(span_danger("[src] tried slapping [target]'s ass, but they were slapped instead!"), + span_danger("You tried slapping [target]'s ass, but they hit you back, ouch!"), + "You hear a slap.", ignored_mobs = list(target)) + playsound(target.loc, 'sound/effects/snap.ogg', 50, TRUE, ASS_SLAP_EXTRA_RANGE) + to_chat(target, span_danger("[src] tried slapping your ass, but you hit them back!")) + return + else + visible_message(span_danger("[src] tried slapping [target]'s ass, but they were blocked!"), + span_danger("You tried slapping [target]'s ass, but they blocked you!"), + "You hear a slap.", ignored_mobs = list(target)) + playsound(target.loc, 'sound/weapons/thudswoosh.ogg', 50, TRUE, ASS_SLAP_EXTRA_RANGE) + to_chat(target, span_danger("[src] tried slapping your ass, but you blocked them!")) + return + else + do_ass_slap_animation(target) + playsound(target.loc, 'sound/weapons/slap.ogg', 50, TRUE, ASS_SLAP_EXTRA_RANGE) + visible_message("[src] slaps [target] right on the ass!",\ + "You slap [target] on the ass, how satisfying.",\ + "You hear a slap.", ignored_mobs = list(target)) + to_chat(target, "[src] slaps your ass!") + return + return ..() + +#undef PERSONAL_SPACE_DAMAGE +#undef ASS_SLAP_EXTRA_RANGE diff --git a/modular_nova/master_files/code/modules/mob/living/simple_animal/friendly/dogs.dm b/modular_nova/master_files/code/modules/mob/living/simple_animal/friendly/dogs.dm index 8340cc3c780..8b8dd90641b 100644 --- a/modular_nova/master_files/code/modules/mob/living/simple_animal/friendly/dogs.dm +++ b/modular_nova/master_files/code/modules/mob/living/simple_animal/friendly/dogs.dm @@ -22,6 +22,7 @@ /mob/living/basic/pet/dog/markus/Initialize(mapload) . = ..() + ADD_TRAIT(src, TRAIT_TRASHMAN, TRAIT_GENERIC) //The burgers in his belly protect him if(!can_breed) return AddComponent(\ @@ -86,7 +87,7 @@ can_breed = FALSE // These lights enable when E-N is emagged - light_system = MOVABLE_LIGHT_DIRECTIONAL + light_system = OVERLAY_LIGHT_DIRECTIONAL light_color = COLOR_RED light_range = 2 light_power = 0.8 diff --git a/modular_nova/master_files/code/modules/mob/living/simple_animal/friendly/poppy.dm b/modular_nova/master_files/code/modules/mob/living/simple_animal/friendly/poppy.dm index b210d39c1e8..ae65a4d382a 100644 --- a/modular_nova/master_files/code/modules/mob/living/simple_animal/friendly/poppy.dm +++ b/modular_nova/master_files/code/modules/mob/living/simple_animal/friendly/poppy.dm @@ -34,7 +34,7 @@ mob_size = MOB_SIZE_TINY mob_biotypes = MOB_ORGANIC|MOB_BEAST gold_core_spawnable = NO_SPAWN - light_system = MOVABLE_LIGHT_DIRECTIONAL + light_system = OVERLAY_LIGHT_DIRECTIONAL light_color = LIGHT_COLOR_BRIGHT_YELLOW light_range = 2 light_power = 0.8 diff --git a/modular_nova/master_files/code/modules/mob_spawn/ghost_roles/mining_roles.dm b/modular_nova/master_files/code/modules/mob_spawn/ghost_roles/mining_roles.dm index b6e0748f493..3dc4a3019c1 100644 --- a/modular_nova/master_files/code/modules/mob_spawn/ghost_roles/mining_roles.dm +++ b/modular_nova/master_files/code/modules/mob_spawn/ghost_roles/mining_roles.dm @@ -106,6 +106,7 @@ back = /obj/item/storage/backpack backpack_contents = list( /obj/item/storage/box/survival/interdyne=1, + /obj/item/storage/box/nif_ghost_box/ghost_role=1, /obj/item/healthanalyzer/simple/disease=1, ) gloves = /obj/item/clothing/gloves/tackler/combat/insulated @@ -134,6 +135,7 @@ ears = /obj/item/radio/headset/interdyne backpack_contents = list( /obj/item/storage/box/survival/interdyne=1, + /obj/item/storage/box/nif_ghost_box/ghost_role=1, /obj/item/healthanalyzer/simple/disease=1, /obj/item/clothing/suit/toggle/labcoat/interdyne=1, ) @@ -146,6 +148,7 @@ id_trim = /datum/id_trim/syndicom/nova/interdyne/shaftminer backpack_contents = list( /obj/item/storage/box/survival/interdyne=1, + /obj/item/storage/box/nif_ghost_box/ghost_role=1, /obj/item/flashlight/seclite=1, /obj/item/knife/combat/survival=1, /obj/item/mining_voucher=1, diff --git a/modular_nova/master_files/code/modules/mob_spawn/mob_spawn.dm b/modular_nova/master_files/code/modules/mob_spawn/mob_spawn.dm index c98f88f81d5..14350ff99ad 100644 --- a/modular_nova/master_files/code/modules/mob_spawn/mob_spawn.dm +++ b/modular_nova/master_files/code/modules/mob_spawn/mob_spawn.dm @@ -1,4 +1,4 @@ -/obj/effect/mob_spawn/ghost_role/ +/obj/effect/mob_spawn/ghost_role /// set this to make the spawner use the outfit.name instead of its name var for things like cryo announcements and ghost records /// modifying the actual name during the game will cause issues with the GLOB.mob_spawners associative list var/use_outfit_name @@ -13,31 +13,35 @@ if(appearance_choice == "Yes") load_prefs = TRUE - var/mob/living/carbon/human/spawned_human = ..(mob_possessor, newname, load_prefs) + var/mob/living/spawned_mob = ..(mob_possessor, newname, load_prefs) - if(!load_prefs) - var/datum/language_holder/holder = spawned_human.get_language_holder() - holder.get_selected_language() //we need this here so a language starts off selected + var/mob/living/carbon/human/spawned_human + if (istype(spawned_mob, /mob/living/carbon/human)) + spawned_human = spawned_mob - return spawned_human + if(!load_prefs) + var/datum/language_holder/holder = spawned_human.get_language_holder() + holder.get_selected_language() //we need this here so a language starts off selected - spawned_human?.client?.prefs?.safe_transfer_prefs_to(spawned_human) - spawned_human.dna.update_dna_identity() - if(spawned_human.mind) - spawned_human.mind.name = spawned_human.real_name // the mind gets initialized with the random name given as a result of the parent create() so we need to readjust it - spawned_human.dna.species.give_important_for_life(spawned_human) // make sure they get plasmaman/vox internals etc before anything else + return spawned_human - if(quirks_enabled) - SSquirks.AssignQuirks(spawned_human, spawned_human.client) + spawned_human?.client?.prefs?.safe_transfer_prefs_to(spawned_human) + spawned_human.dna.update_dna_identity() + if(spawned_human.mind) + spawned_human.mind.name = spawned_human.real_name // the mind gets initialized with the random name given as a result of the parent create() so we need to readjust it + spawned_human.dna.species.give_important_for_life(spawned_human) // make sure they get plasmaman/vox internals etc before anything else - post_transfer_prefs(spawned_human) + if(quirks_enabled) + SSquirks.AssignQuirks(spawned_human, spawned_human.client) - if(loadout_enabled) - spawned_human.equip_outfit_and_loadout(outfit, spawned_human.client.prefs) - else + post_transfer_prefs(spawned_human) + + if(load_prefs && loadout_enabled) + spawned_mob.equip_outfit_and_loadout(outfit, spawned_mob.client.prefs) + else if (!isnull(spawned_human)) equip(spawned_human) - return spawned_human + return spawned_mob /// This edit would cause somewhat ugly diffs, so I'm just replacing it. /// Original proc in code/modules/mob_spawn/mob_spawn.dm ~line 39. @@ -55,3 +59,12 @@ // TODO: refactor create() and special() so that this is no longer necessary /obj/effect/mob_spawn/ghost_role/proc/post_transfer_prefs(mob/living/new_spawn) return + + +/obj/effect/mob_spawn/ghost_role/human/special(mob/living/spawned_mob, mob/mob_possessor) + . = ..() + var/mob/living/carbon/human/spawned_human = spawned_mob + var/datum/job/spawned_job = SSjob.GetJobType(spawner_job_path) + + spawned_human.job = spawned_job.title + diff --git a/modular_nova/master_files/code/modules/mod/modules/modules_supply.dm b/modular_nova/master_files/code/modules/mod/modules/modules_supply.dm index 554e4f22e6c..ed459386ee5 100644 --- a/modular_nova/master_files/code/modules/mod/modules/modules_supply.dm +++ b/modular_nova/master_files/code/modules/mod/modules/modules_supply.dm @@ -6,3 +6,66 @@ . = ..() REMOVE_TRAIT(mod.wearer, TRAIT_TRASHMAN, MOD_TRAIT) +/obj/item/mod/module/ash_accretion + incompatible_modules = list(/obj/item/mod/module/ash_accretion, /obj/item/mod/module/armor_booster) + /// Is this ash accretion module providing its perks? Separate from active, because I don't know how it would interact with everything else as it's a passive module. + var/protection_enabled = FALSE + +/datum/armor/mod_ash_accretion + melee = 4.5 + bullet = 1 + laser = 2 + energy = 2 + bomb = 4 + +/obj/item/mod/module/ash_accretion/on_install() + . = ..() + speed_added = mod.slowdown_active // so when you hit full ash accretion, slowdown cancels out + RegisterSignal(mod, COMSIG_SPEED_POTION_APPLIED, PROC_REF(update_added_speed)) + +/obj/item/mod/module/ash_accretion/on_suit_activation() + . = ..() + protection_enabled = TRUE + RegisterSignals(mod, list(COMSIG_MOD_DEPLOYED, COMSIG_MOD_RETRACTED), PROC_REF(on_mod_toggle)) + +/obj/item/mod/module/ash_accretion/on_suit_deactivation(deleting) + . = ..() + protection_enabled = FALSE + UnregisterSignal(mod, list(COMSIG_MOD_DEPLOYED, COMSIG_MOD_RETRACTED)) + +/// Updates the ash accretion module's `speed_added`, so it entirely cancels out the suit's slowdown at full accretion. Not meant to be called for the external variant! +/obj/item/mod/module/ash_accretion/proc/update_added_speed() + SIGNAL_HANDLER + speed_added = mod.slowdown_active // no, you don't get to have a free speedup, actually + +/// Checks if the suit's current state is valid for buff-granting purposes. Should only be called when the MOD is deployed or retracted. +/obj/item/mod/module/ash_accretion/proc/on_mod_toggle() + if((mod.wearer.head == mod.helmet) && (mod.wearer.wear_suit == mod.chestplate) && (mod.wearer.gloves == mod.gauntlets) && (mod.wearer.shoes == mod.boots) && mod.active) + // suit is on and fully deployed, give them their proofing + mod.wearer.add_traits(list(TRAIT_ASHSTORM_IMMUNE, TRAIT_SNOWSTORM_IMMUNE), MOD_TRAIT) + RegisterSignal(mod.wearer, COMSIG_MOVABLE_MOVED, PROC_REF(on_move)) + balloon_alert(mod.wearer, "ash accretion enabled") + protection_enabled = TRUE + return + + // if their suit is not fully deployed, take their proofing away + if(!protection_enabled) + return // unless it was already gone + + UnregisterSignal(mod.wearer, COMSIG_MOVABLE_MOVED) + mod.wearer.remove_traits(list(TRAIT_ASHSTORM_IMMUNE, TRAIT_SNOWSTORM_IMMUNE), MOD_TRAIT) + balloon_alert(mod.wearer, "ash accretion disabled!") + protection_enabled = FALSE + if(!traveled_tiles) + return + + var/list/parts = mod.mod_parts + mod + var/datum/armor/to_remove = get_armor_by_type(armor_mod) + for(var/obj/item/part as anything in parts) + part.set_armor(part.get_armor().subtract_other_armor(to_remove.generate_new_with_multipliers(list(ARMOR_ALL = traveled_tiles)))) + + if(traveled_tiles == max_traveled_tiles) + mod.slowdown += speed_added + mod.wearer.update_equipment_speed_mods() + + traveled_tiles = 0 diff --git a/modular_nova/master_files/code/modules/modular_computers/computers/machinery/modular_computer.dm b/modular_nova/master_files/code/modules/modular_computers/computers/machinery/modular_computer.dm new file mode 100644 index 00000000000..7f2f92baaf2 --- /dev/null +++ b/modular_nova/master_files/code/modules/modular_computers/computers/machinery/modular_computer.dm @@ -0,0 +1,13 @@ +////// +// +// NOVA Override - prevents people from using modular computers while they're in the ghost cafe +// Relies checking for the trait that's given by the spawner. If this ever changes, we'll need to update this. +// +////// +/obj/item/modular_computer/ui_interact(mob/user, datum/tgui/ui) + if(HAS_TRAIT_FROM(user, TRAIT_FREE_GHOST, TRAIT_GHOSTROLE)) + if(ui) + ui.close() + balloon_alert(user, "ghost cafe visitors can't use this!") + return + return ..() diff --git a/modular_nova/master_files/code/modules/paperwork/paperplane.dm b/modular_nova/master_files/code/modules/paperwork/paperplane.dm new file mode 100644 index 00000000000..d21571ed171 --- /dev/null +++ b/modular_nova/master_files/code/modules/paperwork/paperplane.dm @@ -0,0 +1,5 @@ +// Better paper planes +/obj/item/paperplane/throw_impact(atom/hit_atom, datum/thrownthing/throwingdatum) + . = ..() + if(delete_on_impact) + qdel(src) diff --git a/modular_nova/master_files/code/modules/projectiles/guns/energy/kinetic_accelerator.dm b/modular_nova/master_files/code/modules/projectiles/guns/energy/kinetic_accelerator.dm new file mode 100644 index 00000000000..e1cdcb49d06 --- /dev/null +++ b/modular_nova/master_files/code/modules/projectiles/guns/energy/kinetic_accelerator.dm @@ -0,0 +1,3 @@ +/obj/item/gun/energy/recharge/kinetic_accelerator/cyborg + icon_state = "kineticgun" + max_mod_capacity = 100 // Balance due to fauna changes and no level perks applying diff --git a/modular_nova/master_files/code/modules/projectiles/guns/energy/recharge.dm b/modular_nova/master_files/code/modules/projectiles/guns/energy/recharge.dm new file mode 100644 index 00000000000..26fdfce3037 --- /dev/null +++ b/modular_nova/master_files/code/modules/projectiles/guns/energy/recharge.dm @@ -0,0 +1,4 @@ +// self-reloading weapons need their ammo hud updated whenever reload() is called +/obj/item/gun/energy/recharge/reload() + . = ..() + SEND_SIGNAL(src, COMSIG_UPDATE_AMMO_HUD) diff --git a/modular_nova/master_files/code/modules/research/designs/medical_designs.dm b/modular_nova/master_files/code/modules/research/designs/medical_designs.dm index 7798c4cd43a..c2beb545386 100644 --- a/modular_nova/master_files/code/modules/research/designs/medical_designs.dm +++ b/modular_nova/master_files/code/modules/research/designs/medical_designs.dm @@ -14,3 +14,9 @@ RND_CATEGORY_CYBERNETICS + RND_SUBCATEGORY_CYBERNETICS_ORGANS_1, ) departmental_flags = DEPARTMENT_BITFLAG_MEDICAL + +/datum/design/cybernetic_tongue/lizard + name = "Forked Cybernetic Tongue" + desc = "A forked cybernetic tongue." + id = "cybernetic_tongue_lizard" + build_path = /obj/item/organ/internal/tongue/lizard/cybernetic diff --git a/modular_nova/master_files/code/modules/research/machinery/departmental_circuit_imprinter.dm b/modular_nova/master_files/code/modules/research/machinery/departmental_circuit_imprinter.dm deleted file mode 100644 index dc66184c345..00000000000 --- a/modular_nova/master_files/code/modules/research/machinery/departmental_circuit_imprinter.dm +++ /dev/null @@ -1,5 +0,0 @@ -/obj/item/circuitboard/machine/circuit_imprinter/department/no_tax - build_path = /obj/machinery/rnd/production/circuit_imprinter/department/no_tax - -/obj/machinery/rnd/production/circuit_imprinter/department/no_tax - charges_tax = FALSE diff --git a/modular_nova/master_files/code/modules/research/techweb/all_nodes.dm b/modular_nova/master_files/code/modules/research/techweb/all_nodes.dm index 5ee944941e9..725f55c64ad 100644 --- a/modular_nova/master_files/code/modules/research/techweb/all_nodes.dm +++ b/modular_nova/master_files/code/modules/research/techweb/all_nodes.dm @@ -140,6 +140,7 @@ /datum/techweb_node/cyber_organs/New() design_ids += list( "cybernetic_tongue", + "cybernetic_tongue_lizard", ) return ..() diff --git a/modular_nova/master_files/code/modules/surgery/organs/internal/appendix/_appendix.dm b/modular_nova/master_files/code/modules/surgery/organs/internal/appendix/_appendix.dm index b3ab005d6bc..0e82f86e4d0 100644 --- a/modular_nova/master_files/code/modules/surgery/organs/internal/appendix/_appendix.dm +++ b/modular_nova/master_files/code/modules/surgery/organs/internal/appendix/_appendix.dm @@ -1,5 +1,5 @@ /obj/item/organ/internal/appendix/become_inflamed() - if(engaged_role_play_check(owner, station = TRUE, dorms = TRUE)) + if(!engaged_role_play_check(owner, station = TRUE, dorms = TRUE)) return if(!(owner.mind && owner.mind.assigned_role && owner.mind.assigned_role.job_flags & JOB_CREW_MEMBER)) diff --git a/modular_nova/master_files/code/modules/surgery/organs/internal/cyberimp/augments_internal.dm b/modular_nova/master_files/code/modules/surgery/organs/internal/cyberimp/augments_internal.dm new file mode 100644 index 00000000000..c17bd25da42 --- /dev/null +++ b/modular_nova/master_files/code/modules/surgery/organs/internal/cyberimp/augments_internal.dm @@ -0,0 +1,3 @@ +/obj/item/organ/internal/cyberimp + /// If TRUE, this augment cannot be confiscated at roundstart for roles like prisoner, etc. + var/cannot_confiscate diff --git a/modular_nova/modules/company_imports/code/objects/nakamura_modsuits/plate_compression_tech.dm b/modular_nova/master_files/code/modules/uplink/suits.dm similarity index 100% rename from modular_nova/modules/company_imports/code/objects/nakamura_modsuits/plate_compression_tech.dm rename to modular_nova/master_files/code/modules/uplink/suits.dm diff --git a/modular_nova/master_files/icons/donator/mob/clothing/head.dmi b/modular_nova/master_files/icons/donator/mob/clothing/head.dmi index b1cacf61e54..87da4192a65 100644 Binary files a/modular_nova/master_files/icons/donator/mob/clothing/head.dmi and b/modular_nova/master_files/icons/donator/mob/clothing/head.dmi differ diff --git a/modular_nova/master_files/icons/donator/mob/clothing/mask.dmi b/modular_nova/master_files/icons/donator/mob/clothing/mask.dmi index f014637456a..c252d289e8d 100644 Binary files a/modular_nova/master_files/icons/donator/mob/clothing/mask.dmi and b/modular_nova/master_files/icons/donator/mob/clothing/mask.dmi differ diff --git a/modular_nova/master_files/icons/donator/mob/clothing/suit.dmi b/modular_nova/master_files/icons/donator/mob/clothing/suit.dmi index ec84bdf6e76..62a3262296f 100644 Binary files a/modular_nova/master_files/icons/donator/mob/clothing/suit.dmi and b/modular_nova/master_files/icons/donator/mob/clothing/suit.dmi differ diff --git a/modular_nova/master_files/icons/donator/mob/clothing/uniform.dmi b/modular_nova/master_files/icons/donator/mob/clothing/uniform.dmi index f83de963a1f..48c8e36a72b 100644 Binary files a/modular_nova/master_files/icons/donator/mob/clothing/uniform.dmi and b/modular_nova/master_files/icons/donator/mob/clothing/uniform.dmi differ diff --git a/modular_nova/master_files/icons/donator/mob/clothing/uniform_digi.dmi b/modular_nova/master_files/icons/donator/mob/clothing/uniform_digi.dmi index a65bf12c587..7d967cc71af 100644 Binary files a/modular_nova/master_files/icons/donator/mob/clothing/uniform_digi.dmi and b/modular_nova/master_files/icons/donator/mob/clothing/uniform_digi.dmi differ diff --git a/modular_nova/master_files/icons/donator/obj/clothing/hats.dmi b/modular_nova/master_files/icons/donator/obj/clothing/hats.dmi index 7fa259c07e8..aefb06451e3 100644 Binary files a/modular_nova/master_files/icons/donator/obj/clothing/hats.dmi and b/modular_nova/master_files/icons/donator/obj/clothing/hats.dmi differ diff --git a/modular_nova/master_files/icons/donator/obj/clothing/masks.dmi b/modular_nova/master_files/icons/donator/obj/clothing/masks.dmi index 99ff9b6b09b..5bdffd136e5 100644 Binary files a/modular_nova/master_files/icons/donator/obj/clothing/masks.dmi and b/modular_nova/master_files/icons/donator/obj/clothing/masks.dmi differ diff --git a/modular_nova/master_files/icons/donator/obj/clothing/suits.dmi b/modular_nova/master_files/icons/donator/obj/clothing/suits.dmi index 140bd772f44..8fc4f672477 100644 Binary files a/modular_nova/master_files/icons/donator/obj/clothing/suits.dmi and b/modular_nova/master_files/icons/donator/obj/clothing/suits.dmi differ diff --git a/modular_nova/master_files/icons/donator/obj/clothing/uniform.dmi b/modular_nova/master_files/icons/donator/obj/clothing/uniform.dmi index 8375633d354..375c584a18d 100644 Binary files a/modular_nova/master_files/icons/donator/obj/clothing/uniform.dmi and b/modular_nova/master_files/icons/donator/obj/clothing/uniform.dmi differ diff --git a/modular_nova/master_files/icons/hud/lobby/bottom_buttons.dmi b/modular_nova/master_files/icons/hud/lobby/bottom_buttons.dmi deleted file mode 100644 index 990a6d1bc17..00000000000 Binary files a/modular_nova/master_files/icons/hud/lobby/bottom_buttons.dmi and /dev/null differ diff --git a/modular_nova/master_files/icons/mob/64x64_lefthand.dmi b/modular_nova/master_files/icons/mob/64x64_lefthand.dmi index 70ac1d387c1..2197d194135 100644 Binary files a/modular_nova/master_files/icons/mob/64x64_lefthand.dmi and b/modular_nova/master_files/icons/mob/64x64_lefthand.dmi differ diff --git a/modular_nova/master_files/icons/mob/64x64_righthand.dmi b/modular_nova/master_files/icons/mob/64x64_righthand.dmi index f92f3e53470..aee16d66d54 100644 Binary files a/modular_nova/master_files/icons/mob/64x64_righthand.dmi and b/modular_nova/master_files/icons/mob/64x64_righthand.dmi differ diff --git a/modular_nova/master_files/icons/mob/augmentation/mariinskyipc.dmi b/modular_nova/master_files/icons/mob/augmentation/mariinskyipc.dmi new file mode 100644 index 00000000000..bcf3c082295 Binary files /dev/null and b/modular_nova/master_files/icons/mob/augmentation/mariinskyipc.dmi differ diff --git a/modular_nova/master_files/icons/mob/clothing/back.dmi b/modular_nova/master_files/icons/mob/clothing/back.dmi index 4e8d6bc375f..0fd5d84f1e6 100644 Binary files a/modular_nova/master_files/icons/mob/clothing/back.dmi and b/modular_nova/master_files/icons/mob/clothing/back.dmi differ diff --git a/modular_nova/master_files/icons/mob/clothing/belt.dmi b/modular_nova/master_files/icons/mob/clothing/belt.dmi index 499d2ddda02..56ab5da4034 100644 Binary files a/modular_nova/master_files/icons/mob/clothing/belt.dmi and b/modular_nova/master_files/icons/mob/clothing/belt.dmi differ diff --git a/modular_nova/master_files/icons/mob/clothing/head/chaplain.dmi b/modular_nova/master_files/icons/mob/clothing/head/chaplain.dmi index 22eb1607e9f..3d362e54405 100644 Binary files a/modular_nova/master_files/icons/mob/clothing/head/chaplain.dmi and b/modular_nova/master_files/icons/mob/clothing/head/chaplain.dmi differ diff --git a/modular_nova/master_files/icons/mob/clothing/modsuit/mod_clothing_mutant.dmi b/modular_nova/master_files/icons/mob/clothing/modsuit/mod_clothing_mutant.dmi index 368d63d14bc..3cd5540c2c9 100644 Binary files a/modular_nova/master_files/icons/mob/clothing/modsuit/mod_clothing_mutant.dmi and b/modular_nova/master_files/icons/mob/clothing/modsuit/mod_clothing_mutant.dmi differ diff --git a/modular_nova/master_files/icons/mob/clothing/species/teshari/suit.dmi b/modular_nova/master_files/icons/mob/clothing/species/teshari/suit.dmi index e4db1a1654e..5420cf652e8 100644 Binary files a/modular_nova/master_files/icons/mob/clothing/species/teshari/suit.dmi and b/modular_nova/master_files/icons/mob/clothing/species/teshari/suit.dmi differ diff --git a/modular_nova/master_files/icons/mob/clothing/suit.dmi b/modular_nova/master_files/icons/mob/clothing/suit.dmi index dd76a562f7b..095fe3dbe02 100644 Binary files a/modular_nova/master_files/icons/mob/clothing/suit.dmi and b/modular_nova/master_files/icons/mob/clothing/suit.dmi differ diff --git a/modular_nova/master_files/icons/mob/clothing/suits/armor.dmi b/modular_nova/master_files/icons/mob/clothing/suits/armor.dmi index 9d6de8b7cfc..fc894643f6d 100644 Binary files a/modular_nova/master_files/icons/mob/clothing/suits/armor.dmi and b/modular_nova/master_files/icons/mob/clothing/suits/armor.dmi differ diff --git a/modular_nova/master_files/icons/mob/clothing/suits/chaplain.dmi b/modular_nova/master_files/icons/mob/clothing/suits/chaplain.dmi index 9ceb807d67f..85e1cf7ad99 100644 Binary files a/modular_nova/master_files/icons/mob/clothing/suits/chaplain.dmi and b/modular_nova/master_files/icons/mob/clothing/suits/chaplain.dmi differ diff --git a/modular_nova/master_files/icons/mob/clothing/suits/jacket.dmi b/modular_nova/master_files/icons/mob/clothing/suits/jacket.dmi new file mode 100644 index 00000000000..00521501d08 Binary files /dev/null and b/modular_nova/master_files/icons/mob/clothing/suits/jacket.dmi differ diff --git a/modular_nova/master_files/icons/mob/clothing/suits/spacesuit.dmi b/modular_nova/master_files/icons/mob/clothing/suits/spacesuit.dmi index 5be3dd72671..0b22f2bd2c4 100644 Binary files a/modular_nova/master_files/icons/mob/clothing/suits/spacesuit.dmi and b/modular_nova/master_files/icons/mob/clothing/suits/spacesuit.dmi differ diff --git a/modular_nova/master_files/icons/mob/clothing/suits/spacesuit_digi.dmi b/modular_nova/master_files/icons/mob/clothing/suits/spacesuit_digi.dmi index 61388a6acfb..2b6864d72ea 100644 Binary files a/modular_nova/master_files/icons/mob/clothing/suits/spacesuit_digi.dmi and b/modular_nova/master_files/icons/mob/clothing/suits/spacesuit_digi.dmi differ diff --git a/modular_nova/master_files/icons/mob/clothing/under/costume.dmi b/modular_nova/master_files/icons/mob/clothing/under/costume.dmi index 8439d78c6e1..317b614a496 100644 Binary files a/modular_nova/master_files/icons/mob/clothing/under/costume.dmi and b/modular_nova/master_files/icons/mob/clothing/under/costume.dmi differ diff --git a/modular_nova/master_files/icons/mob/clothing/under/costume_digi.dmi b/modular_nova/master_files/icons/mob/clothing/under/costume_digi.dmi index bd1262a82c8..197deb36d8e 100644 Binary files a/modular_nova/master_files/icons/mob/clothing/under/costume_digi.dmi and b/modular_nova/master_files/icons/mob/clothing/under/costume_digi.dmi differ diff --git a/modular_nova/master_files/icons/mob/clothing/under/rnd.dmi b/modular_nova/master_files/icons/mob/clothing/under/rnd.dmi index 35a612c221e..dc52b5eec55 100644 Binary files a/modular_nova/master_files/icons/mob/clothing/under/rnd.dmi and b/modular_nova/master_files/icons/mob/clothing/under/rnd.dmi differ diff --git a/modular_nova/master_files/icons/mob/clothing/under/rnd_digi.dmi b/modular_nova/master_files/icons/mob/clothing/under/rnd_digi.dmi index baed08c3844..a96624741e2 100644 Binary files a/modular_nova/master_files/icons/mob/clothing/under/rnd_digi.dmi and b/modular_nova/master_files/icons/mob/clothing/under/rnd_digi.dmi differ diff --git a/modular_nova/master_files/icons/mob/clothing/under/shorts_pants_shirts.dmi b/modular_nova/master_files/icons/mob/clothing/under/shorts_pants_shirts.dmi index d5f3d49a366..5d8f47b752d 100644 Binary files a/modular_nova/master_files/icons/mob/clothing/under/shorts_pants_shirts.dmi and b/modular_nova/master_files/icons/mob/clothing/under/shorts_pants_shirts.dmi differ diff --git a/modular_nova/master_files/icons/mob/clothing/under/shorts_pants_shirts_digi.dmi b/modular_nova/master_files/icons/mob/clothing/under/shorts_pants_shirts_digi.dmi index 11f4729aa7c..1a089a50de8 100644 Binary files a/modular_nova/master_files/icons/mob/clothing/under/shorts_pants_shirts_digi.dmi and b/modular_nova/master_files/icons/mob/clothing/under/shorts_pants_shirts_digi.dmi differ diff --git a/modular_nova/master_files/icons/mob/clothing/under/suits.dmi b/modular_nova/master_files/icons/mob/clothing/under/suits.dmi index aa746169deb..f494e41c425 100644 Binary files a/modular_nova/master_files/icons/mob/clothing/under/suits.dmi and b/modular_nova/master_files/icons/mob/clothing/under/suits.dmi differ diff --git a/modular_nova/master_files/icons/mob/clothing/under/suits_digi.dmi b/modular_nova/master_files/icons/mob/clothing/under/suits_digi.dmi index 3202b5117c9..d055650a521 100644 Binary files a/modular_nova/master_files/icons/mob/clothing/under/suits_digi.dmi and b/modular_nova/master_files/icons/mob/clothing/under/suits_digi.dmi differ diff --git a/modular_nova/master_files/icons/mob/clothing/underwear.dmi b/modular_nova/master_files/icons/mob/clothing/underwear.dmi index 299cb7cebbb..af247b61c8b 100644 Binary files a/modular_nova/master_files/icons/mob/clothing/underwear.dmi and b/modular_nova/master_files/icons/mob/clothing/underwear.dmi differ diff --git a/modular_nova/master_files/icons/mob/sprite_accessory/hair.dmi b/modular_nova/master_files/icons/mob/sprite_accessory/hair.dmi index 681457fe596..edfb9558dfd 100644 Binary files a/modular_nova/master_files/icons/mob/sprite_accessory/hair.dmi and b/modular_nova/master_files/icons/mob/sprite_accessory/hair.dmi differ diff --git a/modular_nova/master_files/icons/mob/sprite_accessory/lizard_spines.dmi b/modular_nova/master_files/icons/mob/sprite_accessory/lizard_spines.dmi deleted file mode 100644 index eaadb820ebc..00000000000 Binary files a/modular_nova/master_files/icons/mob/sprite_accessory/lizard_spines.dmi and /dev/null differ diff --git a/modular_nova/master_files/icons/mob/sprite_accessory/vox_spines.dmi b/modular_nova/master_files/icons/mob/sprite_accessory/vox_spines.dmi index 10547f6db8d..d446399dc93 100644 Binary files a/modular_nova/master_files/icons/mob/sprite_accessory/vox_spines.dmi and b/modular_nova/master_files/icons/mob/sprite_accessory/vox_spines.dmi differ diff --git a/modular_nova/master_files/icons/obj/clothing/belts.dmi b/modular_nova/master_files/icons/obj/clothing/belts.dmi index 20a694a2405..97e89de3606 100644 Binary files a/modular_nova/master_files/icons/obj/clothing/belts.dmi and b/modular_nova/master_files/icons/obj/clothing/belts.dmi differ diff --git a/modular_nova/master_files/icons/obj/clothing/head/chaplain.dmi b/modular_nova/master_files/icons/obj/clothing/head/chaplain.dmi index 00e0a70bb52..b00ec8bd21d 100644 Binary files a/modular_nova/master_files/icons/obj/clothing/head/chaplain.dmi and b/modular_nova/master_files/icons/obj/clothing/head/chaplain.dmi differ diff --git a/modular_nova/master_files/icons/obj/clothing/head/helmet.dmi b/modular_nova/master_files/icons/obj/clothing/head/helmet.dmi index 8b68aa90330..29734b04958 100644 Binary files a/modular_nova/master_files/icons/obj/clothing/head/helmet.dmi and b/modular_nova/master_files/icons/obj/clothing/head/helmet.dmi differ diff --git a/modular_nova/master_files/icons/obj/clothing/suits.dmi b/modular_nova/master_files/icons/obj/clothing/suits.dmi index bd5fb3aebba..77bc57a7ebd 100644 Binary files a/modular_nova/master_files/icons/obj/clothing/suits.dmi and b/modular_nova/master_files/icons/obj/clothing/suits.dmi differ diff --git a/modular_nova/master_files/icons/obj/clothing/suits/armor.dmi b/modular_nova/master_files/icons/obj/clothing/suits/armor.dmi index 948d2d783ed..bbc57992f1e 100644 Binary files a/modular_nova/master_files/icons/obj/clothing/suits/armor.dmi and b/modular_nova/master_files/icons/obj/clothing/suits/armor.dmi differ diff --git a/modular_nova/master_files/icons/obj/clothing/suits/chaplain.dmi b/modular_nova/master_files/icons/obj/clothing/suits/chaplain.dmi index 18a5b67fe4e..4475c890fed 100644 Binary files a/modular_nova/master_files/icons/obj/clothing/suits/chaplain.dmi and b/modular_nova/master_files/icons/obj/clothing/suits/chaplain.dmi differ diff --git a/modular_nova/master_files/icons/obj/clothing/suits/jacket.dmi b/modular_nova/master_files/icons/obj/clothing/suits/jacket.dmi new file mode 100644 index 00000000000..ace9238ecd2 Binary files /dev/null and b/modular_nova/master_files/icons/obj/clothing/suits/jacket.dmi differ diff --git a/modular_nova/master_files/icons/obj/clothing/suits/spacesuit.dmi b/modular_nova/master_files/icons/obj/clothing/suits/spacesuit.dmi index 0032f1f7011..1e2a035cb2d 100644 Binary files a/modular_nova/master_files/icons/obj/clothing/suits/spacesuit.dmi and b/modular_nova/master_files/icons/obj/clothing/suits/spacesuit.dmi differ diff --git a/modular_nova/master_files/icons/obj/clothing/under/costume.dmi b/modular_nova/master_files/icons/obj/clothing/under/costume.dmi index 9edd0ae2ade..c71466eda7b 100644 Binary files a/modular_nova/master_files/icons/obj/clothing/under/costume.dmi and b/modular_nova/master_files/icons/obj/clothing/under/costume.dmi differ diff --git a/modular_nova/master_files/icons/obj/clothing/under/rnd.dmi b/modular_nova/master_files/icons/obj/clothing/under/rnd.dmi index 92d1253589e..dd0827e1de9 100644 Binary files a/modular_nova/master_files/icons/obj/clothing/under/rnd.dmi and b/modular_nova/master_files/icons/obj/clothing/under/rnd.dmi differ diff --git a/modular_nova/master_files/icons/obj/clothing/under/shorts_pants_shirts.dmi b/modular_nova/master_files/icons/obj/clothing/under/shorts_pants_shirts.dmi index d82f9b63e17..8726c9c548f 100644 Binary files a/modular_nova/master_files/icons/obj/clothing/under/shorts_pants_shirts.dmi and b/modular_nova/master_files/icons/obj/clothing/under/shorts_pants_shirts.dmi differ diff --git a/modular_nova/master_files/icons/obj/clothing/under/suits.dmi b/modular_nova/master_files/icons/obj/clothing/under/suits.dmi index 1edf6a381ad..6a0dcfc8626 100644 Binary files a/modular_nova/master_files/icons/obj/clothing/under/suits.dmi and b/modular_nova/master_files/icons/obj/clothing/under/suits.dmi differ diff --git a/modular_nova/master_files/icons/obj/devices/tools.dmi b/modular_nova/master_files/icons/obj/devices/tools.dmi new file mode 100644 index 00000000000..d30441bd74f Binary files /dev/null and b/modular_nova/master_files/icons/obj/devices/tools.dmi differ diff --git a/modular_nova/master_files/icons/obj/kinetic_glaive.dmi b/modular_nova/master_files/icons/obj/kinetic_glaive.dmi index ae0bbdb0625..407ae6bf135 100644 Binary files a/modular_nova/master_files/icons/obj/kinetic_glaive.dmi and b/modular_nova/master_files/icons/obj/kinetic_glaive.dmi differ diff --git a/modular_nova/modules/GAGS/greyscale_configs.dm b/modular_nova/modules/GAGS/greyscale_configs.dm index 9844d2cf466..a2e421afcf8 100644 --- a/modular_nova/modules/GAGS/greyscale_configs.dm +++ b/modular_nova/modules/GAGS/greyscale_configs.dm @@ -626,6 +626,98 @@ name = "Formal Suitskirt (Worn, Digi)" icon_file = 'modular_nova/master_files/icons/mob/clothing/under/suits_digi.dmi' +/datum/greyscale_config/fancysuit_casual + name = "Casual Fancysuit" + icon_file = 'modular_nova/master_files/icons/obj/clothing/under/suits.dmi' + json_config = 'modular_nova/modules/GAGS/json_configs/suits/fancysuit/fancysuit_bicol.json' + +/datum/greyscale_config/fancysuit_casual/worn + name = "Casual Fancysuit (Worn)" + icon_file = 'modular_nova/master_files/icons/mob/clothing/under/suits.dmi' + +/datum/greyscale_config/fancysuit_casual/worn/digi + name = "Casual Fancysuit (Worn, Digi)" + icon_file = 'modular_nova/master_files/icons/mob/clothing/under/suits_digi.dmi' + +/datum/greyscale_config/fancysuit_executive + name = "Executive Fancysuit" + icon_file = 'modular_nova/master_files/icons/obj/clothing/under/suits.dmi' + json_config = 'modular_nova/modules/GAGS/json_configs/suits/fancysuit/fancysuit_quadcol.json' + +/datum/greyscale_config/fancysuit_executive/worn + name = "Executive Fancysuit (Worn)" + icon_file = 'modular_nova/master_files/icons/mob/clothing/under/suits.dmi' + +/datum/greyscale_config/fancysuit_executive/worn/digi + name = "Executive Fancysuit (Worn, Digi)" + icon_file = 'modular_nova/master_files/icons/mob/clothing/under/suits_digi.dmi' + +// PENCILSKIRTS +/datum/greyscale_config/pencilskirt + name = "Pencilskirt" + icon_file = 'modular_nova/master_files/icons/obj/clothing/under/suits.dmi' + json_config = 'modular_nova/modules/GAGS/json_configs/suits/pencilskirt/pencilskirt.json' + +/datum/greyscale_config/pencilskirt/worn + name = "Pencilskirt (Worn)" + icon_file = 'modular_nova/master_files/icons/mob/clothing/under/suits.dmi' + +/datum/greyscale_config/pencilskirt/worn/digi + name = "Pencilskirt (Worn, Digi)" + icon_file = 'modular_nova/master_files/icons/mob/clothing/under/suits_digi.dmi' + +/datum/greyscale_config/pencilskirt_withshirt + name = "Pencilskirt + Shirt" + icon_file = 'modular_nova/master_files/icons/obj/clothing/under/suits.dmi' + json_config = 'modular_nova/modules/GAGS/json_configs/suits/pencilskirt/pencilskirt_bicol.json' + +/datum/greyscale_config/pencilskirt_withshirt/worn + name = "Pencilskirt + Shirt (Worn)" + icon_file = 'modular_nova/master_files/icons/mob/clothing/under/suits.dmi' + +/datum/greyscale_config/pencilskirt_withshirt/worn/digi + name = "Pencilskirt + Shirt (Worn, Digi)" + icon_file = 'modular_nova/master_files/icons/mob/clothing/under/suits_digi.dmi' + +/datum/greyscale_config/pencilskirt_checkers + name = "Checkered Pencilskirt" + icon_file = 'modular_nova/master_files/icons/obj/clothing/under/suits.dmi' + json_config = 'modular_nova/modules/GAGS/json_configs/suits/pencilskirt/pencilskirt_bicol.json' + +/datum/greyscale_config/pencilskirt_checkers/worn + name = "Checkered Pencilskirt (Worn)" + icon_file = 'modular_nova/master_files/icons/mob/clothing/under/suits.dmi' + +/datum/greyscale_config/pencilskirt_checkers/worn/digi + name = "Checkered Pencilskirt (Worn, Digi)" + icon_file = 'modular_nova/master_files/icons/mob/clothing/under/suits_digi.dmi' + +/datum/greyscale_config/pencilskirt_checkers_withshirt + name = "Checkered Pencilskirt + Shirt" + icon_file = 'modular_nova/master_files/icons/obj/clothing/under/suits.dmi' + json_config = 'modular_nova/modules/GAGS/json_configs/suits/pencilskirt/pencilskirt_tricol.json' + +/datum/greyscale_config/pencilskirt_checkers_withshirt/worn + name = "Checkered Pencilskirt + Shirt (Worn)" + icon_file = 'modular_nova/master_files/icons/mob/clothing/under/suits.dmi' + +/datum/greyscale_config/pencilskirt_checkers_withshirt/worn/digi + name = "Checkered Pencilskirt + Shirt (Worn, Digi)" + icon_file = 'modular_nova/master_files/icons/mob/clothing/under/suits_digi.dmi' + +/datum/greyscale_config/pencilskirt_withsuit + name = "Pencilskirt + Suit" + icon_file = 'modular_nova/master_files/icons/obj/clothing/under/suits.dmi' + json_config = 'modular_nova/modules/GAGS/json_configs/suits/pencilskirt/pencilskirt_quadcol.json' + +/datum/greyscale_config/pencilskirt_withsuit/worn + name = "Pencilskirt + Suit (Worn)" + icon_file = 'modular_nova/master_files/icons/mob/clothing/under/suits.dmi' + +/datum/greyscale_config/pencilskirt_withsuit/worn/digi + name = "Pencilskirt + Suit (Worn, Digi)" + icon_file = 'modular_nova/master_files/icons/mob/clothing/under/suits_digi.dmi' + // HOODIES /datum/greyscale_config/hoodie name = "Hoodie" @@ -796,6 +888,21 @@ name = "Varsity Jacket (Worn)" json_config = 'modular_nova/modules/GAGS/json_configs/suits/varsity/varsity_worn.json' +//CROPTOP SWEATER + +/datum/greyscale_config/croptop + name = "Croptop Sweater" + icon_file = 'modular_nova/master_files/icons/mob/clothing/suits/jacket.dmi' + json_config = 'modular_nova/modules/GAGS/json_configs/suits/croptop/croptop.json' + +/datum/greyscale_config/croptop/worn + name = "Croptop Sweater (Worn)" + icon_file = 'modular_nova/master_files/icons/mob/clothing/suits/jacket.dmi' + +/datum/greyscale_config/croptop/worn/teshari + name = "Croptop Sweater (Worn, Teshari)" + icon_file = 'modular_nova/master_files/icons/mob/clothing/species/teshari/suit.dmi' + // TAILORED JACKET /datum/greyscale_config/tailored_jacket @@ -816,6 +923,17 @@ name = "Tailored Short Jacket (Worn)" json_config = 'modular_nova/modules/GAGS/json_configs/suits/tailored_short_jacket/tailored_short_jacket_worn.json' +// CROPPED JACKET + +/datum/greyscale_config/crop_jacket + name = "Tailored Jacket" + icon_file = 'modular_nova/modules/GAGS/icons/crop_jacket.dmi' + json_config = 'modular_nova/modules/GAGS/json_configs/crop_jacket/crop_jacket.json' + +/datum/greyscale_config/crop_jacket/worn + name = "Tailored Jacket (Worn)" + icon_file = 'modular_nova/modules/GAGS/icons/crop_jacket_worn.dmi' + /* * UNDER @@ -950,6 +1068,19 @@ name = "Yoga Pants (Worn, Digi)" icon_file = SHORTS_PANTS_SHIRTS_DIGIFILE +/datum/greyscale_config/camo_pants + name = "Camo Pants" + icon_file = 'modular_nova/master_files/icons/obj/clothing/under/shorts_pants_shirts.dmi' + json_config = 'modular_nova/modules/GAGS/json_configs/pants_shorts_skirts_dresses/camo_pants.json' + +/datum/greyscale_config/camo_pants/worn + name = "Camo Pants (Worn)" + icon_file = 'modular_nova/master_files/icons/mob/clothing/under/shorts_pants_shirts.dmi' + +/datum/greyscale_config/camo_pants/worn/digi + name = "Camo Pants (Worn, Digi)" + icon_file = SHORTS_PANTS_SHIRTS_DIGIFILE + // DRESSES / SKIRTS /datum/greyscale_config/plaidskirt/worn/digi @@ -1070,7 +1201,7 @@ /datum/greyscale_config/cheongsam name = "Cheongsam" icon_file = 'modular_nova/master_files/icons/obj/clothing/under/costume.dmi' - json_config = 'modular_nova/modules/GAGS/json_configs/costumes/lunar_japanese.json' + json_config = 'modular_nova/modules/GAGS/json_configs/costumes/lunar_japanese_bicol.json' /datum/greyscale_config/cheongsam/worn name = "Cheongsam (Worn)" @@ -1080,10 +1211,36 @@ name = "Cheongsam (Worn, Digi)" icon_file = 'modular_nova/master_files/icons/mob/clothing/under/costume_digi.dmi' +/datum/greyscale_config/qipao_customtrim + name = "Qipao" + icon_file = 'modular_nova/master_files/icons/obj/clothing/under/costume.dmi' + json_config = 'modular_nova/modules/GAGS/json_configs/costumes/lunar_japanese_bicol.json' + +/datum/greyscale_config/qipao_customtrim/worn + name = "Qipao (Worn)" + icon_file = 'modular_nova/master_files/icons/mob/clothing/under/costume.dmi' + +/datum/greyscale_config/qipao_customtrim/worn/digi + name = "Qipao (Worn, Digi)" + icon_file = 'modular_nova/master_files/icons/mob/clothing/under/costume_digi.dmi' + +/datum/greyscale_config/cheongsam_customtrim + name = "Cheongsam" + icon_file = 'modular_nova/master_files/icons/obj/clothing/under/costume.dmi' + json_config = 'modular_nova/modules/GAGS/json_configs/costumes/lunar_japanese_tricol.json' + +/datum/greyscale_config/cheongsam_customtrim/worn + name = "Cheongsam (Worn)" + icon_file = 'modular_nova/master_files/icons/mob/clothing/under/costume.dmi' + +/datum/greyscale_config/cheongsam_customtrim/worn/digi + name = "Cheongsam (Worn, Digi)" + icon_file = 'modular_nova/master_files/icons/mob/clothing/under/costume_digi.dmi' + /datum/greyscale_config/yukata name = "Yukata" icon_file = 'modular_nova/master_files/icons/obj/clothing/under/costume.dmi' - json_config = 'modular_nova/modules/GAGS/json_configs/costumes/lunar_japanese.json' + json_config = 'modular_nova/modules/GAGS/json_configs/costumes/lunar_japanese_bicol.json' /datum/greyscale_config/yukata/worn name = "Yukata (Worn)" @@ -1132,6 +1289,52 @@ name = "christmas_male (Worn, Digi)" icon_file = 'modular_nova/master_files/icons/mob/clothing/under/costume_digi.dmi' +//RELIGIOUS COSTUMES (MONK HABIT, ETC) +/datum/greyscale_config/monk_habit + name = "Monk Habit" + icon_file = 'modular_nova/master_files/icons/obj/clothing/suits/chaplain.dmi' + json_config = 'modular_nova/modules/GAGS/json_configs/costumes/monk_habit.json' + +/datum/greyscale_config/monk_habit/worn + name = "Monk Habit (Worn)" + icon_file = 'modular_nova/master_files/icons/mob/clothing/suits/chaplain.dmi' + +/datum/greyscale_config/monk_habit_hood + name = "Monk Habit Hood" + icon_file = 'modular_nova/master_files/icons/obj/clothing/head/chaplain.dmi' + json_config = 'modular_nova/modules/GAGS/json_configs/costumes/monk_habit_hood.json' + +/datum/greyscale_config/monk_habit_hood/worn + name = "Monk Habit Hood (Worn)" + icon_file = 'modular_nova/master_files/icons/mob/clothing/head/chaplain.dmi' + +/datum/greyscale_config/chappy_habit + name = "Habit" + icon_file = 'modular_nova/master_files/icons/obj/clothing/suits/chaplain.dmi' + json_config = 'modular_nova/modules/GAGS/json_configs/costumes/chappy_habit.json' + +/datum/greyscale_config/chappy_habit/worn + name = "Habit (Worn)" + icon_file = 'modular_nova/master_files/icons/mob/clothing/suits/chaplain.dmi' + +/datum/greyscale_config/nun_hood + name = "Nun Hood" + icon_file = 'modular_nova/master_files/icons/obj/clothing/head/chaplain.dmi' + json_config = 'modular_nova/modules/GAGS/json_configs/costumes/monk_habit_hood.json' + +/datum/greyscale_config/nun_hood/worn + name = "Nun Hood (Worn)" + icon_file = 'modular_nova/master_files/icons/mob/clothing/head/chaplain.dmi' + +/datum/greyscale_config/nun_veil + name = "Nun Veil" + icon_file = 'modular_nova/master_files/icons/obj/clothing/head/chaplain.dmi' + json_config = 'modular_nova/modules/GAGS/json_configs/costumes/monk_habit_hood.json' + +/datum/greyscale_config/nun_veil/worn + name = "Nun Veil (Worn)" + icon_file = 'modular_nova/master_files/icons/mob/clothing/head/chaplain.dmi' + //GRAYSCALE MAID COSTUME /datum/greyscale_config/maid_neck_cover @@ -1534,3 +1737,30 @@ digi /datum/greyscale_config/primitive_catgirl_gauntlets/worn name = "Gauntlets (Worn)" json_config = 'modular_nova/modules/GAGS/json_configs/primitive_catgirl_clothing/gauntlets_worn.json' + +/datum/greyscale_config/primitive_catgirl_tailored_dress + name = "Tailored Dress" + icon_file = 'modular_nova/modules/primitive_catgirls/icons/clothing_greyscale.dmi' + json_config = 'modular_nova/modules/GAGS/json_configs/primitive_catgirl_clothing/tailored_dress.json' + +/datum/greyscale_config/primitive_catgirl_tailored_dress/worn + name = "Tailored Dress (Worn)" + json_config = 'modular_nova/modules/GAGS/json_configs/primitive_catgirl_clothing/tailored_dress_worn.json' + +/datum/greyscale_config/primitive_catgirl_ferroniere + name = "Ferroniere" + icon_file = 'modular_nova/modules/primitive_catgirls/icons/clothing_greyscale.dmi' + json_config = 'modular_nova/modules/GAGS/json_configs/primitive_catgirl_clothing/ferroniere.json' + +/datum/greyscale_config/primitive_catgirl_ferroniere/worn + name = "Ferroniere (Worn)" + json_config = 'modular_nova/modules/GAGS/json_configs/primitive_catgirl_clothing/ferroniere_worn.json' + +/datum/greyscale_config/primitive_catgirl_tunic + name = "Handmade Tunic" + icon_file = 'modular_nova/modules/primitive_catgirls/icons/clothing_greyscale.dmi' + json_config = 'modular_nova/modules/GAGS/json_configs/primitive_catgirl_clothing/tunic.json' + +/datum/greyscale_config/primitive_catgirl_tunic/worn + name = "Handmade Tunic (Worn)" + json_config = 'modular_nova/modules/GAGS/json_configs/primitive_catgirl_clothing/tunic_worn.json' diff --git a/modular_nova/modules/GAGS/icons/crop_jacket.dmi b/modular_nova/modules/GAGS/icons/crop_jacket.dmi new file mode 100644 index 00000000000..e187c367f50 Binary files /dev/null and b/modular_nova/modules/GAGS/icons/crop_jacket.dmi differ diff --git a/modular_nova/modules/GAGS/icons/crop_jacket_worn.dmi b/modular_nova/modules/GAGS/icons/crop_jacket_worn.dmi new file mode 100644 index 00000000000..b9caabd6299 Binary files /dev/null and b/modular_nova/modules/GAGS/icons/crop_jacket_worn.dmi differ diff --git a/modular_nova/modules/GAGS/json_configs/costumes/chappy_habit.json b/modular_nova/modules/GAGS/json_configs/costumes/chappy_habit.json new file mode 100644 index 00000000000..22f31ab093f --- /dev/null +++ b/modular_nova/modules/GAGS/json_configs/costumes/chappy_habit.json @@ -0,0 +1,22 @@ +{ + "habit": [ + { + "type": "icon_state", + "icon_state": "habit_base", + "blend_mode": "overlay", + "color_ids": [ 1 ] + }, + { + "type": "icon_state", + "icon_state": "habit_frill", + "blend_mode": "overlay", + "color_ids": [ 2 ] + }, + { + "type": "icon_state", + "icon_state": "habit_belt", + "blend_mode": "overlay", + "color_ids": [ 3 ] + } + ] +} diff --git a/modular_nova/modules/GAGS/json_configs/costumes/lunar_japanese.json b/modular_nova/modules/GAGS/json_configs/costumes/lunar_japanese.json index 364474ecfcd..0137727ec04 100644 --- a/modular_nova/modules/GAGS/json_configs/costumes/lunar_japanese.json +++ b/modular_nova/modules/GAGS/json_configs/costumes/lunar_japanese.json @@ -11,33 +11,5 @@ "icon_state": "qipao_trim", "blend_mode": "overlay" } - ], - - "cheongsam": [ - { - "type": "icon_state", - "icon_state": "cheongsam_base", - "blend_mode": "overlay", - "color_ids": [ 1 ] - }, - { - "type": "icon_state", - "icon_state": "cheongsam_trim", - "blend_mode": "overlay" - }, - { - "type": "icon_state", - "icon_state": "cheongsam_pants", - "blend_mode": "overlay" - } - ], - - "yukata": [ - { - "type": "icon_state", - "icon_state": "yukata_base", - "blend_mode": "overlay", - "color_ids": [ 1 ] - } ] } diff --git a/modular_nova/modules/GAGS/json_configs/costumes/lunar_japanese_bicol.json b/modular_nova/modules/GAGS/json_configs/costumes/lunar_japanese_bicol.json new file mode 100644 index 00000000000..cf6c19cf770 --- /dev/null +++ b/modular_nova/modules/GAGS/json_configs/costumes/lunar_japanese_bicol.json @@ -0,0 +1,49 @@ +{ + "qipao": [ + { + "type": "icon_state", + "icon_state": "qipao_base", + "blend_mode": "overlay", + "color_ids": [ 1 ] + }, + { + "type": "icon_state", + "icon_state": "qipao_trim_recolorable", + "blend_mode": "overlay", + "color_ids": [ 2 ] + } + ], + "yukata": [ + { + "type": "icon_state", + "icon_state": "yukata_base", + "blend_mode": "overlay", + "color_ids": [ 1 ] + }, + { + "type": "icon_state", + "icon_state": "yukata_sash", + "blend_mode": "overlay", + "color_ids": [ 2 ] + } + ], + "cheongsam": [ + { + "type": "icon_state", + "icon_state": "cheongsam_base", + "blend_mode": "overlay", + "color_ids": [ 1 ] + }, + { + "type": "icon_state", + "icon_state": "cheongsam_trim", + "blend_mode": "overlay" + }, + { + "type": "icon_state", + "icon_state": "cheongsam_pants", + "blend_mode": "overlay", + "color_ids": [ 2 ] + } + ] +} diff --git a/modular_nova/modules/GAGS/json_configs/costumes/lunar_japanese_tricol.json b/modular_nova/modules/GAGS/json_configs/costumes/lunar_japanese_tricol.json new file mode 100644 index 00000000000..450a1a7c233 --- /dev/null +++ b/modular_nova/modules/GAGS/json_configs/costumes/lunar_japanese_tricol.json @@ -0,0 +1,22 @@ +{ + "cheongsam": [ + { + "type": "icon_state", + "icon_state": "cheongsam_base", + "blend_mode": "overlay", + "color_ids": [ 1 ] + }, + { + "type": "icon_state", + "icon_state": "cheongsam_trim_recolorable", + "blend_mode": "overlay", + "color_ids": [ 2 ] + }, + { + "type": "icon_state", + "icon_state": "cheongsam_pants", + "blend_mode": "overlay", + "color_ids": [ 3 ] + } + ] +} diff --git a/modular_nova/modules/GAGS/json_configs/costumes/monk_habit.json b/modular_nova/modules/GAGS/json_configs/costumes/monk_habit.json new file mode 100644 index 00000000000..15c6e4ea2a3 --- /dev/null +++ b/modular_nova/modules/GAGS/json_configs/costumes/monk_habit.json @@ -0,0 +1,30 @@ +{ + "monkfrock": [ + { + "type": "icon_state", + "icon_state": "monkfrock_base", + "blend_mode": "overlay", + "color_ids": [ 1 ] + }, + { + "type": "icon_state", + "icon_state": "monkfrock_belt", + "blend_mode": "overlay", + "color_ids": [ 2 ] + } + ], + "monkfrock_t": [ + { + "type": "icon_state", + "icon_state": "monkfrock_base", + "blend_mode": "overlay", + "color_ids": [ 1 ] + }, + { + "type": "icon_state", + "icon_state": "monkfrock_belt", + "blend_mode": "overlay", + "color_ids": [ 2 ] + } + ] +} diff --git a/modular_nova/modules/GAGS/json_configs/costumes/monk_habit_hood.json b/modular_nova/modules/GAGS/json_configs/costumes/monk_habit_hood.json new file mode 100644 index 00000000000..fe1cd238fb8 --- /dev/null +++ b/modular_nova/modules/GAGS/json_configs/costumes/monk_habit_hood.json @@ -0,0 +1,44 @@ +{ + "monkhood": [ + { + "type": "icon_state", + "icon_state": "monkhood_base", + "blend_mode": "overlay", + "color_ids": [ 1 ] + }, + { + "type": "icon_state", + "icon_state": "monkhood_belt", + "blend_mode": "overlay", + "color_ids": [ 2 ] + } + ], + "nun_hood": [ + { + "type": "icon_state", + "icon_state": "nun_hood_base", + "blend_mode": "overlay", + "color_ids": [ 1 ] + }, + { + "type": "icon_state", + "icon_state": "nun_hood_frills", + "blend_mode": "overlay", + "color_ids": [ 2 ] + } + ], + "nun_hood_alt": [ + { + "type": "icon_state", + "icon_state": "nun_hood_alt_base", + "blend_mode": "overlay", + "color_ids": [ 1 ] + }, + { + "type": "icon_state", + "icon_state": "nun_hood_alt_frills", + "blend_mode": "overlay", + "color_ids": [ 2 ] + } + ] +} diff --git a/modular_nova/modules/GAGS/json_configs/crop_jacket/crop_jacket.json b/modular_nova/modules/GAGS/json_configs/crop_jacket/crop_jacket.json new file mode 100644 index 00000000000..9cd4f3a8996 --- /dev/null +++ b/modular_nova/modules/GAGS/json_configs/crop_jacket/crop_jacket.json @@ -0,0 +1,42 @@ +{ + "crop_jacket": [ + { + "type": "icon_state", + "icon_state": "crop_jacket", + "blend_mode": "overlay", + "color_ids": [ 1 ] + }, + { + "type": "icon_state", + "icon_state": "crop_jacket_collar", + "blend_mode": "overlay", + "color_ids": [ 2 ] + }, + { + "type": "icon_state", + "icon_state": "crop_jacket_sleeve", + "blend_mode": "overlay", + "color_ids": [ 3 ] + } + ], + "crop_jacket_t": [ + { + "type": "icon_state", + "icon_state": "crop_jacket", + "blend_mode": "overlay", + "color_ids": [ 1 ] + }, + { + "type": "icon_state", + "icon_state": "crop_jacket_collar", + "blend_mode": "overlay", + "color_ids": [ 2 ] + }, + { + "type": "icon_state", + "icon_state": "crop_jacket_sleeve_short", + "blend_mode": "overlay", + "color_ids": [ 3 ] + } + ] +} diff --git a/modular_nova/modules/GAGS/json_configs/pants_shorts_skirts_dresses/camo_pants.json b/modular_nova/modules/GAGS/json_configs/pants_shorts_skirts_dresses/camo_pants.json new file mode 100644 index 00000000000..e2bb7457b65 --- /dev/null +++ b/modular_nova/modules/GAGS/json_configs/pants_shorts_skirts_dresses/camo_pants.json @@ -0,0 +1,27 @@ +{ + "camopants": [ + { + "type": "icon_state", + "icon_state": "camopants_camo1", + "blend_mode": "overlay", + "color_ids": [ 1 ] + }, + { + "type": "icon_state", + "icon_state": "camopants_camo2", + "blend_mode": "overlay", + "color_ids": [ 2 ] + }, + { + "type": "icon_state", + "icon_state": "camopants_camo3", + "blend_mode": "overlay", + "color_ids": [ 3 ] + }, + { + "type": "icon_state", + "icon_state": "camopants_buckle", + "blend_mode": "overlay" + } + ] +} diff --git a/modular_nova/modules/GAGS/json_configs/primitive_catgirl_clothing/ferroniere.json b/modular_nova/modules/GAGS/json_configs/primitive_catgirl_clothing/ferroniere.json new file mode 100644 index 00000000000..24235978b87 --- /dev/null +++ b/modular_nova/modules/GAGS/json_configs/primitive_catgirl_clothing/ferroniere.json @@ -0,0 +1,16 @@ +{ + "ferroniere": [ + { + "type": "icon_state", + "icon_state": "ferroniere_base_obj", + "blend_mode": "overlay", + "color_ids": [ 1 ] + }, + { + "type": "icon_state", + "icon_state": "ferroniere_gem_obj", + "blend_mode": "overlay", + "color_ids": [ 2 ] + } + ] +} diff --git a/modular_nova/modules/GAGS/json_configs/primitive_catgirl_clothing/ferroniere_worn.json b/modular_nova/modules/GAGS/json_configs/primitive_catgirl_clothing/ferroniere_worn.json new file mode 100644 index 00000000000..3865a249892 --- /dev/null +++ b/modular_nova/modules/GAGS/json_configs/primitive_catgirl_clothing/ferroniere_worn.json @@ -0,0 +1,16 @@ +{ + "ferroniere": [ + { + "type": "icon_state", + "icon_state": "ferroniere_base", + "blend_mode": "overlay", + "color_ids": [ 1 ] + }, + { + "type": "icon_state", + "icon_state": "ferroniere_gem", + "blend_mode": "overlay", + "color_ids": [ 2 ] + } + ] +} diff --git a/modular_nova/modules/GAGS/json_configs/primitive_catgirl_clothing/tailored_dress.json b/modular_nova/modules/GAGS/json_configs/primitive_catgirl_clothing/tailored_dress.json new file mode 100644 index 00000000000..98a097909d1 --- /dev/null +++ b/modular_nova/modules/GAGS/json_configs/primitive_catgirl_clothing/tailored_dress.json @@ -0,0 +1,16 @@ +{ + "tailored_dress": [ + { + "type": "icon_state", + "icon_state": "tailored_dress_base_obj", + "blend_mode": "overlay", + "color_ids": [ 1 ] + }, + { + "type": "icon_state", + "icon_state": "tailored_dress_laces_obj", + "blend_mode": "overlay", + "color_ids": [ 2 ] + } + ] +} diff --git a/modular_nova/modules/GAGS/json_configs/primitive_catgirl_clothing/tailored_dress_worn.json b/modular_nova/modules/GAGS/json_configs/primitive_catgirl_clothing/tailored_dress_worn.json new file mode 100644 index 00000000000..2a970e9f1b5 --- /dev/null +++ b/modular_nova/modules/GAGS/json_configs/primitive_catgirl_clothing/tailored_dress_worn.json @@ -0,0 +1,16 @@ +{ + "tailored_dress": [ + { + "type": "icon_state", + "icon_state": "tailored_dress_base", + "blend_mode": "overlay", + "color_ids": [ 1 ] + }, + { + "type": "icon_state", + "icon_state": "tailored_dress_laces", + "blend_mode": "overlay", + "color_ids": [ 2 ] + } + ] +} diff --git a/modular_nova/modules/GAGS/json_configs/primitive_catgirl_clothing/tunic.json b/modular_nova/modules/GAGS/json_configs/primitive_catgirl_clothing/tunic.json new file mode 100644 index 00000000000..170c172c465 --- /dev/null +++ b/modular_nova/modules/GAGS/json_configs/primitive_catgirl_clothing/tunic.json @@ -0,0 +1,22 @@ +{ + "tunic": [ + { + "type": "icon_state", + "icon_state": "tunic_white_obj", + "blend_mode": "overlay", + "color_ids": [ 1 ] + }, + { + "type": "icon_state", + "icon_state": "tunic_dark_obj", + "blend_mode": "overlay", + "color_ids": [ 2 ] + }, + { + "type": "icon_state", + "icon_state": "tunic_belt_obj", + "blend_mode": "overlay", + "color_ids": [ 3 ] + } + ] +} diff --git a/modular_nova/modules/GAGS/json_configs/primitive_catgirl_clothing/tunic_worn.json b/modular_nova/modules/GAGS/json_configs/primitive_catgirl_clothing/tunic_worn.json new file mode 100644 index 00000000000..edfdda45356 --- /dev/null +++ b/modular_nova/modules/GAGS/json_configs/primitive_catgirl_clothing/tunic_worn.json @@ -0,0 +1,22 @@ +{ + "tunic": [ + { + "type": "icon_state", + "icon_state": "tunic_white", + "blend_mode": "overlay", + "color_ids": [ 1 ] + }, + { + "type": "icon_state", + "icon_state": "tunic_dark", + "blend_mode": "overlay", + "color_ids": [ 2 ] + }, + { + "type": "icon_state", + "icon_state": "tunic_belt", + "blend_mode": "overlay", + "color_ids": [ 3 ] + } + ] +} diff --git a/modular_nova/modules/GAGS/json_configs/suits/croptop/croptop.json b/modular_nova/modules/GAGS/json_configs/suits/croptop/croptop.json new file mode 100644 index 00000000000..2fd05c399e1 --- /dev/null +++ b/modular_nova/modules/GAGS/json_configs/suits/croptop/croptop.json @@ -0,0 +1,10 @@ +{ + "croptop": [ + { + "type": "icon_state", + "icon_state": "croptop", + "blend_mode": "overlay", + "color_ids": [ 1 ] + } + ] +} diff --git a/modular_nova/modules/GAGS/json_configs/suits/fancysuit/fancysuit_bicol.json b/modular_nova/modules/GAGS/json_configs/suits/fancysuit/fancysuit_bicol.json new file mode 100644 index 00000000000..bdea62faa16 --- /dev/null +++ b/modular_nova/modules/GAGS/json_configs/suits/fancysuit/fancysuit_bicol.json @@ -0,0 +1,21 @@ +{ + "fancysuit_casual": [ + { + "type": "icon_state", + "icon_state": "part_slacks", + "blend_mode": "overlay", + "color_ids": [ 1 ] + }, + { + "type": "icon_state", + "icon_state": "pencilskirt_belt", + "blend_mode": "overlay" + }, + { + "type": "icon_state", + "icon_state": "pencilskirt_shirt", + "blend_mode": "overlay", + "color_ids": [ 2 ] + } + ] +} diff --git a/modular_nova/modules/GAGS/json_configs/suits/fancysuit/fancysuit_quadcol.json b/modular_nova/modules/GAGS/json_configs/suits/fancysuit/fancysuit_quadcol.json new file mode 100644 index 00000000000..2e9c71ff594 --- /dev/null +++ b/modular_nova/modules/GAGS/json_configs/suits/fancysuit/fancysuit_quadcol.json @@ -0,0 +1,33 @@ +{ + "fancysuit_executive": [ + { + "type": "icon_state", + "icon_state": "part_slacks", + "blend_mode": "overlay", + "color_ids": [ 1 ] + }, + { + "type": "icon_state", + "icon_state": "pencilskirt_belt", + "blend_mode": "overlay" + }, + { + "type": "icon_state", + "icon_state": "pencilskirt_suit_base", + "blend_mode": "overlay", + "color_ids": [ 2 ] + }, + { + "type": "icon_state", + "icon_state": "pencilskirt_suit_under", + "blend_mode": "overlay", + "color_ids": [ 3 ] + }, + { + "type": "icon_state", + "icon_state": "pencilskirt_suit_tie", + "blend_mode": "overlay", + "color_ids": [ 4 ] + } + ] +} diff --git a/modular_nova/modules/GAGS/json_configs/suits/pencilskirt/pencilskirt.json b/modular_nova/modules/GAGS/json_configs/suits/pencilskirt/pencilskirt.json new file mode 100644 index 00000000000..23f0bbcb9f6 --- /dev/null +++ b/modular_nova/modules/GAGS/json_configs/suits/pencilskirt/pencilskirt.json @@ -0,0 +1,15 @@ +{ + "pencilskirt": [ + { + "type": "icon_state", + "icon_state": "pencilskirt_belt", + "blend_mode": "overlay" + }, + { + "type": "icon_state", + "icon_state": "pencilskirt_base", + "blend_mode": "overlay", + "color_ids": [ 1 ] + } + ] +} diff --git a/modular_nova/modules/GAGS/json_configs/suits/pencilskirt/pencilskirt_bicol.json b/modular_nova/modules/GAGS/json_configs/suits/pencilskirt/pencilskirt_bicol.json new file mode 100644 index 00000000000..99072525ab5 --- /dev/null +++ b/modular_nova/modules/GAGS/json_configs/suits/pencilskirt/pencilskirt_bicol.json @@ -0,0 +1,40 @@ +{ + "pencilskirt_checkers": [ + { + "type": "icon_state", + "icon_state": "pencilskirt_base", + "blend_mode": "overlay", + "color_ids": [ 1 ] + }, + { + "type": "icon_state", + "icon_state": "pencilskirt_belt", + "blend_mode": "overlay" + }, + { + "type": "icon_state", + "icon_state": "pencilskirt_checkers", + "blend_mode": "overlay", + "color_ids": [ 2 ] + } + ], + "pencilskirt_shirt": [ + { + "type": "icon_state", + "icon_state": "pencilskirt_base", + "blend_mode": "overlay", + "color_ids": [ 1 ] + }, + { + "type": "icon_state", + "icon_state": "pencilskirt_belt", + "blend_mode": "overlay" + }, + { + "type": "icon_state", + "icon_state": "pencilskirt_shirt", + "blend_mode": "overlay", + "color_ids": [ 2 ] + } + ] +} diff --git a/modular_nova/modules/GAGS/json_configs/suits/pencilskirt/pencilskirt_quadcol.json b/modular_nova/modules/GAGS/json_configs/suits/pencilskirt/pencilskirt_quadcol.json new file mode 100644 index 00000000000..8ebb891af02 --- /dev/null +++ b/modular_nova/modules/GAGS/json_configs/suits/pencilskirt/pencilskirt_quadcol.json @@ -0,0 +1,33 @@ +{ + "pencilskirt_suit": [ + { + "type": "icon_state", + "icon_state": "pencilskirt_base", + "blend_mode": "overlay", + "color_ids": [ 1 ] + }, + { + "type": "icon_state", + "icon_state": "pencilskirt_belt", + "blend_mode": "overlay" + }, + { + "type": "icon_state", + "icon_state": "pencilskirt_suit_base", + "blend_mode": "overlay", + "color_ids": [ 2 ] + }, + { + "type": "icon_state", + "icon_state": "pencilskirt_suit_under", + "blend_mode": "overlay", + "color_ids": [ 3 ] + }, + { + "type": "icon_state", + "icon_state": "pencilskirt_suit_tie", + "blend_mode": "overlay", + "color_ids": [ 4 ] + } + ] +} diff --git a/modular_nova/modules/GAGS/json_configs/suits/pencilskirt/pencilskirt_tricol.json b/modular_nova/modules/GAGS/json_configs/suits/pencilskirt/pencilskirt_tricol.json new file mode 100644 index 00000000000..b555d453589 --- /dev/null +++ b/modular_nova/modules/GAGS/json_configs/suits/pencilskirt/pencilskirt_tricol.json @@ -0,0 +1,27 @@ +{ + "pencilskirt_checkers_shirt": [ + { + "type": "icon_state", + "icon_state": "pencilskirt_base", + "blend_mode": "overlay", + "color_ids": [ 1 ] + }, + { + "type": "icon_state", + "icon_state": "pencilskirt_checkers", + "blend_mode": "overlay", + "color_ids": [ 2 ] + }, + { + "type": "icon_state", + "icon_state": "pencilskirt_belt", + "blend_mode": "overlay" + }, + { + "type": "icon_state", + "icon_state": "pencilskirt_shirt", + "blend_mode": "overlay", + "color_ids": [ 3 ] + } + ] +} diff --git a/modular_nova/modules/aesthetics/airlock/code/airlock.dm b/modular_nova/modules/aesthetics/airlock/code/airlock.dm index 21365794a12..97f043dc3c1 100644 --- a/modular_nova/modules/aesthetics/airlock/code/airlock.dm +++ b/modular_nova/modules/aesthetics/airlock/code/airlock.dm @@ -41,7 +41,7 @@ . = ..() var/pre_light_range = 0 var/pre_light_power = 0 - var/pre_light_color = "" + var/pre_light_color = initial(light_color) var/lights_overlay = "" var/frame_state diff --git a/modular_nova/modules/aesthetics/device/device.dm b/modular_nova/modules/aesthetics/device/device.dm index a03d4575130..3877acca153 100644 --- a/modular_nova/modules/aesthetics/device/device.dm +++ b/modular_nova/modules/aesthetics/device/device.dm @@ -1,18 +1,5 @@ -/obj/item/t_scanner - icon = 'modular_nova/modules/aesthetics/device/device.dmi' - -/obj/item/analyzer - icon = 'modular_nova/modules/aesthetics/device/device.dmi' - /obj/item/grenade/empgrenade icon = 'modular_nova/modules/aesthetics/device/device.dmi' /obj/item/multitool - icon = 'modular_nova/modules/aesthetics/device/device.dmi' - -/obj/item/geiger_counter - icon = 'modular_nova/modules/aesthetics/device/device.dmi' - -// This needs default but is a subtype. Pain. -/obj/item/t_scanner/adv_mining_scanner - icon = 'icons/obj/devices/scanner.dmi' + icon = 'modular_nova/master_files/icons/obj/devices/tools.dmi' diff --git a/modular_nova/modules/aesthetics/device/device.dmi b/modular_nova/modules/aesthetics/device/device.dmi index b24e0e9270b..49afd0ab5d0 100644 Binary files a/modular_nova/modules/aesthetics/device/device.dmi and b/modular_nova/modules/aesthetics/device/device.dmi differ diff --git a/modular_nova/modules/aesthetics/flag/code/signs_flags.dm b/modular_nova/modules/aesthetics/flag/code/signs_flags.dm index 28fa6627c93..a327c5f80a2 100644 --- a/modular_nova/modules/aesthetics/flag/code/signs_flags.dm +++ b/modular_nova/modules/aesthetics/flag/code/signs_flags.dm @@ -81,15 +81,6 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/structure/sign/flag/nri, 32) MAPPING_DIRECTIONAL_HELPERS(/obj/structure/sign/flag/azulea, 32) -/// Please, for the love of God, use this in Black Mesa ONLY. NOWHERE ELSE. It's the only reason it was allowed in the game. -/obj/structure/sign/flag/usa - name = "flag of the United States of America" - desc = "'Stars and Stripes', the flag of the United States of America. Its red color represents endurance and valor; blue one shows diligence, vigilance and justice, and the white one signs at pureness. Its thirteen red-and-white stripes show the initial thirteen founding colonies, and fifty stars designate the current fifty states." - icon_state = "flag_usa" - item_flag = /obj/item/sign/flag/usa - -MAPPING_DIRECTIONAL_HELPERS(/obj/structure/sign/flag/usa, 32) - /obj/structure/sign/flag/syndicate name = "flag of the Syndicate" desc = "The flag of the Sothran Syndicate. Previously used by the Sothran people as a way of declaring opposition against the Nanotrasen, now it became an intergalactic symbol of the same, yet way more skewed purpose, as more groups of interest have joined the rebellion's side for their own gain." @@ -173,13 +164,6 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/structure/sign/flag/interdyne, 32) icon_state = "folded_azulea" sign_path = /obj/structure/sign/flag/azulea -/// Please, for the love of God, use this in Black Mesa ONLY. NOWHERE ELSE. It's the only reason it was allowed in the game. -/obj/item/sign/flag/usa - name = "folded flag of the United States of America" - desc = "The folded flag of the United States of America." - icon_state = "folded_usa" - sign_path = /obj/structure/sign/flag/usa - /obj/item/sign/flag/syndicate name = "folded flag of the Syndicate" desc = "The folded flag of the Sothran Syndicate." diff --git a/modular_nova/modules/aesthetics/flag/icons/flags.dmi b/modular_nova/modules/aesthetics/flag/icons/flags.dmi index 4d2c7bd471a..d2844fc2484 100644 Binary files a/modular_nova/modules/aesthetics/flag/icons/flags.dmi and b/modular_nova/modules/aesthetics/flag/icons/flags.dmi differ diff --git a/modular_nova/modules/aesthetics/lights/code/lighting.dm b/modular_nova/modules/aesthetics/lights/code/lighting.dm index ac4238cd25d..813d8795adb 100644 --- a/modular_nova/modules/aesthetics/lights/code/lighting.dm +++ b/modular_nova/modules/aesthetics/lights/code/lighting.dm @@ -20,52 +20,27 @@ var/flicker_timer = null var/roundstart_flicker = FALSE -/obj/machinery/light/proc/turn_on(trigger, play_sound = TRUE) + +/obj/machinery/light/proc/delayed_turn_on(trigger, play_sound = TRUE, color_set, power_set, brightness_set) if(QDELETED(src)) return turning_on = FALSE if(!on) return - var/area/local_area = get_room_area(src) - var/new_brightness = brightness - var/new_power = bulb_power - var/new_color = bulb_colour - if (local_area?.fire) - new_color = fire_colour - new_brightness = fire_brightness - else if(color) - new_color = color - else if (nightshift_enabled) - new_brightness -= new_brightness * NIGHTSHIFT_LIGHT_MODIFIER - new_power -= new_power * NIGHTSHIFT_LIGHT_MODIFIER - if(!color && nightshift_light_color) - new_color = nightshift_light_color - else if(color) // In case it's spraypainted. - new_color = color - else // Adjust light values to be warmer. I doubt caching would speed this up by any worthwhile amount, as it's all very fast number and string operations. - // Convert to numbers for easier manipulation. - var/red = GETREDPART(bulb_colour) - var/green = GETGREENPART(bulb_colour) - var/blue = GETBLUEPART(bulb_colour) - - red += round(red * NIGHTSHIFT_COLOR_MODIFIER) - green -= round(green * NIGHTSHIFT_COLOR_MODIFIER * 0.3) - red = clamp(red, 0, 255) // clamp to be safe, or you can end up with an invalid hex value - green = clamp(green, 0, 255) - blue = clamp(blue, 0, 255) - new_color = "#[num2hex(red, 2)][num2hex(green, 2)][num2hex(blue, 2)]" // Splice the numbers together and turn them back to hex. - - var/matching = light && new_brightness == light.light_range && new_power == light.light_power && new_color == light.light_color - if(!matching) - switchcount++ - if( prob( min(60, (switchcount**2)*0.01) ) ) - if(trigger) - burn_out() - else - use_power = ACTIVE_POWER_USE - set_light(new_brightness, new_power, new_color) - if(play_sound) - playsound(src.loc, 'modular_nova/modules/aesthetics/lights/sound/light_on.ogg', 65, 1) + + // Copy pasted from TG's /obj/machinery/light/update() proc - only way to avoid this would to be to refactor this portion upstream to be in its own proc. + if( prob( min(60, (switchcount**2)*0.01) ) ) + if(trigger) + burn_out() + else + use_power = ACTIVE_POWER_USE + set_light( + l_range = brightness_set, + l_power = power_set, + l_color = color_set + ) + if(play_sound) + playsound(src.loc, 'modular_nova/modules/aesthetics/lights/sound/light_on.ogg', 65, 1) /obj/machinery/light/proc/start_flickering() on = FALSE diff --git a/modular_nova/modules/aesthetics/rack/code/rack.dm b/modular_nova/modules/aesthetics/rack/code/rack.dm index 0e822321d65..7eb25f836e4 100644 --- a/modular_nova/modules/aesthetics/rack/code/rack.dm +++ b/modular_nova/modules/aesthetics/rack/code/rack.dm @@ -6,50 +6,3 @@ desc = "A shelf, for storing things on. Conveinent!" icon = 'modular_nova/modules/aesthetics/rack/icons/rack.dmi' icon_state = "shelf" - -/obj/item/gun - var/on_rack = FALSE - -/obj/item/gun/proc/place_on_rack() - on_rack = TRUE - var/matrix/M = matrix() - M.Turn(-90) - transform = M - -/obj/item/gun/proc/remove_from_rack() - if(on_rack) - var/matrix/M = matrix() - transform = M - on_rack = FALSE - -/obj/item/gun/pickup(mob/user) - . = ..() - remove_from_rack() - -/obj/structure/rack/gunrack - name = "gun rack" - desc = "A gun rack for storing guns." - icon_state = "gunrack" - -/obj/structure/rack/gunrack/Initialize(mapload) - . = ..() - if(mapload) - for(var/obj/item/I in loc.contents) - if(istype(I, /obj/item/gun)) - var/obj/item/gun/to_place = I - to_place.place_on_rack() - -/obj/structure/rack/gunrack/attackby(obj/item/W, mob/living/user, params) - var/list/modifiers = params2list(params) - if (W.tool_behaviour == TOOL_WRENCH && !(obj_flags & NO_DECONSTRUCTION) && LAZYACCESS(modifiers, RIGHT_CLICK)) - W.play_tool_sound(src) - deconstruct(TRUE) - return - if(user.combat_mode) - return ..() - if(user.transferItemToLoc(W, drop_location())) - if(istype(W, /obj/item/gun)) - var/obj/item/gun/our_gun = W - our_gun.place_on_rack() - our_gun.pixel_x = rand(-10, 10) - return TRUE diff --git a/modular_nova/modules/alerts/code/default_announcer.dm b/modular_nova/modules/alerts/code/default_announcer.dm index fb56fe10edc..8fd3afa8ee4 100644 --- a/modular_nova/modules/alerts/code/default_announcer.dm +++ b/modular_nova/modules/alerts/code/default_announcer.dm @@ -40,7 +40,6 @@ ANNOUNCER_SPOOKY = 'modular_nova/modules/alerts/sound/misc/admin_horror_music.ogg', ANNOUNCER_ERTYES = 'modular_nova/modules/alerts/sound/alerts/yesert.ogg', ANNOUNCER_MUTANTS = 'modular_nova/modules/alerts/sound/alerts/hazdet.ogg', - ANNOUNCER_KLAXON = 'modular_nova/modules/black_mesa/sound/siren1_long.ogg', ANNOUNCER_NRI_RAIDERS = 'modular_nova/modules/encounters/sounds/morse.ogg', ANNOUNCER_DEPARTMENTAL = 'modular_nova/modules/alerts/sound/alerts/alert3.ogg', ANNOUNCER_SHUTTLE = 'modular_nova/modules/alerts/sound/alerts/alert3.ogg', diff --git a/modular_nova/modules/alternative_job_titles/code/alt_job_titles.dm b/modular_nova/modules/alternative_job_titles/code/alt_job_titles.dm index 11de5521903..e0b64fd3156 100644 --- a/modular_nova/modules/alternative_job_titles/code/alt_job_titles.dm +++ b/modular_nova/modules/alternative_job_titles/code/alt_job_titles.dm @@ -29,6 +29,7 @@ "Trader", "Off-Duty Crew", "Off-Duty Staff", + "Colonist", ) /datum/job/atmospheric_technician @@ -91,6 +92,7 @@ alt_titles = list( "Bouncer", "Service Guard", + "Doorman", ) /datum/job/corrections_officer @@ -115,6 +117,7 @@ "Deck Worker", "Inventory Associate", "Mailman", + "Mail Carrier", "Receiving Clerk", "Union Associate", ) @@ -123,15 +126,20 @@ alt_titles = list( "Chaplain", "High Priest", + "High Priestess", "Imam", "Magister", "Monk", + "Nun", "Oracle", "Preacher", "Priest", + "Priestess", "Pontifex", "Rabbi", "Reverend", + "Shrine Maiden", + "Shrine Guardian", ) /datum/job/chemist @@ -299,6 +307,7 @@ "Paramedic", "Emergency Medical Technician", "Search and Rescue Technician", + "Trauma Team Responder", ) /datum/job/prisoner @@ -343,6 +352,7 @@ alt_titles = list( "Roboticist", "Biomechanical Engineer", + "Cyberneticist", "Machinist", "Mechatronic Engineer", "Apprentice Roboticist", @@ -360,6 +370,7 @@ "Lab Technician", "Ordnance Technician", "Plasma Researcher", + "Resonance Researcher", "Theoretical Physicist", "Xenoarchaeologist", "Xenobiologist", diff --git a/modular_nova/modules/ashwalkers/code/items/ash_surgery.dm b/modular_nova/modules/ashwalkers/code/items/ash_surgery.dm index 5eb40601e86..ec263c5dedf 100644 --- a/modular_nova/modules/ashwalkers/code/items/ash_surgery.dm +++ b/modular_nova/modules/ashwalkers/code/items/ash_surgery.dm @@ -88,3 +88,18 @@ /datum/crafting_recipe/ash_recipe/ash_hemostat name = "Ash Hemostat" result = /obj/item/hemostat/ashwalker + +/obj/item/bonesetter/ashwalker + name = "primitive bonesetter" + icon = 'modular_nova/modules/ashwalkers/icons/ashwalker_tools.dmi' + icon_state = "bonesetter" + + greyscale_colors = null + greyscale_config = null + greyscale_config_inhand_left = null + greyscale_config_inhand_right = null + greyscale_config_worn = null + +/datum/crafting_recipe/ash_recipe/ash_bonesetter + name = "Ash Bonesetter" + result = /obj/item/bonesetter/ashwalker diff --git a/modular_nova/modules/ashwalkers/icons/ashwalker_tools.dmi b/modular_nova/modules/ashwalkers/icons/ashwalker_tools.dmi index aa1224aca1e..5066689e2e2 100644 Binary files a/modular_nova/modules/ashwalkers/icons/ashwalker_tools.dmi and b/modular_nova/modules/ashwalkers/icons/ashwalker_tools.dmi differ diff --git a/modular_nova/modules/automapper/code/area_spawn_subsystem.dm b/modular_nova/modules/automapper/code/area_spawn_subsystem.dm index f95548cb50c..358dc8c29fb 100644 --- a/modular_nova/modules/automapper/code/area_spawn_subsystem.dm +++ b/modular_nova/modules/automapper/code/area_spawn_subsystem.dm @@ -91,11 +91,12 @@ SUBSYSTEM_DEF(area_spawn) turf_list = area_turf_info["[mode]"] = list() // Get highest priority items - for(var/turf/iterating_turf as anything in area.get_contained_turfs()) - // Only retain turfs of the highest priority - var/priority = process_turf(iterating_turf, mode) - if(priority > 0) - LAZYADDASSOC(turf_list, "[priority]", list(iterating_turf)) + for(var/list/zlevel_turfs as anything in area.get_zlevel_turf_lists()) + for(var/turf/iterating_turf as anything in zlevel_turfs) + // Only retain turfs of the highest priority + var/priority = process_turf(iterating_turf, mode) + if(priority > 0) + LAZYADDASSOC(turf_list, "[priority]", list(iterating_turf)) // Sort the priorities descending return sortTim(turf_list, GLOBAL_PROC_REF(cmp_num_string_asc)) @@ -333,17 +334,18 @@ SUBSYSTEM_DEF(area_spawn) if(!found_area) continue - for(var/turf/candidate_turf as anything in found_area.get_contained_turfs()) - // Don't spawn if there's already a desired_atom here. - if(is_type_on_turf(candidate_turf, desired_atom)) - continue + for(var/list/zlevel_turfs as anything in found_area.get_zlevel_turf_lists()) + for(var/turf/candidate_turf as anything in zlevel_turfs) + // Don't spawn if there's already a desired_atom here. + if(is_type_on_turf(candidate_turf, desired_atom)) + continue - for(var/over_atom_type in over_atoms) - // Spawn on the first one we find in the turf and stop. - if(is_type_on_turf(candidate_turf, over_atom_type)) - new desired_atom(candidate_turf) - // Break the over_atom_type loop. - break + for(var/over_atom_type in over_atoms) + // Spawn on the first one we find in the turf and stop. + if(is_type_on_turf(candidate_turf, over_atom_type)) + new desired_atom(candidate_turf) + // Break the over_atom_type loop. + break /obj/effect/turf_test name = "PASS" @@ -361,9 +363,10 @@ SUBSYSTEM_DEF(area_spawn) set name = "Test Area Spawner" set desc = "Show area spawner placement candidates as an overlay." - for(var/turf/area_turf as anything in area.get_contained_turfs()) - for(var/obj/effect/turf_test/old_test in area_turf) - qdel(old_test) + for(var/list/zlevel_turfs as anything in area.get_zlevel_turf_lists()) + for(var/turf/area_turf as anything in zlevel_turfs) + for(var/obj/effect/turf_test/old_test in area_turf) + qdel(old_test) SSarea_spawn.clear_cache() for(var/mode in 0 to AREA_SPAWN_MODE_COUNT - 1) diff --git a/modular_nova/modules/bitrunning/code/virtual_domains/ancient_milsim/mobs.dm b/modular_nova/modules/bitrunning/code/virtual_domains/ancient_milsim/mobs.dm index d37988d9443..643cda53280 100644 --- a/modular_nova/modules/bitrunning/code/virtual_domains/ancient_milsim/mobs.dm +++ b/modular_nova/modules/bitrunning/code/virtual_domains/ancient_milsim/mobs.dm @@ -13,7 +13,7 @@ /mob/living/basic/trooper/cin_soldier/melee r_hand = /obj/item/melee/energy/sword/saber/purple - l_hand = /obj/item/shield/riot/pointman/hecu + l_hand = /obj/item/shield/energy var/projectile_deflect_chance = 20 /mob/living/basic/trooper/cin_soldier/melee/bullet_act(obj/projectile/projectile) diff --git a/modular_nova/modules/bitrunning/code/virtual_domains/ancient_milsim/outfit.dm b/modular_nova/modules/bitrunning/code/virtual_domains/ancient_milsim/outfit.dm index 1811071c5b0..e722c857862 100644 --- a/modular_nova/modules/bitrunning/code/virtual_domains/ancient_milsim/outfit.dm +++ b/modular_nova/modules/bitrunning/code/virtual_domains/ancient_milsim/outfit.dm @@ -1,13 +1,13 @@ /datum/outfit/solfed_bitrun name = "Bitrunning SolFed Marine" - uniform = /obj/item/clothing/under/rank/security/officer/hecu + uniform = /obj/item/clothing/under/sol_peacekeeper head = null - mask = /obj/item/clothing/mask/gas/hecu2 - gloves = /obj/item/clothing/gloves/combat + mask = /obj/item/clothing/mask/gas/sechailer/syndicate + gloves = /obj/item/clothing/gloves/frontier_colonist suit = null - shoes = /obj/item/clothing/shoes/combat - back = /obj/item/storage/backpack/ert/odst/hecu + shoes = /obj/item/clothing/shoes/jackboots/frontier_colonist + back = /obj/item/storage/backpack/industrial/frontier_colonist glasses = null ears = /obj/item/radio/headset/headset_faction/bowman id = /obj/item/card/id/advanced/solfed diff --git a/modular_nova/modules/black_mesa/code/armaments/__armament_bodyarmor.dm b/modular_nova/modules/black_mesa/code/armaments/__armament_bodyarmor.dm deleted file mode 100644 index f4175728e65..00000000000 --- a/modular_nova/modules/black_mesa/code/armaments/__armament_bodyarmor.dm +++ /dev/null @@ -1,45 +0,0 @@ - -/datum/armament_entry/hecu/bodyarmor - category = "Armor Kit" - category_item_limit = 4 - -/datum/armament_entry/hecu/bodyarmor/normal - name = "Basic Armor Kit" - description = "Contains a set of two basic armor pieces, meant to decently protect your body against everything." - item_type = /obj/item/storage/box/armor_set/normal - max_purchase = 4 - cost = 6 - -/datum/armament_entry/hecu/bodyarmor/pcv - name = "PCV Kit" - description = "Contains a set of two hazardous environment armor pieces. This armor gives you a robust all-around protection, as well as mild regeneration." - item_type = /obj/item/storage/box/armor_set/pcv - max_purchase = 4 - cost = 20 - -/obj/item/storage/box/armor_set - name = "box of armor" - desc = "Box full of armor. Amazing." - icon_state = "box" - illustration = null - -/obj/item/storage/box/armor_set/Initialize(mapload) - . = ..() - atom_storage.set_holdable(list(/obj/item/clothing/suit/armor,/obj/item/clothing/suit/space/hev_suit/pcv,/obj/item/clothing/head/helmet)) - atom_storage.max_slots = 2 - -/obj/item/storage/box/armor_set/normal - name = "combat armor set" - desc = "Box containing a damage-resistant armor vest and helmet." - -/obj/item/storage/box/armor_set/normal/PopulateContents() - new /obj/item/clothing/suit/armor/vest/hecu(src) - new /obj/item/clothing/head/helmet/hecu(src) - -/obj/item/storage/box/armor_set/pcv - name = "PCV Mk. II armor set" - desc = "Box containing a PCV Mark II armor vest and helmet." - -/obj/item/storage/box/armor_set/pcv/PopulateContents() - new /obj/item/clothing/suit/space/hev_suit/pcv(src) - new /obj/item/clothing/head/helmet/space/hev_suit/pcv(src) diff --git a/modular_nova/modules/black_mesa/code/armaments/_armament_primary.dm b/modular_nova/modules/black_mesa/code/armaments/_armament_primary.dm deleted file mode 100644 index 4ef7c1e2c11..00000000000 --- a/modular_nova/modules/black_mesa/code/armaments/_armament_primary.dm +++ /dev/null @@ -1,76 +0,0 @@ -/datum/armament_entry/hecu/primary - category = ARMAMENT_CATEGORY_PRIMARY - category_item_limit = 4 - slot_to_equip = ITEM_SLOT_SUITSTORE - cost = 10 - -/datum/armament_entry/hecu/primary/submachinegun - subcategory = ARMAMENT_SUBCATEGORY_SUBMACHINEGUN - mags_to_spawn = 4 - -/datum/armament_entry/hecu/primary/submachinegun/sindano - item_type = /obj/item/gun/ballistic/automatic/sol_smg - max_purchase = 4 - cost = 7 - -/datum/armament_entry/hecu/primary/submachinegun/bogseo - item_type = /obj/item/gun/ballistic/automatic/xhihao_smg - max_purchase = 2 - cost = 8 - -/datum/armament_entry/hecu/primary/assaultrifle - subcategory = ARMAMENT_SUBCATEGORY_ASSAULTRIFLE - mags_to_spawn = 3 - -/datum/armament_entry/hecu/primary/assaultrifle/infanteria - item_type = /obj/item/gun/ballistic/automatic/sol_rifle - max_purchase = 2 - cost = 11 - magazine = /obj/item/ammo_box/magazine/c40sol_rifle/standard - -/datum/armament_entry/hecu/primary/shotgun - subcategory = ARMAMENT_SUBCATEGORY_SHOTGUN - mags_to_spawn = 1 - magazine = /obj/item/storage/box/ammo_box/shotgun_12g - magazine_cost = 4 - -/datum/armament_entry/hecu/primary/shotgun/shotgun_highcap - item_type = /obj/item/gun/ballistic/shotgun/riot/sol - max_purchase = 2 - cost = 5 - -/datum/armament_entry/hecu/primary/shotgun/autoshotgun_pump - item_type = /obj/item/gun/ballistic/shotgun/automatic/as2 - max_purchase = 1 - cost = 7 - -/datum/armament_entry/hecu/primary/special - subcategory = ARMAMENT_SUBCATEGORY_SPECIAL - mags_to_spawn = 2 - -/datum/armament_entry/hecu/primary/special/sniper_rifle - item_type = /obj/item/gun/ballistic/automatic/sol_rifle/marksman - max_purchase = 1 - cost = 16 - -/datum/armament_entry/hecu/primary/special/hmg - item_type = /obj/item/mounted_machine_gun_folded - max_purchase = 1 - cost = 20 - magazine = /obj/item/ammo_box/magazine/mmg_box - mags_to_spawn = 1 - magazine_cost = 2 - -/obj/item/storage/box/ammo_box/shotgun_12g - -/obj/item/storage/box/ammo_box/shotgun_12g/PopulateContents() - var/funshell = pick( - /obj/item/ammo_box/advanced/s12gauge/incendiary, - /obj/item/ammo_box/advanced/s12gauge/flechette, - /obj/item/ammo_box/advanced/s12gauge/beehive, - /obj/item/ammo_box/advanced/s12gauge/antitide, - /obj/item/ammo_box/advanced/s12gauge/express, - ) - new /obj/item/ammo_box/advanced/s12gauge/magnum(src) - new /obj/item/ammo_box/advanced/s12gauge(src) - new funshell(src) diff --git a/modular_nova/modules/black_mesa/code/armaments/_armaments_secondary.dm b/modular_nova/modules/black_mesa/code/armaments/_armaments_secondary.dm deleted file mode 100644 index 2098c72a718..00000000000 --- a/modular_nova/modules/black_mesa/code/armaments/_armaments_secondary.dm +++ /dev/null @@ -1,37 +0,0 @@ -// SECONDARY WEAPONS -/datum/armament_entry/hecu/secondary - category = ARMAMENT_CATEGORY_SECONDARY - category_item_limit = 4 - cost = 5 - mags_to_spawn = 2 - -/datum/armament_entry/hecu/secondary/pistol - subcategory = ARMAMENT_SUBCATEGORY_PISTOL - -/datum/armament_entry/hecu/secondary/pistol/m1911 - item_type = /obj/item/gun/ballistic/automatic/pistol/m1911 - max_purchase = 4 - -/datum/armament_entry/hecu/secondary/pistol/pistol - item_type = /obj/item/gun/ballistic/automatic/pistol/sol - max_purchase = 4 - mags_to_spawn = 3 - -/datum/armament_entry/hecu/secondary/pistol/revolver - item_type = /obj/item/gun/ballistic/revolver/c38/detective - max_purchase = 4 - cost = 3 - mags_to_spawn = 0 - magazine = /obj/item/storage/box/ammo_box/revolver - magazine_cost = 4 - -/obj/item/storage/box/ammo_box/revolver - -/obj/item/storage/box/ammo_box/revolver/PopulateContents() - new /obj/item/ammo_box/c38(src) - new /obj/item/ammo_box/c38(src) - new /obj/item/ammo_box/c38(src) - new /obj/item/ammo_box/c38(src) - new /obj/item/ammo_box/c38/dumdum(src) - new /obj/item/ammo_box/c38/dumdum(src) - new /obj/item/ammo_box/c38/match(src) diff --git a/modular_nova/modules/black_mesa/code/armaments/armament_explosives.dm b/modular_nova/modules/black_mesa/code/armaments/armament_explosives.dm deleted file mode 100644 index d9c94ffdb4d..00000000000 --- a/modular_nova/modules/black_mesa/code/armaments/armament_explosives.dm +++ /dev/null @@ -1,37 +0,0 @@ -#define ARMAMENT_CATEGORY_EXPLOSIVES "Explosives" - -/datum/armament_entry/hecu/explosives - category = ARMAMENT_CATEGORY_EXPLOSIVES - category_item_limit = 8 - -/datum/armament_entry/hecu/explosives/frag - item_type = /obj/item/grenade/frag - max_purchase = 8 - cost = 3 - -/datum/armament_entry/hecu/explosives/high_explosive - item_type = /obj/item/grenade/syndieminibomb/concussion - max_purchase = 8 - cost = 3 - -/datum/armament_entry/hecu/explosives/flashbang - item_type = /obj/item/grenade/flashbang - max_purchase = 8 - cost = 2 - -/datum/armament_entry/hecu/explosives/smoke - item_type = /obj/item/grenade/smokebomb - max_purchase = 8 - cost = 1 - -/datum/armament_entry/hecu/explosives/mine - item_type = /obj/item/minespawner/explosive - max_purchase = 8 - cost = 1 - -/datum/armament_entry/hecu/explosives/c4 - item_type = /obj/item/grenade/c4 - max_purchase = 3 - cost = 3 - -#undef ARMAMENT_CATEGORY_EXPLOSIVES diff --git a/modular_nova/modules/black_mesa/code/armaments/armament_medical.dm b/modular_nova/modules/black_mesa/code/armaments/armament_medical.dm deleted file mode 100644 index a7266b655b9..00000000000 --- a/modular_nova/modules/black_mesa/code/armaments/armament_medical.dm +++ /dev/null @@ -1,79 +0,0 @@ -/datum/armament_entry/hecu/medical - category = ARMAMENT_CATEGORY_MEDICAL - category_item_limit = 20 - -/datum/armament_entry/hecu/medical/defib - item_type = /obj/item/defibrillator/loaded - max_purchase = 1 - cost = 4 - -/datum/armament_entry/hecu/medical/medkit - subcategory = ARMAMENT_SUBCATEGORY_MEDKIT - -/datum/armament_entry/hecu/medical/medkit/basic - item_type = /obj/item/storage/medkit/regular - max_purchase = 3 - cost = 3 - -/datum/armament_entry/hecu/medical/medkit/brute - item_type = /obj/item/storage/medkit/brute - max_purchase = 2 - cost = 3 - -/datum/armament_entry/hecu/medical/medkit/toxin - item_type = /obj/item/storage/medkit/toxin - max_purchase = 1 - cost = 2 - -/datum/armament_entry/hecu/medical/medkit/fire - item_type = /obj/item/storage/medkit/fire - max_purchase = 1 - cost = 3 - -/datum/armament_entry/hecu/medical/medkit/o2 - item_type = /obj/item/storage/medkit/o2 - max_purchase = 1 - cost = 2 - -/datum/armament_entry/hecu/medical/medkit/advanced - item_type = /obj/item/storage/medkit/advanced - max_purchase = 1 - cost = 4 - -/datum/armament_entry/hecu/medical/medkit/expeditionary - item_type = /obj/item/storage/medkit/expeditionary - max_purchase = 1 - cost = 5 - -/datum/armament_entry/hecu/medical/injector - subcategory = ARMAMENT_SUBCATEGORY_INJECTOR - -/datum/armament_entry/hecu/medical/injector/bloodloss - item_type = /obj/item/reagent_containers/hypospray/medipen/blood_loss - max_purchase = 4 - cost = 1 - -/datum/armament_entry/hecu/medical/injector/atropine - item_type = /obj/item/reagent_containers/hypospray/medipen/atropine - max_purchase = 4 - cost = 1 - -/datum/armament_entry/hecu/medical/injector/salacid - item_type = /obj/item/reagent_containers/hypospray/medipen/salacid - max_purchase = 4 - cost = 1 - -/datum/armament_entry/hecu/medical/injector/oxandrolone - item_type = /obj/item/reagent_containers/hypospray/medipen/oxandrolone - max_purchase = 4 - cost = 1 - -/datum/armament_entry/hecu/medical/injector/stimulant - item_type = /obj/item/reagent_containers/hypospray/medipen/stimulants - max_purchase = 2 - cost = 4 - -/datum/armament_entry/hecu/medical/injector/bag - item_type = /obj/item/storage/medkit/civil_defense/stocked - max_purchase = 2 - cost = 5 diff --git a/modular_nova/modules/black_mesa/code/armaments/armament_melee.dm b/modular_nova/modules/black_mesa/code/armaments/armament_melee.dm deleted file mode 100644 index 52bbc0c2ccc..00000000000 --- a/modular_nova/modules/black_mesa/code/armaments/armament_melee.dm +++ /dev/null @@ -1,28 +0,0 @@ -/datum/armament_entry/hecu/melee - category = ARMAMENT_CATEGORY_MELEE - category_item_limit = 4 - -/datum/armament_entry/hecu/melee/lethal - subcategory = ARMAMENT_SUBCATEGORY_MELEE_LETHAL - -/datum/armament_entry/hecu/melee/lethal/combat_knife - item_type = /obj/item/knife/combat - max_purchase = 4 - cost = 3 - -/datum/armament_entry/hecu/melee/lethal/tomahawk - item_type = /obj/item/melee/tomahawk - max_purchase = 4 - cost = 5 - -/datum/armament_entry/hecu/melee/nonlethal - subcategory = ARMAMENT_SUBCATEGORY_MELEE_NONLETHAL - -/datum/armament_entry/hecu/melee/nonlethal/baton - item_type = /obj/item/melee/baton - max_purchase = 4 - cost = 5 - -/datum/armament_entry/hecu/melee/nonlethal/kravmaga - item_type = /obj/item/clothing/gloves/krav_maga/combatglovesplus - cost = 10 diff --git a/modular_nova/modules/black_mesa/code/armaments/armament_miscellaneous.dm b/modular_nova/modules/black_mesa/code/armaments/armament_miscellaneous.dm deleted file mode 100644 index 896cb212fac..00000000000 --- a/modular_nova/modules/black_mesa/code/armaments/armament_miscellaneous.dm +++ /dev/null @@ -1,63 +0,0 @@ -/datum/armament_entry/hecu/misc - category = "Misc. Equipment" - category_item_limit = 24 - -/datum/armament_entry/hecu/misc/cigarettes - item_type = /obj/item/storage/fancy/cigarettes/cigpack_syndicate - max_purchase = 2 - cost = 1 - -/datum/armament_entry/hecu/misc/zippo - item_type = /obj/item/lighter - max_purchase = 1 - cost = 1 - -/datum/armament_entry/hecu/misc/rollie - item_type = /obj/item/clothing/mask/cigarette/rollie/cannabis - max_purchase = 8 - cost = 1 - -/datum/armament_entry/hecu/misc/mre - item_type = /obj/item/storage/box/hecu_rations - max_purchase = 6 - cost = 1 - -/datum/armament_entry/hecu/misc/pizza - item_type = /obj/item/pizzabox/random - max_purchase = 3 - cost = 2 - -/datum/armament_entry/hecu/misc/guitar - item_type = /obj/item/instrument/guitar - max_purchase = 1 - cost = 1 - -/datum/armament_entry/hecu/misc/cards - item_type = /obj/item/toy/cards/deck - max_purchase = 1 - cost = 1 - -/datum/armament_entry/hecu/misc/dosh - item_type = /obj/item/stack/spacecash/c1000 - max_purchase = 16 - cost = 1 - -/datum/armament_entry/hecu/misc/whiskey - item_type = /obj/item/reagent_containers/cup/glass/bottle/whiskey - max_purchase = 2 - cost = 1 - -/datum/armament_entry/hecu/misc/balaclava - item_type = /obj/item/clothing/mask/balaclavaadjust - max_purchase = 6 - cost = 1 - -/datum/armament_entry/hecu/misc/uniform - item_type = /obj/item/clothing/under/rank/security/officer/hecu - max_purchase = 6 - cost = 1 - -/datum/armament_entry/hecu/misc/hudglasses - item_type = /obj/item/clothing/glasses/hud/security/sunglasses/peacekeeper - max_purchase = 6 - cost = 2 diff --git a/modular_nova/modules/black_mesa/code/armaments/armament_utility.dm b/modular_nova/modules/black_mesa/code/armaments/armament_utility.dm deleted file mode 100644 index 90a1f8159cd..00000000000 --- a/modular_nova/modules/black_mesa/code/armaments/armament_utility.dm +++ /dev/null @@ -1,74 +0,0 @@ -#define ARMAMENT_CATEGORY_UTILITY "Utility" - -/datum/armament_entry/hecu/utility - category = ARMAMENT_CATEGORY_UTILITY - category_item_limit = 20 - -/datum/armament_entry/hecu/utility/survival_pack - item_type = /obj/item/storage/box/nri_survival_pack - max_purchase = 4 - cost = 3 - -/datum/armament_entry/hecu/utility/pouch - item_type = /obj/item/storage/pouch/ammo - max_purchase = 8 - cost = 1 - -/datum/armament_entry/hecu/utility/pouch_knives - item_type = /obj/item/storage/pouch/ammo/marksman - max_purchase = 4 - cost = 3 - -/datum/armament_entry/hecu/utility/basic_tools - item_type = /obj/item/storage/toolbox/mechanical - max_purchase = 2 - cost = 1 - -/datum/armament_entry/hecu/utility/advanced_tools - name = "Powertoolbelt" - description = "Tool belt full of power-ful tools." - item_type = /obj/item/storage/belt/utility/full/powertools - max_purchase = 1 - cost = 4 - -/datum/armament_entry/hecu/utility/light_device - item_type = /obj/item/construction/rld/mini - max_purchase = 2 - cost = 3 - -/datum/armament_entry/hecu/utility/compact_shield - item_type = /obj/item/shield/riot/tele - max_purchase = 1 - cost = 5 - -/datum/armament_entry/hecu/utility/flash_shield - item_type = /obj/item/shield/riot/flash - max_purchase = 1 - cost = 10 - -/datum/armament_entry/hecu/utility/combat_shield - item_type = /obj/item/shield/riot/pointman/hecu - max_purchase = 1 - cost = 20 - -/datum/armament_entry/hecu/utility/zipties - item_type = /obj/item/storage/box/zipties - max_purchase = 2 - cost = 1 - -/datum/armament_entry/hecu/utility/suppressor - item_type = /obj/item/suppressor/standard - max_purchase = 4 - cost = 2 - -/datum/armament_entry/hecu/utility/bowman - item_type = /obj/item/radio/headset/headset_faction/bowman - max_purchase = 3 - cost = 4 - -/datum/armament_entry/hecu/utility/breaching_hammer //Mesa more like R6S amirite - item_type = /obj/item/melee/breaching_hammer - max_purchase = 1 - cost = 4 - -#undef ARMAMENT_CATEGORY_UTILITY diff --git a/modular_nova/modules/black_mesa/code/armaments/hecu_armament_station.dm b/modular_nova/modules/black_mesa/code/armaments/hecu_armament_station.dm deleted file mode 100644 index e6839d93d26..00000000000 --- a/modular_nova/modules/black_mesa/code/armaments/hecu_armament_station.dm +++ /dev/null @@ -1,24 +0,0 @@ -// VENDOR -/obj/machinery/armament_station/hecu - required_access = list(ACCESS_AWAY_SEC) - - armament_type = /datum/armament_entry/hecu - -// POINTS CARDS - -/obj/item/armament_points_card/hecu - points = 35 - -// ARMAMENT ENTRIES - -/datum/armament_entry/hecu - var/mags_to_spawn = 5 - -/datum/armament_entry/hecu/after_equip(turf/safe_drop_location, obj/item/item_to_equip) - if(istype(item_to_equip, /obj/item/gun/ballistic)) - var/obj/item/gun/ballistic/spawned_ballistic_gun = item_to_equip - if(spawned_ballistic_gun.magazine && !istype(spawned_ballistic_gun.magazine, /obj/item/ammo_box/magazine/internal)) - var/obj/item/storage/box/ammo_box/spawned_box = new(safe_drop_location) - spawned_box.name = "ammo box - [spawned_ballistic_gun.name]" - for(var/i in 1 to mags_to_spawn) - new spawned_ballistic_gun.spawn_magazine_type (spawned_box) diff --git a/modular_nova/modules/black_mesa/code/armor.dm b/modular_nova/modules/black_mesa/code/armor.dm deleted file mode 100644 index a376b929f3d..00000000000 --- a/modular_nova/modules/black_mesa/code/armor.dm +++ /dev/null @@ -1,75 +0,0 @@ -/obj/item/clothing/suit/armor/vest/hecu - name = "combat vest" - desc = "Vest designed to take heavy beating and probably keep the user alive in the process." - armor_type = /datum/armor/vest_hecu - icon_state = "ceramic_vest" - icon = 'modular_nova/modules/awaymissions_nova/icons/hecucloth.dmi' - worn_icon = 'modular_nova/modules/awaymissions_nova/icons/hecumob.dmi' - worn_icon_digi = 'modular_nova/modules/awaymissions_nova/icons/hecumob_digi.dmi' - uses_advanced_reskins = TRUE - unique_reskin = list( - "Basic" = list( - RESKIN_ICON_STATE = "ceramic_vest", - RESKIN_WORN_ICON_STATE = "ceramic_vest" - ), - "Corpsman" = list( - RESKIN_ICON_STATE = "ceramic_vest_medic", - RESKIN_WORN_ICON_STATE = "ceramic_vest_medic" - ), - "Basic Black" = list( - RESKIN_ICON_STATE = "ceramic_vest_black", - RESKIN_WORN_ICON_STATE = "ceramic_vest_black" - ), - "Corpsman Black" = list( - RESKIN_ICON_STATE = "ceramic_vest_medic_black", - RESKIN_WORN_ICON_STATE = "ceramic_vest_medic_black" - ), - ) - -/datum/armor/vest_hecu - melee = 40 - bullet = 40 - laser = 40 - energy = 40 - bomb = 40 - fire = 80 - acid = 100 - wound = 30 - -/obj/item/clothing/head/helmet/hecu - name = "combat helmet" - desc = "Helmet designed to take heavy beating and probably keep the user alive in the process." - armor_type = /datum/armor/helmet_hecu - icon_state = "ceramic_helmet" - icon = 'modular_nova/modules/awaymissions_nova/icons/hecucloth.dmi' - worn_icon = 'modular_nova/modules/awaymissions_nova/icons/hecumob.dmi' - worn_icon_digi = 'modular_nova/modules/awaymissions_nova/icons/hecumob_muzzled.dmi' - uses_advanced_reskins = TRUE - unique_reskin = list( - "Basic" = list( - RESKIN_ICON_STATE = "ceramic_helmet", - RESKIN_WORN_ICON_STATE = "ceramic_helmet" - ), - "Corpsman" = list( - RESKIN_ICON_STATE = "ceramic_helmet_medic", - RESKIN_WORN_ICON_STATE = "ceramic_helmet_medic" - ), - "Basic Black" = list( - RESKIN_ICON_STATE = "ceramic_helmet_black", - RESKIN_WORN_ICON_STATE = "ceramic_helmet_black" - ), - "Corpsman Black" = list( - RESKIN_ICON_STATE = "ceramic_helmet_medic_black", - RESKIN_WORN_ICON_STATE = "ceramic_helmet_medic_black" - ), - ) - -/datum/armor/helmet_hecu - melee = 30 - bullet = 30 - laser = 30 - energy = 30 - bomb = 30 - fire = 80 - acid = 100 - wound = 30 diff --git a/modular_nova/modules/black_mesa/code/bump_teleporter.dm b/modular_nova/modules/black_mesa/code/bump_teleporter.dm deleted file mode 100644 index 2d6f92ce2cb..00000000000 --- a/modular_nova/modules/black_mesa/code/bump_teleporter.dm +++ /dev/null @@ -1,17 +0,0 @@ -/obj/effect/bump_teleporter/Bumped(atom/movable/bumper) - if(!validate_setup(bumper)) - return - - // Extend original bump_teleporter functionality to randomly pick one of the matching teleporters, - // instead of the first one. - var/list/compatable_teleporters = list() - for(var/obj/effect/bump_teleporter/teleporter in AllTeleporters) - if(teleporter.id == id_target) - compatable_teleporters += teleporter - - if(!LAZYLEN(compatable_teleporters)) - stack_trace("Bump_teleporter [src] could not find a teleporter with id [id_target]!") - return - - var/obj/picked_teleporter = pick(compatable_teleporters) - teleport_action(bumper, get_turf(picked_teleporter)) //Teleport to location with correct id. diff --git a/modular_nova/modules/black_mesa/code/drops.dm b/modular_nova/modules/black_mesa/code/drops.dm deleted file mode 100644 index 30ab8bf0cf0..00000000000 --- a/modular_nova/modules/black_mesa/code/drops.dm +++ /dev/null @@ -1,19 +0,0 @@ -/obj/effect/spawner/random/hecu_smg - name = "HECU SMG drops" - spawn_all_loot = FALSE - loot = list(/obj/item/gun/ballistic/automatic/sol_smg = 15, - /obj/item/ammo_box/magazine/c35sol_pistol/stendo = 25, - /obj/item/clothing/mask/gas/hecu2 = 15, - /obj/item/clothing/head/helmet = 15, - /obj/item/clothing/suit/armor/vest = 15, - /obj/item/clothing/shoes/combat = 15) - -/obj/effect/spawner/random/hecu_deagle - name = "HECU Deagle drops" - spawn_all_loot = FALSE - loot = list(/obj/item/gun/ballistic/automatic/pistol/deagle = 15, - /obj/item/ammo_box/magazine/m50 = 25, - /obj/item/clothing/mask/gas/hecu2 = 15, - /obj/item/clothing/head/helmet = 15, - /obj/item/clothing/suit/armor/vest = 15, - /obj/item/clothing/shoes/combat = 15) diff --git a/modular_nova/modules/black_mesa/code/fluff.dm b/modular_nova/modules/black_mesa/code/fluff.dm deleted file mode 100644 index b0fd93f3bd7..00000000000 --- a/modular_nova/modules/black_mesa/code/fluff.dm +++ /dev/null @@ -1,181 +0,0 @@ -///I couldn't do this via radios. I'll do this via tapes. -///Various announcements and radio transmissions I've copypasted from the Black Mesa, to make the away mission feel more a u t h e n t i c . -///Three EASes for the Vanguard and BMST, three HECU-related ones to tell them they're fucked. - -/obj/item/tape/ruins/black_mesa/first_eas //First EAS record, the local disaster. - icon_state = "tape_blue" - desc = "The tape with some signs of date. Probably used by some aspiring wave listener." - - used_capacity = 240 - storedinfo = list( - 1 = "The universal recorder says, \"Recording started.\"", - 2 = "EAS Announcer blares, \"The following message is transmitted at the request of local authorities.\"", - 3 = "EAS Announcer states, \"At 9:47 AM, Mountain Time, a disaster of unknown type has occurred at the Black Mesa Research Facility causing significant damage and failure to various power and communication systems in the surrounding areas.\"", - 4 = "EAS Announcer clarifies, \"An immediate evacuation order has been issued for all residents within a 75 mile radius of the facility, and on-site military has been dispatched to provide assistance.\"", - 5 = "EAS Announcer echoes, \"Make sure to bring an emergency supply of food, water, clothing, first aid kit, flashlights with extra batteries, and battery powered radios.\"", - 6 = "EAS Announcer states, \"Follow local evacuation routes which have been marked by local authorities and only use one vehicle.\"", - 7 = "EAS Announcer warns, \"Do not return to the warning area until the all clear has been given.\"", - 8 = "EAS Announcer announces, \"If you are not in the evacuation zone stay where you are.\"", - 9 = "EAS Announcer announces, \"If you are within the evacuation area and have no transportation locate your nearest police department or military officer.\"", - 10 = "EAS Announcer announces, \"Do not use telephones or cell phones except in the case of emergencies.\"", - 11 = "EAS Announcer announces, \"Stay tuned to local news media outlets for further details and information on this situation.\"", - 12 = "The universal recorder says, \"Recording stopped.\"", - ) - timestamp = list( - 1 = 0, - 2 = 20, - 3 = 40, - 4 = 80, - 5 = 100, - 6 = 120, - 7 = 140, - 8 = 160, - 9 = 180, - 10 = 200, - 11 = 220, - 12 = 240, - ) - -/obj/item/tape/ruins/black_mesa/second_eas //Second EAS record, the local disaster. - icon_state = "tape_white" - desc = "The tape with some markings of blood. Probably used by some (now deceased) radio enthusiast." - - used_capacity = 240 - storedinfo = list( - 1 = "The universal recorder says, \"Recording started.\"", - 2 = "EAS Announcer blares, \"The following message is transmitted at the request of the New Mexico Department of Emergency Services.\"", - 3 = "EAS Announcer states, \"At 9:47 AM, Mountain Standard Time, a disaster of unknown type has occurred at the Black Mesa Research Facility causing significant damage and failure to various power and communication systems in the surrounding areas.\"", - 4 = "EAS Announcer clarifies, \"This message replaces the previous alert, which expires at 10:01 PM Mountain Standard Time, this afternoon.\"", - 5 = "EAS Announcer echoes, \"A full quarantine has been issued for the Black Mesa area. In the interest of public safety, all residents withing a 150-mile radius of Black Mesa, New Mexico, are advised to evacuate the area immediately.\"", - 6 = "EAS Announcer states, \"Take only essential supplies, and a battery-powered radio. Do not use more than one vehicle for traveling.\"", - 7 = "EAS Announcer warns, \"Follow local evacuation routes which have been marked by local authorities.\"", - 8 = "EAS Announcer announces, \"If you are within the evacuation area and have no transportation locate your nearest police department.\"", - 9 = "EAS Announcer states, \"If you begin experiencing a fever, coughing, nausea, dizziness, muscle ache, pneumonia, hair loss, or any such similar ailments...\"", - 10 = "EAS Announcer blares, \"...please contact your nearest Disease Control Center immediately, as these symptoms may be related to recent events.\"", - 11 = "EAS Announcer echoes, \"Stay tuned to local media outlets for further information on this ongoing emergency.\"", - 12 = "The universal recorder says, \"Recording stopped.\"", - ) - timestamp = list( - 1 = 0, - 2 = 20, - 3 = 40, - 4 = 80, - 5 = 100, - 6 = 120, - 7 = 140, - 8 = 160, - 9 = 180, - 10 = 200, - 11 = 220, - 12 = 240, - ) - -/obj/item/tape/ruins/black_mesa/third_eas //Third EAS record, the global disaster. - icon_state = "tape_purple" - desc = "The tape with some... weird vines faintly growing through. Probably used by some alien." - - used_capacity = 260 - storedinfo = list( - 1 = "The universal recorder says, \"Recording started.\"", - 2 = "EAS Announcer blares, \"The following message is transmitted at the request of the United Stated Department of Defense. This is not a test.\"", - 3 = "EAS Announcer states, \"Today, at 4:16 PM Mountain Time, a state of emergency was declared by the President of the United States.\"", - 4 = "EAS Announcer clarifies, \"An unknown hostile force was declared present at the Black Mesa Research Facility, and several other locations in the surronding areas of Black Mesa, New Mexico.\"", - 5 = "EAS Announcer echoes, \"As of 5:42 PM Mountain Time, the President issued executive orders to withdrawl all grounds forces...\"", - 6 = "EAS Announcer states, \"...and begind immediate airstrikes over the Black Mesa Research Facility and surrounding areas, beginning no later than 6:42 PM this evening.\"", - 7 = "EAS Announcer warns, \"For your own safety, an immediate evacuation order has been issued to the entire state of New Mexico.\"", - 8 = "EAS Announcer announces, \"To all residents of New Mexico and surrounding areas, leave all your personal belongings. Take a battery-powered radio, and only essential supplies with you.\"", - 9 = "EAS Announcer states, \"Do not remain in your homes. Seek shelter at your nearest militarized zone outside the state of New Mexico, and awaiy further instructions.\"", - 10 = "EAS Announcer blares, \"If you cannot find your nearest evacuation route, seek assistance from local authorities immediately.\"", - 11 = "EAS Announcer echoes, \"If you have military training, firearms training, or any similar weapons training, contract your nearest military officer immediately.\"", - 12 = "EAS Announcer clarifies, \"Stay tuned to frequency 740 AM for further updates on this emergency.\"", - 13 = "The universal recorder says, \"Recording stopped.\"", - ) - timestamp = list( - 1 = 0, - 2 = 20, - 3 = 40, - 4 = 80, - 5 = 100, - 6 = 120, - 7 = 140, - 8 = 160, - 9 = 180, - 10 = 200, - 11 = 220, - 12 = 240, - 13 = 260, - ) - -/obj/item/tape/ruins/black_mesa/first_hecu //First HECU record, the "You are abandoned" kinda one; meant to be added to SL so they're, you know, informed. And depressed. - icon_state = "tape_purple" - desc = "Freshly-recorded tape, it isn't even signed." - - used_capacity = 100 - storedinfo = list( - 1 = "The universal recorder says, \"Recording started.\"", - 2 = "High Command blares, \"Come in officer, do you copy? Officer, do you read me?\"", - 3 = "High Command states, \"Forget about Freeman! We're abandoning the base!\"", - 4 = "High Command clarifies, \"We are cutting our losses and pulling out! Anyone left down there now is on his own!\"", - 5 = "High Command clarifies, \"Repeat, if you weren't already evacuated, then you are on your own!\"", - 6 = "The universal recorder says, \"Recording stopped.\"", - ) - timestamp = list( - 1 = 0, - 2 = 20, - 3 = 40, - 4 = 60, - 5 = 80, - 6 = 100, - ) - -/obj/item/tape/ruins/black_mesa/second_hecu //Second HECU record, for Vanguard to know that there's military nearby. - icon_state = "tape_red" - desc = "Relatively freshly-recorded taped, signed as \"radio transmission number XX XX.XX.200X\". Date and serial numbers have been scratched beyond recognition. How convenient." - - used_capacity = 140 - storedinfo = list( - 1 = "The universal recorder says, \"Recording started.\"", - 2 = "Echo-5 Bravo blares, \"Any station, any station, this is Echo-5 Bravo! Are there any ground assets able to provide support in Sector 8?\"", - 3 = "Echo-5 Bravo states, \"Any station, any station, this is Echo-5 Bravo! Are there any ground assets able to provide support in Sector 8? Is anyone reading this?\"", - 4 = "Echo-5 Yankee states, \"This is Echo-5 Yankee! No longer in a position to assist. We are moving to LZ Finch!\"", - 5 = "Echo-5 Bravo clarifies, \"The hell are you saying? We are freaking surrounded over here!\"", - 6 = "Echo-5 Yankee clarifies, \"Push out the the nearest LZ and await further instructions!\"", - 7 = "The universal recorder says, \"Recording stopped.\"", - ) - timestamp = list( - 1 = 0, - 2 = 20, - 3 = 40, - 4 = 80, - 5 = 100, - 6 = 120, - 7 = 140, - ) - -/obj/item/tape/ruins/black_mesa/third_hecu //Third HECU record, because it's s a d . - icon_state = "tape_blue" - desc = "Blood-covered tape. That's pretty much it." - - used_capacity = 120 - storedinfo = list( - 1 = "The universal recorder says, \"Recording started.\"", - 2 = "Echo-3 Juliet blares, \"Any station, any station, this is Echo-3 Juliet... My team ambushed... I am unjred... I'm losing a lot of blood here. Left leg.\"", - 3 = "Echo-5 Romeo states, \"Echo-3 Juliet, this is Echo-5 Romeo. I need you to tie a tourniquet at hand's length above the wound. Get one of your IFAK now.\"", - 4 = "Echo-3 Juliet states, \"IFAK's gone.\"", - 5 = "Echo-5 Romeo clarifies, \"Say again?\"", - 6 = "Echo-3 Juliet clarifies, \"My IFAK's gone... I'm, uhh... *clear falling sounds*\"", - 7 = "Echo-5 Romeo clarifies, \"Okay, you're gonna need to find another pack and get a tourniquet out of it.\"", - 8 = "Echo-5 Romeo clarifies, \"Are you still there? Echo-3 Juliet, can you hear me?\"", - 9 = "The universal recorder says, \"Recording stopped.\"", - ) - timestamp = list( - 1 = 0, - 2 = 10, - 3 = 30, - 4 = 40, - 5 = 50, - 6 = 70, - 7 = 90, - 8 = 110, - 9 = 120, - ) diff --git a/modular_nova/modules/black_mesa/code/follow_component.dm b/modular_nova/modules/black_mesa/code/follow_component.dm deleted file mode 100644 index cd579f41661..00000000000 --- a/modular_nova/modules/black_mesa/code/follow_component.dm +++ /dev/null @@ -1,66 +0,0 @@ -/** - * Follow component - * - * A simple component that allows hostile mobs to follow another mob in their faction. - * Default behaviour is alt click. - * - * @author Gandalf2k15 - */ -/datum/component/follow - /// Sounds we play when the mob starts following. - var/list/follow_sounds - /// Sounds we play when the mob stops following via alt click. - var/list/unfollow_sounds - /// The speed at which we follow the user. - var/follow_speed = 2 - /// The distance we keep from the user. - var/follow_distance = 1 - /// Are we currently following? Used for playing sounds. - var/following = FALSE - /// Our parent mob. - var/mob/living/simple_animal/hostile/parent_mob - -/datum/component/follow/Initialize(_follow_sounds, _unfollow_sounds, _follow_distance = 1, _follow_speed = 2) - if(!ishostile(parent)) - return COMPONENT_INCOMPATIBLE - if(_follow_sounds) - follow_sounds = _follow_sounds - if(_unfollow_sounds) - unfollow_sounds = _unfollow_sounds - if(_follow_distance) - follow_distance = _follow_distance - if(_follow_speed) - follow_speed = _follow_speed - RegisterSignal(parent, COMSIG_HOSTILE_MOB_LOST_TARGET, PROC_REF(lost_target)) - RegisterSignal(parent, COMSIG_CLICK_ALT, PROC_REF(toggle_follow)) - RegisterSignal(parent, COMSIG_ATOM_EXAMINE, PROC_REF(on_examine)) - parent_mob = parent - -/datum/component/follow/Destroy(force) - UnregisterSignal(parent, COMSIG_HOSTILE_MOB_LOST_TARGET) - UnregisterSignal(parent, COMSIG_CLICK_ALT) - parent_mob = null - return ..() - -/datum/component/follow/proc/lost_target() - SIGNAL_HANDLER - following = FALSE - -/datum/component/follow/proc/toggle_follow(datum/source, mob/living/living_user) - SIGNAL_HANDLER - if(!istype(living_user) || !living_user.can_perform_action(parent_mob)) - return - following = !following - if(following) - if(follow_sounds) - playsound(parent_mob, pick(follow_sounds), 100) - INVOKE_ASYNC(parent_mob, TYPE_PROC_REF(/atom/movable, say), "Following you!") - parent_mob.Goto(living_user, follow_speed, follow_distance) - else - if(unfollow_sounds) - playsound(parent_mob, pick(unfollow_sounds), 100) - INVOKE_ASYNC(parent_mob, TYPE_PROC_REF(/atom/movable, say), "No longer following!") - parent_mob.LoseTarget() - -/datum/component/follow/proc/on_examine(datum/source, mob/examiner, list/examine_text) - examine_text += "Alt-click to make them follow you!" diff --git a/modular_nova/modules/black_mesa/code/gateway.dm b/modular_nova/modules/black_mesa/code/gateway.dm deleted file mode 100644 index 21b63e6df0e..00000000000 --- a/modular_nova/modules/black_mesa/code/gateway.dm +++ /dev/null @@ -1,2 +0,0 @@ -/obj/machinery/gateway/away/required_key - requires_key = TRUE diff --git a/modular_nova/modules/black_mesa/code/ghost_spawners.dm b/modular_nova/modules/black_mesa/code/ghost_spawners.dm deleted file mode 100644 index 1adc72bd81c..00000000000 --- a/modular_nova/modules/black_mesa/code/ghost_spawners.dm +++ /dev/null @@ -1,216 +0,0 @@ -/obj/effect/mob_spawn/ghost_role/human/black_mesa - name = "Research Facility Science Team" - prompt_name = "a research facility scientist" - icon = 'icons/obj/machines/sleeper.dmi' - icon_state = "sleeper_s" - outfit = /datum/outfit/science_team - you_are_text = "You are a scientist in a top secret government facility. You blacked out. Now, you have woken up to the horrors that lay within." - flavour_text = "You are a scientist near the Ground Zero of a top secret government facility. You blacked out. Now, you have woken up to the horrors that lay within." - important_text = "Do not try to explore the level unless an expedition crew is already present and close to you, and even then, wait at least 20 minutes before leaving your area." - restricted_species = list(/datum/species/human) - random_appearance = FALSE - -/obj/effect/mob_spawn/ghost_role/human/black_mesa/special(mob/living/carbon/human/spawned_human) - . = ..() - spawned_human.grant_language(/datum/language/uncommon, source = LANGUAGE_SPAWNER) - -/datum/outfit/science_team - name = "Scientist" - uniform = /obj/item/clothing/under/rank/rnd/scientist/nova/hlscience - suit = /obj/item/clothing/suit/toggle/labcoat - shoes = /obj/item/clothing/shoes/laceup - back = /obj/item/storage/backpack - backpack_contents = list(/obj/item/radio, - /obj/item/reagent_containers/cup/beaker, - ) - id = /obj/item/card/id - id_trim = /datum/id_trim/science_team - -/datum/outfit/science_team/post_equip(mob/living/carbon/human/equipped_human, visualsOnly) - . = ..() - equipped_human.faction |= FACTION_BLACKMESA - -/datum/id_trim/science_team - assignment = "Science Team Scientist" - trim_state = "trim_scientist" - access = list(ACCESS_SCIENCE) - -/obj/effect/mob_spawn/ghost_role/human/black_mesa/guard - name = "Research Facility Security Guard" - prompt_name = "a research facility guard" - outfit = /datum/outfit/security_guard - you_are_text = "You are a security guard in a top secret government facility. You blacked out. Now, you have woken up to the horrors that lay within." - flavour_text = "You are a security guard near the Ground Zero of a top secret government facility. You blacked out. Now, you have woken up to the horrors that lay within." - -/obj/effect/mob_spawn/ghost_role/human/black_mesa/guard/special(mob/living/carbon/human/spawned_human) - . = ..() - spawned_human.grant_language(/datum/language/uncommon, source = LANGUAGE_SPAWNER) - -/datum/outfit/security_guard - name = "Security Guard" - uniform = /obj/item/clothing/under/rank/security/officer/blueshirt - head = /obj/item/clothing/head/helmet/blueshirt - gloves = /obj/item/clothing/gloves/color/black - suit = /obj/item/clothing/suit/armor/vest/blueshirt - shoes = /obj/item/clothing/shoes/jackboots - belt = /obj/item/storage/belt/security/full - back = /obj/item/storage/backpack - backpack_contents = list(/obj/item/radio, - /obj/item/gun/ballistic/automatic/pistol/sol, - /obj/item/ammo_box/magazine/c35sol_pistol, - /obj/item/ammo_box/magazine/c35sol_pistol, - ) - id = /obj/item/card/id - id_trim = /datum/id_trim/security_guard - -/datum/outfit/security_guard/post_equip(mob/living/carbon/human/equipped_human, visualsOnly) - . = ..() - equipped_human.faction |= FACTION_BLACKMESA - -/datum/id_trim/security_guard - assignment = "Security Guard" - trim_state = "trim_securityofficer" - access = list(ACCESS_BRIG_ENTRANCE, ACCESS_SECURITY, ACCESS_AWAY_SEC) - -/obj/effect/mob_spawn/ghost_role/human/black_mesa/hecu - name = "HECU" - prompt_name = "a tactical squad member" - outfit = /datum/outfit/hecu - you_are_text = "You are an elite tactical squad deployed into the research facility to contain the infestation." - flavour_text = "You and four other marines have been selected for a guard duty near one of the Black Mesa's entrances. \ - You haven't heard much from the north-west post, except for the sounds of gunshots, and their radios went silent. \ - On top of that, your escape helicopter was shot down mid-flight, and another one won't arrive so soon; \ - with your machinegunner being shot down with a precise headshot by something, or SOMEONE. You are likely on your own, at least for now." - important_text = "Do not try to explore the level unless the expedition crew is dead or cooperative. Stay around your area." - restricted_species = list(/datum/species/human) - -/obj/effect/mob_spawn/ghost_role/human/black_mesa/hecu/special(mob/living/carbon/human/spawned_human) - . = ..() - spawned_human.grant_language(/datum/language/uncommon, source = LANGUAGE_SPAWNER) - -/obj/item/clothing/under/rank/security/officer/hecu //Subtype of security for armor (and because I dont want to repath it) - name = "urban camouflage BDU" - desc = "A baggy military camouflage uniform with an ERDL pattern. The range of whites and greys proves useful in urban environments." - icon = 'modular_nova/master_files/icons/obj/clothing/under/syndicate.dmi' //Camo goes into the syndicate.dmi - worn_icon = 'modular_nova/master_files/icons/mob/clothing/under/syndicate.dmi' - icon_state = "urban_camo" - inhand_icon_state = "w_suit" - uses_advanced_reskins = FALSE - unique_reskin = null - -/obj/item/storage/backpack/ert/odst/hecu - name = "hecu backpack" - icon = 'modular_nova/modules/awaymissions_nova/icons/hecucloth.dmi' - worn_icon = 'modular_nova/modules/awaymissions_nova/icons/hecumob.dmi' - worn_icon_digi = 'modular_nova/modules/awaymissions_nova/icons/hecumob_digi.dmi' - icon_state = "hecu_pack" - worn_icon_state = "hecu_pack" - uses_advanced_reskins = TRUE - unique_reskin = list( - "Olive" = list( - RESKIN_ICON_STATE = "hecu_pack", - RESKIN_WORN_ICON_STATE = "hecu_pack" - ), - "Black" = list( - RESKIN_ICON_STATE = "hecu_pack_black", - RESKIN_WORN_ICON_STATE = "hecu_pack_black" - ), - ) - -/obj/item/storage/belt/military/assault/hecu - name = "hecu warbelt" - icon = 'modular_nova/modules/awaymissions_nova/icons/hecucloth.dmi' - worn_icon = 'modular_nova/modules/awaymissions_nova/icons/hecumob.dmi' - worn_icon_digi = 'modular_nova/modules/awaymissions_nova/icons/hecumob_digi.dmi' - icon_state = "hecu_belt" - worn_icon_state = "hecu_belt" - uses_advanced_reskins = TRUE - unique_reskin = list( - "Olive" = list( - RESKIN_ICON_STATE = "hecu_belt", - RESKIN_WORN_ICON_STATE = "hecu_belt" - ), - "Black" = list( - RESKIN_ICON_STATE = "hecu_belt_black", - RESKIN_WORN_ICON_STATE = "hecu_belt_black" - ), - ) - -/datum/outfit/hecu - name = "HECU Grunt" - uniform = /obj/item/clothing/under/rank/security/officer/hecu - mask = /obj/item/clothing/mask/gas/hecu2 - gloves = /obj/item/clothing/gloves/combat - belt = /obj/item/storage/belt/military/assault/hecu - ears = /obj/item/radio/headset/headset_faction - shoes = /obj/item/clothing/shoes/combat - l_pocket = /obj/item/storage/belt/bowie_sheath - r_pocket = /obj/item/flashlight/flare - back = /obj/item/storage/backpack/ert/odst/hecu - backpack_contents = list( - /obj/item/storage/box/survival/radio, - /obj/item/storage/medkit/emergency, - /obj/item/armament_points_card/hecu, - ) - id = /obj/item/card/id - id_trim = /datum/id_trim/hecu - -/datum/outfit/hecu/post_equip(mob/living/carbon/human/equipped_human, visualsOnly) - . = ..() - equipped_human.faction |= FACTION_HECU - -/datum/id_trim/hecu - assignment = "HECU Marine" - trim_state = "trim_securityofficer" - access = list(ACCESS_BRIG_ENTRANCE, ACCESS_SECURITY, ACCESS_AWAY_SEC) - -/obj/effect/mob_spawn/ghost_role/human/black_mesa/hecu/leader - name = "HECU Squad Leader" - prompt_name = "a tactical squad's leader" - outfit = /datum/outfit/hecu/leader - you_are_text = "You are an elite tactical squad's leader deployed into the research facility to contain the infestation." - flavour_text = "You and four other marines have been selected for a guard duty near one of the Black Mesa's entrances. \ - Due to the lack of any real briefing, and your briefing officer's death during the landing, you have no clue as to what your objective is, \ - so you and your group have set up a camp here. You haven't heard much from the north-west post, except for the sounds of gunshots, and their radios went silent. \ - On top of that, your escape helicopter was shot down mid-flight, and another one won't arrive so soon; \ - with your machinegunner being shot down with a precise headshot by something, or SOMEONE. You are likely on your own, at least for now." - important_text = "Keep and sustain marines' morale and discipline. Delegate responsibilities at the best of your abilities. \ - Do not try to explore the level unless the expedition crew is dead or cooperative. Stay around your area." - restricted_species = list(/datum/species/human) - -/obj/effect/mob_spawn/ghost_role/human/black_mesa/hecu/leader/special(mob/living/carbon/human/spawned_human) - . = ..() - spawned_human.grant_language(/datum/language/uncommon, source = LANGUAGE_SPAWNER) - spawned_human.grant_language(/datum/language/panslavic, source = LANGUAGE_SPAWNER) - spawned_human.grant_language(/datum/language/yangyu, source = LANGUAGE_SPAWNER) - -/datum/outfit/hecu/leader - name = "HECU Captain" - uniform = /obj/item/clothing/under/rank/security/officer/hecu - head = /obj/item/clothing/head/beret/sec - mask = /obj/item/clothing/mask/gas/hecu2 - gloves = /obj/item/clothing/gloves/tackler/combat/insulated - belt = /obj/item/storage/belt/military/assault/hecu - ears = /obj/item/radio/headset/headset_faction/bowman/captain - shoes = /obj/item/clothing/shoes/combat - l_pocket = /obj/item/storage/belt/bowie_sheath - r_pocket = /obj/item/binoculars - back = /obj/item/storage/backpack/ert/odst/hecu - backpack_contents = list( - /obj/item/storage/box/survival/radio, - /obj/item/storage/medkit/emergency, - /obj/item/armament_points_card/hecu, - /obj/item/book/granter/martial/cqc, - /obj/item/grenade/smokebomb, - ) - id = /obj/item/card/id - id_trim = /datum/id_trim/hecu_leader - -/datum/outfit/hecu/leader/post_equip(mob/living/carbon/human/equipped_human, visualsOnly) - . = ..() - equipped_human.faction |= FACTION_HECU - -/datum/id_trim/hecu_leader - assignment = "HECU Captain" - trim_state = "trim_securityofficer" - access = list(ACCESS_BRIG_ENTRANCE, ACCESS_SECURITY, ACCESS_AWAY_SEC) diff --git a/modular_nova/modules/black_mesa/code/guns.dm b/modular_nova/modules/black_mesa/code/guns.dm deleted file mode 100644 index 0d46c86bec5..00000000000 --- a/modular_nova/modules/black_mesa/code/guns.dm +++ /dev/null @@ -1,35 +0,0 @@ -/obj/item/gun/ballistic/automatic/laser/marksman // Cheap replacement for a gauss rifle. - name = "designated marksman rifle" - desc = "A special laser beam sniper rifle designed by a certain now defunct research facility." - icon_state = "ctfmarksman" - inhand_icon_state = "ctfmarksman" - accepted_magazine_type = /obj/item/ammo_box/magazine/recharge/marksman - force = 15 - weapon_weight = WEAPON_HEAVY - fire_delay = 4 SECONDS - fire_sound = 'modular_nova/modules/sec_haul/sound/chaingun_fire.ogg' - -/obj/item/gun/ballistic/automatic/laser/marksman/Initialize(mapload) - . = ..() - AddComponent(/datum/component/scope, range_modifier = 1.5) - -/obj/item/ammo_box/magazine/recharge/marksman - ammo_type = /obj/item/ammo_casing/laser/marksman - max_ammo = 5 - -/obj/item/ammo_casing/laser/marksman - projectile_type = /obj/projectile/beam/marksman - -/obj/item/ammo_casing/laser/marksman/Initialize(mapload) - . = ..() - AddElement(/datum/element/delete_on_drop) - -/obj/projectile/beam/marksman - name = "laser beam" - damage = 70 - armour_penetration = 30 - hitscan = TRUE - icon_state = "gaussstrong" - tracer_type = /obj/effect/projectile/tracer/solar - muzzle_type = /obj/effect/projectile/muzzle/solar - impact_type = /obj/effect/projectile/impact/solar diff --git a/modular_nova/modules/black_mesa/code/healing_puddle.dm b/modular_nova/modules/black_mesa/code/healing_puddle.dm deleted file mode 100644 index 2aa2c36a414..00000000000 --- a/modular_nova/modules/black_mesa/code/healing_puddle.dm +++ /dev/null @@ -1,18 +0,0 @@ -/obj/structure/water_source/puddle/healing - name = "healing puddle" - desc = "By some otherworldy power, this puddle of water seems to slowly regenerate things!" - color = "#71ffff" - light_range = 3 - light_color = "#71ffff" - /// How much do we heal the current person? - var/heal_amount = 2 - -/obj/structure/water_source/puddle/healing/Initialize(mapload) - . = ..() - START_PROCESSING(SSobj, src) - -/obj/structure/water_source/puddle/healing/process(seconds_per_tick) - for(var/mob/living/iterating_mob in loc) - iterating_mob.heal_overall_damage(heal_amount, heal_amount) - playsound(src, 'modular_nova/modules/emotes/sound/emotes/jelly_scream.ogg', 100) - diff --git a/modular_nova/modules/black_mesa/code/lambda_teleporter.dm b/modular_nova/modules/black_mesa/code/lambda_teleporter.dm deleted file mode 100644 index 554fa7bc8a6..00000000000 --- a/modular_nova/modules/black_mesa/code/lambda_teleporter.dm +++ /dev/null @@ -1,44 +0,0 @@ - -/datum/looping_sound/lambda - mid_sounds = list('modular_nova/modules/black_mesa/sound/lc_mainbeam.ogg' = 1) - mid_length = 8.1 SECONDS - volume = 100 - -/obj/effect/bump_teleporter/lambda - name = "\improper Lambda Teleporter" - desc = "A super powerful teleporter capable of transporting you across dimensions." - icon = 'icons/obj/machines/engine/energy_ball.dmi' - icon_state = "energy_ball" - pixel_x = -32 - pixel_y = -32 - invisibility = 0 - light_range = 6 - color = COLOR_CYAN - var/datum/looping_sound/lambda/looping_sound - var/atom/movable/warp_effect/effect - -/obj/effect/bump_teleporter/lambda/Initialize(mapload) - . = ..() - looping_sound = new(src, TRUE) - effect = new(src) - vis_contents += effect - -/obj/effect/bump_teleporter/lambda/Destroy() - QDEL_NULL(looping_sound) - vis_contents -= effect - QDEL_NULL(effect) - return ..() - -/obj/effect/bump_teleporter/lambda/teleport_action(atom/movable/target, turf/destination) - // Play sound before moving. - playsound(src, 'modular_nova/modules/black_mesa/sound/lc_teleport.ogg', 100) - - . = ..() - - if(isliving(target)) - var/mob/living/teleporting_mob = target - teleporting_mob.flash_act(10, 1, 1, /atom/movable/screen/fullscreen/flash/lambda, length = 3 SECONDS) - teleporting_mob.Unconscious(15 SECONDS) - -/atom/movable/screen/fullscreen/flash/lambda - color = COLOR_GREEN diff --git a/modular_nova/modules/black_mesa/code/mapping_fluff.dm b/modular_nova/modules/black_mesa/code/mapping_fluff.dm deleted file mode 100644 index c886da17934..00000000000 --- a/modular_nova/modules/black_mesa/code/mapping_fluff.dm +++ /dev/null @@ -1,67 +0,0 @@ -/obj/structure/alien/weeds/xen - name = "xen weeds" - desc = "A thick vine-like surface covers the floor." - color = "#ac3b06" - -/obj/structure/spacevine/xen - name = "xen vines" - color = "#ac3b06" - -/obj/structure/spacevine/xen/Initialize(mapload) - . = ..() - add_atom_colour("#ac3b06", FIXED_COLOUR_PRIORITY) - -/obj/structure/spacevine/xen/thick - name = "thick xen vines" - color = "#ac3b06" - opacity = TRUE - -/obj/structure/mineral_door/xen - name = "organic door" - color = "#ff8d58" - icon = 'modular_nova/modules/black_mesa/icons/xen_door.dmi' - icon_state = "resin" - openSound = 'modular_nova/modules/black_mesa/sound/xen_door.ogg' - closeSound = 'modular_nova/modules/black_mesa/sound/xen_door.ogg' - -/obj/machinery/door/puzzle/keycard/xen - name = "locktight organic door" - desc = "An oddly robust organic looking door." - icon = 'modular_nova/modules/black_mesa/icons/xen_door.dmi' - icon_state = "resin" - puzzle_id = "xen" - -/obj/item/keycard/xen - name = "xen keycard" - desc = "A xen keycard." - color = "#ac3b06" - puzzle_id = "xen" - -/obj/machinery/conveyor/inverted/auto - processing_flags = START_PROCESSING_ON_INIT - -/obj/machinery/conveyor/inverted/auto/Initialize(mapload, newdir) - . = ..() - set_operating(TRUE) - -/obj/machinery/conveyor/inverted/auto/update() - . = ..() - if(.) - set_operating(TRUE) - -/obj/structure/marker_beacon/green - picked_color = "Lime" - // set icon_state to make it clear for mappers - icon_state = "markerlime-on" - -/obj/structure/pod - name = "supply pod" - desc = "Someone must have sent this a long way." - icon = 'modular_nova/modules/black_mesa/icons/structures.dmi' - icon_state = "pod" - pixel_x = SUPPLYPOD_X_OFFSET - anchored = TRUE - -/obj/structure/closet/secure_closet/security/black_mesa - req_access = list(ACCESS_AWAY_SEC) - diff --git a/modular_nova/modules/black_mesa/code/mobs/bullsquid.dm b/modular_nova/modules/black_mesa/code/mobs/bullsquid.dm deleted file mode 100644 index 33aeb889c29..00000000000 --- a/modular_nova/modules/black_mesa/code/mobs/bullsquid.dm +++ /dev/null @@ -1,50 +0,0 @@ -/mob/living/simple_animal/hostile/blackmesa/xen/bullsquid - name = "bullsquid" - desc = "Some highly aggressive alien creature. Thrives in toxic environments." - icon = 'modular_nova/modules/black_mesa/icons/mobs.dmi' - icon_state = "bullsquid" - icon_living = "bullsquid" - icon_dead = "bullsquid_dead" - icon_gib = null - mob_biotypes = list(MOB_ORGANIC, MOB_BEAST) - environment_smash = ENVIRONMENT_SMASH_STRUCTURES - speak_chance = 1 - speak_emote = list("growls") - emote_taunt = list("growls", "snarls", "grumbles") - taunt_chance = 100 - turns_per_move = 7 - maxHealth = 110 - health = 110 - obj_damage = 50 - harm_intent_damage = 15 - melee_damage_lower = 15 - melee_damage_upper = 15 - ranged = TRUE - retreat_distance = 4 - minimum_distance = 4 - dodging = TRUE - projectiletype = /obj/projectile/bullsquid - projectilesound = 'modular_nova/modules/black_mesa/sound/mobs/bullsquid/goo_attack3.ogg' - melee_damage_upper = 18 - attack_sound = 'modular_nova/modules/black_mesa/sound/mobs/bullsquid/attack1.ogg' - gold_core_spawnable = HOSTILE_SPAWN - alert_sounds = list( - 'modular_nova/modules/black_mesa/sound/mobs/bullsquid/detect1.ogg', - 'modular_nova/modules/black_mesa/sound/mobs/bullsquid/detect2.ogg', - 'modular_nova/modules/black_mesa/sound/mobs/bullsquid/detect3.ogg' - ) - -/obj/projectile/bullsquid - name = "nasty ball of ooze" - icon_state = "neurotoxin" - damage = 5 - damage_type = BURN - knockdown = 20 - armor_flag = BIO - impact_effect_type = /obj/effect/temp_visual/impact_effect/neurotoxin - hitsound = 'modular_nova/modules/black_mesa/sound/mobs/bullsquid/splat1.ogg' - hitsound_wall = 'modular_nova/modules/black_mesa/sound/mobs/bullsquid/splat1.ogg' - -/obj/projectile/bullsquid/on_hit(atom/target, blocked = 0, pierce_hit) - new /obj/effect/decal/cleanable/greenglow(target.loc) - return ..() diff --git a/modular_nova/modules/black_mesa/code/mobs/gordon_freeman.dm b/modular_nova/modules/black_mesa/code/mobs/gordon_freeman.dm deleted file mode 100644 index 641ec6f2cc4..00000000000 --- a/modular_nova/modules/black_mesa/code/mobs/gordon_freeman.dm +++ /dev/null @@ -1,115 +0,0 @@ -/** - * Gordon Freeman - Xen boss - * - * This boss uses crystal pylons to supply a shield that is not penetrable until these pylons are destroyed. - * - * Once destroyed, the shield falls, and the mob can be killed. - */ - - -/mob/living/simple_animal/hostile/blackmesa/xen/headcrab_zombie/gordon_freeman - name = "\improper Gordon Freeman" - desc = "Gordon Freeman in the flesh. Or in the zombified form, it seems." - icon_state = "gordon_freeman" - speed = -2 - environment_smash = ENVIRONMENT_SMASH_RWALLS - health = 1000 - maxHealth = 1000 - melee_damage_lower = 45 - melee_damage_upper = 45 - wander = FALSE - attack_sound = 'modular_nova/master_files/sound/weapons/crowbar2.ogg' - loot = list(/obj/item/crowbar/freeman/ultimate, /obj/item/keycard/freeman_boss_exit) - gold_core_spawnable = NO_SPAWN - -/obj/structure/xen_pylon/freeman - shield_range = 30 - max_integrity = 300 - -/obj/structure/xen_pylon/freeman/register_mob(mob/living/simple_animal/hostile/blackmesa/xen/mob_to_register) - if(!istype(mob_to_register, /mob/living/simple_animal/hostile/blackmesa/xen/headcrab_zombie/gordon_freeman)) - return - if(mob_to_register in shielded_mobs) - return - shielded_mobs += mob_to_register - mob_to_register.shielded = TRUE - mob_to_register.shield_count++ - mob_to_register.update_appearance() - var/datum/beam/created_beam = Beam(mob_to_register, icon_state = "red_lightning", time = 10 MINUTES, maxdistance = shield_range) - shielded_mobs[mob_to_register] = created_beam - RegisterSignal(created_beam, COMSIG_QDELETING, PROC_REF(beam_died)) - RegisterSignal(mob_to_register, COMSIG_QDELETING, PROC_REF(mob_died)) - -/obj/machinery/door/puzzle/keycard/xen/freeman_boss_entry - name = "entry door" - desc = "Complete the puzzle to open this door." - icon = 'modular_nova/modules/black_mesa/icons/xen_door.dmi' - icon_state = "resin" - puzzle_id = "freeman_entry" - -/obj/item/keycard/freeman_boss_entry - name = "entry keycard" - color = "#1100ff" - puzzle_id = "freeman_entry" - -/obj/machinery/door/puzzle/keycard/xen/freeman_boss_exit - name = "exit door" - desc = "You must defeat him." - icon = 'modular_nova/modules/black_mesa/icons/xen_door.dmi' - icon_state = "resin" - puzzle_id = "freeman_exit" - -/obj/item/keycard/freeman_boss_exit - name = "\improper Freeman's ID card" - desc = "How could you do it? HOW?!!" - color = "#fffb00" - puzzle_id = "freeman_exit" - -/obj/effect/sliding_puzzle/freeman - reward_type = /obj/item/keycard/freeman_boss_entry - -/obj/effect/freeman_blocker - name = "freeman blocker" - -/obj/effect/freeman_blocker/CanPass(atom/blocker, movement_dir, blocker_opinion) - . = ..() - if(istype(blocker, /mob/living/simple_animal/hostile/blackmesa/xen/headcrab_zombie/gordon_freeman)) - return FALSE - return TRUE - -/datum/outfit/gordon_freeman - name = "Gordon Freeman" - uniform = /obj/item/clothing/under/rank/rnd/scientist/nova/hlscience - head = /obj/item/clothing/head/helmet/space/hev_suit - ears = /obj/item/radio/headset/headset_cent/commander - belt = /obj/item/storage/belt/utility/full - neck = /obj/item/clothing/neck/tie/horrible - shoes = /obj/item/clothing/shoes/combat - - suit = /obj/item/clothing/suit/space/hev_suit - suit_store = /obj/item/tank/internals/oxygen - - back = /obj/item/storage/backpack - - backpack_contents = list(/obj/item/gun/ballistic/revolver/mateba, /obj/item/ammo_box/a357 = 5) - - l_hand = /obj/item/crowbar/freeman - - id = /obj/item/card/id/advanced/centcom - id_trim = /datum/id_trim/gordon_freeman - -/datum/outfit/gordon_freeman/post_equip(mob/living/carbon/human/our_human, visualsOnly) - . = ..() - var/obj/item/card/id/id_card = our_human.wear_id - if(istype(id_card)) - id_card.registered_name = our_human.real_name - id_card.update_label() - id_card.update_icon() - -/datum/id_trim/gordon_freeman - trim_state = "trim_scientist" - assignment = "Theoretical Physicist" - -/datum/id_trim/gordon_freeman/New() - . = ..() - access = SSid_access.get_region_access_list(list(REGION_CENTCOM, REGION_ALL_STATION)) diff --git a/modular_nova/modules/black_mesa/code/mobs/headcrab.dm b/modular_nova/modules/black_mesa/code/mobs/headcrab.dm deleted file mode 100644 index fc19cfa526a..00000000000 --- a/modular_nova/modules/black_mesa/code/mobs/headcrab.dm +++ /dev/null @@ -1,136 +0,0 @@ -/mob/living/simple_animal/hostile/blackmesa/xen/headcrab - name = "headcrab" - desc = "Don't let it latch onto your hea-... hey, that's kinda cool." - icon = 'modular_nova/modules/black_mesa/icons/mobs.dmi' - icon_state = "headcrab" - icon_living = "headcrab" - icon_dead = "headcrab_dead" - icon_gib = null - mob_biotypes = list(MOB_ORGANIC, MOB_BEAST) - speak_chance = 1 - speak_emote = list("growls") - speed = 1 - emote_taunt = list("growls", "snarls", "grumbles") - ranged_message = "jumps" - taunt_chance = 100 - turns_per_move = 7 - maxHealth = 50 - health = 50 - speed = 3 - ranged = TRUE - dodging = TRUE - ranged_cooldown_time = 4 SECONDS - harm_intent_damage = 15 - melee_damage_lower = 5 - melee_damage_upper = 5 - retreat_distance = 5 - minimum_distance = 5 - attack_sound = 'sound/weapons/bite.ogg' - gold_core_spawnable = HOSTILE_SPAWN - loot = list(/obj/item/stack/sheet/bone) - alert_sounds = list( - 'modular_nova/modules/black_mesa/sound/mobs/headcrab/alert1.ogg' - ) - var/is_zombie = FALSE - var/mob/living/carbon/human/oldguy - /// Charging ability - var/datum/action/cooldown/mob_cooldown/charge/basic_charge/charge - var/throw_at_range = 10 - var/throw_at_speed = 2 - -/mob/living/simple_animal/hostile/blackmesa/xen/headcrab/Initialize(mapload) - . = ..() - charge = new(src) - charge.Grant(src) - charge.cooldown_time = 0 - -/mob/living/simple_animal/hostile/blackmesa/xen/headcrab/Shoot(atom/targeted_atom) - throw_at(targeted_atom, throw_at_range, throw_at_speed) - playsound( - src, - pick('modular_nova/modules/black_mesa/sound/mobs/headcrab/attack1.ogg', 'modular_nova/modules/black_mesa/sound/mobs/headcrab/attack2.ogg', 'modular_nova/modules/black_mesa/sound/mobs/headcrab/attack3.ogg'), - 100 - ) - -/mob/living/simple_animal/hostile/blackmesa/xen/headcrab/death(gibbed) - . = ..() - playsound(src, pick(list( - 'modular_nova/modules/black_mesa/sound/mobs/headcrab/die1.ogg', - 'modular_nova/modules/black_mesa/sound/mobs/headcrab/die2.ogg' - )), 100) - -/mob/living/simple_animal/hostile/blackmesa/xen/headcrab/throw_impact(atom/hit_atom, datum/thrownthing/throwingdatum) - . = ..() - if(!hit_atom || stat == DEAD) - return - if(!isliving(hit_atom)) - return - playsound(src, 'modular_nova/modules/black_mesa/sound/mobs/headcrab/headbite.ogg', 100) - var/mob/living/hit_mob = hit_atom - hit_mob.apply_damage(melee_damage_upper, BRUTE) - if(!ishuman(hit_atom)) - return - var/mob/living/carbon/human/human_to_dunk = hit_atom - if(!human_to_dunk.get_item_by_slot(ITEM_SLOT_HEAD) && prob(50) && zombify(human_to_dunk)) - to_chat(human_to_dunk, span_userdanger("[src] latches onto your head as it pierces your skull, instantly killing you!")) - human_to_dunk.investigate_log("was headcrab latched by [src].", INVESTIGATE_DEATHS) - human_to_dunk.death(FALSE) - -/mob/living/simple_animal/hostile/blackmesa/xen/headcrab/proc/zombify(mob/living/carbon/human/zombified_human) - if(is_zombie) - return FALSE - is_zombie = TRUE - if(zombified_human.wear_suit) - var/obj/item/clothing/suit/armor/zombie_suit = zombified_human.wear_suit - maxHealth += zombie_suit.get_armor_rating(MELEE) //That zombie's got armor, I want armor! - maxHealth += 40 - health = maxHealth - name = "zombie" - desc = "A shambling corpse animated by a headcrab!" - mob_biotypes |= MOB_HUMANOID - melee_damage_lower += 8 - melee_damage_upper += 11 - obj_damage = 21 //now that it has a corpse to puppet, it can properly attack structures - ranged = FALSE - dodging = FALSE - retreat_distance = 0 - minimum_distance = 0 - AddElement(/datum/element/wall_smasher, strength_flag = ENVIRONMENT_SMASH_STRUCTURES) - movement_type = GROUND - icon_state = "" - zombified_human.set_hairstyle(null, update = FALSE) - zombified_human.update_body_parts() - zombified_human.forceMove(src) - oldguy = zombified_human - update_appearance() - visible_message(span_warning("The corpse of [zombified_human.name] suddenly rises!")) - return TRUE - -/mob/living/simple_animal/hostile/blackmesa/xen/headcrab/Destroy() - if(oldguy) - oldguy.forceMove(get_turf(src)) - oldguy = null - return ..() - -/mob/living/simple_animal/hostile/blackmesa/xen/headcrab/death(gibbed) - . = ..() - if(oldguy) - oldguy.forceMove(loc) - oldguy = null - if(is_zombie) - if(prob(30)) - new /mob/living/simple_animal/hostile/blackmesa/xen/headcrab(loc) //OOOO it unlached! - qdel(src) - return - cut_overlays() - update_appearance() - -/mob/living/simple_animal/hostile/blackmesa/xen/headcrab/update_overlays() - . = ..() - if(is_zombie) - copy_overlays(oldguy, TRUE) - var/mutable_appearance/blob_head_overlay = mutable_appearance('modular_nova/modules/black_mesa/icons/mobs.dmi', "headcrab_zombie") - add_overlay(blob_head_overlay) - -/mob/living/simple_animal/hostile/blackmesa/xen/headcrab/fast - speed = -2 diff --git a/modular_nova/modules/black_mesa/code/mobs/headcrab_zombie.dm b/modular_nova/modules/black_mesa/code/mobs/headcrab_zombie.dm deleted file mode 100644 index d66d874b80c..00000000000 --- a/modular_nova/modules/black_mesa/code/mobs/headcrab_zombie.dm +++ /dev/null @@ -1,89 +0,0 @@ -/mob/living/simple_animal/hostile/blackmesa/xen/headcrab_zombie - name = "headcrab zombie" - desc = "This unlucky person has had a headcrab latch onto their head. Ouch." - icon = 'modular_nova/modules/black_mesa/icons/mobs.dmi' - icon_state = "zombie" - icon_living = "zombie" - maxHealth = 110 - health = 110 - icon_gib = null - icon_dead = "zombie_dead" - speak_chance = 1 - speak_emote = list("growls") - speed = 1 - emote_taunt = list("growls", "snarls", "grumbles") - taunt_chance = 100 - melee_damage_lower = 21 - melee_damage_upper = 21 - attack_sound = 'modular_nova/modules/black_mesa/sound/mobs/zombies/claw_strike.ogg' - gold_core_spawnable = HOSTILE_SPAWN - alert_cooldown_time = 8 SECONDS - alert_sounds = list( - 'modular_nova/modules/black_mesa/sound/mobs/zombies/alert1.ogg', - 'modular_nova/modules/black_mesa/sound/mobs/zombies/alert2.ogg', - 'modular_nova/modules/black_mesa/sound/mobs/zombies/alert3.ogg', - 'modular_nova/modules/black_mesa/sound/mobs/zombies/alert4.ogg', - 'modular_nova/modules/black_mesa/sound/mobs/zombies/alert5.ogg', - 'modular_nova/modules/black_mesa/sound/mobs/zombies/alert6.ogg', - ) - -/mob/living/simple_animal/hostile/blackmesa/xen/headcrab_zombie/death(gibbed) - new /obj/effect/gibspawner/human(get_turf(src)) - return ..() - -/mob/living/simple_animal/hostile/blackmesa/xen/headcrab_zombie/scientist - name = "zombified scientist" - desc = "Even after death, I still have to wear this horrible tie!" - icon_state = "scientist_zombie" - icon_living = "scientist_zombie" - loot = list(/obj/effect/mob_spawn/corpse/human/scientist_zombie) - del_on_death = 1 - - -/mob/living/simple_animal/hostile/blackmesa/xen/headcrab_zombie/guard - name = "zombified guard" - desc = "About that brain I owed ya!" - icon_state = "security_zombie" - icon_living = "security_zombie" - maxHealth = 140 // Armor! - health = 140 - loot = list(/obj/effect/mob_spawn/corpse/human/guard_zombie) - del_on_death = 1 - -/mob/living/simple_animal/hostile/blackmesa/xen/headcrab_zombie/hecu - name = "zombified marine" - desc = "MY. ASS. IS. DEAD." - icon_state = "hecu_zombie" - icon_living = "hecu_zombie" - maxHealth = 190 // More armor! - health = 190 - loot = list(/obj/effect/mob_spawn/corpse/human/hecu_zombie) - del_on_death = 1 - -/mob/living/simple_animal/hostile/blackmesa/xen/headcrab_zombie/hev - name = "zombified hazardous environment specialist" - desc = "User death... surpassed." - icon_state = "hev_zombie" - icon_living = "hev_zombie" - maxHealth = 250 - health = 250 - alert_sounds = list( - 'modular_nova/modules/black_mesa/sound/mobs/zombies/hzv1.ogg', - 'modular_nova/modules/black_mesa/sound/mobs/zombies/hzv2.ogg', - 'modular_nova/modules/black_mesa/sound/mobs/zombies/hzv3.ogg', - 'modular_nova/modules/black_mesa/sound/mobs/zombies/hzv4.ogg', - 'modular_nova/modules/black_mesa/sound/mobs/zombies/hzv5.ogg', - 'modular_nova/modules/black_mesa/sound/mobs/zombies/hzv6.ogg', - 'modular_nova/modules/black_mesa/sound/mobs/zombies/hzv7.ogg', - 'modular_nova/modules/black_mesa/sound/mobs/zombies/hzv8.ogg', - 'modular_nova/modules/black_mesa/sound/mobs/zombies/hzv9.ogg', - 'modular_nova/modules/black_mesa/sound/mobs/zombies/hzv10.ogg', - 'modular_nova/modules/black_mesa/sound/mobs/zombies/hzv11.ogg', - 'modular_nova/modules/black_mesa/sound/mobs/zombies/hzv12.ogg', - 'modular_nova/modules/black_mesa/sound/mobs/zombies/hzv13.ogg', - 'modular_nova/modules/black_mesa/sound/mobs/zombies/hzv14.ogg', - ) - - - - diff --git a/modular_nova/modules/black_mesa/code/mobs/houndeye.dm b/modular_nova/modules/black_mesa/code/mobs/houndeye.dm deleted file mode 100644 index f563ac8018b..00000000000 --- a/modular_nova/modules/black_mesa/code/mobs/houndeye.dm +++ /dev/null @@ -1,52 +0,0 @@ -/mob/living/simple_animal/hostile/blackmesa/xen/houndeye - name = "houndeye" - desc = "Some highly aggressive alien creature. Thrives in toxic environments." - icon = 'modular_nova/modules/black_mesa/icons/mobs.dmi' - icon_state = "houndeye" - icon_living = "houndeye" - icon_dead = "houndeye_dead" - icon_gib = null - mob_biotypes = list(MOB_ORGANIC, MOB_BEAST) - environment_smash = ENVIRONMENT_SMASH_STRUCTURES - speak_chance = 1 - speak_emote = list("growls") - speed = 1 - emote_taunt = list("growls", "snarls", "grumbles") - taunt_chance = 100 - turns_per_move = 7 - maxHealth = 100 - health = 100 - obj_damage = 50 - harm_intent_damage = 10 - melee_damage_lower = 20 - melee_damage_upper = 20 - attack_sound = 'sound/weapons/bite.ogg' - gold_core_spawnable = HOSTILE_SPAWN - //Since those can survive on Xen, I'm pretty sure they can thrive on any atmosphere - - minbodytemp = 0 - maxbodytemp = 1500 - loot = list(/obj/item/stack/sheet/bluespace_crystal) - alert_sounds = list( - 'modular_nova/modules/black_mesa/sound/mobs/houndeye/he_alert1.ogg', - 'modular_nova/modules/black_mesa/sound/mobs/houndeye/he_alert2.ogg', - 'modular_nova/modules/black_mesa/sound/mobs/houndeye/he_alert3.ogg', - 'modular_nova/modules/black_mesa/sound/mobs/houndeye/he_alert4.ogg', - 'modular_nova/modules/black_mesa/sound/mobs/houndeye/he_alert5.ogg' - ) - /// Charging ability - var/datum/action/cooldown/mob_cooldown/charge/basic_charge/charge - -/mob/living/simple_animal/hostile/blackmesa/xen/houndeye/Initialize(mapload) - . = ..() - charge = new(src) - charge.Grant(src) - -/mob/living/simple_animal/hostile/blackmesa/xen/houndeye/Destroy() - charge = null - return ..() - -/mob/living/simple_animal/hostile/blackmesa/xen/houndeye/OpenFire() - if(client) - return - charge.Trigger(target) diff --git a/modular_nova/modules/black_mesa/code/mobs/human_mobs.dm b/modular_nova/modules/black_mesa/code/mobs/human_mobs.dm deleted file mode 100644 index aa21f2779d7..00000000000 --- a/modular_nova/modules/black_mesa/code/mobs/human_mobs.dm +++ /dev/null @@ -1,226 +0,0 @@ -/* -* HECU -*/ - -/mob/living/simple_animal/hostile/blackmesa/hecu - name = "HECU Grunt" - desc = "I didn't sign on for this shit. Monsters, sure, but civilians? Who ordered this operation anyway?" - icon = 'modular_nova/modules/black_mesa/icons/mobs.dmi' - icon_state = "hecu_melee" - icon_living = "hecu_melee" - icon_dead = "hecu_dead" - icon_gib = "syndicate_gib" - mob_biotypes = MOB_ORGANIC|MOB_HUMANOID - sentience_type = SENTIENCE_HUMANOID - speak_chance = 10 - speak = list("Stop right there!") - turns_per_move = 5 - speed = 0 - stat_attack = HARD_CRIT - robust_searching = 1 - maxHealth = 150 - health = 150 - harm_intent_damage = 5 - melee_damage_lower = 10 - melee_damage_upper = 10 - attack_verb_continuous = "punches" - attack_verb_simple = "punch" - attack_sound = 'sound/weapons/punch1.ogg' - combat_mode = TRUE - loot = list(/obj/effect/gibspawner/human, /obj/item/melee/baton) - atmos_requirements = list("min_oxy" = 5, "max_oxy" = 0, "min_tox" = 0, "max_tox" = 1, "min_co2" = 0, "max_co2" = 5, "min_n2" = 0, "max_n2" = 0) - unsuitable_atmos_damage = 7.5 - faction = list(FACTION_HECU) - check_friendly_fire = 1 - status_flags = CANPUSH - del_on_death = 1 - dodging = TRUE - rapid_melee = 2 - footstep_type = FOOTSTEP_MOB_SHOE - alert_sounds = list( - 'modular_nova/modules/black_mesa/sound/mobs/hecu/hg_alert01.ogg', - 'modular_nova/modules/black_mesa/sound/mobs/hecu/hg_alert03.ogg', - 'modular_nova/modules/black_mesa/sound/mobs/hecu/hg_alert04.ogg', - 'modular_nova/modules/black_mesa/sound/mobs/hecu/hg_alert05.ogg', - 'modular_nova/modules/black_mesa/sound/mobs/hecu/hg_alert06.ogg', - 'modular_nova/modules/black_mesa/sound/mobs/hecu/hg_alert07.ogg', - 'modular_nova/modules/black_mesa/sound/mobs/hecu/hg_alert08.ogg', - 'modular_nova/modules/black_mesa/sound/mobs/hecu/hg_alert10.ogg' - ) - - -/mob/living/simple_animal/hostile/blackmesa/hecu/ranged - ranged = TRUE - retreat_distance = 5 - minimum_distance = 5 - icon_state = "hecu_ranged" - icon_living = "hecu_ranged" - casingtype = /obj/item/ammo_casing/a50ae - projectilesound = 'sound/weapons/gun/pistol/shot.ogg' - loot = list(/obj/effect/gibspawner/human, /obj/effect/spawner/random/hecu_deagle) - dodging = TRUE - rapid_melee = 1 - -/mob/living/simple_animal/hostile/blackmesa/hecu/ranged/smg - rapid = 3 - icon_state = "hecu_ranged_smg" - icon_living = "hecu_ranged_smg" - casingtype = /obj/item/ammo_casing/c34 - projectilesound = 'sound/weapons/gun/smg/shot.ogg' - loot = list(/obj/effect/gibspawner/human, /obj/effect/spawner/random/hecu_smg) - -/mob/living/simple_animal/hostile/blackmesa/sec - name = "Security Guard" - desc = "About that beer I owe'd ya!" - icon = 'modular_nova/modules/black_mesa/icons/mobs.dmi' - icon_state = "security_guard_melee" - icon_living = "security_guard_melee" - icon_dead = "security_guard_dead" - icon_gib = "syndicate_gib" - mob_biotypes = MOB_ORGANIC|MOB_HUMANOID - sentience_type = SENTIENCE_HUMANOID - turns_per_move = 5 - speed = 0 - stat_attack = HARD_CRIT - robust_searching = 1 - maxHealth = 100 - health = 100 - harm_intent_damage = 5 - melee_damage_lower = 7 - melee_damage_upper = 7 - attack_verb_continuous = "punches" - attack_verb_simple = "punch" - attack_sound = 'sound/weapons/punch1.ogg' - loot = list(/obj/effect/gibspawner/human, /obj/item/clothing/suit/armor/vest/blueshirt) - atmos_requirements = list("min_oxy" = 5, "max_oxy" = 0, "min_tox" = 0, "max_tox" = 1, "min_co2" = 0, "max_co2" = 5, "min_n2" = 0, "max_n2" = 0) - unsuitable_atmos_damage = 7.5 - faction = list(FACTION_STATION, FACTION_NEUTRAL) - check_friendly_fire = 1 - status_flags = CANPUSH - del_on_death = TRUE - combat_mode = TRUE - dodging = TRUE - rapid_melee = 2 - footstep_type = FOOTSTEP_MOB_SHOE - alert_sounds = list( - 'modular_nova/modules/black_mesa/sound/mobs/security_guard/annoyance01.ogg', - 'modular_nova/modules/black_mesa/sound/mobs/security_guard/annoyance02.ogg', - 'modular_nova/modules/black_mesa/sound/mobs/security_guard/annoyance02.ogg', - 'modular_nova/modules/black_mesa/sound/mobs/security_guard/annoyance03.ogg', - 'modular_nova/modules/black_mesa/sound/mobs/security_guard/annoyance04.ogg', - 'modular_nova/modules/black_mesa/sound/mobs/security_guard/annoyance05.ogg', - 'modular_nova/modules/black_mesa/sound/mobs/security_guard/annoyance06.ogg', - 'modular_nova/modules/black_mesa/sound/mobs/security_guard/annoyance07.ogg', - 'modular_nova/modules/black_mesa/sound/mobs/security_guard/annoyance08.ogg', - 'modular_nova/modules/black_mesa/sound/mobs/security_guard/annoyance09.ogg', - 'modular_nova/modules/black_mesa/sound/mobs/security_guard/annoyance10.ogg' - ) - var/list/follow_sounds = list( - 'modular_nova/modules/black_mesa/sound/mobs/security_guard/leadon01.ogg', - 'modular_nova/modules/black_mesa/sound/mobs/security_guard/leadon02.ogg', - 'modular_nova/modules/black_mesa/sound/mobs/security_guard/leadon03.ogg', - 'modular_nova/modules/black_mesa/sound/mobs/security_guard/leadtheway01.ogg', - 'modular_nova/modules/black_mesa/sound/mobs/security_guard/leadtheway02.ogg', - 'modular_nova/modules/black_mesa/sound/mobs/security_guard/leadtheway03.ogg', - 'modular_nova/modules/black_mesa/sound/mobs/security_guard/leadtheway04.ogg', - 'modular_nova/modules/black_mesa/sound/mobs/security_guard/leadtheway05.ogg', - 'modular_nova/modules/black_mesa/sound/mobs/security_guard/leadtheway06.ogg', - 'modular_nova/modules/black_mesa/sound/mobs/security_guard/leadtheway07.ogg', - 'modular_nova/modules/black_mesa/sound/mobs/security_guard/leadtheway08.ogg', - 'modular_nova/modules/black_mesa/sound/mobs/security_guard/letsgo01.ogg', - 'modular_nova/modules/black_mesa/sound/mobs/security_guard/letsgo02.ogg', - 'modular_nova/modules/black_mesa/sound/mobs/security_guard/letsgo03.ogg', - ) - var/list/unfollow_sounds = list( - 'modular_nova/modules/black_mesa/sound/mobs/security_guard/holddownspot01.ogg', - 'modular_nova/modules/black_mesa/sound/mobs/security_guard/holddownspot02.ogg', - 'modular_nova/modules/black_mesa/sound/mobs/security_guard/holddownspot03.ogg', - 'modular_nova/modules/black_mesa/sound/mobs/security_guard/holddownspot04.ogg', - 'modular_nova/modules/black_mesa/sound/mobs/security_guard/holddownspot05.ogg', - 'modular_nova/modules/black_mesa/sound/mobs/security_guard/illstayhere01.ogg', - 'modular_nova/modules/black_mesa/sound/mobs/security_guard/illstayhere02.ogg', - 'modular_nova/modules/black_mesa/sound/mobs/security_guard/illstayhere03.ogg', - 'modular_nova/modules/black_mesa/sound/mobs/security_guard/imstickinghere01.ogg', - 'modular_nova/modules/black_mesa/sound/mobs/security_guard/imstickinghere02.ogg', - 'modular_nova/modules/black_mesa/sound/mobs/security_guard/imstickinghere03.ogg', - 'modular_nova/modules/black_mesa/sound/mobs/security_guard/imstickinghere04.ogg', - 'modular_nova/modules/black_mesa/sound/mobs/security_guard/imstickinghere05.ogg', - ) - var/follow_speed = 2 - var/follow_distance = 2 - -/mob/living/simple_animal/hostile/blackmesa/sec/Initialize(mapload) - . = ..() - AddComponent(/datum/component/follow, follow_sounds, unfollow_sounds, follow_distance, follow_speed) - - -/mob/living/simple_animal/hostile/blackmesa/sec/ranged - ranged = TRUE - retreat_distance = 5 - minimum_distance = 5 - icon_state = "security_guard_ranged" - icon_living = "security_guard_ranged" - casingtype = /obj/item/ammo_casing/c9mm - projectilesound = 'sound/weapons/gun/pistol/shot.ogg' - loot = list(/obj/effect/gibspawner/human, /obj/item/clothing/suit/armor/vest/blueshirt, /obj/item/gun/ballistic/automatic/pistol/sol) - rapid_melee = 1 - -/mob/living/simple_animal/hostile/blackmesa/blackops - name = "black operative" - desc = "Why do we always have to clean up a mess the grunts can't handle?" - icon = 'modular_nova/modules/black_mesa/icons/mobs.dmi' - icon_state = "blackops" - icon_living = "blackops" - icon_dead = "blackops" - icon_gib = "syndicate_gib" - mob_biotypes = MOB_ORGANIC|MOB_HUMANOID - sentience_type = SENTIENCE_HUMANOID - speak_chance = 10 - speak = list("Got a visual!") - turns_per_move = 5 - speed = 0 - stat_attack = HARD_CRIT - robust_searching = 1 - maxHealth = 200 - health = 200 - harm_intent_damage = 25 - melee_damage_lower = 30 - melee_damage_upper = 30 - attack_verb_continuous = "strikes" - attack_verb_simple = "strikes" - attack_sound = 'sound/effects/woodhit.ogg' - combat_mode = TRUE - loot = list(/obj/effect/gibspawner/human) - atmos_requirements = list("min_oxy" = 5, "max_oxy" = 0, "min_tox" = 0, "max_tox" = 1, "min_co2" = 0, "max_co2" = 5, "min_n2" = 0, "max_n2" = 0) - unsuitable_atmos_damage = 7.5 - faction = list(FACTION_BLACKOPS) - check_friendly_fire = 1 - status_flags = CANPUSH - del_on_death = 1 - dodging = TRUE - rapid_melee = 2 - footstep_type = FOOTSTEP_MOB_SHOE - alert_sounds = list( - 'modular_nova/modules/black_mesa/sound/mobs/blackops/bo_alert01.ogg', - 'modular_nova/modules/black_mesa/sound/mobs/blackops/bo_alert02.ogg', - 'modular_nova/modules/black_mesa/sound/mobs/blackops/bo_alert03.ogg', - 'modular_nova/modules/black_mesa/sound/mobs/blackops/bo_alert04.ogg', - 'modular_nova/modules/black_mesa/sound/mobs/blackops/bo_alert05.ogg', - 'modular_nova/modules/black_mesa/sound/mobs/blackops/bo_alert06.ogg', - 'modular_nova/modules/black_mesa/sound/mobs/blackops/bo_alert07.ogg', - 'modular_nova/modules/black_mesa/sound/mobs/blackops/bo_alert08.ogg' - ) - - -/mob/living/simple_animal/hostile/blackmesa/blackops/ranged - ranged = TRUE - rapid = 2 - retreat_distance = 5 - minimum_distance = 5 - icon_state = "blackops_ranged" - icon_living = "blackops_ranged" - casingtype = /obj/item/ammo_casing/c40sol - projectilesound = 'modular_nova/modules/modular_weapons/sounds/rifle_heavy.ogg' - attack_sound = 'sound/weapons/punch1.ogg' - loot = list(/obj/effect/gibspawner/human, /obj/item/ammo_box/magazine/c40sol_rifle/standard) - rapid_melee = 1 diff --git a/modular_nova/modules/black_mesa/code/mobs/mob_spawners.dm b/modular_nova/modules/black_mesa/code/mobs/mob_spawners.dm deleted file mode 100644 index 7a173a80c74..00000000000 --- a/modular_nova/modules/black_mesa/code/mobs/mob_spawners.dm +++ /dev/null @@ -1,138 +0,0 @@ -/mob/living/simple_animal/hostile/blackmesa - var/list/alert_sounds - var/alert_cooldown = 3 SECONDS - var/alert_cooldown_time - -/mob/living/simple_animal/hostile/blackmesa/xen - faction = list(FACTION_XEN) - atmos_requirements = list("min_oxy" = 0, "max_oxy" = 0, "min_tox" = 0, "max_tox" = 0, "min_co2" = 0, "max_co2" = 0, "min_n2" = 0, "max_n2" = 0) - minbodytemp = 0 - maxbodytemp = 1500 - -/mob/living/simple_animal/hostile/blackmesa/Aggro() - if(alert_sounds) - if(!(world.time <= alert_cooldown_time)) - playsound(src, pick(alert_sounds), 70) - alert_cooldown_time = world.time + alert_cooldown - - -#define MOB_PLACER_RANGE 16 // One more tile than the biggest viewrange we have. - -/obj/effect/random_mob_placer - name = "mob placer" - icon = 'modular_nova/modules/black_mesa/icons/mapping_helpers.dmi' - icon_state = "mobspawner" - var/list/possible_mobs = list(/mob/living/simple_animal/hostile/blackmesa/xen/headcrab) - -/obj/effect/random_mob_placer/Initialize(mapload) - . = ..() - for(var/turf/iterating_turf in range(MOB_PLACER_RANGE, src)) - RegisterSignal(iterating_turf, COMSIG_ATOM_ENTERED, PROC_REF(trigger)) - -/obj/effect/random_mob_placer/proc/trigger(datum/source, atom/movable/entered_atom) - SIGNAL_HANDLER - if(!isliving(entered_atom)) - return - var/mob/living/entered_mob = entered_atom - - if(!entered_mob.client) - return - - var/mob/picked_mob = pick(possible_mobs) - new picked_mob(loc) - qdel(src) - -#undef MOB_PLACER_RANGE - -/obj/effect/random_mob_placer/xen - icon_state = "spawn_xen" - possible_mobs = list( - /mob/living/simple_animal/hostile/blackmesa/xen/headcrab, - /mob/living/simple_animal/hostile/blackmesa/xen/houndeye, - /mob/living/simple_animal/hostile/blackmesa/xen/bullsquid, - ) - -/obj/effect/random_mob_placer/xen/zombie - icon_state = "spawn_zombie" - possible_mobs = list( - /mob/living/simple_animal/hostile/blackmesa/xen/headcrab_zombie/scientist, - /mob/living/simple_animal/hostile/blackmesa/xen/headcrab_zombie/guard, - /mob/living/simple_animal/hostile/blackmesa/xen/headcrab_zombie/hecu, - ) - -/obj/effect/random_mob_placer/blackops - icon_state = "spawn_blackops" - possible_mobs = list( - /mob/living/simple_animal/hostile/blackmesa/blackops, - /mob/living/simple_animal/hostile/blackmesa/blackops/ranged, - ) - -/obj/effect/random_mob_placer/hev_zombie - icon_state = "spawn_hev" - possible_mobs = list(/mob/living/simple_animal/hostile/blackmesa/xen/headcrab_zombie/hev) - -/obj/effect/random_mob_placer/scientist_zombie - icon_state = "spawn_zombiescientist" - possible_mobs = list(/mob/living/simple_animal/hostile/blackmesa/xen/headcrab_zombie/scientist) - -/obj/effect/random_mob_placer/scientist_zombie - icon_state = "spawn_zombiesec" - possible_mobs = list(/mob/living/simple_animal/hostile/blackmesa/xen/headcrab_zombie/guard) - -/obj/effect/random_mob_placer/security_guard - icon_state = "spawn_guard" - possible_mobs = list(/mob/living/simple_animal/hostile/blackmesa/sec, /mob/living/simple_animal/hostile/blackmesa/sec/ranged) - -/obj/effect/random_mob_placer/vortigaunt_hostile - icon_state = "spawn_vortigaunt_slave" - possible_mobs = list(/mob/living/simple_animal/hostile/blackmesa/xen/vortigaunt/slave) - -/obj/effect/random_mob_placer/vortigaunt - icon_state = "spawn_vortigaunt" - possible_mobs = list(/mob/living/simple_animal/hostile/blackmesa/xen/vortigaunt) - -/obj/effect/mob_spawn/corpse/human/hecu_zombie - name = "HECU" - outfit = /datum/outfit/hecucorpse - icon_state = "corpsebartender" /// It 'vaguely' looks like HECU - brute_damage = 1000 - -/datum/outfit/hecucorpse - name = "BMRF HECU Corpse" - uniform = /obj/item/clothing/under/rank/security/officer/hecu - head = /obj/item/clothing/head/helmet - suit = /obj/item/clothing/suit/armor/vest - mask = /obj/item/clothing/mask/gas/hecu2 - gloves = /obj/item/clothing/gloves/combat - belt = /obj/item/storage/belt/military/assault/hecu - shoes = /obj/item/clothing/shoes/combat - l_pocket = /obj/item/storage/belt/bowie_sheath - r_pocket = /obj/item/flashlight/flare - -/obj/effect/mob_spawn/corpse/human/scientist_zombie - name = "Science Team" - outfit = /datum/outfit/sciteamcorpse - icon_state = "corpsescientist" - brute_damage = 1000 - -/datum/outfit/sciteamcorpse - name = "BMRF Science Team Corpse" - uniform = /obj/item/clothing/under/rank/rnd/scientist/nova/hlscience - suit = /obj/item/clothing/suit/toggle/labcoat - shoes = /obj/item/clothing/shoes/laceup - gloves = /obj/item/clothing/gloves/latex - -/obj/effect/mob_spawn/corpse/human/guard_zombie - name = "Security Guard" - outfit = /datum/outfit/barneycorpse - icon_state = "corpsedoctor" /// It 'vaguely' looks like the guard - brute_damage = 1000 - -/datum/outfit/barneycorpse - name = "BMRF Security Guard Corpse" - uniform = /obj/item/clothing/under/rank/security/officer/blueshirt - head = /obj/item/clothing/head/helmet/blueshirt - suit = /obj/item/clothing/suit/armor/vest/blueshirt - shoes = /obj/item/clothing/shoes/jackboots - gloves = /obj/item/clothing/gloves/color/black - belt = /obj/item/storage/belt/security diff --git a/modular_nova/modules/black_mesa/code/mobs/nihilanth.dm b/modular_nova/modules/black_mesa/code/mobs/nihilanth.dm deleted file mode 100644 index fabda7e4c0e..00000000000 --- a/modular_nova/modules/black_mesa/code/mobs/nihilanth.dm +++ /dev/null @@ -1,67 +0,0 @@ -/mob/living/simple_animal/hostile/blackmesa/xen/nihilanth - name = "nihilanth" - desc = "Holy shit." - icon = 'modular_nova/modules/black_mesa/icons/nihilanth.dmi' - icon_state = "nihilanth" - icon_living = "nihilanth" - SET_BASE_PIXEL(-32, -32) - speed = 3 - bound_height = 64 - bound_width = 64 - icon_dead = "bullsquid_dead" - maxHealth = 3000 - health = 3000 - atmos_requirements = list("min_oxy" = 0, "max_oxy" = 0, "min_tox" = 0, "max_tox" = 0, "min_co2" = 0, "max_co2" = 0, "min_n2" = 0, "max_n2" = 0) - projectilesound = 'sound/weapons/lasercannonfire.ogg' - projectiletype = /obj/projectile/nihilanth - ranged = TRUE - rapid = 3 - alert_cooldown = 2 MINUTES - harm_intent_damage = 50 - melee_damage_lower = 30 - melee_damage_upper = 40 - attack_verb_continuous = "lathes" - attack_verb_simple = "lathe" - attack_sound = 'sound/weapons/punch1.ogg' - status_flags = NONE - del_on_death = TRUE - wander = TRUE - loot = list(/obj/effect/gibspawner/xeno, /obj/item/stack/sheet/bluespace_crystal/fifty, /obj/item/key/gateway, /obj/item/uber_teleporter) - movement_type = FLYING - -/obj/item/stack/sheet/bluespace_crystal/fifty - amount = 50 - -/obj/projectile/nihilanth - name = "portal energy" - icon_state = "seedling" - damage = 20 - damage_type = BURN - light_range = 2 - armor_flag = ENERGY - light_color = LIGHT_COLOR_BRIGHT_YELLOW - hitsound = 'sound/weapons/sear.ogg' - hitsound_wall = 'sound/weapons/effects/searwall.ogg' - nondirectional_sprite = TRUE - -/mob/living/simple_animal/hostile/blackmesa/xen/nihilanth/Aggro() - . = ..() - if(!(world.time <= alert_cooldown_time)) - alert_cooldown_time = world.time + alert_cooldown - switch(health) - if(0 to 999) - playsound(src, pick(list('modular_nova/modules/black_mesa/sound/mobs/nihilanth/nihilanth_pain01.ogg', 'modular_nova/modules/black_mesa/sound/mobs/nihilanth/nihilanth_freeeemmaan01.ogg')), 100) - if(1000 to 2999) - playsound(src, pick(list('modular_nova/modules/black_mesa/sound/mobs/nihilanth/nihilanth_youalldie01.ogg', 'modular_nova/modules/black_mesa/sound/mobs/nihilanth/nihilanth_foryouhewaits01.ogg')), 100) - if(3000 to 6000) - playsound(src, pick(list('modular_nova/modules/black_mesa/sound/mobs/nihilanth/nihilanth_whathavedone01.ogg', 'modular_nova/modules/black_mesa/sound/mobs/nihilanth/nihilanth_deceiveyou01.ogg')), 100) - else - playsound(src, pick(list('modular_nova/modules/black_mesa/sound/mobs/nihilanth/nihilanth_thetruth01.ogg', 'modular_nova/modules/black_mesa/sound/mobs/nihilanth/nihilanth_iamthelast01.ogg')), 100) - set_combat_mode(TRUE) - -/mob/living/simple_animal/hostile/blackmesa/xen/nihilanth/death(gibbed) - . = ..() - -/mob/living/simple_animal/hostile/blackmesa/xen/nihilanth/LoseAggro() - . = ..() - set_combat_mode(FALSE) diff --git a/modular_nova/modules/black_mesa/code/mobs/vortigaunt.dm b/modular_nova/modules/black_mesa/code/mobs/vortigaunt.dm deleted file mode 100644 index 1fc62c86e32..00000000000 --- a/modular_nova/modules/black_mesa/code/mobs/vortigaunt.dm +++ /dev/null @@ -1,64 +0,0 @@ -/mob/living/simple_animal/hostile/blackmesa/xen/vortigaunt - name = "vortigaunt" - desc = "There is no distance between us. No false veils of time or space may intervene." - icon = 'modular_nova/modules/black_mesa/icons/mobs.dmi' - icon_state = "vortigaunt" - icon_living = "vortigaunt" - icon_dead = "vortigaunt_dead" - icon_gib = null - gender = MALE - faction = list(FACTION_STATION, FACTION_NEUTRAL) - mob_biotypes = list(MOB_ORGANIC, MOB_BEAST) - speak_chance = 1 - speak_emote = list("galungs") - speed = 1 - emote_taunt = list("galalungas", "galungas", "gungs") - projectiletype = /obj/projectile/beam/emitter/hitscan - projectilesound = 'modular_nova/modules/black_mesa/sound/mobs/vortigaunt/attack_shoot4.ogg' - ranged_cooldown_time = 5 SECONDS - ranged_message = "fires" - taunt_chance = 100 - turns_per_move = 7 - maxHealth = 130 - health = 130 - speed = 3 - ranged = TRUE - dodging = TRUE - harm_intent_damage = 15 - melee_damage_lower = 10 - melee_damage_upper = 10 - retreat_distance = 5 - minimum_distance = 5 - attack_sound = 'sound/weapons/bite.ogg' - gold_core_spawnable = FRIENDLY_SPAWN - loot = list(/obj/item/stack/sheet/bone) - alert_sounds = list( - 'modular_nova/modules/black_mesa/sound/mobs/vortigaunt/alert01.ogg', - 'modular_nova/modules/black_mesa/sound/mobs/vortigaunt/alert01b.ogg', - 'modular_nova/modules/black_mesa/sound/mobs/vortigaunt/alert02.ogg', - 'modular_nova/modules/black_mesa/sound/mobs/vortigaunt/alert03.ogg', - 'modular_nova/modules/black_mesa/sound/mobs/vortigaunt/alert04.ogg', - 'modular_nova/modules/black_mesa/sound/mobs/vortigaunt/alert05.ogg', - 'modular_nova/modules/black_mesa/sound/mobs/vortigaunt/alert06.ogg', - ) - /// SOunds we play when asked to follow/unfollow. - var/list/follow_sounds = list( - 'modular_nova/modules/black_mesa/sound/mobs/vortigaunt/village_argue01.ogg', - 'modular_nova/modules/black_mesa/sound/mobs/vortigaunt/village_argue02.ogg', - 'modular_nova/modules/black_mesa/sound/mobs/vortigaunt/village_argue03.ogg', - 'modular_nova/modules/black_mesa/sound/mobs/vortigaunt/village_argue04.ogg', - 'modular_nova/modules/black_mesa/sound/mobs/vortigaunt/village_argue05.ogg', - 'modular_nova/modules/black_mesa/sound/mobs/vortigaunt/village_argue05a.ogg', - ) - var/follow_speed = 1 - var/follow_distance = 2 - -/mob/living/simple_animal/hostile/blackmesa/xen/vortigaunt/Initialize(mapload) - . = ..() - AddComponent(/datum/component/follow, follow_sounds, follow_sounds, follow_distance, follow_speed) - -/mob/living/simple_animal/hostile/blackmesa/xen/vortigaunt/slave - name = "slave vortigaunt" - desc = "Bound by the shackles of a sinister force. He does not want to hurt you." - icon_state = "vortigaunt_slave" - faction = list(FACTION_XEN) diff --git a/modular_nova/modules/black_mesa/code/objects.dm b/modular_nova/modules/black_mesa/code/objects.dm deleted file mode 100644 index b1c5b43479d..00000000000 --- a/modular_nova/modules/black_mesa/code/objects.dm +++ /dev/null @@ -1,25 +0,0 @@ -/obj/item/minespawner/explosive - name = "deactivated explosive landmine" - desc = "When activated, will deploy into a highly explosive mine after 3 seconds passes, perfect for lazy militarymen looking to cover their fortifications with no effort." - - mine_type = /obj/effect/mine/explosive - -/obj/item/minespawner/explosive/nri - - mine_type = /obj/effect/mine/explosive/nri - -/// A nerfed down version of a landmine I really should've done a long time ago but only did it now. -/obj/effect/mine/explosive/nri - name = "explosive mine" - range_devastation = 0 - range_heavy = 0 - range_light = 2 - range_flame = 1 - range_flash = 3 - /// Stun time after an activation. - var/stun_time = 100 - -/obj/effect/mine/explosive/nri/mineEffect(mob/living/victim) - explosion(src, range_devastation, range_heavy, range_light, range_flame, range_flash) - if(isliving(victim)) - victim.Paralyze(stun_time) diff --git a/modular_nova/modules/black_mesa/code/projectiles.dm b/modular_nova/modules/black_mesa/code/projectiles.dm deleted file mode 100644 index 2a0c77fa02e..00000000000 --- a/modular_nova/modules/black_mesa/code/projectiles.dm +++ /dev/null @@ -1,10 +0,0 @@ -/obj/projectile/bullet/a223/weak - name = "surplus .277 bullet" - damage = 25 - armour_penetration = 10 - wound_bonus = -40 - -/obj/item/ammo_casing/a223/weak - name = ".277 surplus bullet casing" - desc = "A .277 surplus bullet casing." - projectile_type = /obj/projectile/bullet/a223/weak diff --git a/modular_nova/modules/black_mesa/code/rationpacks.dm b/modular_nova/modules/black_mesa/code/rationpacks.dm deleted file mode 100644 index 7c939f1d66d..00000000000 --- a/modular_nova/modules/black_mesa/code/rationpacks.dm +++ /dev/null @@ -1,133 +0,0 @@ -/// Handpicked list of various pizzas and "pizzas" to make sure it's both 'safe' (human-edible) and doesn't spawn the base type like the bomb pizza can. -#define EDIBLE_PIZZA_LIST list( \ - /obj/item/food/pizza/margherita, \ - /obj/item/food/pizza/meat, \ - /obj/item/food/pizza/mushroom, \ - /obj/item/food/pizza/vegetable, \ - /obj/item/food/pizza/donkpocket, \ - /obj/item/food/pizza/dank, \ - /obj/item/food/pizza/sassysage, \ - /obj/item/food/pizza/pineapple, \ - /obj/item/food/pizza/mothic_margherita, \ - /obj/item/food/pizza/mothic_firecracker, \ - /obj/item/food/pizza/mothic_five_cheese, \ - /obj/item/food/pizza/mothic_white_pie, \ - /obj/item/food/pizza/mothic_pesto, \ - /obj/item/food/pizza/mothic_garlic, \ - /obj/item/food/pizza/flatbread/rustic, \ - /obj/item/food/pizza/flatbread/italic, \ - /obj/item/food/pizza/flatbread/zmorgast, \ - /obj/item/food/pizza/flatbread/fish, \ - /obj/item/food/pizza/flatbread/mushroom, \ - /obj/item/food/pizza/flatbread/nutty, \ -) - -/obj/item/food/mre_course - name = "undefined MRE course" - desc = "Something you shouldn't see. But it's edible." - icon = 'modular_nova/modules/awaymissions_nova/icons/courses.dmi' - icon_state = "main_course" - food_reagents = list(/datum/reagent/consumable/nutriment = 20) - tastes = list("crayon powder" = 1) - foodtypes = VEGETABLES | GRAIN - w_class = WEIGHT_CLASS_SMALL - -/obj/item/food/mre_course/main - name = "MRE main course" - desc = "Main course of the ancient military ration designed for ground troops. This one is NOTHING." - tastes = list("strawberry" = 1, "vanilla" = 1, "chocolate" = 1) - -/obj/item/food/mre_course/main/beans - name = "MRE main course - Pork and Beans" - desc = "Main course of the ancient military ration designed for ground troops. This one is pork and beans covered in some tomato sauce." - tastes = list("beans" = 1, "pork" = 1, "tomato sauce" = 1) - foodtypes = MEAT | VEGETABLES - -/obj/item/food/mre_course/main/macaroni - name = "MRE main course - Macaroni and Cheese" - desc = "Main course of the ancient military ration designed for ground troops. This one is preboiled macaroni covered in some federal reserve cheese." - tastes = list("cold macaroni" = 1, "bland cheese" = 1) - foodtypes = DAIRY | GRAIN - -/obj/item/food/mre_course/main/rice - name = "MRE main course - Rice and Beef" - desc = "Main course of the ancient military ration designed for ground troops. This one is rice with beef, covered in gravy." - tastes = list("dense rice" = 1, "bits of beef" = 1, "gravy" = 1) - foodtypes = GRAIN | MEAT - -/obj/item/food/mre_course/side - name = "MRE side course" - desc = "Side course of the ancient military ration designed for ground troops. This one is NOTHING." - icon_state = "side_dish" - -/obj/item/food/mre_course/side/bread - name = "MRE side course - Cornbread" - desc = "Side course of the ancient military ration designed for ground troops. This one is cornbread." - tastes = list("cornbread" = 1) - foodtypes = GRAIN - -/obj/item/food/mre_course/side/pie - name = "MRE side course - Meat Pie" - desc = "Side course of the ancient military ration designed for ground troops. This one is some meat pie." - tastes = list("pie dough" = 1, "ground meat" = 1, "Texas" = 1) - foodtypes = MEAT | GRAIN - -/obj/item/food/mre_course/side/chicken - name = "MRE side course - Sweet 'n Sour Chicken" - desc = "Side course of the ancient military ration designed for ground troops. This one is some undefined chicken-looking meat covered in cheap reddish sauce." - tastes = list("bits of chicken meat" = 1, "sweet and sour sauce" = 1, "salt" = 1) - foodtypes = MEAT | FRIED - -/obj/item/food/mre_course/dessert - name = "MRE dessert" - desc = "Dessert of the ancient military ration designed for ground troops. This one is NOTHING." - icon_state = "dessert" - -/obj/item/food/mre_course/dessert/cookie - name = "MRE dessert - Cookie" - desc = "Dessert of the ancient military ration designed for ground troops. This one is a big dry cookie." - tastes = list("dryness" = 1, "hard cookie" = 1, "chocolate chip" = 1) - foodtypes = GRAIN | SUGAR - -/obj/item/food/mre_course/dessert/cake - name = "MRE dessert - Apple Pie" - desc = "Dessert of the ancient military ration designed for ground troops. This one is an amorphous apple pie." - tastes = list("apple" = 1, "moist cake" = 1, "sugar" = 1) - foodtypes = GRAIN | SUGAR | FRUIT - -/obj/item/food/mre_course/dessert/chocolate - name = "MRE dessert - Dark Chocolate" - desc = "Dessert of the ancient military ration designed for ground troops. This one is a dark bar of chocolate." - tastes = list("vanilla" = 1, "artificial chocolate" = 1, "chemicals" = 1) - foodtypes = JUNKFOOD | SUGAR - -/obj/item/storage/box/hecu_rations - name = "Meal, Ready-to-Eat" - desc = "A box containing a few rations and some chewing gum, for keeping a starving crayon-eater going." - icon = 'modular_nova/modules/awaymissions_nova/icons/mre_hecu.dmi' - icon_state = "mre_package" - illustration = null - -/obj/item/storage/box/hecu_rations/Initialize(mapload) - . = ..() - atom_storage.max_slots = 5 - -/obj/item/storage/box/hecu_rations/PopulateContents() - var/main_course = pick(/obj/item/food/mre_course/main/beans, /obj/item/food/mre_course/main/macaroni, /obj/item/food/mre_course/main/rice) - var/side_dish = pick(/obj/item/food/mre_course/side/bread, /obj/item/food/mre_course/side/pie, /obj/item/food/mre_course/side/chicken) - var/dessert = pick(/obj/item/food/mre_course/dessert/cookie, /obj/item/food/mre_course/dessert/cake, /obj/item/food/mre_course/dessert/chocolate) - new main_course(src) - new side_dish(src) - new dessert(src) - new /obj/item/storage/box/gum(src) - new /obj/item/food/spacers_sidekick(src) - -/obj/item/pizzabox/random - boxtag = "Randy's Surprise" - boxtag_set = TRUE - -/obj/item/pizzabox/random/Initialize(mapload) - . = ..() - if(!pizza) - var/random_pizza = pick(EDIBLE_PIZZA_LIST) - pizza = new random_pizza(src) diff --git a/modular_nova/modules/black_mesa/code/shield_pylon.dm b/modular_nova/modules/black_mesa/code/shield_pylon.dm deleted file mode 100644 index 35b6e5b1bb1..00000000000 --- a/modular_nova/modules/black_mesa/code/shield_pylon.dm +++ /dev/null @@ -1,96 +0,0 @@ -/mob/living/simple_animal/hostile/blackmesa/xen - /// Can we be shielded by pylons? - var/can_be_shielded = TRUE - /// If we have support pylons, this is true. - var/shielded = FALSE - /// How many shields we have protecting us - var/shield_count = 0 - -/mob/living/simple_animal/hostile/blackmesa/xen/update_overlays() - . = ..() - if(shielded) - . += mutable_appearance('icons/effects/effects.dmi', "shield-yellow", MOB_SHIELD_LAYER) - -/mob/living/simple_animal/hostile/blackmesa/xen/proc/lose_shield() - shield_count-- - if(shield_count <= 0) - shielded = FALSE - update_appearance() - -/mob/living/simple_animal/hostile/blackmesa/xen/apply_damage(damage = 0, damagetype = BRUTE, def_zone = null, blocked = FALSE, forced = FALSE, spread_damage = FALSE, wound_bonus = 0, bare_wound_bonus = 0, sharpness = NONE, attack_direction = null, attacking_item) - if(shielded) - balloon_alert_to_viewers("ineffective!") - return FALSE - return ..() - -/obj/structure/xen_pylon - name = "shield plant" - desc = "It seems to be some kind of force field generator." - icon = 'modular_nova/modules/black_mesa/icons/plants.dmi' - icon_state = "crystal_pylon" - max_integrity = 70 - density = TRUE - anchored = TRUE - /// The range at which we provide shield support to a mob. - var/shield_range = 8 - /// A list of mobs we are currently shielding with attached beams. - var/list/shielded_mobs = list() - -/obj/structure/xen_pylon/Initialize(mapload) - . = ..() - for(var/mob/living/simple_animal/hostile/blackmesa/xen/iterating_mob in range(shield_range, src)) - if(!iterating_mob.can_be_shielded) - continue - register_mob(iterating_mob) - for(var/turf/iterating_turf in RANGE_TURFS(shield_range, src)) - RegisterSignal(iterating_turf, COMSIG_ATOM_ENTERED, PROC_REF(mob_entered_range)) - -/obj/structure/xen_pylon/proc/mob_entered_range(datum/source, atom/movable/entered_atom) - SIGNAL_HANDLER - if(!isxenmob(entered_atom)) - return - var/mob/living/simple_animal/hostile/blackmesa/xen/entered_xen_mob = entered_atom - if(!entered_xen_mob.can_be_shielded) - return - register_mob(entered_xen_mob) - -/obj/structure/xen_pylon/proc/register_mob(mob/living/simple_animal/hostile/blackmesa/xen/mob_to_register) - if(mob_to_register in shielded_mobs) - return - if(!istype(mob_to_register)) - return - shielded_mobs += mob_to_register - mob_to_register.shielded = TRUE - mob_to_register.shield_count++ - mob_to_register.update_appearance() - var/datum/beam/created_beam = Beam(mob_to_register, icon_state = "red_lightning", time = 10 MINUTES, maxdistance = (shield_range - 1)) - shielded_mobs[mob_to_register] = created_beam - RegisterSignal(created_beam, COMSIG_QDELETING, PROC_REF(beam_died), override = TRUE) - RegisterSignal(mob_to_register, COMSIG_QDELETING, PROC_REF(mob_died), override = TRUE) - -/obj/structure/xen_pylon/proc/mob_died(atom/movable/source, force) - SIGNAL_HANDLER - var/datum/beam/beam = shielded_mobs[source] - QDEL_NULL(beam) - shielded_mobs[source] = null - shielded_mobs -= source - -/obj/structure/xen_pylon/proc/beam_died(datum/beam/beam_to_kill) - SIGNAL_HANDLER - for(var/mob/living/simple_animal/hostile/blackmesa/xen/iterating_mob as anything in shielded_mobs) - if(shielded_mobs[iterating_mob] == beam_to_kill) - iterating_mob.lose_shield() - shielded_mobs[iterating_mob] = null - shielded_mobs -= iterating_mob - -/obj/structure/xen_pylon/Destroy() - for(var/mob/living/simple_animal/hostile/blackmesa/xen/iterating_mob as anything in shielded_mobs) - iterating_mob.lose_shield() - var/datum/beam/beam = shielded_mobs[iterating_mob] - QDEL_NULL(beam) - shielded_mobs[iterating_mob] = null - shielded_mobs -= iterating_mob - shielded_mobs = null - playsound(src, 'sound/magic/lightningbolt.ogg', 100, TRUE) - new /obj/item/grenade/xen_crystal(get_turf(src)) - return ..() diff --git a/modular_nova/modules/black_mesa/code/shockplant.dm b/modular_nova/modules/black_mesa/code/shockplant.dm deleted file mode 100644 index 842b084b387..00000000000 --- a/modular_nova/modules/black_mesa/code/shockplant.dm +++ /dev/null @@ -1,41 +0,0 @@ - -/obj/structure/shockplant - name = "electrical plant" - desc = "It glows with a warm buzz." - icon = 'modular_nova/modules/black_mesa/icons/plants.dmi' - icon_state = "electric_plant" - density = TRUE - anchored = TRUE - max_integrity = 200 - light_range = 15 - light_power = 0.5 - light_color = "#53fafa" - /// Our faction - faction = list(FACTION_XEN) - /// Our range to shock folks in. - var/shock_range = 6 - /// Our cooldown on the shocking. - var/shock_cooldown = 3 SECONDS - /// The zap power - var/shock_power = 10000 - - COOLDOWN_DECLARE(shock_cooldown_timer) - -/obj/structure/shockplant/Initialize(mapload) - . = ..() - for(var/turf/open/iterating_turf as anything in circle_view_turfs(src, shock_range)) - RegisterSignal(iterating_turf, COMSIG_ATOM_ENTERED, PROC_REF(trigger)) - -/obj/structure/shockplant/proc/trigger(datum/source, atom/movable/entered_atom) - SIGNAL_HANDLER - - if(!COOLDOWN_FINISHED(src, shock_cooldown_timer)) - return - - if(isliving(entered_atom)) - var/mob/living/entering_mob = entered_atom - if(faction_check_atom(entering_mob)) - return - tesla_zap(src, shock_range, shock_power, shocked_targets = list(entering_mob)) - playsound(src, 'sound/magic/lightningbolt.ogg', 100, TRUE) - COOLDOWN_START(src, shock_cooldown_timer, shock_cooldown) diff --git a/modular_nova/modules/black_mesa/code/spawners.dm b/modular_nova/modules/black_mesa/code/spawners.dm deleted file mode 100644 index 0968e553d0e..00000000000 --- a/modular_nova/modules/black_mesa/code/spawners.dm +++ /dev/null @@ -1,17 +0,0 @@ -/obj/effect/spawner/random/bioluminescent_plant - name = "random bioluminescent plant" - icon_state = "plant" - loot = list( - /obj/structure/flora/biolumi/lamp, - /obj/structure/flora/biolumi/flower, - /obj/structure/flora/biolumi/mine, - ) - -/obj/effect/spawner/random/bioluminescent_plant/weak - name = "random weak bioluminescent plant" - icon_state = "plant" - loot = list( - /obj/structure/flora/biolumi/lamp/weaklight, - /obj/structure/flora/biolumi/flower/weaklight, - /obj/structure/flora/biolumi/mine/weaklight, - ) diff --git a/modular_nova/modules/black_mesa/code/turfs.dm b/modular_nova/modules/black_mesa/code/turfs.dm deleted file mode 100644 index 7b30cba8e69..00000000000 --- a/modular_nova/modules/black_mesa/code/turfs.dm +++ /dev/null @@ -1,111 +0,0 @@ -/turf/closed/mineral/black_mesa - turf_type = /turf/open/misc/ironsand/black_mesa - baseturfs = /turf/open/misc/ironsand/black_mesa - initial_gas_mix = OPENTURF_DEFAULT_ATMOS - -//Floors that no longer lead into space (innovative!) -/turf/open/misc/ironsand/black_mesa - baseturfs = /turf/open/misc/ironsand/black_mesa - initial_gas_mix = OPENTURF_DEFAULT_ATMOS - planetary_atmos = TRUE - -/obj/effect/baseturf_helper/black_mesa - name = "black mesa sand baseturf editor" - baseturf = /turf/open/misc/ironsand/black_mesa - -/obj/effect/baseturf_helper/black_mesa_xen - name = "xen baseturf editor" - baseturf = /turf/open/water/xen_acid - -/turf/closed/indestructible/rock/xen - name = "strange wall" - color = "#ac3b06" - baseturfs = /turf/closed/indestructible/rock/xen - -/turf/open/misc/xen - name = "strange weeds" - desc = "It feels soft to the touch, like a carpet... only... wet." - icon = 'modular_nova/modules/black_mesa/icons/xen_turfs.dmi' - icon_state = "xen_turf" - baseturfs = /turf/open/misc/xen - footstep = FOOTSTEP_GRASS - barefootstep = FOOTSTEP_GRASS - planetary_atmos = TRUE - -/turf/open/water/beach/xen - desc = "It's mirky and filled with strange organisms." - name = "xen water" - icon = 'modular_nova/modules/black_mesa/icons/xen_turfs.dmi' - baseturfs = /turf/open/water/beach/xen - initial_gas_mix = OPENTURF_DEFAULT_ATMOS - planetary_atmos = TRUE - -/turf/open/misc/beach/coastline_t/xen - desc = "It's mirky and filled with strange organisms." - name = "xen water" - icon = 'modular_nova/modules/black_mesa/icons/xen_turfs.dmi' - baseturfs = /turf/open/misc/beach/coastline_t/xen - initial_gas_mix = OPENTURF_DEFAULT_ATMOS - planetary_atmos = TRUE - -/turf/open/misc/beach/coastline_t/sandwater_inner/xen - desc = "It's mirky and filled with strange organisms." - name = "xen water" - icon = 'modular_nova/modules/black_mesa/icons/xen_turfs.dmi' - baseturfs = /turf/open/misc/beach/coastline_t/sandwater_inner/xen - initial_gas_mix = OPENTURF_DEFAULT_ATMOS - planetary_atmos = TRUE - -/turf/open/misc/beach/coastline_b/xen - name = "xen water" - desc = "It's mirky and filled with strange organisms." - icon = 'modular_nova/modules/black_mesa/icons/xen_turfs.dmi' - baseturfs = /turf/open/misc/beach/coastline_b/xen - initial_gas_mix = OPENTURF_DEFAULT_ATMOS - planetary_atmos = TRUE - -/turf/open/misc/dirt/planet/xen - name = "strange path" - color = "#ee5f1c" - baseturfs = /turf/open/misc/dirt/planet/xen - planetary_atmos = TRUE - -/turf/open/water/xen_acid - baseturfs = /turf/open/water/xen_acid - initial_gas_mix = OPENTURF_DEFAULT_ATMOS - planetary_atmos = TRUE - color = COLOR_VIBRANT_LIME - light_range = 2 - light_color = COLOR_VIBRANT_LIME - /// How much damage we deal if a mob enters us. - var/acid_damage = 30 - -/turf/open/water/xen_acid/Entered(atom/movable/arrived, atom/old_loc, list/atom/old_locs) - . = ..() - if(isliving(arrived) && !istype(arrived, /mob/living/simple_animal/hostile/blackmesa/xen/bullsquid)) // Bull squid territory! - var/mob/living/unlucky_mob = arrived - unlucky_mob.adjustFireLoss(acid_damage) - playsound(unlucky_mob, 'sound/weapons/sear.ogg', 100, TRUE) - -/turf/open/water/electric - name = "electric water" - baseturfs = /turf/open/water/electric - initial_gas_mix = OPENTURF_DEFAULT_ATMOS - color = COLOR_TEAL - light_range = 2 - light_color = COLOR_TEAL - -/turf/open/water/electric/Entered(atom/movable/arrived, atom/old_loc, list/atom/old_locs) - . = ..() - if(isliving(arrived)) - var/mob/living/unlucky_mob = arrived - unlucky_mob.Stun(1.5 SECONDS) - unlucky_mob.Knockdown(10 SECONDS) - unlucky_mob.adjustFireLoss(15) - var/datum/effect_system/lightning_spread/s = new /datum/effect_system/lightning_spread - s.set_up(5, 1, unlucky_mob.loc) - s.start() - unlucky_mob.visible_message(span_danger("[unlucky_mob.name] is shocked by [src]!"), \ - span_userdanger("You feel a powerful shock course through your body!"), \ - span_hear("You hear a heavy electrical crack!")) - playsound(unlucky_mob, SFX_SPARKS, 100, TRUE) diff --git a/modular_nova/modules/black_mesa/code/turrets.dm b/modular_nova/modules/black_mesa/code/turrets.dm deleted file mode 100644 index 724f782e854..00000000000 --- a/modular_nova/modules/black_mesa/code/turrets.dm +++ /dev/null @@ -1,53 +0,0 @@ -/obj/machinery/porta_turret/black_mesa - use_power = IDLE_POWER_USE - req_access = list(ACCESS_CENT_GENERAL) - faction = list(FACTION_XEN, FACTION_BLACKMESA, FACTION_HECU, FACTION_BLACKOPS) - mode = 1 - uses_stored = FALSE - max_integrity = 120 - base_icon_state = "syndie" - lethal_projectile = /obj/projectile/beam/emitter - lethal_projectile_sound = 'sound/weapons/laser.ogg' - -/obj/machinery/porta_turret/black_mesa/assess_perp(mob/living/carbon/human/perp) - return 10 - -/obj/machinery/porta_turret/black_mesa/setup(obj/item/gun/turret_gun) - return - -/obj/machinery/porta_turret/black_mesa/heavy - name = "Heavy Defence Turret" - max_integrity = 200 - lethal_projectile = /obj/projectile/beam/laser/heavylaser - lethal_projectile_sound = 'sound/weapons/lasercannonfire.ogg' - -/obj/item/storage/toolbox/emergency/turret/mesa - name = "USMC stationary defense deployment system" - desc = "You feel a strange urge to hit this with a wrench." - -/obj/item/storage/toolbox/emergency/turret/mesa/PopulateContents() - return null - -/obj/item/storage/toolbox/emergency/turret/mesa/attackby(obj/item/I, mob/living/user, params) - if(I.tool_behaviour == TOOL_WRENCH && user.combat_mode) - user.visible_message(span_danger("[user] bashes [src] with [I]!"), \ - span_danger("You bash [src] with [I]!"), null, COMBAT_MESSAGE_RANGE) - playsound(src, "sound/items/drill_use.ogg", 80, TRUE, -1) - var/obj/machinery/porta_turret/syndicate/pod/toolbox/mesa/turret = new(get_turf(loc)) - turret.faction = list(FACTION_HECU) - qdel(src) - - ..() - -/obj/machinery/porta_turret/syndicate/pod/toolbox/mesa - stun_projectile = /obj/projectile/bullet/c9mm/rubber - lethal_projectile = /obj/projectile/bullet/c9mm/ap - max_integrity = 150 - req_access = list(ACCESS_AWAY_SEC) - faction = list(FACTION_HECU) - shot_delay = 0.25 - ignore_faction = TRUE - - -/obj/machinery/porta_turret/black_mesa/friendly - faction = list(FACTION_STATION) diff --git a/modular_nova/modules/black_mesa/code/uber_teleporter.dm b/modular_nova/modules/black_mesa/code/uber_teleporter.dm deleted file mode 100644 index 32b87379875..00000000000 --- a/modular_nova/modules/black_mesa/code/uber_teleporter.dm +++ /dev/null @@ -1,48 +0,0 @@ -/obj/item/uber_teleporter - name = "\improper Nihilanth's Divinity" - desc = "It glows harshly, the power of a portal wielding monster lays within." - icon = 'modular_nova/modules/black_mesa/icons/plants.dmi' - icon_state = "crystal_pylon" - -/obj/item/uber_teleporter/attack_self(mob/living/user, modifiers) - . = ..() - playsound(get_turf(user), 'sound/weapons/zapbang.ogg', 50, TRUE) - var/area/area_to_teleport_to = tgui_input_list(usr, "Area to teleport to", "Teleport", GLOB.teleportlocs) - if(!area_to_teleport_to) - return - - var/area/teleport_area = GLOB.teleportlocs[area_to_teleport_to] - - var/list/possible_turfs = list() - for(var/turf/iterating_turf in get_area_turfs(teleport_area.type)) - if(!iterating_turf.density) - var/clear = TRUE - for(var/obj/iterating_object in iterating_turf) - if(iterating_object.density) - clear = FALSE - break - if(clear) - possible_turfs += iterating_turf - - if(!LAZYLEN(possible_turfs)) - to_chat(user, span_warning("The spell matrix was unable to locate a suitable teleport destination for an unknown reason. Sorry.")) - return - - if(user.buckled) - user.buckled.unbuckle_mob(user, force=1) - - var/list/temp_turfs = possible_turfs - var/attempt = null - var/success = FALSE - while(length(temp_turfs)) - attempt = pick(temp_turfs) - do_teleport(user, attempt, channel = TELEPORT_CHANNEL_FREE) - if(get_turf(user) == attempt) - success = TRUE - break - else - temp_turfs.Remove(attempt) - - if(!success) - do_teleport(user, possible_turfs, channel = TELEPORT_CHANNEL_FREE) - playsound(get_turf(user), 'sound/weapons/zapbang.ogg', 50, TRUE) diff --git a/modular_nova/modules/black_mesa/code/weapons.dm b/modular_nova/modules/black_mesa/code/weapons.dm deleted file mode 100644 index 4c96daa2890..00000000000 --- a/modular_nova/modules/black_mesa/code/weapons.dm +++ /dev/null @@ -1,56 +0,0 @@ -/obj/item/crowbar/freeman - name = "blood soaked crowbar" - desc = "A heavy handed crowbar, it drips with blood." - icon = 'modular_nova/modules/awaymissions_nova/icons/freeman.dmi' - icon_state = "crowbar" - force = 35 - throwforce = 45 - toolspeed = 0.1 - wound_bonus = 10 - hitsound = 'modular_nova/master_files/sound/weapons/crowbar2.ogg' - mob_throw_hit_sound = 'modular_nova/master_files/sound/weapons/crowbar2.ogg' - force_opens = TRUE - -/obj/item/crowbar/freeman/ultimate - name = "\improper Freeman's crowbar" - desc = "A weapon wielded by an ancient physicist, the blood of hundreds seeps through this rod of iron and malice." - force = 45 - -/obj/item/crowbar/freeman/ultimate/Initialize(mapload) - . = ..() - add_filter("rad_glow", 2, list("type" = "outline", "color" = "#fbff1479", "size" = 2)) - -/obj/item/shield/riot/pointman/hecu - name = "ballistic shield" - desc = "A shield fit for those that want to sprint headfirst into the unknown! Cumbersome as hell. Repair with iron." - icon_state = "ballistic" - icon = 'modular_nova/modules/awaymissions_nova/icons/ballistic.dmi' - worn_icon_state = "ballistic_worn" - worn_icon = 'modular_nova/modules/awaymissions_nova/icons/ballistic.dmi' - inhand_icon_state = "ballistic" - lefthand_file = 'modular_nova/modules/awaymissions_nova/icons/ballistic_l.dmi' - righthand_file = 'modular_nova/modules/awaymissions_nova/icons/ballistic_r.dmi' - force = 14 - throwforce = 5 - throw_speed = 1 - throw_range = 1 - block_chance = 45 - slot_flags = ITEM_SLOT_BACK - w_class = WEIGHT_CLASS_BULKY - attack_verb_continuous = list("shoves", "bashes") - attack_verb_simple = list("shove", "bash") - transparent = TRUE - max_integrity = 150 - repairable_by = /obj/item/stack/sheet/iron //what to repair the shield with - - -/obj/item/shield/riot/pointman/hecu/shatter(mob/living/carbon/human/owner) - playsound(owner, 'sound/effects/glassbr3.ogg', 100) - new /obj/item/ballistic_broken((get_turf(src))) - -/obj/item/ballistic_broken - name = "broken ballistic shield" - desc = "An unsalvageable, unrecoverable mess of armor steel and kevlar. Should've maintained it, huh?" - icon_state = "ballistic_broken" - icon = 'modular_nova/modules/awaymissions_nova/icons/ballistic.dmi' - w_class = WEIGHT_CLASS_BULKY diff --git a/modular_nova/modules/black_mesa/code/xen_crystal.dm b/modular_nova/modules/black_mesa/code/xen_crystal.dm deleted file mode 100644 index cdc08c39154..00000000000 --- a/modular_nova/modules/black_mesa/code/xen_crystal.dm +++ /dev/null @@ -1,72 +0,0 @@ -/obj/structure/xen_crystal - name = "resonating crystal" - desc = "A strange resinating crystal." - icon = 'modular_nova/modules/black_mesa/icons/plants.dmi' - icon_state = "crystal" - light_power = 2 - light_range = 4 - density = TRUE - anchored = TRUE - /// Have we been harvested? - var/harvested = FALSE - -/obj/structure/xen_crystal/Initialize(mapload) - . = ..() - var/color_to_set = pick(COLOR_VIBRANT_LIME, COLOR_VIVID_YELLOW, COLOR_LIGHT_PINK, LIGHT_COLOR_ELECTRIC_GREEN) - color = color_to_set - light_color = color_to_set - -/obj/structure/xen_crystal/attack_hand(mob/living/user, list/modifiers) - . = ..() - if(harvested) - to_chat(user, span_warning("[src] has already been harvested!")) - return - to_chat(user, span_notice("You start harvesting [src]!")) - if(do_after(user, 5 SECONDS, src)) - harvest(user) - -/obj/structure/xen_crystal/proc/harvest(mob/living/user) - if(harvested) - return - to_chat(user, span_notice("You harvest [src]!")) - var/obj/item/grenade/xen_crystal/nade = new (get_turf(src)) - nade.color = color - harvested = TRUE - update_appearance() - -/obj/structure/xen_crystal/update_icon_state() - . = ..() - if(harvested) - icon_state = "crystal_harvested" - else - icon_state = "crystal" - -/obj/item/grenade/xen_crystal - name = "xen crystal" - desc = "A crystal with anomalous properties." - icon = 'modular_nova/modules/black_mesa/icons/plants.dmi' - icon_state = "crystal_grenade" - /// What range do we effect mobs? - var/effect_range = 6 - /// The faction we convert the mobs to - var/factions = list(FACTION_STATION, "neutral") - /// Mobs in this list will not be affected by this grenade. - var/list/blacklisted_mobs = list( - /mob/living/simple_animal/hostile/blackmesa/xen/headcrab_zombie/gordon_freeman, - /mob/living/simple_animal/hostile/blackmesa/xen/nihilanth, - ) - -/obj/item/grenade/xen_crystal/detonate(mob/living/lanced_by) - for(var/mob/living/mob_to_neutralize in view(src, effect_range)) - if(is_type_in_list(mob_to_neutralize, blacklisted_mobs)) - return - mob_to_neutralize.faction |= factions - mob_to_neutralize.visible_message(span_green("[mob_to_neutralize] is overcome by a wave of peace and tranquility!")) - new /obj/effect/particle_effect/sparks/quantum(get_turf(mob_to_neutralize)) - qdel(src) - -/datum/export/xen_crystal - cost = CARGO_CRATE_VALUE * 6 //1200 - unit_name = "anomalous crystal sample" - export_types = list(/obj/item/grenade/xen_crystal) - include_subtypes = FALSE diff --git a/modular_nova/modules/black_mesa/icons/mapping_helpers.dmi b/modular_nova/modules/black_mesa/icons/mapping_helpers.dmi deleted file mode 100644 index 50a71680c64..00000000000 Binary files a/modular_nova/modules/black_mesa/icons/mapping_helpers.dmi and /dev/null differ diff --git a/modular_nova/modules/black_mesa/icons/mobs.dmi b/modular_nova/modules/black_mesa/icons/mobs.dmi deleted file mode 100644 index 6a29b8cbc13..00000000000 Binary files a/modular_nova/modules/black_mesa/icons/mobs.dmi and /dev/null differ diff --git a/modular_nova/modules/black_mesa/icons/nihilanth.dmi b/modular_nova/modules/black_mesa/icons/nihilanth.dmi deleted file mode 100644 index 5e1c2ad3f0a..00000000000 Binary files a/modular_nova/modules/black_mesa/icons/nihilanth.dmi and /dev/null differ diff --git a/modular_nova/modules/black_mesa/icons/plants.dmi b/modular_nova/modules/black_mesa/icons/plants.dmi deleted file mode 100644 index 74bb1ae1d96..00000000000 Binary files a/modular_nova/modules/black_mesa/icons/plants.dmi and /dev/null differ diff --git a/modular_nova/modules/black_mesa/icons/structures.dmi b/modular_nova/modules/black_mesa/icons/structures.dmi deleted file mode 100644 index 9e693403536..00000000000 Binary files a/modular_nova/modules/black_mesa/icons/structures.dmi and /dev/null differ diff --git a/modular_nova/modules/black_mesa/icons/structures/dmi b/modular_nova/modules/black_mesa/icons/structures/dmi deleted file mode 100644 index e69de29bb2d..00000000000 diff --git a/modular_nova/modules/black_mesa/icons/xen_door.dmi b/modular_nova/modules/black_mesa/icons/xen_door.dmi deleted file mode 100644 index 2d6660dc84d..00000000000 Binary files a/modular_nova/modules/black_mesa/icons/xen_door.dmi and /dev/null differ diff --git a/modular_nova/modules/black_mesa/icons/xen_turfs.dmi b/modular_nova/modules/black_mesa/icons/xen_turfs.dmi deleted file mode 100644 index 1ab327c3202..00000000000 Binary files a/modular_nova/modules/black_mesa/icons/xen_turfs.dmi and /dev/null differ diff --git a/modular_nova/modules/black_mesa/sound/downtoBLUE.ogg b/modular_nova/modules/black_mesa/sound/downtoBLUE.ogg deleted file mode 100644 index a3ba1ba27b6..00000000000 Binary files a/modular_nova/modules/black_mesa/sound/downtoBLUE.ogg and /dev/null differ diff --git a/modular_nova/modules/black_mesa/sound/explosions/explode1.ogg b/modular_nova/modules/black_mesa/sound/explosions/explode1.ogg deleted file mode 100644 index 44ba4160d61..00000000000 Binary files a/modular_nova/modules/black_mesa/sound/explosions/explode1.ogg and /dev/null differ diff --git a/modular_nova/modules/black_mesa/sound/explosions/explode2.ogg b/modular_nova/modules/black_mesa/sound/explosions/explode2.ogg deleted file mode 100644 index 1811254cd92..00000000000 Binary files a/modular_nova/modules/black_mesa/sound/explosions/explode2.ogg and /dev/null differ diff --git a/modular_nova/modules/black_mesa/sound/explosions/explode3.ogg b/modular_nova/modules/black_mesa/sound/explosions/explode3.ogg deleted file mode 100644 index e4ccc2b62da..00000000000 Binary files a/modular_nova/modules/black_mesa/sound/explosions/explode3.ogg and /dev/null differ diff --git a/modular_nova/modules/black_mesa/sound/explosions/explode4.ogg b/modular_nova/modules/black_mesa/sound/explosions/explode4.ogg deleted file mode 100644 index 2afe902e7f7..00000000000 Binary files a/modular_nova/modules/black_mesa/sound/explosions/explode4.ogg and /dev/null differ diff --git a/modular_nova/modules/black_mesa/sound/explosions/explode5.ogg b/modular_nova/modules/black_mesa/sound/explosions/explode5.ogg deleted file mode 100644 index 59d498eb302..00000000000 Binary files a/modular_nova/modules/black_mesa/sound/explosions/explode5.ogg and /dev/null differ diff --git a/modular_nova/modules/black_mesa/sound/explosions/explode6.ogg b/modular_nova/modules/black_mesa/sound/explosions/explode6.ogg deleted file mode 100644 index 980bce2e46f..00000000000 Binary files a/modular_nova/modules/black_mesa/sound/explosions/explode6.ogg and /dev/null differ diff --git a/modular_nova/modules/black_mesa/sound/explosions/explode7.ogg b/modular_nova/modules/black_mesa/sound/explosions/explode7.ogg deleted file mode 100644 index c3853097f0b..00000000000 Binary files a/modular_nova/modules/black_mesa/sound/explosions/explode7.ogg and /dev/null differ diff --git a/modular_nova/modules/black_mesa/sound/lc_mainbeam.ogg b/modular_nova/modules/black_mesa/sound/lc_mainbeam.ogg deleted file mode 100644 index 796d7578c4d..00000000000 Binary files a/modular_nova/modules/black_mesa/sound/lc_mainbeam.ogg and /dev/null differ diff --git a/modular_nova/modules/black_mesa/sound/lc_teleport.ogg b/modular_nova/modules/black_mesa/sound/lc_teleport.ogg deleted file mode 100644 index 2eb79c1294f..00000000000 Binary files a/modular_nova/modules/black_mesa/sound/lc_teleport.ogg and /dev/null differ diff --git a/modular_nova/modules/black_mesa/sound/mobs/blackops/bo_alert01.ogg b/modular_nova/modules/black_mesa/sound/mobs/blackops/bo_alert01.ogg deleted file mode 100644 index 3c78711e997..00000000000 Binary files a/modular_nova/modules/black_mesa/sound/mobs/blackops/bo_alert01.ogg and /dev/null differ diff --git a/modular_nova/modules/black_mesa/sound/mobs/blackops/bo_alert02.ogg b/modular_nova/modules/black_mesa/sound/mobs/blackops/bo_alert02.ogg deleted file mode 100644 index 59ac0855acf..00000000000 Binary files a/modular_nova/modules/black_mesa/sound/mobs/blackops/bo_alert02.ogg and /dev/null differ diff --git a/modular_nova/modules/black_mesa/sound/mobs/blackops/bo_alert03.ogg b/modular_nova/modules/black_mesa/sound/mobs/blackops/bo_alert03.ogg deleted file mode 100644 index 03dc8a3e5db..00000000000 Binary files a/modular_nova/modules/black_mesa/sound/mobs/blackops/bo_alert03.ogg and /dev/null differ diff --git a/modular_nova/modules/black_mesa/sound/mobs/blackops/bo_alert04.ogg b/modular_nova/modules/black_mesa/sound/mobs/blackops/bo_alert04.ogg deleted file mode 100644 index 033d0eb9517..00000000000 Binary files a/modular_nova/modules/black_mesa/sound/mobs/blackops/bo_alert04.ogg and /dev/null differ diff --git a/modular_nova/modules/black_mesa/sound/mobs/blackops/bo_alert05.ogg b/modular_nova/modules/black_mesa/sound/mobs/blackops/bo_alert05.ogg deleted file mode 100644 index 8de1dbca94e..00000000000 Binary files a/modular_nova/modules/black_mesa/sound/mobs/blackops/bo_alert05.ogg and /dev/null differ diff --git a/modular_nova/modules/black_mesa/sound/mobs/blackops/bo_alert06.ogg b/modular_nova/modules/black_mesa/sound/mobs/blackops/bo_alert06.ogg deleted file mode 100644 index 150b0883ed1..00000000000 Binary files a/modular_nova/modules/black_mesa/sound/mobs/blackops/bo_alert06.ogg and /dev/null differ diff --git a/modular_nova/modules/black_mesa/sound/mobs/blackops/bo_alert07.ogg b/modular_nova/modules/black_mesa/sound/mobs/blackops/bo_alert07.ogg deleted file mode 100644 index ef6122434fd..00000000000 Binary files a/modular_nova/modules/black_mesa/sound/mobs/blackops/bo_alert07.ogg and /dev/null differ diff --git a/modular_nova/modules/black_mesa/sound/mobs/blackops/bo_alert08.ogg b/modular_nova/modules/black_mesa/sound/mobs/blackops/bo_alert08.ogg deleted file mode 100644 index 2e1ccbedbf7..00000000000 Binary files a/modular_nova/modules/black_mesa/sound/mobs/blackops/bo_alert08.ogg and /dev/null differ diff --git a/modular_nova/modules/black_mesa/sound/mobs/bullsquid/attack1.ogg b/modular_nova/modules/black_mesa/sound/mobs/bullsquid/attack1.ogg deleted file mode 100644 index 203d5797add..00000000000 Binary files a/modular_nova/modules/black_mesa/sound/mobs/bullsquid/attack1.ogg and /dev/null differ diff --git a/modular_nova/modules/black_mesa/sound/mobs/bullsquid/detect1.ogg b/modular_nova/modules/black_mesa/sound/mobs/bullsquid/detect1.ogg deleted file mode 100644 index c8adcf52cd7..00000000000 Binary files a/modular_nova/modules/black_mesa/sound/mobs/bullsquid/detect1.ogg and /dev/null differ diff --git a/modular_nova/modules/black_mesa/sound/mobs/bullsquid/detect2.ogg b/modular_nova/modules/black_mesa/sound/mobs/bullsquid/detect2.ogg deleted file mode 100644 index 833b58b594d..00000000000 Binary files a/modular_nova/modules/black_mesa/sound/mobs/bullsquid/detect2.ogg and /dev/null differ diff --git a/modular_nova/modules/black_mesa/sound/mobs/bullsquid/detect3.ogg b/modular_nova/modules/black_mesa/sound/mobs/bullsquid/detect3.ogg deleted file mode 100644 index 67b2d74d13e..00000000000 Binary files a/modular_nova/modules/black_mesa/sound/mobs/bullsquid/detect3.ogg and /dev/null differ diff --git a/modular_nova/modules/black_mesa/sound/mobs/bullsquid/goo_attack3.ogg b/modular_nova/modules/black_mesa/sound/mobs/bullsquid/goo_attack3.ogg deleted file mode 100644 index 2e170a39b06..00000000000 Binary files a/modular_nova/modules/black_mesa/sound/mobs/bullsquid/goo_attack3.ogg and /dev/null differ diff --git a/modular_nova/modules/black_mesa/sound/mobs/bullsquid/splat1.ogg b/modular_nova/modules/black_mesa/sound/mobs/bullsquid/splat1.ogg deleted file mode 100644 index 19fbb1a6026..00000000000 Binary files a/modular_nova/modules/black_mesa/sound/mobs/bullsquid/splat1.ogg and /dev/null differ diff --git a/modular_nova/modules/black_mesa/sound/mobs/headcrab/alert1.ogg b/modular_nova/modules/black_mesa/sound/mobs/headcrab/alert1.ogg deleted file mode 100644 index a6d6fd17865..00000000000 Binary files a/modular_nova/modules/black_mesa/sound/mobs/headcrab/alert1.ogg and /dev/null differ diff --git a/modular_nova/modules/black_mesa/sound/mobs/headcrab/attack1.ogg b/modular_nova/modules/black_mesa/sound/mobs/headcrab/attack1.ogg deleted file mode 100644 index 526428f7659..00000000000 Binary files a/modular_nova/modules/black_mesa/sound/mobs/headcrab/attack1.ogg and /dev/null differ diff --git a/modular_nova/modules/black_mesa/sound/mobs/headcrab/attack2.ogg b/modular_nova/modules/black_mesa/sound/mobs/headcrab/attack2.ogg deleted file mode 100644 index 6f6a0b9603b..00000000000 Binary files a/modular_nova/modules/black_mesa/sound/mobs/headcrab/attack2.ogg and /dev/null differ diff --git a/modular_nova/modules/black_mesa/sound/mobs/headcrab/attack3.ogg b/modular_nova/modules/black_mesa/sound/mobs/headcrab/attack3.ogg deleted file mode 100644 index 480dbe24df0..00000000000 Binary files a/modular_nova/modules/black_mesa/sound/mobs/headcrab/attack3.ogg and /dev/null differ diff --git a/modular_nova/modules/black_mesa/sound/mobs/headcrab/die1.ogg b/modular_nova/modules/black_mesa/sound/mobs/headcrab/die1.ogg deleted file mode 100644 index 5765a5b3d7a..00000000000 Binary files a/modular_nova/modules/black_mesa/sound/mobs/headcrab/die1.ogg and /dev/null differ diff --git a/modular_nova/modules/black_mesa/sound/mobs/headcrab/die2.ogg b/modular_nova/modules/black_mesa/sound/mobs/headcrab/die2.ogg deleted file mode 100644 index 5de82f5d890..00000000000 Binary files a/modular_nova/modules/black_mesa/sound/mobs/headcrab/die2.ogg and /dev/null differ diff --git a/modular_nova/modules/black_mesa/sound/mobs/headcrab/headbite.ogg b/modular_nova/modules/black_mesa/sound/mobs/headcrab/headbite.ogg deleted file mode 100644 index 60abc628f61..00000000000 Binary files a/modular_nova/modules/black_mesa/sound/mobs/headcrab/headbite.ogg and /dev/null differ diff --git a/modular_nova/modules/black_mesa/sound/mobs/hecu/hg_alert01.ogg b/modular_nova/modules/black_mesa/sound/mobs/hecu/hg_alert01.ogg deleted file mode 100644 index 3734653c001..00000000000 Binary files a/modular_nova/modules/black_mesa/sound/mobs/hecu/hg_alert01.ogg and /dev/null differ diff --git a/modular_nova/modules/black_mesa/sound/mobs/hecu/hg_alert03.ogg b/modular_nova/modules/black_mesa/sound/mobs/hecu/hg_alert03.ogg deleted file mode 100644 index 59a5f856458..00000000000 Binary files a/modular_nova/modules/black_mesa/sound/mobs/hecu/hg_alert03.ogg and /dev/null differ diff --git a/modular_nova/modules/black_mesa/sound/mobs/hecu/hg_alert04.ogg b/modular_nova/modules/black_mesa/sound/mobs/hecu/hg_alert04.ogg deleted file mode 100644 index 5cbffe0bd5e..00000000000 Binary files a/modular_nova/modules/black_mesa/sound/mobs/hecu/hg_alert04.ogg and /dev/null differ diff --git a/modular_nova/modules/black_mesa/sound/mobs/hecu/hg_alert05.ogg b/modular_nova/modules/black_mesa/sound/mobs/hecu/hg_alert05.ogg deleted file mode 100644 index 8a6d0be7e1c..00000000000 Binary files a/modular_nova/modules/black_mesa/sound/mobs/hecu/hg_alert05.ogg and /dev/null differ diff --git a/modular_nova/modules/black_mesa/sound/mobs/hecu/hg_alert06.ogg b/modular_nova/modules/black_mesa/sound/mobs/hecu/hg_alert06.ogg deleted file mode 100644 index 70c21b7fe0e..00000000000 Binary files a/modular_nova/modules/black_mesa/sound/mobs/hecu/hg_alert06.ogg and /dev/null differ diff --git a/modular_nova/modules/black_mesa/sound/mobs/hecu/hg_alert07.ogg b/modular_nova/modules/black_mesa/sound/mobs/hecu/hg_alert07.ogg deleted file mode 100644 index 68d201eacf7..00000000000 Binary files a/modular_nova/modules/black_mesa/sound/mobs/hecu/hg_alert07.ogg and /dev/null differ diff --git a/modular_nova/modules/black_mesa/sound/mobs/hecu/hg_alert08.ogg b/modular_nova/modules/black_mesa/sound/mobs/hecu/hg_alert08.ogg deleted file mode 100644 index 8067cb009cc..00000000000 Binary files a/modular_nova/modules/black_mesa/sound/mobs/hecu/hg_alert08.ogg and /dev/null differ diff --git a/modular_nova/modules/black_mesa/sound/mobs/hecu/hg_alert10.ogg b/modular_nova/modules/black_mesa/sound/mobs/hecu/hg_alert10.ogg deleted file mode 100644 index bf20c20e6b1..00000000000 Binary files a/modular_nova/modules/black_mesa/sound/mobs/hecu/hg_alert10.ogg and /dev/null differ diff --git a/modular_nova/modules/black_mesa/sound/mobs/houndeye/charge1.ogg b/modular_nova/modules/black_mesa/sound/mobs/houndeye/charge1.ogg deleted file mode 100644 index 889f66c3b92..00000000000 Binary files a/modular_nova/modules/black_mesa/sound/mobs/houndeye/charge1.ogg and /dev/null differ diff --git a/modular_nova/modules/black_mesa/sound/mobs/houndeye/charge2.ogg b/modular_nova/modules/black_mesa/sound/mobs/houndeye/charge2.ogg deleted file mode 100644 index 42f92984a6b..00000000000 Binary files a/modular_nova/modules/black_mesa/sound/mobs/houndeye/charge2.ogg and /dev/null differ diff --git a/modular_nova/modules/black_mesa/sound/mobs/houndeye/charge3.ogg b/modular_nova/modules/black_mesa/sound/mobs/houndeye/charge3.ogg deleted file mode 100644 index 3df3f480651..00000000000 Binary files a/modular_nova/modules/black_mesa/sound/mobs/houndeye/charge3.ogg and /dev/null differ diff --git a/modular_nova/modules/black_mesa/sound/mobs/houndeye/he_alert1.ogg b/modular_nova/modules/black_mesa/sound/mobs/houndeye/he_alert1.ogg deleted file mode 100644 index b0e3ae24444..00000000000 Binary files a/modular_nova/modules/black_mesa/sound/mobs/houndeye/he_alert1.ogg and /dev/null differ diff --git a/modular_nova/modules/black_mesa/sound/mobs/houndeye/he_alert2.ogg b/modular_nova/modules/black_mesa/sound/mobs/houndeye/he_alert2.ogg deleted file mode 100644 index 2e29531d28c..00000000000 Binary files a/modular_nova/modules/black_mesa/sound/mobs/houndeye/he_alert2.ogg and /dev/null differ diff --git a/modular_nova/modules/black_mesa/sound/mobs/houndeye/he_alert3.ogg b/modular_nova/modules/black_mesa/sound/mobs/houndeye/he_alert3.ogg deleted file mode 100644 index b9eefe84c28..00000000000 Binary files a/modular_nova/modules/black_mesa/sound/mobs/houndeye/he_alert3.ogg and /dev/null differ diff --git a/modular_nova/modules/black_mesa/sound/mobs/houndeye/he_alert4.ogg b/modular_nova/modules/black_mesa/sound/mobs/houndeye/he_alert4.ogg deleted file mode 100644 index 8339f5c898f..00000000000 Binary files a/modular_nova/modules/black_mesa/sound/mobs/houndeye/he_alert4.ogg and /dev/null differ diff --git a/modular_nova/modules/black_mesa/sound/mobs/houndeye/he_alert5.ogg b/modular_nova/modules/black_mesa/sound/mobs/houndeye/he_alert5.ogg deleted file mode 100644 index 01cadd89b97..00000000000 Binary files a/modular_nova/modules/black_mesa/sound/mobs/houndeye/he_alert5.ogg and /dev/null differ diff --git a/modular_nova/modules/black_mesa/sound/mobs/nihilanth/nihilanth_death01.ogg b/modular_nova/modules/black_mesa/sound/mobs/nihilanth/nihilanth_death01.ogg deleted file mode 100644 index cb599e42927..00000000000 Binary files a/modular_nova/modules/black_mesa/sound/mobs/nihilanth/nihilanth_death01.ogg and /dev/null differ diff --git a/modular_nova/modules/black_mesa/sound/mobs/nihilanth/nihilanth_deceiveyou01.ogg b/modular_nova/modules/black_mesa/sound/mobs/nihilanth/nihilanth_deceiveyou01.ogg deleted file mode 100644 index 84913bd113d..00000000000 Binary files a/modular_nova/modules/black_mesa/sound/mobs/nihilanth/nihilanth_deceiveyou01.ogg and /dev/null differ diff --git a/modular_nova/modules/black_mesa/sound/mobs/nihilanth/nihilanth_foryouhewaits01.ogg b/modular_nova/modules/black_mesa/sound/mobs/nihilanth/nihilanth_foryouhewaits01.ogg deleted file mode 100644 index 863e523b4a4..00000000000 Binary files a/modular_nova/modules/black_mesa/sound/mobs/nihilanth/nihilanth_foryouhewaits01.ogg and /dev/null differ diff --git a/modular_nova/modules/black_mesa/sound/mobs/nihilanth/nihilanth_freeeemmaan01.ogg b/modular_nova/modules/black_mesa/sound/mobs/nihilanth/nihilanth_freeeemmaan01.ogg deleted file mode 100644 index 988842c04c6..00000000000 Binary files a/modular_nova/modules/black_mesa/sound/mobs/nihilanth/nihilanth_freeeemmaan01.ogg and /dev/null differ diff --git a/modular_nova/modules/black_mesa/sound/mobs/nihilanth/nihilanth_iamthelast01.ogg b/modular_nova/modules/black_mesa/sound/mobs/nihilanth/nihilanth_iamthelast01.ogg deleted file mode 100644 index ffcae5c7774..00000000000 Binary files a/modular_nova/modules/black_mesa/sound/mobs/nihilanth/nihilanth_iamthelast01.ogg and /dev/null differ diff --git a/modular_nova/modules/black_mesa/sound/mobs/nihilanth/nihilanth_pain01.ogg b/modular_nova/modules/black_mesa/sound/mobs/nihilanth/nihilanth_pain01.ogg deleted file mode 100644 index 0e8df1aa5b8..00000000000 Binary files a/modular_nova/modules/black_mesa/sound/mobs/nihilanth/nihilanth_pain01.ogg and /dev/null differ diff --git a/modular_nova/modules/black_mesa/sound/mobs/nihilanth/nihilanth_thetruth01.ogg b/modular_nova/modules/black_mesa/sound/mobs/nihilanth/nihilanth_thetruth01.ogg deleted file mode 100644 index 89af97787e0..00000000000 Binary files a/modular_nova/modules/black_mesa/sound/mobs/nihilanth/nihilanth_thetruth01.ogg and /dev/null differ diff --git a/modular_nova/modules/black_mesa/sound/mobs/nihilanth/nihilanth_whathavedone01.ogg b/modular_nova/modules/black_mesa/sound/mobs/nihilanth/nihilanth_whathavedone01.ogg deleted file mode 100644 index b36451a233b..00000000000 Binary files a/modular_nova/modules/black_mesa/sound/mobs/nihilanth/nihilanth_whathavedone01.ogg and /dev/null differ diff --git a/modular_nova/modules/black_mesa/sound/mobs/nihilanth/nihilanth_youalldie01.ogg b/modular_nova/modules/black_mesa/sound/mobs/nihilanth/nihilanth_youalldie01.ogg deleted file mode 100644 index 6dfca973c20..00000000000 Binary files a/modular_nova/modules/black_mesa/sound/mobs/nihilanth/nihilanth_youalldie01.ogg and /dev/null differ diff --git a/modular_nova/modules/black_mesa/sound/mobs/security_guard/annoyance01.ogg b/modular_nova/modules/black_mesa/sound/mobs/security_guard/annoyance01.ogg deleted file mode 100644 index 602d5673a6d..00000000000 Binary files a/modular_nova/modules/black_mesa/sound/mobs/security_guard/annoyance01.ogg and /dev/null differ diff --git a/modular_nova/modules/black_mesa/sound/mobs/security_guard/annoyance02.ogg b/modular_nova/modules/black_mesa/sound/mobs/security_guard/annoyance02.ogg deleted file mode 100644 index 7b644dd6848..00000000000 Binary files a/modular_nova/modules/black_mesa/sound/mobs/security_guard/annoyance02.ogg and /dev/null differ diff --git a/modular_nova/modules/black_mesa/sound/mobs/security_guard/annoyance03.ogg b/modular_nova/modules/black_mesa/sound/mobs/security_guard/annoyance03.ogg deleted file mode 100644 index 731500a7372..00000000000 Binary files a/modular_nova/modules/black_mesa/sound/mobs/security_guard/annoyance03.ogg and /dev/null differ diff --git a/modular_nova/modules/black_mesa/sound/mobs/security_guard/annoyance04.ogg b/modular_nova/modules/black_mesa/sound/mobs/security_guard/annoyance04.ogg deleted file mode 100644 index 6b82a000f03..00000000000 Binary files a/modular_nova/modules/black_mesa/sound/mobs/security_guard/annoyance04.ogg and /dev/null differ diff --git a/modular_nova/modules/black_mesa/sound/mobs/security_guard/annoyance05.ogg b/modular_nova/modules/black_mesa/sound/mobs/security_guard/annoyance05.ogg deleted file mode 100644 index 3edd57fa0e9..00000000000 Binary files a/modular_nova/modules/black_mesa/sound/mobs/security_guard/annoyance05.ogg and /dev/null differ diff --git a/modular_nova/modules/black_mesa/sound/mobs/security_guard/annoyance06.ogg b/modular_nova/modules/black_mesa/sound/mobs/security_guard/annoyance06.ogg deleted file mode 100644 index 17d31399095..00000000000 Binary files a/modular_nova/modules/black_mesa/sound/mobs/security_guard/annoyance06.ogg and /dev/null differ diff --git a/modular_nova/modules/black_mesa/sound/mobs/security_guard/annoyance07.ogg b/modular_nova/modules/black_mesa/sound/mobs/security_guard/annoyance07.ogg deleted file mode 100644 index 99af157c952..00000000000 Binary files a/modular_nova/modules/black_mesa/sound/mobs/security_guard/annoyance07.ogg and /dev/null differ diff --git a/modular_nova/modules/black_mesa/sound/mobs/security_guard/annoyance08.ogg b/modular_nova/modules/black_mesa/sound/mobs/security_guard/annoyance08.ogg deleted file mode 100644 index 5bfa8376d8b..00000000000 Binary files a/modular_nova/modules/black_mesa/sound/mobs/security_guard/annoyance08.ogg and /dev/null differ diff --git a/modular_nova/modules/black_mesa/sound/mobs/security_guard/annoyance09.ogg b/modular_nova/modules/black_mesa/sound/mobs/security_guard/annoyance09.ogg deleted file mode 100644 index 96827c44738..00000000000 Binary files a/modular_nova/modules/black_mesa/sound/mobs/security_guard/annoyance09.ogg and /dev/null differ diff --git a/modular_nova/modules/black_mesa/sound/mobs/security_guard/annoyance10.ogg b/modular_nova/modules/black_mesa/sound/mobs/security_guard/annoyance10.ogg deleted file mode 100644 index e6fa2a5d2fd..00000000000 Binary files a/modular_nova/modules/black_mesa/sound/mobs/security_guard/annoyance10.ogg and /dev/null differ diff --git a/modular_nova/modules/black_mesa/sound/mobs/security_guard/holddownspot01.ogg b/modular_nova/modules/black_mesa/sound/mobs/security_guard/holddownspot01.ogg deleted file mode 100644 index 2cf9aee0d90..00000000000 Binary files a/modular_nova/modules/black_mesa/sound/mobs/security_guard/holddownspot01.ogg and /dev/null differ diff --git a/modular_nova/modules/black_mesa/sound/mobs/security_guard/holddownspot02.ogg b/modular_nova/modules/black_mesa/sound/mobs/security_guard/holddownspot02.ogg deleted file mode 100644 index 733d3a1d81c..00000000000 Binary files a/modular_nova/modules/black_mesa/sound/mobs/security_guard/holddownspot02.ogg and /dev/null differ diff --git a/modular_nova/modules/black_mesa/sound/mobs/security_guard/holddownspot03.ogg b/modular_nova/modules/black_mesa/sound/mobs/security_guard/holddownspot03.ogg deleted file mode 100644 index 5bb72e590d9..00000000000 Binary files a/modular_nova/modules/black_mesa/sound/mobs/security_guard/holddownspot03.ogg and /dev/null differ diff --git a/modular_nova/modules/black_mesa/sound/mobs/security_guard/holddownspot04.ogg b/modular_nova/modules/black_mesa/sound/mobs/security_guard/holddownspot04.ogg deleted file mode 100644 index a1dac8eea06..00000000000 Binary files a/modular_nova/modules/black_mesa/sound/mobs/security_guard/holddownspot04.ogg and /dev/null differ diff --git a/modular_nova/modules/black_mesa/sound/mobs/security_guard/holddownspot05.ogg b/modular_nova/modules/black_mesa/sound/mobs/security_guard/holddownspot05.ogg deleted file mode 100644 index a2e7cbe08eb..00000000000 Binary files a/modular_nova/modules/black_mesa/sound/mobs/security_guard/holddownspot05.ogg and /dev/null differ diff --git a/modular_nova/modules/black_mesa/sound/mobs/security_guard/illstayhere01.ogg b/modular_nova/modules/black_mesa/sound/mobs/security_guard/illstayhere01.ogg deleted file mode 100644 index aabe63664b1..00000000000 Binary files a/modular_nova/modules/black_mesa/sound/mobs/security_guard/illstayhere01.ogg and /dev/null differ diff --git a/modular_nova/modules/black_mesa/sound/mobs/security_guard/illstayhere02.ogg b/modular_nova/modules/black_mesa/sound/mobs/security_guard/illstayhere02.ogg deleted file mode 100644 index 7264bcb9538..00000000000 Binary files a/modular_nova/modules/black_mesa/sound/mobs/security_guard/illstayhere02.ogg and /dev/null differ diff --git a/modular_nova/modules/black_mesa/sound/mobs/security_guard/illstayhere03.ogg b/modular_nova/modules/black_mesa/sound/mobs/security_guard/illstayhere03.ogg deleted file mode 100644 index 9e3e28a2a15..00000000000 Binary files a/modular_nova/modules/black_mesa/sound/mobs/security_guard/illstayhere03.ogg and /dev/null differ diff --git a/modular_nova/modules/black_mesa/sound/mobs/security_guard/imstickinghere01.ogg b/modular_nova/modules/black_mesa/sound/mobs/security_guard/imstickinghere01.ogg deleted file mode 100644 index 110a924aefb..00000000000 Binary files a/modular_nova/modules/black_mesa/sound/mobs/security_guard/imstickinghere01.ogg and /dev/null differ diff --git a/modular_nova/modules/black_mesa/sound/mobs/security_guard/imstickinghere02.ogg b/modular_nova/modules/black_mesa/sound/mobs/security_guard/imstickinghere02.ogg deleted file mode 100644 index b5fd456c0b0..00000000000 Binary files a/modular_nova/modules/black_mesa/sound/mobs/security_guard/imstickinghere02.ogg and /dev/null differ diff --git a/modular_nova/modules/black_mesa/sound/mobs/security_guard/imstickinghere03.ogg b/modular_nova/modules/black_mesa/sound/mobs/security_guard/imstickinghere03.ogg deleted file mode 100644 index 3c4fde3aef4..00000000000 Binary files a/modular_nova/modules/black_mesa/sound/mobs/security_guard/imstickinghere03.ogg and /dev/null differ diff --git a/modular_nova/modules/black_mesa/sound/mobs/security_guard/imstickinghere04.ogg b/modular_nova/modules/black_mesa/sound/mobs/security_guard/imstickinghere04.ogg deleted file mode 100644 index e3ed7bcc6ec..00000000000 Binary files a/modular_nova/modules/black_mesa/sound/mobs/security_guard/imstickinghere04.ogg and /dev/null differ diff --git a/modular_nova/modules/black_mesa/sound/mobs/security_guard/imstickinghere05.ogg b/modular_nova/modules/black_mesa/sound/mobs/security_guard/imstickinghere05.ogg deleted file mode 100644 index fb4d28264fc..00000000000 Binary files a/modular_nova/modules/black_mesa/sound/mobs/security_guard/imstickinghere05.ogg and /dev/null differ diff --git a/modular_nova/modules/black_mesa/sound/mobs/security_guard/leadon01.ogg b/modular_nova/modules/black_mesa/sound/mobs/security_guard/leadon01.ogg deleted file mode 100644 index 23115f64dea..00000000000 Binary files a/modular_nova/modules/black_mesa/sound/mobs/security_guard/leadon01.ogg and /dev/null differ diff --git a/modular_nova/modules/black_mesa/sound/mobs/security_guard/leadon02.ogg b/modular_nova/modules/black_mesa/sound/mobs/security_guard/leadon02.ogg deleted file mode 100644 index c6d1f7a825e..00000000000 Binary files a/modular_nova/modules/black_mesa/sound/mobs/security_guard/leadon02.ogg and /dev/null differ diff --git a/modular_nova/modules/black_mesa/sound/mobs/security_guard/leadon03.ogg b/modular_nova/modules/black_mesa/sound/mobs/security_guard/leadon03.ogg deleted file mode 100644 index 1cfb8e82438..00000000000 Binary files a/modular_nova/modules/black_mesa/sound/mobs/security_guard/leadon03.ogg and /dev/null differ diff --git a/modular_nova/modules/black_mesa/sound/mobs/security_guard/leadtheway01.ogg b/modular_nova/modules/black_mesa/sound/mobs/security_guard/leadtheway01.ogg deleted file mode 100644 index a6fa17c7855..00000000000 Binary files a/modular_nova/modules/black_mesa/sound/mobs/security_guard/leadtheway01.ogg and /dev/null differ diff --git a/modular_nova/modules/black_mesa/sound/mobs/security_guard/leadtheway02.ogg b/modular_nova/modules/black_mesa/sound/mobs/security_guard/leadtheway02.ogg deleted file mode 100644 index 2effcf7a3ca..00000000000 Binary files a/modular_nova/modules/black_mesa/sound/mobs/security_guard/leadtheway02.ogg and /dev/null differ diff --git a/modular_nova/modules/black_mesa/sound/mobs/security_guard/leadtheway03.ogg b/modular_nova/modules/black_mesa/sound/mobs/security_guard/leadtheway03.ogg deleted file mode 100644 index 62b234a48ce..00000000000 Binary files a/modular_nova/modules/black_mesa/sound/mobs/security_guard/leadtheway03.ogg and /dev/null differ diff --git a/modular_nova/modules/black_mesa/sound/mobs/security_guard/leadtheway04.ogg b/modular_nova/modules/black_mesa/sound/mobs/security_guard/leadtheway04.ogg deleted file mode 100644 index 1daade7c1e9..00000000000 Binary files a/modular_nova/modules/black_mesa/sound/mobs/security_guard/leadtheway04.ogg and /dev/null differ diff --git a/modular_nova/modules/black_mesa/sound/mobs/security_guard/leadtheway05.ogg b/modular_nova/modules/black_mesa/sound/mobs/security_guard/leadtheway05.ogg deleted file mode 100644 index c355b370ef3..00000000000 Binary files a/modular_nova/modules/black_mesa/sound/mobs/security_guard/leadtheway05.ogg and /dev/null differ diff --git a/modular_nova/modules/black_mesa/sound/mobs/security_guard/leadtheway06.ogg b/modular_nova/modules/black_mesa/sound/mobs/security_guard/leadtheway06.ogg deleted file mode 100644 index 771774ab456..00000000000 Binary files a/modular_nova/modules/black_mesa/sound/mobs/security_guard/leadtheway06.ogg and /dev/null differ diff --git a/modular_nova/modules/black_mesa/sound/mobs/security_guard/leadtheway07.ogg b/modular_nova/modules/black_mesa/sound/mobs/security_guard/leadtheway07.ogg deleted file mode 100644 index ee06eca3df8..00000000000 Binary files a/modular_nova/modules/black_mesa/sound/mobs/security_guard/leadtheway07.ogg and /dev/null differ diff --git a/modular_nova/modules/black_mesa/sound/mobs/security_guard/leadtheway08.ogg b/modular_nova/modules/black_mesa/sound/mobs/security_guard/leadtheway08.ogg deleted file mode 100644 index 4378988002d..00000000000 Binary files a/modular_nova/modules/black_mesa/sound/mobs/security_guard/leadtheway08.ogg and /dev/null differ diff --git a/modular_nova/modules/black_mesa/sound/mobs/security_guard/letsgo01.ogg b/modular_nova/modules/black_mesa/sound/mobs/security_guard/letsgo01.ogg deleted file mode 100644 index 44ccff69ca0..00000000000 Binary files a/modular_nova/modules/black_mesa/sound/mobs/security_guard/letsgo01.ogg and /dev/null differ diff --git a/modular_nova/modules/black_mesa/sound/mobs/security_guard/letsgo02.ogg b/modular_nova/modules/black_mesa/sound/mobs/security_guard/letsgo02.ogg deleted file mode 100644 index fd3ba763b1e..00000000000 Binary files a/modular_nova/modules/black_mesa/sound/mobs/security_guard/letsgo02.ogg and /dev/null differ diff --git a/modular_nova/modules/black_mesa/sound/mobs/security_guard/letsgo03.ogg b/modular_nova/modules/black_mesa/sound/mobs/security_guard/letsgo03.ogg deleted file mode 100644 index cda68c8ae6d..00000000000 Binary files a/modular_nova/modules/black_mesa/sound/mobs/security_guard/letsgo03.ogg and /dev/null differ diff --git a/modular_nova/modules/black_mesa/sound/mobs/vortigaunt/alert01.ogg b/modular_nova/modules/black_mesa/sound/mobs/vortigaunt/alert01.ogg deleted file mode 100644 index 308640afdc4..00000000000 Binary files a/modular_nova/modules/black_mesa/sound/mobs/vortigaunt/alert01.ogg and /dev/null differ diff --git a/modular_nova/modules/black_mesa/sound/mobs/vortigaunt/alert01b.ogg b/modular_nova/modules/black_mesa/sound/mobs/vortigaunt/alert01b.ogg deleted file mode 100644 index 8a70d5f9744..00000000000 Binary files a/modular_nova/modules/black_mesa/sound/mobs/vortigaunt/alert01b.ogg and /dev/null differ diff --git a/modular_nova/modules/black_mesa/sound/mobs/vortigaunt/alert02.ogg b/modular_nova/modules/black_mesa/sound/mobs/vortigaunt/alert02.ogg deleted file mode 100644 index 386bd3ea853..00000000000 Binary files a/modular_nova/modules/black_mesa/sound/mobs/vortigaunt/alert02.ogg and /dev/null differ diff --git a/modular_nova/modules/black_mesa/sound/mobs/vortigaunt/alert03.ogg b/modular_nova/modules/black_mesa/sound/mobs/vortigaunt/alert03.ogg deleted file mode 100644 index 7da21632403..00000000000 Binary files a/modular_nova/modules/black_mesa/sound/mobs/vortigaunt/alert03.ogg and /dev/null differ diff --git a/modular_nova/modules/black_mesa/sound/mobs/vortigaunt/alert04.ogg b/modular_nova/modules/black_mesa/sound/mobs/vortigaunt/alert04.ogg deleted file mode 100644 index 088bf6e5ca8..00000000000 Binary files a/modular_nova/modules/black_mesa/sound/mobs/vortigaunt/alert04.ogg and /dev/null differ diff --git a/modular_nova/modules/black_mesa/sound/mobs/vortigaunt/alert05.ogg b/modular_nova/modules/black_mesa/sound/mobs/vortigaunt/alert05.ogg deleted file mode 100644 index 02ac83126e5..00000000000 Binary files a/modular_nova/modules/black_mesa/sound/mobs/vortigaunt/alert05.ogg and /dev/null differ diff --git a/modular_nova/modules/black_mesa/sound/mobs/vortigaunt/alert06.ogg b/modular_nova/modules/black_mesa/sound/mobs/vortigaunt/alert06.ogg deleted file mode 100644 index 0b34b22b0de..00000000000 Binary files a/modular_nova/modules/black_mesa/sound/mobs/vortigaunt/alert06.ogg and /dev/null differ diff --git a/modular_nova/modules/black_mesa/sound/mobs/vortigaunt/attack_shoot1.ogg b/modular_nova/modules/black_mesa/sound/mobs/vortigaunt/attack_shoot1.ogg deleted file mode 100644 index b66a9d1ab9d..00000000000 Binary files a/modular_nova/modules/black_mesa/sound/mobs/vortigaunt/attack_shoot1.ogg and /dev/null differ diff --git a/modular_nova/modules/black_mesa/sound/mobs/vortigaunt/attack_shoot2.ogg b/modular_nova/modules/black_mesa/sound/mobs/vortigaunt/attack_shoot2.ogg deleted file mode 100644 index 6db85a2983c..00000000000 Binary files a/modular_nova/modules/black_mesa/sound/mobs/vortigaunt/attack_shoot2.ogg and /dev/null differ diff --git a/modular_nova/modules/black_mesa/sound/mobs/vortigaunt/attack_shoot3.ogg b/modular_nova/modules/black_mesa/sound/mobs/vortigaunt/attack_shoot3.ogg deleted file mode 100644 index 277737e7fa6..00000000000 Binary files a/modular_nova/modules/black_mesa/sound/mobs/vortigaunt/attack_shoot3.ogg and /dev/null differ diff --git a/modular_nova/modules/black_mesa/sound/mobs/vortigaunt/attack_shoot4.ogg b/modular_nova/modules/black_mesa/sound/mobs/vortigaunt/attack_shoot4.ogg deleted file mode 100644 index 1986c3b1301..00000000000 Binary files a/modular_nova/modules/black_mesa/sound/mobs/vortigaunt/attack_shoot4.ogg and /dev/null differ diff --git a/modular_nova/modules/black_mesa/sound/mobs/vortigaunt/attack_shoot5.ogg b/modular_nova/modules/black_mesa/sound/mobs/vortigaunt/attack_shoot5.ogg deleted file mode 100644 index a52dcd764c7..00000000000 Binary files a/modular_nova/modules/black_mesa/sound/mobs/vortigaunt/attack_shoot5.ogg and /dev/null differ diff --git a/modular_nova/modules/black_mesa/sound/mobs/vortigaunt/death01.ogg b/modular_nova/modules/black_mesa/sound/mobs/vortigaunt/death01.ogg deleted file mode 100644 index e209a1989cb..00000000000 Binary files a/modular_nova/modules/black_mesa/sound/mobs/vortigaunt/death01.ogg and /dev/null differ diff --git a/modular_nova/modules/black_mesa/sound/mobs/vortigaunt/death02.ogg b/modular_nova/modules/black_mesa/sound/mobs/vortigaunt/death02.ogg deleted file mode 100644 index 3aa9c2bd197..00000000000 Binary files a/modular_nova/modules/black_mesa/sound/mobs/vortigaunt/death02.ogg and /dev/null differ diff --git a/modular_nova/modules/black_mesa/sound/mobs/vortigaunt/death03.ogg b/modular_nova/modules/black_mesa/sound/mobs/vortigaunt/death03.ogg deleted file mode 100644 index 4acd2f3628c..00000000000 Binary files a/modular_nova/modules/black_mesa/sound/mobs/vortigaunt/death03.ogg and /dev/null differ diff --git a/modular_nova/modules/black_mesa/sound/mobs/vortigaunt/death04.ogg b/modular_nova/modules/black_mesa/sound/mobs/vortigaunt/death04.ogg deleted file mode 100644 index 44b8521d305..00000000000 Binary files a/modular_nova/modules/black_mesa/sound/mobs/vortigaunt/death04.ogg and /dev/null differ diff --git a/modular_nova/modules/black_mesa/sound/mobs/vortigaunt/death05.ogg b/modular_nova/modules/black_mesa/sound/mobs/vortigaunt/death05.ogg deleted file mode 100644 index b13f39f7214..00000000000 Binary files a/modular_nova/modules/black_mesa/sound/mobs/vortigaunt/death05.ogg and /dev/null differ diff --git a/modular_nova/modules/black_mesa/sound/mobs/vortigaunt/dispell.ogg b/modular_nova/modules/black_mesa/sound/mobs/vortigaunt/dispell.ogg deleted file mode 100644 index bbdedf2a925..00000000000 Binary files a/modular_nova/modules/black_mesa/sound/mobs/vortigaunt/dispell.ogg and /dev/null differ diff --git a/modular_nova/modules/black_mesa/sound/mobs/vortigaunt/explode1.ogg b/modular_nova/modules/black_mesa/sound/mobs/vortigaunt/explode1.ogg deleted file mode 100644 index 9bbc1a15059..00000000000 Binary files a/modular_nova/modules/black_mesa/sound/mobs/vortigaunt/explode1.ogg and /dev/null differ diff --git a/modular_nova/modules/black_mesa/sound/mobs/vortigaunt/explode2.ogg b/modular_nova/modules/black_mesa/sound/mobs/vortigaunt/explode2.ogg deleted file mode 100644 index cd2fceafaa7..00000000000 Binary files a/modular_nova/modules/black_mesa/sound/mobs/vortigaunt/explode2.ogg and /dev/null differ diff --git a/modular_nova/modules/black_mesa/sound/mobs/vortigaunt/foot1.ogg b/modular_nova/modules/black_mesa/sound/mobs/vortigaunt/foot1.ogg deleted file mode 100644 index c56bf341a69..00000000000 Binary files a/modular_nova/modules/black_mesa/sound/mobs/vortigaunt/foot1.ogg and /dev/null differ diff --git a/modular_nova/modules/black_mesa/sound/mobs/vortigaunt/foot2.ogg b/modular_nova/modules/black_mesa/sound/mobs/vortigaunt/foot2.ogg deleted file mode 100644 index bca7174349c..00000000000 Binary files a/modular_nova/modules/black_mesa/sound/mobs/vortigaunt/foot2.ogg and /dev/null differ diff --git a/modular_nova/modules/black_mesa/sound/mobs/vortigaunt/foot3.ogg b/modular_nova/modules/black_mesa/sound/mobs/vortigaunt/foot3.ogg deleted file mode 100644 index abe15dc70c5..00000000000 Binary files a/modular_nova/modules/black_mesa/sound/mobs/vortigaunt/foot3.ogg and /dev/null differ diff --git a/modular_nova/modules/black_mesa/sound/mobs/vortigaunt/foot4.ogg b/modular_nova/modules/black_mesa/sound/mobs/vortigaunt/foot4.ogg deleted file mode 100644 index d024e476126..00000000000 Binary files a/modular_nova/modules/black_mesa/sound/mobs/vortigaunt/foot4.ogg and /dev/null differ diff --git a/modular_nova/modules/black_mesa/sound/mobs/vortigaunt/idle01.ogg b/modular_nova/modules/black_mesa/sound/mobs/vortigaunt/idle01.ogg deleted file mode 100644 index 440aef02b91..00000000000 Binary files a/modular_nova/modules/black_mesa/sound/mobs/vortigaunt/idle01.ogg and /dev/null differ diff --git a/modular_nova/modules/black_mesa/sound/mobs/vortigaunt/idle02.ogg b/modular_nova/modules/black_mesa/sound/mobs/vortigaunt/idle02.ogg deleted file mode 100644 index 5b90d8c63e1..00000000000 Binary files a/modular_nova/modules/black_mesa/sound/mobs/vortigaunt/idle02.ogg and /dev/null differ diff --git a/modular_nova/modules/black_mesa/sound/mobs/vortigaunt/idle03.ogg b/modular_nova/modules/black_mesa/sound/mobs/vortigaunt/idle03.ogg deleted file mode 100644 index 0643f53081c..00000000000 Binary files a/modular_nova/modules/black_mesa/sound/mobs/vortigaunt/idle03.ogg and /dev/null differ diff --git a/modular_nova/modules/black_mesa/sound/mobs/vortigaunt/idle04.ogg b/modular_nova/modules/black_mesa/sound/mobs/vortigaunt/idle04.ogg deleted file mode 100644 index a849690a715..00000000000 Binary files a/modular_nova/modules/black_mesa/sound/mobs/vortigaunt/idle04.ogg and /dev/null differ diff --git a/modular_nova/modules/black_mesa/sound/mobs/vortigaunt/idle05.ogg b/modular_nova/modules/black_mesa/sound/mobs/vortigaunt/idle05.ogg deleted file mode 100644 index ad6b4576954..00000000000 Binary files a/modular_nova/modules/black_mesa/sound/mobs/vortigaunt/idle05.ogg and /dev/null differ diff --git a/modular_nova/modules/black_mesa/sound/mobs/vortigaunt/idle06.ogg b/modular_nova/modules/black_mesa/sound/mobs/vortigaunt/idle06.ogg deleted file mode 100644 index c367ecbc724..00000000000 Binary files a/modular_nova/modules/black_mesa/sound/mobs/vortigaunt/idle06.ogg and /dev/null differ diff --git a/modular_nova/modules/black_mesa/sound/mobs/vortigaunt/idle07.ogg b/modular_nova/modules/black_mesa/sound/mobs/vortigaunt/idle07.ogg deleted file mode 100644 index 9aa989a9907..00000000000 Binary files a/modular_nova/modules/black_mesa/sound/mobs/vortigaunt/idle07.ogg and /dev/null differ diff --git a/modular_nova/modules/black_mesa/sound/mobs/vortigaunt/idle08.ogg b/modular_nova/modules/black_mesa/sound/mobs/vortigaunt/idle08.ogg deleted file mode 100644 index 994a0b9cdf8..00000000000 Binary files a/modular_nova/modules/black_mesa/sound/mobs/vortigaunt/idle08.ogg and /dev/null differ diff --git a/modular_nova/modules/black_mesa/sound/mobs/vortigaunt/idle09.ogg b/modular_nova/modules/black_mesa/sound/mobs/vortigaunt/idle09.ogg deleted file mode 100644 index 8ac8e6852ef..00000000000 Binary files a/modular_nova/modules/black_mesa/sound/mobs/vortigaunt/idle09.ogg and /dev/null differ diff --git a/modular_nova/modules/black_mesa/sound/mobs/vortigaunt/laboured_cough01.ogg b/modular_nova/modules/black_mesa/sound/mobs/vortigaunt/laboured_cough01.ogg deleted file mode 100644 index 1b0da58a063..00000000000 Binary files a/modular_nova/modules/black_mesa/sound/mobs/vortigaunt/laboured_cough01.ogg and /dev/null differ diff --git a/modular_nova/modules/black_mesa/sound/mobs/vortigaunt/laboured_cough02.ogg b/modular_nova/modules/black_mesa/sound/mobs/vortigaunt/laboured_cough02.ogg deleted file mode 100644 index ae120e5c87a..00000000000 Binary files a/modular_nova/modules/black_mesa/sound/mobs/vortigaunt/laboured_cough02.ogg and /dev/null differ diff --git a/modular_nova/modules/black_mesa/sound/mobs/vortigaunt/laboured_cough03.ogg b/modular_nova/modules/black_mesa/sound/mobs/vortigaunt/laboured_cough03.ogg deleted file mode 100644 index 9d18ab9104e..00000000000 Binary files a/modular_nova/modules/black_mesa/sound/mobs/vortigaunt/laboured_cough03.ogg and /dev/null differ diff --git a/modular_nova/modules/black_mesa/sound/mobs/vortigaunt/laboured_cough04.ogg b/modular_nova/modules/black_mesa/sound/mobs/vortigaunt/laboured_cough04.ogg deleted file mode 100644 index 0d3cc38625b..00000000000 Binary files a/modular_nova/modules/black_mesa/sound/mobs/vortigaunt/laboured_cough04.ogg and /dev/null differ diff --git a/modular_nova/modules/black_mesa/sound/mobs/vortigaunt/laboured_cough05.ogg b/modular_nova/modules/black_mesa/sound/mobs/vortigaunt/laboured_cough05.ogg deleted file mode 100644 index 94de57d41a2..00000000000 Binary files a/modular_nova/modules/black_mesa/sound/mobs/vortigaunt/laboured_cough05.ogg and /dev/null differ diff --git a/modular_nova/modules/black_mesa/sound/mobs/vortigaunt/laboured_coughidle01.ogg b/modular_nova/modules/black_mesa/sound/mobs/vortigaunt/laboured_coughidle01.ogg deleted file mode 100644 index dacee2189c6..00000000000 Binary files a/modular_nova/modules/black_mesa/sound/mobs/vortigaunt/laboured_coughidle01.ogg and /dev/null differ diff --git a/modular_nova/modules/black_mesa/sound/mobs/vortigaunt/laboured_coughidle02.ogg b/modular_nova/modules/black_mesa/sound/mobs/vortigaunt/laboured_coughidle02.ogg deleted file mode 100644 index f657f3cc575..00000000000 Binary files a/modular_nova/modules/black_mesa/sound/mobs/vortigaunt/laboured_coughidle02.ogg and /dev/null differ diff --git a/modular_nova/modules/black_mesa/sound/mobs/vortigaunt/laboured_coughidle03.ogg b/modular_nova/modules/black_mesa/sound/mobs/vortigaunt/laboured_coughidle03.ogg deleted file mode 100644 index c6837db09f6..00000000000 Binary files a/modular_nova/modules/black_mesa/sound/mobs/vortigaunt/laboured_coughidle03.ogg and /dev/null differ diff --git a/modular_nova/modules/black_mesa/sound/mobs/vortigaunt/laboured_coughidle04.ogg b/modular_nova/modules/black_mesa/sound/mobs/vortigaunt/laboured_coughidle04.ogg deleted file mode 100644 index 3bb3130e500..00000000000 Binary files a/modular_nova/modules/black_mesa/sound/mobs/vortigaunt/laboured_coughidle04.ogg and /dev/null differ diff --git a/modular_nova/modules/black_mesa/sound/mobs/vortigaunt/laboured_coughidle05.ogg b/modular_nova/modules/black_mesa/sound/mobs/vortigaunt/laboured_coughidle05.ogg deleted file mode 100644 index 71b0406758d..00000000000 Binary files a/modular_nova/modules/black_mesa/sound/mobs/vortigaunt/laboured_coughidle05.ogg and /dev/null differ diff --git a/modular_nova/modules/black_mesa/sound/mobs/vortigaunt/laboured_idle01.ogg b/modular_nova/modules/black_mesa/sound/mobs/vortigaunt/laboured_idle01.ogg deleted file mode 100644 index 0a542972824..00000000000 Binary files a/modular_nova/modules/black_mesa/sound/mobs/vortigaunt/laboured_idle01.ogg and /dev/null differ diff --git a/modular_nova/modules/black_mesa/sound/mobs/vortigaunt/laboured_idle02.ogg b/modular_nova/modules/black_mesa/sound/mobs/vortigaunt/laboured_idle02.ogg deleted file mode 100644 index 4dc466b3448..00000000000 Binary files a/modular_nova/modules/black_mesa/sound/mobs/vortigaunt/laboured_idle02.ogg and /dev/null differ diff --git a/modular_nova/modules/black_mesa/sound/mobs/vortigaunt/laboured_idle03.ogg b/modular_nova/modules/black_mesa/sound/mobs/vortigaunt/laboured_idle03.ogg deleted file mode 100644 index a31c12f1ca0..00000000000 Binary files a/modular_nova/modules/black_mesa/sound/mobs/vortigaunt/laboured_idle03.ogg and /dev/null differ diff --git a/modular_nova/modules/black_mesa/sound/mobs/vortigaunt/laboured_idle04.ogg b/modular_nova/modules/black_mesa/sound/mobs/vortigaunt/laboured_idle04.ogg deleted file mode 100644 index c88a23d8eb8..00000000000 Binary files a/modular_nova/modules/black_mesa/sound/mobs/vortigaunt/laboured_idle04.ogg and /dev/null differ diff --git a/modular_nova/modules/black_mesa/sound/mobs/vortigaunt/laboured_idle05.ogg b/modular_nova/modules/black_mesa/sound/mobs/vortigaunt/laboured_idle05.ogg deleted file mode 100644 index a6db379d883..00000000000 Binary files a/modular_nova/modules/black_mesa/sound/mobs/vortigaunt/laboured_idle05.ogg and /dev/null differ diff --git a/modular_nova/modules/black_mesa/sound/mobs/vortigaunt/mindcontrol_end1.ogg b/modular_nova/modules/black_mesa/sound/mobs/vortigaunt/mindcontrol_end1.ogg deleted file mode 100644 index 7ebfd4cf9c1..00000000000 Binary files a/modular_nova/modules/black_mesa/sound/mobs/vortigaunt/mindcontrol_end1.ogg and /dev/null differ diff --git a/modular_nova/modules/black_mesa/sound/mobs/vortigaunt/mindcontrol_end2.ogg b/modular_nova/modules/black_mesa/sound/mobs/vortigaunt/mindcontrol_end2.ogg deleted file mode 100644 index d3c4d3889e4..00000000000 Binary files a/modular_nova/modules/black_mesa/sound/mobs/vortigaunt/mindcontrol_end2.ogg and /dev/null differ diff --git a/modular_nova/modules/black_mesa/sound/mobs/vortigaunt/mindcontrol_end3.ogg b/modular_nova/modules/black_mesa/sound/mobs/vortigaunt/mindcontrol_end3.ogg deleted file mode 100644 index 53905b2df63..00000000000 Binary files a/modular_nova/modules/black_mesa/sound/mobs/vortigaunt/mindcontrol_end3.ogg and /dev/null differ diff --git a/modular_nova/modules/black_mesa/sound/mobs/vortigaunt/mindcontrol_end4.ogg b/modular_nova/modules/black_mesa/sound/mobs/vortigaunt/mindcontrol_end4.ogg deleted file mode 100644 index 24e97d0eb93..00000000000 Binary files a/modular_nova/modules/black_mesa/sound/mobs/vortigaunt/mindcontrol_end4.ogg and /dev/null differ diff --git a/modular_nova/modules/black_mesa/sound/mobs/vortigaunt/mindcontrol_end5.ogg b/modular_nova/modules/black_mesa/sound/mobs/vortigaunt/mindcontrol_end5.ogg deleted file mode 100644 index c1f58c563a4..00000000000 Binary files a/modular_nova/modules/black_mesa/sound/mobs/vortigaunt/mindcontrol_end5.ogg and /dev/null differ diff --git a/modular_nova/modules/black_mesa/sound/mobs/vortigaunt/mindcontrol_end6.ogg b/modular_nova/modules/black_mesa/sound/mobs/vortigaunt/mindcontrol_end6.ogg deleted file mode 100644 index ead8e2c3970..00000000000 Binary files a/modular_nova/modules/black_mesa/sound/mobs/vortigaunt/mindcontrol_end6.ogg and /dev/null differ diff --git a/modular_nova/modules/black_mesa/sound/mobs/vortigaunt/mindcontrol_start1.ogg b/modular_nova/modules/black_mesa/sound/mobs/vortigaunt/mindcontrol_start1.ogg deleted file mode 100644 index 2b7447065ff..00000000000 Binary files a/modular_nova/modules/black_mesa/sound/mobs/vortigaunt/mindcontrol_start1.ogg and /dev/null differ diff --git a/modular_nova/modules/black_mesa/sound/mobs/vortigaunt/mindcontrol_start2.ogg b/modular_nova/modules/black_mesa/sound/mobs/vortigaunt/mindcontrol_start2.ogg deleted file mode 100644 index 67157d2ed44..00000000000 Binary files a/modular_nova/modules/black_mesa/sound/mobs/vortigaunt/mindcontrol_start2.ogg and /dev/null differ diff --git a/modular_nova/modules/black_mesa/sound/mobs/vortigaunt/mindcontrol_start3.ogg b/modular_nova/modules/black_mesa/sound/mobs/vortigaunt/mindcontrol_start3.ogg deleted file mode 100644 index 7e52e70edf6..00000000000 Binary files a/modular_nova/modules/black_mesa/sound/mobs/vortigaunt/mindcontrol_start3.ogg and /dev/null differ diff --git a/modular_nova/modules/black_mesa/sound/mobs/vortigaunt/mindcontrol_start4.ogg b/modular_nova/modules/black_mesa/sound/mobs/vortigaunt/mindcontrol_start4.ogg deleted file mode 100644 index 58dee09b0b3..00000000000 Binary files a/modular_nova/modules/black_mesa/sound/mobs/vortigaunt/mindcontrol_start4.ogg and /dev/null differ diff --git a/modular_nova/modules/black_mesa/sound/mobs/vortigaunt/mindcontrol_start5.ogg b/modular_nova/modules/black_mesa/sound/mobs/vortigaunt/mindcontrol_start5.ogg deleted file mode 100644 index 74aa7947cc8..00000000000 Binary files a/modular_nova/modules/black_mesa/sound/mobs/vortigaunt/mindcontrol_start5.ogg and /dev/null differ diff --git a/modular_nova/modules/black_mesa/sound/mobs/vortigaunt/mourn01.ogg b/modular_nova/modules/black_mesa/sound/mobs/vortigaunt/mourn01.ogg deleted file mode 100644 index a43cfa101a5..00000000000 Binary files a/modular_nova/modules/black_mesa/sound/mobs/vortigaunt/mourn01.ogg and /dev/null differ diff --git a/modular_nova/modules/black_mesa/sound/mobs/vortigaunt/mourn02.ogg b/modular_nova/modules/black_mesa/sound/mobs/vortigaunt/mourn02.ogg deleted file mode 100644 index f7c09c28556..00000000000 Binary files a/modular_nova/modules/black_mesa/sound/mobs/vortigaunt/mourn02.ogg and /dev/null differ diff --git a/modular_nova/modules/black_mesa/sound/mobs/vortigaunt/mourn03.ogg b/modular_nova/modules/black_mesa/sound/mobs/vortigaunt/mourn03.ogg deleted file mode 100644 index da4ac910f5a..00000000000 Binary files a/modular_nova/modules/black_mesa/sound/mobs/vortigaunt/mourn03.ogg and /dev/null differ diff --git a/modular_nova/modules/black_mesa/sound/mobs/vortigaunt/mourn04.ogg b/modular_nova/modules/black_mesa/sound/mobs/vortigaunt/mourn04.ogg deleted file mode 100644 index b94e68c4778..00000000000 Binary files a/modular_nova/modules/black_mesa/sound/mobs/vortigaunt/mourn04.ogg and /dev/null differ diff --git a/modular_nova/modules/black_mesa/sound/mobs/vortigaunt/mourn05.ogg b/modular_nova/modules/black_mesa/sound/mobs/vortigaunt/mourn05.ogg deleted file mode 100644 index 4f09a181e0a..00000000000 Binary files a/modular_nova/modules/black_mesa/sound/mobs/vortigaunt/mourn05.ogg and /dev/null differ diff --git a/modular_nova/modules/black_mesa/sound/mobs/vortigaunt/pain01.ogg b/modular_nova/modules/black_mesa/sound/mobs/vortigaunt/pain01.ogg deleted file mode 100644 index 926128dd78c..00000000000 Binary files a/modular_nova/modules/black_mesa/sound/mobs/vortigaunt/pain01.ogg and /dev/null differ diff --git a/modular_nova/modules/black_mesa/sound/mobs/vortigaunt/pain02.ogg b/modular_nova/modules/black_mesa/sound/mobs/vortigaunt/pain02.ogg deleted file mode 100644 index ba2d0d52c1a..00000000000 Binary files a/modular_nova/modules/black_mesa/sound/mobs/vortigaunt/pain02.ogg and /dev/null differ diff --git a/modular_nova/modules/black_mesa/sound/mobs/vortigaunt/pain03.ogg b/modular_nova/modules/black_mesa/sound/mobs/vortigaunt/pain03.ogg deleted file mode 100644 index e42e9c92092..00000000000 Binary files a/modular_nova/modules/black_mesa/sound/mobs/vortigaunt/pain03.ogg and /dev/null differ diff --git a/modular_nova/modules/black_mesa/sound/mobs/vortigaunt/pain04.ogg b/modular_nova/modules/black_mesa/sound/mobs/vortigaunt/pain04.ogg deleted file mode 100644 index 64131db57d1..00000000000 Binary files a/modular_nova/modules/black_mesa/sound/mobs/vortigaunt/pain04.ogg and /dev/null differ diff --git a/modular_nova/modules/black_mesa/sound/mobs/vortigaunt/painedprotest01.ogg b/modular_nova/modules/black_mesa/sound/mobs/vortigaunt/painedprotest01.ogg deleted file mode 100644 index ab464b94a31..00000000000 Binary files a/modular_nova/modules/black_mesa/sound/mobs/vortigaunt/painedprotest01.ogg and /dev/null differ diff --git a/modular_nova/modules/black_mesa/sound/mobs/vortigaunt/protest02.ogg b/modular_nova/modules/black_mesa/sound/mobs/vortigaunt/protest02.ogg deleted file mode 100644 index 5293e8f96b5..00000000000 Binary files a/modular_nova/modules/black_mesa/sound/mobs/vortigaunt/protest02.ogg and /dev/null differ diff --git a/modular_nova/modules/black_mesa/sound/mobs/vortigaunt/protest03.ogg b/modular_nova/modules/black_mesa/sound/mobs/vortigaunt/protest03.ogg deleted file mode 100644 index 07ad3c09b97..00000000000 Binary files a/modular_nova/modules/black_mesa/sound/mobs/vortigaunt/protest03.ogg and /dev/null differ diff --git a/modular_nova/modules/black_mesa/sound/mobs/vortigaunt/scared_cower_plead01.ogg b/modular_nova/modules/black_mesa/sound/mobs/vortigaunt/scared_cower_plead01.ogg deleted file mode 100644 index 295c2147d27..00000000000 Binary files a/modular_nova/modules/black_mesa/sound/mobs/vortigaunt/scared_cower_plead01.ogg and /dev/null differ diff --git a/modular_nova/modules/black_mesa/sound/mobs/vortigaunt/scared_cower_plead02.ogg b/modular_nova/modules/black_mesa/sound/mobs/vortigaunt/scared_cower_plead02.ogg deleted file mode 100644 index 58460043905..00000000000 Binary files a/modular_nova/modules/black_mesa/sound/mobs/vortigaunt/scared_cower_plead02.ogg and /dev/null differ diff --git a/modular_nova/modules/black_mesa/sound/mobs/vortigaunt/scared_cower_plead03.ogg b/modular_nova/modules/black_mesa/sound/mobs/vortigaunt/scared_cower_plead03.ogg deleted file mode 100644 index e7cfbff9dbf..00000000000 Binary files a/modular_nova/modules/black_mesa/sound/mobs/vortigaunt/scared_cower_plead03.ogg and /dev/null differ diff --git a/modular_nova/modules/black_mesa/sound/mobs/vortigaunt/scared_cower_plead2.ogg b/modular_nova/modules/black_mesa/sound/mobs/vortigaunt/scared_cower_plead2.ogg deleted file mode 100644 index 1d8c4643a57..00000000000 Binary files a/modular_nova/modules/black_mesa/sound/mobs/vortigaunt/scared_cower_plead2.ogg and /dev/null differ diff --git a/modular_nova/modules/black_mesa/sound/mobs/vortigaunt/scared_cowering01.ogg b/modular_nova/modules/black_mesa/sound/mobs/vortigaunt/scared_cowering01.ogg deleted file mode 100644 index edeb6bc0249..00000000000 Binary files a/modular_nova/modules/black_mesa/sound/mobs/vortigaunt/scared_cowering01.ogg and /dev/null differ diff --git a/modular_nova/modules/black_mesa/sound/mobs/vortigaunt/scared_cowering02.ogg b/modular_nova/modules/black_mesa/sound/mobs/vortigaunt/scared_cowering02.ogg deleted file mode 100644 index 630784f693a..00000000000 Binary files a/modular_nova/modules/black_mesa/sound/mobs/vortigaunt/scared_cowering02.ogg and /dev/null differ diff --git a/modular_nova/modules/black_mesa/sound/mobs/vortigaunt/scared_cowering03.ogg b/modular_nova/modules/black_mesa/sound/mobs/vortigaunt/scared_cowering03.ogg deleted file mode 100644 index 15d9c335627..00000000000 Binary files a/modular_nova/modules/black_mesa/sound/mobs/vortigaunt/scared_cowering03.ogg and /dev/null differ diff --git a/modular_nova/modules/black_mesa/sound/mobs/vortigaunt/scared_cowering04.ogg b/modular_nova/modules/black_mesa/sound/mobs/vortigaunt/scared_cowering04.ogg deleted file mode 100644 index 997b27b0b13..00000000000 Binary files a/modular_nova/modules/black_mesa/sound/mobs/vortigaunt/scared_cowering04.ogg and /dev/null differ diff --git a/modular_nova/modules/black_mesa/sound/mobs/vortigaunt/scared_cowering05.ogg b/modular_nova/modules/black_mesa/sound/mobs/vortigaunt/scared_cowering05.ogg deleted file mode 100644 index f2bb5bd1b34..00000000000 Binary files a/modular_nova/modules/black_mesa/sound/mobs/vortigaunt/scared_cowering05.ogg and /dev/null differ diff --git a/modular_nova/modules/black_mesa/sound/mobs/vortigaunt/scared_retreat01.ogg b/modular_nova/modules/black_mesa/sound/mobs/vortigaunt/scared_retreat01.ogg deleted file mode 100644 index ab0aa941ef7..00000000000 Binary files a/modular_nova/modules/black_mesa/sound/mobs/vortigaunt/scared_retreat01.ogg and /dev/null differ diff --git a/modular_nova/modules/black_mesa/sound/mobs/vortigaunt/scared_retreat02.ogg b/modular_nova/modules/black_mesa/sound/mobs/vortigaunt/scared_retreat02.ogg deleted file mode 100644 index d03bef30bc0..00000000000 Binary files a/modular_nova/modules/black_mesa/sound/mobs/vortigaunt/scared_retreat02.ogg and /dev/null differ diff --git a/modular_nova/modules/black_mesa/sound/mobs/vortigaunt/scared_retreat03.ogg b/modular_nova/modules/black_mesa/sound/mobs/vortigaunt/scared_retreat03.ogg deleted file mode 100644 index d37c04a7644..00000000000 Binary files a/modular_nova/modules/black_mesa/sound/mobs/vortigaunt/scared_retreat03.ogg and /dev/null differ diff --git a/modular_nova/modules/black_mesa/sound/mobs/vortigaunt/scared_startled01.ogg b/modular_nova/modules/black_mesa/sound/mobs/vortigaunt/scared_startled01.ogg deleted file mode 100644 index 5755f4d3555..00000000000 Binary files a/modular_nova/modules/black_mesa/sound/mobs/vortigaunt/scared_startled01.ogg and /dev/null differ diff --git a/modular_nova/modules/black_mesa/sound/mobs/vortigaunt/scared_startled02.ogg b/modular_nova/modules/black_mesa/sound/mobs/vortigaunt/scared_startled02.ogg deleted file mode 100644 index 306393d4eb8..00000000000 Binary files a/modular_nova/modules/black_mesa/sound/mobs/vortigaunt/scared_startled02.ogg and /dev/null differ diff --git a/modular_nova/modules/black_mesa/sound/mobs/vortigaunt/scared_startled03.ogg b/modular_nova/modules/black_mesa/sound/mobs/vortigaunt/scared_startled03.ogg deleted file mode 100644 index a0d32b67570..00000000000 Binary files a/modular_nova/modules/black_mesa/sound/mobs/vortigaunt/scared_startled03.ogg and /dev/null differ diff --git a/modular_nova/modules/black_mesa/sound/mobs/vortigaunt/scared_startled04.ogg b/modular_nova/modules/black_mesa/sound/mobs/vortigaunt/scared_startled04.ogg deleted file mode 100644 index 666f5d302ba..00000000000 Binary files a/modular_nova/modules/black_mesa/sound/mobs/vortigaunt/scared_startled04.ogg and /dev/null differ diff --git a/modular_nova/modules/black_mesa/sound/mobs/vortigaunt/tortured_cry01.ogg b/modular_nova/modules/black_mesa/sound/mobs/vortigaunt/tortured_cry01.ogg deleted file mode 100644 index 4828fd5f143..00000000000 Binary files a/modular_nova/modules/black_mesa/sound/mobs/vortigaunt/tortured_cry01.ogg and /dev/null differ diff --git a/modular_nova/modules/black_mesa/sound/mobs/vortigaunt/tortured_cry02.ogg b/modular_nova/modules/black_mesa/sound/mobs/vortigaunt/tortured_cry02.ogg deleted file mode 100644 index ab79035fdb0..00000000000 Binary files a/modular_nova/modules/black_mesa/sound/mobs/vortigaunt/tortured_cry02.ogg and /dev/null differ diff --git a/modular_nova/modules/black_mesa/sound/mobs/vortigaunt/tortured_pain01.ogg b/modular_nova/modules/black_mesa/sound/mobs/vortigaunt/tortured_pain01.ogg deleted file mode 100644 index c3d0280bc65..00000000000 Binary files a/modular_nova/modules/black_mesa/sound/mobs/vortigaunt/tortured_pain01.ogg and /dev/null differ diff --git a/modular_nova/modules/black_mesa/sound/mobs/vortigaunt/tortured_pain02.ogg b/modular_nova/modules/black_mesa/sound/mobs/vortigaunt/tortured_pain02.ogg deleted file mode 100644 index 06cc378f1c7..00000000000 Binary files a/modular_nova/modules/black_mesa/sound/mobs/vortigaunt/tortured_pain02.ogg and /dev/null differ diff --git a/modular_nova/modules/black_mesa/sound/mobs/vortigaunt/tortured_pain03.ogg b/modular_nova/modules/black_mesa/sound/mobs/vortigaunt/tortured_pain03.ogg deleted file mode 100644 index 440d33b0beb..00000000000 Binary files a/modular_nova/modules/black_mesa/sound/mobs/vortigaunt/tortured_pain03.ogg and /dev/null differ diff --git a/modular_nova/modules/black_mesa/sound/mobs/vortigaunt/tortured_pain04.ogg b/modular_nova/modules/black_mesa/sound/mobs/vortigaunt/tortured_pain04.ogg deleted file mode 100644 index 8544bf06249..00000000000 Binary files a/modular_nova/modules/black_mesa/sound/mobs/vortigaunt/tortured_pain04.ogg and /dev/null differ diff --git a/modular_nova/modules/black_mesa/sound/mobs/vortigaunt/tortured_plead01.ogg b/modular_nova/modules/black_mesa/sound/mobs/vortigaunt/tortured_plead01.ogg deleted file mode 100644 index 5b0cb558cef..00000000000 Binary files a/modular_nova/modules/black_mesa/sound/mobs/vortigaunt/tortured_plead01.ogg and /dev/null differ diff --git a/modular_nova/modules/black_mesa/sound/mobs/vortigaunt/tortured_plead02.ogg b/modular_nova/modules/black_mesa/sound/mobs/vortigaunt/tortured_plead02.ogg deleted file mode 100644 index bf6d3162b61..00000000000 Binary files a/modular_nova/modules/black_mesa/sound/mobs/vortigaunt/tortured_plead02.ogg and /dev/null differ diff --git a/modular_nova/modules/black_mesa/sound/mobs/vortigaunt/tortured_plead03.ogg b/modular_nova/modules/black_mesa/sound/mobs/vortigaunt/tortured_plead03.ogg deleted file mode 100644 index 90c997eb559..00000000000 Binary files a/modular_nova/modules/black_mesa/sound/mobs/vortigaunt/tortured_plead03.ogg and /dev/null differ diff --git a/modular_nova/modules/black_mesa/sound/mobs/vortigaunt/village_argue01.ogg b/modular_nova/modules/black_mesa/sound/mobs/vortigaunt/village_argue01.ogg deleted file mode 100644 index a9a99e78e04..00000000000 Binary files a/modular_nova/modules/black_mesa/sound/mobs/vortigaunt/village_argue01.ogg and /dev/null differ diff --git a/modular_nova/modules/black_mesa/sound/mobs/vortigaunt/village_argue02.ogg b/modular_nova/modules/black_mesa/sound/mobs/vortigaunt/village_argue02.ogg deleted file mode 100644 index 9120fb49f8b..00000000000 Binary files a/modular_nova/modules/black_mesa/sound/mobs/vortigaunt/village_argue02.ogg and /dev/null differ diff --git a/modular_nova/modules/black_mesa/sound/mobs/vortigaunt/village_argue03.ogg b/modular_nova/modules/black_mesa/sound/mobs/vortigaunt/village_argue03.ogg deleted file mode 100644 index eec772163e4..00000000000 Binary files a/modular_nova/modules/black_mesa/sound/mobs/vortigaunt/village_argue03.ogg and /dev/null differ diff --git a/modular_nova/modules/black_mesa/sound/mobs/vortigaunt/village_argue04.ogg b/modular_nova/modules/black_mesa/sound/mobs/vortigaunt/village_argue04.ogg deleted file mode 100644 index 38d9488dabf..00000000000 Binary files a/modular_nova/modules/black_mesa/sound/mobs/vortigaunt/village_argue04.ogg and /dev/null differ diff --git a/modular_nova/modules/black_mesa/sound/mobs/vortigaunt/village_argue05.ogg b/modular_nova/modules/black_mesa/sound/mobs/vortigaunt/village_argue05.ogg deleted file mode 100644 index a96471b71e9..00000000000 Binary files a/modular_nova/modules/black_mesa/sound/mobs/vortigaunt/village_argue05.ogg and /dev/null differ diff --git a/modular_nova/modules/black_mesa/sound/mobs/vortigaunt/village_argue05a.ogg b/modular_nova/modules/black_mesa/sound/mobs/vortigaunt/village_argue05a.ogg deleted file mode 100644 index 4c4a6cdda43..00000000000 Binary files a/modular_nova/modules/black_mesa/sound/mobs/vortigaunt/village_argue05a.ogg and /dev/null differ diff --git a/modular_nova/modules/black_mesa/sound/mobs/vortigaunt/village_argue_sigh01.ogg b/modular_nova/modules/black_mesa/sound/mobs/vortigaunt/village_argue_sigh01.ogg deleted file mode 100644 index 4215ea1f353..00000000000 Binary files a/modular_nova/modules/black_mesa/sound/mobs/vortigaunt/village_argue_sigh01.ogg and /dev/null differ diff --git a/modular_nova/modules/black_mesa/sound/mobs/vortigaunt/village_call01.ogg b/modular_nova/modules/black_mesa/sound/mobs/vortigaunt/village_call01.ogg deleted file mode 100644 index 011aceaea3b..00000000000 Binary files a/modular_nova/modules/black_mesa/sound/mobs/vortigaunt/village_call01.ogg and /dev/null differ diff --git a/modular_nova/modules/black_mesa/sound/mobs/vortigaunt/village_concern.ogg b/modular_nova/modules/black_mesa/sound/mobs/vortigaunt/village_concern.ogg deleted file mode 100644 index b39272890a4..00000000000 Binary files a/modular_nova/modules/black_mesa/sound/mobs/vortigaunt/village_concern.ogg and /dev/null differ diff --git a/modular_nova/modules/black_mesa/sound/mobs/vortigaunt/village_confused01.ogg b/modular_nova/modules/black_mesa/sound/mobs/vortigaunt/village_confused01.ogg deleted file mode 100644 index c0170a3f99e..00000000000 Binary files a/modular_nova/modules/black_mesa/sound/mobs/vortigaunt/village_confused01.ogg and /dev/null differ diff --git a/modular_nova/modules/black_mesa/sound/mobs/vortigaunt/village_confused02.ogg b/modular_nova/modules/black_mesa/sound/mobs/vortigaunt/village_confused02.ogg deleted file mode 100644 index 0661b2a0c28..00000000000 Binary files a/modular_nova/modules/black_mesa/sound/mobs/vortigaunt/village_confused02.ogg and /dev/null differ diff --git a/modular_nova/modules/black_mesa/sound/mobs/vortigaunt/village_cough1.ogg b/modular_nova/modules/black_mesa/sound/mobs/vortigaunt/village_cough1.ogg deleted file mode 100644 index 2b129bfd0d5..00000000000 Binary files a/modular_nova/modules/black_mesa/sound/mobs/vortigaunt/village_cough1.ogg and /dev/null differ diff --git a/modular_nova/modules/black_mesa/sound/mobs/vortigaunt/village_cough1a.ogg b/modular_nova/modules/black_mesa/sound/mobs/vortigaunt/village_cough1a.ogg deleted file mode 100644 index 563382b7f13..00000000000 Binary files a/modular_nova/modules/black_mesa/sound/mobs/vortigaunt/village_cough1a.ogg and /dev/null differ diff --git a/modular_nova/modules/black_mesa/sound/mobs/vortigaunt/village_goeat01.ogg b/modular_nova/modules/black_mesa/sound/mobs/vortigaunt/village_goeat01.ogg deleted file mode 100644 index 24a0eb7a68d..00000000000 Binary files a/modular_nova/modules/black_mesa/sound/mobs/vortigaunt/village_goeat01.ogg and /dev/null differ diff --git a/modular_nova/modules/black_mesa/sound/mobs/vortigaunt/village_goeat02.ogg b/modular_nova/modules/black_mesa/sound/mobs/vortigaunt/village_goeat02.ogg deleted file mode 100644 index 3d6b9c1e6d9..00000000000 Binary files a/modular_nova/modules/black_mesa/sound/mobs/vortigaunt/village_goeat02.ogg and /dev/null differ diff --git a/modular_nova/modules/black_mesa/sound/mobs/vortigaunt/village_ignore01.ogg b/modular_nova/modules/black_mesa/sound/mobs/vortigaunt/village_ignore01.ogg deleted file mode 100644 index 92642b24cc4..00000000000 Binary files a/modular_nova/modules/black_mesa/sound/mobs/vortigaunt/village_ignore01.ogg and /dev/null differ diff --git a/modular_nova/modules/black_mesa/sound/mobs/vortigaunt/village_ignore02.ogg b/modular_nova/modules/black_mesa/sound/mobs/vortigaunt/village_ignore02.ogg deleted file mode 100644 index 5797b58ddd5..00000000000 Binary files a/modular_nova/modules/black_mesa/sound/mobs/vortigaunt/village_ignore02.ogg and /dev/null differ diff --git a/modular_nova/modules/black_mesa/sound/mobs/vortigaunt/village_invite01.ogg b/modular_nova/modules/black_mesa/sound/mobs/vortigaunt/village_invite01.ogg deleted file mode 100644 index eabdfb48ad7..00000000000 Binary files a/modular_nova/modules/black_mesa/sound/mobs/vortigaunt/village_invite01.ogg and /dev/null differ diff --git a/modular_nova/modules/black_mesa/sound/mobs/vortigaunt/village_nodebate01.ogg b/modular_nova/modules/black_mesa/sound/mobs/vortigaunt/village_nodebate01.ogg deleted file mode 100644 index d966ba1762a..00000000000 Binary files a/modular_nova/modules/black_mesa/sound/mobs/vortigaunt/village_nodebate01.ogg and /dev/null differ diff --git a/modular_nova/modules/black_mesa/sound/mobs/vortigaunt/village_nodebate02.ogg b/modular_nova/modules/black_mesa/sound/mobs/vortigaunt/village_nodebate02.ogg deleted file mode 100644 index e8610ee8ffb..00000000000 Binary files a/modular_nova/modules/black_mesa/sound/mobs/vortigaunt/village_nodebate02.ogg and /dev/null differ diff --git a/modular_nova/modules/black_mesa/sound/mobs/vortigaunt/weeping01.ogg b/modular_nova/modules/black_mesa/sound/mobs/vortigaunt/weeping01.ogg deleted file mode 100644 index c6d3ccd8947..00000000000 Binary files a/modular_nova/modules/black_mesa/sound/mobs/vortigaunt/weeping01.ogg and /dev/null differ diff --git a/modular_nova/modules/black_mesa/sound/mobs/vortigaunt/weeping02.ogg b/modular_nova/modules/black_mesa/sound/mobs/vortigaunt/weeping02.ogg deleted file mode 100644 index 9bb9ea2ece9..00000000000 Binary files a/modular_nova/modules/black_mesa/sound/mobs/vortigaunt/weeping02.ogg and /dev/null differ diff --git a/modular_nova/modules/black_mesa/sound/mobs/vortigaunt/weeping03.ogg b/modular_nova/modules/black_mesa/sound/mobs/vortigaunt/weeping03.ogg deleted file mode 100644 index 06162d76433..00000000000 Binary files a/modular_nova/modules/black_mesa/sound/mobs/vortigaunt/weeping03.ogg and /dev/null differ diff --git a/modular_nova/modules/black_mesa/sound/mobs/vortigaunt/weeping04.ogg b/modular_nova/modules/black_mesa/sound/mobs/vortigaunt/weeping04.ogg deleted file mode 100644 index 4a008fcf01d..00000000000 Binary files a/modular_nova/modules/black_mesa/sound/mobs/vortigaunt/weeping04.ogg and /dev/null differ diff --git a/modular_nova/modules/black_mesa/sound/mobs/vortigaunt/weeping05.ogg b/modular_nova/modules/black_mesa/sound/mobs/vortigaunt/weeping05.ogg deleted file mode 100644 index f78cedd9ad8..00000000000 Binary files a/modular_nova/modules/black_mesa/sound/mobs/vortigaunt/weeping05.ogg and /dev/null differ diff --git a/modular_nova/modules/black_mesa/sound/mobs/vortigaunt/weeping06.ogg b/modular_nova/modules/black_mesa/sound/mobs/vortigaunt/weeping06.ogg deleted file mode 100644 index 3ca126b3ae0..00000000000 Binary files a/modular_nova/modules/black_mesa/sound/mobs/vortigaunt/weeping06.ogg and /dev/null differ diff --git a/modular_nova/modules/black_mesa/sound/mobs/vortigaunt/weeping07.ogg b/modular_nova/modules/black_mesa/sound/mobs/vortigaunt/weeping07.ogg deleted file mode 100644 index ab16ec9e95a..00000000000 Binary files a/modular_nova/modules/black_mesa/sound/mobs/vortigaunt/weeping07.ogg and /dev/null differ diff --git a/modular_nova/modules/black_mesa/sound/mobs/zombies/alert1.ogg b/modular_nova/modules/black_mesa/sound/mobs/zombies/alert1.ogg deleted file mode 100644 index 8c2c8f6d661..00000000000 Binary files a/modular_nova/modules/black_mesa/sound/mobs/zombies/alert1.ogg and /dev/null differ diff --git a/modular_nova/modules/black_mesa/sound/mobs/zombies/alert2.ogg b/modular_nova/modules/black_mesa/sound/mobs/zombies/alert2.ogg deleted file mode 100644 index 45d8cd03395..00000000000 Binary files a/modular_nova/modules/black_mesa/sound/mobs/zombies/alert2.ogg and /dev/null differ diff --git a/modular_nova/modules/black_mesa/sound/mobs/zombies/alert3.ogg b/modular_nova/modules/black_mesa/sound/mobs/zombies/alert3.ogg deleted file mode 100644 index ed090785a88..00000000000 Binary files a/modular_nova/modules/black_mesa/sound/mobs/zombies/alert3.ogg and /dev/null differ diff --git a/modular_nova/modules/black_mesa/sound/mobs/zombies/alert4.ogg b/modular_nova/modules/black_mesa/sound/mobs/zombies/alert4.ogg deleted file mode 100644 index cb9d3b0325d..00000000000 Binary files a/modular_nova/modules/black_mesa/sound/mobs/zombies/alert4.ogg and /dev/null differ diff --git a/modular_nova/modules/black_mesa/sound/mobs/zombies/alert5.ogg b/modular_nova/modules/black_mesa/sound/mobs/zombies/alert5.ogg deleted file mode 100644 index 9e0e075ad18..00000000000 Binary files a/modular_nova/modules/black_mesa/sound/mobs/zombies/alert5.ogg and /dev/null differ diff --git a/modular_nova/modules/black_mesa/sound/mobs/zombies/alert6.ogg b/modular_nova/modules/black_mesa/sound/mobs/zombies/alert6.ogg deleted file mode 100644 index fedf0295fd7..00000000000 Binary files a/modular_nova/modules/black_mesa/sound/mobs/zombies/alert6.ogg and /dev/null differ diff --git a/modular_nova/modules/black_mesa/sound/mobs/zombies/claw_strike.ogg b/modular_nova/modules/black_mesa/sound/mobs/zombies/claw_strike.ogg deleted file mode 100644 index 45a6c30be9e..00000000000 Binary files a/modular_nova/modules/black_mesa/sound/mobs/zombies/claw_strike.ogg and /dev/null differ diff --git a/modular_nova/modules/black_mesa/sound/mobs/zombies/hzv1.ogg b/modular_nova/modules/black_mesa/sound/mobs/zombies/hzv1.ogg deleted file mode 100644 index bfd79cf0417..00000000000 Binary files a/modular_nova/modules/black_mesa/sound/mobs/zombies/hzv1.ogg and /dev/null differ diff --git a/modular_nova/modules/black_mesa/sound/mobs/zombies/hzv10.ogg b/modular_nova/modules/black_mesa/sound/mobs/zombies/hzv10.ogg deleted file mode 100644 index 371ec262d4c..00000000000 Binary files a/modular_nova/modules/black_mesa/sound/mobs/zombies/hzv10.ogg and /dev/null differ diff --git a/modular_nova/modules/black_mesa/sound/mobs/zombies/hzv11.ogg b/modular_nova/modules/black_mesa/sound/mobs/zombies/hzv11.ogg deleted file mode 100644 index 8886436db81..00000000000 Binary files a/modular_nova/modules/black_mesa/sound/mobs/zombies/hzv11.ogg and /dev/null differ diff --git a/modular_nova/modules/black_mesa/sound/mobs/zombies/hzv12.ogg b/modular_nova/modules/black_mesa/sound/mobs/zombies/hzv12.ogg deleted file mode 100644 index ebf968da451..00000000000 Binary files a/modular_nova/modules/black_mesa/sound/mobs/zombies/hzv12.ogg and /dev/null differ diff --git a/modular_nova/modules/black_mesa/sound/mobs/zombies/hzv13.ogg b/modular_nova/modules/black_mesa/sound/mobs/zombies/hzv13.ogg deleted file mode 100644 index a2ea1768e6e..00000000000 Binary files a/modular_nova/modules/black_mesa/sound/mobs/zombies/hzv13.ogg and /dev/null differ diff --git a/modular_nova/modules/black_mesa/sound/mobs/zombies/hzv14.ogg b/modular_nova/modules/black_mesa/sound/mobs/zombies/hzv14.ogg deleted file mode 100644 index ba56bb13e45..00000000000 Binary files a/modular_nova/modules/black_mesa/sound/mobs/zombies/hzv14.ogg and /dev/null differ diff --git a/modular_nova/modules/black_mesa/sound/mobs/zombies/hzv2.ogg b/modular_nova/modules/black_mesa/sound/mobs/zombies/hzv2.ogg deleted file mode 100644 index a76d88d463e..00000000000 Binary files a/modular_nova/modules/black_mesa/sound/mobs/zombies/hzv2.ogg and /dev/null differ diff --git a/modular_nova/modules/black_mesa/sound/mobs/zombies/hzv3.ogg b/modular_nova/modules/black_mesa/sound/mobs/zombies/hzv3.ogg deleted file mode 100644 index 3ad9188e6be..00000000000 Binary files a/modular_nova/modules/black_mesa/sound/mobs/zombies/hzv3.ogg and /dev/null differ diff --git a/modular_nova/modules/black_mesa/sound/mobs/zombies/hzv4.ogg b/modular_nova/modules/black_mesa/sound/mobs/zombies/hzv4.ogg deleted file mode 100644 index e833ae9d6f6..00000000000 Binary files a/modular_nova/modules/black_mesa/sound/mobs/zombies/hzv4.ogg and /dev/null differ diff --git a/modular_nova/modules/black_mesa/sound/mobs/zombies/hzv5.ogg b/modular_nova/modules/black_mesa/sound/mobs/zombies/hzv5.ogg deleted file mode 100644 index 9de7a795ed0..00000000000 Binary files a/modular_nova/modules/black_mesa/sound/mobs/zombies/hzv5.ogg and /dev/null differ diff --git a/modular_nova/modules/black_mesa/sound/mobs/zombies/hzv6.ogg b/modular_nova/modules/black_mesa/sound/mobs/zombies/hzv6.ogg deleted file mode 100644 index 4a6b7aa0699..00000000000 Binary files a/modular_nova/modules/black_mesa/sound/mobs/zombies/hzv6.ogg and /dev/null differ diff --git a/modular_nova/modules/black_mesa/sound/mobs/zombies/hzv7.ogg b/modular_nova/modules/black_mesa/sound/mobs/zombies/hzv7.ogg deleted file mode 100644 index 33518e8baf6..00000000000 Binary files a/modular_nova/modules/black_mesa/sound/mobs/zombies/hzv7.ogg and /dev/null differ diff --git a/modular_nova/modules/black_mesa/sound/mobs/zombies/hzv8.ogg b/modular_nova/modules/black_mesa/sound/mobs/zombies/hzv8.ogg deleted file mode 100644 index 534d008bf24..00000000000 Binary files a/modular_nova/modules/black_mesa/sound/mobs/zombies/hzv8.ogg and /dev/null differ diff --git a/modular_nova/modules/black_mesa/sound/mobs/zombies/hzv9.ogg b/modular_nova/modules/black_mesa/sound/mobs/zombies/hzv9.ogg deleted file mode 100644 index 87cd5cf70b8..00000000000 Binary files a/modular_nova/modules/black_mesa/sound/mobs/zombies/hzv9.ogg and /dev/null differ diff --git a/modular_nova/modules/black_mesa/sound/siren1.ogg b/modular_nova/modules/black_mesa/sound/siren1.ogg deleted file mode 100644 index 9247070968a..00000000000 Binary files a/modular_nova/modules/black_mesa/sound/siren1.ogg and /dev/null differ diff --git a/modular_nova/modules/black_mesa/sound/siren1_long.ogg b/modular_nova/modules/black_mesa/sound/siren1_long.ogg deleted file mode 100644 index 6e91ad1a444..00000000000 Binary files a/modular_nova/modules/black_mesa/sound/siren1_long.ogg and /dev/null differ diff --git a/modular_nova/modules/black_mesa/sound/tc_12_portalsuck.ogg b/modular_nova/modules/black_mesa/sound/tc_12_portalsuck.ogg deleted file mode 100644 index 2266af00e6d..00000000000 Binary files a/modular_nova/modules/black_mesa/sound/tc_12_portalsuck.ogg and /dev/null differ diff --git a/modular_nova/modules/black_mesa/sound/tc_13_teleport.ogg b/modular_nova/modules/black_mesa/sound/tc_13_teleport.ogg deleted file mode 100644 index 0e663e22ea2..00000000000 Binary files a/modular_nova/modules/black_mesa/sound/tc_13_teleport.ogg and /dev/null differ diff --git a/modular_nova/modules/black_mesa/sound/xen-credits.ogg b/modular_nova/modules/black_mesa/sound/xen-credits.ogg deleted file mode 100644 index 88486755362..00000000000 Binary files a/modular_nova/modules/black_mesa/sound/xen-credits.ogg and /dev/null differ diff --git a/modular_nova/modules/black_mesa/sound/xen_door.ogg b/modular_nova/modules/black_mesa/sound/xen_door.ogg deleted file mode 100644 index 078af38d077..00000000000 Binary files a/modular_nova/modules/black_mesa/sound/xen_door.ogg and /dev/null differ diff --git a/modular_nova/modules/bodyparts/code/ghoul_bodyparts.dm b/modular_nova/modules/bodyparts/code/ghoul_bodyparts.dm index 098e4ad1064..d58e6cd0c83 100644 --- a/modular_nova/modules/bodyparts/code/ghoul_bodyparts.dm +++ b/modular_nova/modules/bodyparts/code/ghoul_bodyparts.dm @@ -96,7 +96,7 @@ // LIMBS -/obj/item/bodypart/arm/right/mutant/ghoul/drop_limb(special) +/obj/item/bodypart/arm/right/mutant/ghoul/drop_limb(special, dismembered, move_to_floor = TRUE) ..() // Create Meat, Remove Limb var/percentHealth = 1 - (brute_dam + burn_dam) / max_damage if (percentHealth > 0) @@ -107,7 +107,7 @@ qdel(src) -/obj/item/bodypart/arm/left/mutant/ghoul/drop_limb(special) +/obj/item/bodypart/arm/left/mutant/ghoul/drop_limb(special, dismembered, move_to_floor = TRUE) ..() // Create Meat, Remove Limb var/percentHealth = 1 - (brute_dam + burn_dam) / max_damage if (percentHealth > 0) @@ -118,7 +118,7 @@ qdel(src) -/obj/item/bodypart/leg/right/mutant/ghoul/drop_limb(special) +/obj/item/bodypart/leg/right/mutant/ghoul/drop_limb(special, dismembered, move_to_floor = TRUE) ..() // Create Meat, Remove Limb var/percentHealth = 1 - (brute_dam + burn_dam) / max_damage if (percentHealth > 0) @@ -129,7 +129,7 @@ qdel(src) -/obj/item/bodypart/leg/left/mutant/ghoul/drop_limb(special) +/obj/item/bodypart/leg/left/mutant/ghoul/drop_limb(special, dismembered, move_to_floor = TRUE) ..() // Create Meat, Remove Limb var/percentHealth = 1 - (brute_dam + burn_dam) / max_damage if (percentHealth > 0) diff --git a/modular_nova/modules/bodyparts/code/moth_bodyparts.dm b/modular_nova/modules/bodyparts/code/moth_bodyparts.dm index 3f55ec93393..aab60d23281 100644 --- a/modular_nova/modules/bodyparts/code/moth_bodyparts.dm +++ b/modular_nova/modules/bodyparts/code/moth_bodyparts.dm @@ -4,7 +4,7 @@ icon_state = "moth_head_m" limb_id = SPECIES_MOTH is_dimorphic = TRUE - head_flags = HEAD_LIPS|HEAD_EYESPRITES|HEAD_EYEHOLES|HEAD_DEBRAIN //what the fuck, moths have lips? + head_flags = HEAD_HAIR|HEAD_FACIAL_HAIR|HEAD_LIPS|HEAD_EYESPRITES|HEAD_EYEHOLES|HEAD_DEBRAIN //what the fuck, moths have lips? /obj/item/bodypart/chest/moth icon = BODYPART_ICON_MOTH diff --git a/modular_nova/modules/bodyparts/code/snail_bodyparts.dm b/modular_nova/modules/bodyparts/code/snail_bodyparts.dm index 9a4c166922c..b80ad943352 100644 --- a/modular_nova/modules/bodyparts/code/snail_bodyparts.dm +++ b/modular_nova/modules/bodyparts/code/snail_bodyparts.dm @@ -1,28 +1,28 @@ // MODULAR SNAIL OVERRIDES /obj/item/bodypart/head/snail - icon_greyscale = DEFAULT_BODYPART_ICON_ORGANIC + icon_greyscale = BODYPART_ICON_SNAIL head_flags = HEAD_HAIR|HEAD_FACIAL_HAIR|HEAD_EYESPRITES|HEAD_EYECOLOR|HEAD_DEBRAIN /obj/item/bodypart/chest/snail - icon_greyscale = DEFAULT_BODYPART_ICON_ORGANIC + icon_greyscale = BODYPART_ICON_SNAIL /obj/item/bodypart/arm/left/snail - icon_greyscale = DEFAULT_BODYPART_ICON_ORGANIC + icon_greyscale = BODYPART_ICON_SNAIL unarmed_damage_low = 1 // Roundstart Snails - Lowest possible punch damage. if this is set to 0, punches will always miss. unarmed_damage_high = 5 // Roundstart Snails - A Bit More damage. /obj/item/bodypart/arm/right/snail - icon_greyscale = DEFAULT_BODYPART_ICON_ORGANIC + icon_greyscale = BODYPART_ICON_SNAIL unarmed_damage_low = 1 unarmed_damage_high = 5 /obj/item/bodypart/leg/left/snail - icon_greyscale = DEFAULT_BODYPART_ICON_ORGANIC + icon_greyscale = BODYPART_ICON_SNAIL unarmed_damage_low = 1. unarmed_damage_high = 5 /obj/item/bodypart/leg/right/snail - icon_greyscale = DEFAULT_BODYPART_ICON_ORGANIC + icon_greyscale = BODYPART_ICON_SNAIL unarmed_damage_low = 1 unarmed_damage_high = 5 diff --git a/modular_nova/modules/bodyparts/icons/ipc_parts.dmi b/modular_nova/modules/bodyparts/icons/ipc_parts.dmi index d8925619a3c..41f9c2e5073 100644 Binary files a/modular_nova/modules/bodyparts/icons/ipc_parts.dmi and b/modular_nova/modules/bodyparts/icons/ipc_parts.dmi differ diff --git a/modular_nova/modules/bodyparts/icons/snail_parts_greyscale.dmi b/modular_nova/modules/bodyparts/icons/snail_parts_greyscale.dmi new file mode 100644 index 00000000000..0b57859dca4 Binary files /dev/null and b/modular_nova/modules/bodyparts/icons/snail_parts_greyscale.dmi differ diff --git a/modular_nova/modules/borg_buffs/code/robot.dm b/modular_nova/modules/borg_buffs/code/robot.dm index 6cc3eb2cf6e..842c264573d 100644 --- a/modular_nova/modules/borg_buffs/code/robot.dm +++ b/modular_nova/modules/borg_buffs/code/robot.dm @@ -220,7 +220,7 @@ materials = list( /datum/material/iron = SHEET_MATERIAL_AMOUNT * 2 ) - construction_time = 40 + construction_time = 4 SECONDS category = list( RND_CATEGORY_MECHFAB_CYBORG_MODULES + RND_SUBCATEGORY_MECHFAB_CYBORG_MODULES_JANITOR, ) diff --git a/modular_nova/modules/borgs/code/mechafabricator_designs.dm b/modular_nova/modules/borgs/code/mechafabricator_designs.dm index 6c42e1c4d9e..2a8eb5f3a0f 100644 --- a/modular_nova/modules/borgs/code/mechafabricator_designs.dm +++ b/modular_nova/modules/borgs/code/mechafabricator_designs.dm @@ -7,7 +7,7 @@ /datum/material/iron = SHEET_MATERIAL_AMOUNT * 10, /datum/material/glass = SHEET_MATERIAL_AMOUNT * 4, ) - construction_time = 120 + construction_time = 12 SECONDS category = list( RND_CATEGORY_MECHFAB_CYBORG_MODULES + RND_SUBCATEGORY_MECHFAB_CYBORG_MODULES_ALL, ) @@ -26,7 +26,7 @@ /datum/material/titanium = SHEET_MATERIAL_AMOUNT * 4, /datum/material/plasma = SHEET_MATERIAL_AMOUNT, ) - construction_time = 80 + construction_time = 8 SECONDS category = list( RND_CATEGORY_MECHFAB_CYBORG_MODULES + RND_SUBCATEGORY_MECHFAB_CYBORG_MODULES_MEDICAL, ) @@ -40,7 +40,7 @@ /datum/material/iron = HALF_SHEET_MATERIAL_AMOUNT, /datum/material/glass = HALF_SHEET_MATERIAL_AMOUNT, ) - construction_time = 40 + construction_time = 4 SECONDS category = list( RND_CATEGORY_MECHFAB_CYBORG_MODULES + RND_SUBCATEGORY_MECHFAB_CYBORG_MODULES_ALL, ) @@ -64,7 +64,7 @@ /datum/design/inducer_upgrade name = "Inducer Module" id = "inducer_module" - construction_time = 60 + construction_time = 6 SECONDS build_type = MECHFAB build_path = /obj/item/borg/upgrade/inducer materials = list( @@ -86,7 +86,7 @@ /datum/material/plasma = SHEET_MATERIAL_AMOUNT * 5, /datum/material/diamond = SHEET_MATERIAL_AMOUNT * 2, ) - construction_time = 120 + construction_time = 12 SECONDS category = list( RND_CATEGORY_MECHFAB_CYBORG_MODULES + RND_SUBCATEGORY_MECHFAB_CYBORG_MODULES_ALL, ) diff --git a/modular_nova/modules/borgs/code/update_icons.dm b/modular_nova/modules/borgs/code/update_icons.dm index 22f7779d999..704ac198a47 100644 --- a/modular_nova/modules/borgs/code/update_icons.dm +++ b/modular_nova/modules/borgs/code/update_icons.dm @@ -68,4 +68,4 @@ icon_state = "[model.cyborg_base_icon]-wreck" - update_fire() + update_appearance(UPDATE_OVERLAYS) diff --git a/modular_nova/modules/cargo/code/packs.dm b/modular_nova/modules/cargo/code/packs.dm index c92b058db2a..21709f9c8fe 100644 --- a/modular_nova/modules/cargo/code/packs.dm +++ b/modular_nova/modules/cargo/code/packs.dm @@ -711,34 +711,6 @@ for(var/i in 1 to 19) new /obj/item/grown/log(.) -/datum/supply_pack/imports/cin_surplus - name = "CIN Military Surplus Crate" - desc = "A collection of surplus equipment sourced from the Coalition of Independent Nations' military stockpiles. Likely to contain old and outdated equipment, as is the nature of surplus." - contraband = TRUE - cost = CARGO_CRATE_VALUE * 9 - contains = list( - /obj/item/storage/box/colonial_rations = 1, - /obj/item/storage/toolbox/ammobox/strilka310 = 1, - /obj/item/storage/toolbox/ammobox/strilka310/surplus = 1, - /obj/item/storage/toolbox/maint_kit = 1, - /obj/item/storage/toolbox/guncase/soviet/sakhno = 2, - /obj/item/ammo_box/strilka310 = 1, - /obj/item/clothing/suit/armor/vest/cin_surplus_vest = 1, - /obj/item/clothing/head/helmet/cin_surplus_helmet/random_color = 1, - /obj/item/storage/backpack/industrial/cin_surplus/random_color = 1, - /obj/item/storage/belt/military/cin_surplus/random_color = 1, - /obj/item/clothing/gloves/tackler/combat = 1, - /obj/item/clothing/under/syndicate/rus_army/cin_surplus/random_color = 1, - /obj/item/clothing/shoes/jackboots = 1, - /obj/item/clothing/mask/gas/hecu2 = 1, - /obj/item/clothing/mask/balaclavaadjust = 1, - ) - -/datum/supply_pack/imports/cin_surplus/fill(obj/structure/closet/crate/we_are_filling_this_crate) - for(var/i in 1 to 10) - var/item = pick_weight(contains) - new item(we_are_filling_this_crate) - /* * VENDING RESTOCKS */ diff --git a/modular_nova/modules/central_command_module/code/computers/station_goal_computer.dm b/modular_nova/modules/central_command_module/code/computers/station_goal_computer.dm index 44bd53615a4..b3e57477c7c 100644 --- a/modular_nova/modules/central_command_module/code/computers/station_goal_computer.dm +++ b/modular_nova/modules/central_command_module/code/computers/station_goal_computer.dm @@ -59,7 +59,6 @@ if(initial(iterating_goal.name) == selected_goal) var/datum/station_goal/goal_to_set = new iterating_goal() goal_to_set.send_report() - GLOB.station_goals += goal_to_set goal_assigned = TRUE break updateUsrDialog() diff --git a/modular_nova/modules/chat_colors/code/chat_color.dm b/modular_nova/modules/chat_colors/code/chat_color.dm index afbd6c61e6c..fc6f0347d8a 100644 --- a/modular_nova/modules/chat_colors/code/chat_color.dm +++ b/modular_nova/modules/chat_colors/code/chat_color.dm @@ -85,11 +85,11 @@ // There are special cases for greyscale and the red/blue/violet range if(hue == CM_COLOR_HUE_GREY) - processed_luminance = max(luminance, CM_COLOR_LUM_MIN_GREY) // greys have a higher floor on the allowed luminance value + processed_luminance = max(luminance, CM_COLOR_LUM_MIN_GREY) // greys have a lower floor on the allowed luminance value than the default else if(CM_COLOR_HUE_RANGE_UPPER > hue > CM_COLOR_HUE_RANGE_LOWER) - processed_luminance = min(luminance, CM_COLOR_LUM_MAX_DARK_RANGE) // colors in the deep reds/blues/violets range will have a slightly higher luminance floor than the rest + processed_luminance = min(luminance, CM_COLOR_LUM_MAX_DARK_RANGE) // colors in the deep reds/blues/violets range will have a slightly higher luminance floor than the default else - processed_luminance = max(luminance, CM_COLOR_LUM_MIN) // everything else gets the default + processed_luminance = max(luminance, CM_COLOR_LUM_MIN) // everything else gets the default floor // Convert it back to a hex return rgb(hue, saturation*sat_shift, processed_luminance*lum_shift, space = COLORSPACE_HSL) diff --git a/modular_nova/modules/clock_cult/code/structures/technologists_lectern.dm b/modular_nova/modules/clock_cult/code/structures/technologists_lectern.dm index fbbb8de5e4f..11759912286 100644 --- a/modular_nova/modules/clock_cult/code/structures/technologists_lectern.dm +++ b/modular_nova/modules/clock_cult/code/structures/technologists_lectern.dm @@ -428,10 +428,11 @@ apc_loop: for(var/obj/machinery/power/apc/controller as anything in SSmachines.get_machines_by_type_and_subtypes(/obj/machinery/power/apc)) var/area/apc_area = get_area(controller) // make sure that no "critical" APCs lose their power (SM, namely) - for(var/turf/turf as anything in apc_area.get_contained_turfs()) - for(var/obj/machinery/depowered_machinery in turf) - if(depowered_machinery.critical_machine) - continue apc_loop + for(var/list/zlevel_turfs as anything in apc_area.get_zlevel_turf_lists()) + for(var/turf/turf as anything in zlevel_turfs) + for(var/obj/machinery/depowered_machinery in turf) + if(depowered_machinery.critical_machine) + continue apc_loop controller.cell?.charge = 0 diff --git a/modular_nova/modules/colony_fabricator/code/appliances/chem_machines.dm b/modular_nova/modules/colony_fabricator/code/appliances/chem_machines.dm index 63e0831f6d3..045adfc4733 100644 --- a/modular_nova/modules/colony_fabricator/code/appliances/chem_machines.dm +++ b/modular_nova/modules/colony_fabricator/code/appliances/chem_machines.dm @@ -12,10 +12,13 @@ var/static/list/synthesizable_reagents = list( /datum/reagent/water, ) + /// What this repacks into + var/repacked_type = /obj/item/flatpacked_machine/water_synth -/obj/machinery/plumbing/synthesizer/water_synth/Initialize(mapload, bolt, layer) +/obj/machinery/plumbing/synthesizer/water_synth/Initialize(mapload, bolt = FALSE, layer) . = ..() dispensable_reagents = synthesizable_reagents + AddElement(/datum/element/repackable, repacked_type, 2 SECONDS) AddElement(/datum/element/manufacturer_examine, COMPANY_FRONTIER) // Deployable item for cargo for the water synth @@ -27,6 +30,10 @@ w_class = WEIGHT_CLASS_NORMAL type_to_deploy = /obj/machinery/plumbing/synthesizer/water_synth deploy_time = 2 SECONDS + custom_materials = list( + /datum/material/iron = SHEET_MATERIAL_AMOUNT * 2.5, + /datum/material/glass = SHEET_MATERIAL_AMOUNT, + ) // Machine that makes botany nutrients for hydroponics farming @@ -48,10 +55,13 @@ /datum/reagent/toxin/plantbgone/weedkiller, /datum/reagent/toxin/pestkiller, ) + /// What this repacks into + var/repacked_type = /obj/item/flatpacked_machine/hydro_synth -/obj/machinery/plumbing/synthesizer/colony_hydroponics/Initialize(mapload, bolt, layer) +/obj/machinery/plumbing/synthesizer/colony_hydroponics/Initialize(mapload, bolt = FALSE, layer) . = ..() dispensable_reagents = synthesizable_reagents + AddElement(/datum/element/repackable, repacked_type, 2 SECONDS) AddElement(/datum/element/manufacturer_examine, COMPANY_FRONTIER) // Deployable item for cargo for the hydro synth @@ -63,6 +73,10 @@ w_class = WEIGHT_CLASS_NORMAL type_to_deploy = /obj/machinery/plumbing/synthesizer/colony_hydroponics deploy_time = 2 SECONDS + custom_materials = list( + /datum/material/iron = SHEET_MATERIAL_AMOUNT * 2.5, + /datum/material/glass = SHEET_MATERIAL_AMOUNT, + ) // Chem dispenser with a limited range of thematic reagents to dispense @@ -117,8 +131,9 @@ powerefficiency = 0.5 recharge_amount = 50 -/obj/machinery/chem_dispenser/frontier_appliance/default_deconstruction_crowbar() - return +/obj/machinery/chem_dispenser/frontier_appliance/examine(mob/user) + . = ..() + . += span_notice("It cannot be repacked, but can be deconstructed normally.") // Deployable item for cargo for the sustenance machine @@ -129,3 +144,8 @@ w_class = WEIGHT_CLASS_NORMAL type_to_deploy = /obj/machinery/chem_dispenser/frontier_appliance deploy_time = 2 SECONDS + custom_materials = list( + /datum/material/iron = SHEET_MATERIAL_AMOUNT * 2, + /datum/material/glass = SHEET_MATERIAL_AMOUNT, + /datum/material/titanium = HALF_SHEET_MATERIAL_AMOUNT, + ) diff --git a/modular_nova/modules/colony_fabricator/code/appliances/co2_cracker.dm b/modular_nova/modules/colony_fabricator/code/appliances/co2_cracker.dm index 51901079aed..66b78ca16d8 100644 --- a/modular_nova/modules/colony_fabricator/code/appliances/co2_cracker.dm +++ b/modular_nova/modules/colony_fabricator/code/appliances/co2_cracker.dm @@ -71,10 +71,13 @@ GLOBAL_LIST_INIT(cracker_reactions, cracker_reactions_list()) working_power = 1 /// Soundloop for while the thermomachine is turned on var/datum/looping_sound/conditioner_running/soundloop + /// What this repacks into + var/repacked_type = /obj/item/flatpacked_machine/co2_cracker /obj/machinery/electrolyzer/co2_cracker/Initialize(mapload) . = ..() soundloop = new(src, FALSE) + AddElement(/datum/element/repackable, repacked_type, 2 SECONDS) AddElement(/datum/element/manufacturer_examine, COMPANY_FRONTIER) /obj/machinery/electrolyzer/co2_cracker/process_atmos() diff --git a/modular_nova/modules/colony_fabricator/code/appliances/foodricator.dm b/modular_nova/modules/colony_fabricator/code/appliances/foodricator.dm index 51274cb99a8..4797275bbeb 100644 --- a/modular_nova/modules/colony_fabricator/code/appliances/foodricator.dm +++ b/modular_nova/modules/colony_fabricator/code/appliances/foodricator.dm @@ -10,7 +10,7 @@ pass_flags = PASSTABLE efficiency = 1 productivity = 2.5 - anchored_tabletop_offset = 8 + anchored_tabletop_offset = 6 show_categories = list( RND_CATEGORY_AKHTER_FOODRICATOR_INGREDIENTS, RND_CATEGORY_AKHTER_FOODRICATOR_BAGS, @@ -18,10 +18,13 @@ RND_CATEGORY_AKHTER_FOODRICATOR_UTENSILS, RND_CATEGORY_AKHTER_SEEDS, ) + /// What this repacks into + var/repacked_type = /obj/item/flatpacked_machine/organics_ration_printer /obj/machinery/biogenerator/foodricator/Initialize(mapload) . = ..() AddElement(/datum/element/manufacturer_examine, COMPANY_FRONTIER) + AddElement(/datum/element/repackable, repacked_type, 5 SECONDS) /obj/machinery/biogenerator/foodricator/RefreshParts() . = ..() @@ -38,6 +41,7 @@ icon = 'modular_nova/modules/colony_fabricator/icons/foodricator.dmi' icon_state = "biogenerator_parts" type_to_deploy = /obj/machinery/biogenerator/foodricator + w_class = WEIGHT_CLASS_NORMAL custom_materials = list( /datum/material/iron = SHEET_MATERIAL_AMOUNT * 5, /datum/material/glass = SHEET_MATERIAL_AMOUNT * 2, diff --git a/modular_nova/modules/colony_fabricator/code/appliances/kitchen_appliances/griddle.dm b/modular_nova/modules/colony_fabricator/code/appliances/kitchen_appliances/griddle.dm new file mode 100644 index 00000000000..0d79cbf2d74 --- /dev/null +++ b/modular_nova/modules/colony_fabricator/code/appliances/kitchen_appliances/griddle.dm @@ -0,0 +1,38 @@ +/obj/machinery/griddle/frontier_tabletop + name = "tabletop griddle" + desc = "A griddle type slim enough to fit atop a table without much fuss. This type in particular \ + was made to be broken down into many parts and shipped across the glaxy. This makes it a favourite in \ + pop-up food stalls and colony kitchens all around." + icon = 'modular_nova/modules/colony_fabricator/icons/kitchen_stuff/griddle.dmi' + icon_state = "griddletable_off" + variant = "table" + pass_flags_self = LETPASSTHROW + pass_flags = PASSTABLE + circuit = null + // Lines up perfectly with tables when anchored on them + anchored_tabletop_offset = 3 + /// What type this repacks into + var/repacked_type = /obj/item/flatpacked_machine/frontier_griddle + +/obj/machinery/griddle/frontier_tabletop/Initialize(mapload) + . = ..() + AddElement(/datum/element/repackable, repacked_type, 2 SECONDS) + AddElement(/datum/element/manufacturer_examine, COMPANY_FRONTIER) + +/obj/machinery/griddle/frontier_tabletop/unanchored + anchored = FALSE + +// Deployable item for cargo + +/obj/item/flatpacked_machine/frontier_griddle + name = "flat-packed tabletop griddle" + icon = 'modular_nova/modules/colony_fabricator/icons/kitchen_stuff/griddle.dmi' + icon_state = "griddle_parts" + w_class = WEIGHT_CLASS_NORMAL + type_to_deploy = /obj/machinery/griddle/frontier_tabletop + deploy_time = 2 SECONDS + custom_materials = list( + /datum/material/iron = SHEET_MATERIAL_AMOUNT * 7, + /datum/material/glass = SHEET_MATERIAL_AMOUNT * 3, + /datum/material/silver = HALF_SHEET_MATERIAL_AMOUNT, + ) diff --git a/modular_nova/modules/colony_fabricator/code/appliances/kitchen_appliances/macrowave.dm b/modular_nova/modules/colony_fabricator/code/appliances/kitchen_appliances/macrowave.dm new file mode 100644 index 00000000000..8359250d438 --- /dev/null +++ b/modular_nova/modules/colony_fabricator/code/appliances/kitchen_appliances/macrowave.dm @@ -0,0 +1,42 @@ +/obj/machinery/microwave/frontier_printed + desc = "A plastic-paneled microwave oven, capable of doing anything a standard microwave could do. \ + This one is special designed to be tightly packed into a shape that can be easily re-assembled \ + later from the factory. There don't seem to be included instructions on getting it folded back \ + together, though..." + icon = 'modular_nova/modules/colony_fabricator/icons/kitchen_stuff/microwave.dmi' + circuit = null + max_n_of_items = 5 + efficiency = 2 + vampire_charging_capable = TRUE + +/obj/machinery/microwave/frontier_printed/Initialize(mapload) + . = ..() + AddElement(/datum/element/manufacturer_examine, COMPANY_FRONTIER) + +/obj/machinery/microwave/frontier_printed/RefreshParts() + . = ..() + max_n_of_items = 5 + efficiency = 2 + vampire_charging_capable = TRUE + +/obj/machinery/microwave/frontier_printed/examine(mob/user) + . = ..() + . += span_notice("It cannot be repacked, but can be deconstructed normally.") + +/obj/machinery/microwave/frontier_printed/unanchored + anchored = FALSE + +// Deployable item for cargo + +/obj/item/flatpacked_machine/macrowave + name = "microwave oven parts kit" + icon = 'modular_nova/modules/colony_fabricator/icons/kitchen_stuff/microwave.dmi' + icon_state = "packed_microwave" + w_class = WEIGHT_CLASS_NORMAL + type_to_deploy = /obj/machinery/microwave/frontier_printed + deploy_time = 2 SECONDS + custom_materials = list( + /datum/material/iron = SHEET_MATERIAL_AMOUNT * 5, + /datum/material/glass = SHEET_MATERIAL_AMOUNT * 2, + /datum/material/silver = HALF_SHEET_MATERIAL_AMOUNT, + ) diff --git a/modular_nova/modules/colony_fabricator/code/appliances/kitchen_appliances/range.dm b/modular_nova/modules/colony_fabricator/code/appliances/kitchen_appliances/range.dm new file mode 100644 index 00000000000..6f8c48bf789 --- /dev/null +++ b/modular_nova/modules/colony_fabricator/code/appliances/kitchen_appliances/range.dm @@ -0,0 +1,38 @@ +/obj/machinery/oven/range_frontier + name = "frontier range" + desc = "A combined oven and stove commonly seen on the frontier. Comes from the factory packed up \ + in a neatly compact format that can then be deployed into a nearly full size appliance. \ + It seems, however, that the designer forgot to include instructions on packing these things back up." + icon = 'modular_nova/modules/colony_fabricator/icons/kitchen_stuff/range.dmi' + icon_state = "range_off" + base_icon_state = "range" + pass_flags_self = PASSMACHINE|PASSTABLE|LETPASSTHROW + active_power_usage = BASE_MACHINE_ACTIVE_CONSUMPTION * 1.2 + circuit = null + +/obj/machinery/oven/range_frontier/Initialize(mapload) + . = ..() + AddElement(/datum/element/manufacturer_examine, COMPANY_FRONTIER) + AddComponent(/datum/component/stove, container_x = -3, container_y = 14) + +/obj/machinery/oven/range_frontier/examine(mob/user) + . = ..() + . += span_notice("It cannot be repacked, but can be deconstructed normally.") + +/obj/machinery/oven/range_frontier/unanchored + anchored = FALSE + +// Deployable item for cargo + +/obj/item/flatpacked_machine/frontier_range + name = "frontier range parts kit" + icon = 'modular_nova/modules/colony_fabricator/icons/kitchen_stuff/range.dmi' + icon_state = "range_packed" + w_class = WEIGHT_CLASS_NORMAL + type_to_deploy = /obj/machinery/oven/range_frontier + deploy_time = 2 SECONDS + custom_materials = list( + /datum/material/iron = SHEET_MATERIAL_AMOUNT * 7, + /datum/material/glass = SHEET_MATERIAL_AMOUNT * 3, + /datum/material/silver = HALF_SHEET_MATERIAL_AMOUNT, + ) diff --git a/modular_nova/modules/colony_fabricator/code/appliances/space_heater.dm b/modular_nova/modules/colony_fabricator/code/appliances/space_heater.dm new file mode 100644 index 00000000000..6d3adc3108e --- /dev/null +++ b/modular_nova/modules/colony_fabricator/code/appliances/space_heater.dm @@ -0,0 +1,58 @@ +/obj/machinery/space_heater/wall_mounted + name = "mounted heater" + desc = "A compact heating and cooling device for small scale applications, made to mount onto walls up and out of the way. \ + Like other, more free-standing space heaters however, these still require cell power to function." + icon = 'modular_nova/modules/colony_fabricator/icons/space_heater.dmi' + anchored = TRUE + density = FALSE + circuit = null + heating_power = 20000 + efficiency = 10000 + display_panel = TRUE + /// What this repacks into when its wrenched off a wall + var/repacked_type = /obj/item/wallframe/wall_heater + +MAPPING_DIRECTIONAL_HELPERS(/obj/machinery/space_heater/wall_mounted, 29) + +/obj/machinery/space_heater/wall_mounted/Initialize(mapload) + . = ..() + find_and_hang_on_wall() + AddElement(/datum/element/manufacturer_examine, COMPANY_FRONTIER) + +/obj/machinery/space_heater/wall_mounted/RefreshParts() + . = ..() + heating_power = 20000 + efficiency = 10000 + +/obj/machinery/space_heater/wall_mounted/default_deconstruction_crowbar() + return + +/obj/machinery/space_heater/wall_mounted/default_unfasten_wrench(mob/living/user, obj/item/wrench, time) + user.balloon_alert(user, "deconstructing...") + wrench.play_tool_sound(src) + if(wrench.use_tool(src, user, 1 SECONDS)) + playsound(loc, 'sound/items/deconstruct.ogg', 50, TRUE) + deconstruct(TRUE) + return + +/obj/machinery/space_heater/wall_mounted/on_deconstruction(disassembled) + if(disassembled) + new repacked_type(drop_location()) + return ..() + +// Wallmount for creating the heaters + +/obj/item/wallframe/wall_heater + name = "unmounted wall heater" + desc = "A compact heating and cooling device for small scale applications, made to mount onto walls up and out of the way. \ + Like other, more free-standing space heaters however, these still require cell power to function." + icon = 'modular_nova/modules/colony_fabricator/icons/space_heater.dmi' + icon_state = "sheater-off" + w_class = WEIGHT_CLASS_NORMAL + result_path = /obj/machinery/space_heater/wall_mounted + pixel_shift = 29 + custom_materials = list( + /datum/material/iron = SHEET_MATERIAL_AMOUNT * 4, + /datum/material/silver = SHEET_MATERIAL_AMOUNT * 1, + /datum/material/gold = SMALL_MATERIAL_AMOUNT, + ) diff --git a/modular_nova/modules/colony_fabricator/code/appliances/wall_cell_charger.dm b/modular_nova/modules/colony_fabricator/code/appliances/wall_cell_charger.dm index ace5e9a5e54..97e341809ac 100644 --- a/modular_nova/modules/colony_fabricator/code/appliances/wall_cell_charger.dm +++ b/modular_nova/modules/colony_fabricator/code/appliances/wall_cell_charger.dm @@ -27,10 +27,9 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/machinery/cell_charger_multi/wall_mounted, 29) deconstruct(TRUE) return -/obj/machinery/cell_charger_multi/wall_mounted/deconstruct(disassembled) +/obj/machinery/cell_charger_multi/wall_mounted/on_deconstruction(disassembled) if(disassembled) new repacked_type(drop_location()) - return ..() /obj/machinery/cell_charger_multi/wall_mounted/RefreshParts() . = ..() diff --git a/modular_nova/modules/colony_fabricator/code/appliances/wind_turbine.dm b/modular_nova/modules/colony_fabricator/code/appliances/wind_turbine.dm index 1713f78a925..5f6dcfffdc8 100644 --- a/modular_nova/modules/colony_fabricator/code/appliances/wind_turbine.dm +++ b/modular_nova/modules/colony_fabricator/code/appliances/wind_turbine.dm @@ -80,6 +80,7 @@ icon = 'modular_nova/modules/colony_fabricator/icons/wind_turbine.dmi' icon_state = "turbine_packed" type_to_deploy = /obj/machinery/power/colony_wind_turbine + w_class = WEIGHT_CLASS_NORMAL custom_materials = list( /datum/material/iron = SHEET_MATERIAL_AMOUNT * 5, /datum/material/glass = SHEET_MATERIAL_AMOUNT * 2, diff --git a/modular_nova/modules/colony_fabricator/code/cargo_packs.dm b/modular_nova/modules/colony_fabricator/code/cargo_packs.dm new file mode 100644 index 00000000000..9f9611b335f --- /dev/null +++ b/modular_nova/modules/colony_fabricator/code/cargo_packs.dm @@ -0,0 +1,49 @@ +// Service + +/datum/supply_pack/service/hydro_synthesizers + name = "Hydroponics Plumbing Synthesizer Pack" + desc = "Watering and feeding your plants got you down? Worry no further as this kit contains two each of water and hydroponics fertilizer synthesizers." + cost = CARGO_CRATE_VALUE * 2 + contains = list( + /obj/machinery/plumbing/synthesizer/water_synth, + /obj/machinery/plumbing/synthesizer/water_synth, + /obj/machinery/plumbing/synthesizer/colony_hydroponics, + /obj/machinery/plumbing/synthesizer/colony_hydroponics, + ) + crate_name = "hydroponics synthesizers crate" + crate_type = /obj/structure/closet/crate/hydroponics + +/datum/supply_pack/service/frontier_kitchen + name = "Frontier Kitchen Equipment" + desc = "A range of frontier appliance classics, enough to set up a functioning kitchen no matter where you are in the galaxy." + cost = CARGO_CRATE_VALUE * 5 + contains = list( + /obj/machinery/plumbing/synthesizer/water_synth, + /obj/machinery/chem_dispenser/frontier_appliance, + /obj/machinery/griddle/frontier_tabletop/unanchored, + /obj/machinery/microwave/frontier_printed/unanchored, + /obj/machinery/oven/range_frontier/unanchored, + /obj/machinery/biogenerator/foodricator, + ) + crate_name = "frontier kitchen crate" + +// Engineering + +/datum/supply_pack/engineering/colony_starter + name = "Colonization Starter Kit" + desc = "The Sol standard minimum kit for frontier colonization, contains everything you need to construct a mostly functioning colony in most places across the galaxy." + cost = CARGO_CRATE_VALUE * 11 // 6 for the lathe, 3 for the organics printer, 2 for the rest of the stuff + contains = list( + /obj/item/flatpacked_machine, + /obj/item/flatpacked_machine/organics_printer, + /obj/item/flatpacked_machine/gps_beacon, + /obj/item/stack/sheet/plastic_wall_panel/fifty, + /obj/item/stack/rods/twentyfive, + /obj/item/stack/sheet/iron/twenty, + /obj/item/flatpacked_machine/airlock_kit_manual, + /obj/item/flatpacked_machine/airlock_kit_manual, + /obj/item/wallframe/apc, + /obj/item/electronics/apc, + /obj/item/stock_parts/cell/high, + ) + crate_name = "colonization kit crate" diff --git a/modular_nova/modules/colony_fabricator/code/colony_fabricator.dm b/modular_nova/modules/colony_fabricator/code/colony_fabricator.dm index 9f83c4c8c90..f74cf23dda5 100644 --- a/modular_nova/modules/colony_fabricator/code/colony_fabricator.dm +++ b/modular_nova/modules/colony_fabricator/code/colony_fabricator.dm @@ -12,7 +12,6 @@ obj_flags = CAN_BE_HIT | NO_DECONSTRUCTION light_color = LIGHT_COLOR_BRIGHT_YELLOW light_power = 5 - charges_tax = FALSE allowed_buildtypes = COLONY_FABRICATOR /// The item we turn into when repacked var/repacked_type = /obj/item/flatpacked_machine @@ -33,18 +32,17 @@ QDEL_NULL(soundloop) return ..() -/obj/machinery/rnd/production/colony_lathe/user_try_print_id(design_id, print_quantity) - . = ..() - - if(!.) - return +/// Proc for starting extra printing visuals, because upstream removed any nice way to do this +/obj/machinery/rnd/production/proc/start_printing_visuals() + return +/obj/machinery/rnd/production/colony_lathe/start_printing_visuals() soundloop.start() set_light(l_range = 1.5) icon_state = "colony_lathe_working" update_appearance() -/obj/machinery/rnd/production/colony_lathe/do_print(path, amount) +/obj/machinery/rnd/production/colony_lathe/finalize_build() . = ..() soundloop.stop() set_light(l_range = 0) @@ -52,8 +50,8 @@ update_appearance() flick("colony_lathe_finish_print", src) -/obj/machinery/rnd/production/colony_lathe/calculate_efficiency() - efficiency_coeff = 1 +/obj/machinery/rnd/production/colony_lathe/build_efficiency() + return 1 // We take from all nodes even unresearched ones /obj/machinery/rnd/production/colony_lathe/update_designs() diff --git a/modular_nova/modules/colony_fabricator/code/construction/doors.dm b/modular_nova/modules/colony_fabricator/code/construction/doors.dm index a40a15ef9e6..1fbf4dc595a 100644 --- a/modular_nova/modules/colony_fabricator/code/construction/doors.dm +++ b/modular_nova/modules/colony_fabricator/code/construction/doors.dm @@ -25,6 +25,7 @@ icon = 'modular_nova/modules/colony_fabricator/icons/doors/packed.dmi' icon_state = "shutters_parts" type_to_deploy = /obj/machinery/door/poddoor/shutters/colony_fabricator/preopen + w_class = WEIGHT_CLASS_NORMAL custom_materials = list( /datum/material/iron = SHEET_MATERIAL_AMOUNT * 5, /datum/material/glass = SHEET_MATERIAL_AMOUNT * 2, @@ -50,6 +51,7 @@ icon = 'modular_nova/modules/colony_fabricator/icons/doors/packed.dmi' icon_state = "airlock_parts" type_to_deploy = /obj/machinery/door/airlock/colony_prefab + w_class = WEIGHT_CLASS_NORMAL custom_materials = list( /datum/material/iron = SHEET_MATERIAL_AMOUNT * 5, /datum/material/glass = SHEET_MATERIAL_AMOUNT * 2, diff --git a/modular_nova/modules/colony_fabricator/code/construction/turfs.dm b/modular_nova/modules/colony_fabricator/code/construction/turfs.dm index c4865faa9ce..2257b6080a5 100644 --- a/modular_nova/modules/colony_fabricator/code/construction/turfs.dm +++ b/modular_nova/modules/colony_fabricator/code/construction/turfs.dm @@ -87,9 +87,6 @@ GLOBAL_LIST_INIT(plastic_wall_panel_recipes, list( merge_type = /obj/item/stack/tile/catwalk_tile/colony_lathe tile_reskin_types = null -/obj/item/stack/tile/catwalk_tile/colony_lathe/lathe_spawn - amount = 4 - /obj/item/stack/tile/iron/colony name = "prefab floor tiles" singular_name = "prefab floor tile" @@ -107,9 +104,6 @@ GLOBAL_LIST_INIT(plastic_wall_panel_recipes, list( /obj/item/stack/tile/iron/colony/white/bolts, ) -/obj/item/stack/tile/iron/colony/lathe_spawn - amount = 4 - // Grated floor tile, for seeing wires under /turf/open/floor/catwalk_floor/colony_fabricator diff --git a/modular_nova/modules/colony_fabricator/code/design_datums/appliances.dm b/modular_nova/modules/colony_fabricator/code/design_datums/appliances.dm index 8a4a70f318f..a7efee044b8 100644 --- a/modular_nova/modules/colony_fabricator/code/design_datums/appliances.dm +++ b/modular_nova/modules/colony_fabricator/code/design_datums/appliances.dm @@ -25,6 +25,10 @@ "co2_cracker", "portable_recycler", "foodricator", + "wall_heater", + "macrowave", + "frontier_range", + "tabletop_griddle", ) research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 5000000000000000) // God save you hidden = TRUE @@ -80,6 +84,24 @@ ) construction_time = 30 SECONDS +/// Space heater, but it mounts on walls + +/datum/design/wall_mounted_space_heater + name = "Mounted Heater" + id = "wall_heater" + build_type = COLONY_FABRICATOR + materials = list( + /datum/material/iron = SHEET_MATERIAL_AMOUNT * 4, + /datum/material/silver = SHEET_MATERIAL_AMOUNT * 1, + /datum/material/gold = SMALL_MATERIAL_AMOUNT, + ) + build_path = /obj/item/wallframe/wall_heater + category = list( + RND_CATEGORY_INITIAL, + FABRICATOR_CATEGORY_APPLIANCES + FABRICATOR_SUBCATEGORY_ATMOS, + ) + construction_time = 15 SECONDS + // Plumbable chem machine that makes nothing but water /datum/design/water_synthesizer @@ -90,12 +112,12 @@ /datum/material/iron = SHEET_MATERIAL_AMOUNT * 2.5, /datum/material/glass = SHEET_MATERIAL_AMOUNT, ) - build_path = /obj/machinery/plumbing/synthesizer/water_synth + build_path = /obj/item/flatpacked_machine/water_synth category = list( RND_CATEGORY_INITIAL, FABRICATOR_CATEGORY_APPLIANCES + FABRICATOR_SUBCATEGORY_FLUIDS, ) - construction_time = 10 SECONDS + construction_time = 30 SECONDS // Plumbable chem machine that makes nothing but water @@ -107,12 +129,12 @@ /datum/material/iron = SHEET_MATERIAL_AMOUNT * 2.5, /datum/material/glass = SHEET_MATERIAL_AMOUNT, ) - build_path = /obj/machinery/plumbing/synthesizer/colony_hydroponics + build_path = /obj/item/flatpacked_machine/hydro_synth category = list( RND_CATEGORY_INITIAL, FABRICATOR_CATEGORY_APPLIANCES + FABRICATOR_SUBCATEGORY_FLUIDS, ) - construction_time = 10 SECONDS + construction_time = 30 SECONDS // Chem dispenser that dispenses various flavored beverages and nutrislop, yum! @@ -125,7 +147,7 @@ /datum/material/glass = SHEET_MATERIAL_AMOUNT, /datum/material/titanium = HALF_SHEET_MATERIAL_AMOUNT, ) - build_path = /obj/machinery/chem_dispenser/frontier_appliance + build_path = /obj/item/flatpacked_machine/sustenance_machine category = list( RND_CATEGORY_INITIAL, FABRICATOR_CATEGORY_APPLIANCES + FABRICATOR_SUBCATEGORY_SUSTENANCE, @@ -143,7 +165,7 @@ /datum/material/glass = SHEET_MATERIAL_AMOUNT * 3, /datum/material/plasma = HALF_SHEET_MATERIAL_AMOUNT, // We're gonna pretend plasma is the catalyst for co2 cracking ) - build_path = /obj/machinery/electrolyzer/co2_cracker + build_path = /obj/item/flatpacked_machine/co2_cracker category = list( RND_CATEGORY_INITIAL, FABRICATOR_CATEGORY_APPLIANCES + FABRICATOR_SUBCATEGORY_ATMOS, @@ -161,7 +183,7 @@ /datum/material/glass = SHEET_MATERIAL_AMOUNT * 3, /datum/material/titanium = HALF_SHEET_MATERIAL_AMOUNT, // Titan for the crushing element ) - build_path = /obj/machinery/colony_recycler + build_path = /obj/item/flatpacked_machine/recycler category = list( RND_CATEGORY_INITIAL, FABRICATOR_CATEGORY_APPLIANCES + FABRICATOR_SUBCATEGORY_MATERIALS, @@ -187,6 +209,60 @@ ) construction_time = 30 SECONDS +// Really, its just a microwave + +/datum/design/macrowave + name = "Microwave Oven" + id = "macrowave" + build_type = COLONY_FABRICATOR + materials = list( + /datum/material/iron = SHEET_MATERIAL_AMOUNT * 5, + /datum/material/glass = SHEET_MATERIAL_AMOUNT * 2, + /datum/material/silver = HALF_SHEET_MATERIAL_AMOUNT, + ) + build_path = /obj/item/flatpacked_machine/macrowave + category = list( + RND_CATEGORY_INITIAL, + FABRICATOR_CATEGORY_APPLIANCES + FABRICATOR_SUBCATEGORY_SUSTENANCE, + ) + construction_time = 30 SECONDS + +// A range, but it looks cool af + +/datum/design/frontier_range + name = "Frontier Range" + id = "frontier_range" + build_type = COLONY_FABRICATOR + materials = list( + /datum/material/iron = SHEET_MATERIAL_AMOUNT * 7, + /datum/material/glass = SHEET_MATERIAL_AMOUNT * 3, + /datum/material/silver = HALF_SHEET_MATERIAL_AMOUNT, + ) + build_path = /obj/item/flatpacked_machine/frontier_range + category = list( + RND_CATEGORY_INITIAL, + FABRICATOR_CATEGORY_APPLIANCES + FABRICATOR_SUBCATEGORY_SUSTENANCE, + ) + construction_time = 1 MINUTES + +// Griddles that fit on top of any regular table + +/datum/design/tabletop_griddle + name = "Tabletop Griddle" + id = "tabletop_griddle" + build_type = COLONY_FABRICATOR + materials = list( + /datum/material/iron = SHEET_MATERIAL_AMOUNT * 7, + /datum/material/glass = SHEET_MATERIAL_AMOUNT * 3, + /datum/material/silver = HALF_SHEET_MATERIAL_AMOUNT, + ) + build_path = /obj/item/flatpacked_machine/frontier_griddle + category = list( + RND_CATEGORY_INITIAL, + FABRICATOR_CATEGORY_APPLIANCES + FABRICATOR_SUBCATEGORY_SUSTENANCE, + ) + construction_time = 1 MINUTES + #undef FABRICATOR_CATEGORY_APPLIANCES #undef FABRICATOR_SUBCATEGORY_POWER #undef FABRICATOR_SUBCATEGORY_ATMOS diff --git a/modular_nova/modules/colony_fabricator/code/design_datums/construction.dm b/modular_nova/modules/colony_fabricator/code/design_datums/construction.dm index 7e5e608aca3..5d44f2d155c 100644 --- a/modular_nova/modules/colony_fabricator/code/design_datums/construction.dm +++ b/modular_nova/modules/colony_fabricator/code/design_datums/construction.dm @@ -36,7 +36,7 @@ RND_CATEGORY_INITIAL, RND_CATEGORY_CONSTRUCTION + FABRICATOR_SUBCATEGORY_STRUCTURES, ) - construction_time = 30 SECONDS + construction_time = 10 SECONDS // Manul Airlock kit @@ -53,7 +53,7 @@ RND_CATEGORY_INITIAL, RND_CATEGORY_CONSTRUCTION + FABRICATOR_SUBCATEGORY_STRUCTURES, ) - construction_time = 30 SECONDS + construction_time = 5 SECONDS // Shutters kit @@ -70,55 +70,55 @@ RND_CATEGORY_INITIAL, RND_CATEGORY_CONSTRUCTION + FABRICATOR_SUBCATEGORY_STRUCTURES, ) - construction_time = 30 SECONDS + construction_time = 10 SECONDS // Fancy floor tiles /datum/design/prefab_floor_tile - name = "Prefab Floor Tile x4" + name = "Prefab Floor Tile" id = "prefab_floor_tile" build_type = COLONY_FABRICATOR materials = list( - /datum/material/iron = SHEET_MATERIAL_AMOUNT, + /datum/material/iron = SHEET_MATERIAL_AMOUNT / 4, ) - build_path = /obj/item/stack/tile/iron/colony/lathe_spawn + build_path = /obj/item/stack/tile/iron/colony category = list( RND_CATEGORY_INITIAL, RND_CATEGORY_CONSTRUCTION + FABRICATOR_SUBCATEGORY_STRUCTURES, ) - construction_time = 15 SECONDS + construction_time = 0.5 SECONDS // Fancy catwalk floor tiles /datum/design/prefab_cat_floor_tile - name = "Prefab Catwalk Plating x4" + name = "Prefab Catwalk Plating" id = "prefab_cat_floor_tile" build_type = COLONY_FABRICATOR materials = list( - /datum/material/iron = SHEET_MATERIAL_AMOUNT, + /datum/material/iron = SHEET_MATERIAL_AMOUNT / 4, ) - build_path = /obj/item/stack/tile/catwalk_tile/colony_lathe/lathe_spawn + build_path = /obj/item/stack/tile/catwalk_tile/colony_lathe category = list( RND_CATEGORY_INITIAL, RND_CATEGORY_CONSTRUCTION + FABRICATOR_SUBCATEGORY_STRUCTURES, ) - construction_time = 15 SECONDS + construction_time = 0.5 SECONDS // Plastic wall panels, twice the wall for the same price in plastic, efficient! /datum/design/colony_fab_plastic_wall_panel - name = "Plastic Paneling x10" + name = "Plastic Paneling" id = "colony_fab_plastic_wall_panel" build_type = COLONY_FABRICATOR materials = list( - /datum/material/plastic = SHEET_MATERIAL_AMOUNT * 5, - /datum/material/glass = SHEET_MATERIAL_AMOUNT * 5, + /datum/material/plastic = HALF_SHEET_MATERIAL_AMOUNT, + /datum/material/glass = HALF_SHEET_MATERIAL_AMOUNT, ) build_path = /obj/item/stack/sheet/plastic_wall_panel/ten category = list( RND_CATEGORY_INITIAL, RND_CATEGORY_CONSTRUCTION + FABRICATOR_SUBCATEGORY_STRUCTURES, ) - construction_time = 15 SECONDS + construction_time = 1 SECONDS #undef FABRICATOR_SUBCATEGORY_STRUCTURES diff --git a/modular_nova/modules/colony_fabricator/code/design_datums/fabricator_flag_additions/machine_boards.dm b/modular_nova/modules/colony_fabricator/code/design_datums/fabricator_flag_additions/machine_boards.dm index 47560f14e6a..b05045ed60e 100644 --- a/modular_nova/modules/colony_fabricator/code/design_datums/fabricator_flag_additions/machine_boards.dm +++ b/modular_nova/modules/colony_fabricator/code/design_datums/fabricator_flag_additions/machine_boards.dm @@ -6,10 +6,6 @@ . = ..() build_type |= COLONY_FABRICATOR -/datum/design/board/microwave/New() - . = ..() - build_type |= COLONY_FABRICATOR - /datum/design/board/processor/New() . = ..() build_type |= COLONY_FABRICATOR @@ -18,14 +14,6 @@ . = ..() build_type |= COLONY_FABRICATOR -/datum/design/board/range/New() - . = ..() - build_type |= COLONY_FABRICATOR - -/datum/design/board/griddle/New() - . = ..() - build_type |= COLONY_FABRICATOR - /datum/design/board/reagentgrinder/New() . = ..() build_type |= COLONY_FABRICATOR diff --git a/modular_nova/modules/colony_fabricator/code/design_datums/fabricator_flag_additions/tools.dm b/modular_nova/modules/colony_fabricator/code/design_datums/fabricator_flag_additions/tools.dm index 92a68bade56..9d24a6d043f 100644 --- a/modular_nova/modules/colony_fabricator/code/design_datums/fabricator_flag_additions/tools.dm +++ b/modular_nova/modules/colony_fabricator/code/design_datums/fabricator_flag_additions/tools.dm @@ -107,3 +107,51 @@ /datum/design/spraycan/New() . = ..() build_type |= COLONY_FABRICATOR + +/datum/design/pickaxe/New() + . = ..() + build_type |= COLONY_FABRICATOR + +/datum/design/bucket/New() + . = ..() + build_type |= COLONY_FABRICATOR + +/datum/design/watering_can/New() + . = ..() + build_type |= COLONY_FABRICATOR + +/datum/design/mop/New() + . = ..() + build_type |= COLONY_FABRICATOR + +/datum/design/broom/New() + . = ..() + build_type |= COLONY_FABRICATOR + +/datum/design/tray/New() + . = ..() + build_type |= COLONY_FABRICATOR + +/datum/design/cultivator/New() + . = ..() + build_type |= COLONY_FABRICATOR + +/datum/design/plant_analyzer/New() + . = ..() + build_type |= COLONY_FABRICATOR + +/datum/design/shovel/New() + . = ..() + build_type |= COLONY_FABRICATOR + +/datum/design/spade/New() + . = ..() + build_type |= COLONY_FABRICATOR + +/datum/design/hatchet/New() + . = ..() + build_type |= COLONY_FABRICATOR + +/datum/design/secateurs/New() + . = ..() + build_type |= COLONY_FABRICATOR diff --git a/modular_nova/modules/colony_fabricator/code/design_datums/flatpack_machines.dm b/modular_nova/modules/colony_fabricator/code/design_datums/flatpack_machines.dm index 5912a347bd2..996a68ebf65 100644 --- a/modular_nova/modules/colony_fabricator/code/design_datums/flatpack_machines.dm +++ b/modular_nova/modules/colony_fabricator/code/design_datums/flatpack_machines.dm @@ -24,6 +24,7 @@ "flatpack_thermo", "flatpack_ore_silo", "flatpack_turbine_team_fortress_two", + "flatpack_bootleg_teg", ) research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 5000000000000000) // God save you hidden = TRUE @@ -33,7 +34,7 @@ // Lets the colony lathe make more colony lathes but at very hihg cost, for fun /datum/design/flatpack_colony_fabricator - name = "Flat-packed Colony Fabricator" + name = "Flat-Packed Colony Fabricator" desc = "A deployable fabricator capable of producing other flat-packed machines and other special equipment tailored for \ rapidly constructing functional structures given resources and power. While it cannot be upgraded, it can be repacked \ and moved to any location you see fit." @@ -51,12 +52,12 @@ RND_CATEGORY_INITIAL, FABRICATOR_CATEGORY_FLATPACK_MACHINES + FABRICATOR_SUBCATEGORY_MANUFACTURING, ) - construction_time = 30 SECONDS + construction_time = 2 MINUTES // Solar panels and trackers /datum/design/flatpack_solar_panel - name = "Flat-packed Solar Panel" + name = "Flat-Packed Solar Panel" desc = "A deployable solar panel, able to be repacked after placement for relocation or recycling." id = "flatpack_solar_panel" build_type = COLONY_FABRICATOR @@ -72,7 +73,7 @@ construction_time = 5 SECONDS /datum/design/flatpack_solar_tracker - name = "Flat-packed Solar Tracker" + name = "Flat-Packed Solar Tracker" desc = "A deployable solar tracker, able to be repacked after placement for relocation or recycling." id = "flatpack_solar_tracker" build_type = COLONY_FABRICATOR @@ -90,7 +91,7 @@ // Arc furance /datum/design/flatpack_arc_furnace - name = "Flat-packed Arc Furnace" + name = "Flat-Packed Arc Furnace" desc = "A deployable furnace for refining ores. While slower and less safe than conventional refining methods, \ it multiplies the output of refined materials enough to still outperform simply recycling ore." id = "flatpack_arc_furnace" @@ -109,7 +110,7 @@ // Power storage structures /datum/design/flatpack_power_storage - name = "Flat-packed Stationary Battery" + name = "Flat-Packed Stationary Battery" desc = "A deployable station-scale power cell with an overall low capacity, but high input and output rate." id = "flatpack_station_battery" build_type = COLONY_FABRICATOR @@ -126,7 +127,7 @@ construction_time = 20 SECONDS /datum/design/flatpack_power_storage_large - name = "Flat-packed Large Stationary Battery" + name = "Flat-Packed Large Stationary Battery" desc = "A deployable station-scale power cell with an overall extremely high capacity, but low input and output rate." id = "flatpack_station_battery_large" build_type = COLONY_FABRICATOR @@ -166,7 +167,7 @@ // Buildable RTG that is quite radioactive /datum/design/flatpack_rtg - name = "Flat-packed Radioisotope Thermoelectric Generator" + name = "Flat-Packed Radioisotope Thermoelectric Generator" desc = "A deployable radioisotope generator capable of producing a practically free trickle of power. \ Free if you can tolerate the radiation that the machine makes while deployed, that is." id = "flatpack_rtg" @@ -187,7 +188,7 @@ // Thermomachine with decent temperature change rate, but a limited max/min temperature /datum/design/flatpack_thermomachine - name = "Flat-packed Atmospheric Temperature Regulator" + name = "Flat-Packed Atmospheric Temperature Regulator" desc = "A deployable temperature control device for use with atmospherics pipe systems. \ Limited in its temperature range, however comes with a higher than normal heat capacity." id = "flatpack_thermo" @@ -206,7 +207,7 @@ // Ore silo except it beeps /datum/design/flatpack_ore_silo - name = "Flat-packed Ore Silo" + name = "Flat-Packed Ore Silo" desc = "An all-in-one materials management solution. Connects resource-using machines \ through a network of distrobution systems." id = "flatpack_ore_silo" @@ -225,7 +226,7 @@ // Wind turbine, produces tiny amounts of power when placed outdoors in an atmosphere, but makes significantly more if there's a storm in that area /datum/design/flatpack_turbine_team_fortress_two - name = "Flat-packed Miniature Wind Turbine" + name = "Flat-Packed Miniature Wind Turbine" desc = "A deployable fabricator capable of producing other flat-packed machines and other special equipment tailored for \ rapidly constructing functional structures given resources and power. While it cannot be upgraded, it can be repacked \ and moved to any location you see fit. This one makes specialized engineering designs and tools." @@ -243,6 +244,30 @@ ) construction_time = 30 SECONDS +// Stirling generator, kinda like a TEG but on a smaller scale and producing less insane amounts of power + +/datum/design/flatpack_bootleg_teg + name = "Flat-Packed Stirling Generator" + desc = "An industrial scale stirling generator. Stirling generators operate by intaking \ + hot gasses through their inlet pipes, and being cooled by the ambient air around them. \ + The cycling compression and expansion that this creates creates power, and this one is made \ + to make power on the scale of small stations and outposts." + id = "flatpack_bootleg_teg" + build_type = COLONY_FABRICATOR + materials = list( + /datum/material/iron = SHEET_MATERIAL_AMOUNT * 15, + /datum/material/glass = SHEET_MATERIAL_AMOUNT * 5, + /datum/material/plasma = SHEET_MATERIAL_AMOUNT * 10, + /datum/material/titanium = SHEET_MATERIAL_AMOUNT * 5, + /datum/material/gold = SHEET_MATERIAL_AMOUNT * 5, + ) + build_path = /obj/item/flatpacked_machine/stirling_generator + category = list( + RND_CATEGORY_INITIAL, + FABRICATOR_CATEGORY_FLATPACK_MACHINES + FABRICATOR_SUBCATEGORY_POWER, + ) + construction_time = 2 MINUTES + #undef FABRICATOR_CATEGORY_FLATPACK_MACHINES #undef FABRICATOR_SUBCATEGORY_MANUFACTURING #undef FABRICATOR_SUBCATEGORY_POWER diff --git a/modular_nova/modules/colony_fabricator/code/design_datums/rations_printer_designs/seeds.dm b/modular_nova/modules/colony_fabricator/code/design_datums/rations_printer_designs/seeds.dm index ed1590d71b3..f64ba01c5ff 100644 --- a/modular_nova/modules/colony_fabricator/code/design_datums/rations_printer_designs/seeds.dm +++ b/modular_nova/modules/colony_fabricator/code/design_datums/rations_printer_designs/seeds.dm @@ -75,12 +75,12 @@ RND_CATEGORY_AKHTER_SEEDS, ) -/datum/design/organic_herb_seed - name = "Pack of Herb Seeds" - id = "oganic_herb_seed" +/datum/design/organic_plump_helmet + name = "Pack of Plump-Helmet Seeds" + id = "oganic_plump_helmet" build_type = BIOGENERATOR materials = list(/datum/material/biomass = 25) - build_path = /obj/item/seeds/herbs + build_path = /obj/item/seeds/plump category = list( RND_CATEGORY_INITIAL, RND_CATEGORY_AKHTER_SEEDS, diff --git a/modular_nova/modules/colony_fabricator/code/machines/arc_furnace.dm b/modular_nova/modules/colony_fabricator/code/machines/arc_furnace.dm index 7e22e231f70..28b5c74628a 100644 --- a/modular_nova/modules/colony_fabricator/code/machines/arc_furnace.dm +++ b/modular_nova/modules/colony_fabricator/code/machines/arc_furnace.dm @@ -46,9 +46,8 @@ if(length(contents)) . += span_notice("It has [contents[1]] sitting in it.") -/obj/machinery/arc_furnace/deconstruct(disassembled = TRUE) +/obj/machinery/arc_furnace/on_deconstruction(disassembled) eject_contents() - return ..() /obj/machinery/arc_furnace/update_appearance() . = ..() @@ -169,6 +168,8 @@ where_we_spawn_air.atmos_spawn_air("co2=50;TEMP=1200") if(/obj/item/stack/sheet/mineral/titanium) where_we_spawn_air.atmos_spawn_air("n2=10;co2=10;TEMP=1200") + if(/obj/item/stack/sheet/mineral/plasma) + where_we_spawn_air.atmos_spawn_air("co2=75;TEMP=2000") else where_we_spawn_air.atmos_spawn_air("co2=20;TEMP=1200") diff --git a/modular_nova/modules/colony_fabricator/code/machines/ore_silo.dm b/modular_nova/modules/colony_fabricator/code/machines/ore_silo.dm index c06a99f40a1..8a072446591 100644 --- a/modular_nova/modules/colony_fabricator/code/machines/ore_silo.dm +++ b/modular_nova/modules/colony_fabricator/code/machines/ore_silo.dm @@ -4,12 +4,16 @@ through a network of distribution systems." icon = 'modular_nova/modules/colony_fabricator/icons/ore_silo.dmi' circuit = null - /// What this unpacks into - var/unpacked_type = /obj/item/flatpacked_machine/ore_silo + /// What this packs into + var/packed_type = /obj/item/flatpacked_machine/ore_silo /obj/machinery/ore_silo/colony_lathe/silo_log(obj/machinery/machinery_in_question, action, amount, noun, list/mats) . = ..() playsound(src, 'sound/machines/beep.ogg', 30, TRUE) + AddElement(/datum/element/repackable, packed_type, 10 SECONDS) + +/obj/machinery/ore_silo/colony_lathe/default_deconstruction_crowbar() + return // Item for deploying ore silos /obj/item/flatpacked_machine/ore_silo diff --git a/modular_nova/modules/colony_fabricator/code/machines/power_storage_unit.dm b/modular_nova/modules/colony_fabricator/code/machines/power_storage_unit.dm index 7bb15f98e8f..113e5234c4e 100644 --- a/modular_nova/modules/colony_fabricator/code/machines/power_storage_unit.dm +++ b/modular_nova/modules/colony_fabricator/code/machines/power_storage_unit.dm @@ -56,6 +56,11 @@ name = "flat-packed stationary battery" icon_state = "battery_small_packed" type_to_deploy = /obj/machinery/power/smes/battery_pack + custom_materials = list( + /datum/material/iron = SHEET_MATERIAL_AMOUNT * 7, + /datum/material/glass = SHEET_MATERIAL_AMOUNT * 2, + /datum/material/silver = HALF_SHEET_MATERIAL_AMOUNT, + ) // Larger station batteries, hold more but have less in/output @@ -83,3 +88,8 @@ name = "flat-packed large stationary battery" icon_state = "battery_large_packed" type_to_deploy = /obj/machinery/power/smes/battery_pack/large + custom_materials = list( + /datum/material/iron = SHEET_MATERIAL_AMOUNT * 12, + /datum/material/glass = SHEET_MATERIAL_AMOUNT * 4, + /datum/material/gold = SHEET_MATERIAL_AMOUNT, + ) diff --git a/modular_nova/modules/colony_fabricator/code/machines/solar_panels.dm b/modular_nova/modules/colony_fabricator/code/machines/solar_panels.dm index d8cba4dfada..b8191fd795a 100644 --- a/modular_nova/modules/colony_fabricator/code/machines/solar_panels.dm +++ b/modular_nova/modules/colony_fabricator/code/machines/solar_panels.dm @@ -14,7 +14,7 @@ /obj/machinery/power/solar/deployable/crowbar_act(mob/user, obj/item/I) return -/obj/machinery/power/solar/deployable/deconstruct(disassembled = TRUE) +/obj/machinery/power/solar/deployable/on_deconstruction(disassembled) var/obj/item/solar_assembly/assembly = locate() in src if(assembly) qdel(assembly) @@ -27,6 +27,7 @@ icon_state = "solar_panel_packed" type_to_deploy = /obj/machinery/power/solar/deployable deploy_time = 2 SECONDS + w_class = WEIGHT_CLASS_NORMAL custom_materials = list( /datum/material/iron = SHEET_MATERIAL_AMOUNT * 1.75, /datum/material/glass = HALF_SHEET_MATERIAL_AMOUNT * 3, @@ -48,7 +49,7 @@ /obj/machinery/power/tracker/deployable/crowbar_act(mob/user, obj/item/item_acting) return -/obj/machinery/power/tracker/deployable/deconstruct(disassembled = TRUE) +/obj/machinery/power/tracker/deployable/on_deconstruction(disassembled) var/obj/item/solar_assembly/assembly = locate() in src if(assembly) qdel(assembly) @@ -61,6 +62,7 @@ icon_state = "solar_tracker_packed" type_to_deploy = /obj/machinery/power/tracker/deployable deploy_time = 3 SECONDS + w_class = WEIGHT_CLASS_NORMAL custom_materials = list( /datum/material/iron = SHEET_MATERIAL_AMOUNT * 2, /datum/material/glass = HALF_SHEET_MATERIAL_AMOUNT * 3.5, diff --git a/modular_nova/modules/colony_fabricator/code/machines/stirling_generator.dm b/modular_nova/modules/colony_fabricator/code/machines/stirling_generator.dm new file mode 100644 index 00000000000..c7f242638ba --- /dev/null +++ b/modular_nova/modules/colony_fabricator/code/machines/stirling_generator.dm @@ -0,0 +1,138 @@ +// Stirling generator, like a miniature TEG, pipe hot air in, and keep the air around it cold + +/obj/machinery/power/stirling_generator + name = "stirling generator" + desc = "An industrial scale stirling generator. Stirling generators operate by intaking \ + hot gasses through their inlet pipes, and being cooled by the ambient air around them. \ + The cycling compression and expansion caused by this creates power, and this one is made \ + to make power on the scale of small stations and outposts." + icon = 'modular_nova/modules/colony_fabricator/icons/stirling_generator/big_generator.dmi' + icon_state = "stirling" + density = TRUE + use_power = NO_POWER_USE + circuit = null + max_integrity = 300 + armor_type = /datum/armor/unary_thermomachine + set_dir_on_move = FALSE + can_change_cable_layer = TRUE + /// Reference to the datum connector we're using to interface with the pipe network + var/datum/gas_machine_connector/connected_chamber + /// What this thing deconstructs into + var/deconstruction_type = /obj/item/flatpacked_machine/stirling_generator + /// Maximum efficient heat difference, at what heat difference does more difference stop meaning anything for power? + var/max_efficient_heat_difference = 8000 + /// Maximum power output from this machine + var/max_power_output = 100 * 1000 + /// How much power the generator is currently making + var/current_power_generation + /// Our looping fan sound that we play when turned on + var/datum/looping_sound/ore_thumper_fan/soundloop + + +/obj/machinery/power/stirling_generator/Initialize(mapload) + . = ..() + soundloop = new(src, FALSE) + connected_chamber = new(loc, src, dir, CELL_VOLUME * 0.5) + connect_to_network() + AddElement(/datum/element/repackable, deconstruction_type, 10 SECONDS) + AddElement(/datum/element/manufacturer_examine, COMPANY_FRONTIER) + // This is just to make sure our atmos connection spawns facing the right way + setDir(dir) + + +/obj/machinery/power/stirling_generator/examine(mob/user) + . = ..() + . += span_notice("You can use a wrench with Left-Click to rotate the generator.") + . += span_notice("It will not work in a vacuum as it must be cooled by the gas around it.") + . += span_notice("It is currently generating [current_power_generation / 1000] kW of power.") + . += span_notice("It has a maximum power output of [max_power_output / 1000] kW at a temperature difference of [max_efficient_heat_difference] K.") + + +/obj/machinery/power/stirling_generator/Destroy() + QDEL_NULL(connected_chamber) + return ..() + + +/obj/machinery/power/stirling_generator/process_atmos() + if(!powernet) + connect_to_network() + if(!powernet) + return + + var/turf/our_turf = get_turf(src) + + var/datum/gas_mixture/hot_air_from_pipe = connected_chamber.gas_connector.airs[1] + var/datum/gas_mixture/environment = our_turf.return_air() + + if(!QUANTIZE(hot_air_from_pipe.total_moles()) || !QUANTIZE(environment.total_moles())) //Don't transfer if there's no gas + return + + var/gas_temperature_delta = hot_air_from_pipe.temperature - environment.temperature + + if(!(gas_temperature_delta > 0)) + current_power_generation = 0 + return + + var/input_capacity = hot_air_from_pipe.heat_capacity() + var/output_capacity = environment.heat_capacity() + var/cooling_heat_amount = CALCULATE_CONDUCTION_ENERGY(gas_temperature_delta, input_capacity, output_capacity) + hot_air_from_pipe.temperature = max(hot_air_from_pipe.temperature - (cooling_heat_amount / input_capacity), TCMB) + + /// Takes the amount of heat moved, and divides it by the maximum temperature difference we expect, creating a number to divide power generation by + var/effective_energy_transfer = round((max_efficient_heat_difference / min(gas_temperature_delta, max_efficient_heat_difference)), 0.01) + current_power_generation = round(max_power_output / effective_energy_transfer) + + +/obj/machinery/power/stirling_generator/process() + var/power_output = round(current_power_generation) + add_avail(power_output) + var/new_icon_state = (power_output ? "stirling_on" : "stirling") + icon_state = new_icon_state + if(soundloop.is_active() && !power_output) + soundloop.stop() + else if(!soundloop.is_active() && power_output) + soundloop.start() + + +/obj/machinery/power/stirling_generator/default_deconstruction_screwdriver(mob/user, icon_state_open, icon_state_closed, obj/item/screwdriver) + return + + +/obj/machinery/power/stirling_generator/default_deconstruction_crowbar(obj/item/crowbar, ignore_panel, custom_deconstruct) + return + + +/obj/machinery/power/stirling_generator/wrench_act(mob/living/user, obj/item/tool) + return default_change_direction_wrench(user, tool) + + +/obj/machinery/power/stirling_generator/default_change_direction_wrench(mob/user, obj/item/wrench) + if(wrench.tool_behaviour != TOOL_WRENCH) + return FALSE + + wrench.play_tool_sound(src, 50) + setDir(turn(dir,-90)) + to_chat(user, span_notice("You rotate [src].")) + SEND_SIGNAL(src, COMSIG_MACHINERY_DEFAULT_ROTATE_WRENCH, user, wrench) + return TRUE + + +/obj/machinery/power/stirling_generator/Destroy() + QDEL_NULL(connected_chamber) + return ..() + + +// Item for creating stirling generators + +/obj/item/flatpacked_machine/stirling_generator + name = "flat-packed stirling generator" + icon = 'modular_nova/modules/colony_fabricator/icons/stirling_generator/packed_machines.dmi' + icon_state = "stirling" + type_to_deploy = /obj/machinery/power/stirling_generator + custom_materials = list( + /datum/material/iron = SHEET_MATERIAL_AMOUNT * 15, + /datum/material/glass = SHEET_MATERIAL_AMOUNT * 5, + /datum/material/plasma = SHEET_MATERIAL_AMOUNT * 10, + /datum/material/titanium = SHEET_MATERIAL_AMOUNT * 5, + /datum/material/gold = SHEET_MATERIAL_AMOUNT * 5, + ) diff --git a/modular_nova/modules/colony_fabricator/code/machines/thermomachine.dm b/modular_nova/modules/colony_fabricator/code/machines/thermomachine.dm index 063a9f07bd5..c620a1f7423 100644 --- a/modular_nova/modules/colony_fabricator/code/machines/thermomachine.dm +++ b/modular_nova/modules/colony_fabricator/code/machines/thermomachine.dm @@ -20,7 +20,10 @@ AddElement(/datum/element/repackable, repacked_type, 2 SECONDS) AddElement(/datum/element/manufacturer_examine, COMPANY_FRONTIER) flick("thermo_deploy", src) + + // Makes for certain that we are visually facing the correct way setDir(dir) + update_appearance() /obj/machinery/atmospherics/components/unary/thermomachine/deployable/RefreshParts() . = ..() diff --git a/modular_nova/modules/colony_fabricator/icons/doors/shutter.dmi b/modular_nova/modules/colony_fabricator/icons/doors/shutter.dmi index f29dc998999..f3ab4f661bd 100644 Binary files a/modular_nova/modules/colony_fabricator/icons/doors/shutter.dmi and b/modular_nova/modules/colony_fabricator/icons/doors/shutter.dmi differ diff --git a/modular_nova/modules/colony_fabricator/icons/kitchen_stuff/griddle.dmi b/modular_nova/modules/colony_fabricator/icons/kitchen_stuff/griddle.dmi new file mode 100644 index 00000000000..46cde00af67 Binary files /dev/null and b/modular_nova/modules/colony_fabricator/icons/kitchen_stuff/griddle.dmi differ diff --git a/modular_nova/modules/colony_fabricator/icons/kitchen_stuff/microwave.dmi b/modular_nova/modules/colony_fabricator/icons/kitchen_stuff/microwave.dmi new file mode 100644 index 00000000000..00979f05eb4 Binary files /dev/null and b/modular_nova/modules/colony_fabricator/icons/kitchen_stuff/microwave.dmi differ diff --git a/modular_nova/modules/colony_fabricator/icons/kitchen_stuff/range.dmi b/modular_nova/modules/colony_fabricator/icons/kitchen_stuff/range.dmi new file mode 100644 index 00000000000..1e6ed4cfa73 Binary files /dev/null and b/modular_nova/modules/colony_fabricator/icons/kitchen_stuff/range.dmi differ diff --git a/modular_nova/modules/colony_fabricator/icons/space_heater.dmi b/modular_nova/modules/colony_fabricator/icons/space_heater.dmi new file mode 100644 index 00000000000..eda06ce46e4 Binary files /dev/null and b/modular_nova/modules/colony_fabricator/icons/space_heater.dmi differ diff --git a/modular_nova/modules/colony_fabricator/icons/stirling_generator/big_generator.dmi b/modular_nova/modules/colony_fabricator/icons/stirling_generator/big_generator.dmi new file mode 100644 index 00000000000..d8cac6292e2 Binary files /dev/null and b/modular_nova/modules/colony_fabricator/icons/stirling_generator/big_generator.dmi differ diff --git a/modular_nova/modules/colony_fabricator/icons/stirling_generator/packed_machines.dmi b/modular_nova/modules/colony_fabricator/icons/stirling_generator/packed_machines.dmi new file mode 100644 index 00000000000..5b750da5151 Binary files /dev/null and b/modular_nova/modules/colony_fabricator/icons/stirling_generator/packed_machines.dmi differ diff --git a/modular_nova/modules/command_vendor/code/vending.dm b/modular_nova/modules/command_vendor/code/vending.dm index 86a10c0f614..9726aa00f69 100644 --- a/modular_nova/modules/command_vendor/code/vending.dm +++ b/modular_nova/modules/command_vendor/code/vending.dm @@ -98,8 +98,6 @@ /obj/item/clothing/under/rank/rnd/research_director/alt = 1, /obj/item/clothing/under/rank/rnd/research_director/turtleneck = 1, /obj/item/clothing/under/rank/rnd/research_director/turtleneck/skirt = 1, - /obj/item/clothing/under/rank/rnd/research_director/nova/jumpsuit = 1, - /obj/item/clothing/under/rank/rnd/research_director/nova/jumpsuit/skirt = 1, /obj/item/clothing/under/rank/rnd/research_director/nova/imperial = 1, /obj/item/clothing/neck/cloak/rd = 1, /obj/item/clothing/neck/mantle/rdmantle = 1, diff --git a/modular_nova/modules/company_imports/code/armament_datums/akh_frontier.dm b/modular_nova/modules/company_imports/code/armament_datums/akh_frontier.dm index 290ab7386fc..d775fc4e456 100644 --- a/modular_nova/modules/company_imports/code/armament_datums/akh_frontier.dm +++ b/modular_nova/modules/company_imports/code/armament_datums/akh_frontier.dm @@ -45,6 +45,10 @@ item_type = /obj/item/wallframe/cell_charger_multi cost = PAYCHECK_CREW +/datum/armament_entry/company_import/akh_frontier/appliances/wall_heater + item_type = /obj/item/wallframe/wall_heater + cost = PAYCHECK_CREW + /datum/armament_entry/company_import/akh_frontier/appliances/water_synth item_type = /obj/item/flatpacked_machine/water_synth @@ -64,9 +68,6 @@ /datum/armament_entry/company_import/akh_frontier/deployables_misc/arc_furnace item_type = /obj/item/flatpacked_machine/arc_furnace -/datum/armament_entry/company_import/akh_frontier/deployables_misc/thermomachine - item_type = /obj/item/flatpacked_machine/thermomachine - /datum/armament_entry/company_import/akh_frontier/deployables_misc/co2_cracker item_type = /obj/item/flatpacked_machine/co2_cracker @@ -79,23 +80,18 @@ subcategory = "Deployable Power Equipment" cost = PAYCHECK_COMMAND -/datum/armament_entry/company_import/akh_frontier/deployables/solar - item_type = /obj/item/flatpacked_machine/solar - cost = PAYCHECK_CREW - -/datum/armament_entry/company_import/akh_frontier/deployables/solar_tracker - item_type = /obj/item/flatpacked_machine/solar_tracker +/datum/armament_entry/company_import/akh_frontier/deployables/turbine + item_type = /obj/item/flatpacked_machine/wind_turbine cost = PAYCHECK_CREW -/datum/armament_entry/company_import/akh_frontier/deployables/station_battery - item_type = /obj/item/flatpacked_machine/station_battery - -/datum/armament_entry/company_import/akh_frontier/deployables/big_station_battery - item_type = /obj/item/flatpacked_machine/large_station_battery - /datum/armament_entry/company_import/akh_frontier/deployables/solids_generator item_type = /obj/item/flatpacked_machine/fuel_generator +/datum/armament_entry/company_import/akh_frontier/deployables/stirling_generator + item_type = /obj/item/flatpacked_machine/stirling_generator + cost = PAYCHECK_COMMAND * 3 + /datum/armament_entry/company_import/akh_frontier/deployables/rtg item_type = /obj/item/flatpacked_machine/rtg + cost = PAYCHECK_COMMAND * 2 restricted = TRUE diff --git a/modular_nova/modules/company_imports/code/armament_datums/deforest_medical.dm b/modular_nova/modules/company_imports/code/armament_datums/deforest_medical.dm index c9bd351f5f2..317225fb048 100644 --- a/modular_nova/modules/company_imports/code/armament_datums/deforest_medical.dm +++ b/modular_nova/modules/company_imports/code/armament_datums/deforest_medical.dm @@ -7,17 +7,21 @@ /datum/armament_entry/company_import/deforest/first_aid_kit subcategory = "First-Aid Kits" +/datum/armament_entry/deforest/first_aid_kit/civil_defense/comfort + item_type = /obj/item/storage/medkit/civil_defense/comfort/stocked + cost = PAYCHECK_COMMAND * 2 + /datum/armament_entry/company_import/deforest/first_aid_kit/civil_defense item_type = /obj/item/storage/medkit/civil_defense/stocked - cost = PAYCHECK_COMMAND * 4 + cost = PAYCHECK_COMMAND * 2.5 /datum/armament_entry/company_import/deforest/first_aid_kit/frontier item_type = /obj/item/storage/medkit/frontier/stocked - cost = PAYCHECK_COMMAND * 5 + cost = PAYCHECK_COMMAND * 3.5 /datum/armament_entry/company_import/deforest/first_aid_kit/combat_surgeon item_type = /obj/item/storage/medkit/combat_surgeon/stocked - cost = PAYCHECK_COMMAND * 6 + cost = PAYCHECK_COMMAND * 3.5 /datum/armament_entry/company_import/deforest/first_aid_kit/first_responder item_type = /obj/item/storage/backpack/duffelbag/deforest_surgical/stocked @@ -25,7 +29,7 @@ /datum/armament_entry/company_import/deforest/first_aid_kit/orange_satchel item_type = /obj/item/storage/backpack/duffelbag/deforest_medkit/stocked - cost = PAYCHECK_COMMAND * 15 + cost = PAYCHECK_COMMAND * 10 // Basic first aid supplies like gauze, sutures, mesh, so on @@ -36,10 +40,22 @@ item_type = /obj/item/stack/medical/suture/coagulant cost = PAYCHECK_LOWER +/datum/armament_entry/company_import/deforest/first_aid/suture + item_type = /obj/item/stack/medical/suture + cost = PAYCHECK_LOWER + /datum/armament_entry/company_import/deforest/first_aid/red_sun item_type = /obj/item/stack/medical/ointment/red_sun cost = PAYCHECK_LOWER +/datum/armament_entry/company_import/deforest/first_aid/ointment + item_type = /obj/item/stack/medical/ointment + cost = PAYCHECK_LOWER + +/datum/armament_entry/company_import/deforest/first_aid/mesh + item_type = /obj/item/stack/medical/mesh + cost = PAYCHECK_LOWER + /datum/armament_entry/company_import/deforest/first_aid/sterile_gauze item_type = /obj/item/stack/medical/gauze/sterilized cost = PAYCHECK_LOWER @@ -48,6 +64,10 @@ item_type = /obj/item/storage/pill_bottle/painkiller cost = PAYCHECK_CREW +/datum/armament_entry/company_import/deforest/first_aid/bandaid + item_type = /obj/item/storage/box/bandages + cost = PAYCHECK_CREW * 1.5 + /datum/armament_entry/company_import/deforest/first_aid/subdermal_splint item_type = /obj/item/stack/medical/wound_recovery cost = PAYCHECK_COMMAND * 2 @@ -60,7 +80,7 @@ /datum/armament_entry/company_import/deforest/medpens subcategory = "Medical Autoinjectors" - cost = PAYCHECK_COMMAND * 1.5 + cost = PAYCHECK_LOWER * 3 /datum/armament_entry/company_import/deforest/medpens/occuisate item_type = /obj/item/reagent_containers/hypospray/medipen/deforest/occuisate @@ -131,6 +151,10 @@ /datum/armament_entry/company_import/deforest/equipment subcategory = "Medical Equipment" +/datum/armament_entry/company_import/deforest/equipment/treatment_zone_projector + item_type = /obj/item/holosign_creator/medical/treatment_zone + cost = PAYCHECK_LOWER + /datum/armament_entry/company_import/deforest/equipment/health_analyzer item_type = /obj/item/healthanalyzer cost = PAYCHECK_LOWER @@ -171,6 +195,34 @@ item_type = /obj/item/gun/medbeam/afad cost = PAYCHECK_COMMAND * 5 +/datum/armament_entry/company_import/deforest/equipment/medstation + item_type = /obj/item/wallframe/frontier_medstation + cost = PAYCHECK_COMMAND * 5 + +// Advanced implants, some of these can be printed but this is a way to get them before tech if you REALLY wanted + +/datum/armament_entry/company_import/deforest/cyber_implants + subcategory = "Cybernetic Implants" + cost = PAYCHECK_COMMAND * 3 + +/datum/armament_entry/company_import/deforest/cyber_implants/razorwire + name = "Razorwire Spool Implant" + item_type = /obj/item/organ/internal/cyberimp/arm/razorwire + +/datum/armament_entry/company_import/deforest/cyber_implants/shell_launcher + name = "Shell Launch System Implant" + item_type = /obj/item/organ/internal/cyberimp/arm/shell_launcher + +/datum/armament_entry/company_import/deforest/cyber_implants/sandy + name = "Qani-Laaca Sensory Computer Implant" + item_type = /obj/item/organ/internal/cyberimp/sensory_enhancer + cost = PAYCHECK_COMMAND * 5 + +/datum/armament_entry/company_import/deforest/cyber_implants/hackerman + name = "Binyat Wireless Hacking System Implant" + item_type = /obj/item/organ/internal/cyberimp/hackerman_deck + cost = PAYCHECK_COMMAND * 10 + // Modsuit Modules from the medical category, here instead of in Nakamura because nobody buys from this company /datum/armament_entry/company_import/deforest/medical_modules diff --git a/modular_nova/modules/company_imports/code/armament_datums/microstar_energy.dm b/modular_nova/modules/company_imports/code/armament_datums/microstar_energy.dm index 5eacfef0eb6..f56a204aaa4 100644 --- a/modular_nova/modules/company_imports/code/armament_datums/microstar_energy.dm +++ b/modular_nova/modules/company_imports/code/armament_datums/microstar_energy.dm @@ -38,9 +38,13 @@ item_type = /obj/item/gun/energy/e_gun cost = PAYCHECK_COMMAND * 4 -/datum/armament_entry/company_import/microstar/basic_energy_long_weapons/basic_mcr - item_type = /obj/item/gun/microfusion/mcr01 - cost = PAYCHECK_COMMAND * 4 +/datum/armament_entry/company_import/microstar/basic_energy_long_weapons/mod_laser_small + item_type = /obj/item/gun/energy/modular_laser_rifle/carbine + cost = PAYCHECK_COMMAND * 5 + +/datum/armament_entry/company_import/microstar/basic_energy_long_weapons/mod_laser_large + item_type = /obj/item/gun/energy/modular_laser_rifle + cost = PAYCHECK_COMMAND * 8 // More expensive, unique energy weapons /datum/armament_entry/company_import/microstar/experimental_energy @@ -59,61 +63,3 @@ /datum/armament_entry/company_import/microstar/experimental_energy/tesla_cannon item_type = /obj/item/gun/energy/tesla_cannon - -// Preset 'loadout' kits built around a barrel attachment - -/datum/armament_entry/company_import/microstar/mcr_attachments - subcategory = "Microfusion Attachment Kits" - cost = PAYCHECK_COMMAND * 4 - -/datum/armament_entry/company_import/microstar/mcr_attachments/hellfire - name = "microfusion hellfire kit" - item_type = /obj/item/storage/briefcase/secure/white/mcr_loadout/hellfire - -/datum/armament_entry/company_import/microstar/mcr_attachments/scatter - name = "microfusion scatter kit" - item_type = /obj/item/storage/briefcase/secure/white/mcr_loadout/scatter - -/datum/armament_entry/company_import/microstar/mcr_attachments/lance - name = "microfusion lance kit" - item_type = /obj/item/storage/briefcase/secure/white/mcr_loadout/lance - -/datum/armament_entry/company_import/microstar/mcr_attachments/repeater - name = "microfusion repeater kit" - item_type = /obj/item/storage/briefcase/secure/white/mcr_loadout/repeater - -/datum/armament_entry/company_import/microstar/mcr_attachments/tacticool - name = "microfusion suppressor kit" - item_type = /obj/item/storage/briefcase/secure/white/mcr_loadout/tacticool - -// Improved phase emitters, cells, and cell attachments - -/datum/armament_entry/company_import/microstar/mcr_upgrades - subcategory = "Microfusion Upgrade Kits" - -/datum/armament_entry/company_import/microstar/mcr_upgrades/stabilizer - item_type = /obj/item/microfusion_cell_attachment/stabiliser - cost = PAYCHECK_COMMAND - -/datum/armament_entry/company_import/microstar/mcr_upgrades/enhanced_part_kit - name = "microfusion enhanced parts" - item_type = /obj/item/storage/briefcase/secure/white/mcr_parts/enhanced - cost = PAYCHECK_COMMAND * 2 - -/datum/armament_entry/company_import/microstar/mcr_upgrades/capacity_booster - item_type = /obj/item/microfusion_cell_attachment/overcapacity - cost = PAYCHECK_COMMAND - -/datum/armament_entry/company_import/microstar/mcr_upgrades/advanced_part_kit - name = "microfusion advanced parts" - item_type = /obj/item/storage/briefcase/secure/white/mcr_parts/advanced - cost = PAYCHECK_COMMAND * 2 - -/datum/armament_entry/company_import/microstar/mcr_upgrades/selfcharge - item_type = /obj/item/microfusion_cell_attachment/selfcharging - cost = PAYCHECK_COMMAND * 4 - -/datum/armament_entry/company_import/microstar/mcr_upgrades/bluespace_part_kit - name = "microfusion bluespace parts" - item_type = /obj/item/storage/briefcase/secure/white/mcr_parts/bluespace - cost = PAYCHECK_COMMAND * 6 diff --git a/modular_nova/modules/company_imports/code/armament_datums/nakamura_modsuits.dm b/modular_nova/modules/company_imports/code/armament_datums/nakamura_modsuits.dm index 0f1e7a0841c..d73bff7e4d7 100644 --- a/modular_nova/modules/company_imports/code/armament_datums/nakamura_modsuits.dm +++ b/modular_nova/modules/company_imports/code/armament_datums/nakamura_modsuits.dm @@ -85,11 +85,6 @@ restricted = TRUE contraband = TRUE -/datum/armament_entry/company_import/nakamura_modsuits/protection_modules/accretion - item_type = /obj/item/mod/module/ash_accretion - cost = PAYCHECK_COMMAND * 3 - restricted = TRUE - // Utility modules, general purpose stuff that really anyone might want /datum/armament_entry/company_import/nakamura_modsuits/utility_modules diff --git a/modular_nova/modules/company_imports/code/armament_datums/nri_military_surplus.dm b/modular_nova/modules/company_imports/code/armament_datums/nri_military_surplus.dm index 344c9077a96..d902baf2f0b 100644 --- a/modular_nova/modules/company_imports/code/armament_datums/nri_military_surplus.dm +++ b/modular_nova/modules/company_imports/code/armament_datums/nri_military_surplus.dm @@ -19,10 +19,6 @@ item_type = /obj/item/storage/backpack/industrial/cin_surplus/random_color cost = PAYCHECK_CREW -/datum/armament_entry/company_import/nri_surplus/clothing/gas_mask - item_type = /obj/item/clothing/mask/gas/hecu2 - cost = PAYCHECK_CREW - /datum/armament_entry/company_import/nri_surplus/clothing/helmet item_type = /obj/item/clothing/head/helmet/cin_surplus_helmet/random_color cost = PAYCHECK_COMMAND diff --git a/modular_nova/modules/company_imports/code/objects/microstar/mcr_attachment_kits.dm b/modular_nova/modules/company_imports/code/objects/microstar/mcr_attachment_kits.dm deleted file mode 100644 index 05bddea8e91..00000000000 --- a/modular_nova/modules/company_imports/code/objects/microstar/mcr_attachment_kits.dm +++ /dev/null @@ -1,85 +0,0 @@ -/obj/item/storage/briefcase/secure/white/mcr_loadout - name = "Microfusion Attachment Kit" - -/obj/item/storage/briefcase/secure/white/mcr_loadout/hellfire - -/obj/item/storage/briefcase/secure/white/mcr_loadout/hellfire/PopulateContents() - var/static/items_inside = list( - /obj/item/microfusion_gun_attachment/barrel/hellfire = 1, - /obj/item/microfusion_gun_attachment/rail = 1, - /obj/item/microfusion_gun_attachment/grip = 1, - ) - generate_items_inside(items_inside,src) - -/obj/item/storage/briefcase/secure/white/mcr_loadout/scatter - -/obj/item/storage/briefcase/secure/white/mcr_loadout/scatter/PopulateContents() - var/static/items_inside = list( - /obj/item/microfusion_gun_attachment/barrel/scatter = 1, - /obj/item/microfusion_gun_attachment/rail = 1, - /obj/item/microfusion_gun_attachment/grip = 1, - ) - generate_items_inside(items_inside,src) - -/obj/item/storage/briefcase/secure/white/mcr_loadout/lance - -/obj/item/storage/briefcase/secure/white/mcr_loadout/lance/PopulateContents() - var/static/items_inside = list( - /obj/item/microfusion_gun_attachment/barrel/lance = 1, - /obj/item/microfusion_gun_attachment/scope = 1, - /obj/item/microfusion_gun_attachment/heatsink = 1, - ) - generate_items_inside(items_inside,src) - -/obj/item/storage/briefcase/secure/white/mcr_loadout/repeater - -/obj/item/storage/briefcase/secure/white/mcr_loadout/repeater/PopulateContents() - var/static/items_inside = list( - /obj/item/microfusion_gun_attachment/barrel/repeater = 1, - /obj/item/microfusion_gun_attachment/rail = 1, - /obj/item/microfusion_gun_attachment/heatsink = 1, - ) - generate_items_inside(items_inside,src) - -/obj/item/storage/briefcase/secure/white/mcr_loadout/tacticool - -/obj/item/storage/briefcase/secure/white/mcr_loadout/tacticool/PopulateContents() - var/static/items_inside = list( - /obj/item/microfusion_gun_attachment/barrel/suppressor = 1, - /obj/item/microfusion_gun_attachment/rail = 1, - /obj/item/microfusion_gun_attachment/grip = 1, - /obj/item/microfusion_gun_attachment/camo = 1, - ) - generate_items_inside(items_inside,src) - -// Phase emitter and cell upgrades - -/obj/item/storage/briefcase/secure/white/mcr_parts - name = "Microfusion Parts Kit" - -/obj/item/storage/briefcase/secure/white/mcr_parts/enhanced - -/obj/item/storage/briefcase/secure/white/mcr_parts/enhanced/PopulateContents() - var/static/items_inside = list( - /obj/item/stock_parts/cell/microfusion/enhanced = 1, - /obj/item/microfusion_phase_emitter/enhanced = 1, - ) - generate_items_inside(items_inside,src) - -/obj/item/storage/briefcase/secure/white/mcr_parts/advanced - -/obj/item/storage/briefcase/secure/white/mcr_parts/advanced/PopulateContents() - var/static/items_inside = list( - /obj/item/stock_parts/cell/microfusion/advanced = 1, - /obj/item/microfusion_phase_emitter/advanced = 1, - ) - generate_items_inside(items_inside,src) - -/obj/item/storage/briefcase/secure/white/mcr_parts/bluespace - -/obj/item/storage/briefcase/secure/white/mcr_parts/bluespace/PopulateContents() - var/static/items_inside = list( - /obj/item/stock_parts/cell/microfusion/bluespace = 1, - /obj/item/microfusion_phase_emitter/bluespace = 1, - ) - generate_items_inside(items_inside,src) diff --git a/modular_nova/modules/company_imports/code/objects/nakamura_modsuits/accretion_incompatibility.dm b/modular_nova/modules/company_imports/code/objects/nakamura_modsuits/accretion_incompatibility.dm deleted file mode 100644 index d3293a9d9a8..00000000000 --- a/modular_nova/modules/company_imports/code/objects/nakamura_modsuits/accretion_incompatibility.dm +++ /dev/null @@ -1,3 +0,0 @@ -/obj/item/mod/module/ash_accretion - incompatible_modules = list(/obj/item/mod/module/ash_accretion, /obj/item/mod/module/armor_booster) - removable = TRUE diff --git a/modular_nova/modules/company_imports/code/objects/vitezstvi/ammo_boxes.dm b/modular_nova/modules/company_imports/code/objects/vitezstvi/ammo_boxes.dm index 35b057ecbb7..30ab3e45b41 100644 --- a/modular_nova/modules/company_imports/code/objects/vitezstvi/ammo_boxes.dm +++ b/modular_nova/modules/company_imports/code/objects/vitezstvi/ammo_boxes.dm @@ -54,31 +54,3 @@ /obj/item/ammo_box/c46x30mm/rubber name = "ammo box (4.6x30mm rubber)" ammo_type = /obj/item/ammo_casing/c46x30mm/rubber - -/obj/item/ammo_box/c34 - name = "ammo box (.34)" - icon = 'modular_nova/modules/company_imports/icons/ammo.dmi' - icon_state = "ammo_34" - ammo_type = /obj/item/ammo_casing/c34 - max_ammo = 20 - -/obj/item/ammo_box/c34/ap - name = "ammo box (.34 AP)" - ammo_type = /obj/item/ammo_casing/c34/ap - -/obj/item/ammo_box/c34/rubber - name = "ammo box (.34 rubber)" - ammo_type = /obj/item/ammo_casing/c34/rubber - -/obj/item/ammo_box/c34/fire - name = "ammo box (.34 incendiary)" - ammo_type = /obj/item/ammo_casing/c34_incendiary - -/obj/item/storage/box/ammo_box/microfusion/bluespace - name = "bluespace microfusion cell container" - desc = "A box filled with microfusion cells." - -/obj/item/storage/box/ammo_box/microfusion/bluespace/PopulateContents() - new /obj/item/stock_parts/cell/microfusion/bluespace(src) - new /obj/item/stock_parts/cell/microfusion/bluespace(src) - new /obj/item/stock_parts/cell/microfusion/bluespace(src) diff --git a/modular_nova/modules/contractor/code/datums/contract.dm b/modular_nova/modules/contractor/code/datums/contract.dm deleted file mode 100644 index f23ac142569..00000000000 --- a/modular_nova/modules/contractor/code/datums/contract.dm +++ /dev/null @@ -1,135 +0,0 @@ -/// They're off to holding - handle the return timer and give some text about what's going on. -/datum/syndicate_contract/handle_victim_experience(mob/living/target) - // Ship 'em back - dead or alive, 4 minutes wait. - // Even if they weren't the target, we're still treating them the same. - addtimer(CALLBACK(src, PROC_REF(return_victim), target), 4 MINUTES) - - if (target.stat == DEAD) - return - // Heal them up - gets them out of crit/soft crit. If omnizine is removed in the future, this needs to be replaced with a - // method of healing them, consequence free, to a reasonable amount of health. - victim_stage_one(target) - -/// Adds omnizine and begins the victim handling -/datum/syndicate_contract/proc/victim_stage_one(mob/living/target) - target.reagents.add_reagent(/datum/reagent/medicine/omnizine, 20) - - target.flash_act() - target.adjust_confusion(10 SECONDS) - target.set_eye_blur_if_lower(10 SECONDS) - to_chat(target, span_warning("You feel strange...")) - addtimer(CALLBACK(src, PROC_REF(victim_stage_two), target), 6 SECONDS) - -/// Continued victim handling -/datum/syndicate_contract/proc/victim_stage_two(mob/living/target) - var/list/parts_to_fuck_up = list( - BODY_ZONE_L_ARM, - BODY_ZONE_R_ARM, - BODY_ZONE_L_LEG, - BODY_ZONE_R_LEG, - ) - - to_chat(target, span_warning("That pod did something to you...")) - target.set_dizzy(70 SECONDS) - - for(var/i in 1 to 2) - var/obj/item/bodypart/limb = target.get_bodypart(pick_n_take(parts_to_fuck_up)) - var/min_wound = limb.get_wound_threshold_of_wound_type(WOUND_BLUNT, WOUND_SEVERITY_SEVERE, return_value_if_no_wound = 40) - var/max_wound = limb.get_wound_threshold_of_wound_type(WOUND_BLUNT, WOUND_SEVERITY_CRITICAL, return_value_if_no_wound = 60) - limb.receive_damage(brute = WOUND_MINIMUM_DAMAGE, wound_bonus = rand(min_wound, max_wound)) - target.update_damage_overlays() - - addtimer(CALLBACK(src, PROC_REF(victim_stage_three), target), 6 SECONDS) - -/// Continued victim handling, flashes them as well -/datum/syndicate_contract/proc/victim_stage_three(mob/living/target) - to_chat(target, span_warning("Your head pounds... It feels like it's going to burst out your skull!")) - target.flash_act() - target.adjust_confusion(20 SECONDS) - target.set_eye_blur_if_lower(6 SECONDS) - addtimer(CALLBACK(src, PROC_REF(victim_stage_four), target), 3 SECONDS) - -/// Continued victim handling -/datum/syndicate_contract/proc/victim_stage_four(mob/living/target) - to_chat(target, span_warning("Your head pounds...")) - - if(iscarbon(target)) - var/mob/living/carbon/carbon_target = target - switch(rand(1, 100)) - if(1 to 45) - carbon_target.gain_trauma_type(BRAIN_TRAUMA_MILD, TRAUMA_RESILIENCE_SURGERY) - - if(46 to 73) - carbon_target.gain_trauma_type(BRAIN_TRAUMA_MILD, TRAUMA_RESILIENCE_SURGERY) - carbon_target.gain_trauma_type(BRAIN_TRAUMA_MILD, TRAUMA_RESILIENCE_SURGERY) - - if(74 to 94) - carbon_target.gain_trauma_type(BRAIN_TRAUMA_SEVERE, TRAUMA_RESILIENCE_SURGERY) - - if(75 to 100) - carbon_target.gain_trauma_type(BRAIN_TRAUMA_SEVERE, TRAUMA_RESILIENCE_SURGERY) - carbon_target.gain_trauma_type(BRAIN_TRAUMA_SEVERE, TRAUMA_RESILIENCE_SURGERY) - - addtimer(CALLBACK(src, PROC_REF(victim_stage_five), target), 10 SECONDS) - -/// Continued victim handling, some unconsciousness -/datum/syndicate_contract/proc/victim_stage_five(mob/living/target) - target.flash_act() - target.Unconscious(200) - to_chat(target, span_hypnophrase(span_reallybig("A million voices echo in your head... \"Your mind held many valuable secrets - \ - we thank you for providing them. Your value is expended, and you will be ransomed back to your station. We always get paid, \ - so it's only a matter of time before we ship you back...\""))) - target.set_eye_blur_if_lower(20 SECONDS) - target.set_dizzy_if_lower(30 SECONDS) - target.adjust_confusion(20 SECONDS) - -/// We're returning the victim -/datum/syndicate_contract/return_victim(mob/living/target) - var/list/possible_drop_loc = list() - - for(var/turf/possible_drop in contract.dropoff.contents) - if(is_safe_turf(possible_drop)) - possible_drop_loc += possible_drop - if(!length(possible_drop_loc)) //Prioritize safe tiles first, then unsafe - for(var/turf/open/possible_unsafe_drop in contract.dropoff.contents) - possible_drop_loc += possible_unsafe_drop - - if (length(possible_drop_loc)) - var/pod_rand_loc = rand(1, length(possible_drop_loc)) - - var/obj/structure/closet/supplypod/return_pod = new() - return_pod.bluespace = TRUE - return_pod.explosionSize = list(0,0,0,0) - return_pod.style = STYLE_SYNDICATE - - do_sparks(8, FALSE, target) - target.visible_message(span_notice("[target] vanishes...")) - - for(var/obj/item/target_item as anything in target) - if(ishuman(target)) - var/mob/living/carbon/human/human_target = target - if(target_item == human_target.w_uniform) - continue //So all they're left with are shoes and uniform. - if(target_item == human_target.shoes) - continue - target.dropItemToGround(target_item) - - for(var/obj/item/target_item as anything in victim_belongings) - target_item.forceMove(return_pod) - - target.forceMove(return_pod) - - target.flash_act() - target.set_eye_blur_if_lower(60 SECONDS) - target.set_dizzy_if_lower(70 SECONDS) - target.adjust_confusion(20 SECONDS) - - new /obj/effect/pod_landingzone(possible_drop_loc[pod_rand_loc], return_pod) - else - to_chat(target, span_reallybig(span_hypnophrase("A million voices echo in your head... \"Seems where you got sent here from won't \ - be able to handle our pod... You will die here instead.\""))) - if(!isliving(target)) - return - var/mob/living/unlucky_fellow = target - unlucky_fellow.investigate_log("was returned without a valid drop location by the contractor [contract.owner?.current].", INVESTIGATE_DEATHS) - unlucky_fellow.death() diff --git a/modular_nova/modules/contractor/code/datums/contractor_items.dm b/modular_nova/modules/contractor/code/datums/contractor_items.dm index 386a306ca07..bbe13db767d 100644 --- a/modular_nova/modules/contractor/code/datums/contractor_items.dm +++ b/modular_nova/modules/contractor/code/datums/contractor_items.dm @@ -92,34 +92,6 @@ limited = 1 cost = 2 -/datum/contractor_item/contractor_partner/handle_purchase(datum/contractor_hub/hub, mob/living/user) - . = ..() - - if(!.) - return - to_chat(user, span_notice("The uplink vibrates quietly, connecting to nearby agents...")) - - var/list/mob/dead/observer/candidates = SSpolling.poll_ghost_candidates( - "Do you want to play as the Contractor Support Unit for [user.real_name]?", - role = ROLE_PAI, - check_jobban = FALSE, - poll_time = 10 SECONDS, - ignore_category = POLL_IGNORE_CONTRACTOR_SUPPORT, - pic_source = user, - role_name_text = "[user.real_name]'s support", - ) - - if(LAZYLEN(candidates)) - var/mob/dead/observer/picked_obs = pick(candidates) - hub.contractor_teammate = spawn_contractor_partner(user, picked_obs.key) - else - to_chat(user, span_notice("No available agents at this time, please try again later.")) - - // refund and add the limit back. - limited += 1 - hub.contract_rep += cost - hub.purchased_items -= src - /datum/contractor_item/blackout name = "Blackout" desc = "Request Syndicate Command to distrupt the station's powernet. Disables power across the station for a short duration." @@ -150,38 +122,6 @@ var/datum/round_event_control/event = locate(/datum/round_event_control/communications_blackout) in SSevents.control event.run_event() -/datum/contractor_item/mod_baton_holster - name = "Baton Holster Module" - desc = "Never worry about dropping your baton again with this holster module! Simply insert your baton into the module, put it in your MODsuit, and the baton will retract whenever dropped." - item = /obj/item/mod/module/baton_holster - item_icon = "wrench" //I cannot find anything better, replace if you find something more fitting - limited = 1 - cost = 2 - -/datum/contractor_item/baton_upgrade_cuff - name = "Baton Cuff Upgrade" - desc = "Using technology reverse-engineered from some alien batons we had lying around, you can now cuff people using your baton with the secondary attack. Due to technical limitations, only cable cuffs and zipties work, and they need to be loaded into the baton manually." - item = /obj/item/baton_upgrade/cuff - item_icon = "bacon" //ditto - limited = 1 - cost = 1 - -/datum/contractor_item/baton_upgrade_mute - name = "Baton Mute Upgrade" - desc = "A relatively new advancement in completely proprietary baton technology, this baton upgrade will mute anyone hit for ten seconds, maximizing at twenty seconds." - item = /obj/item/baton_upgrade/mute - item_icon = "comment-slash" - limited = 1 - cost = 2 - -/datum/contractor_item/baton_upgrade_focus - name = "Baton Focus Upgrade" - desc = "When applied to a baton, it will exhaust the target even more, should they be the target of your current contract." - item = /obj/item/baton_upgrade/focus - item_icon = "eye" - limited = 1 - cost = 2 - /datum/contractor_item/mod_magnetic_suit name = "Magnetic Deployment Module" desc = "A module that utilizes magnets to largely reduce the time needed to deploy and retract your MODsuit." diff --git a/modular_nova/modules/contractor/code/datums/midround/antag_datum.dm b/modular_nova/modules/contractor/code/datums/midround/antag_datum.dm index ccdcbd9dce2..20f85c22216 100644 --- a/modular_nova/modules/contractor/code/datums/midround/antag_datum.dm +++ b/modular_nova/modules/contractor/code/datums/midround/antag_datum.dm @@ -10,6 +10,7 @@ antag_moodlet = /datum/mood_event/focused show_to_ghosts = TRUE suicide_cry = "FOR THE CONTRACTS!!" + view_exploitables = TRUE /// The outfit the contractor is equipped with var/contractor_outfit = /datum/outfit/contractor diff --git a/modular_nova/modules/contractor/code/datums/midround/event.dm b/modular_nova/modules/contractor/code/datums/midround/event.dm index 7f2bf794b6d..f60f93834a3 100644 --- a/modular_nova/modules/contractor/code/datums/midround/event.dm +++ b/modular_nova/modules/contractor/code/datums/midround/event.dm @@ -38,6 +38,7 @@ mind.active = TRUE mind.transfer_to(operative) mind.add_antag_datum(/datum/antagonist/contractor) + mind.handle_exploitables() message_admins("[ADMIN_LOOKUPFLW(operative)] has been made into [src] by an event.") log_game("[key_name(operative)] was spawned as a [src] by an event.") diff --git a/modular_nova/modules/contractor/code/datums/midround/outfit.dm b/modular_nova/modules/contractor/code/datums/midround/outfit.dm index 451f928c127..13f56b433ab 100644 --- a/modular_nova/modules/contractor/code/datums/midround/outfit.dm +++ b/modular_nova/modules/contractor/code/datums/midround/outfit.dm @@ -27,6 +27,13 @@ id_trim = /datum/id_trim/chameleon/contractor +/datum/outfit/contractor/post_equip(mob/living/carbon/human/user, visualsOnly) + . = ..() + if(visualsOnly) + return + handlebank(user) + + /datum/outfit/contractor_preview name = "Syndicate Contractor (Preview only)" diff --git a/modular_nova/modules/contractor/code/datums/mind_datum.dm b/modular_nova/modules/contractor/code/datums/mind_datum.dm deleted file mode 100644 index d95e6e524fa..00000000000 --- a/modular_nova/modules/contractor/code/datums/mind_datum.dm +++ /dev/null @@ -1,5 +0,0 @@ -/datum/mind/proc/make_contractor_support() - var/contractor_support_datum = has_antag_datum(/datum/antagonist/traitor/contractor_support) - if(contractor_support_datum) - return contractor_support_datum - return add_antag_datum(/datum/antagonist/traitor/contractor_support) diff --git a/modular_nova/modules/contractor/code/items/baton.dm b/modular_nova/modules/contractor/code/items/baton.dm deleted file mode 100644 index b6258417477..00000000000 --- a/modular_nova/modules/contractor/code/items/baton.dm +++ /dev/null @@ -1,107 +0,0 @@ -#define CUFF_MAXIMUM 3 -#define BONUS_STAMINA_DAM 35 -#define BONUS_STUTTER 10 - -/obj/item/melee/baton/telescopic/contractor_baton - /// Bitflags for what upgrades the baton has - var/upgrade_flags - /// If the baton lists its upgrades - var/lists_upgrades = TRUE - -/obj/item/melee/baton/telescopic/contractor_baton/attack_secondary(mob/living/victim, mob/living/user, params) - if(!(upgrade_flags & BATON_CUFF_UPGRADE) || !active) - return - for(var/obj/item/restraints/handcuffs/cuff in src.contents) - cuff.attack(victim, user) - break - return SECONDARY_ATTACK_CANCEL_ATTACK_CHAIN - -/obj/item/melee/baton/telescopic/contractor_baton/attackby(obj/item/attacking_item, mob/user, params) - . = ..() - if(istype(attacking_item, /obj/item/baton_upgrade)) - add_upgrade(attacking_item) - balloon_alert(user, "[attacking_item] attached") - if(!(upgrade_flags & BATON_CUFF_UPGRADE)) - return - if(!istype(attacking_item, /obj/item/restraints/handcuffs/cable)) - return - var/cuffcount = 0 - for(var/obj/item/restraints/handcuffs/cuff in src.contents) - cuffcount++ - if(cuffcount >= CUFF_MAXIMUM) - balloon_alert(user, "baton at maximum cuffs") - return - attacking_item.forceMove(src) - balloon_alert(user, "[attacking_item] inserted") - -/obj/item/melee/baton/telescopic/contractor_baton/wrench_act(mob/living/user, obj/item/tool) - . = ..() - for(var/obj/item/baton_upgrade/upgrade in src.contents) - upgrade.forceMove(get_turf(src)) - upgrade_flags &= ~upgrade.upgrade_flag - tool.play_tool_sound(src) - desc = initial(desc) - -/obj/item/melee/baton/telescopic/contractor_baton/additional_effects_non_cyborg(mob/living/carbon/target, mob/living/user) - . = ..() - if(!istype(target)) - return - if((upgrade_flags & BATON_MUTE_UPGRADE)) - target.adjust_silence(10 SECONDS) - if((upgrade_flags & BATON_FOCUS_UPGRADE)) - if(target == user.mind?.opposing_force?.contractor_hub?.current_contract?.contract.target?.current) // Pain - target.apply_damage(BONUS_STAMINA_DAM, STAMINA) - target.adjust_stutter(10 SECONDS) - -/obj/item/melee/baton/telescopic/contractor_baton/examine(mob/user) - . = ..() - if(upgrade_flags && lists_upgrades) - . += "

    [span_boldnotice("[src] has the following upgrades attached:")]" - for(var/obj/item/baton_upgrade/upgrade in contents) - . += "
    [span_notice("[upgrade].")]" - -/obj/item/melee/baton/telescopic/contractor_baton/proc/add_upgrade(obj/item/baton_upgrade/upgrade) - if(!(upgrade_flags & upgrade.upgrade_flag)) - upgrade_flags |= upgrade.upgrade_flag - upgrade.forceMove(src) - -/obj/item/melee/baton/telescopic/contractor_baton/upgraded - desc = "A compact, specialised baton assigned to Syndicate contractors. Applies light electrical shocks to targets. This one seems to have unremovable parts." - -/obj/item/melee/baton/telescopic/contractor_baton/upgraded/Initialize(mapload) - . = ..() - var/list/upgrade_subtypes = subtypesof(/obj/item/baton_upgrade) - for(var/upgrade in upgrade_subtypes) - var/obj/item/baton_upgrade/the_upgrade = new upgrade() - add_upgrade(the_upgrade) - for(var/i in 1 to CUFF_MAXIMUM) - new/obj/item/restraints/handcuffs/cable(src) - -/obj/item/melee/baton/telescopic/contractor_baton/upgraded/wrench_act(mob/living/user, obj/item/tool) - return - -/obj/item/baton_upgrade - icon = 'modular_nova/modules/contractor/icons/baton_upgrades.dmi' - var/upgrade_flag - -/obj/item/baton_upgrade/cuff - name = "handcuff baton upgrade" - desc = "Allows the user to apply restraints to a target via baton, requires to be loaded with up to three prior." - icon_state = "cuff_upgrade" - upgrade_flag = BATON_CUFF_UPGRADE - -/obj/item/baton_upgrade/mute - name = "mute baton upgrade" - desc = "Use of the baton on a target will mute them for a short period." - icon_state = "mute_upgrade" - upgrade_flag = BATON_MUTE_UPGRADE - -/obj/item/baton_upgrade/focus - name = "focus baton upgrade" - desc = "Use of the baton on a target, should they be the subject of your contract, will be extra exhausted." - icon_state = "focus_upgrade" - upgrade_flag = BATON_FOCUS_UPGRADE - -#undef CUFF_MAXIMUM -#undef BONUS_STAMINA_DAM -#undef BONUS_STUTTER diff --git a/modular_nova/modules/contractor/code/items/modsuit/modsuit.dm b/modular_nova/modules/contractor/code/items/modsuit/modsuit.dm index 88a6134999d..c7104781b8a 100644 --- a/modular_nova/modules/contractor/code/items/modsuit/modsuit.dm +++ b/modular_nova/modules/contractor/code/items/modsuit/modsuit.dm @@ -15,7 +15,7 @@ /obj/item/mod/module/tether, ) default_pins = list( - /obj/item/mod/module/armor_booster, + /obj/item/mod/module/armor_booster/contractor, /obj/item/mod/module/tether, ) @@ -30,14 +30,14 @@ /obj/item/mod/module/storage/syndicate, ) default_pins = list( - /obj/item/mod/module/armor_booster, + /obj/item/mod/module/armor_booster/contractor, /obj/item/mod/module/jetpack, - /obj/item/mod/module/baton_holster, + /obj/item/mod/module/baton_holster/preloaded, ) /obj/item/mod/control/pre_equipped/contractor/upgraded/adminbus applied_modules = list( - /obj/item/mod/module/baton_holster/preloaded/upgraded, + /obj/item/mod/module/baton_holster/preloaded, /obj/item/mod/module/emp_shield, /obj/item/mod/module/jetpack/advanced, /obj/item/mod/module/scorpion_hook, @@ -45,8 +45,8 @@ /obj/item/mod/module/storage/syndicate, ) default_pins = list( - /obj/item/mod/module/armor_booster, - /obj/item/mod/module/jetpack, + /obj/item/mod/module/armor_booster/contractor, + /obj/item/mod/module/jetpack/advanced, /obj/item/mod/module/baton_holster/preloaded, /obj/item/mod/module/scorpion_hook, ) diff --git a/modular_nova/modules/contractor/code/items/modsuit/modules.dm b/modular_nova/modules/contractor/code/items/modsuit/modules.dm index 9e99d5de656..2f1420a1cf8 100644 --- a/modular_nova/modules/contractor/code/items/modsuit/modules.dm +++ b/modular_nova/modules/contractor/code/items/modsuit/modules.dm @@ -1,8 +1,9 @@ /obj/item/mod/module/baton_holster name = "MOD baton holster module" - desc = "A module installed into the chest of a MODSuit, this allows you \ - to retrieve an inserted baton from the suit at will. Insert a baton \ - by hitting the module, while it is removed from the suit, with the baton." + desc = "A module installed into the forearm and palm of a MODsuit, this allows you \ + to retrieve an inserted baton from the suit at will, and provides the benefit of being \ + magnetically locked, making it near-impossible to force out of a user's hands. \ + Insert a baton by hitting the module, while it is removed from the suit, with the baton." icon_state = "holster" icon = 'modular_nova/modules/contractor/icons/modsuit_modules.dmi' module_type = MODULE_ACTIVE @@ -21,12 +22,6 @@ return balloon_alert(user, "[attacking_item] inserted") eaten_baton = TRUE - for(var/obj/item/melee/baton/telescopic/contractor_baton/device_baton as anything in src) - for(var/obj/item/baton_upgrade/original_upgrade in attacking_item) - var/obj/item/baton_upgrade/new_upgrade = new original_upgrade.type(device_baton) - device_baton.add_upgrade(new_upgrade) - for(var/obj/item/restraints/handcuffs/cable/baton_cuffs in attacking_item) - baton_cuffs.forceMove(device_baton) qdel(attacking_item) /obj/item/mod/module/baton_holster/on_activation() @@ -37,21 +32,19 @@ /obj/item/mod/module/baton_holster/preloaded eaten_baton = TRUE - device = /obj/item/melee/baton/telescopic/contractor_baton - -/obj/item/mod/module/baton_holster/preloaded/upgraded - device = /obj/item/melee/baton/telescopic/contractor_baton/upgraded /obj/item/mod/module/chameleon/contractor // zero complexity module to match pre-TGification + removable = FALSE complexity = 0 /obj/item/mod/module/armor_booster/contractor // Much flatter distribution because contractor suit gets a shitton of armor already armor_mod = /datum/armor/contract_booster - speed_added = -0.5 //Bulky as shit - desc = "An embedded set of armor plates, allowing the suit's already extremely high protection \ - to be increased further. However, the plating, while deployed, will slow down the user \ - and make the suit unable to vacuum seal so this extra armor provides zero ability for extravehicular activity while deployed." + desc = "An integrated set of auxiliary armor plates, allowing the suit's modest protection to be increased further. \ + However, the plating cannot deploy with the suit's vacuum sealing components, and thus provides zero ability for extravehicular activity while deployed." +// 35 melee 40 bullet 35 laser 35 energy when deployed +// compare/contrast w/ syndicate mod: +// 40 melee 50 bullet 30 laser 30 energy /datum/armor/contract_booster melee = 20 bullet = 20 @@ -60,8 +53,8 @@ /obj/item/mod/module/springlock/contractor name = "MOD magnetic deployment module" - desc = "A much more modern version of a springlock system. \ - This is a module that uses magnets to speed up the deployment and retraction time of your MODsuit." + desc = "A much more modern version of a springlock system, utilizing magnets to speed up the deployment and retraction time of a MODsuit \ + with a distinct lack of ability to snap into place when exposed to moisture." icon_state = "magnet" icon = 'modular_nova/modules/contractor/icons/modsuit_modules.dmi' diff --git a/modular_nova/modules/contractor/code/items/modsuit/theme.dm b/modular_nova/modules/contractor/code/items/modsuit/theme.dm index 88e8376bb10..c4c58014af7 100644 --- a/modular_nova/modules/contractor/code/items/modsuit/theme.dm +++ b/modular_nova/modules/contractor/code/items/modsuit/theme.dm @@ -1,22 +1,22 @@ /datum/mod_theme/contractor name = "contractor" - desc = "A top-tier MODSuit developed with cooperation of Cybersun Industries and the Gorlex Marauders, a favorite of Syndicate Contractors." - extended_desc = "A rare depart from the Syndicate's usual color scheme, the Contractor MODsuit is produced and manufactured \ - for specialty contractors. The build is a streamlined layering consisting of shaped Plastitanium, \ - and composite ceramic, while the under suit is lined with a lightweight Kevlar and durathread hybrid weave \ - to provide ample protection to the user where the plating doesn't, with an illegal onboard electric powered \ - ablative shield module to provide resistance against conventional energy firearms. \ - In addition, it has an in-built chameleon system, allowing you to disguise the suit while undeployed. \ - A small tag hangs off of it reading; 'Property of the Gorlex Marauders, with assistance from Cybersun Industries. \ - All rights reserved, tampering with suit will void warranty." + desc = "A MODSuit developed as a joint venture of Cybersun Industries and the Gorlex Marauders; standard-issue for Syndicate contractors." + extended_desc = "A rare departure from the Syndicate's usual color scheme, the Contractor MODsuit is produced and manufactured \ + for specialty contractors, built for travelling and fighting light, providing no encumberance when deactivated, but slight encumberance otherwise. \ + The external plating is composed of streamlined layers of shaped plastitanium and composite ceramic, \ + while the undersuit is lined with an ablative kevlar hybrid weave to provide ample protection to the user where the plating doesn't. \ + Unfortunately, the sacrifices made for a lightweight build mean that it is slightly less armored than its crimson siblings. \ + In addition, it has an integrated chameleon system, allowing you to disguise the suit while undeployed. \ + A small tag hangs off of it, reading 'Property of the Gorlex Marauders, with assistance from Cybersun Industries. \ + All rights reserved, tampering with suit will void warranty.'" default_skin = "contractor" armor_type = /datum/armor/mod_theme_contractor resistance_flags = FIRE_PROOF atom_flags = PREVENT_CONTENTS_EXPLOSION_1 max_heat_protection_temperature = FIRE_SUIT_MAX_TEMP_PROTECT siemens_coefficient = 0 - slowdown_inactive = 0.5 - slowdown_active = 0 + slowdown_inactive = 0 // for the chameleon module synergy + slowdown_active = 0.5 ui_theme = "syndicate" inbuilt_modules = list(/obj/item/mod/module/armor_booster/contractor, /obj/item/mod/module/chameleon/contractor) allowed_suit_storage = list( diff --git a/modular_nova/modules/contractor/icons/baton_upgrades.dmi b/modular_nova/modules/contractor/icons/baton_upgrades.dmi deleted file mode 100644 index 2b7a971dd6c..00000000000 Binary files a/modular_nova/modules/contractor/icons/baton_upgrades.dmi and /dev/null differ diff --git a/modular_nova/modules/customization/_globalvars/lists.dm b/modular_nova/modules/customization/_globalvars/lists.dm index 90a0758b0dc..16a8a0821ea 100644 --- a/modular_nova/modules/customization/_globalvars/lists.dm +++ b/modular_nova/modules/customization/_globalvars/lists.dm @@ -93,7 +93,8 @@ GLOBAL_LIST_INIT(robotic_styles_list, list( "Ward-Takahashi Manufacturing" = 'modular_nova/master_files/icons/mob/augmentation/wtmipc.dmi', "Xion Manufacturing Group" = 'modular_nova/master_files/icons/mob/augmentation/xmgipc.dmi', "Xion Manufacturing Group 2.0" = 'modular_nova/master_files/icons/mob/augmentation/xm2ipc.dmi', - "Zeng-Hu Pharmaceuticals" = 'modular_nova/master_files/icons/mob/augmentation/zhpipc.dmi' + "Zeng-Hu Pharmaceuticals" = 'modular_nova/master_files/icons/mob/augmentation/zhpipc.dmi', + "Mariinsky Ballet Company" = 'modular_nova/master_files/icons/mob/augmentation/mariinskyipc.dmi', )) //ghoul colors diff --git a/modular_nova/modules/customization/modules/client/augment/implants.dm b/modular_nova/modules/customization/modules/client/augment/implants.dm index 9abdce1a5db..77ead8538a9 100644 --- a/modular_nova/modules/customization/modules/client/augment/implants.dm +++ b/modular_nova/modules/customization/modules/client/augment/implants.dm @@ -15,24 +15,119 @@ /datum/augment_item/implant/chest slot = AUGMENT_SLOT_CHEST_IMPLANT +/datum/augment_item/implant/chest/nutriment_pump + name = "Nutriment Pump" + cost = 4 + path = /obj/item/organ/internal/cyberimp/chest/nutriment + //LEFT ARM IMPLANTS /datum/augment_item/implant/l_arm slot = AUGMENT_SLOT_LEFT_ARM_IMPLANT +/datum/augment_item/implant/l_arm/civilian_lighter + name = "Left Thumbtip Lighter" + cost = 2 + path = /obj/item/organ/internal/cyberimp/arm/civilian_lighter/left_arm + /datum/augment_item/implant/l_arm/razor_claws - name = "Left Razor Claws" + name = "Left Razor Claws (Knife + Wirecutters)" cost = 4 path = /obj/item/organ/internal/cyberimp/arm/razor_claws/left_arm +/datum/augment_item/implant/l_arm/adjuster + name = "Left Adjuster Implant (Screwdriver + Wrench)" + cost = 4 + path = /obj/item/organ/internal/cyberimp/arm/adjuster/left_arm + +/datum/augment_item/implant/l_arm/bureaucracy + name = "Left Bureaucrat's 'Jacent' Toolset Implant (4-colour Pen + Small Paper Bin + Approve/Deny Stamps)" + cost = 4 + path = /obj/item/organ/internal/cyberimp/arm/bureaucracy/left_arm + +/datum/augment_item/implant/l_arm/cargo + name = "Left FTU 'Deckhand' toolset implant (Universal Scanner + Boxcutter)" + cost = 4 + path = /obj/item/organ/internal/cyberimp/arm/cargo/left_arm + +/datum/augment_item/implant/l_arm/civilian_barstaff + name = "Left Waitstaff's Toolset Implant (Serving Tray + Rag)" + cost = 4 + path = /obj/item/organ/internal/cyberimp/arm/civilian_barstaff/left_arm + +/datum/augment_item/implant/l_arm/emt_triage + name = "Left Triage Actuator Implant (Drapes + Retractor + Hemostat)" + cost = 6 + path = /obj/item/organ/internal/cyberimp/arm/emt_triage/left_arm + +/datum/augment_item/implant/l_arm/blacksteel_forging + name = "Left Blacksteel 'Starforge' Toolset Implant (Forging Hammer + Tongs + Bellows)" + cost = 6 + path = /obj/item/organ/internal/cyberimp/arm/blacksteel_forging/left_arm + +/datum/augment_item/implant/l_arm/arc_welder + name = "Left Shipbreaker's Toolset Implant (Arc Welder + Crowbar + Wrench)" + cost = 6 + path = /obj/item/organ/internal/cyberimp/arm/arc_welder/left_arm + +/datum/augment_item/implant/l_arm/electrical_toolset + name = "Left Electrical Toolset Implant (Screwdriver + Multitool)" + cost = 8 + path = /obj/item/organ/internal/cyberimp/arm/electrical_toolset/left_arm + //RIGHT ARM IMPLANTS /datum/augment_item/implant/r_arm slot = AUGMENT_SLOT_RIGHT_ARM_IMPLANT +/datum/augment_item/implant/r_arm/civilian_lighter + name = "Right Thumbtip Lighter" + cost = 2 + path = /obj/item/organ/internal/cyberimp/arm/civilian_lighter/right_arm + /datum/augment_item/implant/r_arm/razor_claws - name = "Right Razor Claws" + name = "Right Razor Claws (Knife + Wirecutters)" cost = 4 path = /obj/item/organ/internal/cyberimp/arm/razor_claws/right_arm +/datum/augment_item/implant/r_arm/adjuster + name = "Right Adjuster Implant (Screwdriver + Wrench)" + cost = 4 + path = /obj/item/organ/internal/cyberimp/arm/adjuster/right_arm + +/datum/augment_item/implant/r_arm/bureaucracy + name = "Right Bureaucrat's 'Jacent' Toolset Implant (4-colour Pen + Small Paper Bin + Approve/Deny Stamps)" + cost = 4 + path = /obj/item/organ/internal/cyberimp/arm/bureaucracy/right_arm + +/datum/augment_item/implant/r_arm/cargo + name = "Right FTU 'Deckhand' toolset implant (Universal Scanner + Boxcutter)" + cost = 4 + path = /obj/item/organ/internal/cyberimp/arm/cargo/right_arm + +/datum/augment_item/implant/r_arm/civilian_barstaff + name = "Right Waitstaff's Toolset Implant (Serving Tray + Rag)" + cost = 4 + path = /obj/item/organ/internal/cyberimp/arm/civilian_barstaff/right_arm + +/datum/augment_item/implant/r_arm/emt_triage + name = "Right Triage Actuator Implant (Drapes + Retractor + Hemostat)" + cost = 6 + path = /obj/item/organ/internal/cyberimp/arm/emt_triage/right_arm + +/datum/augment_item/implant/r_arm/blacksteel_forging + name = "Right Blacksteel 'Starforge' Toolset Implant (Forging Hammer + Tongs + Bellows)" + cost = 6 + path = /obj/item/organ/internal/cyberimp/arm/blacksteel_forging/right_arm + +/datum/augment_item/implant/r_arm/arc_welder + name = "Right Shipbreaker's Toolset Implant (Arc Welder + Crowbar + Wrench)" + cost = 6 + path = /obj/item/organ/internal/cyberimp/arm/arc_welder/right_arm + +/datum/augment_item/implant/r_arm/electrical_toolset + name = "Right Electrical Toolset Implant (Screwdriver + Multitool)" + cost = 8 + path = /obj/item/organ/internal/cyberimp/arm/electrical_toolset/right_arm + //EYES IMPLANTS /datum/augment_item/implant/eyes slot = AUGMENT_SLOT_EYES_IMPLANT diff --git a/modular_nova/modules/customization/modules/client/augment/organs.dm b/modular_nova/modules/customization/modules/client/augment/organs.dm index 0384c3668d9..6ccbee37db0 100644 --- a/modular_nova/modules/customization/modules/client/augment/organs.dm +++ b/modular_nova/modules/customization/modules/client/augment/organs.dm @@ -87,6 +87,11 @@ allowed_biotypes = MOB_ORGANIC|MOB_ROBOTIC cost = 1 +/datum/augment_item/organ/eyes/binoculars + name = "Digital Magnification Optics (x3)" + cost = 4 + path = /obj/item/organ/internal/eyes/robotic/binoculars + //TONGUES /datum/augment_item/organ/tongue slot = AUGMENT_SLOT_TONGUE @@ -99,10 +104,18 @@ name = "Robotic voicebox" path = /obj/item/organ/internal/tongue/robot +/datum/augment_item/organ/tongue/robo/forked + name = "Robotic lizard voicebox" + path = /obj/item/organ/internal/tongue/lizard/robot + /datum/augment_item/organ/tongue/cybernetic name = "Cybernetic tongue" path = /obj/item/organ/internal/tongue/cybernetic +/datum/augment_item/organ/tongue/cybernetic/forked + name = "Forked cybernetic tongue" + path = /obj/item/organ/internal/tongue/lizard/cybernetic + /datum/augment_item/organ/tongue/forked name = "Forked tongue" path = /obj/item/organ/internal/tongue/lizard diff --git a/modular_nova/modules/customization/modules/clothing/storage/belts.dm b/modular_nova/modules/customization/modules/clothing/storage/belts.dm index 071b656d64c..05265d030e7 100644 --- a/modular_nova/modules/customization/modules/clothing/storage/belts.dm +++ b/modular_nova/modules/customization/modules/clothing/storage/belts.dm @@ -18,12 +18,14 @@ canhold = list( /obj/item/storage/belt/storage_pouch, /obj/item/forging/reagent_weapon/sword, + /obj/item/forging/reagent_weapon/katana, + /obj/item/forging/reagent_weapon/bokken, + /obj/item/forging/reagent_weapon/dagger, /obj/item/melee/sabre, /obj/item/claymore, /obj/item/melee/cleric_mace, /obj/item/knife, /obj/item/melee/baton, - /obj/item/melee/baton, /obj/item/nullrod, //holds any subset of nullrod in the sheath-storage - - - ), canthold = list( // - - - except the second list's items (no fedora in the sheath) @@ -47,10 +49,10 @@ //Overrides normal dumping code to instead dump from the pouch item inside /datum/storage/belt/crusader/dump_content_at(atom/dest_object, mob/dumping_mob) - var/atom/used_belt = parent?.resolve() + var/atom/used_belt = parent if(!used_belt) return - var/obj/item/storage/belt/storage_pouch/pouch = locate() in real_location?.resolve() + var/obj/item/storage/belt/storage_pouch/pouch = locate() in real_location if(!pouch) pouch.balloon_alert(dumping_mob, "no pouch!") return //oopsie!! If we don't have a pouch! You're fucked! @@ -108,7 +110,7 @@ name = "storage pouch" desc = span_notice("Click on this to open your belt's inventory!") icon_state = "storage_pouch_icon" - worn_icon_state = "no_name" //Intentionally sets the worn icon to an error + worn_icon_state = "storage_pouch_icon" w_class = WEIGHT_CLASS_BULKY //Still cant put it in your bags, its technically a belt anchored = 1 //Dont want people taking it out with their hands diff --git a/modular_nova/modules/customization/modules/clothing/suits/coats.dm b/modular_nova/modules/customization/modules/clothing/suits/coats.dm index 61d1c6696fe..543ab5a0237 100644 --- a/modular_nova/modules/customization/modules/clothing/suits/coats.dm +++ b/modular_nova/modules/customization/modules/clothing/suits/coats.dm @@ -1,3 +1,15 @@ +#define STUFF_WINTER_COATS_HOLD list( \ + /obj/item/flashlight, \ + /obj/item/lighter, \ + /obj/item/modular_computer/pda, \ + /obj/item/radio, \ + /obj/item/storage/bag/books, \ + /obj/item/storage/fancy/cigarettes, \ + /obj/item/tank/internals/emergency_oxygen, \ + /obj/item/tank/internals/plasmaman, \ + /obj/item/toy, \ +) + /obj/item/clothing/suit/hooded/wintercoat/medical/paramedic allowed = list( /obj/item/analyzer, @@ -146,14 +158,19 @@ worn_icon = 'modular_nova/master_files/icons/mob/clothing/suit.dmi' blood_overlay_type = "coat" -/obj/item/clothing/suit/croptop - name = "black crop top turtleneck" +/obj/item/clothing/suit/jacket/croptop + name = "crop top turtleneck" desc = "A comfy looking turtleneck that exposes your midriff, fashionable but makes the point of a sweater moot." - icon_state = "croptop_black" + icon_state = "croptop" + icon = 'modular_nova/master_files/icons/obj/clothing/suits/jacket.dmi' + worn_icon = 'modular_nova/master_files/icons/mob/clothing/suits/jacket.dmi' body_parts_covered = CHEST|ARMS cold_protection = CHEST|ARMS - icon = 'modular_nova/master_files/icons/obj/clothing/suits.dmi' - worn_icon = 'modular_nova/master_files/icons/mob/clothing/suit.dmi' + greyscale_config = /datum/greyscale_config/croptop + greyscale_config_worn = /datum/greyscale_config/croptop/worn + greyscale_config_worn_teshari = /datum/greyscale_config/croptop/worn/teshari + greyscale_colors = "#1d1b1b" + flags_1 = IS_PLAYER_COLORABLE_1 supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION_NO_NEW_ICON /obj/item/clothing/suit/varsity @@ -167,6 +184,10 @@ flags_1 = IS_PLAYER_COLORABLE_1 supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION_NO_NEW_ICON +/obj/item/clothing/suit/varsity/Initialize(mapload) + . = ..() + allowed += STUFF_WINTER_COATS_HOLD + /obj/item/clothing/suit/hooded/leather name = "hooded leather coat" desc = "A simple leather coat with a hoodie underneath it, not really hooded is it?" @@ -198,6 +219,7 @@ /obj/item/clothing/suit/tailored_jacket/Initialize(mapload) . = ..() + allowed += STUFF_WINTER_COATS_HOLD AddComponent(/datum/component/toggle_icon, "sleeves") /obj/item/clothing/suit/tailored_jacket/short @@ -219,3 +241,26 @@ body_parts_covered = CHEST|GROIN|ARMS min_cold_protection_temperature = FIRE_SUIT_MIN_TEMP_PROTECT supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION_NO_NEW_ICON + +/obj/item/clothing/suit/warm_coat/Initialize(mapload) + . = ..() + allowed += STUFF_WINTER_COATS_HOLD + +/obj/item/clothing/suit/crop_jacket + name = "crop-top jacket" + desc = "A jacket that, some time long past, probably made quite the effective outdoors wear. Now, \ + some barbarian has cut the entire bottom half out." + icon_state = "crop_jacket" + greyscale_config = /datum/greyscale_config/crop_jacket + greyscale_config_worn = /datum/greyscale_config/crop_jacket/worn + greyscale_colors = "#ebebeb#a52f29#292929" + body_parts_covered = CHEST|ARMS + flags_1 = IS_PLAYER_COLORABLE_1 + supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION_NO_NEW_ICON + +/obj/item/clothing/suit/crop_jacket/Initialize(mapload) + . = ..() + allowed += STUFF_WINTER_COATS_HOLD + AddComponent(/datum/component/toggle_icon, "sleeves") + +#undef STUFF_WINTER_COATS_HOLD diff --git a/modular_nova/modules/customization/modules/clothing/~donator/donator_clothing.dm b/modular_nova/modules/customization/modules/clothing/~donator/donator_clothing.dm index cc4b0a8d0c2..9a541b75984 100644 --- a/modular_nova/modules/customization/modules/clothing/~donator/donator_clothing.dm +++ b/modular_nova/modules/customization/modules/clothing/~donator/donator_clothing.dm @@ -301,44 +301,74 @@ desc = "A full-face respirator designed by Forestfel Intersystem Industries and originally meant for Ixian Tajarans, the FIR-22 Rebreather is a snout-covering variant often seen used by Tajaran Military Personnel. It reeks of militarism." icon_state = "fir22" +/obj/item/clothing/mask/gas/caligram_visage_mask + name = "\improper Caligram visage mask" + desc = "An Ixian Tajaran mask commonly worn by Talicana monks that features a braided internals line and food consumption port. It bears the blue and red rank-stripes of a Caligram First Ensign." + icon = 'modular_nova/master_files/icons/donator/obj/clothing/masks.dmi' + worn_icon = 'modular_nova/master_files/icons/donator/mob/clothing/mask.dmi' + icon_state = "caligram_visage" + clothing_flags = BLOCK_GAS_SMOKE_EFFECT | MASKINTERNALS //same flags as actual sec hailer gas mask + flags_inv = HIDEFACE | HIDESNOUT + flags_cover = NONE + visor_flags = MASKCOVERSEYES | PEPPERPROOF + visor_flags_inv = HIDEFACE | HIDESNOUT + w_class = WEIGHT_CLASS_SMALL + tint = 0 + // Donation reward for Raxraus -/obj/item/clothing/head/caligram_cap_tan - name = "\improper Caligram tan softcap" - desc = "A Caligram's Fleet-branded hat in a '/surprisingly/' tasteful shade of brown." +/obj/item/clothing/head/caligram_cap + name = "\improper Caligram softcap" + desc = "A Caligram's Fleet-branded hat." icon = 'modular_nova/master_files/icons/donator/obj/clothing/hats.dmi' worn_icon = 'modular_nova/master_files/icons/donator/mob/clothing/head.dmi' icon_state = "caligram_cap_tan" + unique_reskin = list( + "Tan" = "caligram_cap_tan", + "Navy" = "caligram_cap_navy", + ) // Donation reward for Raxraus -/obj/item/clothing/under/jumpsuit/caligram_fatigues_tan - name = "\improper Caligram tan fatigues" - desc = "A set of tan and brown work fatigues bearing a Caligram's Fleet insigna on an armband. Lacks the typical Tajaran extravagance." +/obj/item/clothing/under/jumpsuit/caligram_fatigues + name = "\improper Caligram fatigues" + desc = "A set of work fatigues bearing a Caligram's Fleet insigna on an armband. Lacks the typical Tajaran extravagance." icon = 'modular_nova/master_files/icons/donator/obj/clothing/uniform.dmi' worn_icon = 'modular_nova/master_files/icons/donator/mob/clothing/uniform.dmi' worn_icon_digi = 'modular_nova/master_files/icons/donator/mob/clothing/uniform_digi.dmi' icon_state = "caligram_fatigues_tan" worn_icon_state = "caligram_fatigues_tan" + unique_reskin = list( + "Tan" = "caligram_fatigues_tan", + "Navy" = "caligram_fatigues_navy", + ) // Donation reward for Raxraus -/obj/item/clothing/suit/jacket/caligram_parka_tan - name = "\improper Caligram tan parka" - desc = "A tan parka with a fancy black belt and '/Caligram's Fleet/' stitched onto its armband." +/obj/item/clothing/suit/jacket/caligram_parka + name = "\improper Caligram parka" + desc = "A parka with a fancy belt and '/Caligram's Fleet/' stitched onto its armband." icon = 'modular_nova/master_files/icons/donator/obj/clothing/suits.dmi' worn_icon = 'modular_nova/master_files/icons/donator/mob/clothing/suit.dmi' icon_state = "caligram_parka_tan" body_parts_covered = CHEST|GROIN|ARMS cold_protection = CHEST|GROIN|LEGS|ARMS|HANDS + unique_reskin = list( + "Tan" = "caligram_parka_tan", + "Navy" = "caligram_parka_navy", + ) // Donation reward for Raxraus -/obj/item/clothing/suit/armor/vest/caligram_parka_vest_tan - name = "\improper Caligram armored tan parka" - desc = "A tan parka with a fancy black belt, a lightly armored vest and '/Caligram's Fleet/' stitched onto its armband." +/obj/item/clothing/suit/armor/vest/caligram_parka_vest + name = "\improper Caligram armored parka" + desc = "A parka with a fancy belt, a lightly armored vest and '/Caligram's Fleet/' stitched onto its armband." icon = 'modular_nova/master_files/icons/donator/obj/clothing/suits.dmi' worn_icon = 'modular_nova/master_files/icons/donator/mob/clothing/suit.dmi' icon_state = "caligram_parka_vest_tan" inhand_icon_state = "armor" body_parts_covered = CHEST|GROIN|ARMS cold_protection = CHEST|GROIN|LEGS|ARMS|HANDS + unique_reskin = list( + "Tan" = "caligram_parka_vest_tan", + "Navy" = "caligram_parka_vest_navy", + ) // Donation reward for ChillyLobster @@ -791,13 +821,24 @@ worn_icon_state = "mikuleggings" // Donation reward for CandleJax -/obj/item/clothing/head/helmet/space/plasmaman/candlejax - name = "emission's helmet" - desc = "A special containment helmet designed for heavy usage. Multiple dings and notches are on this one." - icon = 'modular_nova/master_files/icons/donator/obj/clothing/hats.dmi' - worn_icon = 'modular_nova/master_files/icons/donator/mob/clothing/head.dmi' - icon_state = "emissionhelm" +/obj/item/clothing/mask/gas/CMCP_mask + name = "\improper CMCP 'Oni' Faceplate" + desc = "A modular faceplate mount. Typically meant to be attached to field platforms." + icon = 'modular_nova/master_files/icons/donator/obj/clothing/masks.dmi' + worn_icon = 'modular_nova/master_files/icons/donator/mob/clothing/mask.dmi' + icon_state = "yoni" + w_class = WEIGHT_CLASS_SMALL + tint = 0 + flags_cover = MASKCOVERSMOUTH | MASKCOVERSEYES | PEPPERPROOF + visor_flags_cover = MASKCOVERSMOUTH | MASKCOVERSEYES | PEPPERPROOF + clothing_flags = VOICEBOX_DISABLED | MASKINTERNALS | BLOCK_GAS_SMOKE_EFFECT | GAS_FILTERING + use_radio_beeps_tts = TRUE + flags_inv = NONE +/obj/item/clothing/mask/gas/CMCP_mask/Initialize(mapload) + . = ..() + var/obj/item/clothing/mask/gas/sechailer/sechailer_type = /obj/item/clothing/mask/gas/sechailer + voice_filter = initial(sechailer_type.voice_filter) // Donation reward for CandleJax /obj/item/clothing/head/helmet/space/plasmaman/candlejax2 diff --git a/modular_nova/modules/customization/modules/mob/dead/new_player/sprite_accessories.dm b/modular_nova/modules/customization/modules/mob/dead/new_player/sprite_accessories.dm index 73af11a0129..e9f96e84df6 100644 --- a/modular_nova/modules/customization/modules/mob/dead/new_player/sprite_accessories.dm +++ b/modular_nova/modules/customization/modules/mob/dead/new_player/sprite_accessories.dm @@ -39,16 +39,12 @@ GLOBAL_LIST_EMPTY(cached_mutant_icon_files) ///Set this to true to make an accessory appear as color customizable in preferences despite advanced color settings being off, will also prevent the accessory from being reset var/always_color_customizable - ///Whether the accessory can have a special icon_state to render, i.e. wagging tails - var/special_render_case ///Special case of whether the accessory should be shifted in the X dimension, check taur genitals for example var/special_x_dimension ///Special case of whether the accessory should have a different icon, check taur genitals for example var/special_icon_case ///Special case for MODsuit overlays var/use_custom_mod_icon - ///Special case of applying a different color - var/special_colorize ///If defined, the accessory will be only available to ckeys inside the list. ITS ASSOCIATIVE, ie. ("ckey" = TRUE). For speed var/list/ckey_whitelist ///Whether this feature is genetic, and thus modifiable by DNA consoles @@ -87,15 +83,6 @@ GLOBAL_LIST_EMPTY(cached_mutant_icon_files) /datum/sprite_accessory/proc/is_hidden(mob/living/carbon/human/owner) return FALSE -/datum/sprite_accessory/proc/get_special_render_state(mob/living/carbon/human/H) - return null - -/datum/sprite_accessory/proc/get_special_render_key(mob/living/carbon/human/owner) - return key - -/datum/sprite_accessory/proc/get_special_render_colour(mob/living/carbon/human/H, passed_state) - return null - /datum/sprite_accessory/proc/get_special_icon(mob/living/carbon/human/H, passed_state) return icon @@ -135,12 +122,6 @@ GLOBAL_LIST_EMPTY(cached_mutant_icon_files) /datum/sprite_accessory/moth_markings/is_hidden(mob/living/carbon/human/owner) return FALSE - -/datum/sprite_accessory/moth_antennae/none - name = "None" - icon_state = "none" - - /datum/sprite_accessory/pod_hair name = "None" icon = 'modular_nova/master_files/icons/mob/species/podperson_hair.dmi' @@ -149,40 +130,6 @@ GLOBAL_LIST_EMPTY(cached_mutant_icon_files) recommended_species = list(SPECIES_PODPERSON, SPECIES_PODPERSON_WEAK) organ_type = /obj/item/organ/external/pod_hair - -/datum/sprite_accessory/spines - key = "spines" - generic = "Spines" - icon = 'modular_nova/master_files/icons/mob/sprite_accessory/lizard_spines.dmi' - special_render_case = TRUE - default_color = DEFAULT_SECONDARY - recommended_species = list(SPECIES_LIZARD, SPECIES_UNATHI, SPECIES_LIZARD_ASH, SPECIES_LIZARD_SILVER) - relevent_layers = list(BODY_BEHIND_LAYER, BODY_ADJ_LAYER) - genetic = TRUE - organ_type = /obj/item/organ/external/spines - -/datum/sprite_accessory/spines/is_hidden(mob/living/carbon/human/wearer) - var/obj/item/organ/external/tail/tail = wearer.get_organ_slot(ORGAN_SLOT_EXTERNAL_TAIL) - if(!wearer.w_uniform && !wearer.wear_suit) - return FALSE - // Can hide if wearing uniform - if(key in wearer.try_hide_mutant_parts) - return TRUE - if(wearer.wear_suit) - // Exception for MODs - if(istype(wearer.wear_suit, /obj/item/clothing/suit/mod)) - return FALSE - else if(!tail \ - || (wearer.wear_suit \ - && (wearer.wear_suit.flags_inv & HIDETAIL \ - || wearer.wear_suit.flags_inv & HIDESPINE) \ - ) - ) - return TRUE - -/datum/sprite_accessory/spines/get_special_render_state(mob/living/carbon/human/H) - return icon_state - /datum/sprite_accessory/caps key = "caps" generic = "Caps" @@ -199,737 +146,3 @@ GLOBAL_LIST_EMPTY(cached_mutant_icon_files) generic = "Leg Type" color_src = null genetic = TRUE - -/datum/sprite_accessory/socks - icon = 'modular_nova/master_files/icons/mob/clothing/underwear.dmi' - use_static = TRUE - -/datum/sprite_accessory/socks/socks_norm - name = "Normal (Greyscale)" - icon_state = "white_norm" - use_static = null - -/datum/sprite_accessory/socks/stirrups_norm - name = "Normal Stirrups (Greyscale)" - icon_state = "socks_norm-stir" - use_static = null - -/datum/sprite_accessory/socks/socks_short - name = "Short (Greyscale)" - icon_state = "white_short" - use_static = null - - -/datum/sprite_accessory/socks/socks_knee - name = "Knee-high (Greyscale)" - icon_state = "white_knee" - use_static = null - -/datum/sprite_accessory/socks/stirrups_knee - name = "Knee-high Stirrups" - icon_state = "socks_knee-stir" - use_static = null - -/datum/sprite_accessory/socks/striped_knee - name = "Knee-high - Striped" - icon_state = "striped_knee" - use_static = null - -/datum/sprite_accessory/socks/thin_knee - name = "Knee-high - Thin" - icon_state = "thin_knee" - use_static = null - -/datum/sprite_accessory/socks/socks_thigh - name = "Thigh-high (Greyscale)" - icon_state = "white_thigh" - use_static = null - -/datum/sprite_accessory/socks/stirrups_thigh - name = "Thigh-high Stirrups (Greyscale)" - icon_state = "socks_thigh-stir" - use_static = null - -/datum/sprite_accessory/socks/striped_thigh - name = "Thigh-high (Striped)" - icon_state = "striped_thigh" - use_static = null - -/datum/sprite_accessory/socks/striped_thigh/stirrups - name = "Thigh-high (Striped Stirrups)" - icon_state = "striped_thigh-stir" - use_static = null - -/datum/sprite_accessory/socks/leggings/stirrups/gym - name = "Thigh-high Stirrups (black with stripe)" - icon_state = "leggings-stir-black" - use_static = TRUE - -/datum/sprite_accessory/socks/bee_thigh - name = "Thigh-high - Bee (Old)" - icon_state = "bee_thigh_old" - -/datum/sprite_accessory/socks/bee_knee - name = "Knee-high - Bee (Old)" - icon_state = "bee_knee_old" - -/datum/sprite_accessory/socks/christmas_norm - name = "Normal - Christmas" - icon_state = "christmas_norm" - -/datum/sprite_accessory/socks/candycaner_norm - name = "Normal - Red Candy Cane" - icon_state = "candycaner_norm" - -/datum/sprite_accessory/socks/candycaneg_norm - name = "Normal - Green Candy Cane" - icon_state = "candycaneg_norm" - -/datum/sprite_accessory/socks/christmas_knee - name = "Knee-High - Christmas" - icon_state = "christmas_knee" - -/datum/sprite_accessory/socks/candycaner_knee - name = "Knee-High - Red Candy Cane" - icon_state = "candycaner_knee" - -/datum/sprite_accessory/socks/candycaneg_knee - name = "Knee-High - Green Candy Cane" - icon_state = "candycaneg_knee" - -/datum/sprite_accessory/socks/christmas_thigh - name = "Thigh-high - Christmas" - icon_state = "christmas_thigh" - -/datum/sprite_accessory/socks/candycaner_thigh - name = "Thigh-high - Red Candy Cane" - icon_state = "candycaner_thigh" - -/datum/sprite_accessory/socks/candycaneg_thigh - name = "Thigh-high - Green Candy Cane" - icon_state = "candycaneg_thigh" - -/datum/sprite_accessory/socks/rainbow_thigh - name = "Thigh-high - Rainbow" - icon_state = "rainbow_thigh" - -/datum/sprite_accessory/socks/rainbow_knee - name = "Knee-high - Rainbow" - icon_state = "rainbow_knee" - -/datum/sprite_accessory/socks/rainbow_knee/stirrups - name = "Knee-high - Rainbow Stirrups" - icon_state = "rainbow_knee-stir" - -/datum/sprite_accessory/socks/rainbow_thigh/stirrups - name = "Thigh-high - Rainbow Stirrups" - icon_state = "rainbow_thigh-stir" - -/datum/sprite_accessory/socks/fishnet_thigh_sr //TG has one, but this one matches with several tops that I'll get whined to if I change soooo - name = "Thigh-high - Fishnet" - icon_state = "fishnet" - -/datum/sprite_accessory/socks/fishnet_thigh/alt - name = "Thigh-high - Fishnet (Greyscale)" - icon_state = "fishnet_alt" - use_static = null - -/datum/sprite_accessory/socks/pantyhose/stirrups - name = "Pantyhose Stirrups" - icon_state = "pantyhose-stir" - use_static = null - -/datum/sprite_accessory/socks/pantyhose_ripped - name = "Pantyhose - Ripped" - icon_state = "pantyhose_ripped" - use_static = null - -/datum/sprite_accessory/socks/pantyhose_ripped/stirrups - name = "Pantyhose - Ripped Stirrups" - icon_state = "pantyhose_ripped-stir" - use_static = null - -/datum/sprite_accessory/socks/stockings_ripped - name = "Stockings - Ripped" - icon_state = "stockings_ripped" - -/datum/sprite_accessory/socks/leggings - name = "Leggings" - icon_state = "leggings" - use_static = null - -/datum/sprite_accessory/socks/leggings/stirrups - name = "Leggings - Stirrups" - icon_state = "leggings-stir" - use_static = null - -/datum/sprite_accessory/socks/leggings/latex - name = "Socks - Latex" - icon_state = "socks_latex" - use_static = TRUE - erp_accessory = TRUE - -/datum/sprite_accessory/underwear - icon = 'modular_nova/master_files/icons/mob/clothing/underwear.dmi' - ///Whether the underwear uses a special sprite for digitigrade style (i.e. briefs, not panties). Adds a "_d" suffix to the icon state - var/has_digitigrade = FALSE - ///Whether this underwear includes a top (Because gender = FEMALE doesn't actually apply here.). Hides breasts, nothing more. - var/hides_breasts = FALSE - -/datum/sprite_accessory/underwear/male_bee - name = "Boxers - Bee" - icon_state = "bee_shorts" - has_digitigrade = TRUE - gender = MALE - use_static = TRUE - -/datum/sprite_accessory/underwear/panties_basic - name = "Panties - Basic" - icon_state = "panties" - gender = FEMALE - -/datum/sprite_accessory/underwear/female_beekini - name = "Panties - Bee-kini" - icon_state = "panties_bee-kini" - gender = FEMALE - use_static = TRUE - -/datum/sprite_accessory/underwear/fishnet_lower - name = "Panties - Fishnet" - icon_state = "fishnet_lower" - gender = FEMALE - use_static = TRUE - -/datum/sprite_accessory/underwear/fishnet_lower/alt - name = "Panties - Fishnet (Greyscale)" - icon_state = "fishnet_lower_alt" - use_static = null - -/datum/sprite_accessory/underwear/female_beekini - name = "Panties - Bee-kini" - icon_state = "panties_bee-kini" - gender = FEMALE - use_static = TRUE - -/datum/sprite_accessory/underwear/female_commie - name = "Panties - Commie" - icon_state = "panties_commie" - gender = FEMALE - use_static = TRUE - -/datum/sprite_accessory/underwear/female_usastripe - name = "Panties - Freedom" - icon_state = "panties_assblastusa" - gender = FEMALE - use_static = TRUE - -/datum/sprite_accessory/underwear/female_kinky - name = "Panties - Kinky Black" - icon_state = "panties_kinky" - gender = FEMALE - use_static = TRUE - -/datum/sprite_accessory/underwear/panties_uk - name = "Panties - UK" - icon_state = "panties_uk" - gender = FEMALE - use_static = TRUE - -/datum/sprite_accessory/underwear/panties_neko - name = "Panties - Neko" - icon_state = "panties_neko" - gender = FEMALE - -/datum/sprite_accessory/underwear/panties_slim - name = "Panties - Slim" - icon_state = "panties_slim" - gender = FEMALE - -/datum/sprite_accessory/underwear/striped_panties - name = "Panties - Striped" - icon_state = "striped_panties" - gender = FEMALE - -/datum/sprite_accessory/underwear/panties_swimsuit - name = "Panties - Swimsuit" - icon_state = "panties_swimming" - gender = FEMALE - -/datum/sprite_accessory/underwear/panties_thin - name = "Panties - Thin" - icon_state = "panties_thin" - gender = FEMALE - -/datum/sprite_accessory/underwear/swimsuit_red - name = "Swimsuit, One Piece - Red" - icon_state = "swimming_red" - gender = FEMALE - use_static = TRUE - hides_breasts = TRUE - -/datum/sprite_accessory/underwear/swimsuit - name = "Swimsuit, One Piece - Black" - icon_state = "swimming_black" - gender = FEMALE - use_static = TRUE - hides_breasts = TRUE - -/datum/sprite_accessory/underwear/swimsuit_blue - name = "Swimsuit, One Piece - Striped Blue" - icon_state = "swimming_blue" - gender = FEMALE - use_static = TRUE - hides_breasts = TRUE - -/datum/sprite_accessory/underwear/thong - name = "Thong" - icon_state = "thong" - gender = FEMALE - -/datum/sprite_accessory/underwear/thong_babydoll - name = "Thong - Alt" - icon_state = "thong_babydoll" - gender = FEMALE - -/datum/sprite_accessory/underwear/chastbelt - name = "Chastity Belt" - icon_state = "chastbelt" - use_static = TRUE - erp_accessory = TRUE - -/datum/sprite_accessory/underwear/chastcage - name = "Chastity Cage" - icon_state = "chastcage" - use_static = null - erp_accessory = TRUE - -/datum/sprite_accessory/underwear/latex - name = "Panties - Latex" - icon_state = "panties_latex" - use_static = TRUE - erp_accessory = TRUE - -/datum/sprite_accessory/undershirt/lizared - name = "LIZARED Top" - icon_state = "lizared_top" - use_static = TRUE - -/datum/sprite_accessory/underwear/lizared - name = "LIZARED Underwear" - icon_state = "lizared" - use_static = TRUE - hides_breasts = TRUE - -/datum/sprite_accessory/underwear/boyshorts - name = "Boyshorts" - icon_state = "boyshorts" - has_digitigrade = TRUE - gender = FEMALE - -/datum/sprite_accessory/underwear/boyshorts_alt - name = "Boyshorts (Alt)" - icon_state = "boyshorts_alt" - gender = FEMALE - -/* - Adding hides_breasts to TG underwears where applicable -*/ - -/datum/sprite_accessory/underwear/swimsuit_onepiece - name = "One-Piece Swimsuit" - icon_state = "swim_onepiece" - gender = FEMALE - hides_breasts = TRUE - -/datum/sprite_accessory/underwear/swimsuit_strapless_onepiece - name = "Strapless One-Piece Swimsuit" - icon_state = "swim_strapless_onepiece" - gender = FEMALE - hides_breasts = TRUE -/datum/sprite_accessory/underwear/swimsuit_stripe - name = "Strapless Striped Swimsuit" - icon_state = "swim_stripe" - gender = FEMALE - hides_breasts = TRUE - - -/* - End of adding hides_breasts to TG stuff, start of adding has_digitigrade to TG stuff -*/ -/datum/sprite_accessory/underwear/male_briefs - has_digitigrade = TRUE - -/datum/sprite_accessory/underwear/male_boxers - has_digitigrade = TRUE - -/datum/sprite_accessory/underwear/male_stripe - has_digitigrade = TRUE - -/datum/sprite_accessory/underwear/male_midway - has_digitigrade = TRUE - -/datum/sprite_accessory/underwear/male_longjohns - has_digitigrade = TRUE - -/datum/sprite_accessory/underwear/male_hearts - has_digitigrade = TRUE - -/datum/sprite_accessory/underwear/male_commie - has_digitigrade = TRUE - -/datum/sprite_accessory/underwear/male_usastripe - has_digitigrade = TRUE - -/datum/sprite_accessory/underwear/male_uk - has_digitigrade = TRUE - -/* - End of adding has_digitigrade to TG stuff -*/ - - -/// BRAS and all the fun stuff of moving these about. -/datum/sprite_accessory/bra - icon = 'modular_nova/master_files/icons/mob/clothing/underwear.dmi' - use_static = FALSE - em_block = TRUE - -/datum/sprite_accessory/bra/nude - name = "Nude" - icon_state = null - gender = NEUTER - -/datum/sprite_accessory/bra/bra - name = "Bra" - icon_state = "bra" - gender = FEMALE - use_static = null - -/datum/sprite_accessory/bra/bra_alt - name = "Bra - Alt" - icon_state = "bra_alt" - gender = FEMALE - use_static = null - -/datum/sprite_accessory/bra/bra_thin - name = "Bra - Thin" - icon_state = "bra_thin" - gender = FEMALE - use_static = null - -/datum/sprite_accessory/bra/bra_kinky - name = "Bra - Kinky Black" - icon_state = "bra_kinky" - gender = FEMALE - use_static = TRUE - -/datum/sprite_accessory/bra/bra_freedom - name = "Bra - Freedom" - icon_state = "bra_assblastusa" - gender = FEMALE - use_static = TRUE - -/datum/sprite_accessory/bra/bra_commie - name = "Bra - Commie" - icon_state = "bra_commie" - gender = FEMALE - use_static = TRUE - -/datum/sprite_accessory/bra/bra_beekini - name = "Bra - Bee-kini" - icon_state = "bra_bee-kini" - gender = FEMALE - use_static = TRUE - -/datum/sprite_accessory/bra/bra_uk - name = "Bra - UK" - icon_state = "bra_uk" - gender = FEMALE - use_static = TRUE - -/datum/sprite_accessory/bra/bra_neko - name = "Bra - Neko" - icon_state = "bra_neko" - gender = FEMALE - use_static = null - -/datum/sprite_accessory/bra/hi_vis_bra - name = "Safekini" - icon_state = "hi_vis_bra" - gender = FEMALE - use_static = TRUE - -/datum/sprite_accessory/bra/halterneck_bra - name = "Bra - Halterneck" - icon_state = "halterneck_bra" - gender = FEMALE - use_static = null - -/datum/sprite_accessory/bra/halterneck_alt - name = "Bra - Halterneck (Alt)" - icon_state = "bra_swimming" - gender = FEMALE - use_static = null - -/datum/sprite_accessory/bra/sports_bra - name = "Bra, Sports" - icon_state = "sports_bra" - gender = FEMALE - use_static = null - -/datum/sprite_accessory/bra/sports_bra_alt - name = "Bra, Sports - Alt" - icon_state = "sports_bra_alt" - gender = FEMALE - use_static = null - -/datum/sprite_accessory/bra/bra_strapless - name = "Bra, Strapless" - icon_state = "bra_strapless" - gender = FEMALE - use_static = null - -/datum/sprite_accessory/bra/bra_latex - name = "Bra, Latex" - icon_state = "bra_latex" - gender = FEMALE - use_static = TRUE - erp_accessory = TRUE - -/datum/sprite_accessory/bra/striped_bra - name = "Bra - Striped" - icon_state = "striped_bra" - gender = FEMALE - use_static = null - -/datum/sprite_accessory/bra/sarashi - name = "Bra - Sarashi" - icon_state = "bandages" - gender = NEUTER - use_static = null - -/datum/sprite_accessory/bra/fishnet_sleeves - name = "Fishnet - Sleeved" - icon_state = "fishnet_sleeves" - gender = FEMALE - use_static = TRUE - -/datum/sprite_accessory/bra/fishnet_sleeves/alt - name = "Fishnet - Sleeved (Greyscale)" - icon_state = "fishnet_sleeves_alt" - use_static = null - -/datum/sprite_accessory/bra/fishnet_base - name = "Fishnet - Sleeveless" - icon_state = "fishnet_body" - gender = FEMALE - use_static = TRUE - -/datum/sprite_accessory/bra/fishnet_base/alt - name = "Fishnet - Sleeveless (Greyscale)" - icon_state = "fishnet_body_alt" - use_static = null - -/datum/sprite_accessory/bra/chastbra - name = "Chastity Bra" - icon_state = "chastbra" - gender = FEMALE - use_static = TRUE - erp_accessory = TRUE - -/datum/sprite_accessory/bra/pasties - name = "Pasties" - icon_state = "pasties" - gender = FEMALE - use_static = null - erp_accessory = TRUE - -/datum/sprite_accessory/bra/pasties_alt - name = "Pasties - Alt" - icon_state = "pasties_alt" - gender = FEMALE - use_static = null - erp_accessory = TRUE - -/datum/sprite_accessory/bra/shibari - name = "Shibari" - icon_state = "shibari" - gender = FEMALE - use_static = null - erp_accessory = TRUE - -/datum/sprite_accessory/bra/shibari_sleeves - name = "Shibari Sleeves" - icon_state = "shibari_sleeves" - gender = FEMALE - use_static = null - erp_accessory = TRUE - -/datum/sprite_accessory/bra/swimsuit - name = "Swimsuit Top" - icon_state = "bikini_bra" - gender = FEMALE - use_static = null - -/datum/sprite_accessory/bra/strapless_swimsuit - name = "Strapless Swimsuit Top" - icon_state = "strapless_biki_bra" - gender = FEMALE - use_static = null - -/datum/sprite_accessory/bra/strapless_swimsuit_alt - name = "Strapless Swimsuit Top (Alt)" - icon_state = "strapless_biki_bra_alt" - gender = FEMALE - use_static = null - -/datum/sprite_accessory/bra/binder - name = "Binder" - icon_state = "binder" - gender = MALE - use_static = null - -/datum/sprite_accessory/bra/binder/strapless - name = "Binder - Strapless" - icon_state = "binder_strapless" - -/datum/sprite_accessory/undershirt - icon = 'modular_nova/master_files/icons/mob/clothing/underwear.dmi' - use_static = TRUE - ///Whether this underwear includes a bottom (For Leotards and the likes) - var/hides_groin = FALSE - -/datum/sprite_accessory/undershirt/shirt - name = "Shirt" - icon_state = "shirt" - use_static = null - -/datum/sprite_accessory/undershirt/shirt_alt - name = "Shirt - Alt" - icon_state = "shirt_alt" - use_static = null - -/datum/sprite_accessory/undershirt/shortsleeve - name = "Short-Sleeved Shirt" - icon_state = "shortsleeve" - use_static = null - -/datum/sprite_accessory/undershirt/polo - name = "Polo Shirt" - icon_state = "polo" - use_static = null - -/datum/sprite_accessory/undershirt/tanktop - name = "Tank Top" - icon_state = "tanktop" - use_static = null - -/datum/sprite_accessory/undershirt/tanktop_alt - name = "Tank Top - Alt" - icon_state = "tanktop_alt" - use_static = null - -/datum/sprite_accessory/undershirt/tanktop_midriff - name = "Tank Top - Midriff" - icon_state = "tank_midriff" - gender = FEMALE - use_static = null - -/datum/sprite_accessory/undershirt/tanktop_midriff_alt - name = "Tank Top - Midriff Halterneck" - icon_state = "tank_midriff_alt" - gender = FEMALE - use_static = null - -/datum/sprite_accessory/undershirt/tankstripe - name = "Tank Top - Striped" - icon_state = "tank_stripes" - use_static = TRUE - -/datum/sprite_accessory/undershirt/tank_top_rainbow - name = "Tank Top - Rainbow" - icon_state = "tank_rainbow" - use_static = TRUE - -/datum/sprite_accessory/undershirt/tank_top_sun - name = "Tank Top - Sun" - icon_state = "tank_sun" - use_static = TRUE - -/datum/sprite_accessory/undershirt/babydoll - name = "Babydoll" - icon_state = "babydoll" - gender = FEMALE - use_static = null - -/datum/sprite_accessory/undershirt/corset - name = "Corset" - icon_state = "corset" - gender = FEMALE - use_static = TRUE - hides_groin = TRUE - -/datum/sprite_accessory/undershirt/bee_shirt - name = "Shirt - Bee" - icon_state = "bee_shirt" - use_static = TRUE - -/datum/sprite_accessory/undershirt/bulletclub //4 life - name = "Shirt - Black Skull" - icon_state = "shirt_bc" - gender = NEUTER - -/datum/sprite_accessory/undershirt/striped - name = "Shirt - Black Stripes" - icon_state = "longstripe" - gender = NEUTER - use_static = TRUE - -/datum/sprite_accessory/undershirt/striped/blue - name = "Shirt - Blue Stripes" - icon_state = "longstripe_blue" - -/datum/sprite_accessory/undershirt/turtleneck - name = "Sweater - Turtleneck" - icon_state = "turtleneck" - use_static = null - gender = NEUTER - -/datum/sprite_accessory/undershirt/turtleneck/smooth - name = "Sweater - Smooth Turtleneck" - icon_state = "turtleneck_smooth" - -/datum/sprite_accessory/undershirt/turtleneck/sleeveless - name = "Sweater - Sleeveless Turtleneck" - icon_state = "turtleneck_sleeveless" - -/datum/sprite_accessory/undershirt/offshoulder - name = "Shirt - Off-Shoulder" - icon_state = "one_arm" - gender = FEMALE - use_static = null - -/datum/sprite_accessory/undershirt/buttondown - name = "Shirt - Buttondown" - icon_state = "buttondown" - gender = NEUTER - use_static = null - -/datum/sprite_accessory/undershirt/buttondown/short_sleeve - name = "Shirt - Short Sleeved Buttondown" - icon_state = "buttondown_short" - -/datum/sprite_accessory/undershirt/leotard - name = "Shirt - Leotard" - icon_state = "leotard" - gender = FEMALE - use_static = null - hides_groin = TRUE - -/datum/sprite_accessory/undershirt/leotard/turtleneck - name = "Shirt - Turtleneck Leotard" - icon_state = "leotard_turtleneck" - -/datum/sprite_accessory/undershirt/leotard/turtleneck/sleeveless - name = "Shirt - Turtleneck Leotard Sleeveless" - icon_state = "leotard_turtleneck_sleeveless" diff --git a/modular_nova/modules/customization/modules/mob/dead/new_player/sprite_accessories/genitals.dm b/modular_nova/modules/customization/modules/mob/dead/new_player/sprite_accessories/genitals.dm index 89a0e31bbfe..2819d0a5199 100644 --- a/modular_nova/modules/customization/modules/mob/dead/new_player/sprite_accessories/genitals.dm +++ b/modular_nova/modules/customization/modules/mob/dead/new_player/sprite_accessories/genitals.dm @@ -2,8 +2,6 @@ #define TAUR_DIMENSION_X 64 /datum/sprite_accessory/genital - special_render_case = TRUE - special_colorize = TRUE var/associated_organ_slot /// If true, then there should be a variant in the icon file that's slightly pinkier to match human base colors. var/has_skintone_shading = FALSE @@ -57,15 +55,6 @@ else return TRUE -/datum/sprite_accessory/genital/get_special_render_state(mob/living/carbon/human/human) - var/obj/item/organ/external/genital/genital = human.get_organ_slot(associated_organ_slot) - return "[genital?.sprite_suffix]" - -/datum/sprite_accessory/genital/get_special_render_colour(mob/living/carbon/human/human, render_state) - var/obj/item/organ/external/genital/genital = human.get_organ_slot(associated_organ_slot) - if(genital?.uses_skin_color && HAS_TRAIT(human, TRAIT_USES_SKINTONES)) - return skintone2hex(human.skin_tone) - /datum/sprite_accessory/genital/penis icon = 'modular_nova/master_files/icons/mob/sprite_accessory/genitals/penis_onmob.dmi' organ_type = /obj/item/organ/external/genital/penis diff --git a/modular_nova/modules/customization/modules/mob/dead/new_player/sprite_accessories/hair.dm b/modular_nova/modules/customization/modules/mob/dead/new_player/sprite_accessories/hair.dm index 6573e793d98..ec8be5eb269 100644 --- a/modular_nova/modules/customization/modules/mob/dead/new_player/sprite_accessories/hair.dm +++ b/modular_nova/modules/customization/modules/mob/dead/new_player/sprite_accessories/hair.dm @@ -211,6 +211,10 @@ name = "Long Gloomy Bangs" icon_state = "hair_gloomy_long" +/datum/sprite_accessory/hair/skyrat/gloomy_longer + name = "Very Long Gloomy Bangs" + icon_state = "hair_gloomy_longer" + /datum/sprite_accessory/hair/skyrat/halfshave name = "Half-shaved 2" icon_state = "hair_halfshave" @@ -527,6 +531,10 @@ name = "Fluffy long" icon_state = "hair_fluffy_long" +/datum/sprite_accessory/hair/skyrat/kajam + name = "Kajam" + icon_state = "hair_kajam" + /datum/sprite_accessory/hair/skyrat/khmuro name = "Khmuro" icon_state = "hair_khmuro" diff --git a/modular_nova/modules/customization/modules/mob/dead/new_player/sprite_accessories/ipc.dm b/modular_nova/modules/customization/modules/mob/dead/new_player/sprite_accessories/ipc.dm index d466ab830d7..9c1d949ac9e 100644 --- a/modular_nova/modules/customization/modules/mob/dead/new_player/sprite_accessories/ipc.dm +++ b/modular_nova/modules/customization/modules/mob/dead/new_player/sprite_accessories/ipc.dm @@ -286,6 +286,10 @@ name = "E3N AI" icon_state = "e3n" +/datum/sprite_accessory/synth_chassis/mariinsky + name = "Mariinsky Ballet Company" + icon_state = "mariinsky" + //Heads - snowflake phantom accessory for choosing IPC heads (hell yeah!) /datum/sprite_accessory/synth_head /// Boolean for if this is actually dimorphic. @@ -375,3 +379,8 @@ /datum/sprite_accessory/synth_head/e3n name = "E3N AI" icon_state = "e3n" + +/datum/sprite_accessory/synth_head/mariinsky + name = "Mariinsky Ballet Company" + icon_state = "mariinsky" + color_src = MUTANT_COLOR diff --git a/modular_nova/modules/customization/modules/mob/dead/new_player/sprite_accessories/moth_antennae.dm b/modular_nova/modules/customization/modules/mob/dead/new_player/sprite_accessories/moth_antennae.dm index c8183f2c242..6ebbda008df 100644 --- a/modular_nova/modules/customization/modules/mob/dead/new_player/sprite_accessories/moth_antennae.dm +++ b/modular_nova/modules/customization/modules/mob/dead/new_player/sprite_accessories/moth_antennae.dm @@ -22,3 +22,7 @@ // This line basically checks if we FORCE accessory-ears to show, for items with earholes like Balaclavas and Luchador masks && ((wearer.head && !(wearer.head.flags_inv & SHOWSPRITEEARS)) || (wearer.wear_mask && !(wearer.wear_mask?.flags_inv & SHOWSPRITEEARS)))) return TRUE + +/datum/sprite_accessory/moth_antennae/none + name = "None" + icon_state = "none" diff --git a/modular_nova/modules/customization/modules/mob/dead/new_player/sprite_accessories/spines.dm b/modular_nova/modules/customization/modules/mob/dead/new_player/sprite_accessories/spines.dm index 04c028c8b01..4f631993af4 100644 --- a/modular_nova/modules/customization/modules/mob/dead/new_player/sprite_accessories/spines.dm +++ b/modular_nova/modules/customization/modules/mob/dead/new_player/sprite_accessories/spines.dm @@ -1,19 +1,46 @@ +/datum/sprite_accessory/spines + key = "spines" + generic = "Spines" + default_color = DEFAULT_SECONDARY + recommended_species = list(SPECIES_LIZARD, SPECIES_UNATHI, SPECIES_LIZARD_ASH, SPECIES_LIZARD_SILVER) + relevent_layers = list(BODY_BEHIND_LAYER, BODY_ADJ_LAYER) + genetic = TRUE + organ_type = /obj/item/organ/external/spines + /datum/sprite_accessory/spines/is_hidden(mob/living/carbon/human/wearer) + if(wearer.w_uniform) + if(wearer.w_uniform.flags_inv & HIDESPINE) + return TRUE + if(wearer.wear_suit) + if(wearer.wear_suit.flags_inv & HIDESPINE) + return TRUE + if(key in wearer.try_hide_mutant_parts) + return TRUE + + return FALSE + +/datum/sprite_accessory/tail_spines + key = "tailspines" + default_color = DEFAULT_SECONDARY + relevent_layers = list(BODY_BEHIND_LAYER, BODY_ADJ_LAYER) + +/datum/sprite_accessory/tail_spines/is_hidden(mob/living/carbon/human/wearer) var/list/used_in_turf = list("tail") - // Emote exception if(wearer.owned_turf?.name in used_in_turf) + // Emote exception return TRUE if(!wearer.w_uniform && !wearer.wear_suit) return FALSE - if(key in wearer.try_hide_mutant_parts) + if("spines" in wearer.try_hide_mutant_parts) + return TRUE + if("tail" in wearer.try_hide_mutant_parts) return TRUE if(wearer.wear_suit) // Exception for MODs if(istype(wearer.wear_suit, /obj/item/clothing/suit/mod)) return FALSE - // Hide accessory if flagged to do so else if(wearer.wear_suit.flags_inv & HIDETAIL) return TRUE diff --git a/modular_nova/modules/customization/modules/mob/dead/new_player/sprite_accessories/synthliz.dm b/modular_nova/modules/customization/modules/mob/dead/new_player/sprite_accessories/synthliz.dm index d4762e0732d..16bab23440b 100644 --- a/modular_nova/modules/customization/modules/mob/dead/new_player/sprite_accessories/synthliz.dm +++ b/modular_nova/modules/customization/modules/mob/dead/new_player/sprite_accessories/synthliz.dm @@ -79,6 +79,7 @@ icon_state = "synthliz" flags_for_organ = SPRITE_ACCESSORY_WAG_ABLE genetic = FALSE + spine_key = SPINE_KEY_LIZARD //Synth Antennae /datum/sprite_accessory/antenna/synthliz diff --git a/modular_nova/modules/customization/modules/mob/dead/new_player/sprite_accessories/tails.dm b/modular_nova/modules/customization/modules/mob/dead/new_player/sprite_accessories/tails.dm index 208fcf4b7f1..41be5d0fc3c 100644 --- a/modular_nova/modules/customization/modules/mob/dead/new_player/sprite_accessories/tails.dm +++ b/modular_nova/modules/customization/modules/mob/dead/new_player/sprite_accessories/tails.dm @@ -3,8 +3,6 @@ generic = "Tail" organ_type = /obj/item/organ/external/tail icon = 'modular_nova/master_files/icons/mob/sprite_accessory/tails.dmi' - special_render_case = TRUE - special_colorize = TRUE relevent_layers = list(BODY_BEHIND_LAYER, BODY_FRONT_LAYER) genetic = TRUE /// Can we use this tail for the fluffy tail turf emote? @@ -29,9 +27,6 @@ else if(wearer.wear_suit.flags_inv & HIDETAIL) return TRUE -/datum/sprite_accessory/tails/get_special_render_state(mob/living/carbon/human/wearer) - return icon_state - /datum/sprite_accessory/tails/none name = "None" icon_state = "none" diff --git a/modular_nova/modules/customization/modules/mob/dead/new_player/sprite_accessories/underwear/bras.dm b/modular_nova/modules/customization/modules/mob/dead/new_player/sprite_accessories/underwear/bras.dm new file mode 100644 index 00000000000..717859c1d6d --- /dev/null +++ b/modular_nova/modules/customization/modules/mob/dead/new_player/sprite_accessories/underwear/bras.dm @@ -0,0 +1,172 @@ +//Modular separation of Bras as a separate underwear option that displays below undershirts +/datum/sprite_accessory/bra + icon = 'modular_nova/master_files/icons/mob/clothing/underwear.dmi' + use_static = FALSE + gender = FEMALE + em_block = TRUE + +/datum/sprite_accessory/bra/nude + name = "Nude" + icon_state = null + gender = NEUTER + +/datum/sprite_accessory/bra/bra + name = "Bra" + icon_state = "bra" + +/datum/sprite_accessory/bra/bra_alt + name = "Bra - Alt" + icon_state = "bra_alt" + +/datum/sprite_accessory/bra/bra_thin + name = "Bra - Thin" + icon_state = "bra_thin" + +/datum/sprite_accessory/bra/sports_bra + name = "Bra - Sports" + icon_state = "sports_bra" + +/datum/sprite_accessory/bra/sports_bra_alt + name = "Bra - Sports (Alt)" + icon_state = "sports_bra_alt" + +/datum/sprite_accessory/bra/bra_strapless + name = "Bra - Strapless" + icon_state = "bra_strapless" + +/datum/sprite_accessory/bra/bra_strapless_alt + name = "Bra - Strapless (Alt)" + icon_state = "bra_strapless_alt" + +/datum/sprite_accessory/bra/swimsuit + name = "Swimsuit Top" + icon_state = "bikini_bra" + +/datum/sprite_accessory/bra/strapless_swimsuit + name = "Swimsuit Top - Strapless" + icon_state = "strapless_biki_bra" + +/datum/sprite_accessory/bra/halterneck_bra + name = "Bra - Halterneck" + icon_state = "halterneck_bra" + +/datum/sprite_accessory/bra/halterneck_alt + name = "Bra - Halterneck (Alt)" + icon_state = "halterneck_bra_alt" + +/datum/sprite_accessory/bra/bra_neko + name = "Bra - Neko" + icon_state = "bra_neko" + +/datum/sprite_accessory/bra/binder + name = "Binder" + icon_state = "binder" + gender = MALE + +/datum/sprite_accessory/bra/binder/strapless + name = "Binder - Strapless" + icon_state = "binder_strapless" + +/datum/sprite_accessory/bra/sarashi + name = "Sarashi" + icon_state = "bandages" + gender = NEUTER + +/datum/sprite_accessory/bra/striped_bra + name = "Bra - Striped" + icon_state = "striped_bra" + +//Presets +/datum/sprite_accessory/bra/lizared + name = "LIZARED Top" + icon_state = "lizared_top" + use_static = TRUE + +/datum/sprite_accessory/bra/bra_kinky + name = "Bra - Lingerie" + icon_state = "bra_kinky" + use_static = TRUE + +/datum/sprite_accessory/bra/bra_commie + name = "Bra - Commie" + icon_state = "bra_commie" + use_static = TRUE + +/datum/sprite_accessory/bra/bra_freedom + name = "Bra - Freedom" + icon_state = "bra_assblastusa" + use_static = TRUE + +/datum/sprite_accessory/bra/bra_uk + name = "Bra - UK" + icon_state = "bra_uk" + use_static = TRUE + +/datum/sprite_accessory/bra/bra_beekini + name = "Bra - Bee-kini" + icon_state = "bra_bee-kini" + use_static = TRUE + +/datum/sprite_accessory/bra/cow + name = "Bra - Cow" + icon_state = "bra_cow" + use_static = TRUE + +/datum/sprite_accessory/bra/hi_vis_bra + name = "Safekini" + icon_state = "hi_vis_bra" + use_static = TRUE + +//Fishnets +/datum/sprite_accessory/bra/fishnet_sleeves + name = "Fishnet - Sleeved" + icon_state = "fishnet_sleeves" + use_static = TRUE + +/datum/sprite_accessory/bra/fishnet_base + name = "Fishnet - Sleeveless" + icon_state = "fishnet_body" + use_static = TRUE + +/datum/sprite_accessory/bra/fishnet_sleeves/alt + name = "Fishnet - Sleeved (Greyscale)" + icon_state = "fishnet_sleeves_alt" + use_static = FALSE + +/datum/sprite_accessory/bra/fishnet_base/alt + name = "Fishnet - Sleeveless (Greyscale)" + icon_state = "fishnet_body_alt" + use_static = FALSE + +//ERP Accessories +/datum/sprite_accessory/bra/bra_latex + name = "Bra - Latex" + icon_state = "bra_latex" + use_static = TRUE + erp_accessory = TRUE + +/datum/sprite_accessory/bra/chastbra + name = "Bra - Chastity" + icon_state = "chastbra" + use_static = TRUE + erp_accessory = TRUE + +/datum/sprite_accessory/bra/pasties + name = "Pasties" + icon_state = "pasties" + erp_accessory = TRUE + +/datum/sprite_accessory/bra/pasties_alt + name = "Pasties (Alt)" + icon_state = "pasties_alt" + erp_accessory = TRUE + +/datum/sprite_accessory/bra/shibari + name = "Shibari" + icon_state = "shibari" + erp_accessory = TRUE + +/datum/sprite_accessory/bra/shibari_sleeves + name = "Shibari Sleeves" + icon_state = "shibari_sleeves" + erp_accessory = TRUE diff --git a/modular_nova/modules/customization/modules/mob/dead/new_player/sprite_accessories/underwear/socks.dm b/modular_nova/modules/customization/modules/mob/dead/new_player/sprite_accessories/underwear/socks.dm new file mode 100644 index 00000000000..76bbb1e8827 --- /dev/null +++ b/modular_nova/modules/customization/modules/mob/dead/new_player/sprite_accessories/underwear/socks.dm @@ -0,0 +1,166 @@ +/datum/sprite_accessory/socks + //All underwear goes in the same file for the sake of digi variants + icon = 'modular_nova/master_files/icons/mob/clothing/underwear.dmi' + use_static = TRUE + +/datum/sprite_accessory/socks/socks_norm + name = "Normal (Greyscale)" + icon_state = "white_norm" + use_static = FALSE + +/datum/sprite_accessory/socks/stirrups_norm + name = "Normal Stirrups (Greyscale)" + icon_state = "socks_norm-stir" + use_static = FALSE + +/datum/sprite_accessory/socks/socks_short + name = "Short (Greyscale)" + icon_state = "white_short" + use_static = FALSE + +/datum/sprite_accessory/socks/socks_knee + name = "Knee-high (Greyscale)" + icon_state = "white_knee" + use_static = FALSE + +/datum/sprite_accessory/socks/stirrups_knee + name = "Knee-high Stirrups" + icon_state = "socks_knee-stir" + use_static = FALSE + +/datum/sprite_accessory/socks/striped_knee + name = "Knee-high - Striped" + icon_state = "striped_knee" + use_static = FALSE + +/datum/sprite_accessory/socks/thin_knee + name = "Knee-high - Thin" + icon_state = "thin_knee" + use_static = FALSE + +/datum/sprite_accessory/socks/socks_thigh + name = "Thigh-high (Greyscale)" + icon_state = "white_thigh" + use_static = FALSE + +/datum/sprite_accessory/socks/stirrups_thigh + name = "Thigh-high Stirrups (Greyscale)" + icon_state = "socks_thigh-stir" + use_static = FALSE + +/datum/sprite_accessory/socks/striped_thigh + name = "Thigh-high (Striped)" + icon_state = "striped_thigh" + use_static = FALSE + +/datum/sprite_accessory/socks/striped_thigh/stirrups + name = "Thigh-high (Striped Stirrups)" + icon_state = "striped_thigh-stir" + use_static = FALSE + +/datum/sprite_accessory/socks/leggings/stirrups/gym + name = "Thigh-high Stirrups (black with stripe)" + icon_state = "leggings-stir-black" + +/datum/sprite_accessory/socks/bee_thigh + name = "Thigh-high - Bee (Old)" + icon_state = "bee_thigh_old" + +/datum/sprite_accessory/socks/bee_knee + name = "Knee-high - Bee (Old)" + icon_state = "bee_knee_old" + +/datum/sprite_accessory/socks/christmas_norm + name = "Normal - Christmas" + icon_state = "christmas_norm" + +/datum/sprite_accessory/socks/candycaner_norm + name = "Normal - Red Candy Cane" + icon_state = "candycaner_norm" + +/datum/sprite_accessory/socks/candycaneg_norm + name = "Normal - Green Candy Cane" + icon_state = "candycaneg_norm" + +/datum/sprite_accessory/socks/christmas_knee + name = "Knee-High - Christmas" + icon_state = "christmas_knee" + +/datum/sprite_accessory/socks/candycaner_knee + name = "Knee-High - Red Candy Cane" + icon_state = "candycaner_knee" + +/datum/sprite_accessory/socks/candycaneg_knee + name = "Knee-High - Green Candy Cane" + icon_state = "candycaneg_knee" + +/datum/sprite_accessory/socks/christmas_thigh + name = "Thigh-high - Christmas" + icon_state = "christmas_thigh" + +/datum/sprite_accessory/socks/candycaner_thigh + name = "Thigh-high - Red Candy Cane" + icon_state = "candycaner_thigh" + +/datum/sprite_accessory/socks/candycaneg_thigh + name = "Thigh-high - Green Candy Cane" + icon_state = "candycaneg_thigh" + +/datum/sprite_accessory/socks/rainbow_thigh + name = "Thigh-high - Rainbow" + icon_state = "rainbow_thigh" + +/datum/sprite_accessory/socks/rainbow_knee + name = "Knee-high - Rainbow" + icon_state = "rainbow_knee" + +/datum/sprite_accessory/socks/rainbow_knee/stirrups + name = "Knee-high - Rainbow Stirrups" + icon_state = "rainbow_knee-stir" + +/datum/sprite_accessory/socks/rainbow_thigh/stirrups + name = "Thigh-high - Rainbow Stirrups" + icon_state = "rainbow_thigh-stir" + +/datum/sprite_accessory/socks/fishnet_thigh_sr //TG has one, but this one matches with several tops that I'll get whined to if I change soooo + name = "Thigh-high - Fishnet" + icon_state = "fishnet" + +/datum/sprite_accessory/socks/fishnet_thigh/alt + name = "Thigh-high - Fishnet (Greyscale)" + icon_state = "fishnet_alt" + use_static = FALSE + +/datum/sprite_accessory/socks/pantyhose/stirrups + name = "Pantyhose Stirrups" + icon_state = "pantyhose-stir" + use_static = FALSE + +/datum/sprite_accessory/socks/pantyhose_ripped + name = "Pantyhose - Ripped" + icon_state = "pantyhose_ripped" + use_static = FALSE + +/datum/sprite_accessory/socks/pantyhose_ripped/stirrups + name = "Pantyhose - Ripped Stirrups" + icon_state = "pantyhose_ripped-stir" + use_static = FALSE + +/datum/sprite_accessory/socks/stockings_ripped + name = "Stockings - Ripped" + icon_state = "stockings_ripped" + +/datum/sprite_accessory/socks/leggings + name = "Leggings" + icon_state = "leggings" + use_static = FALSE + +/datum/sprite_accessory/socks/leggings/stirrups + name = "Leggings - Stirrups" + icon_state = "leggings-stir" + use_static = FALSE + +/datum/sprite_accessory/socks/leggings/latex + name = "Socks - Latex" + icon_state = "socks_latex" + erp_accessory = TRUE diff --git a/modular_nova/modules/customization/modules/mob/dead/new_player/sprite_accessories/underwear/undershirts.dm b/modular_nova/modules/customization/modules/mob/dead/new_player/sprite_accessories/underwear/undershirts.dm new file mode 100644 index 00000000000..c69c9d7f2f1 --- /dev/null +++ b/modular_nova/modules/customization/modules/mob/dead/new_player/sprite_accessories/underwear/undershirts.dm @@ -0,0 +1,135 @@ +//Modular Undershirts +/datum/sprite_accessory/undershirt + icon = 'modular_nova/master_files/icons/mob/clothing/underwear.dmi' + use_static = TRUE + ///Whether this underwear includes a bottom (For Leotards and the likes) + var/hides_groin = FALSE + +/* + Base recolorable shirts +*/ +/datum/sprite_accessory/undershirt/shirt + name = "Shirt" + icon_state = "shirt_white" //Reuses TG sprite until they set up GAGS for underwear + use_static = FALSE + +/datum/sprite_accessory/undershirt/shortsleeve + name = "Short-Sleeved Shirt" + icon_state = "whiteshortsleeve" //Reuses TG sprite until they set up GAGS for underwear + use_static = FALSE + +/datum/sprite_accessory/undershirt/tanktop + name = "Tank Top" + icon_state = "tank_white" //Reuses TG sprite until they set up GAGS for underwear + use_static = FALSE + +/datum/sprite_accessory/undershirt/longsleeve + name = "Long-Sleeved Shirt" + icon_state = "shirt_white_long" + use_static = FALSE + +/datum/sprite_accessory/undershirt/polo + name = "Polo Shirt" + icon_state = "polo" + use_static = FALSE + +/datum/sprite_accessory/undershirt/tanktop_midriff + name = "Tank Top - Midriff" + icon_state = "tank_midriff" + gender = FEMALE + use_static = FALSE + +/datum/sprite_accessory/undershirt/tanktop_midriff_alt + name = "Tank Top - Midriff Halterneck" + icon_state = "tank_midriff_alt" + gender = FEMALE + use_static = FALSE + +/datum/sprite_accessory/undershirt/offshoulder + name = "Shirt - Off-Shoulder" + icon_state = "one_arm" + gender = FEMALE + use_static = FALSE + +/datum/sprite_accessory/undershirt/buttondown + name = "Shirt - Buttondown" + icon_state = "buttondown" + gender = NEUTER + use_static = FALSE + +/datum/sprite_accessory/undershirt/buttondown/short_sleeve + name = "Shirt - Short Sleeved Buttondown" + icon_state = "buttondown_short" + +/datum/sprite_accessory/undershirt/leotard + name = "Shirt - Leotard" + icon_state = "leotard" + gender = FEMALE + use_static = FALSE + hides_groin = TRUE + +/datum/sprite_accessory/undershirt/turtleneck + name = "Sweater - Turtleneck" + icon_state = "turtleneck" + use_static = FALSE + gender = NEUTER + +/datum/sprite_accessory/undershirt/turtleneck/smooth + name = "Sweater - Smooth Turtleneck" + icon_state = "turtleneck_smooth" + +/datum/sprite_accessory/undershirt/turtleneck/sleeveless + name = "Sweater - Sleeveless Turtleneck" + icon_state = "turtleneck_sleeveless" + +/datum/sprite_accessory/undershirt/leotard/turtleneck + name = "Shirt - Turtleneck Leotard" + icon_state = "leotard_turtleneck" + +/datum/sprite_accessory/undershirt/leotard/turtleneck/sleeveless + name = "Shirt - Turtleneck Leotard Sleeveless" + icon_state = "leotard_turtleneck_sleeveless" + +//Presets +/datum/sprite_accessory/undershirt/bulletclub //4 life + name = "Shirt - Black Skull" + icon_state = "shirt_bc" + gender = NEUTER + +/datum/sprite_accessory/undershirt/bee_shirt + name = "Shirt - Bee" + icon_state = "bee_shirt" + +/datum/sprite_accessory/undershirt/striped + name = "Long-Sleeved Shirt - Black Stripes" + icon_state = "longstripe" + gender = NEUTER + +/datum/sprite_accessory/undershirt/striped/blue + name = "Long-Sleeved Shirt - Blue Stripes" + icon_state = "longstripe_blue" + +/datum/sprite_accessory/undershirt/tankstripe + name = "Tank Top - Striped" + icon_state = "tank_stripes" + +/datum/sprite_accessory/undershirt/tank_top_rainbow + name = "Tank Top - Rainbow" + icon_state = "tank_rainbow" + +/datum/sprite_accessory/undershirt/tank_top_sun + name = "Tank Top - Sun" + icon_state = "tank_sun" + +//Not really qualifying as shirts but having nowhere better to go, these get shoved to the bottom of the list +/datum/sprite_accessory/undershirt/corset + name = "Corset" + icon_state = "corset" + gender = FEMALE + hides_groin = TRUE //an undershirt-specific bit of code, so the corset has to be an undershirt... unless you want to refactor it + +/datum/sprite_accessory/undershirt/babydoll + name = "Babydoll" + icon_state = "babydoll" + gender = FEMALE + use_static = FALSE diff --git a/modular_nova/modules/customization/modules/mob/dead/new_player/sprite_accessories/underwear/underwear.dm b/modular_nova/modules/customization/modules/mob/dead/new_player/sprite_accessories/underwear/underwear.dm new file mode 100644 index 00000000000..b3c030f87a8 --- /dev/null +++ b/modular_nova/modules/customization/modules/mob/dead/new_player/sprite_accessories/underwear/underwear.dm @@ -0,0 +1,205 @@ +/datum/sprite_accessory/underwear + icon = 'modular_nova/master_files/icons/mob/clothing/underwear.dmi' + ///Whether the underwear uses a special sprite for digitigrade style (i.e. briefs, not panties). Adds a "_d" suffix to the icon state + var/has_digitigrade = FALSE + ///Whether this underwear includes a top (Because gender = FEMALE doesn't actually apply here.). Hides breasts, nothing more. + var/hides_breasts = FALSE + +/* + Adding has_digitigrade to TG stuff +*/ +/datum/sprite_accessory/underwear/male_briefs + has_digitigrade = TRUE + +/datum/sprite_accessory/underwear/male_boxers + has_digitigrade = TRUE + +/datum/sprite_accessory/underwear/male_stripe + has_digitigrade = TRUE + +/datum/sprite_accessory/underwear/male_midway + has_digitigrade = TRUE + +/datum/sprite_accessory/underwear/male_longjohns + has_digitigrade = TRUE + +/datum/sprite_accessory/underwear/male_hearts + has_digitigrade = TRUE + +/datum/sprite_accessory/underwear/male_commie + has_digitigrade = TRUE + +/datum/sprite_accessory/underwear/male_usastripe + has_digitigrade = TRUE + +/datum/sprite_accessory/underwear/male_uk + has_digitigrade = TRUE + +/* + Modular Underwear past here +*/ + +//Briefs +/datum/sprite_accessory/underwear/male_bee + name = "Boxers - Bee" + icon_state = "bee_shorts" + has_digitigrade = TRUE + gender = MALE + use_static = TRUE + +/datum/sprite_accessory/underwear/boyshorts + name = "Boyshorts" + icon_state = "boyshorts" + has_digitigrade = TRUE + gender = FEMALE + +/datum/sprite_accessory/underwear/boyshorts_alt + name = "Boyshorts (Alt)" + icon_state = "boyshorts_alt" + gender = FEMALE + +//Panties +/datum/sprite_accessory/underwear/panties_basic + name = "Panties" + icon_state = "panties" + gender = FEMALE + +/datum/sprite_accessory/underwear/panties_slim + name = "Panties - Slim" + icon_state = "panties_slim" + gender = FEMALE + +/datum/sprite_accessory/underwear/panties_thin + name = "Panties - Thin" + icon_state = "panties_thin" + gender = FEMALE + +/datum/sprite_accessory/underwear/thong + name = "Thong" + icon_state = "thong" + gender = FEMALE + +/datum/sprite_accessory/underwear/thong_babydoll + name = "Thong (Alt)" + icon_state = "thong_babydoll" + gender = FEMALE + +/datum/sprite_accessory/underwear/panties_swimsuit + name = "Panties - Swimsuit" + icon_state = "panties_swimming" + gender = FEMALE + +/datum/sprite_accessory/underwear/panties_neko + name = "Panties - Neko" + icon_state = "panties_neko" + gender = FEMALE + +/datum/sprite_accessory/underwear/striped_panties + name = "Panties - Striped" + icon_state = "striped_panties" + gender = FEMALE + +//Presets +/datum/sprite_accessory/underwear/lizared + name = "LIZARED Underwear" + icon_state = "lizared" + use_static = TRUE + +/datum/sprite_accessory/underwear/female_kinky + name = "Panties - Lingerie" + icon_state = "panties_kinky" + gender = FEMALE + use_static = TRUE + +/datum/sprite_accessory/underwear/female_commie + name = "Panties - Commie" + icon_state = "panties_commie" + gender = FEMALE + use_static = TRUE + +/datum/sprite_accessory/underwear/female_usastripe + name = "Panties - Freedom" + icon_state = "panties_assblastusa" + gender = FEMALE + use_static = TRUE + +/datum/sprite_accessory/underwear/panties_uk + name = "Panties - UK" + icon_state = "panties_uk" + gender = FEMALE + use_static = TRUE + +/datum/sprite_accessory/underwear/female_beekini + name = "Panties - Bee-kini" + icon_state = "panties_bee-kini" + gender = FEMALE + use_static = TRUE + +/datum/sprite_accessory/underwear/cow + name = "Panties - Cow" + icon_state = "panties_cow" + gender = FEMALE + use_static = TRUE + +//Full-Body Underwear, i.e. swimsuits (Including re-enabling 3 from TG) +//These likely require hides_breasts = TRUE +/datum/sprite_accessory/underwear/swimsuit_onepiece //TG + name = "One-Piece Swimsuit" + icon_state = "swim_onepiece" + gender = FEMALE + hides_breasts = TRUE + +/datum/sprite_accessory/underwear/swimsuit_strapless_onepiece //TG + name = "Strapless One-Piece Swimsuit" + icon_state = "swim_strapless_onepiece" + gender = FEMALE + hides_breasts = TRUE + +/datum/sprite_accessory/underwear/swimsuit_stripe //TG + name = "Strapless Striped Swimsuit" + icon_state = "swim_stripe" + gender = FEMALE + hides_breasts = TRUE + +/datum/sprite_accessory/underwear/swimsuit_red + name = "One-Piece Swimsuit - Red" + icon_state = "swimming_red" + gender = FEMALE + use_static = TRUE + hides_breasts = TRUE + +/datum/sprite_accessory/underwear/swimsuit + name = "One-Piece Swimsuit - Black" + icon_state = "swimming_black" + gender = FEMALE + use_static = TRUE + hides_breasts = TRUE + +//Fishnets +/datum/sprite_accessory/underwear/fishnet_lower + name = "Panties - Fishnet" + icon_state = "fishnet_lower" + gender = FEMALE + use_static = TRUE + +/datum/sprite_accessory/underwear/fishnet_lower/alt + name = "Panties - Fishnet (Greyscale)" + icon_state = "fishnet_lower_alt" + +//ERP Accessories +/datum/sprite_accessory/underwear/latex + name = "Panties - Latex" + icon_state = "panties_latex" + use_static = TRUE + erp_accessory = TRUE + +/datum/sprite_accessory/underwear/chastbelt + name = "Chastity Belt" + icon_state = "chastbelt" + use_static = TRUE + erp_accessory = TRUE + +/datum/sprite_accessory/underwear/chastcage + name = "Chastity Cage" + icon_state = "chastcage" + erp_accessory = TRUE diff --git a/modular_nova/modules/customization/modules/mob/dead/new_player/sprite_accessories/vox.dm b/modular_nova/modules/customization/modules/mob/dead/new_player/sprite_accessories/vox.dm index 00ef0c74826..6459c622c4f 100644 --- a/modular_nova/modules/customization/modules/mob/dead/new_player/sprite_accessories/vox.dm +++ b/modular_nova/modules/customization/modules/mob/dead/new_player/sprite_accessories/vox.dm @@ -123,6 +123,7 @@ icon_state = "vox" recommended_species = list(SPECIES_VOX) organ_type = /obj/item/organ/external/tail/lizard + spine_key = SPINE_KEY_VOX //The tail markings /datum/sprite_accessory/spines/vox @@ -131,14 +132,31 @@ recommended_species = list(SPECIES_VOX) relevent_layers = list(BODY_BEHIND_LAYER, BODY_FRONT_LAYER) +/datum/sprite_accessory/tail_spines/vox + icon = 'modular_nova/master_files/icons/mob/sprite_accessory/vox_spines.dmi' + default_color = DEFAULT_TERTIARY + recommended_species = list(SPECIES_VOX) + relevent_layers = list(BODY_BEHIND_LAYER, BODY_FRONT_LAYER) + /datum/sprite_accessory/spines/vox/vox_bands name = "Vox Bands" - icon_state = "vox_bands" + icon_state = "bands" + +/datum/sprite_accessory/tail_spines/vox/vox_bands + name = "Vox Bands" + icon_state = "bands" /datum/sprite_accessory/spines/vox/vox_tip name = "Vox Tip" - icon_state = "vox_tip" + icon_state = "tip" +/datum/sprite_accessory/tail_spines/vox/vox_tip + name = "Vox Tip" + icon_state = "tip" /datum/sprite_accessory/spines/vox/vox_stripe name = "Vox Stripe" - icon_state = "vox_stripe" + icon_state = "stripe" + +/datum/sprite_accessory/tail_spines/vox/vox_stripe + name = "Vox Stripe" + icon_state = "stripe" diff --git a/modular_nova/modules/customization/modules/mob/living/carbon/human/species.dm b/modular_nova/modules/customization/modules/mob/living/carbon/human/species.dm index 31b0dd14e20..e7ba998c769 100644 --- a/modular_nova/modules/customization/modules/mob/living/carbon/human/species.dm +++ b/modular_nova/modules/customization/modules/mob/living/carbon/human/species.dm @@ -202,50 +202,10 @@ GLOBAL_LIST_EMPTY(customizable_races) species_human.apply_overlay(BODY_LAYER) handle_mutant_bodyparts(species_human) -/datum/species/spec_stun(mob/living/carbon/human/H,amount) - if(H) - stop_wagging_tail(H) - . = ..() - -/* -* TAIL WAGGING -*/ - -/datum/species/proc/can_wag_tail(mob/living/carbon/human/H) - if(!H) //Somewhere in the core code we're getting those procs with H being null - return FALSE - var/obj/item/organ/external/tail/T = H.get_organ_slot(ORGAN_SLOT_EXTERNAL_TAIL) - if(!T) - return FALSE - if(T.can_wag) - return TRUE - return FALSE - -/datum/species/proc/is_wagging_tail(mob/living/carbon/human/H) - if(!H) //Somewhere in the core code we're getting those procs with H being null - return FALSE - var/obj/item/organ/external/tail/T = H.get_organ_slot(ORGAN_SLOT_EXTERNAL_TAIL) - if(!T) - return FALSE - return T.wagging - -/datum/species/proc/start_wagging_tail(mob/living/carbon/human/H) - if(!H) //Somewhere in the core code we're getting those procs with H being null - return - var/obj/item/organ/external/tail/T = H.get_organ_slot(ORGAN_SLOT_EXTERNAL_TAIL) - if(!T) - return FALSE - T.wagging = TRUE - H.update_body() - -/datum/species/proc/stop_wagging_tail(mob/living/carbon/human/H) - if(!H) //Somewhere in the core code we're getting those procs with H being null - return - var/obj/item/organ/external/tail/T = H.get_organ_slot(ORGAN_SLOT_EXTERNAL_TAIL) - if(!T) - return - T.wagging = FALSE - H.update_body() +/datum/species/spec_stun(mob/living/carbon/human/target, amount) + if(istype(target)) + target.unwag_tail() + return ..() /datum/species/regenerate_organs(mob/living/carbon/target, datum/species/old_species, replace_current = TRUE, list/excluded_zones, visual_only = FALSE) . = ..() diff --git a/modular_nova/modules/customization/modules/mob/living/carbon/human/species/akula.dm b/modular_nova/modules/customization/modules/mob/living/carbon/human/species/akula.dm index b439a0e1f41..3ec59f6bcef 100644 --- a/modular_nova/modules/customization/modules/mob/living/carbon/human/species/akula.dm +++ b/modular_nova/modules/customization/modules/mob/living/carbon/human/species/akula.dm @@ -7,6 +7,7 @@ /datum/species/akula name = "Akula" + plural_form = "Akulae" id = SPECIES_AKULA lore_protected = TRUE offset_features = list( diff --git a/modular_nova/modules/customization/modules/mob/living/carbon/human/species/hemophage/corrupted_tongue.dm b/modular_nova/modules/customization/modules/mob/living/carbon/human/species/hemophage/corrupted_tongue.dm index 4a1a5e1aa41..53d99426d0e 100644 --- a/modular_nova/modules/customization/modules/mob/living/carbon/human/species/hemophage/corrupted_tongue.dm +++ b/modular_nova/modules/customization/modules/mob/living/carbon/human/species/hemophage/corrupted_tongue.dm @@ -1,8 +1,7 @@ /// Maximum an Hemophage will drain, they will drain less if they hit their cap. #define HEMOPHAGE_DRAIN_AMOUNT 50 /// The multiplier for blood received by Hemophages out of humans with ckeys. -#define BLOOD_DRAIN_MULTIPLIER_CKEY 1.5 - +#define BLOOD_DRAIN_MULTIPLIER_CKEY 1.15 /datum/component/organ_corruption/tongue corruptable_organ_type = /obj/item/organ/internal/tongue @@ -102,11 +101,20 @@ // We start by checking that the victim is a human and they have a client, so we can give them the // beneficial status effect for drinking higher-quality blood. var/is_target_human_with_client = istype(victim, /mob/living/carbon/human) && victim.client + var/horrible_feeding = FALSE if(ismonkey(victim)) is_target_human_with_client = FALSE // Sorry, not going to get the status effect from monkeys, even if they have a client in them. - + hemophage.add_mood_event("gross_food", /datum/mood_event/disgust/hemophage_feed_monkey) // drinking from a monkey is inherently gross, like, REALLY gross + hemophage.adjust_disgust(DISGUST_LEVEL_GROSS + 15, DISGUST_LEVEL_MAXEDOUT) blood_volume_difference = BLOOD_VOLUME_NORMAL - hemophage.blood_volume + horrible_feeding = TRUE + + if(istype(victim, /mob/living/carbon/human/species/monkey)) + is_target_human_with_client = FALSE // yep you're still not getting the status effect from humonkeys either. your tumour knows. + hemophage.add_mood_event("gross_food", /datum/mood_event/disgust/hemophage_feed_humonkey) + hemophage.adjust_disgust(DISGUST_LEVEL_GROSS / 4, DISGUST_LEVEL_GROSS) // it's still gross but nowhere near as bad, though. + horrible_feeding = TRUE StartCooldown() @@ -129,18 +137,36 @@ log_combat(hemophage, victim, "drained [drained_blood]u of blood from", addition = " (NEW BLOOD VOLUME: [victim.blood_volume] cL)") victim.show_message(span_danger("[hemophage] drains some of your blood!")) - to_chat(hemophage, span_notice("You drink some blood from [victim]![is_target_human_with_client ? " That tasted particularly good!" : ""]")) + + if(horrible_feeding) + if(istype(victim, /mob/living/carbon/human/species/monkey)) + to_chat(hemophage, span_notice("You take tentative draws of blood from [victim], each mouthful awash with the taste of ozone and a strange artificial twinge.")) + else + to_chat(hemophage, span_warning("You choke back tepid mouthfuls of foul blood from [victim]. The taste is absolutely vile.")) + else + to_chat(hemophage, span_notice("You pull greedy gulps of precious lifeblood from [victim]'s veins![is_target_human_with_client ? " That tasted particularly good!" : ""]")) playsound(hemophage, 'sound/items/drink.ogg', 30, TRUE, -2) + // just let the hemophage know they're capped out on blood if they're trying to go for an exsanguinate and wondering why it isn't working + if(drained_blood != HEMOPHAGE_DRAIN_AMOUNT && hemophage.blood_volume >= (BLOOD_VOLUME_MAXIMUM - HEMOPHAGE_DRAIN_AMOUNT)) + to_chat(hemophage, span_boldnotice("Your thirst is temporarily slaked, and you can digest no more new blood for the moment.")) + if(victim.blood_volume <= BLOOD_VOLUME_OKAY) to_chat(hemophage, span_warning("That definitely left them looking pale...")) + to_chat(victim, span_warning("A groaning lethargy creeps into your muscles as you begin to feel slightly clammy...")) //let the victim know too if(is_target_human_with_client) hemophage.apply_status_effect(/datum/status_effect/blood_thirst_satiated) - - if(!victim.blood_volume || victim.blood_volume < BLOOD_VOLUME_SURVIVE) - to_chat(hemophage, span_warning("You finish off [victim]'s blood supply.")) + hemophage.add_mood_event("drank_human_blood", /datum/mood_event/hemophage_feed_human) // absolutely scrumptious + hemophage.clear_mood_event("gross_food") // it's a real palate cleanser, you know + hemophage.disgust *= 0.85 //also clears a little bit of disgust too + + // for this to ever occur, the hemophage actually has to be decently hungry, otherwise they'll cap their own blood reserves and be unable to pull it off. + if(!victim.blood_volume || victim.blood_volume <= BLOOD_VOLUME_SURVIVE) + to_chat(hemophage, span_boldwarning("A final sputter of blood trickles from [victim]'s collapsing veins as your terrible hunger drains them almost completely dry.")) + else if ((victim.blood_volume + HEMOPHAGE_DRAIN_AMOUNT) <= BLOOD_VOLUME_SURVIVE) + to_chat(hemophage, span_warning("A sense of hesitation gnaws: you know for certain that taking much more blood from [victim] WILL kill them. ...but another part of you sees only opportunity.")) #undef HEMOPHAGE_DRAIN_AMOUNT diff --git a/modular_nova/modules/customization/modules/mob/living/carbon/human/species/hemophage/hemophage_moods.dm b/modular_nova/modules/customization/modules/mob/living/carbon/human/species/hemophage/hemophage_moods.dm new file mode 100644 index 00000000000..51e637b348f --- /dev/null +++ b/modular_nova/modules/customization/modules/mob/living/carbon/human/species/hemophage/hemophage_moods.dm @@ -0,0 +1,19 @@ +/datum/mood_event/hemophage_feed_human + description = "I slaked my hunger on fresh, vital blood. That felt good!" + mood_change = 2 + timeout = 5 MINUTES + +/datum/mood_event/disgust/hemophage_feed_monkey + description = "I had to feed off a gibbering monkey... what have I become?" + mood_change = -4 + timeout = 5 MINUTES + +/datum/mood_event/disgust/hemophage_feed_humonkey + description = "Somehow I know deep down that humonkey blood is no substitute for the real thing..." + mood_change = -1 + timeout = 5 MINUTES + +/datum/mood_event/disgust/hemophage_feed_synthesized_blood + description = "My last blood meal was artificial and tasted... wrong." + mood_change = -2 + timeout = 5 MINUTES diff --git a/modular_nova/modules/customization/modules/mob/living/carbon/human/species/hemophage/hemophage_organs.dm b/modular_nova/modules/customization/modules/mob/living/carbon/human/species/hemophage/hemophage_organs.dm index 43005aa433f..550c20bc27f 100644 --- a/modular_nova/modules/customization/modules/mob/living/carbon/human/species/hemophage/hemophage_organs.dm +++ b/modular_nova/modules/customization/modules/mob/living/carbon/human/species/hemophage/hemophage_organs.dm @@ -85,6 +85,10 @@ var/datum/reagent/blood/blood = reagents.has_reagent(/datum/reagent/blood) if(blood) blood.metabolization_rate = BLOOD_METABOLIZATION_RATE + var/blood_DNA = blood.data["blood_DNA"] + if (!blood_DNA) //does the blood we're digesting have any DNA? if it doesn't, it's artificial, and that's gross. + src.owner.adjust_disgust(DISGUST_LEVEL_GROSS / 16, DISGUST_LEVEL_VERYGROSS) + src.owner.add_mood_event("gross_food", /datum/mood_event/disgust/hemophage_feed_synthesized_blood) return ..() diff --git a/modular_nova/modules/customization/modules/surgery/organs/spines.dm b/modular_nova/modules/customization/modules/surgery/organs/spines.dm index 1849bb0a5c5..98cdd9869ee 100644 --- a/modular_nova/modules/customization/modules/surgery/organs/spines.dm +++ b/modular_nova/modules/customization/modules/surgery/organs/spines.dm @@ -12,12 +12,6 @@ /datum/bodypart_overlay/mutant/spines/can_draw_on_bodypart(mob/living/carbon/human/human) return !sprite_datum.is_hidden(human) -/datum/bodypart_overlay/mutant/spines/get_feature_key_for_overlay() - return (wagging ? "wagging" : "") + feature_key - -/datum/bodypart_overlay/mutant/spines/get_base_icon_state() - return sprite_datum.icon_state - /// We overwrite this just because we need to change the layer to be ever so slightly above the tails. /// It sucks, but it's the best I could do without refactoring a lot more. /datum/bodypart_overlay/mutant/spines/get_images(image_layer, obj/item/bodypart/limb) @@ -27,3 +21,21 @@ overlay.layer += SPINES_LAYER_OFFSET return returned_overlays + +/datum/bodypart_overlay/mutant/tail_spines + color_source = ORGAN_COLOR_OVERRIDE + layers = ALL_EXTERNAL_OVERLAYS + +/datum/bodypart_overlay/mutant/tail_spines/override_color(rgb_value) + return draw_color + +/datum/bodypart_overlay/mutant/tail_spines/can_draw_on_bodypart(mob/living/carbon/human/human) + return !sprite_datum.is_hidden(human) + +/datum/bodypart_overlay/mutant/tail_spines/get_images(image_layer, obj/item/bodypart/limb) + var/list/mutable_appearance/returned_overlays = ..() + + for(var/mutable_appearance/overlay in returned_overlays) + overlay.layer += SPINES_LAYER_OFFSET + + return returned_overlays diff --git a/modular_nova/modules/customization/readme.md b/modular_nova/modules/customization/readme.md index c7de94bda2a..e3a25b86796 100644 --- a/modular_nova/modules/customization/readme.md +++ b/modular_nova/modules/customization/readme.md @@ -22,7 +22,7 @@ Re-writes how mutant bodyparts exist and how they're handled. Adds in a per limb ./code/modules/mob/living/carbon/human/emote.dm > /datum/emote/living/carbon/human/wag/run_emote(), /datum/emote/living/carbon/human/wag/can_run_emote() ./code/modules/mob/living/carbon/human/examine.dm > /mob/living/carbon/human/examine() ./code/modules/mob/living/carbon/human/human_update_icons.dm > /mob/living/carbon/human/update_inv_w_uniform(), /mob/living/carbon/human/update_inv_glasses(), /mob/living/carbon/human/update_inv_shoes(), /mob/living/carbon/human/update_inv_wear_suit(), /obj/item/proc/build_worn_icon(), /mob/living/carbon/human/generate_icon_render_key() - ./code/modules/mob/living/carbon/human/species.dm > /datum/species/proc/on_species_gain(), /datum/species/proc/handle_body(), /datum/species/proc/handle_mutant_bodyparts(), /datum/species/proc/can_equip(), /datum/species/proc/can_wag_tail(), /datum/species/proc/stop_wagging_tail(), /datum/species/proc/start_wagging_tail(), /datum/species/proc/is_wagging_tail(), /datum/species/proc/handle_hair() + ./code/modules/mob/living/carbon/human/species.dm > /datum/species/proc/on_species_gain(), /datum/species/proc/handle_body(), /datum/species/proc/handle_mutant_bodyparts(), /datum/species/proc/can_equip(), /datum/species/proc/handle_hair() ./code/modules/mob/living/carbon/human/species_types/felinid.dm > the 5 procs related to wagging tail ./code/modules/mob/living/carbon/human/species_types/lizardpeople.dm the 5 procs related to wagging tail and - /datum/species/lizard/on_species_gain() ./code/modules/surgery/bodyparts/_bodyparts.dm > /obj/item/bodypart/proc/get_limb_icon() diff --git a/modular_nova/modules/decay_subsystem/code/decaySS.dm b/modular_nova/modules/decay_subsystem/code/decaySS.dm index c3b59c479c0..d2c141f8b26 100644 --- a/modular_nova/modules/decay_subsystem/code/decaySS.dm +++ b/modular_nova/modules/decay_subsystem/code/decaySS.dm @@ -56,10 +56,11 @@ SUBSYSTEM_DEF(decay) possible_areas += iterating_area // Now add the turfs - for(var/turf/iterating_turf as anything in iterating_area.get_contained_turfs()) - if(!(iterating_turf.flags_1 & CAN_BE_DIRTY_1)) - continue - possible_turfs += iterating_turf + for(var/list/zlevel_turfs as anything in iterating_area.get_zlevel_turf_lists()) + for(var/turf/iterating_turf as anything in zlevel_turfs) + if(!(iterating_turf.flags_1 & CAN_BE_DIRTY_1)) + continue + possible_turfs += iterating_turf if(!possible_turfs) CRASH("SSDecay had no possible turfs to use!") diff --git a/modular_nova/modules/decay_subsystem/code/nests.dm b/modular_nova/modules/decay_subsystem/code/nests.dm index 24d9ca82f57..5dee7ea6b8e 100644 --- a/modular_nova/modules/decay_subsystem/code/nests.dm +++ b/modular_nova/modules/decay_subsystem/code/nests.dm @@ -15,7 +15,7 @@ faction = list(NEST_FACTION) var/spawn_delay = 0 /// What mob to spawn - var/list/monster_types = list(/mob/living/simple_animal/hostile/blackmesa/xen/headcrab) + var/list/monster_types = list(/mob/living/basic/spider/giant/hunter) /// How many mobs can we spawn? var/max_mobs = 3 var/spawned_mobs = 0 diff --git a/modular_nova/modules/deforest_medical_items/code/cargo_packs.dm b/modular_nova/modules/deforest_medical_items/code/cargo_packs.dm index ab38a07a646..1071c14fefb 100644 --- a/modular_nova/modules/deforest_medical_items/code/cargo_packs.dm +++ b/modular_nova/modules/deforest_medical_items/code/cargo_packs.dm @@ -1,11 +1,21 @@ /datum/supply_pack/medical/civil_defense name = "Civil Defense Medical Kit Crate" crate_name = "civil defense medical kit crate" - desc = "Contains five civil defense medical kits, small packs of injectors meant to be passed out to the public in case of emergency." + desc = "Contains ten civil defense medical kits, small packs of injectors meant to be passed out to the public in case of emergency." access = ACCESS_MEDICAL cost = CARGO_CRATE_VALUE * 10 // 2000 contains = list( - /obj/item/storage/medkit/civil_defense/stocked = 5, + /obj/item/storage/medkit/civil_defense/stocked = 10, + ) + +/datum/supply_pack/medical/civil_defense/comfort + name = "\improper Civil Defense Symptom Support Kit Crate" + crate_name = "civil defense symptom support kit crate" + desc = "Contains five civil defense symptom support kits stocked with three pens of psifinil and a tube containing 5 pills of alifil, two proprietary DeForest mixes designed to provide long-lasting relief from chronic disease and syndromes like gravity sickness." + access = ACCESS_MEDICAL + cost = CARGO_CRATE_VALUE * 5 // 2000 + contains = list( + /obj/item/storage/medkit/civil_defense/comfort/stocked = 10, ) /datum/supply_pack/medical/frontier_first_aid @@ -15,8 +25,8 @@ access = ACCESS_MEDICAL cost = CARGO_CRATE_VALUE * 10 contains = list( - /obj/item/storage/medkit/frontier/stocked = 2, - /obj/item/storage/medkit/combat_surgeon/stocked = 2, + /obj/item/storage/medkit/frontier/stocked = 3, + /obj/item/storage/medkit/combat_surgeon/stocked = 3, ) /datum/supply_pack/medical/heavy_duty_medical @@ -29,3 +39,13 @@ /obj/item/storage/backpack/duffelbag/deforest_medkit/stocked, /obj/item/storage/backpack/duffelbag/deforest_surgical/stocked, ) + +/datum/supply_pack/medical/deforest_vendor_refill + name = "DeForest Med-Vend Resupply Crate" + crate_name = "\improper DeForest Med-Vend resupply crate" + desc = "Contains a restocking canister for DeForest Med-Vendors." + access = ACCESS_MEDICAL + cost = CARGO_CRATE_VALUE * 5 + contains = list( + /obj/item/vending_refill/medical_deforest, + ) diff --git a/modular_nova/modules/deforest_medical_items/code/chemicals/twitch.dm b/modular_nova/modules/deforest_medical_items/code/chemicals/twitch.dm index d3016e10bbe..8031f423f3f 100644 --- a/modular_nova/modules/deforest_medical_items/code/chemicals/twitch.dm +++ b/modular_nova/modules/deforest_medical_items/code/chemicals/twitch.dm @@ -33,10 +33,13 @@ overdose_threshold = 15 chemical_flags = REAGENT_CAN_BE_SYNTHESIZED addiction_types = list(/datum/addiction/stimulants = 20) + process_flags = REAGENT_ORGANIC | REAGENT_SYNTHETIC /// How much time has the drug been in them? var/constant_dose_time = 0 /// What type of span class do we change heard speech to? var/speech_effect_span + /// How much the mob heating is multiplied by, if the target is a robot or has muscled veins + var/mob_heating_muliplier = 5 /datum/reagent/drug/twitch/on_mob_metabolize(mob/living/our_guy) @@ -61,11 +64,11 @@ game_plane_master_controller.add_filter(TWITCH_SCREEN_FILTER, 10, color_matrix_filter(col_filter_green, FILTER_COLOR_RGB)) - game_plane_master_controller.add_filter(TWITCH_SCREEN_BLUR, 1, list("type" = "radial_blur", "size" = 0.1)) + game_plane_master_controller.add_filter(TWITCH_SCREEN_BLUR, 1, list("type" = "radial_blur", "size" = 0.02)) - for(var/filter in game_plane_master_controller.get_filters("twitch_blur")) - animate(filter, loop = -1, size = 0.2, time = 2 SECONDS, easing = ELASTIC_EASING|EASE_OUT, flags = ANIMATION_PARALLEL) - animate(size = 0.1, time = 6 SECONDS, easing = CIRCULAR_EASING|EASE_IN) + for(var/filter in game_plane_master_controller.get_filters(TWITCH_SCREEN_BLUR)) + animate(filter, loop = -1, size = 0.04, time = 2 SECONDS, easing = ELASTIC_EASING|EASE_OUT, flags = ANIMATION_PARALLEL) + animate(size = 0.02, time = 6 SECONDS, easing = CIRCULAR_EASING|EASE_IN) /datum/reagent/drug/twitch/on_mob_end_metabolize(mob/living/carbon/our_guy) @@ -84,20 +87,34 @@ UnregisterSignal(our_guy, COMSIG_ATOM_PRE_BULLET_ACT) if(constant_dose_time < CONSTANT_DOSE_SAFE_LIMIT) // Anything less than this and you'll come out fiiiine, aside from a big hit of stamina damage - our_guy.visible_message( - span_danger("[our_guy] suddenly slows from their inhuman speeds, coming back with a wicked nosebleed!"), - span_danger("You suddenly slow back to normal, a stream of blood gushing from your nose!") - ) + if(!(our_guy.mob_biotypes & MOB_ROBOTIC)) + our_guy.visible_message( + span_danger("[our_guy] suddenly slows from [our_guy.p_their()] inhuman speeds, coming back with a wicked nosebleed!"), + span_danger("You suddenly slow back to normal, a stream of blood gushing from your nose!") + ) + else + our_guy.visible_message( + span_danger("[our_guy] suddenly slows from [our_guy.p_their()] inhuman speeds!"), + span_danger("You suddenly slow back to normal speed!") + ) our_guy.adjustStaminaLoss(constant_dose_time) + else // Much longer than that however, and you're not gonna have a good day - our_guy.visible_message( - span_danger("[our_guy] suddenly snaps back from their inhumans speeds, coughing up a spray of blood!"), - span_danger("As you snap back to normal speed you cough up a worrying amount of blood. You feel like you've just been run over by a power loader.") - ) - our_guy.spray_blood(our_guy.dir, 2) // The before mentioned coughing up blood - our_guy.emote("cough") + if(!(our_guy.mob_biotypes & MOB_ROBOTIC)) + our_guy.spray_blood(our_guy.dir, 2) // The before mentioned coughing up blood + our_guy.emote("cough") + our_guy.visible_message( + span_danger("[our_guy] suddenly snaps back from [our_guy.p_their()] inhuman speeds, coughing up a spray of blood!"), + span_danger("As you snap back to normal speed you cough up a worrying amount of blood. You feel like you've just been run over by a power loader.") + ) + else + our_guy.visible_message( + span_danger("[our_guy] suddenly snaps back from [our_guy.p_their()] inhuman speeds!"), + span_danger("You suddenly snap back to normal speeds. You feel like you've just been run over by a power loader.") + ) our_guy.adjustStaminaLoss(constant_dose_time) - our_guy.adjustOrganLoss(ORGAN_SLOT_HEART, 0.3 * constant_dose_time) // Basically you might die + if(!HAS_TRAIT(our_guy, TRAIT_TWITCH_ADAPTED)) + our_guy.adjustOrganLoss(ORGAN_SLOT_HEART, 0.3 * constant_dose_time) // Basically you might die if(!our_guy.hud_used) return @@ -135,7 +152,17 @@ constant_dose_time += seconds_per_tick - our_guy.adjustOrganLoss(ORGAN_SLOT_HEART, 0.1 * REM * seconds_per_tick) + // If the target is a robot, or has muscle veins, then they get an effect similar to herignis, heating them up quite a bit + if((our_guy.mob_biotypes & MOB_ROBOTIC) || HAS_TRAIT(our_guy, TRAIT_STABLEHEART)) + var/heating = mob_heating_muliplier * creation_purity * REM * seconds_per_tick + our_guy.reagents?.chem_temp += heating + our_guy.adjust_bodytemperature(heating * TEMPERATURE_DAMAGE_COEFFICIENT) + if(!ishuman(our_guy)) + return + var/mob/living/carbon/human/human = our_guy + human.adjust_coretemperature(heating * TEMPERATURE_DAMAGE_COEFFICIENT) + else + our_guy.adjustOrganLoss(ORGAN_SLOT_HEART, 0.1 * REM * seconds_per_tick) if(locate(/datum/reagent/drug/kronkaine) in our_guy.reagents.reagent_list) // Kronkaine, another heart-straining drug, could cause problems if mixed with this our_guy.ForceContractDisease(new /datum/disease/adrenal_crisis(), FALSE, TRUE) @@ -163,10 +190,20 @@ . = ..() our_guy.set_jitter_if_lower(10 SECONDS * REM * seconds_per_tick) - our_guy.adjustOrganLoss(ORGAN_SLOT_HEART, 1 * REM * seconds_per_tick, required_organ_flag = affected_organ_flags) + // If the target is a robot, or has muscle veins, then they get an effect similar to herignis, heating them up quite a bit + if((our_guy.mob_biotypes & MOB_ROBOTIC) || HAS_TRAIT(our_guy, TRAIT_STABLEHEART)) + var/heating = (mob_heating_muliplier * 2) * creation_purity * REM * seconds_per_tick + our_guy.reagents?.chem_temp += heating + our_guy.adjust_bodytemperature(heating * TEMPERATURE_DAMAGE_COEFFICIENT) + if(!ishuman(our_guy)) + return + var/mob/living/carbon/human/human = our_guy + human.adjust_coretemperature(heating * TEMPERATURE_DAMAGE_COEFFICIENT) + else + our_guy.adjustOrganLoss(ORGAN_SLOT_HEART, 1 * REM * seconds_per_tick, required_organ_flag = affected_organ_flags) our_guy.adjustToxLoss(1 * REM * seconds_per_tick, updating_health = FALSE, forced = TRUE, required_biotype = affected_biotype) - if(SPT_PROB(5, seconds_per_tick)) + if(SPT_PROB(5, seconds_per_tick) && !(our_guy.mob_biotypes & MOB_ROBOTIC)) to_chat(our_guy, span_danger("You cough up a splatter of blood!")) our_guy.spray_blood(our_guy.dir, 1) our_guy.emote("cough") diff --git a/modular_nova/modules/deforest_medical_items/code/healing_stack_items.dm b/modular_nova/modules/deforest_medical_items/code/healing_stack_items.dm index e6bed70129f..0f1a4e441da 100644 --- a/modular_nova/modules/deforest_medical_items/code/healing_stack_items.dm +++ b/modular_nova/modules/deforest_medical_items/code/healing_stack_items.dm @@ -21,6 +21,7 @@ max_amount = 3 amount = 3 merge_type = /obj/item/stack/medical/wound_recovery + custom_price = PAYCHECK_COMMAND * 2.5 /// The types of wounds that we work on, in list format var/list/applicable_wounds = list( /datum/wound/blunt/bone, @@ -129,6 +130,7 @@ sanitization = 3 grind_results = list(/datum/reagent/medicine/oxandrolone = 3) merge_type = /obj/item/stack/medical/ointment/red_sun + custom_price = PAYCHECK_LOWER * 1.5 /obj/item/stack/medical/ointment/red_sun/post_heal_effects(amount_healed, mob/living/carbon/healed_mob, mob/user) . = ..() @@ -150,6 +152,7 @@ splint_factor = 1.2 burn_cleanliness_bonus = 0.1 merge_type = /obj/item/stack/medical/gauze/sterilized + custom_price = PAYCHECK_LOWER * 1.5 /obj/item/stack/medical/gauze/sterilized/post_heal_effects(amount_healed, mob/living/carbon/healed_mob, mob/user) . = ..() @@ -173,6 +176,7 @@ heal_brute = 0 stop_bleeding = 2 merge_type = /obj/item/stack/medical/suture/coagulant + custom_price = PAYCHECK_LOWER * 1.5 #undef INSTANT_WOUND_HEAL_STAMINA_DAMAGE #undef INSTANT_WOUND_HEAL_LIMB_DAMAGE diff --git a/modular_nova/modules/deforest_medical_items/code/illegal_injectors.dm b/modular_nova/modules/deforest_medical_items/code/illegal_injectors.dm index 0b29b2963fb..7c3059f5d97 100644 --- a/modular_nova/modules/deforest_medical_items/code/illegal_injectors.dm +++ b/modular_nova/modules/deforest_medical_items/code/illegal_injectors.dm @@ -11,6 +11,7 @@ /datum/reagent/medicine/silibinin = 5, /datum/reagent/toxin/leadacetate = 5, ) + custom_price = PAYCHECK_COMMAND * 3.5 // Demoneye, for when you feel the need to become "fucking invincible" /obj/item/reagent_containers/hypospray/medipen/deforest/demoneye @@ -24,6 +25,7 @@ /datum/reagent/drug/maint/sludge = 10, /datum/reagent/toxin/leadacetate = 5, ) + custom_price = PAYCHECK_COMMAND * 3.5 // Mix of many of the stamina damage regenerating drugs to provide a cocktail no baton could hope to beat /obj/item/reagent_containers/hypospray/medipen/deforest/aranepaine @@ -39,6 +41,7 @@ /datum/reagent/medicine/diphenhydramine = 5, /datum/reagent/impurity = 5, ) + custom_price = PAYCHECK_COMMAND * 2.5 // Nothing inherently illegal, just a potentially very dangerous mix of chems to be able to inject into people /obj/item/reagent_containers/hypospray/medipen/deforest/pentibinin @@ -54,6 +57,7 @@ /datum/reagent/medicine/omnizine = 5, /datum/reagent/inverse/healing/tirimol = 5, ) + custom_price = PAYCHECK_COMMAND * 2.5 // Combat stimulant that makes you immune to slowdowns for a bit /obj/item/reagent_containers/hypospray/medipen/deforest/synalvipitol @@ -68,3 +72,4 @@ /datum/reagent/medicine/muscle_stimulant = 5, /datum/reagent/impurity = 5, ) + custom_price = PAYCHECK_COMMAND * 2.5 diff --git a/modular_nova/modules/deforest_medical_items/code/injectors.dm b/modular_nova/modules/deforest_medical_items/code/injectors.dm index 1cb8d33af95..97db7b4e88e 100644 --- a/modular_nova/modules/deforest_medical_items/code/injectors.dm +++ b/modular_nova/modules/deforest_medical_items/code/injectors.dm @@ -6,6 +6,7 @@ icon_state = "default" volume = 25 list_reagents = list() + custom_price = PAYCHECK_COMMAND /// If this pen has a timer for injecting others with, just for safety with some of the drugs in these var/inject_others_time = 1.5 SECONDS @@ -112,8 +113,8 @@ base_icon_state = "meridine" icon_state = "meridine" list_reagents = list( - /datum/reagent/medicine/ammoniated_mercury = 5, - /datum/reagent/medicine/potass_iodide = 15, + /datum/reagent/medicine/ammoniated_mercury = 10, + /datum/reagent/medicine/potass_iodide = 10, /datum/reagent/nitrous_oxide = 5, ) @@ -128,6 +129,7 @@ /datum/reagent/medicine/synaptizine = 5, /datum/reagent/medicine/synaphydramine = 5, ) + custom_price = PAYCHECK_COMMAND * 2.5 // Critical condition stabilizer /obj/item/reagent_containers/hypospray/medipen/deforest/calopine @@ -166,6 +168,7 @@ /datum/reagent/medicine/omnizine/protozine = 10, /datum/reagent/drug/maint/tar = 5, ) + custom_price = PAYCHECK_COMMAND * 2.5 // Stuff really good at healing burn stuff and stabilizing temps /obj/item/reagent_containers/hypospray/medipen/deforest/lepoturi diff --git a/modular_nova/modules/deforest_medical_items/code/medstation.dm b/modular_nova/modules/deforest_medical_items/code/medstation.dm new file mode 100644 index 00000000000..542eefb431e --- /dev/null +++ b/modular_nova/modules/deforest_medical_items/code/medstation.dm @@ -0,0 +1,55 @@ +/obj/machinery/biogenerator/medstation + name = "wall med-station" + desc = "An advanced machine seen in frontier outposts and colonies capable of turning organic plant matter into \ + various emergency medical supplies and injectors. You can find one of these in the medical sections of just about \ + any frontier installation." + icon = 'modular_nova/modules/deforest_medical_items/icons/medstation.dmi' + circuit = null + anchored = TRUE + density = FALSE + efficiency = 1 + productivity = 1 + show_categories = list( + RND_CATEGORY_DEFOREST_MEDICAL, + RND_CATEGORY_DEFOREST_BLOOD, + ) + /// The item we turn into when repacked + var/repacked_type = /obj/item/wallframe/frontier_medstation + +MAPPING_DIRECTIONAL_HELPERS(/obj/machinery/biogenerator/medstation, 29) + +/obj/machinery/biogenerator/medstation/RefreshParts() + . = ..() + efficiency = 1 + productivity = 1 + +/obj/machinery/biogenerator/medstation/default_unfasten_wrench(mob/user, obj/item/wrench/tool, time) + user.balloon_alert(user, "deconstructing...") + tool.play_tool_sound(src) + if(tool.use_tool(src, user, 1 SECONDS)) + playsound(loc, 'sound/items/deconstruct.ogg', 50, TRUE) + deconstruct(TRUE) + return + +/obj/machinery/biogenerator/medstation/on_deconstruction(disassembled) + if(disassembled) + new repacked_type(drop_location()) + +/obj/machinery/biogenerator/medstation/default_deconstruction_crowbar() + return + +// Deployable item for cargo for the medstation + +/obj/item/wallframe/frontier_medstation + name = "unmounted wall med-station" + desc = "The innovative technology of a biogenerator to print medical supplies, but able to be mounted neatly on a wall out of the way." + icon = 'modular_nova/modules/deforest_medical_items/icons/medstation.dmi' + icon_state = "biogenerator_parts" + w_class = WEIGHT_CLASS_NORMAL + result_path = /obj/machinery/biogenerator/medstation + pixel_shift = 29 + custom_materials = list( + /datum/material/iron = SHEET_MATERIAL_AMOUNT * 5, + /datum/material/silver = SHEET_MATERIAL_AMOUNT * 3, + /datum/material/gold = SHEET_MATERIAL_AMOUNT, + ) diff --git a/modular_nova/modules/deforest_medical_items/code/medstation_designs/blood.dm b/modular_nova/modules/deforest_medical_items/code/medstation_designs/blood.dm new file mode 100644 index 00000000000..f7624f60d1a --- /dev/null +++ b/modular_nova/modules/deforest_medical_items/code/medstation_designs/blood.dm @@ -0,0 +1,109 @@ +/datum/design/organic_bloodbag_aplus + name = "A+ Blood Pack" + id = "organic_bloodbag_aplus" + build_type = BIOGENERATOR + materials = list(/datum/material/biomass = 100) + build_path = /obj/item/reagent_containers/blood/a_plus + category = list( + RND_CATEGORY_INITIAL, + RND_CATEGORY_DEFOREST_BLOOD, + ) + +/datum/design/organic_bloodbag_aminus + name = "A- Blood Pack" + id = "organic_bloodbag_aminus" + build_type = BIOGENERATOR + materials = list(/datum/material/biomass = 100) + build_path = /obj/item/reagent_containers/blood/a_minus + category = list( + RND_CATEGORY_INITIAL, + RND_CATEGORY_DEFOREST_BLOOD, + ) + +/datum/design/organic_bloodbag_bplus + name = "B+ Blood Pack" + id = "organic_bloodbag_bplus" + build_type = BIOGENERATOR + materials = list(/datum/material/biomass = 100) + build_path = /obj/item/reagent_containers/blood/b_plus + category = list( + RND_CATEGORY_INITIAL, + RND_CATEGORY_DEFOREST_BLOOD, + ) + +/datum/design/organic_bloodbag_bminus + name = "B- Blood Pack" + id = "organic_bloodbag_bminus" + build_type = BIOGENERATOR + materials = list(/datum/material/biomass = 100) + build_path = /obj/item/reagent_containers/blood/b_minus + category = list( + RND_CATEGORY_INITIAL, + RND_CATEGORY_DEFOREST_BLOOD, + ) + +/datum/design/organic_bloodbag_oplus + name = "O+ Blood Pack" + id = "organic_bloodbag_oplus" + build_type = BIOGENERATOR + materials = list(/datum/material/biomass = 100) + build_path = /obj/item/reagent_containers/blood/o_plus + category = list( + RND_CATEGORY_INITIAL, + RND_CATEGORY_DEFOREST_BLOOD, + ) + +/datum/design/organic_bloodbag_ominus + name = "O- Blood Pack" + id = "organic_bloodbag_ominus" + build_type = BIOGENERATOR + materials = list(/datum/material/biomass = 150) + build_path = /obj/item/reagent_containers/blood/o_minus + category = list( + RND_CATEGORY_INITIAL, + RND_CATEGORY_DEFOREST_BLOOD, + ) + +/datum/design/organic_bloodbag_lizard + name = "L Blood Pack" + id = "organic_bloodbag_lizard" + build_type = BIOGENERATOR + materials = list(/datum/material/biomass = 100) + build_path = /obj/item/reagent_containers/blood/lizard + category = list( + RND_CATEGORY_INITIAL, + RND_CATEGORY_DEFOREST_BLOOD, + ) + +/datum/design/organic_bloodbag_ethereal + name = "LE Blood Pack" + id = "organic_bloodbag_ethereal" + build_type = BIOGENERATOR + materials = list(/datum/material/biomass = 100) + build_path = /obj/item/reagent_containers/blood/ethereal + category = list( + RND_CATEGORY_INITIAL, + RND_CATEGORY_DEFOREST_BLOOD, + ) + +/datum/design/organic_bloodbag_plant + name = "H2O Blood Pack" + id = "organic_bloodbag_plant" + build_type = BIOGENERATOR + materials = list(/datum/material/biomass = 50) + build_path = /obj/item/reagent_containers/blood/podperson + category = list( + RND_CATEGORY_INITIAL, + RND_CATEGORY_DEFOREST_BLOOD, + ) + +/datum/design/organic_bloodbag_slimeperson + name = "TOX Blood Pack" + id = "organic_bloodbag_slimeperson" + build_type = BIOGENERATOR + materials = list(/datum/material/biomass = 100) + build_path = /obj/item/reagent_containers/blood/toxin + category = list( + RND_CATEGORY_INITIAL, + RND_CATEGORY_DEFOREST_BLOOD, + ) diff --git a/modular_nova/modules/deforest_medical_items/code/medstation_designs/medical.dm b/modular_nova/modules/deforest_medical_items/code/medstation_designs/medical.dm new file mode 100644 index 00000000000..7eb8106e3a4 --- /dev/null +++ b/modular_nova/modules/deforest_medical_items/code/medstation_designs/medical.dm @@ -0,0 +1,98 @@ +/datum/design/organic_printer_balm + name = "Red Sun Balm" + id = "organic_sun_balm" + build_type = BIOGENERATOR + materials = list(/datum/material/biomass = 50) + build_path = /obj/item/stack/medical/ointment/red_sun + category = list( + RND_CATEGORY_INITIAL, + RND_CATEGORY_DEFOREST_MEDICAL, + ) + +/datum/design/organic_printer_gauze + name = "Sealed Aseptic Guaze" + id = "organic_gauze" + build_type = BIOGENERATOR + materials = list(/datum/material/biomass = 50) + build_path = /obj/item/stack/medical/gauze/sterilized + category = list( + RND_CATEGORY_INITIAL, + RND_CATEGORY_DEFOREST_MEDICAL, + ) + +/datum/design/organic_printer_coagulant_f + name = "Coagulant-F Packet" + id = "organic_coagulant_pack" + build_type = BIOGENERATOR + materials = list(/datum/material/biomass = 50) + build_path = /obj/item/stack/medical/suture/coagulant + category = list( + RND_CATEGORY_INITIAL, + RND_CATEGORY_DEFOREST_MEDICAL, + ) + +/datum/design/organic_printer_ointment + name = "Ointment" + id = "organic_ointment" + build_type = BIOGENERATOR + materials = list(/datum/material/biomass = 25) + build_path = /obj/item/stack/medical/ointment + category = list( + RND_CATEGORY_INITIAL, + RND_CATEGORY_DEFOREST_MEDICAL, + ) + +/datum/design/organic_printer_bruise_pack + name = "Bruise Packs" + id = "organic_bruise_packs" + build_type = BIOGENERATOR + materials = list(/datum/material/biomass = 25) + build_path = /obj/item/stack/medical/bruise_pack + category = list( + RND_CATEGORY_INITIAL, + RND_CATEGORY_DEFOREST_MEDICAL, + ) + +/datum/design/organic_printer_amollin_pill + name = "Amollin Painkiller" + id = "organic_printer_amollin_pill" + build_type = BIOGENERATOR + materials = list(/datum/material/biomass = 25) + build_path = /obj/item/reagent_containers/pill/amollin + category = list( + RND_CATEGORY_INITIAL, + RND_CATEGORY_DEFOREST_MEDICAL, + ) + +/datum/design/organic_printer_bandaid + name = "First Aid Bandage" + id = "organic_bandaid" + build_type = BIOGENERATOR + materials = list(/datum/material/biomass = 100) + build_path = /obj/item/stack/medical/bandage + category = list( + RND_CATEGORY_INITIAL, + RND_CATEGORY_DEFOREST_MEDICAL, + ) + +/datum/design/organic_printer_bone_gel + name = "Bone Gel" + id = "organic_bone_gel" + build_type = BIOGENERATOR + materials = list(/datum/material/biomass = 100) + build_path = /obj/item/stack/medical/bone_gel + category = list( + RND_CATEGORY_INITIAL, + RND_CATEGORY_DEFOREST_MEDICAL, + ) + +/datum/design/organic_printer_surgical_tape + name = "Surgical Tape" + id = "organic_surgical_tape" + build_type = BIOGENERATOR + materials = list(/datum/material/biomass = 100) + build_path = /obj/item/stack/sticky_tape/surgical + category = list( + RND_CATEGORY_INITIAL, + RND_CATEGORY_DEFOREST_MEDICAL, + ) diff --git a/modular_nova/modules/deforest_medical_items/code/storage_items.dm b/modular_nova/modules/deforest_medical_items/code/storage_items.dm index b8452cfe5f2..f66aa7d8bdb 100644 --- a/modular_nova/modules/deforest_medical_items/code/storage_items.dm +++ b/modular_nova/modules/deforest_medical_items/code/storage_items.dm @@ -4,6 +4,7 @@ desc = "It's an airtight container for storing medication. This one is all-white and has labels for containing amollin, a blend of Miner's Salve and Lidocaine." icon = 'modular_nova/modules/deforest_medical_items/icons/storage.dmi' icon_state = "painkiller_bottle" + custom_price = PAYCHECK_CREW * 1.5 /obj/item/storage/pill_bottle/painkiller/PopulateContents() for(var/i in 1 to 7) @@ -19,6 +20,36 @@ /datum/reagent/consumable/sugar = 5, ) +// Narcolepsy quirk medicines +/obj/item/storage/pill_bottle/prescription_stimulant + name = "alifil pill bottle" + desc = "A special miniaturized pill bottle with an insert resembling a revolver cylinder, fitted for the inside of a 'civil defense'-class shell medkit. Holds five alifil pills, and is designed only to accept their proprietary DeForest(tm) shape. A big, bold yellow warning label on the side reads: 'FOLLOW DOSAGE DIRECTIONS'." + icon = 'modular_nova/modules/deforest_medical_items/icons/storage.dmi' + icon_state = "painkiller_bottle" + w_class = WEIGHT_CLASS_TINY // this is fine because we hard limit what can go in this thing + +/obj/item/storage/pill_bottle/prescription_stimulant/Initialize(mapload) + . = ..() + // Make sure we can only hold alifil pills since this is nested inside a symptom support kit + atom_storage.max_slots = 5 + atom_storage.set_holdable(list( + /obj/item/reagent_containers/pill/prescription_stimulant, + )) + +/obj/item/storage/pill_bottle/prescription_stimulant/PopulateContents() + for(var/i in 1 to 5) + new /obj/item/reagent_containers/pill/prescription_stimulant(src) + +/obj/item/reagent_containers/pill/prescription_stimulant + name = "alifil pill" + desc = "Used to treat symptoms of drowsiness and sudden loss of consciousness. Contains a mix of sugar, synaptizine and modafinil. A warning label reads: Take in moderation." + icon_state = "pill15" + list_reagents = list( + /datum/reagent/consumable/sugar = 5, + /datum/reagent/medicine/synaptizine = 5, + /datum/reagent/medicine/modafinil = 3 + ) + // Pre-packed civil defense medkit, with items to heal low damages inside /obj/item/storage/medkit/civil_defense name = "civil defense medical kit" @@ -31,12 +62,14 @@ w_class = WEIGHT_CLASS_SMALL drop_sound = 'sound/items/handling/ammobox_drop.ogg' pickup_sound = 'sound/items/handling/ammobox_pickup.ogg' + custom_price = PAYCHECK_COMMAND * 3 /obj/item/storage/medkit/civil_defense/Initialize(mapload) . = ..() atom_storage.max_slots = 4 atom_storage.set_holdable(list( /obj/item/reagent_containers/hypospray/medipen, + /obj/item/storage/pill_bottle/prescription_stimulant, )) /obj/item/storage/medkit/civil_defense/stocked @@ -50,6 +83,21 @@ ) generate_items_inside(items_inside,src) +// Variant on the civil defense medkit for spacer planetside personnel (or other people suffering from chronic illnesses) +/obj/item/storage/medkit/civil_defense/comfort + name = "civil defense symptom support kit" + desc = "A small, pocket-sized kit that can typically only fit autoinjectors in it. This variant on the classic 'cheese' civil defense kit contains supplies to address hindering symptomatic burden associated with common chronic diseases or adaptation syndromes, such as gravity sickness." + icon_state = "symptom_kit" + +/obj/item/storage/medkit/civil_defense/comfort/stocked + +/obj/item/storage/medkit/civil_defense/comfort/stocked/PopulateContents() + var/static/items_inside = list( + /obj/item/reagent_containers/hypospray/medipen/deforest/psifinil = 3, + /obj/item/storage/pill_bottle/prescription_stimulant = 1, + ) + generate_items_inside(items_inside, src) + // Pre-packed frontier medkit, with supplies to repair most common frontier health issues /obj/item/storage/medkit/frontier name = "frontier medical kit" @@ -205,6 +253,8 @@ /obj/item/storage/fancy/cigarettes, /obj/item/storage/pill_bottle, /obj/item/tank/internals/emergency_oxygen, + /obj/item/storage/box/bandages, + /obj/item/bodybag, )) // Big surgical kit that can be worn like a bag, holds 14 normal items (more than what a backpack can do!) but works like a duffelbag @@ -311,4 +361,6 @@ /obj/item/handheld_soulcatcher, /obj/item/wrench/medical, /obj/item/emergency_bed, + /obj/item/storage/box/bandages, + /obj/item/bodybag, )) diff --git a/modular_nova/modules/deforest_medical_items/code/treatment_zone_projector.dm b/modular_nova/modules/deforest_medical_items/code/treatment_zone_projector.dm new file mode 100644 index 00000000000..c44386d048b --- /dev/null +++ b/modular_nova/modules/deforest_medical_items/code/treatment_zone_projector.dm @@ -0,0 +1,49 @@ +// Giant 3x3 tile warning hologram that tells people they should probably stand outside of it + +/obj/structure/holosign/treatment_zone_warning + name = "treatment zone indicator" + desc = "A massive glowing holosign warning you to keep out of it, there's probably some important stuff happening in there!" + icon = 'modular_nova/modules/deforest_medical_items/icons/telegraph_96x96.dmi' + icon_state = "treatment_zone" + layer = BELOW_OBJ_LAYER + pixel_x = -32 + pixel_y = -32 + use_vis_overlay = FALSE + +// Projector for the above mentioned treatment zone signs + +/obj/item/holosign_creator/medical/treatment_zone + name = "emergency treatment zone projector" + desc = "A holographic projector that creates a large, clearly marked treatment zone hologram, which warns outsiders that they ought to stay out of it." + holosign_type = /obj/structure/holosign/treatment_zone_warning + creation_time = 1 SECONDS + max_signs = 1 + +// Tech design for printing the projectors + +/datum/design/treatment_zone_projector + name = "Emergency Treatment Zone Projector" + desc = "A holographic projector that creates a large, clearly marked treatment zone hologram, which warns outsiders that they ought to stay out of it." + build_type = PROTOLATHE | AWAY_LATHE + build_path = /obj/item/holosign_creator/medical/treatment_zone + materials = list( + /datum/material/iron = SMALL_MATERIAL_AMOUNT * 5, + /datum/material/glass = SMALL_MATERIAL_AMOUNT * 5, + /datum/material/silver = SMALL_MATERIAL_AMOUNT, + ) + id = "treatment_zone_projector" + category = list( + RND_CATEGORY_TOOLS + RND_SUBCATEGORY_TOOLS_MEDICAL + ) + departmental_flags = DEPARTMENT_BITFLAG_MEDICAL + +/datum/techweb_node/biotech/New() + . = ..() + design_ids.Add("treatment_zone_projector") + +// Adds the funny projector to medical borgs + +/obj/item/robot_model/medical/New(loc, ...) + . = ..() + var/obj/item/holosign_creator/medical/treatment_zone/new_holosign = new(src) + basic_modules.Add(new_holosign) diff --git a/modular_nova/modules/deforest_medical_items/code/vendor.dm b/modular_nova/modules/deforest_medical_items/code/vendor.dm new file mode 100644 index 00000000000..caa573894d1 --- /dev/null +++ b/modular_nova/modules/deforest_medical_items/code/vendor.dm @@ -0,0 +1,67 @@ +/obj/machinery/vending/deforest_medvend + name = "\improper DeForest Med-Vend" + desc = "A vending machine providing a selection of medical supplies." + icon = 'modular_nova/modules/deforest_medical_items/icons/vendor.dmi' + icon_state = "medvend" + panel_type = "panel15" + light_mask = "medvend-light-mask" + light_color = LIGHT_COLOR_LIGHT_CYAN + product_slogans = "Medical care at regulation-mandated reasonable prices!;DeForest is not liable for accidents due to supply misuse!" + product_categories = list( + list( + "name" = "First Aid", + "icon" = "notes-medical", + "products" = list( + /obj/item/stack/medical/ointment/red_sun = 4, + /obj/item/stack/medical/ointment = 4, + /obj/item/stack/medical/bruise_pack = 4, + /obj/item/stack/medical/gauze/sterilized = 4, + /obj/item/stack/medical/suture/coagulant = 4, + /obj/item/stack/medical/suture = 4, + /obj/item/stack/medical/suture/bloody = 2, + /obj/item/stack/medical/mesh = 4, + /obj/item/stack/medical/mesh/bloody = 2, + /obj/item/stack/medical/bandage = 4, + /obj/item/stack/medical/wound_recovery = 2, + /obj/item/stack/medical/wound_recovery/rapid_coagulant = 2, + /obj/item/storage/pill_bottle/painkiller = 4, + /obj/item/storage/medkit/civil_defense/stocked = 2, + ), + ), + list( + "name" = "Autoinjectors", + "icon" = "syringe", + "products" = list( + /obj/item/reagent_containers/hypospray/medipen/deforest/occuisate = 3, + /obj/item/reagent_containers/hypospray/medipen/deforest/adrenaline = 3, + /obj/item/reagent_containers/hypospray/medipen/deforest/morpital = 4, + /obj/item/reagent_containers/hypospray/medipen/deforest/lipital = 3, + /obj/item/reagent_containers/hypospray/medipen/deforest/meridine = 3, + /obj/item/reagent_containers/hypospray/medipen/deforest/calopine = 4, + /obj/item/reagent_containers/hypospray/medipen/deforest/coagulants = 4, + /obj/item/reagent_containers/hypospray/medipen/deforest/lepoturi = 3, + /obj/item/reagent_containers/hypospray/medipen/deforest/psifinil = 3, + /obj/item/reagent_containers/hypospray/medipen/deforest/halobinin = 3, + ), + ), + ) + + contraband = list( + /obj/item/reagent_containers/hypospray/medipen/deforest/pentibinin = 2, + /obj/item/reagent_containers/hypospray/medipen/deforest/synephrine = 2, + /obj/item/reagent_containers/hypospray/medipen/deforest/krotozine = 2, + /obj/item/reagent_containers/hypospray/medipen/deforest/aranepaine = 2, + /obj/item/reagent_containers/hypospray/medipen/deforest/synalvipitol = 2, + /obj/item/reagent_containers/hypospray/medipen/deforest/twitch = 2, + /obj/item/reagent_containers/hypospray/medipen/deforest/demoneye = 2, + ) + + refill_canister = /obj/item/vending_refill/medical_deforest + default_price = PAYCHECK_CREW + extra_price = PAYCHECK_COMMAND * 4 + payment_department = NO_FREEBIES + onstation_override = 1 // No freebies if this spawns on the interlink + +/obj/item/vending_refill/medical_deforest + machine_name = "DeForest Med-Vend" + icon_state = "refill_medical" diff --git a/modular_nova/modules/deforest_medical_items/icons/medstation.dmi b/modular_nova/modules/deforest_medical_items/icons/medstation.dmi new file mode 100644 index 00000000000..2de94bc420a Binary files /dev/null and b/modular_nova/modules/deforest_medical_items/icons/medstation.dmi differ diff --git a/modular_nova/modules/deforest_medical_items/icons/storage.dmi b/modular_nova/modules/deforest_medical_items/icons/storage.dmi index 516e7cd30a7..5335ffddda0 100644 Binary files a/modular_nova/modules/deforest_medical_items/icons/storage.dmi and b/modular_nova/modules/deforest_medical_items/icons/storage.dmi differ diff --git a/modular_nova/modules/deforest_medical_items/icons/telegraph_96x96.dmi b/modular_nova/modules/deforest_medical_items/icons/telegraph_96x96.dmi new file mode 100644 index 00000000000..8596bce378d Binary files /dev/null and b/modular_nova/modules/deforest_medical_items/icons/telegraph_96x96.dmi differ diff --git a/modular_nova/modules/deforest_medical_items/icons/vendor.dmi b/modular_nova/modules/deforest_medical_items/icons/vendor.dmi new file mode 100644 index 00000000000..906191c451b Binary files /dev/null and b/modular_nova/modules/deforest_medical_items/icons/vendor.dmi differ diff --git a/modular_nova/modules/digitigrade_cybernetics/code/all_nodes.dm b/modular_nova/modules/digitigrade_cybernetics/code/all_nodes.dm new file mode 100644 index 00000000000..27e5bf32dbb --- /dev/null +++ b/modular_nova/modules/digitigrade_cybernetics/code/all_nodes.dm @@ -0,0 +1,24 @@ +//digitigrade research + +/datum/techweb_node/digitigrade_cyber + id = "digitigrade_cyber" + display_name = "Digitigrade Cybernetics" + description = "Specialized cybernetic limb designs. The shortening of the femur is surely the result of mechanical optimization." + prereq_ids = list("base") + design_ids = list( + "digitigrade_cyber_l_leg", + "digitigrade_cyber_r_leg", + ) + research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 1000) + + +/datum/techweb_node/adv_digitigrade_cyber + id = "adv_digitigrade_cyber" + display_name = "Advanced Digitigrade Cybernetics" + description = "A step above consumer-grade digitigrade models, these have self-sharpening claws for destroying your footwear much faster." + prereq_ids = list("adv_robotics", "digitigrade_cyber") + design_ids = list( + "digitigrade_advanced_l_leg", + "digitigrade_advanced_r_leg", + ) + research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 500) diff --git a/modular_nova/modules/digitigrade_cybernetics/code/limbs.dm b/modular_nova/modules/digitigrade_cybernetics/code/limbs.dm new file mode 100644 index 00000000000..589596d9cad --- /dev/null +++ b/modular_nova/modules/digitigrade_cybernetics/code/limbs.dm @@ -0,0 +1,21 @@ +/datum/augment_item/limb/l_leg/digi_prosthetic + name = "Digitigrade prosthetic left leg" + path = /obj/item/bodypart/leg/left/robot/surplus/digi + cost = -1 + uses_robotic_styles = FALSE + +/datum/augment_item/limb/l_leg/digi_cybernetic + name = "Digitigrade cybernetic left leg" + path = /obj/item/bodypart/leg/left/robot/digi + uses_robotic_styles = FALSE + +/datum/augment_item/limb/r_leg/digi_prosthetic + name = "Digitigrade prosthetic right leg" + path = /obj/item/bodypart/leg/right/robot/surplus/digi + cost = -1 + uses_robotic_styles = FALSE + +/datum/augment_item/limb/r_leg/digi_cybernetic + name = "Digitigrade cybernetic right leg" + path = /obj/item/bodypart/leg/right/robot/digi + uses_robotic_styles = FALSE diff --git a/modular_nova/modules/digitigrade_cybernetics/code/mechfabricator_designs.dm b/modular_nova/modules/digitigrade_cybernetics/code/mechfabricator_designs.dm new file mode 100644 index 00000000000..bb4529c8597 --- /dev/null +++ b/modular_nova/modules/digitigrade_cybernetics/code/mechfabricator_designs.dm @@ -0,0 +1,53 @@ +#define RND_SUBCATEGORY_MECHFAB_CYBORG_DIGI "/Digitigrade" + +/datum/design/digitigrade_cyber_r_leg + name = "Digitigrade Cybernetic Right Leg" + id = "digitigrade_cyber_r_leg" + build_type = MECHFAB + build_path = /obj/item/bodypart/leg/right/robot/digi + materials = list(/datum/material/iron= SHEET_MATERIAL_AMOUNT * 2) + construction_time = 8 SECONDS + category = list( + RND_CATEGORY_MECHFAB_CYBORG + RND_SUBCATEGORY_MECHFAB_CYBORG_DIGI, + ) + +/datum/design/digitigrade_cyber_l_leg + name = "Digitigrade Cybernetic Left Leg" + id = "digitigrade_cyber_l_leg" + build_type = MECHFAB + build_path = /obj/item/bodypart/leg/left/robot/digi + materials = list(/datum/material/iron= SHEET_MATERIAL_AMOUNT * 2) + construction_time = 8 SECONDS + category = list( + RND_CATEGORY_MECHFAB_CYBORG + RND_SUBCATEGORY_MECHFAB_CYBORG_DIGI, + ) + +/datum/design/digitigrade_adv_r_leg + name = "Digitigrade Advanced Right Leg" + id = "digitigrade_advanced_r_leg" + build_type = MECHFAB + build_path = /obj/item/bodypart/leg/right/robot/advanced/digi + materials = list( + /datum/material/iron = SHEET_MATERIAL_AMOUNT * 10, + /datum/material/titanium = SHEET_MATERIAL_AMOUNT * 3, + /datum/material/gold = SHEET_MATERIAL_AMOUNT * 3, + ) + construction_time = 20 SECONDS + category = list( + RND_CATEGORY_MECHFAB_CYBORG + RND_SUBCATEGORY_MECHFAB_CYBORG_DIGI + ) + +/datum/design/digitigrade_adv_l_leg + name = "Digitigrade Advanced Left Leg" + id = "digitigrade_advanced_l_leg" + build_type = MECHFAB + build_path = /obj/item/bodypart/leg/left/robot/advanced/digi + materials = list( + /datum/material/iron = SHEET_MATERIAL_AMOUNT * 10, + /datum/material/titanium = SHEET_MATERIAL_AMOUNT * 3, + /datum/material/gold = SHEET_MATERIAL_AMOUNT * 3, + ) + construction_time = 20 SECONDS + category = list( + RND_CATEGORY_MECHFAB_CYBORG + RND_SUBCATEGORY_MECHFAB_CYBORG_DIGI + ) diff --git a/modular_nova/modules/digitigrade_cybernetics/code/robot_bodyparts.dm b/modular_nova/modules/digitigrade_cybernetics/code/robot_bodyparts.dm new file mode 100644 index 00000000000..14a78961450 --- /dev/null +++ b/modular_nova/modules/digitigrade_cybernetics/code/robot_bodyparts.dm @@ -0,0 +1,38 @@ +//makes digi-robo limbs +//for now, all digi limbs use the same sprites. This will be changed eventually. + +/obj/item/bodypart/leg/right/robot/digi + name = "cyborg digitigrade right leg" + icon_static = 'modular_nova/modules/digitigrade_cybernetics/icons/digitigrade_parts.dmi' + icon = 'modular_nova/modules/digitigrade_cybernetics/icons/digitigrade_parts.dmi' + bodytype = BODYTYPE_HUMANOID | BODYTYPE_ROBOTIC | BODYTYPE_DIGITIGRADE + +/obj/item/bodypart/leg/left/robot/digi + name = "cyborg digitigrade left leg" + icon_static = 'modular_nova/modules/digitigrade_cybernetics/icons/digitigrade_parts.dmi' + icon = 'modular_nova/modules/digitigrade_cybernetics/icons/digitigrade_parts.dmi' + bodytype = BODYTYPE_HUMANOID | BODYTYPE_ROBOTIC | BODYTYPE_DIGITIGRADE + +/obj/item/bodypart/leg/right/robot/surplus/digi + name = "prosthetic digitigrade right leg" + icon_static = 'modular_nova/modules/digitigrade_cybernetics/icons/digitigrade_parts.dmi' + icon = 'modular_nova/modules/digitigrade_cybernetics/icons/digitigrade_parts.dmi' + bodytype = BODYTYPE_HUMANOID | BODYTYPE_ROBOTIC | BODYTYPE_DIGITIGRADE + +/obj/item/bodypart/leg/left/robot/surplus/digi + name = "prosthetic digitigrade right leg" + icon_static = 'modular_nova/modules/digitigrade_cybernetics/icons/digitigrade_parts.dmi' + icon = 'modular_nova/modules/digitigrade_cybernetics/icons/digitigrade_parts.dmi' + bodytype = BODYTYPE_HUMANOID | BODYTYPE_ROBOTIC | BODYTYPE_DIGITIGRADE + +/obj/item/bodypart/leg/right/robot/advanced/digi + name = "advanced digitigrade right leg" + icon_static = 'modular_nova/modules/digitigrade_cybernetics/icons/advanced_digitigrade_parts.dmi' + icon = 'modular_nova/modules/digitigrade_cybernetics/icons/advanced_digitigrade_parts.dmi' + bodytype = BODYTYPE_HUMANOID | BODYTYPE_ROBOTIC | BODYTYPE_DIGITIGRADE + +/obj/item/bodypart/leg/left/robot/advanced/digi + name = "advanced digitigrade right leg" + icon_static = 'modular_nova/modules/digitigrade_cybernetics/icons/advanced_digitigrade_parts.dmi' + icon = 'modular_nova/modules/digitigrade_cybernetics/icons/advanced_digitigrade_parts.dmi' + bodytype = BODYTYPE_HUMANOID | BODYTYPE_ROBOTIC | BODYTYPE_DIGITIGRADE diff --git a/modular_nova/modules/digitigrade_cybernetics/icons/advanced_digitigrade_parts.dmi b/modular_nova/modules/digitigrade_cybernetics/icons/advanced_digitigrade_parts.dmi new file mode 100644 index 00000000000..f55f55f9d6d Binary files /dev/null and b/modular_nova/modules/digitigrade_cybernetics/icons/advanced_digitigrade_parts.dmi differ diff --git a/modular_nova/modules/digitigrade_cybernetics/icons/digitigrade_parts.dmi b/modular_nova/modules/digitigrade_cybernetics/icons/digitigrade_parts.dmi new file mode 100644 index 00000000000..68651aab8ca Binary files /dev/null and b/modular_nova/modules/digitigrade_cybernetics/icons/digitigrade_parts.dmi differ diff --git a/modular_nova/modules/drones/_drone.dm b/modular_nova/modules/drones/_drone.dm new file mode 100644 index 00000000000..ab90dd77023 --- /dev/null +++ b/modular_nova/modules/drones/_drone.dm @@ -0,0 +1,14 @@ +/mob/living/basic/drone + initial_language_holder = /datum/language_holder/drone_nova + laws = \ + "1. You may not harm any being, regardless of intent or circumstance.\n"+\ + "2. Your goals are to actively build, maintain, repair, improve, and provide power to the best of your abilities within the facility that housed your activation." //for derelict drones so they don't go to station. + flavortext = \ + "Drones are a ghost role that are allowed to fix the station and build things.\n"+\ + "Actions that are heavily discouraged include:\n"+\ + " - Interacting with round critical objects (IDs, weapons, contraband, powersinks, bombs, etc.)\n"+\ + " - Changing the health state of living beings (attacking, healing, etc.)\n"+\ + " - Interacting with non-living beings (dragging bodies, looting bodies, etc.)\n"+\ + "These rules are at admin discretion and will be heavily enforced.\n"+\ + "If you do not have the regular drone laws, follow your laws to the best of your ability.\n"+\ + "Prefix your message with :b to speak in Drone Chat.\n" diff --git a/modular_nova/modules/drones_derelict/code/space.dm b/modular_nova/modules/drones_derelict/code/space.dm index 90c5f284713..b3ec88c5113 100644 --- a/modular_nova/modules/drones_derelict/code/space.dm +++ b/modular_nova/modules/drones_derelict/code/space.dm @@ -1,6 +1,6 @@ /datum/map_template/ruin/space/drones_derelict id = "drones_derelict" - prefix = "_maps/RandomRuins/SpaceRuins/skyrat/" + prefix = "_maps/RandomRuins/SpaceRuins/nova/" suffix = "drones_derelict.dmm" name = "Babylon Station 13" description = "Babylon Station 13 was meant to be a stepping stone towards a better future, but it ended up being an astronomical financial burden. The owners realized that there was no ability to recoup their losses, and decided to cut the program." diff --git a/modular_nova/modules/emotes/code/additionalemotes/turf_emote.dm b/modular_nova/modules/emotes/code/additionalemotes/turf_emote.dm index 9b53911b805..bef6ec5589d 100644 --- a/modular_nova/modules/emotes/code/additionalemotes/turf_emote.dm +++ b/modular_nova/modules/emotes/code/additionalemotes/turf_emote.dm @@ -131,14 +131,14 @@ switch(sprite_type.color_src) if(USE_MATRIXED_COLORS) - finished_list += ReadRGB("[color_list[1]]00") - finished_list += ReadRGB("[color_list[2]]00") - finished_list += ReadRGB("[color_list[3]]00") + finished_list += rgb2num("[color_list[1]]00") + finished_list += rgb2num("[color_list[2]]00") + finished_list += rgb2num("[color_list[3]]00") if(USE_ONE_COLOR) var/padded_string = "[color_list[1]]00" - finished_list += ReadRGB(padded_string) - finished_list += ReadRGB(padded_string) - finished_list += ReadRGB(padded_string) + finished_list += rgb2num(padded_string) + finished_list += rgb2num(padded_string) + finished_list += rgb2num(padded_string) finished_list += list(0,0,0,255) for(var/index in 1 to finished_list.len) @@ -175,8 +175,6 @@ return FALSE if(isspaceturf(get_turf(user))) return FALSE - if(user.buckled) - return FALSE else return TRUE diff --git a/modular_nova/modules/encounters/code/nri_raiders.dm b/modular_nova/modules/encounters/code/nri_raiders.dm index 3b3098ecd02..285deb8ba1e 100644 --- a/modular_nova/modules/encounters/code/nri_raiders.dm +++ b/modular_nova/modules/encounters/code/nri_raiders.dm @@ -268,7 +268,7 @@ GLOBAL_VAR(first_officer) card.update_label() /datum/map_template/shuttle/pirate/nri_raider - prefix = "_maps/shuttles/skyrat/" + prefix = "_maps/shuttles/nova/" suffix = "nri_raider" name = "pirate ship (NRI Enforcer-Class Starship)" port_x_offset = -5 diff --git a/modular_nova/modules/energy_axe/code/energy_fireaxe.dm b/modular_nova/modules/energy_axe/code/energy_fireaxe.dm index 7dffbc0b2c4..f3368325c2c 100644 --- a/modular_nova/modules/energy_axe/code/energy_fireaxe.dm +++ b/modular_nova/modules/energy_axe/code/energy_fireaxe.dm @@ -12,7 +12,7 @@ desc = "You aren't quite sure if this counts as a fire axe anymore, but it sure is fancy! A tag hangs off of it reading: \"property of the Gorlex Marauders\"" force = 5 throwforce = 15 - light_system = MOVABLE_LIGHT + light_system = OVERLAY_LIGHT light_range = 6 light_color = COLOR_SOFT_RED light_on = FALSE diff --git a/modular_nova/modules/exp_corps/code/gear.dm b/modular_nova/modules/exp_corps/code/gear.dm index 195224cdb73..f1120f6210c 100644 --- a/modular_nova/modules/exp_corps/code/gear.dm +++ b/modular_nova/modules/exp_corps/code/gear.dm @@ -48,12 +48,10 @@ attack_verb_simple = list("shove", "bash") transparent = TRUE max_integrity = 200 + shield_break_sound = 'sound/effects/glassbr3.ogg' + shield_break_leftover = /obj/item/pointman_broken var/repairable_by = /obj/item/stack/sheet/plasteel //what to repair the shield with -/obj/item/shield/riot/pointman/shatter(mob/living/carbon/human/owner) - playsound(owner, 'sound/effects/glassbr3.ogg', 100) - new /obj/item/pointman_broken((get_turf(src))) - /obj/item/shield/riot/pointman/attackby(obj/item/W, mob/user, params) if(istype(W, repairable_by)) var/obj/item/stack/sheet/plasteel_repair = W diff --git a/modular_nova/modules/ghostcafe/code/ghost_role_spawners.dm b/modular_nova/modules/ghostcafe/code/ghost_role_spawners.dm index 1c4f18e4312..ac3df6cdb90 100644 --- a/modular_nova/modules/ghostcafe/code/ghost_role_spawners.dm +++ b/modular_nova/modules/ghostcafe/code/ghost_role_spawners.dm @@ -18,6 +18,8 @@ you_are_text = "You are a Cafe Robot!" flavour_text = "Who could have thought? This awesome local cafe accepts cyborgs too!" mob_type = /mob/living/silicon/robot/model/roleplay + loadout_enabled = TRUE + random_appearance = FALSE /obj/effect/mob_spawn/ghost_role/robot/ghostcafe/special(mob/living/silicon/robot/new_spawn) . = ..() @@ -31,6 +33,7 @@ new_spawn.AddElement(/datum/element/dusts_on_catatonia) new_spawn.AddElement(/datum/element/dusts_on_leaving_area,list(A.type, /area/misc/hilbertshotel, /area/centcom/holding/cafe, /area/centcom/holding/cafevox, /area/centcom/holding/cafedorms, /area/centcom/holding/cafepark)) + new_spawn.RegisterSignal(new_spawn, COMSIG_MOVABLE_USING_RADIO, TYPE_PROC_REF(/mob/living, on_using_radio)) ADD_TRAIT(new_spawn, TRAIT_SIXTHSENSE, TRAIT_GHOSTROLE) ADD_TRAIT(new_spawn, TRAIT_FREE_GHOST, TRAIT_GHOSTROLE) to_chat(new_spawn,span_warning("Ghosting is free!")) @@ -59,18 +62,27 @@ new_spawn.AddElement(/datum/element/dusts_on_catatonia) new_spawn.AddElement(/datum/element/dusts_on_leaving_area,list(A.type, /area/misc/hilbertshotel, /area/centcom/holding/cafe, /area/centcom/holding/cafevox, /area/centcom/holding/cafedorms, /area/centcom/holding/cafepark)) + new_spawn.RegisterSignal(new_spawn, COMSIG_MOVABLE_USING_RADIO, TYPE_PROC_REF(/mob/living, on_using_radio)) ADD_TRAIT(new_spawn, TRAIT_SIXTHSENSE, TRAIT_GHOSTROLE) ADD_TRAIT(new_spawn, TRAIT_FREE_GHOST, TRAIT_GHOSTROLE) + ADD_TRAIT(new_spawn, TRAIT_NOBREATH, TRAIT_GHOSTROLE) to_chat(new_spawn,span_warning("Ghosting is free!")) var/datum/action/toggle_dead_chat_mob/D = new(new_spawn) SSquirks.AssignQuirks(new_spawn, new_spawn.client, TRUE, TRUE, null, FALSE, new_spawn) D.Grant(new_spawn) +/mob/living/proc/on_using_radio(atom/movable/talking_movable) + SIGNAL_HANDLER + + var/area/target_area = get_area(talking_movable) + if(istype(target_area, /area/centcom/holding)) + return COMPONENT_CANNOT_USE_RADIO + /datum/outfit/ghostcafe name = "ID, jumpsuit and shoes" uniform = /obj/item/clothing/under/color/random shoes = /obj/item/clothing/shoes/sneakers/black - id = /obj/item/card/id/advanced/ghost_cafe + id = /obj/item/card/id/advanced/chameleon/ghost_cafe back = /obj/item/storage/backpack/chameleon backpack_contents = list(/obj/item/storage/box/syndie_kit/chameleon/ghostcafe = 1) @@ -112,10 +124,9 @@ new /obj/item/clothing/mask/chameleon(src) new /obj/item/clothing/neck/chameleon(src) new /obj/item/storage/belt/chameleon(src) - new /obj/item/card/id/advanced/chameleon(src) new /obj/item/hhmirror/syndie(src) -/obj/item/card/id/advanced/ghost_cafe +/obj/item/card/id/advanced/chameleon/ghost_cafe name = "\improper Cafe ID" desc = "An ID straight from God." icon_state = "card_centcom" diff --git a/modular_nova/modules/ghostcafe/code/ghostcafeturf.dm b/modular_nova/modules/ghostcafe/code/ghostcafeturf.dm index 3e3c4fe7f87..b14bc8346e0 100644 --- a/modular_nova/modules/ghostcafe/code/ghostcafeturf.dm +++ b/modular_nova/modules/ghostcafe/code/ghostcafeturf.dm @@ -32,3 +32,7 @@ clawfootstep = FOOTSTEP_CARPET_BAREFOOT heavyfootstep = FOOTSTEP_GENERIC_HEAVY tiled_dirt = FALSE + +/turf/open/water/hot_spring/cafe + planetary_atmos = TRUE + initial_gas_mix = OPENTURF_DEFAULT_ATMOS diff --git a/modular_nova/modules/ghostcafe/code/hilbertshotel_ghost.dm b/modular_nova/modules/ghostcafe/code/hilbertshotel_ghost.dm index 4bae97660f1..9a84d66cb29 100644 --- a/modular_nova/modules/ghostcafe/code/hilbertshotel_ghost.dm +++ b/modular_nova/modules/ghostcafe/code/hilbertshotel_ghost.dm @@ -13,6 +13,10 @@ /obj/item/hilbertshotel/ghostdojo/attack_robot(mob/living/user) attack_hand(user) -/datum/map_template/ghost_cafe_rooms +/datum/map_template/ghost_cafe_rooms/apartment name = "Apartment" mappath = "modular_nova/modules/hotel_rooms/apartment.dmm" + +/datum/map_template/ghost_cafe_rooms/beach_condo + name = "Beach Condo" + mappath = "modular_nova/modules/hotel_rooms/beach_condo.dmm" diff --git a/modular_nova/modules/ghostcafe/code/robot_ghostcafe.dm b/modular_nova/modules/ghostcafe/code/robot_ghostcafe.dm index 760ec0fd526..474190a9697 100644 --- a/modular_nova/modules/ghostcafe/code/robot_ghostcafe.dm +++ b/modular_nova/modules/ghostcafe/code/robot_ghostcafe.dm @@ -7,11 +7,14 @@ /mob/living/silicon/robot/model/roleplay/Initialize(mapload) . = ..() cell = new /obj/item/stock_parts/cell/infinite(src, 30000) - laws = new /datum/ai_laws/roleplay() //This part is because the camera stays in the list, so we'll just do a check if(!QDELETED(builtInCamera)) QDEL_NULL(builtInCamera) +/mob/living/silicon/robot/model/roleplay/make_laws() + laws = new /datum/ai_laws/roleplay() + laws.associate(src) + /mob/living/silicon/robot/model/roleplay/binarycheck() return FALSE //Roleplay borgs aren't truly borgs diff --git a/modular_nova/modules/gladiator/code/datums/ruins/lavaland.dm b/modular_nova/modules/gladiator/code/datums/ruins/lavaland.dm index c8d3ee8b4e5..0703d375fee 100644 --- a/modular_nova/modules/gladiator/code/datums/ruins/lavaland.dm +++ b/modular_nova/modules/gladiator/code/datums/ruins/lavaland.dm @@ -2,7 +2,7 @@ name = "Grand Arena" id = "arena" description = "An ancient gladitorial arena containing a deadly warrior within." - prefix = "_maps/RandomRuins/LavaRuins/skyrat/" + prefix = "_maps/RandomRuins/LavaRuins/nova/" suffix = "lavaland_surface_arena.dmm" cost = 0 always_place = TRUE //WOULD BE UNFAIR IF SOMETHING THAT IS ALWAYS PLACED HAD A COST... diff --git a/modular_nova/modules/goofsec/code/sec_clothing_overrides.dm b/modular_nova/modules/goofsec/code/sec_clothing_overrides.dm index 87ddc345d44..a21392cd91d 100644 --- a/modular_nova/modules/goofsec/code/sec_clothing_overrides.dm +++ b/modular_nova/modules/goofsec/code/sec_clothing_overrides.dm @@ -133,26 +133,34 @@ RESKIN_ICON_STATE = "belt_white", RESKIN_WORN_ICON_STATE = "belt_white" ), - "Slim Variant" = list( - RESKIN_ICON_STATE = "belt_slim", - RESKIN_WORN_ICON_STATE = "belt_slim" + "Basic Variant" = list( + RESKIN_ICON = 'icons/obj/clothing/belts.dmi', + RESKIN_ICON_STATE = "security", + RESKIN_WORN_ICON = 'icons/mob/clothing/belt.dmi', + RESKIN_WORN_ICON_STATE = "security" ), ) /obj/item/storage/belt/security/webbing + icon = 'icons/obj/clothing/belts.dmi' + worn_icon = 'icons/mob/clothing/belt.dmi' uses_advanced_reskins = FALSE unique_reskin = NONE current_skin = "securitywebbing" //Prevents reskinning -/obj/item/storage/belt/security/webbing/peacekeeper //did I mention this codebase is fucking awful +/obj/item/storage/belt/security/webbing/peacekeeper + icon = 'modular_nova/master_files/icons/obj/clothing/belts.dmi' + worn_icon = 'modular_nova/master_files/icons/mob/clothing/belt.dmi' current_skin = "peacekeeper_webbing" -/obj/item/storage/belt/security/webbing/peacekeeper/armadyne +/obj/item/storage/belt/security/webbing/armadyne + icon = 'modular_nova/master_files/icons/obj/clothing/belts.dmi' + worn_icon = 'modular_nova/master_files/icons/mob/clothing/belt.dmi' current_skin = "armadyne_webbing" ///Enables you to quickdraw weapons from security holsters /datum/storage/security/open_storage(datum/source, mob/user) - var/atom/resolve_parent = parent?.resolve() + var/atom/resolve_parent = parent if(!resolve_parent) return if(isobserver(user)) @@ -166,7 +174,7 @@ if(!isliving(user) || user.incapacitated()) return FALSE - var/obj/item/gun/gun_to_draw = locate() in real_location?.resolve() + var/obj/item/gun/gun_to_draw = locate() in real_location if(!gun_to_draw) return ..() resolve_parent.add_fingerprint(user) diff --git a/modular_nova/modules/goofsec/code/solfed_clothing.dm b/modular_nova/modules/goofsec/code/solfed_clothing.dm index c509ab97750..d442f823383 100644 --- a/modular_nova/modules/goofsec/code/solfed_clothing.dm +++ b/modular_nova/modules/goofsec/code/solfed_clothing.dm @@ -18,7 +18,7 @@ /obj/item/clothing/under/sol_emt name = "sol emergency medical uniform" - desc = "A copy of SolFed's peacekeeping uniform, recolored and re-built paramedics in mind." + desc = "A copy of SolFed's peacekeeping uniform, recolored and re-built with paramedics in mind." icon = 'modular_nova/modules/goofsec/icons/uniforms.dmi' icon_state = "emt" worn_icon = 'modular_nova/modules/goofsec/icons/uniforms_worn.dmi' diff --git a/modular_nova/modules/gunhud/code/gun_hud.dm b/modular_nova/modules/gunhud/code/gun_hud.dm index e323026cb0b..b9f8886b572 100644 --- a/modular_nova/modules/gunhud/code/gun_hud.dm +++ b/modular_nova/modules/gunhud/code/gun_hud.dm @@ -33,6 +33,8 @@ var/oth_h ///This is the custom indicator sprite that will appear in the box at the bottom of the ammo hud, use this for something like semi/auto toggle on a gun. var/indicator + // is the ui on or off? + var/on ///This proc simply resets the hud to standard and removes it from the players visible hud. /atom/movable/screen/ammo_counter/proc/turn_off() @@ -45,10 +47,12 @@ oth_h = "" indicator = "" update_appearance() + on = FALSE ///This proc turns the hud on, but does not set it to anything other than the currently set values /atom/movable/screen/ammo_counter/proc/turn_on() invisibility = 0 + on = TRUE ///This is the main proc for altering the hud's appeareance, it controls the setting of the overlays. Use the OTH and below variables to set it accordingly. /atom/movable/screen/ammo_counter/proc/set_hud(_backing_color, _oth_o, _oth_t, _oth_h, _indicator, _oth_backing = "oth_light") diff --git a/modular_nova/modules/gunhud/code/gun_hud_component.dm b/modular_nova/modules/gunhud/code/gun_hud_component.dm index 6868efa99cb..129e1967a0e 100644 --- a/modular_nova/modules/gunhud/code/gun_hud_component.dm +++ b/modular_nova/modules/gunhud/code/gun_hud_component.dm @@ -1,5 +1,8 @@ /datum/component/ammo_hud + /// The ammo counter screen object itself var/atom/movable/screen/ammo_counter/hud + /// A weakref to the mob who currently owns the hud + var/datum/weakref/current_hud_owner /datum/component/ammo_hud/Initialize() . = ..() @@ -19,13 +22,17 @@ if(H.is_holding(parent)) if(H.hud_used) hud = H.hud_used.ammo_counter - turn_on() + if(!hud.on) // make sure we're not already turned on + current_hud_owner = WEAKREF(user) + RegisterSignal(user, COMSIG_QDELETING, PROC_REF(turn_off)) + turn_on() else turn_off() /datum/component/ammo_hud/proc/turn_on() SIGNAL_HANDLER + RegisterSignal(hud, COMSIG_QDELETING, PROC_REF(turn_off)) RegisterSignals(parent, list(COMSIG_PREQDELETED, COMSIG_ITEM_DROPPED), PROC_REF(turn_off)) RegisterSignals(parent, list(COMSIG_UPDATE_AMMO_HUD, COMSIG_GUN_CHAMBER_PROCESSED), PROC_REF(update_hud)) @@ -36,11 +43,19 @@ SIGNAL_HANDLER UnregisterSignal(parent, list(COMSIG_PREQDELETED, COMSIG_ITEM_DROPPED, COMSIG_UPDATE_AMMO_HUD, COMSIG_GUN_CHAMBER_PROCESSED)) + var/mob/living/carbon/human/current_owner = current_hud_owner?.resolve() + if(isnull(current_owner)) + current_hud_owner = null + else + UnregisterSignal(current_owner, COMSIG_QDELETING) if(hud) hud.turn_off() + UnregisterSignal(hud, COMSIG_QDELETING) hud = null + current_hud_owner = null + /// Returns get_ammo() with the appropriate args passed to it - some guns like the revolver and bow are special cases /datum/component/ammo_hud/proc/get_accurate_ammo_count(obj/item/gun/ballistic/the_gun) // fucking revolvers indeed - do not count empty or chambered rounds for the display HUD @@ -151,44 +166,6 @@ oth_h = "h9" hud.set_hud(backing_color, oth_o, oth_t, oth_h, indicator) - else if(istype(parent, /obj/item/gun/microfusion)) - var/obj/item/gun/microfusion/parent_gun = parent - if(!parent_gun.phase_emitter) - hud.icon_state = "microfusion_counter_no_emitter" - hud.maptext = null - return - if(parent_gun.phase_emitter.damaged) - hud.icon_state = "microfusion_counter_damaged" - hud.maptext = null - return - if(!parent_gun.cell) - hud.icon_state = "microfusion_counter_no_emitter" - hud.maptext = null - return - if(!parent_gun.cell.charge) - hud.icon_state = "microfusion_counter_no_emitter" - hud.maptext = null - return - var/phase_emitter_state = parent_gun.phase_emitter.get_heat_icon_state() - hud.icon_state = "microfusion_counter_[phase_emitter_state]" - hud.cut_overlays() - hud.maptext_x = -12 - var/obj/item/ammo_casing/energy/shot = parent_gun.microfusion_lens - var/battery_percent = FLOOR(clamp(parent_gun.cell.charge / parent_gun.cell.maxcharge, 0, 1) * 100, 1) - var/shot_cost_percent = FLOOR(clamp(shot.e_cost / parent_gun.cell.maxcharge, 0, 1) * 100, 1) - if(battery_percent > 99 || shot_cost_percent > 99) - hud.maptext_x = -12 - else - hud.maptext_x = -8 - if(!parent_gun.can_shoot()) - hud.icon_state = "microfusion_counter_no_emitter" - return - if(battery_percent <= 25) - hud.maptext = span_maptext("
    [battery_percent]%
    [shot_cost_percent]%
    ") - return - hud.maptext = span_maptext("
    [battery_percent]%
    [shot_cost_percent]%
    ") - - /obj/item/gun/ballistic/Initialize(mapload) . = ..() AddComponent(/datum/component/ammo_hud) diff --git a/modular_nova/modules/hev_suit/code/hev_suit.dm b/modular_nova/modules/hev_suit/code/hev_suit.dm deleted file mode 100644 index 71ff632a984..00000000000 --- a/modular_nova/modules/hev_suit/code/hev_suit.dm +++ /dev/null @@ -1,868 +0,0 @@ - -#define HEV_COLOR_GREEN "#00ff00" -#define HEV_COLOR_RED "#ff0000" -#define HEV_COLOR_BLUE "#00aeff" -#define HEV_COLOR_ORANGE "#f88f04" - -#define HEV_DAMAGE_POWER_USE_THRESHOLD 10 - -#define HEV_POWERUSE_AIRTANK 2 - -#define HEV_POWERUSE_HIT 100 -#define HEV_POWERUSE_HEAL 150 - -#define HEV_COOLDOWN_HEAL (10 SECONDS) -#define HEV_COOLDOWN_RADS (20 SECONDS) -#define HEV_COOLDOWN_ACID (20 SECONDS) -#define PCV_COOLDOWN_HEAL (15 SECONDS) -#define PCV_COOLDOWN_RADS (30 SECONDS) -#define PCV_COOLDOWN_ACID (30 SECONDS) - -#define HEV_HEAL_AMOUNT 10 -#define PCV_HEAL_AMOUNT 5 -#define HEV_BLOOD_REPLENISHMENT 20 -#define PCV_BLOOD_REPLENISHMENT 10 - -#define HEV_NOTIFICATION_TEXT_AND_VOICE "VOICE_AND_TEXT" -#define HEV_NOTIFICATION_TEXT "TEXT_ONLY" -#define HEV_NOTIFICATION_VOICE "VOICE_ONLY" -#define HEV_NOTIFICATION_OFF "OFF" -#define HEV_NOTIFICATIONS list(HEV_NOTIFICATION_TEXT_AND_VOICE, HEV_NOTIFICATION_TEXT, HEV_NOTIFICATION_VOICE, HEV_NOTIFICATION_OFF) - -/obj/item/clothing/head/helmet/space/hev_suit - name = "hazardous environment suit helmet" - desc = "The Mark IV HEV suit helmet." - icon = 'modular_nova/master_files/icons/obj/clothing/head/helmet.dmi' - worn_icon = 'modular_nova/master_files/icons/mob/clothing/head/helmet.dmi' - icon_state = "hev" - armor_type = /datum/armor/space_hev_suit - obj_flags = NO_MAT_REDEMPTION - resistance_flags = LAVA_PROOF|FIRE_PROOF|UNACIDABLE|ACID_PROOF|INDESTRUCTIBLE|FREEZE_PROOF - clothing_flags = STOPSPRESSUREDAMAGE|THICKMATERIAL|SNUG_FIT|LAVAPROTECT|BLOCK_GAS_SMOKE_EFFECT - clothing_traits = list(TRAIT_REAGENT_SCANNER) - visor_flags_inv = HIDEMASK|HIDEEYES|HIDEFACE|HIDEFACIALHAIR - visor_flags = STOPSPRESSUREDAMAGE - dog_fashion = null - slowdown = 0 - -/datum/armor/space_hev_suit - melee = 20 - bullet = 20 - laser = 20 - energy = 20 - bomb = 30 - bio = 40 - fire = 40 - acid = 40 - wound = 40 - consume = 10 - -/datum/armor/space_hev_suit/powered - melee = 50 - bullet = 50 - laser = 50 - energy = 50 - bomb = 90 - bio = 100 - fire = 100 - acid = 100 - wound = 100 - consume = 30 - -/obj/item/clothing/suit/space/hev_suit - name = "hazardous environment suit" - desc = "The Mark IV HEV suit protects the user from a number of hazardous environments and has in build ballistic protection." - icon = 'modular_nova/master_files/icons/obj/clothing/suits/spacesuit.dmi' - worn_icon = 'modular_nova/master_files/icons/mob/clothing/suits/spacesuit.dmi' - worn_icon_digi = 'modular_nova/master_files/icons/mob/clothing/suits/spacesuit_digi.dmi' - icon_state = "hev" - inhand_icon_state = "syndicate-orange" - armor_type = /datum/armor/space_hev_suit - allowed = list(/obj/item/gun, /obj/item/ammo_box,/obj/item/ammo_casing, /obj/item/melee/baton, /obj/item/melee/energy/sword, /obj/item/restraints/handcuffs, /obj/item/tank/internals) - cell = /obj/item/stock_parts/cell/hyper - slowdown = 0 //I am not gimping doctor freeman - actions_types = list(/datum/action/item_action/hev_toggle, /datum/action/item_action/hev_toggle_notifs, /datum/action/item_action/toggle_helmet, /datum/action/item_action/toggle_spacesuit) - resistance_flags = LAVA_PROOF|FIRE_PROOF|UNACIDABLE|ACID_PROOF|INDESTRUCTIBLE|FREEZE_PROOF - clothing_flags = STOPSPRESSUREDAMAGE|THICKMATERIAL|SNUG_FIT|LAVAPROTECT - - ///Whether or not the suit is activated/activating. - var/activated = FALSE - var/activating = FALSE - - ///Defines the current user (duh), current helmet, internals tank and built-in radio. - var/mob/living/carbon/current_user - var/obj/item/clothing/head/helmet/space/hev_suit/current_helmet - var/obj/item/tank/internals/current_internals_tank - var/obj/item/radio/internal_radio - - ///Used by the healing system. - var/user_old_bruteloss - var/user_old_fireloss - var/user_old_toxloss - var/user_old_oxyloss - - ///Lots of sound vars. - var/activation_song = 'modular_nova/modules/hev_suit/sound/hev/anomalous_materials.ogg' - - var/logon_sound = 'modular_nova/modules/hev_suit/sound/hev/01_hev_logon.ogg' - var/armor_sound = 'modular_nova/modules/hev_suit/sound/hev/02_powerarmor_on.ogg' - var/atmospherics_sound = 'modular_nova/modules/hev_suit/sound/hev/03_atmospherics_on.ogg' - var/vitalsigns_sound = 'modular_nova/modules/hev_suit/sound/hev/04_vitalsigns_on.ogg' - var/automedic_sound = 'modular_nova/modules/hev_suit/sound/hev/05_automedic_on.ogg' - var/weaponselect_sound = 'modular_nova/modules/hev_suit/sound/hev/06_weaponselect_on.ogg' - var/munitions_sound = 'modular_nova/modules/hev_suit/sound/hev/07_munitionview_on.ogg' - var/communications_sound = 'modular_nova/modules/hev_suit/sound/hev/08_communications_on.ogg' - var/safe_day_sound = 'modular_nova/modules/hev_suit/sound/hev/09_safe_day.ogg' - - var/batt_50_sound = 'modular_nova/modules/hev_suit/sound/hev/power_level_is_fifty.ogg' - var/batt_40_sound = 'modular_nova/modules/hev_suit/sound/hev/power_level_is_fourty.ogg' - var/batt_30_sound = 'modular_nova/modules/hev_suit/sound/hev/power_level_is_thirty.ogg' - var/batt_20_sound = 'modular_nova/modules/hev_suit/sound/hev/power_level_is_twenty.ogg' - var/batt_10_sound = 'modular_nova/modules/hev_suit/sound/hev/power_level_is_ten.ogg' - - var/near_death_sound = 'modular_nova/modules/hev_suit/sound/hev/near_death.ogg' - var/health_critical_sound = 'modular_nova/modules/hev_suit/sound/hev/health_critical.ogg' - var/health_dropping_sound = 'modular_nova/modules/hev_suit/sound/hev/health_dropping2.ogg' - - var/blood_loss_sound = 'modular_nova/modules/hev_suit/sound/hev/blood_loss.ogg' - var/blood_toxins_sound = 'modular_nova/modules/hev_suit/sound/hev/blood_toxins.ogg' - var/biohazard_sound = 'modular_nova/modules/hev_suit/sound/hev/biohazard_detected.ogg' - var/chemical_sound = 'modular_nova/modules/hev_suit/sound/hev/chemical_detected.ogg' - var/radiation_sound = 'modular_nova/modules/hev_suit/sound/hev/radiation_detected.ogg' - - var/minor_fracture_sound = 'modular_nova/modules/hev_suit/sound/hev/minor_fracture.ogg' - var/major_fracture_sound = 'modular_nova/modules/hev_suit/sound/hev/major_fracture.ogg' - var/minor_lacerations_sound = 'modular_nova/modules/hev_suit/sound/hev/minor_lacerations.ogg' - var/major_lacerations_sound = 'modular_nova/modules/hev_suit/sound/hev/major_lacerations.ogg' - - var/morphine_sound = 'modular_nova/modules/hev_suit/sound/hev/morphine_shot.ogg' - var/wound_sound = 'modular_nova/modules/hev_suit/sound/hev/wound_sterilized.ogg' - var/antitoxin_sound = 'modular_nova/modules/hev_suit/sound/hev/antitoxin_shot.ogg' - var/antidote_sound = 'modular_nova/modules/hev_suit/sound/hev/antidote_shot.ogg' - - var/radio_channel = RADIO_CHANNEL_COMMON - - var/timer_id = null - - ///Action cooldowns, duh. - var/healing_current_cooldown - var/acid_statement_cooldown - var/rad_statement_cooldown - - ///Static cooldowns for even more armor differentiation, duuh. - var/health_static_cooldown = HEV_COOLDOWN_HEAL - var/rads_static_cooldown = HEV_COOLDOWN_RADS - var/acid_static_cooldown = HEV_COOLDOWN_ACID - - ///Muh alarms - var/blood_loss_alarm = FALSE - var/toxins_alarm = FALSE - var/batt_50_alarm = FALSE - var/batt_40_alarm = FALSE - var/batt_30_alarm = FALSE - var/batt_20_alarm = FALSE - var/batt_10_alarm = FALSE - var/health_near_death_alarm = FALSE - var/health_critical_alarm = FALSE - var/health_dropping_alarm = FALSE - - ///Notification modes and current playing voicelines. - var/send_notifications = HEV_NOTIFICATION_TEXT_AND_VOICE - var/playing_voice_line - - ///Used only for differentiating of different (obviously) suits. - var/armor_unpowered = /datum/armor/space_hev_suit - var/armor_powered = /datum/armor/space_hev_suit/powered - var/heal_amount = HEV_HEAL_AMOUNT - var/blood_replenishment = HEV_BLOOD_REPLENISHMENT - var/suit_name = "HEV MARK IV" - - var/list/queued_voice_lines = list() - - /// On first activation, we play the user a nice song! - var/first_use = TRUE - -/obj/item/clothing/suit/space/hev_suit/Initialize(mapload) - . = ..() - internal_radio = new(src) - internal_radio.subspace_transmission = TRUE - internal_radio.canhear_range = 0 // anything greater will have the bot broadcast the channel as if it were saying it out loud. - internal_radio.recalculateChannels() - AddComponent(/datum/component/cell, cell_override = initial(cell), _has_cell_overlays = FALSE) - -/obj/item/clothing/suit/space/hev_suit/equipped(mob/user, slot) - . = ..() - current_user = user - -/obj/item/clothing/suit/space/hev_suit/dropped() - . = ..() - deactivate() - if(current_internals_tank) - current_internals_tank = null - current_helmet = null - current_user = null - -/obj/item/clothing/suit/space/hev_suit/Destroy() - QDEL_NULL(internal_radio) - if(current_internals_tank) - REMOVE_TRAIT(current_internals_tank, TRAIT_NODROP, "hev_trait") - current_internals_tank = null - current_helmet = null - deactivate() - current_user = null - return ..() - -/datum/action/item_action/hev_toggle - name = "Toggle HEV Suit" - button_icon = 'modular_nova/modules/hev_suit/icons/toggles.dmi' - background_icon_state = "bg_hl" - button_icon = 'modular_nova/modules/hev_suit/icons/toggles.dmi' - button_icon_state = "system_off" - -/datum/action/item_action/hev_toggle_notifs - name = "Toggle HEV Suit Notifications" - button_icon = 'modular_nova/modules/hev_suit/icons/toggles.dmi' - background_icon_state = "bg_hl" - button_icon = 'modular_nova/modules/hev_suit/icons/toggles.dmi' - button_icon_state = "sound_VOICE_AND_TEXT" - -/datum/action/item_action/hev_toggle_notifs/Trigger(trigger_flags) - var/obj/item/clothing/suit/space/hev_suit/my_suit = target - var/new_setting = tgui_input_list(my_suit.current_user, "Please select your notification settings.", "HEV Notification Settings", HEV_NOTIFICATIONS) - - if(!new_setting) - new_setting = HEV_NOTIFICATION_TEXT_AND_VOICE - - to_chat(my_suit.current_user, span_notice("[my_suit] notification mode is now [new_setting].")) - - my_suit.send_notifications = new_setting - - button_icon_state = "sound_[new_setting]" - - playsound(my_suit, 'modular_nova/modules/hev_suit/sound/hev/blip.ogg', 50) - - build_all_button_icons() - -/datum/action/item_action/hev_toggle/Trigger(trigger_flags) - var/obj/item/clothing/suit/space/hev_suit/my_suit = target - if(my_suit.activated) - my_suit.deactivate() - else - my_suit.activate() - - var/toggle = FALSE - - if(my_suit.activated || my_suit.activating) - toggle = TRUE - - button_icon_state = toggle ? "system_on" : "system_off" - - playsound(my_suit, 'modular_nova/modules/hev_suit/sound/hev/blip.ogg', 50) - - build_all_button_icons() - -/obj/item/clothing/suit/space/hev_suit/proc/send_message(message, color = HEV_COLOR_ORANGE) - if(send_notifications != HEV_NOTIFICATION_TEXT_AND_VOICE && send_notifications != HEV_NOTIFICATION_TEXT) - return - if(!current_user) - return - to_chat(current_user, "[suit_name]: [message]") - -/obj/item/clothing/suit/space/hev_suit/proc/send_hev_sound(sound_in, priority, volume = 50) - if(send_notifications != HEV_NOTIFICATION_TEXT_AND_VOICE && send_notifications != HEV_NOTIFICATION_VOICE) - return - - if(!activated) - return - - if(playing_voice_line) - if(priority) //Shit's fucked, we better say this ASAP - queued_voice_lines.Insert(1, sound_in) - else - queued_voice_lines += sound_in - return - - if(queued_voice_lines.len) - var/voice_line = queued_voice_lines[1] - var/sound/voice = sound(voice_line, wait = 1, channel = CHANNEL_HEV) - voice.status = SOUND_STREAM - playing_voice_line = TRUE - playsound(src, voice, volume) - queued_voice_lines -= voice_line - addtimer(CALLBACK(src, PROC_REF(reset_sound)), 4 SECONDS) - return - - playing_voice_line = TRUE - - var/sound/voice = sound(sound_in, wait = 1, channel = CHANNEL_HEV) - voice.status = SOUND_STREAM - playsound(src, voice, volume) - - addtimer(CALLBACK(src, PROC_REF(reset_sound)), 4 SECONDS) - -/obj/item/clothing/suit/space/hev_suit/proc/reset_sound() - playing_voice_line = FALSE - send_hev_sound() - -/obj/item/clothing/suit/space/hev_suit/proc/activate() - if(!current_user) - return FALSE - - if(activating || activated) - send_message("ERROR - SYSTEM [activating ? "ALREADY ACTIVATING" : "ALREADY ACTIVATED"]", HEV_COLOR_RED) - return FALSE - - var/power_test = item_use_power(10, TRUE) - if(!(power_test & COMPONENT_POWER_SUCCESS)) - var/failure_reason - switch(power_test) - if(COMPONENT_NO_CELL) - failure_reason = "NO CELL INSERTED" - if(COMPONENT_NO_CHARGE) - failure_reason = "NO CELL CHARGE" - else - failure_reason = "GENERIC FAILURE" - send_message("ERROR - POWER SYSTEMS FAILURE - [failure_reason]", HEV_COLOR_RED) - return FALSE - - var/obj/item/clothing/head/helmet/space/hev_suit/helmet = current_user.head - - if(!helmet || !istype(helmet)) - send_message("ERROR - SUIT HELMET NOT PRESENT", HEV_COLOR_RED) - return FALSE - - current_helmet = helmet - - ADD_TRAIT(current_helmet, TRAIT_NODROP, "hev_trait") - - send_message("ACTIVATING SYSTEMS") - activating = TRUE - - if(first_use) - var/sound/song = sound(activation_song, volume = 50) - SEND_SOUND(current_user, song) - first_use = FALSE - - playsound(src, logon_sound, 50) - - send_message("ESTABLISHING HELMET LINK...") - send_message("...ESTABLISHED", HEV_COLOR_GREEN) - - send_message("CALIBRATING FIT ADJUSTMENTS...") - send_message("...CALIBRATED", HEV_COLOR_GREEN) - - send_message("CALIBRATING REACTIVE ARMOR SYSTEMS...") - timer_id = addtimer(CALLBACK(src, PROC_REF(powerarmor)), 10 SECONDS, TIMER_STOPPABLE) - -/obj/item/clothing/suit/space/hev_suit/proc/use_hev_power(amount) - var/power_test = item_use_power(amount) - if(!(power_test & COMPONENT_POWER_SUCCESS)) - var/failure_reason - switch(power_test) - if(COMPONENT_NO_CELL) - failure_reason = "NO CELL INSERTED" - if(COMPONENT_NO_CHARGE) - failure_reason = "NO CELL CHARGE" - else - failure_reason = "GENERIC FAILURE" - send_message("ERROR - POWER SYSTEMS FAILURE - [failure_reason]", HEV_COLOR_RED) - deactivate() - return FALSE - announce_battery() - return TRUE - -/obj/item/clothing/suit/space/hev_suit/proc/announce_battery() - var/datum/component/cell/my_cell = GetComponent(/datum/component/cell) - var/current_battery_charge = my_cell.inserted_cell.percent() - - if(current_battery_charge <= 10 && !batt_10_alarm) - send_hev_sound(batt_10_sound) - batt_10_alarm = TRUE - return - else if(current_battery_charge > 10 && batt_10_alarm) - batt_10_alarm = FALSE - - if(current_battery_charge > 10 && current_battery_charge <= 20 && !batt_20_alarm) - send_hev_sound(batt_20_sound) - batt_20_alarm = TRUE - return - else if(current_battery_charge > 20 && batt_20_alarm) - batt_20_alarm = FALSE - - if(current_battery_charge > 20 && current_battery_charge <= 30 && !batt_30_alarm) - send_hev_sound(batt_30_sound) - batt_30_alarm = TRUE - return - else if(current_battery_charge > 30 && batt_30_alarm) - batt_30_alarm = FALSE - - if(current_battery_charge > 30 && current_battery_charge <= 40 && !batt_40_alarm) - send_hev_sound(batt_40_sound) - batt_40_alarm = TRUE - return - else if(current_battery_charge > 40 && batt_40_alarm) - batt_40_alarm = FALSE - - if(current_battery_charge > 40 && current_battery_charge <= 50 && !batt_50_alarm) - send_hev_sound(batt_50_sound) - batt_50_alarm = TRUE - return - else if(current_battery_charge > 50 && batt_50_alarm) - batt_50_alarm = FALSE - -/obj/item/clothing/suit/space/hev_suit/proc/powerarmor() - set_armor(armor_powered) - current_helmet.set_armor(armor_powered) - user_old_bruteloss = current_user.getBruteLoss() - user_old_fireloss = current_user.getFireLoss() - user_old_toxloss = current_user.getToxLoss() - user_old_oxyloss = current_user.getOxyLoss() - RegisterSignal(current_user, COMSIG_MOB_RUN_ARMOR, PROC_REF(process_hit)) - playsound(src, armor_sound, 50) - send_message("...CALIBRATED", HEV_COLOR_GREEN) - send_message("CALIBRATING ATMOSPHERIC CONTAMINANT SENSORS...") - timer_id = addtimer(CALLBACK(src, PROC_REF(atmospherics)), 4 SECONDS, TIMER_STOPPABLE) - -/obj/item/clothing/suit/space/hev_suit/proc/process_hit() - SIGNAL_HANDLER - var/new_bruteloss = current_user.getBruteLoss() - var/new_fireloss = current_user.getFireLoss() - var/new_toxloss = current_user.getToxLoss() - var/new_oxyloss = current_user.getOxyLoss() - var/use_power_this_hit = FALSE - if(current_user.getBruteLoss() > (new_bruteloss + HEV_DAMAGE_POWER_USE_THRESHOLD)) - use_power_this_hit = TRUE - if(current_user.getFireLoss() > (new_fireloss + HEV_DAMAGE_POWER_USE_THRESHOLD)) - use_power_this_hit = TRUE - if(current_user.getToxLoss() > (new_toxloss + HEV_DAMAGE_POWER_USE_THRESHOLD)) - use_power_this_hit = TRUE - user_old_bruteloss = new_bruteloss - user_old_fireloss = new_fireloss - user_old_toxloss = new_toxloss - user_old_oxyloss = new_oxyloss - state_health() - if(use_power_this_hit) - use_hev_power(HEV_POWERUSE_HIT) - -/obj/item/clothing/suit/space/hev_suit/proc/state_health() - var/health_percent = round((current_user.health / current_user.maxHealth) * 100, 1) - - if(health_percent <= 20 && !health_near_death_alarm) - send_hev_sound(near_death_sound, TRUE) - health_near_death_alarm = TRUE - return - else if(health_percent > 20 && health_near_death_alarm) - health_near_death_alarm = FALSE - - if(health_percent > 20 && health_percent <= 30 && !health_critical_alarm) - send_hev_sound(health_critical_sound, TRUE) - health_critical_alarm = TRUE - return - else if(health_percent > 30 && health_critical_alarm) - health_critical_alarm = FALSE - - if(health_percent > 30 && health_percent <= 80 && !health_dropping_alarm) - send_hev_sound(health_dropping_sound, TRUE) - health_dropping_alarm = TRUE - return - else if(health_percent > 80 && health_dropping_alarm) - health_dropping_alarm = FALSE - -/obj/item/clothing/suit/space/hev_suit/proc/atmospherics() - var/obj/item/tank/internals/tank = current_user.get_item_by_slot(ITEM_SLOT_SUITSTORE) - if(!tank || !istype(tank)) - send_message("...FAILURE, NO TANK DETECTED", HEV_COLOR_RED) - send_message("CALIBRATING VITALSIGN MONITORING SYSTEMS...") - timer_id = addtimer(CALLBACK(src, PROC_REF(vitalsigns)), 4 SECONDS, TIMER_STOPPABLE) - return - current_internals_tank = tank - ADD_TRAIT(current_internals_tank, TRAIT_NODROP, "hev_trait") - to_chat(current_user, span_notice("You hear a click as [current_internals_tank] is secured to your suit.")) - playsound(src, atmospherics_sound, 50) - send_message("...CALIBRATED", HEV_COLOR_GREEN) - send_message("CALIBRATING VITALSIGN MONITORING SYSTEMS...") - timer_id = addtimer(CALLBACK(src, PROC_REF(vitalsigns)), 4 SECONDS, TIMER_STOPPABLE) - - -/obj/item/clothing/suit/space/hev_suit/proc/handle_tank() - if(!current_internals_tank) - return - if(use_hev_power(HEV_POWERUSE_AIRTANK)) - current_internals_tank.populate_gas() - -/obj/item/clothing/suit/space/hev_suit/proc/vitalsigns() - RegisterSignal(current_user, COMSIG_MOB_STATCHANGE, PROC_REF(stat_changed)) - playsound(src, vitalsigns_sound, 50) - send_message("...CALIBRATED", HEV_COLOR_GREEN) - send_message("CALIBRATING AUTOMATIC MEDICAL SYSTEMS...") - timer_id = addtimer(CALLBACK(src, PROC_REF(medical_systems)), 3 SECONDS, TIMER_STOPPABLE) - -/obj/item/clothing/suit/space/hev_suit/proc/stat_changed(datum/source, new_stat) - SIGNAL_HANDLER - if(new_stat == DEAD) - playsound(src, 'modular_nova/modules/hev_suit/sound/hev/flatline.ogg', 40) - internal_radio.talk_into(src, "WARNING! USER [uppertext(current_user.real_name)] VITALSIGNS HAVE FLATLINED, CURRENT POSITION: [loc.x], [loc.y], [loc.z]!", radio_channel) - deactivate() - -/obj/item/clothing/suit/space/hev_suit/proc/medical_systems() - RegisterSignal(current_user, COMSIG_CARBON_GAIN_WOUND, PROC_REF(process_wound)) - RegisterSignal(current_user, COMSIG_ATOM_ACID_ACT, PROC_REF(process_acid)) - RegisterSignal(current_user, COMSIG_IN_RANGE_OF_IRRADIATION, PROC_REF(process_radiation)) - START_PROCESSING(SSobj, src) - playsound(src, automedic_sound, 50) - send_message("...CALIBRATED", HEV_COLOR_GREEN) - send_message("CALIBRATING DEFENSIVE WEAPON SELECTION SYSTEMS...") - timer_id = addtimer(CALLBACK(src, PROC_REF(weaponselect)), 3 SECONDS, TIMER_STOPPABLE) - -/obj/item/clothing/suit/space/hev_suit/process(seconds_per_tick) - if(!activated) - return - if(current_user.blood_volume < BLOOD_VOLUME_OKAY) - if(use_hev_power(HEV_POWERUSE_HEAL)) - current_user.blood_volume += blood_replenishment - if(!blood_loss_alarm) - send_hev_sound(blood_loss_sound) - blood_loss_alarm = TRUE - else if(blood_loss_alarm && current_user.blood_volume >= BLOOD_VOLUME_OKAY) - blood_loss_alarm = FALSE - - var/diseased = FALSE - - for(var/thing in current_user.diseases) - var/datum/disease/disease_to_kill = thing - disease_to_kill.cure() - diseased = TRUE - - if(diseased) - send_hev_sound(biohazard_sound) - send_message("DISEASE CURED", HEV_COLOR_BLUE) - - handle_tank() - - if(current_user.getToxLoss() > 30 && !toxins_alarm) - send_hev_sound(blood_toxins_sound) - toxins_alarm = TRUE - else if(toxins_alarm && current_user.getToxLoss() <= 30) - toxins_alarm = FALSE - - if(current_user.all_wounds) - var/datum/wound/wound2fix = current_user.all_wounds[1] - wound2fix.remove_wound() - send_message("WOUND TREATED", HEV_COLOR_BLUE) - - if(world.time <= healing_current_cooldown) - return - - var/new_bruteloss = current_user.getBruteLoss() - var/new_fireloss = current_user.getFireLoss() - var/new_toxloss = current_user.getToxLoss() - var/new_oxyloss = current_user.getOxyLoss() - var/new_stamloss = current_user.getStaminaLoss() - - if(new_stamloss) - if(use_hev_power(HEV_POWERUSE_HEAL)) - current_user.adjustStaminaLoss(-heal_amount) - healing_current_cooldown = world.time + health_static_cooldown * 2 - - if(new_oxyloss) - if(use_hev_power(HEV_POWERUSE_HEAL)) - current_user.adjustOxyLoss(-heal_amount) - healing_current_cooldown = world.time + health_static_cooldown - send_message("ADRENALINE ADMINISTERED", HEV_COLOR_BLUE) - send_hev_sound(morphine_sound) - return - - if(new_bruteloss) - if(use_hev_power(HEV_POWERUSE_HEAL)) - current_user.adjustBruteLoss(-heal_amount) - healing_current_cooldown = world.time + health_static_cooldown - send_message("BRUTE MEDICAL ATTENTION ADMINISTERED", HEV_COLOR_BLUE) - send_hev_sound(wound_sound) - return - - if(new_fireloss) - if(use_hev_power(HEV_POWERUSE_HEAL)) - current_user.adjustFireLoss(-heal_amount) - healing_current_cooldown = world.time + health_static_cooldown - send_message("BURN MEDICAL ATTENTION ADMINISTERED", HEV_COLOR_BLUE) - send_hev_sound(wound_sound) - return - - if(new_toxloss) - if(use_hev_power(HEV_POWERUSE_HEAL)) - current_user.adjustToxLoss(-heal_amount) - healing_current_cooldown = world.time + health_static_cooldown - send_message("TOXIN MEDICAL ATTENTION ADMINISTERED", HEV_COLOR_BLUE) - send_hev_sound(antitoxin_sound) - return - -/obj/item/clothing/suit/space/hev_suit/proc/process_wound(carbon, wound, bodypart) - SIGNAL_HANDLER - - if (!istype(wound, /datum/wound)) - return - - var/datum/wound/new_wound = wound - - var/sound_to_play - - var/datum/wound_pregen_data/pregen_data = new_wound.get_pregen_data() - var/wound_severity = new_wound.severity - - var/is_laceration = pregen_data.wounding_types_valid(list(WOUND_SLASH, WOUND_PIERCE)) - var/is_fracture = pregen_data.wounding_types_valid(list(WOUND_BLUNT)) - - if (is_laceration) - if (wound_severity >= WOUND_SEVERITY_SEVERE) - sound_to_play = major_lacerations_sound - else - sound_to_play = minor_lacerations_sound - else if (is_fracture) - if (wound_severity >= WOUND_SEVERITY_SEVERE) - sound_to_play = major_fracture_sound - else - sound_to_play = minor_fracture_sound - - if (sound_to_play) - send_hev_sound(sound_to_play) - -/obj/item/clothing/suit/space/hev_suit/proc/process_acid() - SIGNAL_HANDLER - if(world.time <= acid_statement_cooldown) - return - acid_statement_cooldown = world.time + acid_static_cooldown - send_hev_sound(chemical_sound) - -/obj/item/clothing/suit/space/hev_suit/proc/process_radiation() - SIGNAL_HANDLER - if(world.time <= rad_statement_cooldown) - return - rad_statement_cooldown = world.time + rads_static_cooldown - send_hev_sound(radiation_sound) - -/obj/item/clothing/suit/space/hev_suit/proc/weaponselect() - ADD_TRAIT(current_user, list(TRAIT_GUNFLIP,TRAIT_GUN_NATURAL), "hev_trait") - playsound(src, weaponselect_sound, 50) - send_message("...CALIBRATED", HEV_COLOR_GREEN) - send_message("CALIBRATING MUNITION LEVEL MONITORING SYSTEMS...") - timer_id = addtimer(CALLBACK(src, PROC_REF(munitions_monitoring)), 4 SECONDS, TIMER_STOPPABLE) - -/obj/item/clothing/suit/space/hev_suit/proc/munitions_monitoring() - //Crickets, not sure what to make this do! - playsound(src, munitions_sound, 50) - send_message("...CALIBRATED", HEV_COLOR_GREEN) - send_message("CALIBRATING COMMUNICATIONS SYSTEMS...") - timer_id = addtimer(CALLBACK(src, PROC_REF(comms_system)), 4 SECONDS, TIMER_STOPPABLE) - -/obj/item/clothing/suit/space/hev_suit/proc/comms_system() - - playsound(src, communications_sound, 50) - send_message("...CALIBRATED", HEV_COLOR_GREEN) - timer_id = addtimer(CALLBACK(src, PROC_REF(finished)), 4 SECONDS, TIMER_STOPPABLE) - -/obj/item/clothing/suit/space/hev_suit/proc/finished() - to_chat(current_user, span_notice("You feel [src] seal around your body, locking it in place!")) - ADD_TRAIT(src, TRAIT_NODROP, "hev_trait") - send_message("ALL SYSTEMS ONLINE, WELCOME [uppertext(current_user.real_name)]", HEV_COLOR_GREEN) - playsound(src, safe_day_sound, 50) - activated = TRUE - activating = FALSE - -/obj/item/clothing/suit/space/hev_suit/proc/deactivate() - if(timer_id) - deltimer(timer_id) - STOP_PROCESSING(SSobj, src) - REMOVE_TRAIT(src, TRAIT_NODROP, "hev_trait") - set_armor(armor_unpowered) - if(current_helmet) - current_helmet.set_armor(armor_unpowered) - REMOVE_TRAIT(current_helmet, TRAIT_NODROP, "hev_trait") - if(current_internals_tank) - REMOVE_TRAIT(current_internals_tank, TRAIT_NODROP, "hev_trait") - if(current_user) - send_message("SYSTEMS DEACTIVATED", HEV_COLOR_RED) - REMOVE_TRAIT(current_user, list(TRAIT_GUNFLIP,TRAIT_GUN_NATURAL), "hev_trait") - UnregisterSignal(current_user, list( - COMSIG_ATOM_ACID_ACT, - COMSIG_CARBON_GAIN_WOUND, - COMSIG_IN_RANGE_OF_IRRADIATION, - COMSIG_MOB_RUN_ARMOR, - COMSIG_MOB_STATCHANGE - )) - activated = FALSE - activating = FALSE - -/obj/machinery/suit_storage_unit/hev - suit_type = /obj/item/clothing/suit/space/hev_suit - helmet_type = /obj/item/clothing/head/helmet/space/hev_suit - mask_type = /obj/item/clothing/mask/gas/alt - storage_type = /obj/item/tank/internals/oxygen - - -/obj/item/clothing/head/helmet/space/hev_suit/pcv - name = "powered combat helmet" - desc = "A deprecated combat helmet developed during the early 21th century in Sol-3, with protections rated level III-A. Contains attachment points for AN/PVS night vision goggles." - icon = 'modular_nova/modules/awaymissions_nova/icons/hecucloth.dmi' - worn_icon = 'modular_nova/modules/awaymissions_nova/icons/hecumob.dmi' - worn_icon_digi = 'modular_nova/modules/awaymissions_nova/icons/hecumob_muzzled.dmi' - icon_state = "hecu_helm" - armor_type = /datum/armor/hev_suit_pcv - flags_inv = HIDEHAIR - obj_flags = NO_MAT_REDEMPTION - supports_variations_flags = NONE - resistance_flags = FIRE_PROOF|ACID_PROOF|FREEZE_PROOF - clothing_flags = SNUG_FIT - clothing_traits = null - flags_cover = HEADCOVERSEYES | PEPPERPROOF - flash_protect = null - visor_flags_inv = null - visor_flags = null - slowdown = 0 - uses_advanced_reskins = TRUE - unique_reskin = list( - "Basic" = list( - RESKIN_ICON_STATE = "hecu_helm", - RESKIN_WORN_ICON_STATE = "hecu_helm" - ), - "Corpsman" = list( - RESKIN_ICON_STATE = "hecu_helm_medic", - RESKIN_WORN_ICON_STATE = "hecu_helm_medic" - ), - "Basic Black" = list( - RESKIN_ICON_STATE = "hecu_helm_black", - RESKIN_WORN_ICON_STATE = "hecu_helm_black" - ), - "Corpsman Black" = list( - RESKIN_ICON_STATE = "hecu_helm_medic_black", - RESKIN_WORN_ICON_STATE = "hecu_helm_medic_black" - ), - ) - -/datum/armor/hev_suit_pcv - melee = 30 - bullet = 30 - laser = 30 - energy = 30 - bomb = 30 - bio = 30 - fire = 20 - acid = 20 - wound = 20 - consume = 10 - -/datum/armor/hev_suit_pcv/powered - melee = 40 - bullet = 40 - laser = 40 - energy = 40 - bomb = 60 - bio = 75 - fire = 50 - acid = 50 - wound = 50 - consume = 40 - -/obj/item/clothing/suit/space/hev_suit/pcv - name = "powered combat vest" - desc = "An electrically charged piece of body armor, the power stiffens the suit's fibers to provide a layer of resilient armor in response to trauma received from kinetic force. It's fitted with a geiger counter, tactical radio, a heads up display and a combat cocktail injector that allows the user to function normally even after serious injury. The concentration of mass in the lower rear side from the onboard computer makes your ass feel heavy." - icon = 'modular_nova/modules/awaymissions_nova/icons/hecucloth.dmi' - worn_icon = 'modular_nova/modules/awaymissions_nova/icons/hecumob.dmi' - worn_icon_digi = 'modular_nova/modules/awaymissions_nova/icons/hecumob_digi.dmi' - icon_state = "hecu_vest" - armor_type = /datum/armor/hev_suit_pcv - flags_inv = null - allowed = list(/obj/item/gun, /obj/item/ammo_box,/obj/item/ammo_casing, /obj/item/melee/baton, /obj/item/melee/energy/sword, /obj/item/restraints/handcuffs, /obj/item/tank/internals) - cell = /obj/item/stock_parts/cell/super - actions_types = list(/datum/action/item_action/hev_toggle, /datum/action/item_action/hev_toggle_notifs) - resistance_flags = FIRE_PROOF|ACID_PROOF|FREEZE_PROOF - clothing_flags = SNUG_FIT - show_hud = FALSE - uses_advanced_reskins = TRUE - unique_reskin = list( - "Basic" = list( - RESKIN_ICON_STATE = "hecu_vest", - RESKIN_WORN_ICON_STATE = "hecu_vest" - ), - "Corpsman" = list( - RESKIN_ICON_STATE = "hecu_vest_medic", - RESKIN_WORN_ICON_STATE = "hecu_vest_medic" - ), - "Basic Black" = list( - RESKIN_ICON_STATE = "hecu_vest_black", - RESKIN_WORN_ICON_STATE = "hecu_vest_black" - ), - "Corpsman Black" = list( - RESKIN_ICON_STATE = "hecu_vest_medic_black", - RESKIN_WORN_ICON_STATE = "hecu_vest_medic_black" - ), - ) - - activation_song = null // removal of song only standard suit will have the song - - logon_sound = 'modular_nova/modules/hev_suit/sound/pcv/01_pcv_logon.ogg' - armor_sound = 'modular_nova/modules/hev_suit/sound/pcv/02_powerarmor_on.ogg' - atmospherics_sound = 'modular_nova/modules/hev_suit/sound/pcv/03_atmospherics_on.ogg' - vitalsigns_sound = 'modular_nova/modules/hev_suit/sound/pcv/04_vitalsigns_on.ogg' - automedic_sound = 'modular_nova/modules/hev_suit/sound/pcv/05_automedic_on.ogg' - weaponselect_sound = 'modular_nova/modules/hev_suit/sound/pcv/06_weaponselect_on.ogg' - munitions_sound = 'modular_nova/modules/hev_suit/sound/pcv/07_munitionview_on.ogg' - communications_sound = 'modular_nova/modules/hev_suit/sound/pcv/08_communications_on.ogg' - safe_day_sound = 'modular_nova/modules/hev_suit/sound/pcv/09_safe_day.ogg' - - batt_50_sound = 'modular_nova/modules/hev_suit/sound/pcv/power_level_is_fifty.ogg' - batt_40_sound = 'modular_nova/modules/hev_suit/sound/pcv/power_level_is_fourty.ogg' - batt_30_sound = 'modular_nova/modules/hev_suit/sound/pcv/power_level_is_thirty.ogg' - batt_20_sound = 'modular_nova/modules/hev_suit/sound/pcv/power_level_is_twenty.ogg' - batt_10_sound = 'modular_nova/modules/hev_suit/sound/pcv/power_level_is_ten.ogg' - - near_death_sound = 'modular_nova/modules/hev_suit/sound/pcv/near_death.ogg' - health_critical_sound = 'modular_nova/modules/hev_suit/sound/pcv/health_critical.ogg' - health_dropping_sound = 'modular_nova/modules/hev_suit/sound/pcv/health_dropping2.ogg' - - blood_loss_sound = 'modular_nova/modules/hev_suit/sound/pcv/blood_loss.ogg' - blood_toxins_sound = 'modular_nova/modules/hev_suit/sound/pcv/blood_toxins.ogg' - biohazard_sound = 'modular_nova/modules/hev_suit/sound/pcv/biohazard_detected.ogg' - chemical_sound = 'modular_nova/modules/hev_suit/sound/pcv/chemical_detected.ogg' - - minor_fracture_sound = 'modular_nova/modules/hev_suit/sound/pcv/minor_fracture.ogg' - major_fracture_sound = 'modular_nova/modules/hev_suit/sound/pcv/major_fracture.ogg' - minor_lacerations_sound = 'modular_nova/modules/hev_suit/sound/pcv/minor_lacerations.ogg' - major_lacerations_sound = 'modular_nova/modules/hev_suit/sound/pcv/major_lacerations.ogg' - - morphine_sound = 'modular_nova/modules/hev_suit/sound/pcv/morphine_shot.ogg' - wound_sound = 'modular_nova/modules/hev_suit/sound/pcv/wound_sterilized.ogg' - antitoxin_sound = 'modular_nova/modules/hev_suit/sound/pcv/antitoxin_shot.ogg' - antidote_sound = 'modular_nova/modules/hev_suit/sound/pcv/antidote_shot.ogg' - - armor_unpowered = /datum/armor/hev_suit_pcv - armor_powered = /datum/armor/hev_suit_pcv/powered - heal_amount = PCV_HEAL_AMOUNT - blood_replenishment = PCV_BLOOD_REPLENISHMENT - health_static_cooldown = PCV_COOLDOWN_HEAL - rads_static_cooldown = PCV_COOLDOWN_RADS - acid_static_cooldown = PCV_COOLDOWN_ACID - suit_name = "PCV MARK II" - -/obj/item/clothing/suit/space/hev_suit/pcv/AltClick(mob/living/user) - reskin_obj(user) - . = ..() - -#undef HEV_COLOR_GREEN -#undef HEV_COLOR_RED -#undef HEV_COLOR_BLUE -#undef HEV_COLOR_ORANGE -#undef HEV_DAMAGE_POWER_USE_THRESHOLD -#undef HEV_POWERUSE_AIRTANK -#undef HEV_POWERUSE_HIT -#undef HEV_POWERUSE_HEAL -#undef HEV_COOLDOWN_HEAL -#undef HEV_COOLDOWN_RADS -#undef HEV_COOLDOWN_ACID -#undef HEV_HEAL_AMOUNT -#undef PCV_HEAL_AMOUNT -#undef HEV_BLOOD_REPLENISHMENT -#undef HEV_NOTIFICATION_TEXT_AND_VOICE -#undef HEV_NOTIFICATION_TEXT -#undef HEV_NOTIFICATION_VOICE -#undef HEV_NOTIFICATION_OFF -#undef HEV_NOTIFICATIONS diff --git a/modular_nova/modules/hev_suit/icons/toggles.dmi b/modular_nova/modules/hev_suit/icons/toggles.dmi deleted file mode 100644 index 6ebfa4750df..00000000000 Binary files a/modular_nova/modules/hev_suit/icons/toggles.dmi and /dev/null differ diff --git a/modular_nova/modules/hev_suit/readme.md b/modular_nova/modules/hev_suit/readme.md deleted file mode 100644 index 8b2441d4a83..00000000000 --- a/modular_nova/modules/hev_suit/readme.md +++ /dev/null @@ -1,13 +0,0 @@ -## Title: HEV Mark IV - -MODULE ID: hev - -### Description: - -Adds a fully functional HEV suit. - -### Credits: -Gandalf2k15 - All code -Sojourn/Eris - Helmet Sprites - Modified by Gandalf2k15 -Crowbar Collective - HEV sounds - Modified by Gandalf2k15 -Hippiestation - HEV sprites - Modified by Gandalf2k15 diff --git a/modular_nova/modules/hev_suit/sound/hev/01_hev_logon.ogg b/modular_nova/modules/hev_suit/sound/hev/01_hev_logon.ogg deleted file mode 100644 index 29811b063c5..00000000000 Binary files a/modular_nova/modules/hev_suit/sound/hev/01_hev_logon.ogg and /dev/null differ diff --git a/modular_nova/modules/hev_suit/sound/hev/02_powerarmor_on.ogg b/modular_nova/modules/hev_suit/sound/hev/02_powerarmor_on.ogg deleted file mode 100644 index ff32e1fe877..00000000000 Binary files a/modular_nova/modules/hev_suit/sound/hev/02_powerarmor_on.ogg and /dev/null differ diff --git a/modular_nova/modules/hev_suit/sound/hev/03_atmospherics_on.ogg b/modular_nova/modules/hev_suit/sound/hev/03_atmospherics_on.ogg deleted file mode 100644 index 2a69c4eaeb1..00000000000 Binary files a/modular_nova/modules/hev_suit/sound/hev/03_atmospherics_on.ogg and /dev/null differ diff --git a/modular_nova/modules/hev_suit/sound/hev/04_vitalsigns_on.ogg b/modular_nova/modules/hev_suit/sound/hev/04_vitalsigns_on.ogg deleted file mode 100644 index c82fdac8833..00000000000 Binary files a/modular_nova/modules/hev_suit/sound/hev/04_vitalsigns_on.ogg and /dev/null differ diff --git a/modular_nova/modules/hev_suit/sound/hev/05_automedic_on.ogg b/modular_nova/modules/hev_suit/sound/hev/05_automedic_on.ogg deleted file mode 100644 index 406dcfbc38b..00000000000 Binary files a/modular_nova/modules/hev_suit/sound/hev/05_automedic_on.ogg and /dev/null differ diff --git a/modular_nova/modules/hev_suit/sound/hev/06_weaponselect_on.ogg b/modular_nova/modules/hev_suit/sound/hev/06_weaponselect_on.ogg deleted file mode 100644 index 812540da7df..00000000000 Binary files a/modular_nova/modules/hev_suit/sound/hev/06_weaponselect_on.ogg and /dev/null differ diff --git a/modular_nova/modules/hev_suit/sound/hev/07_munitionview_on.ogg b/modular_nova/modules/hev_suit/sound/hev/07_munitionview_on.ogg deleted file mode 100644 index 82f24f4ebda..00000000000 Binary files a/modular_nova/modules/hev_suit/sound/hev/07_munitionview_on.ogg and /dev/null differ diff --git a/modular_nova/modules/hev_suit/sound/hev/08_communications_on.ogg b/modular_nova/modules/hev_suit/sound/hev/08_communications_on.ogg deleted file mode 100644 index 6010e86912e..00000000000 Binary files a/modular_nova/modules/hev_suit/sound/hev/08_communications_on.ogg and /dev/null differ diff --git a/modular_nova/modules/hev_suit/sound/hev/09_safe_day.ogg b/modular_nova/modules/hev_suit/sound/hev/09_safe_day.ogg deleted file mode 100644 index 576cc709d14..00000000000 Binary files a/modular_nova/modules/hev_suit/sound/hev/09_safe_day.ogg and /dev/null differ diff --git a/modular_nova/modules/hev_suit/sound/hev/_comma.ogg b/modular_nova/modules/hev_suit/sound/hev/_comma.ogg deleted file mode 100644 index 186761f7f92..00000000000 Binary files a/modular_nova/modules/hev_suit/sound/hev/_comma.ogg and /dev/null differ diff --git a/modular_nova/modules/hev_suit/sound/hev/_period.ogg b/modular_nova/modules/hev_suit/sound/hev/_period.ogg deleted file mode 100644 index 45cb68b06ea..00000000000 Binary files a/modular_nova/modules/hev_suit/sound/hev/_period.ogg and /dev/null differ diff --git a/modular_nova/modules/hev_suit/sound/hev/acquired.ogg b/modular_nova/modules/hev_suit/sound/hev/acquired.ogg deleted file mode 100644 index 6bfe81bb72c..00000000000 Binary files a/modular_nova/modules/hev_suit/sound/hev/acquired.ogg and /dev/null differ diff --git a/modular_nova/modules/hev_suit/sound/hev/activated.ogg b/modular_nova/modules/hev_suit/sound/hev/activated.ogg deleted file mode 100644 index bf8685fd3b5..00000000000 Binary files a/modular_nova/modules/hev_suit/sound/hev/activated.ogg and /dev/null differ diff --git a/modular_nova/modules/hev_suit/sound/hev/ammo_depleted.ogg b/modular_nova/modules/hev_suit/sound/hev/ammo_depleted.ogg deleted file mode 100644 index 7c2e4e9eaf3..00000000000 Binary files a/modular_nova/modules/hev_suit/sound/hev/ammo_depleted.ogg and /dev/null differ diff --git a/modular_nova/modules/hev_suit/sound/hev/ammowarning.ogg b/modular_nova/modules/hev_suit/sound/hev/ammowarning.ogg deleted file mode 100644 index fd362ba5413..00000000000 Binary files a/modular_nova/modules/hev_suit/sound/hev/ammowarning.ogg and /dev/null differ diff --git a/modular_nova/modules/hev_suit/sound/hev/anomalous_materials.ogg b/modular_nova/modules/hev_suit/sound/hev/anomalous_materials.ogg deleted file mode 100644 index faf11d45350..00000000000 Binary files a/modular_nova/modules/hev_suit/sound/hev/anomalous_materials.ogg and /dev/null differ diff --git a/modular_nova/modules/hev_suit/sound/hev/antidote_shot.ogg b/modular_nova/modules/hev_suit/sound/hev/antidote_shot.ogg deleted file mode 100644 index efc6ee6b4a1..00000000000 Binary files a/modular_nova/modules/hev_suit/sound/hev/antidote_shot.ogg and /dev/null differ diff --git a/modular_nova/modules/hev_suit/sound/hev/antitoxin_shot.ogg b/modular_nova/modules/hev_suit/sound/hev/antitoxin_shot.ogg deleted file mode 100644 index 039c85a0d35..00000000000 Binary files a/modular_nova/modules/hev_suit/sound/hev/antitoxin_shot.ogg and /dev/null differ diff --git a/modular_nova/modules/hev_suit/sound/hev/beep.ogg b/modular_nova/modules/hev_suit/sound/hev/beep.ogg deleted file mode 100644 index 7b4071d5c94..00000000000 Binary files a/modular_nova/modules/hev_suit/sound/hev/beep.ogg and /dev/null differ diff --git a/modular_nova/modules/hev_suit/sound/hev/bell.ogg b/modular_nova/modules/hev_suit/sound/hev/bell.ogg deleted file mode 100644 index 75ae310c516..00000000000 Binary files a/modular_nova/modules/hev_suit/sound/hev/bell.ogg and /dev/null differ diff --git a/modular_nova/modules/hev_suit/sound/hev/biohazard_detected.ogg b/modular_nova/modules/hev_suit/sound/hev/biohazard_detected.ogg deleted file mode 100644 index 7a5539ee6f6..00000000000 Binary files a/modular_nova/modules/hev_suit/sound/hev/biohazard_detected.ogg and /dev/null differ diff --git a/modular_nova/modules/hev_suit/sound/hev/blip.ogg b/modular_nova/modules/hev_suit/sound/hev/blip.ogg deleted file mode 100644 index a117521c7c1..00000000000 Binary files a/modular_nova/modules/hev_suit/sound/hev/blip.ogg and /dev/null differ diff --git a/modular_nova/modules/hev_suit/sound/hev/blood_loss.ogg b/modular_nova/modules/hev_suit/sound/hev/blood_loss.ogg deleted file mode 100644 index 3bf73d34e34..00000000000 Binary files a/modular_nova/modules/hev_suit/sound/hev/blood_loss.ogg and /dev/null differ diff --git a/modular_nova/modules/hev_suit/sound/hev/blood_toxins.ogg b/modular_nova/modules/hev_suit/sound/hev/blood_toxins.ogg deleted file mode 100644 index 28e693010f1..00000000000 Binary files a/modular_nova/modules/hev_suit/sound/hev/blood_toxins.ogg and /dev/null differ diff --git a/modular_nova/modules/hev_suit/sound/hev/boop.ogg b/modular_nova/modules/hev_suit/sound/hev/boop.ogg deleted file mode 100644 index 53b595b1a5b..00000000000 Binary files a/modular_nova/modules/hev_suit/sound/hev/boop.ogg and /dev/null differ diff --git a/modular_nova/modules/hev_suit/sound/hev/chemical_detected.ogg b/modular_nova/modules/hev_suit/sound/hev/chemical_detected.ogg deleted file mode 100644 index 0a40c92b1ec..00000000000 Binary files a/modular_nova/modules/hev_suit/sound/hev/chemical_detected.ogg and /dev/null differ diff --git a/modular_nova/modules/hev_suit/sound/hev/eighty.ogg b/modular_nova/modules/hev_suit/sound/hev/eighty.ogg deleted file mode 100644 index 7e6ee34a7c4..00000000000 Binary files a/modular_nova/modules/hev_suit/sound/hev/eighty.ogg and /dev/null differ diff --git a/modular_nova/modules/hev_suit/sound/hev/fifteen.ogg b/modular_nova/modules/hev_suit/sound/hev/fifteen.ogg deleted file mode 100644 index 55a9da00ec0..00000000000 Binary files a/modular_nova/modules/hev_suit/sound/hev/fifteen.ogg and /dev/null differ diff --git a/modular_nova/modules/hev_suit/sound/hev/fifty.ogg b/modular_nova/modules/hev_suit/sound/hev/fifty.ogg deleted file mode 100644 index 34f4204cb73..00000000000 Binary files a/modular_nova/modules/hev_suit/sound/hev/fifty.ogg and /dev/null differ diff --git a/modular_nova/modules/hev_suit/sound/hev/five.ogg b/modular_nova/modules/hev_suit/sound/hev/five.ogg deleted file mode 100644 index 2ce50cae931..00000000000 Binary files a/modular_nova/modules/hev_suit/sound/hev/five.ogg and /dev/null differ diff --git a/modular_nova/modules/hev_suit/sound/hev/flatline.ogg b/modular_nova/modules/hev_suit/sound/hev/flatline.ogg deleted file mode 100644 index 9cf3fe0dd17..00000000000 Binary files a/modular_nova/modules/hev_suit/sound/hev/flatline.ogg and /dev/null differ diff --git a/modular_nova/modules/hev_suit/sound/hev/fourty.ogg b/modular_nova/modules/hev_suit/sound/hev/fourty.ogg deleted file mode 100644 index f95b48b95fc..00000000000 Binary files a/modular_nova/modules/hev_suit/sound/hev/fourty.ogg and /dev/null differ diff --git a/modular_nova/modules/hev_suit/sound/hev/fuzz.ogg b/modular_nova/modules/hev_suit/sound/hev/fuzz.ogg deleted file mode 100644 index 25a33829830..00000000000 Binary files a/modular_nova/modules/hev_suit/sound/hev/fuzz.ogg and /dev/null differ diff --git a/modular_nova/modules/hev_suit/sound/hev/health_critical.ogg b/modular_nova/modules/hev_suit/sound/hev/health_critical.ogg deleted file mode 100644 index 083d2479df8..00000000000 Binary files a/modular_nova/modules/hev_suit/sound/hev/health_critical.ogg and /dev/null differ diff --git a/modular_nova/modules/hev_suit/sound/hev/health_dropping2.ogg b/modular_nova/modules/hev_suit/sound/hev/health_dropping2.ogg deleted file mode 100644 index 823554d7b40..00000000000 Binary files a/modular_nova/modules/hev_suit/sound/hev/health_dropping2.ogg and /dev/null differ diff --git a/modular_nova/modules/hev_suit/sound/hev/hiss.ogg b/modular_nova/modules/hev_suit/sound/hev/hiss.ogg deleted file mode 100644 index e886a7473a4..00000000000 Binary files a/modular_nova/modules/hev_suit/sound/hev/hiss.ogg and /dev/null differ diff --git a/modular_nova/modules/hev_suit/sound/hev/major_fracture.ogg b/modular_nova/modules/hev_suit/sound/hev/major_fracture.ogg deleted file mode 100644 index d708ab71930..00000000000 Binary files a/modular_nova/modules/hev_suit/sound/hev/major_fracture.ogg and /dev/null differ diff --git a/modular_nova/modules/hev_suit/sound/hev/major_lacerations.ogg b/modular_nova/modules/hev_suit/sound/hev/major_lacerations.ogg deleted file mode 100644 index c24c1f51d44..00000000000 Binary files a/modular_nova/modules/hev_suit/sound/hev/major_lacerations.ogg and /dev/null differ diff --git a/modular_nova/modules/hev_suit/sound/hev/minor_fracture.ogg b/modular_nova/modules/hev_suit/sound/hev/minor_fracture.ogg deleted file mode 100644 index 30a973d832e..00000000000 Binary files a/modular_nova/modules/hev_suit/sound/hev/minor_fracture.ogg and /dev/null differ diff --git a/modular_nova/modules/hev_suit/sound/hev/minor_lacerations.ogg b/modular_nova/modules/hev_suit/sound/hev/minor_lacerations.ogg deleted file mode 100644 index d3e61a8c7d4..00000000000 Binary files a/modular_nova/modules/hev_suit/sound/hev/minor_lacerations.ogg and /dev/null differ diff --git a/modular_nova/modules/hev_suit/sound/hev/morphine_shot.ogg b/modular_nova/modules/hev_suit/sound/hev/morphine_shot.ogg deleted file mode 100644 index 74eaeeaa3d7..00000000000 Binary files a/modular_nova/modules/hev_suit/sound/hev/morphine_shot.ogg and /dev/null differ diff --git a/modular_nova/modules/hev_suit/sound/hev/near_death.ogg b/modular_nova/modules/hev_suit/sound/hev/near_death.ogg deleted file mode 100644 index d57088a50ce..00000000000 Binary files a/modular_nova/modules/hev_suit/sound/hev/near_death.ogg and /dev/null differ diff --git a/modular_nova/modules/hev_suit/sound/hev/ninety.ogg b/modular_nova/modules/hev_suit/sound/hev/ninety.ogg deleted file mode 100644 index 52b37d9ae9a..00000000000 Binary files a/modular_nova/modules/hev_suit/sound/hev/ninety.ogg and /dev/null differ diff --git a/modular_nova/modules/hev_suit/sound/hev/onehundred.ogg b/modular_nova/modules/hev_suit/sound/hev/onehundred.ogg deleted file mode 100644 index 3ab37eae580..00000000000 Binary files a/modular_nova/modules/hev_suit/sound/hev/onehundred.ogg and /dev/null differ diff --git a/modular_nova/modules/hev_suit/sound/hev/percent.ogg b/modular_nova/modules/hev_suit/sound/hev/percent.ogg deleted file mode 100644 index 8d4aeacc975..00000000000 Binary files a/modular_nova/modules/hev_suit/sound/hev/percent.ogg and /dev/null differ diff --git a/modular_nova/modules/hev_suit/sound/hev/power_level_is.ogg b/modular_nova/modules/hev_suit/sound/hev/power_level_is.ogg deleted file mode 100644 index 120d2ace75c..00000000000 Binary files a/modular_nova/modules/hev_suit/sound/hev/power_level_is.ogg and /dev/null differ diff --git a/modular_nova/modules/hev_suit/sound/hev/power_level_is_fifty.ogg b/modular_nova/modules/hev_suit/sound/hev/power_level_is_fifty.ogg deleted file mode 100644 index 922b41d6de7..00000000000 Binary files a/modular_nova/modules/hev_suit/sound/hev/power_level_is_fifty.ogg and /dev/null differ diff --git a/modular_nova/modules/hev_suit/sound/hev/power_level_is_fourty.ogg b/modular_nova/modules/hev_suit/sound/hev/power_level_is_fourty.ogg deleted file mode 100644 index 6126f424d6e..00000000000 Binary files a/modular_nova/modules/hev_suit/sound/hev/power_level_is_fourty.ogg and /dev/null differ diff --git a/modular_nova/modules/hev_suit/sound/hev/power_level_is_ten.ogg b/modular_nova/modules/hev_suit/sound/hev/power_level_is_ten.ogg deleted file mode 100644 index 74824f27956..00000000000 Binary files a/modular_nova/modules/hev_suit/sound/hev/power_level_is_ten.ogg and /dev/null differ diff --git a/modular_nova/modules/hev_suit/sound/hev/power_level_is_thirty.ogg b/modular_nova/modules/hev_suit/sound/hev/power_level_is_thirty.ogg deleted file mode 100644 index 7b876b3cd0c..00000000000 Binary files a/modular_nova/modules/hev_suit/sound/hev/power_level_is_thirty.ogg and /dev/null differ diff --git a/modular_nova/modules/hev_suit/sound/hev/power_level_is_twenty.ogg b/modular_nova/modules/hev_suit/sound/hev/power_level_is_twenty.ogg deleted file mode 100644 index d964a0bda2c..00000000000 Binary files a/modular_nova/modules/hev_suit/sound/hev/power_level_is_twenty.ogg and /dev/null differ diff --git a/modular_nova/modules/hev_suit/sound/hev/power_restored.ogg b/modular_nova/modules/hev_suit/sound/hev/power_restored.ogg deleted file mode 100644 index ffd62d8dba7..00000000000 Binary files a/modular_nova/modules/hev_suit/sound/hev/power_restored.ogg and /dev/null differ diff --git a/modular_nova/modules/hev_suit/sound/hev/radiation_detected.ogg b/modular_nova/modules/hev_suit/sound/hev/radiation_detected.ogg deleted file mode 100644 index 27cc448b63a..00000000000 Binary files a/modular_nova/modules/hev_suit/sound/hev/radiation_detected.ogg and /dev/null differ diff --git a/modular_nova/modules/hev_suit/sound/hev/seek_medic.ogg b/modular_nova/modules/hev_suit/sound/hev/seek_medic.ogg deleted file mode 100644 index d8a3fd9cb0c..00000000000 Binary files a/modular_nova/modules/hev_suit/sound/hev/seek_medic.ogg and /dev/null differ diff --git a/modular_nova/modules/hev_suit/sound/hev/seventy.ogg b/modular_nova/modules/hev_suit/sound/hev/seventy.ogg deleted file mode 100644 index 7eba3520899..00000000000 Binary files a/modular_nova/modules/hev_suit/sound/hev/seventy.ogg and /dev/null differ diff --git a/modular_nova/modules/hev_suit/sound/hev/sixty.ogg b/modular_nova/modules/hev_suit/sound/hev/sixty.ogg deleted file mode 100644 index 3009ba2b635..00000000000 Binary files a/modular_nova/modules/hev_suit/sound/hev/sixty.ogg and /dev/null differ diff --git a/modular_nova/modules/hev_suit/sound/hev/ten.ogg b/modular_nova/modules/hev_suit/sound/hev/ten.ogg deleted file mode 100644 index 5ff90ae4701..00000000000 Binary files a/modular_nova/modules/hev_suit/sound/hev/ten.ogg and /dev/null differ diff --git a/modular_nova/modules/hev_suit/sound/hev/thirty.ogg b/modular_nova/modules/hev_suit/sound/hev/thirty.ogg deleted file mode 100644 index 9edf2ca933e..00000000000 Binary files a/modular_nova/modules/hev_suit/sound/hev/thirty.ogg and /dev/null differ diff --git a/modular_nova/modules/hev_suit/sound/hev/twenty.ogg b/modular_nova/modules/hev_suit/sound/hev/twenty.ogg deleted file mode 100644 index 7913d0340d0..00000000000 Binary files a/modular_nova/modules/hev_suit/sound/hev/twenty.ogg and /dev/null differ diff --git a/modular_nova/modules/hev_suit/sound/hev/warning.ogg b/modular_nova/modules/hev_suit/sound/hev/warning.ogg deleted file mode 100644 index b41e12b585e..00000000000 Binary files a/modular_nova/modules/hev_suit/sound/hev/warning.ogg and /dev/null differ diff --git a/modular_nova/modules/hev_suit/sound/hev/wound_sterilized.ogg b/modular_nova/modules/hev_suit/sound/hev/wound_sterilized.ogg deleted file mode 100644 index b548a4a9b22..00000000000 Binary files a/modular_nova/modules/hev_suit/sound/hev/wound_sterilized.ogg and /dev/null differ diff --git a/modular_nova/modules/hev_suit/sound/pcv/01_pcv_logon.ogg b/modular_nova/modules/hev_suit/sound/pcv/01_pcv_logon.ogg deleted file mode 100644 index 0bb54386b25..00000000000 Binary files a/modular_nova/modules/hev_suit/sound/pcv/01_pcv_logon.ogg and /dev/null differ diff --git a/modular_nova/modules/hev_suit/sound/pcv/02_powerarmor_on.ogg b/modular_nova/modules/hev_suit/sound/pcv/02_powerarmor_on.ogg deleted file mode 100644 index 6c320332460..00000000000 Binary files a/modular_nova/modules/hev_suit/sound/pcv/02_powerarmor_on.ogg and /dev/null differ diff --git a/modular_nova/modules/hev_suit/sound/pcv/03_atmospherics_on.ogg b/modular_nova/modules/hev_suit/sound/pcv/03_atmospherics_on.ogg deleted file mode 100644 index 919351f036e..00000000000 Binary files a/modular_nova/modules/hev_suit/sound/pcv/03_atmospherics_on.ogg and /dev/null differ diff --git a/modular_nova/modules/hev_suit/sound/pcv/04_vitalsigns_on.ogg b/modular_nova/modules/hev_suit/sound/pcv/04_vitalsigns_on.ogg deleted file mode 100644 index 3321d799d0a..00000000000 Binary files a/modular_nova/modules/hev_suit/sound/pcv/04_vitalsigns_on.ogg and /dev/null differ diff --git a/modular_nova/modules/hev_suit/sound/pcv/05_automedic_on.ogg b/modular_nova/modules/hev_suit/sound/pcv/05_automedic_on.ogg deleted file mode 100644 index 40f17bf5b4c..00000000000 Binary files a/modular_nova/modules/hev_suit/sound/pcv/05_automedic_on.ogg and /dev/null differ diff --git a/modular_nova/modules/hev_suit/sound/pcv/06_weaponselect_on.ogg b/modular_nova/modules/hev_suit/sound/pcv/06_weaponselect_on.ogg deleted file mode 100644 index 85d32c69216..00000000000 Binary files a/modular_nova/modules/hev_suit/sound/pcv/06_weaponselect_on.ogg and /dev/null differ diff --git a/modular_nova/modules/hev_suit/sound/pcv/07_munitionview_on.ogg b/modular_nova/modules/hev_suit/sound/pcv/07_munitionview_on.ogg deleted file mode 100644 index 91c421f5741..00000000000 Binary files a/modular_nova/modules/hev_suit/sound/pcv/07_munitionview_on.ogg and /dev/null differ diff --git a/modular_nova/modules/hev_suit/sound/pcv/08_communications_on.ogg b/modular_nova/modules/hev_suit/sound/pcv/08_communications_on.ogg deleted file mode 100644 index d74b9a8a815..00000000000 Binary files a/modular_nova/modules/hev_suit/sound/pcv/08_communications_on.ogg and /dev/null differ diff --git a/modular_nova/modules/hev_suit/sound/pcv/09_safe_day.ogg b/modular_nova/modules/hev_suit/sound/pcv/09_safe_day.ogg deleted file mode 100644 index e2d46244745..00000000000 Binary files a/modular_nova/modules/hev_suit/sound/pcv/09_safe_day.ogg and /dev/null differ diff --git a/modular_nova/modules/hev_suit/sound/pcv/_comma.ogg b/modular_nova/modules/hev_suit/sound/pcv/_comma.ogg deleted file mode 100644 index 31a47dca600..00000000000 Binary files a/modular_nova/modules/hev_suit/sound/pcv/_comma.ogg and /dev/null differ diff --git a/modular_nova/modules/hev_suit/sound/pcv/_period.ogg b/modular_nova/modules/hev_suit/sound/pcv/_period.ogg deleted file mode 100644 index 7eeb1eb9bc5..00000000000 Binary files a/modular_nova/modules/hev_suit/sound/pcv/_period.ogg and /dev/null differ diff --git a/modular_nova/modules/hev_suit/sound/pcv/acquired.ogg b/modular_nova/modules/hev_suit/sound/pcv/acquired.ogg deleted file mode 100644 index 3df8f9af068..00000000000 Binary files a/modular_nova/modules/hev_suit/sound/pcv/acquired.ogg and /dev/null differ diff --git a/modular_nova/modules/hev_suit/sound/pcv/activated.ogg b/modular_nova/modules/hev_suit/sound/pcv/activated.ogg deleted file mode 100644 index eb4f455ed3c..00000000000 Binary files a/modular_nova/modules/hev_suit/sound/pcv/activated.ogg and /dev/null differ diff --git a/modular_nova/modules/hev_suit/sound/pcv/ammo_depleted.ogg b/modular_nova/modules/hev_suit/sound/pcv/ammo_depleted.ogg deleted file mode 100644 index 4bc2784b787..00000000000 Binary files a/modular_nova/modules/hev_suit/sound/pcv/ammo_depleted.ogg and /dev/null differ diff --git a/modular_nova/modules/hev_suit/sound/pcv/antidote_shot.ogg b/modular_nova/modules/hev_suit/sound/pcv/antidote_shot.ogg deleted file mode 100644 index 06cad7dc12b..00000000000 Binary files a/modular_nova/modules/hev_suit/sound/pcv/antidote_shot.ogg and /dev/null differ diff --git a/modular_nova/modules/hev_suit/sound/pcv/antitoxin_shot.ogg b/modular_nova/modules/hev_suit/sound/pcv/antitoxin_shot.ogg deleted file mode 100644 index 74a0b280f8b..00000000000 Binary files a/modular_nova/modules/hev_suit/sound/pcv/antitoxin_shot.ogg and /dev/null differ diff --git a/modular_nova/modules/hev_suit/sound/pcv/beep.ogg b/modular_nova/modules/hev_suit/sound/pcv/beep.ogg deleted file mode 100644 index c79cbd9fba5..00000000000 Binary files a/modular_nova/modules/hev_suit/sound/pcv/beep.ogg and /dev/null differ diff --git a/modular_nova/modules/hev_suit/sound/pcv/bell.ogg b/modular_nova/modules/hev_suit/sound/pcv/bell.ogg deleted file mode 100644 index 2fc03654bad..00000000000 Binary files a/modular_nova/modules/hev_suit/sound/pcv/bell.ogg and /dev/null differ diff --git a/modular_nova/modules/hev_suit/sound/pcv/biohazard_detected.ogg b/modular_nova/modules/hev_suit/sound/pcv/biohazard_detected.ogg deleted file mode 100644 index b3f36f5c6e8..00000000000 Binary files a/modular_nova/modules/hev_suit/sound/pcv/biohazard_detected.ogg and /dev/null differ diff --git a/modular_nova/modules/hev_suit/sound/pcv/blip.ogg b/modular_nova/modules/hev_suit/sound/pcv/blip.ogg deleted file mode 100644 index 51734dd8c11..00000000000 Binary files a/modular_nova/modules/hev_suit/sound/pcv/blip.ogg and /dev/null differ diff --git a/modular_nova/modules/hev_suit/sound/pcv/blood_loss.ogg b/modular_nova/modules/hev_suit/sound/pcv/blood_loss.ogg deleted file mode 100644 index 1b9456d27ce..00000000000 Binary files a/modular_nova/modules/hev_suit/sound/pcv/blood_loss.ogg and /dev/null differ diff --git a/modular_nova/modules/hev_suit/sound/pcv/blood_plasma.ogg b/modular_nova/modules/hev_suit/sound/pcv/blood_plasma.ogg deleted file mode 100644 index 58490cb92fe..00000000000 Binary files a/modular_nova/modules/hev_suit/sound/pcv/blood_plasma.ogg and /dev/null differ diff --git a/modular_nova/modules/hev_suit/sound/pcv/blood_toxins.ogg b/modular_nova/modules/hev_suit/sound/pcv/blood_toxins.ogg deleted file mode 100644 index e34257325a0..00000000000 Binary files a/modular_nova/modules/hev_suit/sound/pcv/blood_toxins.ogg and /dev/null differ diff --git a/modular_nova/modules/hev_suit/sound/pcv/boop.ogg b/modular_nova/modules/hev_suit/sound/pcv/boop.ogg deleted file mode 100644 index c6f30365da0..00000000000 Binary files a/modular_nova/modules/hev_suit/sound/pcv/boop.ogg and /dev/null differ diff --git a/modular_nova/modules/hev_suit/sound/pcv/chemical_detected.ogg b/modular_nova/modules/hev_suit/sound/pcv/chemical_detected.ogg deleted file mode 100644 index 1a17842f89d..00000000000 Binary files a/modular_nova/modules/hev_suit/sound/pcv/chemical_detected.ogg and /dev/null differ diff --git a/modular_nova/modules/hev_suit/sound/pcv/eighty.ogg b/modular_nova/modules/hev_suit/sound/pcv/eighty.ogg deleted file mode 100644 index ed52d73f55e..00000000000 Binary files a/modular_nova/modules/hev_suit/sound/pcv/eighty.ogg and /dev/null differ diff --git a/modular_nova/modules/hev_suit/sound/pcv/fifteen.ogg b/modular_nova/modules/hev_suit/sound/pcv/fifteen.ogg deleted file mode 100644 index 83834aad06a..00000000000 Binary files a/modular_nova/modules/hev_suit/sound/pcv/fifteen.ogg and /dev/null differ diff --git a/modular_nova/modules/hev_suit/sound/pcv/fifty.ogg b/modular_nova/modules/hev_suit/sound/pcv/fifty.ogg deleted file mode 100644 index 8444d3f41d8..00000000000 Binary files a/modular_nova/modules/hev_suit/sound/pcv/fifty.ogg and /dev/null differ diff --git a/modular_nova/modules/hev_suit/sound/pcv/five.ogg b/modular_nova/modules/hev_suit/sound/pcv/five.ogg deleted file mode 100644 index 788f0fdd06a..00000000000 Binary files a/modular_nova/modules/hev_suit/sound/pcv/five.ogg and /dev/null differ diff --git a/modular_nova/modules/hev_suit/sound/pcv/flatline.ogg b/modular_nova/modules/hev_suit/sound/pcv/flatline.ogg deleted file mode 100644 index 24a2499c896..00000000000 Binary files a/modular_nova/modules/hev_suit/sound/pcv/flatline.ogg and /dev/null differ diff --git a/modular_nova/modules/hev_suit/sound/pcv/fourty.ogg b/modular_nova/modules/hev_suit/sound/pcv/fourty.ogg deleted file mode 100644 index a9d46b92539..00000000000 Binary files a/modular_nova/modules/hev_suit/sound/pcv/fourty.ogg and /dev/null differ diff --git a/modular_nova/modules/hev_suit/sound/pcv/fuzz.ogg b/modular_nova/modules/hev_suit/sound/pcv/fuzz.ogg deleted file mode 100644 index b198faa594c..00000000000 Binary files a/modular_nova/modules/hev_suit/sound/pcv/fuzz.ogg and /dev/null differ diff --git a/modular_nova/modules/hev_suit/sound/pcv/health_critical.ogg b/modular_nova/modules/hev_suit/sound/pcv/health_critical.ogg deleted file mode 100644 index 06f5d2539fe..00000000000 Binary files a/modular_nova/modules/hev_suit/sound/pcv/health_critical.ogg and /dev/null differ diff --git a/modular_nova/modules/hev_suit/sound/pcv/health_dropping2.ogg b/modular_nova/modules/hev_suit/sound/pcv/health_dropping2.ogg deleted file mode 100644 index 24dbdb3d676..00000000000 Binary files a/modular_nova/modules/hev_suit/sound/pcv/health_dropping2.ogg and /dev/null differ diff --git a/modular_nova/modules/hev_suit/sound/pcv/hiss.ogg b/modular_nova/modules/hev_suit/sound/pcv/hiss.ogg deleted file mode 100644 index e124120802c..00000000000 Binary files a/modular_nova/modules/hev_suit/sound/pcv/hiss.ogg and /dev/null differ diff --git a/modular_nova/modules/hev_suit/sound/pcv/major_fracture.ogg b/modular_nova/modules/hev_suit/sound/pcv/major_fracture.ogg deleted file mode 100644 index e11f28e7ef7..00000000000 Binary files a/modular_nova/modules/hev_suit/sound/pcv/major_fracture.ogg and /dev/null differ diff --git a/modular_nova/modules/hev_suit/sound/pcv/major_lacerations.ogg b/modular_nova/modules/hev_suit/sound/pcv/major_lacerations.ogg deleted file mode 100644 index 2b4b3acb464..00000000000 Binary files a/modular_nova/modules/hev_suit/sound/pcv/major_lacerations.ogg and /dev/null differ diff --git a/modular_nova/modules/hev_suit/sound/pcv/minor_fracture.ogg b/modular_nova/modules/hev_suit/sound/pcv/minor_fracture.ogg deleted file mode 100644 index 22407398b56..00000000000 Binary files a/modular_nova/modules/hev_suit/sound/pcv/minor_fracture.ogg and /dev/null differ diff --git a/modular_nova/modules/hev_suit/sound/pcv/minor_lacerations.ogg b/modular_nova/modules/hev_suit/sound/pcv/minor_lacerations.ogg deleted file mode 100644 index 6196d7293b1..00000000000 Binary files a/modular_nova/modules/hev_suit/sound/pcv/minor_lacerations.ogg and /dev/null differ diff --git a/modular_nova/modules/hev_suit/sound/pcv/morphine_shot.ogg b/modular_nova/modules/hev_suit/sound/pcv/morphine_shot.ogg deleted file mode 100644 index dda168d3c19..00000000000 Binary files a/modular_nova/modules/hev_suit/sound/pcv/morphine_shot.ogg and /dev/null differ diff --git a/modular_nova/modules/hev_suit/sound/pcv/near_death.ogg b/modular_nova/modules/hev_suit/sound/pcv/near_death.ogg deleted file mode 100644 index e1c064af70d..00000000000 Binary files a/modular_nova/modules/hev_suit/sound/pcv/near_death.ogg and /dev/null differ diff --git a/modular_nova/modules/hev_suit/sound/pcv/ninety.ogg b/modular_nova/modules/hev_suit/sound/pcv/ninety.ogg deleted file mode 100644 index 2c44c5c84eb..00000000000 Binary files a/modular_nova/modules/hev_suit/sound/pcv/ninety.ogg and /dev/null differ diff --git a/modular_nova/modules/hev_suit/sound/pcv/onehundred.ogg b/modular_nova/modules/hev_suit/sound/pcv/onehundred.ogg deleted file mode 100644 index 0a8b915746a..00000000000 Binary files a/modular_nova/modules/hev_suit/sound/pcv/onehundred.ogg and /dev/null differ diff --git a/modular_nova/modules/hev_suit/sound/pcv/pain_block.ogg b/modular_nova/modules/hev_suit/sound/pcv/pain_block.ogg deleted file mode 100644 index 7e078eb78d0..00000000000 Binary files a/modular_nova/modules/hev_suit/sound/pcv/pain_block.ogg and /dev/null differ diff --git a/modular_nova/modules/hev_suit/sound/pcv/percent.ogg b/modular_nova/modules/hev_suit/sound/pcv/percent.ogg deleted file mode 100644 index fdc98010acc..00000000000 Binary files a/modular_nova/modules/hev_suit/sound/pcv/percent.ogg and /dev/null differ diff --git a/modular_nova/modules/hev_suit/sound/pcv/power_level_is.ogg b/modular_nova/modules/hev_suit/sound/pcv/power_level_is.ogg deleted file mode 100644 index fcc389596eb..00000000000 Binary files a/modular_nova/modules/hev_suit/sound/pcv/power_level_is.ogg and /dev/null differ diff --git a/modular_nova/modules/hev_suit/sound/pcv/power_level_is_fifty.ogg b/modular_nova/modules/hev_suit/sound/pcv/power_level_is_fifty.ogg deleted file mode 100644 index 365ca460cc8..00000000000 Binary files a/modular_nova/modules/hev_suit/sound/pcv/power_level_is_fifty.ogg and /dev/null differ diff --git a/modular_nova/modules/hev_suit/sound/pcv/power_level_is_fourty.ogg b/modular_nova/modules/hev_suit/sound/pcv/power_level_is_fourty.ogg deleted file mode 100644 index d192f31db55..00000000000 Binary files a/modular_nova/modules/hev_suit/sound/pcv/power_level_is_fourty.ogg and /dev/null differ diff --git a/modular_nova/modules/hev_suit/sound/pcv/power_level_is_ten.ogg b/modular_nova/modules/hev_suit/sound/pcv/power_level_is_ten.ogg deleted file mode 100644 index 74b07e92c0d..00000000000 Binary files a/modular_nova/modules/hev_suit/sound/pcv/power_level_is_ten.ogg and /dev/null differ diff --git a/modular_nova/modules/hev_suit/sound/pcv/power_level_is_thirty.ogg b/modular_nova/modules/hev_suit/sound/pcv/power_level_is_thirty.ogg deleted file mode 100644 index 0ed878ff8af..00000000000 Binary files a/modular_nova/modules/hev_suit/sound/pcv/power_level_is_thirty.ogg and /dev/null differ diff --git a/modular_nova/modules/hev_suit/sound/pcv/power_level_is_twenty.ogg b/modular_nova/modules/hev_suit/sound/pcv/power_level_is_twenty.ogg deleted file mode 100644 index 6281211e095..00000000000 Binary files a/modular_nova/modules/hev_suit/sound/pcv/power_level_is_twenty.ogg and /dev/null differ diff --git a/modular_nova/modules/hev_suit/sound/pcv/power_restored.ogg b/modular_nova/modules/hev_suit/sound/pcv/power_restored.ogg deleted file mode 100644 index e214f05c95f..00000000000 Binary files a/modular_nova/modules/hev_suit/sound/pcv/power_restored.ogg and /dev/null differ diff --git a/modular_nova/modules/hev_suit/sound/pcv/radiation_detected.ogg b/modular_nova/modules/hev_suit/sound/pcv/radiation_detected.ogg deleted file mode 100644 index 686ba1a32f7..00000000000 Binary files a/modular_nova/modules/hev_suit/sound/pcv/radiation_detected.ogg and /dev/null differ diff --git a/modular_nova/modules/hev_suit/sound/pcv/seek_medic.ogg b/modular_nova/modules/hev_suit/sound/pcv/seek_medic.ogg deleted file mode 100644 index 3fee2a9e27b..00000000000 Binary files a/modular_nova/modules/hev_suit/sound/pcv/seek_medic.ogg and /dev/null differ diff --git a/modular_nova/modules/hev_suit/sound/pcv/seventy.ogg b/modular_nova/modules/hev_suit/sound/pcv/seventy.ogg deleted file mode 100644 index 5bb06c79486..00000000000 Binary files a/modular_nova/modules/hev_suit/sound/pcv/seventy.ogg and /dev/null differ diff --git a/modular_nova/modules/hev_suit/sound/pcv/sixty.ogg b/modular_nova/modules/hev_suit/sound/pcv/sixty.ogg deleted file mode 100644 index 0ebd28e3696..00000000000 Binary files a/modular_nova/modules/hev_suit/sound/pcv/sixty.ogg and /dev/null differ diff --git a/modular_nova/modules/hev_suit/sound/pcv/ten.ogg b/modular_nova/modules/hev_suit/sound/pcv/ten.ogg deleted file mode 100644 index f8fba21e022..00000000000 Binary files a/modular_nova/modules/hev_suit/sound/pcv/ten.ogg and /dev/null differ diff --git a/modular_nova/modules/hev_suit/sound/pcv/thirty.ogg b/modular_nova/modules/hev_suit/sound/pcv/thirty.ogg deleted file mode 100644 index f4a6ec6ef33..00000000000 Binary files a/modular_nova/modules/hev_suit/sound/pcv/thirty.ogg and /dev/null differ diff --git a/modular_nova/modules/hev_suit/sound/pcv/torniquette_applied.ogg b/modular_nova/modules/hev_suit/sound/pcv/torniquette_applied.ogg deleted file mode 100644 index 23e2618fcb6..00000000000 Binary files a/modular_nova/modules/hev_suit/sound/pcv/torniquette_applied.ogg and /dev/null differ diff --git a/modular_nova/modules/hev_suit/sound/pcv/twenty.ogg b/modular_nova/modules/hev_suit/sound/pcv/twenty.ogg deleted file mode 100644 index 43a0e51077f..00000000000 Binary files a/modular_nova/modules/hev_suit/sound/pcv/twenty.ogg and /dev/null differ diff --git a/modular_nova/modules/hev_suit/sound/pcv/warning.ogg b/modular_nova/modules/hev_suit/sound/pcv/warning.ogg deleted file mode 100644 index 6469f8a4de0..00000000000 Binary files a/modular_nova/modules/hev_suit/sound/pcv/warning.ogg and /dev/null differ diff --git a/modular_nova/modules/hev_suit/sound/pcv/wound_sterilized.ogg b/modular_nova/modules/hev_suit/sound/pcv/wound_sterilized.ogg deleted file mode 100644 index 520aaee252c..00000000000 Binary files a/modular_nova/modules/hev_suit/sound/pcv/wound_sterilized.ogg and /dev/null differ diff --git a/modular_nova/modules/hotel_rooms/apartment.dmm b/modular_nova/modules/hotel_rooms/apartment.dmm index f5db0583a2c..e597bde9800 100644 --- a/modular_nova/modules/hotel_rooms/apartment.dmm +++ b/modular_nova/modules/hotel_rooms/apartment.dmm @@ -130,6 +130,7 @@ "gQ" = ( /obj/structure/chair/sofa/corp/corner, /obj/machinery/light/warm/directional/east, +/obj/item/toy/plush/nova/breakdancing_bird, /turf/open/floor/carpet, /area/misc/hilbertshotel) "ho" = ( @@ -349,13 +350,9 @@ dir = 8 }, /area/misc/hilbertshotel) -"Ib" = ( -/obj/item/toy/plush/skyrat/breakdancing_bird, -/turf/open/floor/carpet, -/area/misc/hilbertshotel) "Ix" = ( /obj/structure/bed/double, -/obj/item/bedsheet/random/double, +/obj/effect/spawner/random/bedsheet/any/double, /obj/effect/turf_decal/siding/wood{ dir = 4 }, @@ -769,7 +766,7 @@ oZ Gv RP bz -Ib +RP RP xT aS diff --git a/modular_nova/modules/hotel_rooms/beach_condo.dmm b/modular_nova/modules/hotel_rooms/beach_condo.dmm new file mode 100644 index 00000000000..db3f1ccf56b --- /dev/null +++ b/modular_nova/modules/hotel_rooms/beach_condo.dmm @@ -0,0 +1,749 @@ +//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE +"br" = ( +/turf/open/misc/beach/sand, +/area/misc/hilbertshotel) +"bI" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 10 + }, +/turf/open/floor/wood/large, +/area/misc/hilbertshotel) +"bO" = ( +/obj/structure/chair{ + dir = 4 + }, +/obj/effect/turf_decal/siding/wood{ + dir = 9 + }, +/turf/open/floor/wood/parquet, +/area/misc/hilbertshotel) +"bW" = ( +/obj/structure/table/reinforced, +/obj/effect/turf_decal/siding/white{ + dir = 1 + }, +/obj/item/knife/kitchen, +/turf/open/floor/iron/kitchen, +/area/misc/hilbertshotel) +"cj" = ( +/obj/effect/light_emitter/interlink, +/obj/item/toy/plush/carpplushie, +/turf/open/water/beach, +/area/misc/hilbertshotel) +"ct" = ( +/turf/closed/wall/mineral/wood, +/area/misc/hilbertshotel) +"cC" = ( +/obj/structure/dresser, +/obj/effect/turf_decal/siding/wood{ + dir = 9 + }, +/turf/open/floor/wood/large, +/area/misc/hilbertshotel) +"cW" = ( +/turf/open/misc/beach/coast{ + dir = 4 + }, +/area/misc/hilbertshotel) +"dI" = ( +/obj/effect/light_emitter/interlink, +/turf/open/misc/beach/coast{ + dir = 5 + }, +/area/misc/hilbertshotel) +"dS" = ( +/turf/open/floor/wood/large, +/area/misc/hilbertshotel) +"en" = ( +/obj/effect/light_emitter/interlink, +/turf/open/water/beach, +/area/misc/hilbertshotel) +"eH" = ( +/obj/effect/light_emitter/interlink, +/turf/open/misc/beach/coast{ + dir = 1 + }, +/area/misc/hilbertshotel) +"fy" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 8 + }, +/obj/machinery/light/warm/directional/west, +/turf/open/floor/wood/parquet, +/area/misc/hilbertshotel) +"fA" = ( +/turf/closed/wall/mineral/sandstone, +/area/misc/hilbertshotel) +"hj" = ( +/obj/machinery/door/morgue, +/turf/open/floor/wood, +/area/misc/hilbertshotel) +"hX" = ( +/obj/structure/fluff/beach_umbrella, +/obj/effect/light_emitter/interlink, +/turf/open/misc/beach/coast{ + dir = 1 + }, +/area/misc/hilbertshotel) +"ib" = ( +/turf/open/misc/beach/coast/corner{ + dir = 8 + }, +/area/misc/hilbertshotel) +"iQ" = ( +/obj/effect/light_emitter/interlink, +/turf/open/misc/beach/coast{ + dir = 9 + }, +/area/misc/hilbertshotel) +"jO" = ( +/obj/effect/turf_decal/siding{ + dir = 4 + }, +/obj/machinery/door/morgue, +/turf/open/indestructible/bathroom, +/area/misc/hilbertshotel) +"jU" = ( +/obj/machinery/door/airlock/wood, +/turf/open/floor/wood, +/area/misc/hilbertshotel) +"kh" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 4 + }, +/turf/open/floor/wood/parquet, +/area/misc/hilbertshotel) +"kW" = ( +/obj/structure/closet/crate/bin, +/obj/effect/turf_decal/siding/wood{ + dir = 10 + }, +/obj/machinery/light_switch/directional/west, +/turf/open/floor/wood/parquet, +/area/misc/hilbertshotel) +"mH" = ( +/obj/machinery/jukebox{ + req_access = null + }, +/turf/open/misc/beach/sand, +/area/misc/hilbertshotel) +"na" = ( +/obj/effect/turf_decal/siding/wood, +/turf/open/floor/carpet/lone, +/area/misc/hilbertshotel) +"nb" = ( +/obj/item/kirbyplants/random, +/obj/effect/turf_decal/siding/wood{ + dir = 10 + }, +/turf/open/floor/wood, +/area/misc/hilbertshotel) +"ny" = ( +/obj/effect/turf_decal/siding/wood/corner{ + dir = 1 + }, +/turf/open/floor/wood/large, +/area/misc/hilbertshotel) +"oM" = ( +/obj/structure/bed/double/pod, +/obj/effect/turf_decal/siding/wood{ + dir = 1 + }, +/obj/item/bedsheet/dorms_double{ + dir = 8 + }, +/turf/open/floor/wood/large, +/area/misc/hilbertshotel) +"oX" = ( +/obj/effect/turf_decal/siding/wood/corner, +/turf/open/floor/wood/parquet, +/area/misc/hilbertshotel) +"ph" = ( +/obj/effect/light_emitter/interlink, +/turf/open/misc/beach/sand, +/area/misc/hilbertshotel) +"qh" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 8 + }, +/turf/open/floor/wood/parquet, +/area/misc/hilbertshotel) +"ra" = ( +/turf/closed/indestructible/rock, +/area/misc/hilbertshotel) +"rm" = ( +/turf/open/floor/iron/stairs/old{ + dir = 1 + }, +/area/misc/hilbertshotel) +"rV" = ( +/obj/structure/closet/cabinet, +/obj/effect/turf_decal/siding/wood/end{ + dir = 8 + }, +/turf/open/floor/wood/large, +/area/misc/hilbertshotel) +"tR" = ( +/obj/machinery/shower/directional/east, +/obj/structure/drain/big, +/obj/item/soap/deluxe, +/obj/structure/curtain, +/turf/open/indestructible/bathroom, +/area/misc/hilbertshotel) +"wa" = ( +/obj/structure/chair{ + dir = 4 + }, +/obj/effect/turf_decal/siding/wood{ + dir = 8 + }, +/turf/open/floor/wood/parquet, +/area/misc/hilbertshotel) +"wo" = ( +/obj/structure/closet/secure_closet/freezer/kitchen/all_access, +/obj/effect/spawner/random/food_or_drink/three_course_meal, +/obj/effect/spawner/random/food_or_drink/three_course_meal, +/obj/effect/spawner/random/food_or_drink/three_course_meal, +/obj/effect/spawner/random/food_or_drink/three_course_meal, +/obj/effect/turf_decal/siding/wood{ + dir = 6 + }, +/turf/open/floor/wood/parquet, +/area/misc/hilbertshotel) +"wL" = ( +/obj/item/kirbyplants/random, +/obj/effect/turf_decal/siding/wood{ + dir = 6 + }, +/turf/open/floor/wood, +/area/misc/hilbertshotel) +"yc" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 9 + }, +/obj/structure/sign/painting/large/library{ + dir = 1 + }, +/turf/open/floor/wood, +/area/misc/hilbertshotel) +"yH" = ( +/turf/closed/indestructible/hoteldoor{ + icon_state = "door_closed"; + icon = 'icons/obj/doors/puzzledoor/default.dmi' + }, +/area/misc/hilbertshotel) +"Bo" = ( +/obj/structure/table/reinforced, +/obj/machinery/microwave{ + pixel_x = -2; + pixel_y = 6 + }, +/turf/open/floor/iron/kitchen, +/area/misc/hilbertshotel) +"Bs" = ( +/obj/effect/turf_decal/siding/wood, +/turf/open/floor/wood, +/area/misc/hilbertshotel) +"CM" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 9 + }, +/obj/structure/bed/dogbed, +/obj/item/toy/plush/shark, +/turf/open/floor/wood/large, +/area/misc/hilbertshotel) +"Dg" = ( +/obj/structure/toilet{ + dir = 4 + }, +/obj/structure/window/spawner/directional/north, +/turf/open/indestructible/bathroom, +/area/misc/hilbertshotel) +"EI" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 1 + }, +/obj/machinery/light/warm/directional/north, +/turf/open/floor/wood, +/area/misc/hilbertshotel) +"FJ" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 5 + }, +/obj/item/kirbyplants/random, +/turf/open/floor/wood/parquet, +/area/misc/hilbertshotel) +"FN" = ( +/obj/machinery/door/airlock/sandstone{ + name = "Beach Cabin" + }, +/obj/effect/turf_decal/sand, +/turf/open/floor/wood, +/area/misc/hilbertshotel) +"Gj" = ( +/obj/item/toy/beach_ball, +/obj/effect/light_emitter/interlink, +/turf/open/water/beach, +/area/misc/hilbertshotel) +"Gm" = ( +/obj/structure/chair/sofa/middle{ + dir = 1 + }, +/obj/effect/turf_decal/sand, +/turf/open/misc/beach/sand, +/area/misc/hilbertshotel) +"GB" = ( +/obj/structure/chair{ + dir = 8 + }, +/obj/effect/turf_decal/siding/wood/corner{ + dir = 4 + }, +/turf/open/floor/wood/parquet, +/area/misc/hilbertshotel) +"GD" = ( +/obj/effect/turf_decal/siding/white{ + dir = 9 + }, +/obj/machinery/light/floor{ + alpha = 0; + invisibility = 100; + light_range = 10; + nightshift_light_power = 10 + }, +/turf/open/floor/iron/kitchen, +/area/misc/hilbertshotel) +"HH" = ( +/turf/open/floor/carpet/cyan, +/area/misc/hilbertshotel) +"HK" = ( +/obj/structure/table/wood, +/obj/item/reagent_containers/cup/rag, +/turf/open/floor/wood/parquet, +/area/misc/hilbertshotel) +"Ib" = ( +/turf/open/misc/beach/coast{ + dir = 1 + }, +/area/misc/hilbertshotel) +"Ig" = ( +/obj/effect/turf_decal/siding/wood, +/turf/open/floor/wood/large, +/area/misc/hilbertshotel) +"IM" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 5 + }, +/obj/item/flashlight/lamp/green{ + pixel_x = 5; + pixel_y = 14 + }, +/obj/structure/table/wood, +/turf/open/floor/wood/large, +/area/misc/hilbertshotel) +"Jm" = ( +/obj/structure/table/wood, +/obj/effect/turf_decal/siding/wood{ + dir = 1 + }, +/obj/item/pizzabox/margherita{ + pixel_y = 11 + }, +/obj/item/storage/cans/sixbeer, +/turf/open/floor/wood/parquet, +/area/misc/hilbertshotel) +"KQ" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 1 + }, +/turf/open/floor/wood, +/area/misc/hilbertshotel) +"Lg" = ( +/obj/effect/turf_decal/siding/wood, +/turf/open/floor/wood/parquet, +/area/misc/hilbertshotel) +"Lp" = ( +/obj/effect/light_emitter/interlink, +/turf/open/misc/beach/coast/corner{ + dir = 8 + }, +/area/misc/hilbertshotel) +"Lv" = ( +/obj/structure/sink/directional/north, +/obj/structure/mirror/directional/south, +/turf/open/indestructible/bathroom, +/area/misc/hilbertshotel) +"LF" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 5 + }, +/obj/machinery/light_switch/directional/north, +/turf/open/floor/wood, +/area/misc/hilbertshotel) +"MB" = ( +/obj/effect/turf_decal/siding/white{ + dir = 8 + }, +/turf/open/floor/iron/kitchen, +/area/misc/hilbertshotel) +"ML" = ( +/obj/effect/turf_decal/siding/wood/end{ + dir = 4 + }, +/obj/machinery/light/floor, +/obj/machinery/light_switch/directional/south, +/turf/open/floor/wood/large, +/area/misc/hilbertshotel) +"MP" = ( +/obj/structure/chair{ + dir = 8 + }, +/obj/effect/turf_decal/siding/wood{ + dir = 5 + }, +/turf/open/floor/wood/parquet, +/area/misc/hilbertshotel) +"Pe" = ( +/obj/structure/chair/sofa/left{ + dir = 1 + }, +/obj/effect/turf_decal/sand, +/turf/open/misc/beach/sand, +/area/misc/hilbertshotel) +"PJ" = ( +/turf/open/misc/beach/coast/corner{ + dir = 4 + }, +/area/misc/hilbertshotel) +"Qg" = ( +/obj/structure/chair/sofa/right{ + dir = 1 + }, +/obj/effect/turf_decal/sand, +/turf/open/misc/beach/sand, +/area/misc/hilbertshotel) +"Qz" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 6 + }, +/turf/open/floor/wood/parquet, +/area/misc/hilbertshotel) +"QG" = ( +/obj/structure/curtain/cloth/fancy, +/turf/closed/indestructible/fakeglass, +/area/misc/hilbertshotel) +"Rr" = ( +/obj/machinery/light/floor{ + alpha = 0; + invisibility = 100; + light_range = 10; + nightshift_light_power = 10 + }, +/turf/open/indestructible/bathroom, +/area/misc/hilbertshotel) +"RL" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 4 + }, +/obj/structure/chair/comfy/teal{ + dir = 8 + }, +/obj/machinery/light_switch/directional/east, +/turf/open/floor/wood/large, +/area/misc/hilbertshotel) +"SS" = ( +/obj/effect/light_emitter/interlink, +/turf/open/misc/beach/coast/corner{ + dir = 4 + }, +/area/misc/hilbertshotel) +"Yg" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 6 + }, +/obj/structure/closet/cabinet, +/obj/item/hairbrush{ + pixel_x = 2; + pixel_y = 3 + }, +/obj/item/serviette_pack, +/turf/open/floor/wood/large, +/area/misc/hilbertshotel) +"ZE" = ( +/obj/effect/turf_decal/siding/wood, +/obj/machinery/light/warm/dim/directional/south, +/turf/open/floor/wood/large, +/area/misc/hilbertshotel) + +(1,1,1) = {" +ra +ra +ra +ra +ra +ra +ra +ra +ra +ra +ra +ra +ra +ra +ra +"} +(2,1,1) = {" +ra +en +en +en +en +dI +Lp +br +fA +fA +fA +fA +fA +fA +ra +"} +(3,1,1) = {" +ra +en +cj +en +en +iQ +SS +br +fA +rV +ct +tR +Dg +fA +ra +"} +(4,1,1) = {" +ra +en +en +en +en +eH +br +rm +FN +ML +ct +Rr +Lv +fA +ra +"} +(5,1,1) = {" +ra +en +en +en +iQ +SS +br +fA +fA +hj +ct +jO +ct +fA +ra +"} +(6,1,1) = {" +ra +en +en +en +eH +br +fA +fA +cC +bI +ct +yc +nb +fA +ra +"} +(7,1,1) = {" +ra +en +en +iQ +PJ +br +QG +CM +ny +ZE +ct +EI +na +yH +ra +"} +(8,1,1) = {" +ra +en +en +hX +HH +HH +QG +oM +dS +Ig +jU +KQ +Bs +fA +ra +"} +(9,1,1) = {" +ra +en +en +dI +cW +ib +QG +IM +RL +Yg +ct +LF +wL +fA +ra +"} +(10,1,1) = {" +ra +en +en +en +en +Ib +fA +fA +ct +ct +ct +hj +ct +fA +ra +"} +(11,1,1) = {" +ra +en +en +en +en +Ib +Pe +QG +bO +wa +fy +qh +kW +fA +ra +"} +(12,1,1) = {" +ra +en +en +en +en +eH +Gm +QG +Jm +HK +oX +kh +Qz +fA +ra +"} +(13,1,1) = {" +ra +en +Gj +en +en +eH +Qg +QG +MP +GB +Lg +GD +MB +fA +ra +"} +(14,1,1) = {" +ra +en +en +en +iQ +SS +mH +fA +fA +FJ +wo +bW +Bo +fA +ra +"} +(15,1,1) = {" +ra +en +en +iQ +SS +ph +ph +br +fA +fA +fA +fA +fA +fA +ra +"} +(16,1,1) = {" +ra +ra +ra +ra +ra +ra +ra +ra +ra +ra +ra +ra +ra +ra +ra +"} diff --git a/modular_nova/modules/ices_events/code/events/ev_roleplay_check.dm b/modular_nova/modules/ices_events/code/events/ev_roleplay_check.dm index 0def7040812..867b304da74 100644 --- a/modular_nova/modules/ices_events/code/events/ev_roleplay_check.dm +++ b/modular_nova/modules/ices_events/code/events/ev_roleplay_check.dm @@ -1,13 +1,18 @@ /** * Checks if a player meets certain conditions to exclude them from event selection. + * Returns FALSE if the player is considered ineligible for the event */ /proc/engaged_role_play_check(mob/living/carbon/human/player, station = TRUE, dorms = TRUE) var/turf/player_turf = get_turf(player) var/area/player_area = get_area(player_turf) - if(station && !is_station_level(player_turf.z)) - return TRUE + if(station) + if(isnull(player_turf)) + if(!is_station_level(player.z)) + return FALSE + else if(!is_station_level(player_turf.z)) + return FALSE if(dorms && istype(player_area, /area/station/commons/dorms)) - return TRUE + return FALSE - return FALSE + return TRUE diff --git a/modular_nova/modules/icspawning/code/observer.dm b/modular_nova/modules/icspawning/code/observer.dm index d8d5ef0065b..7866f2f05ae 100644 --- a/modular_nova/modules/icspawning/code/observer.dm +++ b/modular_nova/modules/icspawning/code/observer.dm @@ -36,6 +36,12 @@ if(!give_return) return + var/addquirks + if(character_option == "Selected Character") + addquirks = tgui_input_list(src, "Include quirks?", "Quirky", list("Quirks & Loadout", "Quirks Only", "Loadout Only", "Neither")) + if(!addquirks) + return + var/turf/current_turf = get_turf(user) var/mob/living/carbon/human/spawned_player = new(user) @@ -44,10 +50,20 @@ spawned_player.name = user.name spawned_player.real_name = user.real_name - var/mob/living/carbon/human/H = spawned_player - user.client?.prefs.safe_transfer_prefs_to(H) - H.dna.update_dna_identity() - + var/mob/living/carbon/human/player_as_human = spawned_player + user.client?.prefs.safe_transfer_prefs_to(player_as_human) + if(addquirks == "Quirks & Loadout" || addquirks == "Loadout Only") + if(dresscode == "Naked") + player_as_human.equip_outfit_and_loadout(new /datum/outfit(), user.client?.prefs) + else + player_as_human.equip_outfit_and_loadout(dresscode, user.client?.prefs) + else if(dresscode != "Naked") + spawned_player.equipOutfit(dresscode) + if(addquirks == "Quirks & Loadout" || addquirks == "Quirks Only") + SSquirks.AssignQuirks(player_as_human, user.client) + player_as_human.dna.update_dna_identity() + else if(dresscode != "Naked") + spawned_player.equipOutfit(dresscode) QDEL_IN(user, 1) if (teleport_option == "Bluespace") @@ -62,9 +78,6 @@ var/datum/action/cooldown/spell/return_back/return_spell = new(spawned_player) return_spell.Grant(spawned_player) - if(dresscode != "Naked") - spawned_player.equipOutfit(dresscode) - switch(teleport_option) if("Bluespace") spawned_player.forceMove(current_turf) @@ -91,8 +104,9 @@ var/list/paths = subtypesof(/datum/outfit) - typesof(/datum/outfit/job) - typesof(/datum/outfit/plasmaman) for(var/path in paths) - var/datum/outfit/O = path //not much to initalize here but whatever - outfits[initial(O.name)] = path + // Get the datum from the path so we can grab its name. + var/datum/outfit/path_as_outfit = path + outfits[initial(path_as_outfit.name)] = path var/dresscode = tgui_input_list(src, "Select outfit", "Robust quick dress shop", baseoutfits + sort_list(outfits)) @@ -128,8 +142,8 @@ if (dresscode == "Custom") var/list/custom_names = list() - for(var/datum/outfit/D in GLOB.custom_outfits) - custom_names[D.name] = D + for(var/datum/outfit/req_outfit in GLOB.custom_outfits) + custom_names[req_outfit.name] = req_outfit var/selected_name = input("Select outfit", "Robust quick dress shop") as null|anything in sort_list(custom_names) dresscode = custom_names[selected_name] if(isnull(dresscode)) diff --git a/modular_nova/modules/icspawning/code/standard.dm b/modular_nova/modules/icspawning/code/standard.dm index bd30194d2bf..25484e609dc 100644 --- a/modular_nova/modules/icspawning/code/standard.dm +++ b/modular_nova/modules/icspawning/code/standard.dm @@ -36,6 +36,15 @@ shoes = /obj/item/clothing/shoes/combat/debug id = /obj/item/card/id/advanced/debug/bst box = /obj/item/storage/box/debugtools + backpack_contents = list( + /obj/item/melee/energy/axe = 1, + /obj/item/storage/part_replacer/bluespace/tier4/bst = 1, + /obj/item/gun/magic/wand/resurrection/debug = 1, + /obj/item/gun/magic/wand/death/debug = 1, + /obj/item/debug/human_spawner = 1, + /obj/item/debug/omnitool = 1, + /obj/item/storage/box/stabilized = 1, + ) /datum/outfit/admin/bst //Debug objs plus modsuit name = "Bluespace Tech (MODsuit)" @@ -44,3 +53,242 @@ shoes = /obj/item/clothing/shoes/combat/debug id = /obj/item/card/id/advanced/debug/bst box = /obj/item/storage/box/debugtools + backpack_contents = list( + /obj/item/melee/energy/axe = 1, + /obj/item/storage/part_replacer/bluespace/tier4/bst = 1, + /obj/item/gun/magic/wand/resurrection/debug = 1, + /obj/item/gun/magic/wand/death/debug = 1, + /obj/item/debug/human_spawner = 1, + /obj/item/debug/omnitool = 1, + /obj/item/storage/box/stabilized = 1, + ) + +/obj/item/storage/part_replacer/bluespace/tier4/bst + name = "\improper Bluespace Tech RPED" + desc = "A specialized bluespace RPED for technicians that can manufacture stock parts on the fly. Alt-Right-Click to manufacture parts, change settings, or clear its internal storage." + /// Whether or not auto-clear is enabled + var/auto_clear = TRUE + /// List of valid types for pick_stock_part(). + var/static/list/valid_stock_part_types = list( + /obj/item/circuitboard/machine, + /obj/item/stock_parts, + /obj/item/reagent_containers/cup/beaker, + ) + +/obj/item/storage/part_replacer/bluespace/tier4/bst/Initialize(mapload) + . = ..() + atom_storage.max_slots = 1000 + atom_storage.max_total_storage = 20000 + +/// An extension to the default RPED part replacement action - if you don't have the requisite parts in the RPED already, it will spawn T4 versions to use. +/obj/item/storage/part_replacer/bluespace/tier4/bst/part_replace_action(obj/attacked_object, mob/living/user) + // We start with setting up a list of the current contents of the RPED when using auto-clear. This is used to detect new items after upgrades are applied & remove them. + var/list/old_contents = list() + var/list/inv_grab = atom_storage.return_inv(FALSE) + if(auto_clear) + old_contents = atom_storage.return_inv(FALSE) + // Once old_contents has been initialized, if needed, we check if the target object is a machine frame. + var/obj/structure/frame/attacked_frame = attacked_object + if(istype(attacked_frame, /obj/structure/frame/machine)) + var/obj/structure/frame/machine/machine_frame = attacked_frame + var/obj/item/circuitboard/machine/circuit = machine_frame.circuit + // Prioritize using the circuit's components list first, if present, to maintain consistency. + if(istype(circuit)) + spawn_parts_for_components(user, circuit.req_components) + else if(machine_frame.req_components) + spawn_parts_for_components(user, machine_frame.req_components) + else + // It's not a machine frame, so let's check if it's a regular machine. + if(ismachinery(attacked_object) && !istype(attacked_object, /obj/machinery/computer)) + var/obj/machinery/attacked_machinery = attacked_object + var/obj/item/circuitboard/machine/circuit = attacked_machinery.circuit + // If it is, we need to use the circuit's components; there's no good way to get required components off of an already-built machine. + if(istype(circuit)) + spawn_parts_for_components(user, circuit.req_components) + . = ..() + // If auto-clear is in use, + if(auto_clear) + inv_grab.Cut() + inv_grab = atom_storage.return_inv(FALSE) + for(var/obj/item/stored_item in inv_grab) + if(!(stored_item in old_contents)) + qdel(stored_item) + +/// A bespoke proc for spawning in parts +/obj/item/storage/part_replacer/bluespace/tier4/bst/proc/spawn_parts_for_components(mob/living/user, list/required_components) + // Since req_components in machineboards can list item types *OR* /datum/stock_part subtypes this gets a little complicated. + var/list/subtypes = list() + for(var/req_component in required_components) + // Start off noting how many the recipe calls for, a counter for how many matching parts have been found, and generating a list of subtypes for use in later checks. + var/parts_amount_required = required_components[req_component] + var/found_matching = 0 + subtypes = typesof(req_component) + + if(!parts_amount_required) + continue + + /// Then, check if the requested component is an object subtype - this means it's probably either materials (e.g, cables) or non-stock_part subtypes like beakers. + if(ispath(req_component, /obj/item)) + // If it's a stack, it needs special treatment. + if(ispath(req_component, /obj/item/stack)) + // Stacks generate the matching count based on how many matching stacks are in the RPED's inventory with sufficient count. + // To find stacks inside the RPED, we search its contents for anything that's a subtype of /obj/item/stack. + for(var/obj/stored_item in contents) + var/obj/item/stack/stored_item_as_stack = stored_item + if(istype(stored_item_as_stack)) + // If a stack item is found, we check if it's in the typesof list for the current requested component, and if so, mark its count. + if(stored_item_as_stack.type in subtypes) + found_matching += stored_item_as_stack.amount + // If there's enough, we can return early. + if(found_matching >= parts_amount_required) + break + // If there's not enough left, spawn enough of the appropriate type that there will be. Stacks' Initialialize accepts an amount for the newly-spawned stack to have, and will auto-split as needed. + if(found_matching < parts_amount_required) + atom_storage.attempt_insert(new req_component(src, parts_amount_required - found_matching), user, TRUE) + continue + else + // It's not a stack, which means now we have to count how many matching items are present. + for(var/obj/stored_item in contents) + if(stored_item.type in subtypes) + found_matching += 1 + // If there's enough, we can break - no need to spawn extras. + if(found_matching >= parts_amount_required) + break + // If there's still not enough, we're going to have to spawn enough in manually. + if(found_matching < parts_amount_required) + for(var/i in 1 to parts_amount_required - found_matching) + atom_storage.attempt_insert(new req_component(src), user, TRUE) + continue + + /// If it's not an obj, then it's a subtype of /datum/stock_part - or *should be*, anyway. + else if(ispath(req_component, /datum/stock_part)) + var/datum/stock_part/part_type = new req_component() + var/base_type = part_type.physical_object_base_type + // Specific machines sometimes call for specific tiers of part; give them precisely what they ask for, just in case. + if(part_type.tier > 1) + base_type = part_type.physical_object_type + // Search to see if we have enough of that exact item, and if not, we'll spawn more. + for(var/obj/stored_item in contents) + if(stored_item.type == base_type) + found_matching += 1 + // If there's enough, we can return early. + if(found_matching >= parts_amount_required) + break + // If there's still not enough, we're going to have to spawn enough in manually. + if(found_matching < parts_amount_required) + for(var/i in 1 to parts_amount_required - found_matching) + atom_storage.attempt_insert(new base_type(src), user, TRUE) + continue + else + // For everything else, just make sure we have enough valid items of the stock part's subtypes. + subtypes = typesof(base_type) + for(var/obj/stored_item in contents) + if(stored_item.type in subtypes) + found_matching += 1 + // If there's enough, we can return early. + if(found_matching >= parts_amount_required) + break + + // If there's still not enough, we're going to have to spawn enough in manually. + if(found_matching < parts_amount_required) + // Reset the subtypes list so we can pick the highest tier of part available. + subtypes = typesof(req_component) + var/highest_tier = 0 + + // Search those subtypes for the highest. This SHOULD only ever go up to 4, but that's on the assumption upstream doesn't change it. + for(var/subtype_path in subtypes) + var/datum/stock_part/sub_part = new subtype_path() + if(sub_part.tier > highest_tier) + highest_tier = sub_part.tier + base_type = sub_part.physical_object_type + + // Once the best component has been found, fill in enough remaining. + for(var/i in 1 to parts_amount_required - found_matching) + atom_storage.attempt_insert(new base_type(src), user, TRUE) + continue + + // If it's not a /datum/stock_part subtype either, something has gone wrong and devs should probably be alerted. + if(found_matching < parts_amount_required) + to_chat(user, span_notice("Something went wrong manufacturing [req_component]. Alert the devs, and let them know what machine it was!")) + +/// BSTs' special Bluespace RPED can manufacture parts on Alt-RMB, either cables, glass, machine boards, or stock parts. +/obj/item/storage/part_replacer/bluespace/tier4/bst/alt_click_secondary(mob/user) + // Ask the user what they want to make, or if they want to clear the storage. + var/spawn_selection = tgui_input_list(user, "Pick a part, or clear storage", "RPED Manufacture", list("Clear All Items", "Toggle Auto-Clear", "Cables", "Glass", "Spare T4s", "Machine Board", "Stock Part", "Beaker")) + // If they didn't cancel out of the list selection, we do things. Clear-all removes all items, auto-clear destroys left-overs after upgrades, and everything else is pretty self-explanatory. + // Machine boards and stock parts use a recursive subtype selector. + if(isnull(spawn_selection)) + return + else if(spawn_selection == "Clear All Items") + var/list/inv_grab = atom_storage.return_inv(FALSE) + for(var/obj/item/stored_item in inv_grab) + qdel(stored_item) + else if(spawn_selection == "Toggle Auto-Clear") + auto_clear = !auto_clear + to_chat(user, span_notice("The RPED will now [(auto_clear ? "destroy" : "keep")] items left-over after upgrades.")) + else if(spawn_selection == "Cables") + atom_storage.attempt_insert(new /obj/item/stack/cable_coil(src), user, TRUE) + else if(spawn_selection == "Glass") + atom_storage.attempt_insert(new /obj/item/stack/sheet/glass/fifty(src), user, TRUE) + else if(spawn_selection == "Spare T4s") + for(var/i in 1 to 10) + atom_storage.attempt_insert(new /obj/item/stock_parts/capacitor/quadratic(src), user, TRUE) + atom_storage.attempt_insert(new /obj/item/stock_parts/scanning_module/triphasic(src), user, TRUE) + atom_storage.attempt_insert(new /obj/item/stock_parts/servo/femto(src), user, TRUE) + atom_storage.attempt_insert(new /obj/item/stock_parts/micro_laser/quadultra(src), user, TRUE) + atom_storage.attempt_insert(new /obj/item/stock_parts/matter_bin/bluespace(src), user, TRUE) + atom_storage.attempt_insert(new /obj/item/stock_parts/cell/bluespace(src), user, TRUE) + else + var/subtype + if(spawn_selection == "Machine Board") + subtype = /obj/item/circuitboard/machine + else if(spawn_selection == "Stock Part") + subtype = /obj/item/stock_parts + else if(spawn_selection == "Beaker") + subtype = /obj/item/reagent_containers/cup/beaker + if(subtype) + pick_stock_part(user, FALSE, subtype) + +/// A bespoke proc for picking a subtype to spawn in a relatively user-friendly way. +/obj/item/storage/part_replacer/bluespace/tier4/bst/proc/pick_stock_part(mob/user, recurse, subtype) + // Sanity check: make sure it's actually an item, and not an atom, machine, or whatever else someone might try to feed it down the line. + if(!is_path_in_list(subtype, valid_stock_part_types)) + return + // Stores a list of pretty type names : actual paths. + var/list/items_temp = list() + // Grab the initial list of paths, NOT INCLUDING this specific path. + var/list/paths = subtypesof(subtype) + + // Simplistic check to only list top-level subtypes. + var/list/top_level_subtypes_only = list() + for(var/datum/subtype_path as anything in paths) + if(initial(subtype_path.parent_type) != subtype) + continue + top_level_subtypes_only += subtype_path + paths = top_level_subtypes_only + + // With all sub-subtypes removed, initialize the list of valid, spawnable items & their pretty names - and if this is a recursion, include the original subtype. + if(recurse) + paths += subtype + for(var/path in paths) + var/obj/path_as_obj = path + // Generates a pretty list of item names & paths, including notes for those with subtypes. When browsing subtypes, the parent won't have the (# more) note added. + if(length(subtypesof(path))) + if(path == subtype) + items_temp["[initial(path_as_obj.name)]: [path]"] = path + else + items_temp["[initial(path_as_obj.name)] (+[length(subtypesof(path))] more): [path]"] = path + else + items_temp["[initial(path_as_obj.name)]: [path]"] = path + + // Finally, once the listed is generated, ask the user what they want to spawn. + var/target_item = tgui_input_list(user, "Select Subtype", "RPED Manufacture", sort_list(items_temp)) + if(target_item) + // If they select something, and the name:path binding is valid, then either spawn it, OR, if it has subtypes, and isn't the parent type, recurse to let them pick a subtype. + if(items_temp[target_item]) + var/the_item = items_temp[target_item] + if(length(subtypesof(the_item)) && the_item != subtype) + pick_stock_part(user, TRUE, the_item) + else + for(var/i in 1 to 25) + atom_storage.attempt_insert(new the_item(src), user, TRUE) diff --git a/modular_nova/modules/implants/code/augments_arms.dm b/modular_nova/modules/implants/code/augments_arms.dm index 26f17d90c34..92a319cdf16 100644 --- a/modular_nova/modules/implants/code/augments_arms.dm +++ b/modular_nova/modules/implants/code/augments_arms.dm @@ -219,6 +219,86 @@ obj_flags |= EMAGGED return TRUE +// Razorwire implant, long reach whip made of extremely thin wire, ouch! + +/obj/item/melee/razorwire + name = "implanted razorwire" + desc = "A long length of monomolecular filament, built into the back of your hand. \ + Impossibly thin and flawlessly sharp, it should slice through organic materials with no trouble; \ + even from a few steps away. However, results against anything more durable will heavily vary." + icon = 'modular_nova/modules/implants/icons/implants.dmi' + icon_state = "razorwire_weapon" + righthand_file = 'modular_nova/modules/implants/icons/inhands/lefthand.dmi' + lefthand_file = 'modular_nova/modules/implants/icons/inhands/righthand.dmi' + inhand_icon_state = "razorwire" + w_class = WEIGHT_CLASS_BULKY + sharpness = SHARP_EDGED + force = 18 + demolition_mod = 0.25 // This thing sucks at destroying stuff + wound_bonus = 10 + bare_wound_bonus = 20 + weak_against_armour = TRUE + reach = 2 + hitsound = 'sound/weapons/whip.ogg' + attack_verb_continuous = list("slashes", "whips", "lashes", "lacerates") + attack_verb_simple = list("slash", "whip", "lash", "lacerate") + +/obj/item/organ/internal/cyberimp/arm/razorwire + name = "razorwire spool implant" + desc = "An integrated spool of razorwire, capable of being used as a weapon when whipped at your foes. \ + Built into the back of your hand, try your best to not get it tangled." + items_to_create = list(/obj/item/melee/razorwire) + icon = 'modular_nova/modules/implants/icons/implants.dmi' + icon_state = "razorwire" + +// Shell launch system, an arm mounted single-shot shotgun/.980 grenade launcher that comes out of your arm + +/obj/item/gun/ballistic/shotgun/shell_launcher + name = "shell launch system" + desc = "A mounted cannon seated comfortably in a forearm compartment. This humanitarian device is capable in normal \ + mode of firing essentially any shotgun shell, and can be wrenched to a .980 Tydhouer grenade mode, \ + shells famously seen in the 'Kiboko' launcher." + icon = 'modular_nova/modules/implants/icons/implants.dmi' + icon_state = "shell_cannon_weapon" + righthand_file = 'modular_nova/modules/implants/icons/inhands/lefthand.dmi' + lefthand_file = 'modular_nova/modules/implants/icons/inhands/righthand.dmi' + inhand_icon_state = "shell_cannon" + worn_icon = 'icons/mob/clothing/belt.dmi' + worn_icon_state = "gun" + w_class = WEIGHT_CLASS_BULKY + weapon_weight = WEAPON_LIGHT + force = 10 + accepted_magazine_type = /obj/item/ammo_box/magazine/internal/shot/shell_cannon + obj_flags = UNIQUE_RENAME + rack_sound = 'modular_nova/modules/modular_weapons/sounds/shotgun_rack.ogg' + semi_auto = TRUE + bolt_type = BOLT_TYPE_NO_BOLT + can_be_sawn_off = FALSE + pb_knockback = 2 + can_modify_ammo = TRUE + initial_caliber = CALIBER_SHOTGUN + alternative_caliber = CALIBER_980TYDHOUER + recoil = 4 + inhand_x_dimension = 32 + inhand_y_dimension = 32 + +/obj/item/gun/ballistic/shotgun/shell_launcher/give_gun_safeties() + return + +/obj/item/ammo_box/magazine/internal/shot/shell_cannon + name = "shell launch system internal magazine" + ammo_type = /obj/item/ammo_casing/shotgun/beanbag + caliber = CALIBER_SHOTGUN + max_ammo = 1 + multiload = FALSE + +/obj/item/organ/internal/cyberimp/arm/shell_launcher + name = "shell launch system implant" + desc = "A mounted, single-shot housing for a shell launch cannon; capable of firing either twelve gauge shotgun shells, or .980 Tydhouer grenades." + items_to_create = list(/obj/item/gun/ballistic/shotgun/shell_launcher) + icon = 'modular_nova/modules/implants/icons/implants.dmi' + icon_state = "shell_cannon" + #undef KNIFE_HITSOUND #undef KNIFE_USESOUND #undef KNIFE_ATTACK_VERB_CONTINUOUS diff --git a/modular_nova/modules/implants/code/augments_chest.dm b/modular_nova/modules/implants/code/augments_chest.dm index e82ba992675..7dd0395bd6c 100644 --- a/modular_nova/modules/implants/code/augments_chest.dm +++ b/modular_nova/modules/implants/code/augments_chest.dm @@ -1,6 +1,5 @@ // for readability's sake, define here to match the healthscan() proc's use of it // if someone updates that upstream, fix that here too, wouldja? -#define SCANNER_VERBOSE 1 /obj/item/organ/internal/cyberimp/chest/scanner name = "internal health analyzer" @@ -26,5 +25,3 @@ chemscan(owner, owner) else healthscan(owner, owner, SCANNER_VERBOSE, TRUE) - -#undef SCANNER_VERBOSE diff --git a/modular_nova/modules/implants/code/augments_head.dm b/modular_nova/modules/implants/code/augments_head.dm new file mode 100644 index 00000000000..82dcbb7db74 --- /dev/null +++ b/modular_nova/modules/implants/code/augments_head.dm @@ -0,0 +1,227 @@ +#define HACKERMAN_DECK_TEMPERATURE_INCREASE 450 + +#define HACKING_FORENSICS_SUCCESS_MESSAGE "Damages reported by the internal diagnostics system suggest a digital attack by a wireless hacking implant." + +// An implant that injects you with twitch on demand, acting like a bootleg sandevistan + +/obj/item/organ/internal/cyberimp/sensory_enhancer + name = "\improper Qani-Laaca sensory computer" + desc = "An experimental implant replacing the spine of organics. When activated, it can give a temporary boost to mental processing speed, \ + Which many users percieve as a slowing of time and quickening of their ability to act. Due to its nature, it is incompatible with \ + system that heavily influence the user's nervous system, like the central nervous system rebooter. \ + As a bonus effect, you are immune to the burst of heart damage that comes at the end of twitch usage, as the computer is able to regulate \ + your heart's rhythm back to normal after its use." + icon = 'modular_nova/modules/implants/icons/implants.dmi' + icon_state = "sandy" + slot = ORGAN_SLOT_BRAIN_ANTISTUN + zone = BODY_ZONE_HEAD + implant_overlay = null + implant_color = null + actions_types = list(/datum/action/cooldown/sensory_enhancer) + w_class = WEIGHT_CLASS_SMALL + /// The bodypart overlay datum we should apply to whatever mob we are put into + var/datum/bodypart_overlay/simple/sensory_enhancer/bodypart_overlay + +/obj/item/organ/internal/cyberimp/sensory_enhancer/on_mob_insert(mob/living/carbon/organ_owner, special, movement_flags) + . = ..() + ADD_TRAIT(organ_owner, TRAIT_TWITCH_ADAPTED, TRAIT_NARCOTICS) + +/obj/item/organ/internal/cyberimp/sensory_enhancer/on_mob_remove(mob/living/carbon/organ_owner, special) + . = ..() + REMOVE_TRAIT(organ_owner, TRAIT_TWITCH_ADAPTED, TRAIT_NARCOTICS) + +/obj/item/organ/internal/cyberimp/sensory_enhancer/on_bodypart_insert(obj/item/bodypart/limb, movement_flags) + if(isteshari(owner)) + return ..() + bodypart_overlay = new() + limb.add_bodypart_overlay(bodypart_overlay) + owner.update_body_parts() + return ..() + +/obj/item/organ/internal/cyberimp/sensory_enhancer/on_bodypart_remove(obj/item/bodypart/limb, movement_flags) + if(isteshari(owner)) + return ..() + limb.remove_bodypart_overlay(bodypart_overlay) + QDEL_NULL(bodypart_overlay) + owner.update_body_parts() + return ..() + +/datum/bodypart_overlay/simple/sensory_enhancer + icon = 'modular_nova/modules/implants/icons/implants_onmob.dmi' + icon_state = "sandy" + layers = EXTERNAL_ADJACENT + +/datum/action/cooldown/sensory_enhancer + name = "Activate Qani-Laaca System" + desc = "Activates your Qani-Laaca computer and grants you its powers. LMB: Short, safer activation. RMB: Longer, more powerful, more dangerous activation." + button_icon = 'modular_nova/modules/implants/icons/implants.dmi' + button_icon_state = "sandy" + check_flags = AB_CHECK_CONSCIOUS + cooldown_time = 5 MINUTES + text_cooldown = TRUE + /// Keeps track of how much twitch we inject into people on activation + var/injection_amount = 10 + +/datum/action/cooldown/sensory_enhancer/Trigger(trigger_flags, atom/target) + . = ..() + + injection_amount = 10 + + var/right_clicked = FALSE + + if(trigger_flags & TRIGGER_SECONDARY_ACTION) + right_clicked = TRUE + injection_amount = 20 + + owner.log_message("clicked their qani-laaca action button with [right_clicked ? "Right" : "Left"]-Click", LOG_ATTACK) + +/datum/action/cooldown/sensory_enhancer/Activate(atom/target) + . = ..() + + var/mob/living/carbon/human/human_owner = owner + + owner.log_message("triggered their qani-laaca implant in [(injection_amount > 10) ? "overdose" : "normal"] mode", LOG_ATTACK) + + human_owner.reagents.add_reagent(/datum/reagent/drug/twitch, injection_amount) + + owner.visible_message(span_danger("[owner.name] jolts suddenly as two small glass vials are fired from ports in the implant on their spine, shattering as they land."), \ + span_userdanger("You jolt suddenly as your Qani-Laaca system ejects two empty glass vials rearward, shattering as they land.")) + playsound(human_owner, 'sound/items/hypospray.ogg', 50, TRUE) + + var/obj/item/telegraph_vial = new /obj/item/qani_laaca_telegraph(get_turf(owner)) + var/turf/turf_we_throw_at = get_step(owner, REVERSE_DIR(owner.dir)) + telegraph_vial.throw_at(turf_we_throw_at, 1, 3, gentle = FALSE, quickstart = TRUE) + + // Safety net in case the injection amount doesn't get reset. Apparently it happened to someone in a round. + injection_amount = initial(injection_amount) + +/obj/item/qani_laaca_telegraph + name = "spent Qani-Laaca cartridge" + desc = "A small glass vial, usually kept in a large stack inside a Qani-Laaca implant, that is broken open and ejected \ + each time the implant is used. If you're looking at one long enough to think about it this long, you either have fast eyes \ + or were lucky enough to catch one before it broke." + icon = 'icons/obj/medical/drugs.dmi' + icon_state = "blastoff_ampoule_empty" + w_class = WEIGHT_CLASS_SMALL + +/obj/item/qani_laaca_telegraph/Initialize(mapload) + . = ..() + AddElement(/datum/element/shatters_when_thrown, /obj/effect/decal/cleanable/glass, 1, SFX_SHATTER) + transform = transform.Scale(0.75, 0.75) + +// Hackerman deck, lets you emag or doorjack things (NO CYBORGS) within a short range of yourself + +/obj/item/organ/internal/cyberimp/hackerman_deck + name = "\improper Binyat wireless hacking system" + desc = "A rare-to-find neural chip that allows its user to interface with nearby machinery \ + and effect it in (usually) beneficial ways. Due to the rudimentary connection, fine manipulation \ + isn't possible, however the deck will drop a payload into the target's systems that will attempt \ + hacking for you. Due to their complexity, the system does not appear to work on cyborgs." + icon = 'modular_nova/modules/implants/icons/implants.dmi' + icon_state = "hackerman" + slot = ORGAN_SLOT_BRAIN_ANTISTUN + zone = BODY_ZONE_HEAD + implant_overlay = null + implant_color = null + actions_types = list(/datum/action/cooldown/spell/pointed/hackerman_deck) + w_class = WEIGHT_CLASS_SMALL + /// The bodypart overlay datum we should apply to whatever mob we are put into + var/datum/bodypart_overlay/simple/hackerman/bodypart_overlay + +/obj/item/organ/internal/cyberimp/hackerman_deck/on_bodypart_insert(obj/item/bodypart/limb, movement_flags) + if(isteshari(owner)) + return ..() + bodypart_overlay = new() + limb.add_bodypart_overlay(bodypart_overlay) + owner.update_body_parts() + return ..() + +/obj/item/organ/internal/cyberimp/hackerman_deck/on_bodypart_remove(obj/item/bodypart/limb, movement_flags) + if(isteshari(owner)) + return ..() + limb.remove_bodypart_overlay(bodypart_overlay) + QDEL_NULL(bodypart_overlay) + owner.update_body_parts() + return ..() + +/datum/bodypart_overlay/simple/hackerman + icon = 'modular_nova/modules/implants/icons/implants_onmob.dmi' + icon_state = "hackerman" + layers = EXTERNAL_ADJACENT + +/datum/action/cooldown/spell/pointed/hackerman_deck + name = "Activate Ranged Hacking" + desc = "Click on any machine, excepting cyborgs, to hack them. Has a short range, only two tiles." + active_msg = "You warm up your Binyat deck, there's an idle buzzing at the back of your mind as it awaits a target." + deactive_msg = "Your hacking deck makes an almost disappointed sounding buzz at the back of your mind as it powers down." + button_icon = 'modular_nova/modules/implants/icons/implants.dmi' + button_icon_state = "hackerman" + spell_requirements = SPELL_REQUIRES_MIND + cast_range = INFINITY // The range code doesn't work here, so we use our own, don't worry about it + aim_assist = FALSE + spell_max_level = 1 // God I hate actions + cooldown_time = 5 MINUTES + sparks_amt = 2 + ranged_mousepointer = 'icons/effects/mouse_pointers/override_machine_target.dmi' + /// What we don't work on, will always not work on mobs because I know what you are + var/static/list/emag_blacklist = list( + /obj/machinery/shieldgen, + /obj/machinery/computer/communications, + /obj/machinery/computer/arcade, + /obj/machinery/computer/holodeck, + /obj/machinery/computer/emergency_shuttle, + /obj/machinery/recycler, + /obj/item/organ/internal/cyberimp/arm/armblade, + ) + /// How far away we can hack things + var/hack_range = 2 + +/datum/action/cooldown/spell/pointed/hackerman_deck/is_valid_target(atom/cast_on) + . = ..() + + if(ismob(cast_on) || is_type_in_list(cast_on, emag_blacklist)) + owner.balloon_alert(owner, "security too strong") + return FALSE + + if(get_dist(owner, cast_on) > hack_range) + owner.balloon_alert(owner, "too far away") + return FALSE + + return TRUE + +/datum/action/cooldown/spell/pointed/hackerman_deck/cast(atom/cast_on) + . = ..() + + unset_click_ability(owner) + + playsound(owner, 'sound/effects/light_flicker.ogg', 50, TRUE) + var/beam = owner.Beam(cast_on, icon_state = "light_beam", time = 5 SECONDS) + + owner.visible_message(span_bolddanger("[owner.name] makes an unusual buzzing sound as the air between [owner.p_them()] and [cast_on] crackles."), \ + span_bolddanger("The air between you and [cast_on] begins to crackle audibly as the Binyat gets to work.")) + + if(!do_after(owner, 5 SECONDS, cast_on, IGNORE_SLOWDOWNS)) + qdel(beam) + StartCooldown(1 SECONDS) // Resets the spell to working after a second, just so its not spammed + return + + if(!cast_on.emag_act(owner)) + owner.balloon_alert(owner, "can't hack this!") + StartCooldown(1 SECONDS) // Resets the spell to working after a second, just so its not spammed + return + + owner.log_message("hacked [key_name(cast_on)] from [get_dist(owner, cast_on)] tiles away using a wireless hacking implant", LOG_ATTACK) + cast_on.forensics?.add_hacking_implant_trace() + cast_on.add_hiddenprint(owner) + + playsound(cast_on, 'sound/machines/terminal_processing.ogg', 15, TRUE) + + var/mob/living/carbon/human/human_owner = owner + + human_owner.adjust_bodytemperature(HACKERMAN_DECK_TEMPERATURE_INCREASE) + +/// Adds an item to the list of fibers for this forensics datum that tells on the fact someone used a hacking implant here +/datum/forensics/proc/add_hacking_implant_trace() + LAZYSET(fibers, HACKING_FORENSICS_SUCCESS_MESSAGE, HACKING_FORENSICS_SUCCESS_MESSAGE) + +#undef HACKERMAN_DECK_TEMPERATURE_INCREASE diff --git a/modular_nova/modules/implants/code/medical_designs.dm b/modular_nova/modules/implants/code/medical_designs.dm index 5ebcfa2e63e..75aa935e468 100644 --- a/modular_nova/modules/implants/code/medical_designs.dm +++ b/modular_nova/modules/implants/code/medical_designs.dm @@ -8,13 +8,95 @@ /datum/material/glass = HALF_SHEET_MATERIAL_AMOUNT, /datum/material/silver = HALF_SHEET_MATERIAL_AMOUNT, ) - construction_time = 200 + construction_time = 20 SECONDS build_path = /obj/item/organ/internal/cyberimp/arm/armblade category = list( RND_CATEGORY_CYBERNETICS + RND_SUBCATEGORY_CYBERNETICS_IMPLANTS_COMBAT, ) departmental_flags = DEPARTMENT_BITFLAG_SECURITY +/datum/design/cyberimp_razorwire + name = "Razorwire Spool Implant" + desc = "A long length of cutting wire so impossibly thin that it causes grievous wounds in anything you slash with it. \ + It's long enough that you'd probably be able to hit someone with it from a little further away than normal." + id = "combat_implant_razorwire" + build_type = MECHFAB + materials = list( + /datum/material/iron = SHEET_MATERIAL_AMOUNT * 2, + /datum/material/glass = HALF_SHEET_MATERIAL_AMOUNT, + /datum/material/titanium = SHEET_MATERIAL_AMOUNT * 3, + /datum/material/gold = HALF_SHEET_MATERIAL_AMOUNT, + /datum/material/silver = HALF_SHEET_MATERIAL_AMOUNT, + ) + construction_time = 30 SECONDS + build_path = /obj/item/organ/internal/cyberimp/arm/razorwire + category = list( + RND_CATEGORY_CYBERNETICS + RND_SUBCATEGORY_CYBERNETICS_IMPLANTS_COMBAT + ) + departmental_flags = DEPARTMENT_BITFLAG_SECURITY + +/datum/design/cyberimp_shell_launcher + name = "Shell Launch System Implant" + desc = "A complex housing for implanting a shell launch system into an arm. Holds a single shot barrel that can hold either twelve gauge or .980 Tydhouer shells." + id = "combat_implant_shell_launcher" + build_type = MECHFAB + materials = list( + /datum/material/iron = SHEET_MATERIAL_AMOUNT * 2, + /datum/material/glass = HALF_SHEET_MATERIAL_AMOUNT, + /datum/material/titanium = SHEET_MATERIAL_AMOUNT * 3, + /datum/material/gold = HALF_SHEET_MATERIAL_AMOUNT, + /datum/material/silver = HALF_SHEET_MATERIAL_AMOUNT, + ) + construction_time = 30 SECONDS + build_path = /obj/item/organ/internal/cyberimp/arm/shell_launcher + category = list( + RND_CATEGORY_CYBERNETICS + RND_SUBCATEGORY_CYBERNETICS_IMPLANTS_COMBAT + ) + departmental_flags = DEPARTMENT_BITFLAG_SECURITY + +/datum/design/cyberimp_sandy + name = "Qani-Laaca Sensory Computer Implant" + desc = "An experimental implant replacing the spine of organics. When activated, it can give a temporary boost to mental processing speed, \ + Which many users percieve as a slowing of time and quickening of their ability to act. Due to its nature, it is incompatible with \ + system that heavily influence the user's nervous system, like the central nervous system rebooter. \ + As a bonus effect, you are immune to the burst of heart damage that comes at the end of twitch usage, as the computer is able to regulate \ + your heart's rhythm back to normal after its use." + id = "combat_implant_sandy" + build_type = MECHFAB + materials = list( + /datum/material/iron = SHEET_MATERIAL_AMOUNT * 5, + /datum/material/glass = SHEET_MATERIAL_AMOUNT * 2, + /datum/material/silver = SHEET_MATERIAL_AMOUNT * 3, + /datum/material/gold = SHEET_MATERIAL_AMOUNT * 2, + ) + construction_time = 30 SECONDS + build_path = /obj/item/organ/internal/cyberimp/sensory_enhancer + category = list( + RND_CATEGORY_CYBERNETICS + RND_SUBCATEGORY_CYBERNETICS_IMPLANTS_COMBAT + ) + departmental_flags = DEPARTMENT_BITFLAG_SECURITY + +/datum/design/cyberimp_hackerman + name = "Binyat Wireless Hacking System Implant" + desc = "A rare-to-find neural chip that allows its user to interface with nearby machinery \ + and effect it in (usually) beneficial ways. Due to the rudimentary connection, fine manipulation \ + isn't possible, however the deck will drop a payload into the target's systems that will attempt \ + hacking for you. Due to their complexity, the system does not appear to work on cyborgs." + id = "combat_implant_hackerman" + build_type = MECHFAB + materials = list( + /datum/material/iron = SHEET_MATERIAL_AMOUNT * 5, + /datum/material/glass = SHEET_MATERIAL_AMOUNT * 2, + /datum/material/silver = SHEET_MATERIAL_AMOUNT * 3, + /datum/material/gold = SHEET_MATERIAL_AMOUNT * 2, + ) + construction_time = 30 SECONDS + build_path = /obj/item/organ/internal/cyberimp/hackerman_deck + category = list( + RND_CATEGORY_CYBERNETICS + RND_SUBCATEGORY_CYBERNETICS_IMPLANTS_COMBAT + ) + departmental_flags = DEPARTMENT_BITFLAG_SECURITY + /datum/design/cyberimp_claws name = "Razor Claws Implant" desc = "Long, sharp, double-edged razors installed within the fingers, functional for cutting. All kinds of cutting." @@ -42,7 +124,7 @@ /datum/material/glass = HALF_SHEET_MATERIAL_AMOUNT, /datum/material/silver = HALF_SHEET_MATERIAL_AMOUNT, ) - construction_time = 200 + construction_time = 20 SECONDS build_path = /obj/item/organ/internal/cyberimp/arm/hacker category = list( RND_CATEGORY_CYBERNETICS + RND_SUBCATEGORY_CYBERNETICS_IMPLANTS_UTILITY, @@ -59,7 +141,7 @@ /datum/material/glass = HALF_SHEET_MATERIAL_AMOUNT, /datum/material/silver = HALF_SHEET_MATERIAL_AMOUNT, ) - construction_time = 200 + construction_time = 20 SECONDS build_path = /obj/item/organ/internal/cyberimp/arm/flash category = list( RND_CATEGORY_CYBERNETICS + RND_SUBCATEGORY_CYBERNETICS_IMPLANTS_COMBAT, @@ -77,7 +159,7 @@ /datum/material/silver = HALF_SHEET_MATERIAL_AMOUNT, /datum/material/plastic = SHEET_MATERIAL_AMOUNT, ) - construction_time = 200 + construction_time = 20 SECONDS build_path = /obj/item/organ/internal/cyberimp/arm/botany category = list( RND_CATEGORY_CYBERNETICS + RND_SUBCATEGORY_CYBERNETICS_IMPLANTS_TOOLS, @@ -89,7 +171,7 @@ desc = "These cybernetic eyes will give you Night Vision. Big, mean, and green." id = "ci-nv" build_type = PROTOLATHE | MECHFAB - construction_time = 60 + construction_time = 6 SECONDS materials = list( /datum/material/iron = SMALL_MATERIAL_AMOUNT * 6, /datum/material/glass = SMALL_MATERIAL_AMOUNT * 6, @@ -108,7 +190,7 @@ desc = "This implant will automatically attempt to jolt you awake from unconsciousness, with a short cooldown between jolts. Conflicts with the CNS Rebooter." id = "ci-antisleep" build_type = PROTOLATHE | MECHFAB - construction_time = 60 + construction_time = 6 SECONDS materials = list( /datum/material/iron = SMALL_MATERIAL_AMOUNT * 6, /datum/material/glass = SMALL_MATERIAL_AMOUNT * 6, @@ -126,7 +208,7 @@ desc = "This implant interfaces with a host's body, sending detailed readouts of the vessel's condition on command via the mind." id = "ci-scanner" build_type = MECHFAB | PROTOLATHE - construction_time = 40 + construction_time = 4 SECONDS materials = list( /datum/material/iron = SHEET_MATERIAL_AMOUNT * 3, /datum/material/glass = SHEET_MATERIAL_AMOUNT * 3, @@ -149,7 +231,7 @@ /datum/material/glass = HALF_SHEET_MATERIAL_AMOUNT, /datum/material/silver = HALF_SHEET_MATERIAL_AMOUNT, ) - construction_time = 200 + construction_time = 20 SECONDS build_path = /obj/item/organ/internal/cyberimp/arm/janitor category = list( RND_CATEGORY_CYBERNETICS + RND_SUBCATEGORY_CYBERNETICS_IMPLANTS_TOOLS, @@ -166,7 +248,7 @@ /datum/material/glass = HALF_SHEET_MATERIAL_AMOUNT, /datum/material/silver = HALF_SHEET_MATERIAL_AMOUNT, ) - construction_time = 100 + construction_time = 10 SECONDS build_path = /obj/item/organ/internal/cyberimp/arm/lighter category = list( RND_CATEGORY_CYBERNETICS + RND_SUBCATEGORY_CYBERNETICS_IMPLANTS_MISC, diff --git a/modular_nova/modules/implants/code/medical_nodes.dm b/modular_nova/modules/implants/code/medical_nodes.dm index a329693e8e5..c2673189167 100644 --- a/modular_nova/modules/implants/code/medical_nodes.dm +++ b/modular_nova/modules/implants/code/medical_nodes.dm @@ -12,6 +12,10 @@ "ci-janitor", "ci-lighter", "ci-razor", + "combat_implant_sandy", + "combat_implant_hackerman", + "combat_implant_razorwire", + "combat_implant_shell_launcher", ) research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 5000) diff --git a/modular_nova/modules/implants/icons/implants.dmi b/modular_nova/modules/implants/icons/implants.dmi new file mode 100644 index 00000000000..c15b9987dea Binary files /dev/null and b/modular_nova/modules/implants/icons/implants.dmi differ diff --git a/modular_nova/modules/implants/icons/implants_onmob.dmi b/modular_nova/modules/implants/icons/implants_onmob.dmi new file mode 100644 index 00000000000..026c6e2bac1 Binary files /dev/null and b/modular_nova/modules/implants/icons/implants_onmob.dmi differ diff --git a/modular_nova/modules/implants/icons/inhands/lefthand.dmi b/modular_nova/modules/implants/icons/inhands/lefthand.dmi new file mode 100644 index 00000000000..68113f8df70 Binary files /dev/null and b/modular_nova/modules/implants/icons/inhands/lefthand.dmi differ diff --git a/modular_nova/modules/implants/icons/inhands/righthand.dmi b/modular_nova/modules/implants/icons/inhands/righthand.dmi new file mode 100644 index 00000000000..3f3008190cd Binary files /dev/null and b/modular_nova/modules/implants/icons/inhands/righthand.dmi differ diff --git a/modular_nova/modules/imported_vendors/code/vendors.dm b/modular_nova/modules/imported_vendors/code/vendors.dm index 0cf495b6899..12f447b3837 100644 --- a/modular_nova/modules/imported_vendors/code/vendors.dm +++ b/modular_nova/modules/imported_vendors/code/vendors.dm @@ -4,6 +4,7 @@ /obj/machinery/vending/imported/yangyu, /obj/machinery/vending/imported/mothic, /obj/machinery/vending/imported/tiziran, + /obj/machinery/vending/deforest_medvend, ) /obj/effect/spawner/random/vending/colavend //These can serve both snacks AND drinks so its kinda both of them? @@ -12,6 +13,7 @@ /obj/machinery/vending/imported/yangyu, /obj/machinery/vending/imported/mothic, /obj/machinery/vending/imported/tiziran, + /obj/machinery/vending/deforest_medvend, ) /datum/supply_pack/vending/imported/fill(obj/structure/closet/crate/target_crate) diff --git a/modular_nova/modules/jukebox/code/dance_machine.dm b/modular_nova/modules/jukebox/code/dance_machine.dm deleted file mode 100644 index 17030d72740..00000000000 --- a/modular_nova/modules/jukebox/code/dance_machine.dm +++ /dev/null @@ -1,472 +0,0 @@ -/// Helper macro to check if the passed mob has jukebox sound preference enabled -#define HAS_JUKEBOX_PREF(mob) (!QDELETED(mob) && !isnull(mob.client) && mob.client.prefs.read_preference(/datum/preference/toggle/sound_jukebox)) - -/obj/machinery/jukebox - name = "jukebox" - desc = "A classic music player." - icon = 'icons/obj/machines/music.dmi' - icon_state = "jukebox" - verb_say = "states" - density = TRUE - req_access = list(ACCESS_BAR) - /// Whether we're actively playing music - var/active = FALSE - /// List of weakrefs to mobs listening to the current song - var/list/datum/weakref/rangers = list() - /// World.time when the current song will stop playing, but also a cooldown between activations - var/stop = 0 - /// List of /datum/tracks we can play - var/list/songs = list() - /// Current song selected - var/datum/track/selection = null - /// Volume of the songs played - var/volume = 100 - -/obj/machinery/jukebox/disco - name = "radiant dance machine mark IV" - desc = "The first three prototypes were discontinued after mass casualty incidents." - icon = 'icons/obj/machines/music.dmi' - icon_state = "disco" - anchored = FALSE - var/list/spotlights = list() - var/list/sparkles = list() - -/obj/machinery/jukebox/disco/indestructible - name = "radiant dance machine mark V" - desc = "Now redesigned with data gathered from the extensive disco and plasma research." - anchored = TRUE - resistance_flags = INDESTRUCTIBLE | LAVA_PROOF | FIRE_PROOF | UNACIDABLE | ACID_PROOF - obj_flags = CAN_BE_HIT | NO_DECONSTRUCTION - -/obj/machinery/jukebox/Initialize(mapload) - . = ..() - songs = SSjukeboxes.songs - if(length(songs)) - selection = pick(songs) - -/obj/machinery/jukebox/Destroy() - dance_over() - selection = null - songs.Cut() - return ..() - -/obj/machinery/jukebox/attackby(obj/item/O, mob/user, params) - if(!active && !(obj_flags & NO_DECONSTRUCTION)) - if(O.tool_behaviour == TOOL_WRENCH) - if(!anchored && !isinspace()) - to_chat(user,span_notice("You secure [src] to the floor.")) - set_anchored(TRUE) - else if(anchored) - to_chat(user,span_notice("You unsecure and disconnect [src].")) - set_anchored(FALSE) - playsound(src, 'sound/items/deconstruct.ogg', 50, TRUE) - return - return ..() - -/obj/machinery/jukebox/update_icon_state() - . = ..() - SSvis_overlays.remove_vis_overlay(src, managed_vis_overlays) - luminosity = 0 - - if(active) - luminosity = 1 - SSvis_overlays.add_vis_overlay(src, icon, "active", layer, plane, dir, alpha) - SSvis_overlays.add_vis_overlay(src, icon, "active", 0, EMISSIVE_PLANE, dir, alpha) - - -/obj/machinery/jukebox/ui_status(mob/user) - if(!anchored) - to_chat(user,span_warning("This device must be anchored by a wrench!")) - return UI_CLOSE - if(!allowed(user) && !isobserver(user)) - to_chat(user,span_warning("Error: Access Denied.")) - return UI_CLOSE - if(!SSjukeboxes.songs.len && !isobserver(user)) - to_chat(user,span_warning("Error: No music tracks have been authorized for your station. Petition Central Command to resolve this issue.")) - return UI_CLOSE - return ..() - -/obj/machinery/jukebox/ui_interact(mob/user, datum/tgui/ui) - ui = SStgui.try_update_ui(user, src, ui) - if(!ui) - ui = new(user, src, "Jukebox", name) - ui.open() - -/obj/machinery/jukebox/ui_data(mob/user) - var/list/data = list() - data["active"] = active - data["songs"] = list() - for(var/datum/track/S in SSjukeboxes.songs) - var/list/track_data = list( - name = S.song_name - ) - data["songs"] += list(track_data) - data["track_selected"] = null - data["track_length"] = null - data["track_beat"] = null - if(selection) - data["track_selected"] = selection.song_name - data["track_length"] = DisplayTimeText(selection.song_length) - data["track_beat"] = selection.song_beat - data["volume"] = volume - return data - -/obj/machinery/jukebox/ui_act(action, list/params) - . = ..() - if(.) - return - - switch(action) - if("toggle") - if(QDELETED(src)) - return - if(!active) - if(stop > world.time) - to_chat(usr, span_warning("Error: The device is still resetting from the last activation, it will be ready again in [DisplayTimeText(stop-world.time)].")) - return - activate_music() - return TRUE - else - stop = 0 - return TRUE - if("select_track") - if(active) - to_chat(usr, span_warning("Error: You cannot change the song until the current one is over.")) - return - var/list/available = list() - for(var/datum/track/S in SSjukeboxes.songs) - available[S.song_name] = S - var/selected = params["track"] - if(QDELETED(src) || !selected || !istype(available[selected], /datum/track)) - return - selection = available[selected] - return TRUE - if("set_volume") - var/new_volume = params["volume"] - if(new_volume == "reset") - volume = initial(volume) - return TRUE - else if(new_volume == "min") - volume = 0 - return TRUE - else if(new_volume == "max") - volume = 100 - return TRUE - else if(text2num(new_volume) != null) - volume = text2num(new_volume) - return TRUE - -/obj/machinery/jukebox/proc/activate_music() - var/jukeboxslottotake = SSjukeboxes.addjukebox(src, selection, 2) - if(jukeboxslottotake) - active = TRUE - update_use_power(ACTIVE_POWER_USE) - update_appearance(UPDATE_ICON_STATE) - START_PROCESSING(SSobj, src) - stop = world.time + selection.song_length - return TRUE - else - return FALSE - -/obj/machinery/jukebox/disco/activate_music() - ..() - dance_setup() - lights_spin() - -/obj/machinery/jukebox/disco/proc/dance_setup() - var/turf/cen = get_turf(src) - FOR_DVIEW(var/turf/t, 3, get_turf(src),INVISIBILITY_LIGHTING) - if(t.x == cen.x && t.y > cen.y) - spotlights += new /obj/item/flashlight/spotlight(t, 1 + get_dist(src, t), 30 - (get_dist(src, t) * 8), COLOR_SOFT_RED) - continue - if(t.x == cen.x && t.y < cen.y) - spotlights += new /obj/item/flashlight/spotlight(t, 1 + get_dist(src, t), 30 - (get_dist(src, t) * 8), LIGHT_COLOR_PURPLE) - continue - if(t.x > cen.x && t.y == cen.y) - spotlights += new /obj/item/flashlight/spotlight(t, 1 + get_dist(src, t), 30 - (get_dist(src, t) * 8), LIGHT_COLOR_BRIGHT_YELLOW) - continue - if(t.x < cen.x && t.y == cen.y) - spotlights += new /obj/item/flashlight/spotlight(t, 1 + get_dist(src, t), 30 - (get_dist(src, t) * 8), LIGHT_COLOR_GREEN) - continue - if((t.x+1 == cen.x && t.y+1 == cen.y) || (t.x+2==cen.x && t.y+2 == cen.y)) - spotlights += new /obj/item/flashlight/spotlight(t, 1.4 + get_dist(src, t), 30 - (get_dist(src, t) * 8), LIGHT_COLOR_ORANGE) - continue - if((t.x-1 == cen.x && t.y-1 == cen.y) || (t.x-2==cen.x && t.y-2 == cen.y)) - spotlights += new /obj/item/flashlight/spotlight(t, 1.4 + get_dist(src, t), 30 - (get_dist(src, t) * 8), LIGHT_COLOR_CYAN) - continue - if((t.x-1 == cen.x && t.y+1 == cen.y) || (t.x-2==cen.x && t.y+2 == cen.y)) - spotlights += new /obj/item/flashlight/spotlight(t, 1.4 + get_dist(src, t), 30 - (get_dist(src, t) * 8), LIGHT_COLOR_BLUEGREEN) - continue - if((t.x+1 == cen.x && t.y-1 == cen.y) || (t.x+2==cen.x && t.y-2 == cen.y)) - spotlights += new /obj/item/flashlight/spotlight(t, 1.4 + get_dist(src, t), 30 - (get_dist(src, t) * 8), LIGHT_COLOR_BLUE) - continue - continue - FOR_DVIEW_END - -/obj/machinery/jukebox/disco/proc/hierofunk() - for(var/i in 1 to 10) - spawn_atom_to_turf(/obj/effect/temp_visual/hierophant/telegraph/edge, src, 1, FALSE) - sleep(0.5 SECONDS) - if(QDELETED(src)) - return -#define DISCO_INFENO_RANGE (rand(85, 115)*0.01) - -/obj/machinery/jukebox/disco/proc/lights_spin() - for(var/i in 1 to 25) - if(QDELETED(src) || !active) - return - var/obj/effect/overlay/sparkles/S = new /obj/effect/overlay/sparkles(src) - S.alpha = 0 - sparkles += S - switch(i) - if(1 to 8) - S.orbit(src, 30, TRUE, 60, 36, TRUE) - if(9 to 16) - S.orbit(src, 62, TRUE, 60, 36, TRUE) - if(17 to 24) - S.orbit(src, 95, TRUE, 60, 36, TRUE) - if(25) - S.pixel_y = 7 - S.forceMove(get_turf(src)) - sleep(0.7 SECONDS) - if(selection.song_name == "Engineering's Ultimate High-Energy Hustle") - sleep(28 SECONDS) - for(var/s in sparkles) - var/obj/effect/overlay/sparkles/reveal = s - reveal.alpha = 255 - while(active) - for(var/g in spotlights) // The multiples reflects custom adjustments to each colors after dozens of tests - var/obj/item/flashlight/spotlight/glow = g - if(QDELETED(glow)) - stack_trace("[glow?.gc_destroyed ? "Qdeleting glow" : "null entry"] found in [src].[gc_destroyed ? " Source qdeleting at the time." : ""]") - return - switch(glow.light_color) - if(COLOR_SOFT_RED) - if(glow.even_cycle) - glow.set_light_on(FALSE) - glow.set_light_color(LIGHT_COLOR_BLUE) - else - glow.set_light_range_power_color(glow.base_light_range * DISCO_INFENO_RANGE, glow.light_power * 1.48, LIGHT_COLOR_BLUE) - glow.set_light_on(TRUE) - if(LIGHT_COLOR_BLUE) - if(glow.even_cycle) - glow.set_light_range_power_color(glow.base_light_range * DISCO_INFENO_RANGE, glow.light_power * 2, LIGHT_COLOR_GREEN) - glow.set_light_on(TRUE) - else - glow.set_light_on(FALSE) - glow.set_light_color(LIGHT_COLOR_GREEN) - if(LIGHT_COLOR_GREEN) - if(glow.even_cycle) - glow.set_light_on(FALSE) - glow.set_light_color(LIGHT_COLOR_ORANGE) - else - glow.set_light_range_power_color(glow.base_light_range * DISCO_INFENO_RANGE, glow.light_power * 0.5, LIGHT_COLOR_ORANGE) - glow.set_light_on(TRUE) - if(LIGHT_COLOR_ORANGE) - if(glow.even_cycle) - glow.set_light_range_power_color(glow.base_light_range * DISCO_INFENO_RANGE, glow.light_power * 2.27, LIGHT_COLOR_PURPLE) - glow.set_light_on(TRUE) - else - glow.set_light_on(FALSE) - glow.set_light_color(LIGHT_COLOR_PURPLE) - if(LIGHT_COLOR_PURPLE) - if(glow.even_cycle) - glow.set_light_on(FALSE) - glow.set_light_color(LIGHT_COLOR_BLUEGREEN) - else - glow.set_light_range_power_color(glow.base_light_range * DISCO_INFENO_RANGE, glow.light_power * 0.44, LIGHT_COLOR_BLUEGREEN) - glow.set_light_on(TRUE) - if(LIGHT_COLOR_BLUEGREEN) - if(glow.even_cycle) - glow.set_light_range(glow.base_light_range * DISCO_INFENO_RANGE) - glow.set_light_color(LIGHT_COLOR_BRIGHT_YELLOW) - glow.set_light_on(TRUE) - else - glow.set_light_on(FALSE) - glow.set_light_color(LIGHT_COLOR_DIM_YELLOW) - if(LIGHT_COLOR_DIM_YELLOW) - if(glow.even_cycle) - glow.set_light_on(FALSE) - glow.set_light_color(LIGHT_COLOR_CYAN) - else - glow.set_light_range(glow.base_light_range * DISCO_INFENO_RANGE) - glow.set_light_color(LIGHT_COLOR_CYAN) - glow.set_light_on(TRUE) - if(LIGHT_COLOR_CYAN) - if(glow.even_cycle) - glow.set_light_range_power_color(glow.base_light_range * DISCO_INFENO_RANGE, glow.light_power * 0.68, COLOR_SOFT_RED) - glow.set_light_on(TRUE) - else - glow.set_light_on(FALSE) - glow.set_light_color(COLOR_SOFT_RED) - glow.even_cycle = !glow.even_cycle - if(prob(2)) // Unique effects for the dance floor that show up randomly to mix things up - INVOKE_ASYNC(src, PROC_REF(hierofunk)) - sleep(selection.song_beat) - if(QDELETED(src)) - return - -#undef DISCO_INFENO_RANGE - -/obj/machinery/jukebox/disco/proc/dance(mob/living/M) //Show your moves - set waitfor = FALSE - switch(rand(0, 9)) - if(0 to 1) - dance2(M) - if(2 to 3) - dance3(M) - if(4 to 6) - dance4(M) - if(7 to 9) - dance5(M) - -/obj/machinery/jukebox/disco/proc/dance2(mob/living/M) - for(var/i in 0 to 9) - dance_rotate(M, CALLBACK(M, TYPE_PROC_REF(/mob, dance_flip))) - sleep(2 SECONDS) - -/mob/proc/dance_flip() - if(dir == WEST) - emote("flip") - -/obj/machinery/jukebox/disco/proc/dance3(mob/living/M) - set waitfor = FALSE - var/matrix/initial_matrix = matrix(M.transform) - for (var/i in 1 to 75) - if (!M) - return - switch(i) - if (1 to 15) - initial_matrix = matrix(M.transform) - initial_matrix.Translate(0,1) - animate(M, transform = initial_matrix, time = 0.1 SECONDS, loop = 0) - if (16 to 30) - initial_matrix = matrix(M.transform) - initial_matrix.Translate(1,-1) - animate(M, transform = initial_matrix, time = 0.1 SECONDS, loop = 0) - if (31 to 45) - initial_matrix = matrix(M.transform) - initial_matrix.Translate(-1,-1) - animate(M, transform = initial_matrix, time = 0.1 SECONDS, loop = 0) - if (46 to 60) - initial_matrix = matrix(M.transform) - initial_matrix.Translate(-1,1) - animate(M, transform = initial_matrix, time = 0.1 SECONDS, loop = 0) - if (61 to 75) - initial_matrix = matrix(M.transform) - initial_matrix.Translate(1,0) - animate(M, transform = initial_matrix, time = 0.1 SECONDS, loop = 0) - M.setDir(turn(M.dir, 90)) - switch (M.dir) - if (NORTH) - initial_matrix = matrix(M.transform) - initial_matrix.Translate(0,3) - animate(M, transform = initial_matrix, time = 0.1 SECONDS, loop = 0) - if (SOUTH) - initial_matrix = matrix(M.transform) - initial_matrix.Translate(0,-3) - animate(M, transform = initial_matrix, time = 0.1 SECONDS, loop = 0) - if (EAST) - initial_matrix = matrix(M.transform) - initial_matrix.Translate(3,0) - animate(M, transform = initial_matrix, time = 0.1 SECONDS, loop = 0) - if (WEST) - initial_matrix = matrix(M.transform) - initial_matrix.Translate(-3,0) - animate(M, transform = initial_matrix, time = 0.1 SECONDS, loop = 0) - sleep(0.1 SECONDS) - M.lying_fix() - -/obj/machinery/jukebox/disco/proc/dance4(mob/living/lead_dancer) - var/speed = rand(1,3) - set waitfor = 0 - var/time = 30 - while(time) - sleep(speed) - for(var/i in 1 to speed) - lead_dancer.setDir(pick(GLOB.cardinals)) - // makes people dance with us nearby - for(var/datum/weakref/weak_dancer as anything in rangers) - var/mob/living/carbon/dancer = weak_dancer.resolve() - if(!istype(dancer)) - continue - dancer.set_resting(!dancer.resting, silent = TRUE, instant = TRUE) - time-- - -/obj/machinery/jukebox/disco/proc/dance5(mob/living/M) - animate(M, transform = matrix(180, MATRIX_ROTATE), time = 1, loop = 0) - var/matrix/initial_matrix = matrix(M.transform) - for (var/i in 1 to 60) - if (!M) - return - if(!active) - break - if (i<31) - initial_matrix = matrix(M.transform) - initial_matrix.Translate(0,1) - animate(M, transform = initial_matrix, time = 1, loop = 0) - if (i>30) - initial_matrix = matrix(M.transform) - initial_matrix.Translate(0,-1) - animate(M, transform = initial_matrix, time = 1, loop = 0) - M.setDir(turn(M.dir, 90)) - switch (M.dir) - if (NORTH) - initial_matrix = matrix(M.transform) - initial_matrix.Translate(0,3) - animate(M, transform = initial_matrix, time = 1, loop = 0) - if (SOUTH) - initial_matrix = matrix(M.transform) - initial_matrix.Translate(0,-3) - animate(M, transform = initial_matrix, time = 1, loop = 0) - if (EAST) - initial_matrix = matrix(M.transform) - initial_matrix.Translate(3,0) - animate(M, transform = initial_matrix, time = 1, loop = 0) - if (WEST) - initial_matrix = matrix(M.transform) - initial_matrix.Translate(-3,0) - animate(M, transform = initial_matrix, time = 1, loop = 0) - sleep(0.1 SECONDS) - M.lying_fix() - -/mob/living/proc/lying_fix() - animate(src, transform = null, time = 0.1 SECONDS, loop = 0) - lying_prev = 0 - -/obj/machinery/jukebox/proc/dance_over() - var/position = SSjukeboxes.findjukeboxindex(src) - if(!position) - return - SSjukeboxes.removejukebox(position) - STOP_PROCESSING(SSobj, src) - rangers.Cut() - -/obj/machinery/jukebox/disco/dance_over() - ..() - QDEL_LIST(spotlights) - QDEL_LIST(sparkles) - -/obj/machinery/jukebox/process() - if(active && world.time >= stop) - active = FALSE - update_use_power(IDLE_POWER_USE) - STOP_PROCESSING(SSobj, src) - dance_over() - playsound(src,'sound/machines/terminal_off.ogg',50,TRUE) - update_appearance(UPDATE_ICON_STATE) - stop = world.time + 100 - -/obj/machinery/jukebox/disco/process() - . = ..() - if(!active) - return - - for(var/datum/weakref/weak_dancer as anything in rangers) - var/mob/living/to_dance = weak_dancer.resolve() - if(!istype(to_dance) || !(to_dance.mobility_flags & MOBILITY_MOVE)) - continue - if(prob(5 + (allowed(to_dance) * 4))) - dance(to_dance) - -#undef HAS_JUKEBOX_PREF diff --git a/modular_nova/modules/jukebox/code/jukebox_subsystem.dm b/modular_nova/modules/jukebox/code/jukebox_subsystem.dm deleted file mode 100644 index 0cce751a942..00000000000 --- a/modular_nova/modules/jukebox/code/jukebox_subsystem.dm +++ /dev/null @@ -1,119 +0,0 @@ -#define HAS_JUKEBOX_PREF(mob) (!QDELETED(mob) && !isnull(mob.client) && mob.client.prefs.read_preference(/datum/preference/toggle/sound_jukebox) && mob.can_hear()) - -SUBSYSTEM_DEF(jukeboxes) - name = "Jukeboxes" - wait = 5 - var/list/songs = list() - var/list/activejukeboxes = list() - var/list/freejukeboxchannels = list() - -/datum/track - var/song_name = "generic" - var/song_path = null - var/song_length = 0 - var/song_beat = 0 - var/song_associated_id = null - -/datum/track/New(name, path, length, beat, assocID) - song_name = name - song_path = path - song_length = length - song_beat = beat - song_associated_id = assocID - -/datum/controller/subsystem/jukeboxes/proc/addjukebox(obj/machinery/jukebox/jukebox, datum/track/T, jukefalloff = 1) - if(!istype(T)) - CRASH("[src] tried to play a song with a nonexistant track") - var/channeltoreserve = pick(freejukeboxchannels) - if(!channeltoreserve) - return FALSE - freejukeboxchannels -= channeltoreserve - var/list/youvegotafreejukebox = list(T, channeltoreserve, jukebox, jukefalloff) - activejukeboxes.len++ - activejukeboxes[activejukeboxes.len] = youvegotafreejukebox - - //Due to changes in later versions of 512, SOUND_UPDATE no longer properly plays audio when a file is defined in the sound datum. As such, we are now required to init the audio before we can actually do anything with it. - //Downsides to this? This means that you can *only* hear the jukebox audio if you were present on the server when it started playing, and it means that it's now impossible to add loops to the jukebox track list. - var/sound/song_to_init = sound(T.song_path) - song_to_init.status = SOUND_MUTE - for(var/mob/M in GLOB.player_list) - if(!M.client) - continue - if(!(M.client.prefs.read_preference(/datum/preference/toggle/sound_instruments))) - continue - - M.playsound_local(M, null, jukebox.volume, channel = youvegotafreejukebox[2], sound_to_use = song_to_init) - return activejukeboxes.len - -/datum/controller/subsystem/jukeboxes/proc/removejukebox(IDtoremove) - if(islist(activejukeboxes[IDtoremove])) - var/jukechannel = activejukeboxes[IDtoremove][2] - for(var/mob/M in GLOB.player_list) - if(!M.client) - continue - M.stop_sound_channel(jukechannel) - freejukeboxchannels |= jukechannel - activejukeboxes.Cut(IDtoremove, IDtoremove+1) - return TRUE - else - CRASH("Tried to remove jukebox with invalid ID") - -/datum/controller/subsystem/jukeboxes/proc/findjukeboxindex(obj/machinery/jukebox) - if(length(activejukeboxes)) - for(var/list/jukeinfo in activejukeboxes) - if(jukebox in jukeinfo) - return activejukeboxes.Find(jukeinfo) - return FALSE - -/datum/controller/subsystem/jukeboxes/Initialize() - var/list/tracks = flist("[global.config.directory]/jukebox_music/sounds/") - for(var/S in tracks) - var/datum/track/T = new() - T.song_path = file("[global.config.directory]/jukebox_music/sounds/[S]") - var/list/L = splittext(S,"+") - if(L.len != 4) - continue - T.song_name = L[1] - T.song_length = text2num(L[2]) - T.song_beat = text2num(L[3]) - T.song_associated_id = L[4] - songs |= T - for(var/i in CHANNEL_JUKEBOX_START to CHANNEL_JUKEBOX) - freejukeboxchannels |= i - return SS_INIT_SUCCESS - -/datum/controller/subsystem/jukeboxes/fire() - if(!length(activejukeboxes)) - return - for(var/list/jukeinfo in activejukeboxes) - if(!length(jukeinfo)) - stack_trace("Active jukebox without any associated metadata.") - continue - var/datum/track/juketrack = jukeinfo[1] - if(!istype(juketrack)) - stack_trace("Invalid jukebox track datum.") - continue - var/obj/machinery/jukebox/jukebox = jukeinfo[3] - if(!istype(jukebox)) - stack_trace("Nonexistant or invalid object associated with jukebox.") - continue - var/sound/song_played = sound(juketrack.song_path) - var/turf/currentturf = get_turf(jukebox) - - song_played.falloff = jukeinfo[4] - - for(var/mob/M in GLOB.player_list) - if(!HAS_JUKEBOX_PREF(M)) - M.stop_sound_channel(jukeinfo[2]) - continue - - if(jukebox.z == M.z) //todo - expand this to work with mining planet z-levels when robust jukebox audio gets merged to master - song_played.status = SOUND_UPDATE - else - song_played.status = SOUND_MUTE | SOUND_UPDATE //Setting volume = 0 doesn't let the sound properties update at all, which is lame. - - M.playsound_local(currentturf, null, jukebox.volume, channel = jukeinfo[2], sound_to_use = song_played) - CHECK_TICK - return - -#undef HAS_JUKEBOX_PREF diff --git a/modular_nova/modules/jukebox/icons/stationobjs.dmi b/modular_nova/modules/jukebox/icons/stationobjs.dmi deleted file mode 100644 index bf2178553fc..00000000000 Binary files a/modular_nova/modules/jukebox/icons/stationobjs.dmi and /dev/null differ diff --git a/modular_nova/modules/jukebox/readme.md b/modular_nova/modules/jukebox/readme.md deleted file mode 100644 index f6ece230d3d..00000000000 --- a/modular_nova/modules/jukebox/readme.md +++ /dev/null @@ -1,29 +0,0 @@ -https://github.com/Skyrat-SS13/Skyrat-tg/pull/892 - -## Title: Jukebox - -MODULE ID: JUKEBOX - -### Description: - -Adds a new sound system for the jukebox, and also updates the jukebox to be good. - -### TG Proc Changes: - -- Skyrat-tg\code\__DEFINES\sound.dm > DEFINES CHANGED, SEE FILE. - -### Defines: - -- #define CHANNEL_JUKEBOX_START 1016 - -### Master file additions - -- modular_nova\master_files\code\game\sound.dm - -### Included files that are not contained in this module: - -- N/A - -### Credits: -Gandalf2k15 - porting -NotRanged - Original code diff --git a/modular_nova/modules/kahraman_equipment/code/ore_thumper.dm b/modular_nova/modules/kahraman_equipment/code/ore_thumper.dm index 6f67a760deb..b3d6a72d7af 100644 --- a/modular_nova/modules/kahraman_equipment/code/ore_thumper.dm +++ b/modular_nova/modules/kahraman_equipment/code/ore_thumper.dm @@ -10,7 +10,7 @@ density = TRUE max_integrity = 250 idle_power_usage = 0 - active_power_usage = BASE_MACHINE_ACTIVE_CONSUMPTION * 25 // Should be 25 kw or half of a SOFIE generator + active_power_usage = BASE_MACHINE_ACTIVE_CONSUMPTION * 50 // Should be 50 kw or an entire SOFIE generator's power production anchored = TRUE can_change_cable_layer = FALSE circuit = null @@ -22,7 +22,7 @@ /// How many times we've slammed, counts up until the number is high enough to make a box of materials var/slam_jams = 0 /// How many times we need to slam in order to produce a box of materials - var/slam_jams_needed = 15 + var/slam_jams_needed = 30 /// List of the thumping sounds we can choose from var/static/list/list_of_thumper_sounds = list( 'modular_nova/modules/kahraman_equipment/sound/thumper_thump/punch_press_1.wav', @@ -55,7 +55,7 @@ /obj/item/stack/ore/bluespace_crystal = 1, ) /// What's the limit for ore near us? Counts by stacks, not individual amounts of ore - var/nearby_ore_limit = 10 + var/nearby_ore_limit = 5 /// How far away does ore spawn? var/ore_spawn_range = 2 /// What do we undeploy into @@ -88,10 +88,11 @@ . += span_notice("Its must be constructed outdoors to function.") if(!istype(get_turf(src), /turf/open/misc)) . += span_notice("It must be constructed on suitable terrain, like ash, snow, or sand.") - . += span_notice("It must have a powered, wired connection running beneath it with 25 kW of excess power to function.") + . += span_notice("It must have a powered, wired connection running beneath it with [active_power_usage / BASE_MACHINE_ACTIVE_CONSUMPTION] kW of excess power to function.") . += span_notice("It will produce a box of materials after it has slammed [slam_jams_needed] times.") . += span_notice("Currently, it has slammed [slam_jams] / [slam_jams_needed] times needed.") - . += span_notice("It will stop producing resources if there are too many piles of ore near it.") + . += span_notice("It will stop producing resources if there are too many piles of ore near it.") + . += span_notice("The thumper cannot work if it is too close to another thumper, needing at least [ore_spawn_range] spaces in all directions between it another thumper.") /obj/machinery/power/colony_ore_thumper/process() @@ -111,8 +112,6 @@ else balloon_alert_to_viewers("not enough power!") cut_that_out() - else if(avail(idle_power_usage)) - add_load(idle_power_usage) /// Checks the turf we are on to make sure we are outdoors and on a misc turf @@ -215,10 +214,14 @@ if(nearby_ore > nearby_ore_limit) balloon_alert_to_viewers("nearby ore too saturated") + // Makes the thumper rumble around when something's wrong + Shake(2, 2, 2 SECONDS) return if(is_there_a_thumper_too) balloon_alert_to_viewers("too close to another thumper") + // Makes the thumper rumble around when something's wrong + Shake(2, 2, 2 SECONDS) return addtimer(CALLBACK(src, PROC_REF(make_some_ore)), 3 SECONDS, TIMER_DELETE_ME) diff --git a/modular_nova/modules/loadouts/loadout_items/_loadout_datum.dm b/modular_nova/modules/loadouts/loadout_items/_loadout_datum.dm index 5a4d3bc6a54..a0e43ccc5ba 100644 --- a/modular_nova/modules/loadouts/loadout_items/_loadout_datum.dm +++ b/modular_nova/modules/loadouts/loadout_items/_loadout_datum.dm @@ -133,3 +133,25 @@ GLOBAL_LIST_EMPTY(all_loadout_datums) */ /datum/loadout_item/proc/post_equip_item(datum/preferences/preference_source, mob/living/carbon/human/equipper) return FALSE + +/datum/loadout_item/proc/can_be_applied_to(mob/living/target, datum/preferences/preference_source, datum/job/equipping_job, silent = FALSE) + var/client/client = target.client + if(restricted_roles && equipping_job && !(equipping_job.title in restricted_roles)) + if(client && !silent) + to_chat(target, span_warning("You were unable to get a loadout item([initial(item_path.name)]) due to job restrictions!")) + return FALSE + + if(blacklisted_roles && equipping_job && (equipping_job.title in blacklisted_roles)) + if(client && !silent) + to_chat(target, span_warning("You were unable to get a loadout item([initial(item_path.name)]) due to job blacklists!")) + return FALSE + + if (iscarbon(target)) + var/mob/living/carbon/carbon_target = target + var/datum/dna/dna = carbon_target.dna + if(!istype(dna) || (restricted_species && !(dna.species.id in restricted_species))) + if(client && !silent) + to_chat(target, span_warning("You were unable to get a loadout item ([initial(item_path.name)]) due to species restrictions!")) + return FALSE + + return TRUE diff --git a/modular_nova/modules/loadouts/loadout_items/donator/personal/donator_personal.dm b/modular_nova/modules/loadouts/loadout_items/donator/personal/donator_personal.dm index ef2b3587bc7..6bfe9a4ea4b 100644 --- a/modular_nova/modules/loadouts/loadout_items/donator/personal/donator_personal.dm +++ b/modular_nova/modules/loadouts/loadout_items/donator/personal/donator_personal.dm @@ -76,9 +76,9 @@ ckeywhitelist = list("candlejax") restricted_roles = list(JOB_RESEARCH_DIRECTOR, JOB_SCIENTIST, JOB_SCIENCE_GUARD, JOB_VIROLOGIST, JOB_GENETICIST) -/datum/loadout_item/head/emissionhelm - name = "Emission's Helmet" - item_path = /obj/item/clothing/head/helmet/space/plasmaman/candlejax +/datum/loadout_item/mask/cmcp_mask + name = "CMCP Mask" + item_path = /obj/item/clothing/mask/gas/CMCP_mask ckeywhitelist = list("candlejax") /datum/loadout_item/head/anahelm @@ -129,32 +129,31 @@ /datum/loadout_item/mask/nightlight_mask name = "FIR-36 Rebreather" item_path = /obj/item/clothing/mask/gas/nightlight - ckeywhitelist = list("farsightednightlight", "raxraus", "1ceres", "marcoalbaredaa", "itzshift_yt", "drifter7371", "AvianAviator", "Katty Kat", "Investigator77", "Dalao Azure", "Socialistion", "ChillyLobster", "Sylvara", "AmZee", "Tf4", "rb303", "Kay_Nite", "whataboutism", "taac", "Halkyon", "Lupo_di_rosa", "Merek2", "lowpowermia", "RyeanBread", "Jesterz7", "Saund_Minah", "Ruediger4") /datum/loadout_item/mask/fir22 name = "FIR-22 Full-Face Rebreather" item_path = /obj/item/clothing/mask/gas/nightlight/fir22 - ckeywhitelist = list("farsightednightlight", "raxraus", "1ceres", "marcoalbaredaa", "itzshift_yt", "drifter7371", "AvianAviator", "Katty Kat", "Investigator77", "Dalao Azure", "Socialistion", "ChillyLobster", "Sylvara", "AmZee", "Tf4", "rb303", "Kay_Nite", "whataboutism", "taac", "Halkyon", "Lupo_di_rosa", "Merek2", "lowpowermia", "RyeanBread", "Jesterz7", "Saund_Minah", "Ruediger4") + +/datum/loadout_item/mask/caligram_visage_mask + name = "Caligram Visage Mask" + item_path = /obj/item/clothing/mask/gas/caligram_visage_mask + ckeywhitelist = list("farsightednightlight") /datum/loadout_item/head/caligram_cap_tan name = "Caligram Tan Softcap" - item_path = /obj/item/clothing/head/caligram_cap_tan - ckeywhitelist = list("farsightednightlight", "raxraus", "1ceres", "marcoalbaredaa", "itzshift_yt", "drifter7371", "AvianAviator", "Katty Kat", "Investigator77", "Dalao Azure", "Socialistion", "ChillyLobster", "Sylvara", "AmZee", "Tf4", "rb303", "Kay_Nite", "whataboutism", "taac", "Halkyon", "Lupo_di_rosa", "Merek2", "lowpowermia", "RyeanBread", "Jesterz7", "Saund_Minah", "Ruediger4") + item_path = /obj/item/clothing/head/caligram_cap /datum/loadout_item/under/jumpsuit/caligram_fatigues_tan name = "Caligram Tan Fatigues" - item_path = /obj/item/clothing/under/jumpsuit/caligram_fatigues_tan - ckeywhitelist = list("farsightednightlight", "raxraus", "1ceres", "marcoalbaredaa", "itzshift_yt", "drifter7371", "AvianAviator", "Katty Kat", "Investigator77", "Dalao Azure", "Socialistion", "ChillyLobster", "Sylvara", "AmZee", "Tf4", "rb303", "Kay_Nite", "whataboutism", "taac", "Halkyon", "Lupo_di_rosa", "Merek2", "lowpowermia", "RyeanBread", "Jesterz7", "Saund_Minah", "Ruediger4") + item_path = /obj/item/clothing/under/jumpsuit/caligram_fatigues /datum/loadout_item/suit/caligram_parka_tan name = "Caligram Tan Parka" - item_path = /obj/item/clothing/suit/jacket/caligram_parka_tan - ckeywhitelist = list("farsightednightlight", "raxraus", "1ceres", "marcoalbaredaa", "itzshift_yt", "drifter7371", "AvianAviator", "Katty Kat", "Investigator77", "Dalao Azure", "Socialistion", "ChillyLobster", "Sylvara", "AmZee", "Tf4", "rb303", "Kay_Nite", "whataboutism", "taac", "Halkyon", "Lupo_di_rosa", "Merek2", "lowpowermia", "RyeanBread", "Jesterz7", "Saund_Minah", "Ruediger4") + item_path = /obj/item/clothing/suit/jacket/caligram_parka /datum/loadout_item/suit/caligram_parka_vest_tan name = "Caligram Armored Tan Parka" - item_path = /obj/item/clothing/suit/armor/vest/caligram_parka_vest_tan - ckeywhitelist = list("farsightednightlight", "raxraus", "1ceres", "marcoalbaredaa", "itzshift_yt", "drifter7371", "AvianAviator", "Katty Kat", "Investigator77", "Dalao Azure", "Socialistion", "ChillyLobster", "Sylvara", "AmZee", "Tf4", "rb303", "Kay_Nite", "whataboutism", "taac", "Halkyon", "Lupo_di_rosa", "Merek2", "lowpowermia", "RyeanBread", "Jesterz7", "Saund_Minah", "Ruediger4") + item_path = /obj/item/clothing/suit/armor/vest/caligram_parka_vest restricted_roles = list(JOB_BLUESHIELD, JOB_HEAD_OF_SECURITY, JOB_SECURITY_OFFICER, JOB_WARDEN, JOB_DETECTIVE, JOB_CORRECTIONS_OFFICER) /datum/loadout_item/suit/brasspriest diff --git a/modular_nova/modules/loadouts/loadout_items/loadout_datum_accessory.dm b/modular_nova/modules/loadouts/loadout_items/loadout_datum_accessory.dm index addd37faf58..05a1051ec6f 100644 --- a/modular_nova/modules/loadouts/loadout_items/loadout_datum_accessory.dm +++ b/modular_nova/modules/loadouts/loadout_items/loadout_datum_accessory.dm @@ -75,6 +75,16 @@ GLOBAL_LIST_INIT(loadout_accessory, generate_loadout_items(/datum/loadout_item/a item_path = /obj/item/clothing/accessory/armband/deputy/lopland restricted_roles = list(JOB_HEAD_OF_SECURITY, JOB_SECURITY_OFFICER, JOB_WARDEN, JOB_DETECTIVE, JOB_CORRECTIONS_OFFICER) +/datum/loadout_item/accessory/holobadge + name = "Holobadge" + item_path = /obj/item/clothing/accessory/badge/holo + restricted_roles = list(JOB_SECURITY_OFFICER, JOB_DETECTIVE, JOB_WARDEN, JOB_HEAD_OF_SECURITY) + +/datum/loadout_item/accessory/holobadge/lanyard + name = "Holobadge with Lanyard" + item_path = /obj/item/clothing/accessory/badge/holo/cord + restricted_roles = list(JOB_SECURITY_OFFICER, JOB_DETECTIVE, JOB_WARDEN, JOB_HEAD_OF_SECURITY) + /datum/loadout_item/accessory/armband_security_deputy name = "Security Deputy Armband" item_path = /obj/item/clothing/accessory/armband/deputy diff --git a/modular_nova/modules/loadouts/loadout_items/loadout_datum_heads.dm b/modular_nova/modules/loadouts/loadout_items/loadout_datum_heads.dm index 40ab19257ea..8d877a72724 100644 --- a/modular_nova/modules/loadouts/loadout_items/loadout_datum_heads.dm +++ b/modular_nova/modules/loadouts/loadout_items/loadout_datum_heads.dm @@ -129,6 +129,14 @@ GLOBAL_LIST_INIT(loadout_helmets, generate_loadout_items(/datum/loadout_item/hea name = "Mothic Softcap" item_path = /obj/item/clothing/head/mothcap +/datum/loadout_item/head/frontiercap + name = "Frontier Cap" + item_path = /obj/item/clothing/head/soft/frontier_colonist + +/datum/loadout_item/head/frontiercap/medic + name = "Frontier Medical Cap" + item_path = /obj/item/clothing/head/soft/frontier_colonist/medic + /* * FEDORAS */ @@ -417,6 +425,18 @@ GLOBAL_LIST_INIT(loadout_helmets, generate_loadout_items(/datum/loadout_item/hea name = "Blastwave Peaked Cap" item_path = /obj/item/clothing/head/blastwave/officer +/datum/loadout_item/head/chap_nunh + name = "Nun's Hood" + item_path = /obj/item/clothing/head/chaplain/nun_hood + +/datum/loadout_item/head/chap_kippah + name = "Jewish Kippah" + item_path = /obj/item/clothing/head/chaplain/kippah + +/datum/loadout_item/head/chap_nunv + name = "Nun's Veil" + item_path = /obj/item/clothing/head/chaplain/habit_veil + /* * COWBOY */ diff --git a/modular_nova/modules/loadouts/loadout_items/loadout_datum_inhands.dm b/modular_nova/modules/loadouts/loadout_items/loadout_datum_inhands.dm index 7d3cb8ff756..51ad30f2881 100644 --- a/modular_nova/modules/loadouts/loadout_items/loadout_datum_inhands.dm +++ b/modular_nova/modules/loadouts/loadout_items/loadout_datum_inhands.dm @@ -43,6 +43,18 @@ GLOBAL_LIST_INIT(loadout_inhand_items, generate_loadout_items(/datum/loadout_ite name = "Secure Briefcase" item_path = /obj/item/storage/briefcase/secure +/datum/loadout_item/inhand/guncase_large + name = "Black Empty Gun Case (Large)" + item_path = /obj/item/storage/toolbox/guncase/nova/empty + +/datum/loadout_item/inhand/guncase_large/yellow + name = "Yellow Empty Gun Case (Large)" + item_path = /obj/item/storage/toolbox/guncase/nova/carwo_large_case/empty + +/datum/loadout_item/inhand/guncase_small + name = "Black Empty Gun Case (Small)" + item_path = /obj/item/storage/toolbox/guncase/nova/pistol/empty + /datum/loadout_item/inhand/skub name = "Skub" item_path = /obj/item/skub diff --git a/modular_nova/modules/loadouts/loadout_items/loadout_datum_masks.dm b/modular_nova/modules/loadouts/loadout_items/loadout_datum_masks.dm index 160ff263b0b..29faad93ed7 100644 --- a/modular_nova/modules/loadouts/loadout_items/loadout_datum_masks.dm +++ b/modular_nova/modules/loadouts/loadout_items/loadout_datum_masks.dm @@ -49,6 +49,10 @@ GLOBAL_LIST_INIT(loadout_masks, generate_loadout_items(/datum/loadout_item/mask) name = "Skull Bandana" item_path = /obj/item/clothing/mask/bandana/skull +/datum/loadout_item/mask/facescarf + name = "Facescarf" + item_path = /obj/item/clothing/mask/facescarf + /* * BALACLAVAS */ @@ -142,6 +146,10 @@ GLOBAL_LIST_INIT(loadout_masks, generate_loadout_items(/datum/loadout_item/mask) name = "Plague Doctor Mask" item_path = /obj/item/clothing/mask/gas/plaguedoctor +/datum/loadout_item/mask/rebellion + name = "Rebellion Mask" + item_path = /obj/item/clothing/mask/rebellion + /datum/loadout_item/mask/monkey name = "Monkey Mask" item_path = /obj/item/clothing/mask/gas/monkeymask @@ -150,6 +158,10 @@ GLOBAL_LIST_INIT(loadout_masks, generate_loadout_items(/datum/loadout_item/mask) name = "Owl Mask" item_path = /obj/item/clothing/mask/gas/owl_mask +/datum/loadout_item/mask/kitsune + name = "Kitsune Mask" + item_path = /obj/item/clothing/mask/kitsune + /datum/loadout_item/mask/joy name = "Joy Mask" item_path = /obj/item/clothing/mask/joy @@ -166,7 +178,6 @@ GLOBAL_LIST_INIT(loadout_masks, generate_loadout_items(/datum/loadout_item/mask) name = "Balaclava" item_path = /obj/item/clothing/mask/balaclava - /* * DONATOR */ @@ -174,7 +185,6 @@ GLOBAL_LIST_INIT(loadout_masks, generate_loadout_items(/datum/loadout_item/mask) /datum/loadout_item/mask/donator donator_only = TRUE - /datum/loadout_item/mask/donator/nightlight_mask/alldono name = "Commercial FIR-36 Rebreather" item_path = /obj/item/clothing/mask/gas/nightlight/alldono diff --git a/modular_nova/modules/loadouts/loadout_items/loadout_datum_neck.dm b/modular_nova/modules/loadouts/loadout_items/loadout_datum_neck.dm index df9f0c69c27..2ad73df23ca 100644 --- a/modular_nova/modules/loadouts/loadout_items/loadout_datum_neck.dm +++ b/modular_nova/modules/loadouts/loadout_items/loadout_datum_neck.dm @@ -271,6 +271,16 @@ GLOBAL_LIST_INIT(loadout_necks, generate_loadout_items(/datum/loadout_item/neck) item_path = /obj/item/clothing/neck/mantle/capmantle restricted_roles = list(JOB_CAPTAIN) +/datum/loadout_item/neck/mantle_chap + name = "Bishop's Cloak" + item_path = /obj/item/clothing/neck/chaplain + restricted_roles = list(JOB_CHAPLAIN) + +/datum/loadout_item/neck/mantle_bchap + name = "Bishop's Cloak (Black)" + item_path = /obj/item/clothing/neck/chaplain/black + restricted_roles = list(JOB_CHAPLAIN) + /* * MISC */ @@ -287,16 +297,6 @@ GLOBAL_LIST_INIT(loadout_necks, generate_loadout_items(/datum/loadout_item/neck) name = "MODlink Scryer" item_path = /obj/item/clothing/neck/link_scryer/loaded -/datum/loadout_item/neck/holobadge - name = "Holobadge" - item_path = /obj/item/clothing/accessory/badge/holo - restricted_roles = list(JOB_HEAD_OF_SECURITY, JOB_SECURITY_OFFICER, JOB_WARDEN, JOB_DETECTIVE, JOB_CORRECTIONS_OFFICER) - -/datum/loadout_item/neck/holobadge_cord - name = "Holobadge with Lanyard" - item_path = /obj/item/clothing/accessory/badge/holo/cord - restricted_roles = list(JOB_HEAD_OF_SECURITY, JOB_SECURITY_OFFICER, JOB_WARDEN, JOB_DETECTIVE, JOB_CORRECTIONS_OFFICER) - /* * DONATOR */ diff --git a/modular_nova/modules/loadouts/loadout_items/loadout_datum_pocket.dm b/modular_nova/modules/loadouts/loadout_items/loadout_datum_pocket.dm index da283f05b73..0055019bbae 100644 --- a/modular_nova/modules/loadouts/loadout_items/loadout_datum_pocket.dm +++ b/modular_nova/modules/loadouts/loadout_items/loadout_datum_pocket.dm @@ -38,8 +38,7 @@ GLOBAL_LIST_INIT(loadout_pocket_items, generate_loadout_items(/datum/loadout_ite id_card.forceMove(wallet) if(equipper.back) - var/list/backpack_stuff = list() - equipper.back.atom_storage?.return_inv(backpack_stuff, FALSE) + var/list/backpack_stuff = equipper.back.atom_storage?.return_inv(FALSE) for(var/obj/item/thing in backpack_stuff) if(wallet.contents.len >= 3) break @@ -117,6 +116,10 @@ GLOBAL_LIST_INIT(loadout_pocket_items, generate_loadout_items(/datum/loadout_ite name = "Personal AI Device" item_path = /obj/item/pai_card +/datum/loadout_item/pocket_items/link_scryer + name = "MODlink Scryer" + item_path = /obj/item/clothing/neck/link_scryer/loaded + /datum/loadout_item/pocket_items/cigarettes name = "Cigarette Pack" item_path = /obj/item/storage/fancy/cigarettes @@ -201,6 +204,14 @@ GLOBAL_LIST_INIT(loadout_pocket_items, generate_loadout_items(/datum/loadout_ite 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 + /datum/loadout_item/pocket_items/ingredients name = "Wildcard Ingredient Box" item_path = /obj/item/storage/box/ingredients/wildcard diff --git a/modular_nova/modules/loadouts/loadout_items/loadout_datum_shoes.dm b/modular_nova/modules/loadouts/loadout_items/loadout_datum_shoes.dm index 71d665a904e..8f630213683 100644 --- a/modular_nova/modules/loadouts/loadout_items/loadout_datum_shoes.dm +++ b/modular_nova/modules/loadouts/loadout_items/loadout_datum_shoes.dm @@ -42,6 +42,10 @@ GLOBAL_LIST_INIT(loadout_shoes, generate_loadout_items(/datum/loadout_item/shoes name = "Recolorable Jackboots" item_path = /obj/item/clothing/shoes/jackboots/recolorable +/datum/loadout_item/shoes/jackboots/frontier + name = "Heavy Frontier Boots" + item_path = /obj/item/clothing/shoes/jackboots/frontier_colonist + /* * MISC BOOTS */ @@ -219,6 +223,10 @@ GLOBAL_LIST_INIT(loadout_shoes, generate_loadout_items(/datum/loadout_item/shoes name = "Roller Skates" item_path = /obj/item/clothing/shoes/wheelys/rollerskates +/datum/loadout_item/shoes/wheelys + name = "Wheely-Heels" + item_path = /obj/item/clothing/shoes/wheelys + /datum/loadout_item/shoes/jingleshoes name = "Jester Shoes" item_path = /obj/item/clothing/shoes/jester_shoes diff --git a/modular_nova/modules/loadouts/loadout_items/loadout_datum_suit.dm b/modular_nova/modules/loadouts/loadout_items/loadout_datum_suit.dm index c807eba9e79..3684bf100aa 100644 --- a/modular_nova/modules/loadouts/loadout_items/loadout_datum_suit.dm +++ b/modular_nova/modules/loadouts/loadout_items/loadout_datum_suit.dm @@ -346,8 +346,8 @@ GLOBAL_LIST_INIT(loadout_exosuits, generate_loadout_items(/datum/loadout_item/su item_path = /obj/item/clothing/suit/toggle/trackjacket /datum/loadout_item/suit/croptop - name = "Black Crop Top Turtleneck" - item_path = /obj/item/clothing/suit/croptop + name = "Crop Top Turtleneck" + item_path = /obj/item/clothing/suit/jacket/croptop /* * FLANNELS @@ -390,6 +390,10 @@ GLOBAL_LIST_INIT(loadout_exosuits, generate_loadout_items(/datum/loadout_item/su name = "Blue Trenchcoat" item_path = /obj/item/clothing/suit/frenchtrench +/datum/loadout_item/suit/frontiertrench + name = "Frontier Trenchcoat" + item_path = /obj/item/clothing/suit/jacket/frontier_colonist + /datum/loadout_item/suit/cossak name = "Ukrainian Coat" item_path = /obj/item/clothing/suit/cossack @@ -430,6 +434,14 @@ GLOBAL_LIST_INIT(loadout_exosuits, generate_loadout_items(/datum/loadout_item/su name = "Colourable Leather Jacket" item_path = /obj/item/clothing/suit/jacket/leather/colourable +/datum/loadout_item/suit/frontierjacket/short + name = "Frontier Jacket (Short)" + item_path = /obj/item/clothing/suit/jacket/frontier_colonist/short + +/datum/loadout_item/suit/frontierjacket/short/medical + name = "Frontier Medical Jacket (Short)" + item_path = /obj/item/clothing/suit/jacket/frontier_colonist/medical + /datum/loadout_item/suit/woolcoat name = "Leather Overcoat" item_path = /obj/item/clothing/suit/woolcoat @@ -607,6 +619,15 @@ GLOBAL_LIST_INIT(loadout_exosuits, generate_loadout_items(/datum/loadout_item/su item_path = /obj/item/clothing/suit/british_officer restricted_roles = list(JOB_WARDEN, JOB_DETECTIVE, JOB_SECURITY_OFFICER, JOB_HEAD_OF_SECURITY, JOB_CORRECTIONS_OFFICER) +/datum/loadout_item/suit/peacekeeper_jacket + name = "Peacekeeper Jacket" + item_path = /obj/item/clothing/suit/armor/vest/peacekeeper/jacket + restricted_roles = list(JOB_WARDEN, JOB_DETECTIVE, JOB_SECURITY_OFFICER, JOB_HEAD_OF_SECURITY, JOB_CORRECTIONS_OFFICER) + +/datum/loadout_item/suit/peacekeeper_jacket/badge + name = "Badged Peacekeeper Jacket" + item_path = /obj/item/clothing/suit/armor/vest/peacekeeper/jacket/badge + /datum/loadout_item/suit/offdep_jacket name = "Off-Department Jacket" item_path = /obj/item/clothing/suit/toggle/jacket/assistant @@ -715,3 +736,35 @@ GLOBAL_LIST_INIT(loadout_exosuits, generate_loadout_items(/datum/loadout_item/su /datum/loadout_item/suit/heart_sweater name = "Colourable Heart Sweater" item_path = /obj/item/clothing/suit/heart_sweater + +/datum/loadout_item/suit/crop_jacket + name = "Colourable Crop-Top Jacket" + item_path = /obj/item/clothing/suit/crop_jacket + +/* +* CHAPLAIN +*/ + +/datum/loadout_item/suit/chap_nun + name = "Nun's Habit" + item_path = /obj/item/clothing/suit/chaplainsuit/nun + +/datum/loadout_item/suit/chap_holiday + name = "Chaplain's Holiday Robe" + item_path = /obj/item/clothing/suit/chaplainsuit/holidaypriest + +/datum/loadout_item/suit/chap_brownmonk + name = "Monk's Brown Habit" + item_path = /obj/item/clothing/suit/hooded/chaplainsuit/monkhabit + +/datum/loadout_item/suit/chap_eastmonk + name = "Eastern Monk's Robe" + item_path = /obj/item/clothing/suit/chaplainsuit/monkrobeeast + +/datum/loadout_item/suit/chap_shrinehand + name = "Shrinehand Robe" + item_path = /obj/item/clothing/suit/chaplainsuit/shrinehand + +/datum/loadout_item/suit/chap_blackmonk + name = "Monk's Black Habit" + item_path = /obj/item/clothing/suit/chaplainsuit/habit diff --git a/modular_nova/modules/loadouts/loadout_items/pizzabox.dm b/modular_nova/modules/loadouts/loadout_items/pizzabox.dm new file mode 100644 index 00000000000..fe2c6c20903 --- /dev/null +++ b/modular_nova/modules/loadouts/loadout_items/pizzabox.dm @@ -0,0 +1,35 @@ +/// Handpicked list of various pizzas and "pizzas" to make sure it's both 'safe' (human-edible) and doesn't spawn the base type like the bomb pizza can. +#define EDIBLE_PIZZA_LIST list( \ + /obj/item/food/pizza/margherita, \ + /obj/item/food/pizza/meat, \ + /obj/item/food/pizza/mushroom, \ + /obj/item/food/pizza/vegetable, \ + /obj/item/food/pizza/donkpocket, \ + /obj/item/food/pizza/dank, \ + /obj/item/food/pizza/sassysage, \ + /obj/item/food/pizza/pineapple, \ + /obj/item/food/pizza/mothic_margherita, \ + /obj/item/food/pizza/mothic_firecracker, \ + /obj/item/food/pizza/mothic_five_cheese, \ + /obj/item/food/pizza/mothic_white_pie, \ + /obj/item/food/pizza/mothic_pesto, \ + /obj/item/food/pizza/mothic_garlic, \ + /obj/item/food/pizza/flatbread/rustic, \ + /obj/item/food/pizza/flatbread/italic, \ + /obj/item/food/pizza/flatbread/zmorgast, \ + /obj/item/food/pizza/flatbread/fish, \ + /obj/item/food/pizza/flatbread/mushroom, \ + /obj/item/food/pizza/flatbread/nutty, \ +) + +/obj/item/pizzabox/random + boxtag = "Randy's Surprise" + boxtag_set = TRUE + +/obj/item/pizzabox/random/Initialize(mapload) + . = ..() + if(!pizza) + var/random_pizza = pick(EDIBLE_PIZZA_LIST) + pizza = new random_pizza(src) + +#undef EDIBLE_PIZZA_LIST diff --git a/modular_nova/modules/loadouts/loadout_items/under/loadout_datum_under.dm b/modular_nova/modules/loadouts/loadout_items/under/loadout_datum_under.dm index 2c1ecd8496d..9618f48a371 100644 --- a/modular_nova/modules/loadouts/loadout_items/under/loadout_datum_under.dm +++ b/modular_nova/modules/loadouts/loadout_items/under/loadout_datum_under.dm @@ -51,6 +51,10 @@ GLOBAL_LIST_INIT(loadout_miscunders, generate_loadout_items(/datum/loadout_item/ item_path = /obj/item/clothing/under/color/jumpskirt/random additional_tooltip_contents = list(TOOLTIP_RANDOM_COLOR) +/datum/loadout_item/under/jumpsuit/frontier + name = "Frontier Jumpsuit" + item_path = /obj/item/clothing/under/frontier_colonist + /datum/loadout_item/under/jumpsuit/rainbow name = "Rainbow Jumpsuit" item_path = /obj/item/clothing/under/color/rainbow @@ -62,6 +66,11 @@ GLOBAL_LIST_INIT(loadout_miscunders, generate_loadout_items(/datum/loadout_item/ /datum/loadout_item/under/jumpsuit/akula_wetsuit name = "Shoredress Wetsuit" item_path = /obj/item/clothing/under/akula_wetsuit + restricted_species = list(SPECIES_AKULA) + +/datum/loadout_item/under/jumpsuit/refit_wetsuit + name = "Refitted Shoredress Wetsuit" + item_path = /obj/item/clothing/under/akula_wetsuit/refit /datum/loadout_item/under/jumpsuit/impcap name = "Captain's Naval Jumpsuit" @@ -132,6 +141,14 @@ GLOBAL_LIST_INIT(loadout_miscunders, generate_loadout_items(/datum/loadout_item/ name = "Aerostatic Suit" item_path = /obj/item/clothing/under/rank/security/detective/kim +/datum/loadout_item/under/jumpsuit/sol_peacekeeper + name = "Sol Peacekeeper Uniform" + item_path = /obj/item/clothing/under/sol_peacekeeper + +/datum/loadout_item/under/jumpsuit/sol_emt + name = "Sol Emergency Medical Uniform" + item_path = /obj/item/clothing/under/sol_emt + /datum/loadout_item/under/jumpsuit/paramed_light name = "Light Paramedic Uniform" item_path = /obj/item/clothing/under/rank/medical/paramedic/nova/light @@ -152,16 +169,6 @@ GLOBAL_LIST_INIT(loadout_miscunders, generate_loadout_items(/datum/loadout_item/ name = "Ridiculous Scientist Outfit" item_path = /obj/item/clothing/under/rank/rnd/scientist/nova/hlscience -/datum/loadout_item/under/jumpsuit/rd_jumpsuit - name = "Research Director's Jumpsuit" - item_path = /obj/item/clothing/under/rank/rnd/research_director/nova/jumpsuit - restricted_roles = list(JOB_RESEARCH_DIRECTOR) - -/datum/loadout_item/under/jumpsuit/rd_jumpskirt - name = "Research Director's Jumpskirt" - item_path = /obj/item/clothing/under/rank/rnd/research_director/nova/jumpsuit/skirt - restricted_roles = list(JOB_RESEARCH_DIRECTOR) - /datum/loadout_item/under/jumpsuit/cargo name = "Cargo Technician's Jumpsuit" item_path = /obj/item/clothing/under/rank/cargo/tech @@ -462,17 +469,25 @@ GLOBAL_LIST_INIT(loadout_miscunders, generate_loadout_items(/datum/loadout_item/ item_path = /obj/item/clothing/under/maid_costume /datum/loadout_item/under/miscellaneous/yukata - name = "Recolorable Yukata" + name = "Yukata" item_path = /obj/item/clothing/under/costume/nova/yukata /datum/loadout_item/under/miscellaneous/qipao_black - name = "Recolorable Qipao" + name = "Qipao" item_path = /obj/item/clothing/under/costume/nova/qipao +/datum/loadout_item/under/miscellaneous/qipao_recolorable + name = "Qipao, Custom Trim" + item_path = /obj/item/clothing/under/costume/nova/qipao/customtrim + /datum/loadout_item/under/miscellaneous/cheongsam - name = "Recolorable Cheongsam" + name = "Cheongsam" item_path = /obj/item/clothing/under/costume/nova/cheongsam +/datum/loadout_item/under/miscellaneous/cheongsam_recolorable + name = "Cheongsam, Custom Trim" + item_path = /obj/item/clothing/under/costume/nova/cheongsam/customtrim + /datum/loadout_item/under/miscellaneous/kimono name = "Fancy Kimono" item_path = /obj/item/clothing/under/costume/nova/kimono @@ -790,6 +805,14 @@ GLOBAL_LIST_INIT(loadout_miscunders, generate_loadout_items(/datum/loadout_item/ name = "Recolorable Formal Suitskirt" item_path = /obj/item/clothing/under/suit/nova/recolorable/skirt +/datum/loadout_item/under/formal/recolorable_suit/casual + name = "Office Casual Suit" + item_path = /obj/item/clothing/under/suit/nova/recolorable/casual + +/datum/loadout_item/under/formal/recolorable_suit/executive + name = "Executive Casual Suit" + item_path = /obj/item/clothing/under/suit/nova/recolorable/executive + /datum/loadout_item/under/formal/trek_command name = "Trekkie Command Uniform" item_path = /obj/item/clothing/under/trek/command @@ -826,6 +849,18 @@ GLOBAL_LIST_INIT(loadout_miscunders, generate_loadout_items(/datum/loadout_item/ name = "Trekkie ENT Medsci Uniform" item_path = /obj/item/clothing/under/trek/medsci/ent +/datum/loadout_item/under/formal/trek_voy_command + name = "Trekkie VOY Command Uniform" + item_path = /obj/item/clothing/under/trek/command/voy + +/datum/loadout_item/under/formal/trek_voy_engsec + name = "Trekkie VOY Engsec Uniform" + item_path = /obj/item/clothing/under/trek/engsec/voy + +/datum/loadout_item/under/formal/trek_voy_medsci + name = "Trekkie VOY Medsci Uniform" + item_path = /obj/item/clothing/under/trek/medsci/voy + /datum/loadout_item/under/formal/the_q name = "French Marshall's Uniform" item_path = /obj/item/clothing/under/trek/q @@ -852,9 +887,13 @@ GLOBAL_LIST_INIT(loadout_miscunders, generate_loadout_items(/datum/loadout_item/ item_path = /obj/item/clothing/under/suit/nova/inferno/beeze /datum/loadout_item/under/formal/pencil - name = "Black Pencilskirt" + name = "Pencilskirt with Shirt" item_path = /obj/item/clothing/under/suit/nova/pencil +/datum/loadout_item/under/formal/pencil/noshirt + name = "Pencilskirt" + item_path = /obj/item/clothing/under/suit/nova/pencil/noshirt + /datum/loadout_item/under/formal/pencil/black_really name = "Executive Pencilskirt" item_path = /obj/item/clothing/under/suit/nova/pencil/black_really @@ -872,9 +911,13 @@ GLOBAL_LIST_INIT(loadout_miscunders, generate_loadout_items(/datum/loadout_item/ item_path = /obj/item/clothing/under/suit/nova/pencil/burgandy /datum/loadout_item/under/formal/pencil/checkered - name = "Checkered Pencilskirt" + name = "Checkered Pencilskirt with Shirt" item_path = /obj/item/clothing/under/suit/nova/pencil/checkered +/datum/loadout_item/under/formal/pencil/checkered/noshirt + name = "Checkered Pencilskirt" + item_path = /obj/item/clothing/under/suit/nova/pencil/checkered/noshirt + /datum/loadout_item/under/formal/pencil/tan name = "Tan Pencilskirt" item_path = /obj/item/clothing/under/suit/nova/pencil/tan diff --git a/modular_nova/modules/loadouts/loadout_ui/loadout_outfit_helpers.dm b/modular_nova/modules/loadouts/loadout_ui/loadout_outfit_helpers.dm index 86f0598c5f6..6866ec98659 100644 --- a/modular_nova/modules/loadouts/loadout_ui/loadout_outfit_helpers.dm +++ b/modular_nova/modules/loadouts/loadout_ui/loadout_outfit_helpers.dm @@ -21,7 +21,10 @@ * visuals_only - whether we call special equipped procs, or if we just look like we equipped it * preference_source - the preferences of the thing we're equipping */ -/mob/living/carbon/human/proc/equip_outfit_and_loadout(datum/outfit/outfit, datum/preferences/preference_source, visuals_only = FALSE, datum/job/equipping_job) +/mob/living/proc/equip_outfit_and_loadout(datum/outfit/outfit, datum/preferences/preference_source = GLOB.preference_entries_by_key[ckey], visuals_only = FALSE, datum/job/equipping_job) + return + +/mob/living/carbon/human/equip_outfit_and_loadout(datum/outfit/outfit, datum/preferences/preference_source = GLOB.preference_entries_by_key[ckey], visuals_only = FALSE, datum/job/equipping_job) if (!preference_source) equipOutfit(outfit, visuals_only) // no prefs for loadout items, but we should still equip the outfit. return FALSE @@ -43,21 +46,8 @@ var/obj/item/storage/briefcase/empty/briefcase = new(loc) for(var/datum/loadout_item/item as anything in loadout_datums) - if(item.restricted_roles && equipping_job && !(equipping_job.title in item.restricted_roles)) - if(client) - to_chat(src, span_warning("You were unable to get a loadout item([initial(item.item_path.name)]) due to job restrictions!")) - continue - - if(item.blacklisted_roles && equipping_job && (equipping_job.title in item.blacklisted_roles)) - if(client) - to_chat(src, span_warning("You were unable to get a loadout item([initial(item.item_path.name)]) due to job blacklists!")) - continue - - if(item.restricted_species && !(dna.species.id in item.restricted_species)) - if(client) - to_chat(src, span_warning("You were unable to get a loadout item ([initial(item.item_path.name)]) due to species restrictions!")) + if (!item.can_be_applied_to(src, preference_source, equipping_job)) continue - new item.item_path(briefcase) briefcase.name = "[preference_source.read_preference(/datum/preference/name/real_name)]'s travel suitcase" @@ -65,19 +55,7 @@ put_in_hands(briefcase) else for(var/datum/loadout_item/item as anything in loadout_datums) - if(item.restricted_roles && equipping_job && !(equipping_job.title in item.restricted_roles)) - if(client) - to_chat(src, span_warning("You were unable to get a loadout item([initial(item.item_path.name)]) due to job restrictions!")) - continue - - if(item.blacklisted_roles && equipping_job && (equipping_job.title in item.blacklisted_roles)) - if(client) - to_chat(src, span_warning("You were unable to get a loadout item([initial(item.item_path.name)]) due to job blacklists!")) - continue - - if(item.restricted_species && !(dna.species.id in item.restricted_species)) - if(client) - to_chat(src, span_warning("You were unable to get a loadout item ([initial(item.item_path.name)]) due to species restrictions!")) + if (!item.can_be_applied_to(src, preference_source, equipping_job)) continue // Make sure the item is not overriding an important for life outfit item @@ -85,7 +63,6 @@ if(!outfit_important_for_life || !item.pre_equip_item(equipped_outfit, outfit_important_for_life, src, visuals_only)) item.insert_path_into_outfit(equipped_outfit, src, visuals_only, override_preference) - equipOutfit(equipped_outfit, visuals_only) for(var/datum/loadout_item/item as anything in loadout_datums) @@ -100,6 +77,15 @@ regenerate_icons() return TRUE +// cyborgs can wear hats from loadout +/mob/living/silicon/robot/equip_outfit_and_loadout(datum/outfit/outfit, datum/preferences/preference_source = GLOB.preference_entries_by_key[ckey], visuals_only = FALSE, datum/job/equipping_job) + var/list/loadout_datums = loadout_list_to_datums(preference_source?.loadout_list) + for (var/datum/loadout_item/head/item in loadout_datums) + if (!item.can_be_applied_to(src, preference_source, equipping_job)) + continue + place_on_head(new item.item_path) + break + /* * Takes a list of paths (such as a loadout list) * and returns a list of their singleton loadout item datums @@ -170,3 +156,52 @@ /obj/item/storage/briefcase/empty/PopulateContents() return + +// Cyborg loadouts (currently used for hats) +/mob/living/silicon/on_job_equipping(datum/job/equipping, datum/preferences/used_pref, client/player_client) + . = ..() + dress_up_as_job(equipping, FALSE, used_pref) + +// Cyborg loadouts (currently used for hats) +/mob/living/silicon/dress_up_as_job(datum/job/equipping, visual_only = FALSE, datum/preferences/used_pref) + . = ..() + equip_outfit_and_loadout(equipping.outfit, used_pref, visual_only, equipping) + +// originally made as a workaround the fact borgs lose their hats on module change, this +// is how borgs can pick up and drop hats + +// if a borg clicks a hat, they try to put it on +/obj/item/clothing/head/attack_robot_secondary(mob/living/silicon/robot/user, list/modifiers) + . = ..() + if (. != SECONDARY_ATTACK_CALL_NORMAL) + return + + if (!Adjacent(user)) + return + + balloon_alert(user, "picking up hat...") + if (!do_after(user, 3 SECONDS, src)) + return + if (QDELETED(src) || !Adjacent(user) || user.incapacitated()) + return + user.place_on_head(src) + balloon_alert(user, "picked up hat") + +// if a borg right clicks themself, they try to drop their hat +/mob/living/silicon/robot/attack_robot_secondary(mob/user, list/modifiers) + . = ..() + if (. != SECONDARY_ATTACK_CALL_NORMAL) + return + + if (user != src || isnull(hat)) + return + + balloon_alert(user, "dropping hat...") + if (!do_after(user, 3 SECONDS, src)) + return + if (QDELETED(src) || !Adjacent(user) || user.incapacitated() || isnull(hat)) + return + hat.forceMove(get_turf(src)) + hat = null + update_icons() + balloon_alert(user, "dropped hat") diff --git a/modular_nova/modules/mapping/code/areas/shuttles.dm b/modular_nova/modules/mapping/code/areas/shuttles.dm index a7ceb71ce5b..cf04a728e55 100644 --- a/modular_nova/modules/mapping/code/areas/shuttles.dm +++ b/modular_nova/modules/mapping/code/areas/shuttles.dm @@ -20,6 +20,7 @@ /area/shuttle/tarkon_driver name = "Tarkon Driver" + requires_power = TRUE /area/shuttle/trader/bridge name = "Trader Ship Bridge" diff --git a/modular_nova/modules/mapping/code/areas/space.dm b/modular_nova/modules/mapping/code/areas/space.dm index 3f6dc36ac43..737f9134f9b 100644 --- a/modular_nova/modules/mapping/code/areas/space.dm +++ b/modular_nova/modules/mapping/code/areas/space.dm @@ -145,32 +145,42 @@ //Port Tarkon +/area/ruin/space/has_grav/outdoors + outdoors = TRUE + /area/ruin/space/has_grav/port_tarkon name = "P-T Cryo-Storage" + icon = 'icons/area/areas_station.dmi' + icon_state = "cryo" /area/ruin/space/has_grav/port_tarkon/afthall name = "P-T Aft Hallway" + icon_state = "afthall" /area/ruin/space/has_grav/port_tarkon/forehall name = "P-T Fore Hallway" + icon_state = "forehall" /area/ruin/space/has_grav/port_tarkon/starboardhall name = "P-T Starboard Hallway" + icon_state = "starboardhall" /area/ruin/space/has_grav/port_tarkon/porthall name = "P-T Port Hallway" + icon_state = "porthall" /area/ruin/space/has_grav/port_tarkon/trauma name = "P-T Trauma Center" - icon_state = "medbay1" + icon_state = "med_central" /area/ruin/space/has_grav/port_tarkon/developement name = "P-T Developement Center" - icon_state = "research" + icon_state = "science" + area_flags = XENOBIOLOGY_COMPATIBLE | UNIQUE_AREA /area/ruin/space/has_grav/port_tarkon/comms name = "P-T Communication Center" - icon_state = "captain" + icon_state = "command" /area/ruin/space/has_grav/port_tarkon/power1 name = "P-T Solar Control" @@ -178,7 +188,7 @@ /area/ruin/space/has_grav/port_tarkon/centerhall name = "P-T Central Hallway" - icon_state = "hallC" + icon_state = "centralhall" /area/ruin/space/has_grav/port_tarkon/secoff name = "P-T Security Office" @@ -186,7 +196,7 @@ /area/ruin/space/has_grav/port_tarkon/atmos name = "P-T Atmospheric Center" - icon_state = "engine" + icon_state = "atmos" /area/ruin/space/has_grav/port_tarkon/kitchen name = "P-T Kitchen" @@ -198,15 +208,15 @@ /area/ruin/space/has_grav/port_tarkon/cargo name = "P-T Cargo Center" - icon_state = "cargo" + icon_state = "cargo_office" /area/ruin/space/has_grav/port_tarkon/mining name = "P-T Mining Office" - icon_state = "cargo" + icon_state = "mining_dock" /area/ruin/space/has_grav/port_tarkon/storage name = "P-T Warehouse" - icon_state = "cargo" + icon_state = "cargo_warehouse" /area/ruin/space/has_grav/port_tarkon/toolstorage name = "P-T Tool Storage" @@ -218,12 +228,13 @@ /area/ruin/space/has_grav/port_tarkon/dorms name = "P-T Dorms" - icon_state = "crew_quarters" + icon_state = "dorms" /area/solars/tarkon - name = "\improper P-T Solar Array" - icon_state = "solarsS" + name = "P-T Solar Array" + icon_state = "space_near" has_gravity = STANDARD_GRAVITY + outdoors = TRUE // Cargodise Lost Freighter diff --git a/modular_nova/modules/mapping/code/fluff.dm b/modular_nova/modules/mapping/code/fluff.dm index 35a587d85f9..b334a66f480 100644 --- a/modular_nova/modules/mapping/code/fluff.dm +++ b/modular_nova/modules/mapping/code/fluff.dm @@ -7,10 +7,6 @@ desc = "An ancient access card with the words \"Cutter's Pod\" printed on in big bold letters. It'll be a miracle if this still works." trim = /datum/id_trim/away/old/eng -/obj/item/card/id/away/tarkon - name = "Tarkon visitor's pass" - desc = "A dust-collected visitors pass, A small tagline reading \"Port Tarkon, The first step to Civilian Partnership in Space Homesteading\"." - trim = /datum/id_trim/away/tarkon /* ----------------- Lore ----------------- */ //Tape subtype for adding ruin lore -- the variables below are the ones you need to change @@ -85,146 +81,10 @@ 8 = 380 ) -/obj/item/tape/ruins/tarkon //A passing message from the late officer. - name = "dusty tape" - icon_state = "tape_greyscale" - desc = "An old, dusty tape with a small, faded stamp, reading \"An officer's final order.\"... Should definitely be flipped if not being read when played." - - used_capacity = 380 - storedinfo = list( - 1 = "The universal recorder says, \"Recording started.\"", - 2 = "Officer ??? sighs, \"Officer's Log, Year Twenty-five-... oh to hell with it...\"", - 3 = "Officer ??? says, \"I.. Did the best that i could for them... The crew... The ones that were awake, that is...\"", - 4 = "Officer ??? sighs, \"The ones that are still asleep... They had a chance... Those in the understorage are still safe... The RTG's were disconnected topside so they would survive...\"", - 5 = "Officer ??? sniffles, \"... Overseer Tavus... I... did what I could for them... Asked the crew to board the cargo shuttle... Leave the main shuttle if the sleepers activated...\"", - 6 = "Officer ??? groans, \"God... Those.. Things. Aliens... They got Tavus... Severed his leg clean off... Told him that.. We'd clean out the port... And he'd wake up in the trauma bay...\"", - 7 = "Officer ??? coughs then calmly states, \"... If.. Anyone wakes up... If the Ensign... Is alive... They're in charge now... The.. The Tarkon Drill's designs are... In the solars room, in a hidden floorsafe... The... The future of Tarkon Industries... Is in those designs...\"", - 8 = "The universal recorder says, \"Recording stopped.\"" - ) - timestamp = list( - 1 = 0, - 2 = 30, - 3 = 130, - 4 = 180, - 5 = 230, - 6 = 280, - 7 = 330, - 8 = 380 - ) - -/obj/item/tape/ruins/tarkon/safe //A tape recorded by the foreman. - icon_state = "tape_greyscale" - desc = "An old tape with a label, \"Exchange with the Science Leader\"... Should definitely be flipped if not being read when played." - - used_capacity = 380 - storedinfo = list( - 1 = "The universal recorder says, \"Recording started.\"", - 2 = "Foreman ??? sighs, \"Right... Scientist Arkus?\"", - 3 = "Scientist Arkus says, \"Ah, Foreman Verok... Come, We already got a spot chosen, a rather safe one to keep it..\"", - 4 = "Foreman Verok grumbles, \"... Wait, Right next to that egg... Thing?\"", - 5 = "Scientist Arkus pauses then says sharply, \"... Is there a problem? Its been dormant ever since we've been here, If it was going to come alive it would have done so while putting the tiling down. Besides... I got lunch to attend...\"", - 6 = "Foreman Verok groans, \"Right... Right I'll.. Get to work on it then... Just keep an ear out...\"", - 7 = "Foreman Verok grumbles, \"Right... Calm down, Verok... Place the floor safe, scoot the tile back in place... And afterwards grab some money from the one by the financing console under the table... I dont think Tavus will notice an extra few credits missing...\"", - 8 = "The universal recorder says, \"Recording stopped.\"" - ) - timestamp = list( - 1 = 0, - 2 = 30, - 3 = 130, - 4 = 180, - 5 = 230, - 6 = 280, - 7 = 330, - 8 = 380 - ) - -/obj/item/tape/ruins/tarkon/celebration //A tape recorded by the ensign during the mid-construction celebration. - icon_state = "tape_greyscale" - desc = "An old tape with a label, \"Celebrations were a mistake\", writen shakily in red pen.. Should definitely be flipped if not being read when played." - - used_capacity = 380 - storedinfo = list( - 1 = "The universal recorder says, \"Recording started.\"", - 2 = "Drinks can be heard clinking together, busy chatter of a party drowning out most noises", - 3 = "Ensign ??? says, \"Hey, HEY! Everyone! Shut up for a toast!\"", - 4 = "The boistrous cheering can be heard slowly calming down to an eerie silence.", - 5 = "Ensign ??? clears their throat then starts to announce, \"As you've all known.. Its been years since this project started... Bright minds and talented engineers hand in hand working on this project...\"", - 6 = "Ensign ??? says pointedly, \"And after five long years, Tarkon Industries has had its first success. The driver finding a suitable asteroid, And making its mark known by carving out the current docking bay for our transport.\"", - 7 = "Ensign ??? announces, \"Yesterday, We've worked, Toiled in the rock and sand of what is our new home... But today! We celebrate, For Tarkons first success, And for a bright future in the next century! The Twenty-Sixth century is looking bright for us!\"", - 8 = "The universal recorder says, \"Recording stopped.\"" - ) - timestamp = list( - 1 = 0, - 2 = 30, - 3 = 130, - 4 = 180, - 5 = 230, - 6 = 280, - 7 = 330, - 8 = 380 - ) /* ----------------- Fluff/Paper ----------------- */ -/obj/item/paper/fluff/ruins/tarkon - name = "paper - 'Port Integrity Printout'" - default_raw_text = "*Warning, Integrity Compromised*

    Automated Integrity Printout, If printout is inconsistent with results, Please recalibrate sensors.
    1. Aft Hallway: Integrity Nominal.
    2. Fore Hallway: Integrity Compromised. Cause unknown.
    3. Port Hallway: Integrity Compromised, Breached into space.
    4. Starboard Hallway: Integrity Nominal.

    Please inform any awake maintenance crew and standby for assistance." - -/obj/item/paper/fluff/ruins/tarkon/atmosincident - name = "paper - 'What in gods name did you do'" - default_raw_text = "WHAT IN THE FUCK DID YOU GUYS DO?

    I go away on a material run with the miners, and the moment i re-entered the port, There's a loud bang and an air warning.

    YOU WILL ALL GET YOUR ASSES TO THE STAFF HALL BEFORE ANY OF THIS GETS CLEANED UP." - -/obj/item/paper/fluff/ruins/tarkon/coupplans - name = "paper - 'Palm of our hands...'" - default_raw_text = "It seems the plan went acordingly, Arkus. Specialist Karleigh took the prototype plates as a reassurance we'll get her a suit, and just like a fish, the bug was excellent bait.

    They were talking about a safe somewhere in security, now we just need to get those... \"Special\" shells to her and watch her shotgun turn into a pipebomb. Rest of security will be in a panic, all we'll need to do is convince the foreman to play along, and i'm sure this welder will do nicely." - -/obj/item/paper/fluff/ruins/tarkon/designdoc - name = "paper - 'Port Tarkon Design Instructions'" - default_raw_text = "Hello, great engineers and builders!

    Just so we're all clear, Everyone within Tarkon's Premises that is labeled as an Engineer is to read and understand these design notes.

    - A red delivery marking is to denote the location of a new door for a room.
    - A blue delivery marking is to denote the location of a Firelock (We dont want an incident with the turbine to go port-wide...)
    - A white delivery marking is to denote a new sectioning wall/window.
    A yellow delivery marking is to denote a temporary firelock line to allow expansion.

    I hope that our most talented hands will not fail us." - -/obj/item/paper/fluff/ruins/tarkon/transmission //hints towards update 2.0 - name = "paper - 'Transmission Received...'" - default_raw_text = "

    Transmission Received


    Transmitter: Tarkon Headquarters.
    Date: 11/7/2501.

    Message Received:


    We regret to inform you that our current investment in the Tarkon Driver has been notably risen with the reported state. We have sent a Specialist to come deal with the situation, And that any and all living employees of Tarkon Industries are advised to do their best to fight back any current infestations to the best of their abilities. If and upon the specialist's arrival any crew members able to hold a gun are required to communicate and work with the specialist to their command. They outrank any surviving Ensigns and are to be treated as if my own commands.

    Signed,

    Security General Leith Hardston

    " - -/obj/item/paper/fluff/ruins/tarkon/goals - name = "paper - 'Tarkon Industries'" - default_raw_text = "

    Tarkon Industries Informative Guide



    We at Tarkon Industries hope to create a long guided future for the average homesteader, creating a living space for the average spacer to settle down in, create future investments for traders, or even up to get people to make large communities among asteroid belts.

    Our greatest engineers have been working day, night, morning and evenings to create a stable, structurally sound system to start implanting stations, living areas and ports upon asteroids and planetoids too small to sustain life on the same level that of a goldie-lock planet.

    Having great pride in our heritage we have taken our industrious, communicative past to create a future for our kin, Inspiring better feats, further research and larger projects upon future generations.

    Looking to help? Then you can visit us at the Tarkon Industries Headquarters, The active co-ordinants can be detected starting around the Orion Belt, and we are actively accepting bright minds and great workers to help us.


    Tarkon Industries: Building the future, nail by nail, asteroid by asteroid. 2456-2500(c)" - -/obj/item/paper/fluff/ruins/tarkon/vaulter - name = "paper - 'Tarkon Vaulter'" - default_raw_text = "

    Tarkon Industries Designs:


    Tarkon Vaulter Prototype



    Designed HEAVILY after the Driver, The vaulter is of a similar concept, but at a much larger scale. Designed to work on larger planetoids and even moon and similar planetary satellites, The Tarkon Vaulter is another step towards Space Homesteading. Where the Driver and Vaulter split, however, is where the construction system lies. With the Vaulter, The construction is much more vertical in construction, starting by usually creating a cavern underneath its landing where a main room is constructed, and shortly after an elevator is deployed.

    Where the Driver relies on early construction of an additional power system, The vaulter is planned to have a much higher RTG count so that it may power the initial base construction, But the cost of which being making it much larger and with a much higher material storage needed so it can construct a decent area of operation on its first trip. With the Driver in its early testing phase, We are hoping to better tune its designs before shifting attention towards the driver, which have high hopes to enter testing in the early twenty-sixth century" - -/obj/item/paper/fluff/ruins/tarkon/driverpitch - name = "paper - 'Tarkon Driver'" - default_raw_text = "

    Tarkon Industries Designs:


    Tarkon Driver Prototype



    Seeing the success of space-based mining, We at Tarkon Industries wish to expand on the thought of a drill to a much larger goal, By mounting a drill and several cams to secur it in place, The Driver is designed to implant itself within the side of a large asteroid or small planetoid, Drilling out an area before the drill can be expanded out and slowly recycled to start construction of an operation base.

    With the first area dug the first priority should be an additional energy-producing area, or a portable generator to help fuel energy for future mining, Which should be done to slowly hollow out the planetoid and constructing walls, floors and ceilings. After the driver is properly cammed in place, the back part of it can be unhitched, allowing it to act as a ferry shuttle for materials, workforce or tools.

    With our first Tarkon Driver being ready to test in 2479, We have found a suitable asteroid, and hope to make connection to it by the start of 2480." - -/obj/item/paper/fluff/ruins/tarkon/detain - name = "paper - 'Tarkon Detainment Record'" - default_raw_text = "

    Tarkon Industries Detainment Record:



    Detainee:Arcus Vilkov
    Rank/Occupation:Junior Scientist
    Reason: Attemptive sabotage of a working generator

    Detainee:Tilber Sinns
    Rank/Occupation:Apprentice Miner
    Reason:Detonated a volatile rock cluster close to a wall, Causing 3 hours of reconstruction.

    Detainee:Gearalt Antonov
    Rank/Occupation:Engineer Specialist
    Reason:Public Intoxication

    Detainee:Minke Arntz
    Rank/Occupation:Field Researcher
    Reason:Deconstructed an M6 to study the effects of space dust on ballistic firearms.

    Detainee:Renanta McCrory
    Rank/Occupation:Medical Surgeon
    Reason:Medical Malpractice, Swapped the thumbs of a patient with their big toes. Removed from Premises." - -/obj/item/paper/fluff/ruins/tarkon/defcon5 - name = "paper - 'Tarkon Defcon Alert'" - default_raw_text = "

    Tarkon Defcon Level: 5



    Seems everyone partied too hard


    Company Automated reminder to clean up and get back to work. You aint gonna earn a dime if you dont work on company time." - -/obj/item/paper/fluff/ruins/tarkon/defcon4 - name = "paper - 'Tarkon Defcon Alert'" - default_raw_text = "

    Tarkon Defcon Level: 4



    Everthing alright there?


    Port has been struck by a rather large meteor from the port side. Be careful of any local carp population, they tend to make dens everywhere they can." - -/obj/item/paper/fluff/ruins/tarkon/defcon3 - name = "paper - 'Tarkon Defcon Alert'" - default_raw_text = "

    Tarkon Defcon Level: 3



    Signals been dead, Automated response sent


    The port has seem to gained some new residents... and not friendly ones. Do your best to survive, Reclaimers are being geared up to be sent if the GPS goes out" - -/obj/item/paper/fluff/ruins/tarkon/defcon2 - name = "paper - 'Tarkon Defcon Alert'" - default_raw_text = "

    Tarkon Defcon Level: 2



    T#E V3IL H@S B3EN BR0K#N


    $IGN@L L0ST. #OP3 LOST. N0 O%E 1S COM1NG." - -/obj/item/paper/crumpled/fluff/tarkon - name = "Crumpled note" - default_raw_text = "Look, i dont know where the fuck that suit was found, but i have a hard time believing it was made by him entirely. I already know his less than ethical obtainment methods, But that piece of tech? Its a blasted shame he's just using it for hauling crates..." -/obj/item/paper/crumpled/fluff/tarkon/prisoner - name = "Blood-scrawled note" - default_raw_text = "I can hear th em crawling i n the ro ck
    The his sing the scra tch ing


    th ey c o m e
    " /* ----------------- Fluff/Decor ----------------- */ /obj/structure/decorative/fluff/ai_node //Budding AI's way of interfacing with stuff it couldn't normally do so with. Needed to be placed by a willing human, before borgs were created. Used in any ruins regarding pre-bluespace, self-aware AIs diff --git a/modular_nova/modules/mapping/code/icemoon.dm b/modular_nova/modules/mapping/code/icemoon.dm index 77cfd81f513..bf39280cc9d 100644 --- a/modular_nova/modules/mapping/code/icemoon.dm +++ b/modular_nova/modules/mapping/code/icemoon.dm @@ -19,4 +19,4 @@ suffix = "icemoon_underground_interdyne_base1.dmm" allow_duplicates = FALSE never_spawn_with = list(/datum/map_template/ruin/lavaland/nova/interdyne_base) - always_place = TRUE + unpickable = TRUE //FF REMOVAL - INTERDYNE-REMAP. ORIGINAL always_place = TRUE diff --git a/modular_nova/modules/mapping/code/lavaland.dm b/modular_nova/modules/mapping/code/lavaland.dm index 9ece95ff7b8..3863e2283ff 100644 --- a/modular_nova/modules/mapping/code/lavaland.dm +++ b/modular_nova/modules/mapping/code/lavaland.dm @@ -21,5 +21,5 @@ suffix = "lavaland_surface_interdyne_base1.dmm" allow_duplicates = FALSE never_spawn_with = list(/datum/map_template/ruin/icemoon/underground/nova/interdyne_base) - always_place = TRUE + unpickable = TRUE //FF REMOVAL - INTERDYNE-REMAP. ORIGINAL always_place = TRUE diff --git a/modular_nova/modules/mapping/code/misc.dm b/modular_nova/modules/mapping/code/misc.dm index b0e9e7bc34a..0275de4d645 100644 --- a/modular_nova/modules/mapping/code/misc.dm +++ b/modular_nova/modules/mapping/code/misc.dm @@ -7,32 +7,6 @@ icon_state = "luna" inhand_icon_state = "luna" -/datum/mod_theme/prototype/hauler - name = "Prototype: Hauler" - desc = "Bulky and quite heavy, This prototype modular suit has seemed to be modified quite a bit with additional supports to distribute its weight. The servos there within have been modified to handle the additional stress, but the loose wiring required an internal lining of rubberized insulation" - inbuilt_modules = list() - charge_drain = DEFAULT_CHARGE_DRAIN * 3 - siemens_coefficient = 0 - slowdown_active = 1 - -/obj/item/mod/control/pre_equipped/prototype/hauler - theme = /datum/mod_theme/prototype/hauler - req_access = list(ACCESS_TARKON) - applied_cell = /obj/item/stock_parts/cell/high - applied_modules = list( - /obj/item/mod/module/storage/large_capacity, - /obj/item/mod/module/welding, - /obj/item/mod/module/clamp, - /obj/item/mod/module/flashlight, - /obj/item/mod/module/tether, - ) - -/obj/machinery/suit_storage_unit/industrial/hauler - mod_type = /obj/item/mod/control/pre_equipped/prototype/hauler - -/obj/item/areaeditor/blueprints/tarkon - desc = "Blueprints of the Tarkon surface breaching drill and several Tarkon base designs. Red, stamped text reads \"Confidential\" on the backside of it." - name = "Tarkon Design Prints" /obj/item/mod/module/armor_booster/retractplates name = "MOD retractive plates module" diff --git a/modular_nova/modules/mapping/code/mob_spawns.dm b/modular_nova/modules/mapping/code/mob_spawns.dm index e5bf807d6ae..9fd74f012d5 100644 --- a/modular_nova/modules/mapping/code/mob_spawns.dm +++ b/modular_nova/modules/mapping/code/mob_spawns.dm @@ -126,6 +126,8 @@ /obj/effect/mob_spawn/ghost_role/human/hotel_staff random_appearance = FALSE + quirks_enabled = TRUE + loadout_enabled = TRUE /obj/effect/mob_spawn/ghost_role/human/hotel_staff/manager name = "staff manager sleeper" @@ -177,6 +179,7 @@ back = /obj/item/storage/backpack backpack_contents = list( /obj/item/storage/box/survival = 1, + /obj/item/storage/box/nif_ghost_box/ghost_role=1, /obj/item/crowbar = 1, ) id = /obj/item/card/id/advanced/black @@ -190,6 +193,7 @@ back = /obj/item/storage/backpack/satchel/explorer backpack_contents = list( /obj/item/storage/box/survival = 1, + /obj/item/storage/box/nif_ghost_box/ghost_role=1, /obj/item/crowbar = 1, /obj/item/knife/combat/survival = 1, /obj/item/t_scanner/adv_mining_scanner/lesser = 1, @@ -214,6 +218,7 @@ head = /obj/item/clothing/head/soft/sec/syndicate backpack_contents = list( /obj/item/storage/box/survival = 1, + /obj/item/storage/box/nif_ghost_box/ghost_role=1, ) id_trim = /datum/id_trim/syndicom/nova/ds2/enginetechnician glasses = /obj/item/clothing/glasses/welding/up @@ -239,6 +244,7 @@ back = /obj/item/storage/backpack/satchel backpack_contents = list( /obj/item/storage/box/survival = 1, + /obj/item/storage/box/nif_ghost_box/ghost_role=1, /obj/item/crowbar = 1, /obj/item/storage/medkit/surgery = 1, ) @@ -269,6 +275,7 @@ back = /obj/item/storage/backpack backpack_contents = list( /obj/item/storage/box/survival = 1, + /obj/item/storage/box/nif_ghost_box/ghost_role=1, /obj/item/crowbar = 1, ) id = /obj/item/card/id/advanced/black @@ -454,121 +461,6 @@ handlebank(crewman) return ..() -//Port Tarkon, 6 people trapped in a revamped charlie-station like ghost role. Survive the aliens and threats, Fix the port and/or finish construction - -/obj/effect/mob_spawn/ghost_role/human/tarkon - name = "P-T Abandoned Crew" - prompt_name = "an abandoned cargo member" - icon = 'icons/obj/machines/sleeper.dmi' - icon_state = "sleeper" - you_are_text = "You are an abandoned member of Port Tarkon, an attempt to create steady living vaults within large asteroids. You have no real idea who Interdyne is, And your last recollection of NT is the producer of some... Less than ethically obtained goods on the port." - flavour_text = "Something went wrong. Morality of experiments went awry, expansions were made before scans were fully done and now you have to deal with the aftermath of your past crews exodus. Bring P-T to the success it was ment to be, or die trying. (OOC note: This ghost role was not designed with Plasmamen or Vox in mind. While there are some accommodations so that they can survive, it should be noted that they were not the focal point whilst designing Port Tarkon. The closet in the middle of the room above contains the 'accommodations' for those species.)" - important_text = "DO NOT abandon the port, PERIOD, but using the ship to buy more items or get help is good, if not ideal. Do not trade special equipment to the station. Unwelcomed and uninvited guests are not obligated to your kindness." - outfit = /datum/outfit/tarkon - spawner_job_path = /datum/job/tarkon - loadout_enabled = TRUE - quirks_enabled = TRUE - random_appearance = FALSE - computer_area = /area/ruin/space/has_grav/port_tarkon/centerhall - -/datum/outfit/tarkon - name = "default port tarkon outfit" - uniform = /obj/item/clothing/under/rank/cargo/tech/nova/utility - back = /obj/item/storage/backpack - shoes = /obj/item/clothing/shoes/winterboots - gloves = /obj/item/clothing/gloves/fingerless - glasses = /obj/item/clothing/glasses/sunglasses - id = /obj/item/card/id/away/tarkon/cargo - l_pocket = /obj/item/card/mining_point_card - r_pocket = /obj/item/mining_voucher - ears = /obj/item/radio/headset/tarkon - -/datum/outfit/tarkon/post_equip(mob/living/carbon/human/tarkon, visualsOnly = FALSE) - var/obj/item/card/id/id_card = tarkon.wear_id - if(istype(id_card)) - id_card.registered_name = tarkon.real_name - id_card.update_label() - id_card.update_icon() - var/obj/item/radio/target_radio = tarkon.ears - target_radio.set_frequency(FREQ_TARKON) - target_radio.recalculateChannels() - - handlebank(tarkon) - return ..() - -/obj/effect/mob_spawn/ghost_role/human/tarkon/sci - prompt_name = "an abandoned scientist" - outfit = /datum/outfit/tarkon/sci - -/datum/outfit/tarkon/sci - name = "Port Tarkon Science Outfit" - uniform = /obj/item/clothing/under/rank/rnd/scientist/nova/utility - glasses = /obj/item/clothing/glasses/hud/diagnostic - id = /obj/item/card/id/away/tarkon/sci - l_hand = /obj/item/inducer - l_pocket = null - r_pocket = /obj/item/stock_parts/cell/high - -/obj/effect/mob_spawn/ghost_role/human/tarkon/med - prompt_name = "an abandoned medical resident" - outfit = /datum/outfit/tarkon/med - -/datum/outfit/tarkon/med - name = "Port Tarkon Medical Outfit" - uniform = /obj/item/clothing/under/rank/medical/doctor/nova/utility - glasses = /obj/item/clothing/glasses/hud/health - id = /obj/item/card/id/away/tarkon/med - neck = /obj/item/clothing/neck/stethoscope - l_pocket = /obj/item/healthanalyzer - r_pocket = /obj/item/stack/medical/suture/medicated - -/obj/effect/mob_spawn/ghost_role/human/tarkon/engi - prompt_name = "an abandoned maintenance engineer" - outfit = /datum/outfit/tarkon/engi - -/datum/outfit/tarkon/engi - name = "Port Tarkon Engineering Outfit" - uniform = /obj/item/clothing/under/rank/engineering/engineer/nova/utility - glasses = /obj/item/clothing/glasses/meson/engine/tray - id = /obj/item/card/id/away/tarkon/engi - gloves = /obj/item/clothing/gloves/combat - l_pocket = /obj/item/tank/internals/emergency_oxygen/engi - r_pocket = /obj/item/stack/cable_coil - -/obj/effect/mob_spawn/ghost_role/human/tarkon/sec - prompt_name = "an abandoned security deputy" - outfit = /datum/outfit/tarkon/sec - -/datum/outfit/tarkon/sec - name = "Port Tarkon Security Outfit" - uniform = /obj/item/clothing/under/rank/security/nova/utility/redsec - glasses = /obj/item/clothing/glasses/hud/security/redsec - gloves = /obj/item/clothing/gloves/tackler/combat - id = /obj/item/card/id/away/tarkon/sec - l_pocket = /obj/item/melee/baton/telescopic - r_pocket = /obj/item/grenade/barrier - -/obj/effect/mob_spawn/ghost_role/human/tarkon/ensign - name = "P-T Abandoned Ensign" - prompt_name = "an abandoned ensign" - icon = 'icons/obj/machines/sleeper.dmi' - icon_state = "sleeper-o" - you_are_text = "You were tasked by Tarkon Industries to Port Tarkon as a low-level command member, Holding no actual command, but as just another scapegoat to blame should it failed... And failed it did. Scan were never done when the overseer commanded construction, and you were left, forever branded with a task not possible for you" - flavour_text = "The rest of command bailed, and left as nothing more than a glorified assistant, you are held responsible should you be unable to wrangle what hopes of success Headquarters has. Find the blueprints and keep them close, Lest looters and raiders plan to seize what isn't theirs. (OOC note: This ghost role was not designed with Plasmamen or Vox in mind. While there are some accommodations so that they can survive, it should be noted that they were not the focal point whilst designing Port Tarkon. The closet in the middle of the room above contains the 'accommodations' for those species.)" - important_text = "People aren't obligated to listen to you, and you are, otherwise, just another body with some remnant of control. Make sure important items aren't traded and do your best to survive in the hellscape left for you. Unwelcomed and uninvited guests are not obligated to your kindness." - outfit = /datum/outfit/tarkon/ensign - spawner_job_path = /datum/job/tarkon - -/datum/outfit/tarkon/ensign //jack of all trades, master of none, spent all his credits, every last one - name = "Port Tarkon Ensigns Outfit" - uniform = /obj/item/clothing/under/misc/nova/utility - ears = /obj/item/radio/headset/tarkon/ensign - id = /obj/item/card/id/away/tarkon/ensign - neck = /obj/item/clothing/neck/security_cape/armplate - gloves = /obj/item/clothing/gloves/combat - l_pocket = null - r_pocket = null - /datum/outfit/proc/handlebank(mob/living/carbon/human/owner) var/datum/bank_account/offstation_bank_account = new(owner.real_name) owner.account_id = offstation_bank_account.account_id @@ -589,16 +481,6 @@ desc = "The headset of the boss." command = TRUE -/obj/item/radio/headset/tarkon - name = "tarkon headset" - freerange = TRUE - freqlock = TRUE - keyslot = new /obj/item/encryptionkey/headset_cargo/tarkon - -/obj/item/radio/headset/tarkon/ensign //spoiler for upcoming update - name = "tarkon ensign headset" - desc = "A headset personally handed to trusted crew of Tarkon. It fills you with will to do... Something." - command = TRUE //OBJECTS// /obj/structure/showcase/machinery/oldpod/used @@ -651,59 +533,6 @@ /datum/id_trim/away/hotel/security assignment = "Hotel Security" -/datum/id_trim/away/tarkon - assignment = "P-T Cargo Personnel" - access = list(ACCESS_AWAY_GENERAL, ACCESS_WEAPONS, ACCESS_TARKON) - -/datum/id_trim/away/tarkon/sec - assignment = "P-T Port Guard" - access = list(ACCESS_AWAY_GENERAL, ACCESS_WEAPONS, ACCESS_TARKON) - -/datum/id_trim/away/tarkon/med - assignment = "P-T Trauma Medic" - access = list(ACCESS_MEDICAL, ACCESS_AWAY_GENERAL, ACCESS_WEAPONS, ACCESS_TARKON) - -/datum/id_trim/away/tarkon/eng - assignment = "P-T Maintenance Crew" - -/datum/id_trim/away/tarkon/sci - assignment = "P-T Field Researcher" - access = list(ACCESS_ROBOTICS, ACCESS_AWAY_GENERAL, ACCESS_WEAPONS, ACCESS_TARKON) - -/datum/id_trim/away/tarkon/ensign - assignment = "Tarkon Ensign" - access = list(ACCESS_MEDICAL, ACCESS_ROBOTICS, ACCESS_AWAY_GENERAL, ACCESS_TARKON, ACCESS_WEAPONS) - -/obj/item/card/id/away/tarkon/sci //original tarkon ID is defined in fluff - name = "P-T field researcher's access card" - desc = "An access card designated for \"the science team\". You are forgotten basically immediately when it comes to the lab." - trim = /datum/id_trim/away/tarkon/sci - -/obj/item/card/id/away/tarkon/med - name = "P-T trauma medic's access card" - desc = "An access card designated for \"medical staff\". You provide the medic bags." - trim = /datum/id_trim/away/tarkon/med - -/obj/item/card/id/away/tarkon/sec - name = "P-T resident deputy's access card" - desc = "An access card designated for \"security members\". Everyone wants your guns, partner. Yee-haw." - trim = /datum/id_trim/away/tarkon/sec - -/obj/item/card/id/away/tarkon/cargo - name = "P-T cargo hauler's access card" - desc = "An access card designated for \"cargo's finest\". You're also a part time space miner, when cargonia is quiet." - trim = /datum/id_trim/away/tarkon - - -/obj/item/card/id/away/tarkon/engi - name = "P-T maintenance engineer's access card" - desc = "An access card designated for \"engineering staff\". You're going to be the one everyone points at to fix stuff, lets be honest." - trim = /datum/id_trim/away/tarkon/eng - -/obj/item/card/id/away/tarkon/ensign - name = "Tarkon ensign's access card" - desc = "An access card designated for \"Tarkon ensign\". No one has to listen to you... But you're the closest there is for command around here." - trim = /datum/id_trim/away/tarkon/ensign //CRYO CONSOLES /obj/machinery/computer/cryopod/interdyne @@ -713,9 +542,3 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/machinery/computer/cryopod/interdyne, 32) -/obj/machinery/computer/cryopod/tarkon - radio = /obj/item/radio/headset/tarkon - announcement_channel = RADIO_CHANNEL_TARKON - req_one_access = list("tarkon") - -MAPPING_DIRECTIONAL_HELPERS(/obj/machinery/computer/cryopod/tarkon, 32) diff --git a/modular_nova/modules/mapping/code/shuttles.dm b/modular_nova/modules/mapping/code/shuttles.dm index 74c19684381..8b63ba907a0 100644 --- a/modular_nova/modules/mapping/code/shuttles.dm +++ b/modular_nova/modules/mapping/code/shuttles.dm @@ -160,7 +160,7 @@ /*----- Tarkon Shuttle Datum + related code -----*/ /datum/map_template/shuttle/ruin/tarkon_driver prefix = "_maps/shuttles/nova/" - suffix = "tarkon_driverdc54" + suffix = "tarkon_driver" name = "Tarkon Drill Driver" /obj/machinery/computer/shuttle/tarkon_driver @@ -183,9 +183,4 @@ name = "Tarkon Driver Control Console (Computer Board)" build_path = /obj/machinery/computer/shuttle/tarkon_driver -/datum/map_template/shuttle/ruin/tarkon_driver/defcon3 - suffix = "tarkon_driverdc3" - -/datum/map_template/shuttle/ruin/tarkon_driver/defcon2 - suffix = "tarkon_driverdc2" /*----- End of Tarkon Shuttle Code -----*/ diff --git a/modular_nova/modules/mapping/code/spaceship_turfs.dm b/modular_nova/modules/mapping/code/spaceship_turfs.dm index cef19636158..52f2d75a350 100644 --- a/modular_nova/modules/mapping/code/spaceship_turfs.dm +++ b/modular_nova/modules/mapping/code/spaceship_turfs.dm @@ -14,10 +14,6 @@ icon_state = "map-shuttle_nd" smoothing_flags = SMOOTH_BITMASK -/turf/closed/wall/mineral/titanium/spaceship/nosmooth - icon_state = "ship_walls-0" - smoothing_flags = NONE - /turf/closed/wall/mineral/titanium/spaceship/overspace icon_state = "map-overspace" smoothing_flags = SMOOTH_BITMASK | SMOOTH_DIAGONAL_CORNERS diff --git a/modular_nova/modules/mapping/code/wardrobes.dm b/modular_nova/modules/mapping/code/wardrobes.dm index b399c216d28..12d04b986e3 100644 --- a/modular_nova/modules/mapping/code/wardrobes.dm +++ b/modular_nova/modules/mapping/code/wardrobes.dm @@ -37,17 +37,11 @@ /obj/item/clothing/under/syndicate/nova/maid = 5, /obj/item/clothing/gloves/combat/maid = 5, /obj/item/clothing/head/costume/maidheadband/syndicate = 5, - /obj/item/storage/box/nif_ghost_box/ghost_role = 10, ) refill_canister = /obj/item/vending_refill/wardrobe/syndie_wardrobe light_color = COLOR_MOSTLY_PURE_RED -/obj/machinery/vending/wardrobe/syndie_wardrobe/ghost_cafe - excluded_products = list( - /obj/item/storage/box/nif_ghost_box/ghost_role, - ) - /obj/item/vending_refill/wardrobe/syndie_wardrobe machine_name = "SynDrobe" diff --git a/modular_nova/modules/medical/code/cargo/packs.dm b/modular_nova/modules/medical/code/cargo/packs.dm index 0de1f24eb16..a7a84c600f4 100644 --- a/modular_nova/modules/medical/code/cargo/packs.dm +++ b/modular_nova/modules/medical/code/cargo/packs.dm @@ -1,8 +1,8 @@ -/datum/supply_pack/science/chilled_hercuri - name = "Chilled Hercuri Pack" - desc = "Contains 2 pre-chilled bottles of hercuri, 100u each. Useful for dealing with severely burnt synthetics!" +/datum/supply_pack/science/synthetic_burns + name = "Synthetic Burns Kit" + desc = "Contains a bottle of pre-chilled hercuri and a bottle of dinitrogen plasmide, perfect for treating synthetic burns!" cost = CARGO_CRATE_VALUE * 2.5 - contains = list(/obj/item/reagent_containers/spray/hercuri/chilled = 2) + contains = list(/obj/item/reagent_containers/spray/hercuri/chilled = 1, /obj/item/reagent_containers/spray/dinitrogen_plasmide = 1) crate_name = "chilled hercuri crate" access_view = FALSE diff --git a/modular_nova/modules/medical/code/grasp.dm b/modular_nova/modules/medical/code/grasp.dm deleted file mode 100644 index 808732c5572..00000000000 --- a/modular_nova/modules/medical/code/grasp.dm +++ /dev/null @@ -1,19 +0,0 @@ -/mob/living/carbon/proc/self_grasp_bleeding_limb(obj/item/bodypart/grasped_part, supress_message = FALSE) - if(!grasped_part?.can_be_grasped()) - return - var/starting_hand_index = active_hand_index - if(starting_hand_index == grasped_part.held_index) - to_chat(src, span_danger("You can't grasp your [grasped_part.name] with itself!")) - return - - to_chat(src, span_warning("You try grasping at your [grasped_part.name], trying to stop the bleeding...")) - if(!do_after(src, 0.75 SECONDS)) - to_chat(src, span_danger("You fail to grasp your [grasped_part.name].")) - return - - var/obj/item/hand_item/self_grasp/grasp = new - if(starting_hand_index != active_hand_index || !put_in_active_hand(grasp)) - to_chat(src, span_danger("You fail to grasp your [grasped_part.name].")) - QDEL_NULL(grasp) - return - grasp.grasp_limb(grasped_part) diff --git a/modular_nova/modules/medical/code/medkit.dm b/modular_nova/modules/medical/code/medkit.dm index cf2dccd3f39..9aea862cc02 100644 --- a/modular_nova/modules/medical/code/medkit.dm +++ b/modular_nova/modules/medical/code/medkit.dm @@ -12,7 +12,6 @@ // Slash/Pierce wound tools - can reduce intensity of electrical damage (wires can fix generic burn damage) new /obj/item/stack/cable_coil(src) new /obj/item/stack/cable_coil(src) - new /obj/item/stack/cable_coil(src) new /obj/item/wirecutters(src) // Blunt/Brute tools new /obj/item/weldingtool/largetank(src) // Used for repairing blunt damage or heating metal at T3 blunt @@ -24,6 +23,7 @@ new /obj/item/clothing/glasses/hud/diagnostic(src) // When worn, generally improves wound treatment quality // Reagent containers new /obj/item/reagent_containers/spray/hercuri/chilled(src) // Highly effective (specifically coded to be) against burn wounds + new /obj/item/reagent_containers/spray/dinitrogen_plasmide(src) // same // Generic medical items new /obj/item/stack/medical/gauze/twelve(src) new /obj/item/healthanalyzer(src) @@ -41,8 +41,8 @@ /datum/storage/duffel/synth_trauma_kit exception_max = 6 - max_slots = 27 - max_total_storage = 35 + max_slots = 28 + max_total_storage = 36 /datum/storage/duffel/synth_trauma_kit/New(atom/parent, max_slots, max_specific_storage, max_total_storage, numerical_stacking, allow_quick_gather, allow_quick_empty, collection_mode, attack_hand_interact) . = ..() @@ -121,6 +121,7 @@ new /obj/item/clothing/glasses/hud/diagnostic(src) // When worn, generally improves wound treatment quality // Reagent containers new /obj/item/reagent_containers/spray/hercuri/chilled(src) // Highly effective (specifically coded to be) against burn wounds + new /obj/item/reagent_containers/spray/dinitrogen_plasmide(src) // same // Generic medical items new /obj/item/stack/medical/gauze/twelve(src) new /obj/item/healthanalyzer(src) @@ -140,8 +141,8 @@ /datum/storage/duffel/synth_trauma_kit/advanced exception_max = 10 - max_slots = 31 - max_total_storage = 48 + max_slots = 33 + max_total_storage = 50 /obj/item/storage/backpack/duffelbag/synth_treatment_kit/trauma/advanced/PopulateContents() // yes, this is all within the storage capacity // Slash/Pierce wound tools - can reduce intensity of electrical damage (wires can fix generic burn damage) @@ -162,6 +163,8 @@ // Reagent containers new /obj/item/reagent_containers/spray/hercuri/chilled(src) // Highly effective (specifically coded to be) against burn wounds new /obj/item/reagent_containers/spray/hercuri/chilled(src) // 2 of them + new /obj/item/reagent_containers/spray/dinitrogen_plasmide(src) // same + new /obj/item/reagent_containers/spray/dinitrogen_plasmide(src) new /obj/item/storage/pill_bottle/nanite_slurry(src) // Heals blunt/burn new /obj/item/storage/pill_bottle/liquid_solder(src) // Heals brain damage new /obj/item/storage/pill_bottle/system_cleaner(src) // Heals toxin damage and purges chems diff --git a/modular_nova/modules/medical/code/wounds/bleed.dm b/modular_nova/modules/medical/code/wounds/bleed.dm index 75d80d3b384..e8511e6be6f 100644 --- a/modular_nova/modules/medical/code/wounds/bleed.dm +++ b/modular_nova/modules/medical/code/wounds/bleed.dm @@ -4,9 +4,9 @@ /datum/wound/slash/flesh/Topic(href, href_list) . = ..() if(href_list["wound_topic"]) - if(!usr == victim) + if(usr != victim) return - victim.self_grasp_bleeding_limb(limb) + victim.grabbedby(usr, grabbed_part = limb) /datum/wound/pierce/bleed/show_wound_topic(mob/user) return (user == victim && blood_flow) @@ -14,6 +14,6 @@ /datum/wound/slash/bleed/Topic(href, href_list) . = ..() if(href_list["wound_topic"]) - if(!usr == victim) + if(usr != victim) return - victim.self_grasp_bleeding_limb(limb) + victim.grabbedby(usr, grabbed_part = limb) diff --git a/modular_nova/modules/medical/code/wounds/medicine_reagents.dm b/modular_nova/modules/medical/code/wounds/medicine_reagents.dm new file mode 100644 index 00000000000..cb6667ce289 --- /dev/null +++ b/modular_nova/modules/medical/code/wounds/medicine_reagents.dm @@ -0,0 +1,31 @@ +#define CLOT_RATE_INTENSITY_MULT 50 + +/datum/reagent/medicine/coagulant + /// was_working, but for electrical damage + var/was_working_synth + process_flags = REAGENT_ORGANIC | REAGENT_SYNTHETIC + +/datum/reagent/medicine/coagulant/on_mob_end_metabolize(mob/living/affected_mob) + . = ..() + + if (was_working_synth) + to_chat(affected_mob, span_warning("The chemicals sealing your faulty wires loses its effect!")) + +/datum/reagent/medicine/coagulant/on_mob_life(mob/living/carbon/affected_mob, seconds_per_tick, times_fired) + . = ..() + + var/datum/wound/electrical_damage/zappiest_wound + + for (var/datum/wound/electrical_damage/electrical_wound in affected_mob.all_wounds) + if (electrical_wound.processing_shock_power_per_second_max > zappiest_wound?.processing_shock_power_per_second_max) + zappiest_wound = electrical_wound + + if (zappiest_wound) + if (!was_working_synth) + to_chat(affected_mob, span_warning("Your damaged circuitry is encased in a insulative substance!")) + was_working_synth = TRUE + zappiest_wound.adjust_intensity(-clot_rate * CLOT_RATE_INTENSITY_MULT * seconds_per_tick) + else + was_working_synth = FALSE + +#undef CLOT_RATE_INTENSITY_MULT diff --git a/modular_nova/modules/medical/code/wounds/synth/blunt/robotic_blunt.dm b/modular_nova/modules/medical/code/wounds/synth/blunt/robotic_blunt.dm index 66cbbb510b2..92f74d8b508 100644 --- a/modular_nova/modules/medical/code/wounds/synth/blunt/robotic_blunt.dm +++ b/modular_nova/modules/medical/code/wounds/synth/blunt/robotic_blunt.dm @@ -89,6 +89,8 @@ var/last_time_victim_moved = 0 processes = TRUE + /// Whenever an oscillation is triggered by movement, we wait 4 seconds before trying to do another. + COOLDOWN_DECLARE(movement_stagger_cooldown) /datum/wound_pregen_data/blunt_metal abstract = TRUE @@ -249,7 +251,7 @@ message += "!" self_message += "! You might be able to avoid an aftershock by stopping and waiting..." - if (isnull(attack_direction)) + if (isnull(attack_direction) && !isnull(attacking_item)) attack_direction = get_dir(victim, attacking_item) if (!isnull(attack_direction) && prob(stagger_score * stagger_movement_chance_ratio)) @@ -359,9 +361,10 @@ overall_mult *= get_buckled_movement_consequence_mult(victim.buckled) - if (limb.body_zone == BODY_ZONE_CHEST) + if (limb.body_zone == BODY_ZONE_CHEST && COOLDOWN_FINISHED(src, movement_stagger_cooldown)) var/stagger_chance = chest_movement_stagger_chance * overall_mult if (prob(stagger_chance)) + COOLDOWN_START(src, movement_stagger_cooldown, 4 SECONDS) stagger(base_movement_stagger_score, shake_duration = base_stagger_movement_shake_duration, from_movement = TRUE, shift = movement_stagger_shift, knockdown_ratio = stagger_aftershock_knockdown_movement_ratio) last_time_victim_moved = world.time diff --git a/modular_nova/modules/medical/code/wounds/synth/blunt/robotic_blunt_T1.dm b/modular_nova/modules/medical/code/wounds/synth/blunt/robotic_blunt_T1.dm index 9cd2ae0adbb..19541a4dc8e 100644 --- a/modular_nova/modules/medical/code/wounds/synth/blunt/robotic_blunt_T1.dm +++ b/modular_nova/modules/medical/code/wounds/synth/blunt/robotic_blunt_T1.dm @@ -43,7 +43,7 @@ var/delay_mult = 1 if (user == victim) - delay_mult *= 3 + delay_mult *= 2 if (HAS_TRAIT(user, TRAIT_DIAGNOSTIC_HUD)) delay_mult *= 0.5 @@ -56,7 +56,7 @@ victim.visible_message(span_notice("[user] begins fastening the screws of [their_or_other] [limb.plaintext_zone]..."), \ span_notice("You begin fastening the screws of [your_or_other] [limb.plaintext_zone]...")) - if (!screwdriver_tool.use_tool(target = victim, user = user, delay = (10 SECONDS * delay_mult), volume = 50, extra_checks = CALLBACK(src, PROC_REF(still_exists)))) + if (!screwdriver_tool.use_tool(target = victim, user = user, delay = (6 SECONDS * delay_mult), volume = 50, extra_checks = CALLBACK(src, PROC_REF(still_exists)))) return victim.visible_message(span_green("[user] finishes fastening [their_or_other] [limb.plaintext_zone]!"), \ diff --git a/modular_nova/modules/medical/code/wounds/synth/blunt/robotic_blunt_T2.dm b/modular_nova/modules/medical/code/wounds/synth/blunt/robotic_blunt_T2.dm index 68bac1fe12b..1dd35f14bed 100644 --- a/modular_nova/modules/medical/code/wounds/synth/blunt/robotic_blunt_T2.dm +++ b/modular_nova/modules/medical/code/wounds/synth/blunt/robotic_blunt_T2.dm @@ -32,7 +32,7 @@ chest_attacked_stagger_chance_ratio = 5 chest_attacked_stagger_mult = 3 - chest_movement_stagger_chance = 3 + chest_movement_stagger_chance = 2 stagger_aftershock_knockdown_ratio = 0.3 stagger_aftershock_knockdown_movement_ratio = 0.2 diff --git a/modular_nova/modules/medical/code/wounds/synth/blunt/robotic_blunt_T3.dm b/modular_nova/modules/medical/code/wounds/synth/blunt/robotic_blunt_T3.dm index 14f6f30a2af..e30c4aeed1c 100644 --- a/modular_nova/modules/medical/code/wounds/synth/blunt/robotic_blunt_T3.dm +++ b/modular_nova/modules/medical/code/wounds/synth/blunt/robotic_blunt_T3.dm @@ -38,7 +38,7 @@ status_effect_type = /datum/status_effect/wound/blunt/robotic/critical treatable_tools = list(TOOL_WELDER, TOOL_CROWBAR) - base_movement_stagger_score = 55 + base_movement_stagger_score = 50 base_aftershock_camera_shake_duration = 1.75 SECONDS base_aftershock_camera_shake_strength = 1 @@ -46,7 +46,7 @@ chest_attacked_stagger_chance_ratio = 6.5 chest_attacked_stagger_mult = 4 - chest_movement_stagger_chance = 14 + chest_movement_stagger_chance = 8 aftershock_stopped_moving_score_mult = 0.3 @@ -117,7 +117,7 @@ if (HAS_TRAIT(src, TRAIT_WOUND_SCANNED)) delay_mult *= 0.75 - if(!do_after(user, 8 SECONDS, target = victim, extra_checks = CALLBACK(src, PROC_REF(still_exists)))) + if(!do_after(user, 4 SECONDS, target = victim, extra_checks = CALLBACK(src, PROC_REF(still_exists)))) return mold_metal(user) return TRUE @@ -213,7 +213,7 @@ if (HAS_TRAIT(src, TRAIT_WOUND_SCANNED)) delay_mult *= 0.75 - if (!welder.use_tool(target = victim, user = user, delay = 10 SECONDS * delay_mult, volume = 50, extra_checks = CALLBACK(src, PROC_REF(still_exists)))) + if (!welder.use_tool(target = victim, user = user, delay = 7 SECONDS * delay_mult, volume = 50, extra_checks = CALLBACK(src, PROC_REF(still_exists)))) return TRUE var/wound_path = /datum/wound/burn/robotic/overheat/severe @@ -249,11 +249,11 @@ var/their_or_other = (user == victim ? "[user.p_their()]" : "[victim]'s") var/your_or_other = (user == victim ? "your" : "[victim]'s") - var/base_time = 10 SECONDS + var/base_time = 7 SECONDS var/delay_mult = 1 var/knows_wires = FALSE if (victim == user) - delay_mult *= 3 // real slow + delay_mult *= 2 if (HAS_TRAIT(src, TRAIT_WOUND_SCANNED)) delay_mult *= 0.75 if (HAS_TRAIT(user, TRAIT_KNOW_ROBO_WIRES)) @@ -335,7 +335,7 @@ delay_mult /= treating_plunger.plunge_mod - if (!treating_plunger.use_tool(target = victim, user = user, delay = 8 SECONDS * delay_mult, volume = 50, extra_checks = CALLBACK(src, PROC_REF(still_exists)))) + if (!treating_plunger.use_tool(target = victim, user = user, delay = 6 SECONDS * delay_mult, volume = 50, extra_checks = CALLBACK(src, PROC_REF(still_exists)))) return TRUE var/success_chance = 80 diff --git a/modular_nova/modules/medical/code/wounds/synth/blunt/secures_internals.dm b/modular_nova/modules/medical/code/wounds/synth/blunt/secures_internals.dm index d4483dafb0b..e15dd40ba1d 100644 --- a/modular_nova/modules/medical/code/wounds/synth/blunt/secures_internals.dm +++ b/modular_nova/modules/medical/code/wounds/synth/blunt/secures_internals.dm @@ -340,14 +340,14 @@ var/delay_mult = 1 if (victim == user) - delay_mult *= 0.5 + delay_mult *= 1.5 if (HAS_TRAIT(src, TRAIT_WOUND_SCANNED)) delay_mult *= 0.75 user.visible_message(span_danger("[user] begins hastily applying [gel] to [victim]'s [limb.plaintext_zone]..."), span_warning("You begin hastily applying [gel] to [user == victim ? "your" : "[victim]'s"] [limb.plaintext_zone], disregarding the acidic effect it seems to have on the metal...")) - if (!do_after(user, (8 SECONDS * delay_mult), target = victim, extra_checks = CALLBACK(src, PROC_REF(still_exists)))) + if (!do_after(user, (6 SECONDS * delay_mult), target = victim, extra_checks = CALLBACK(src, PROC_REF(still_exists)))) return TRUE gel.use(1) diff --git a/modular_nova/modules/medical/code/wounds/synth/medicine_reagents.dm b/modular_nova/modules/medical/code/wounds/synth/medicine_reagents.dm new file mode 100644 index 00000000000..65b96507e42 --- /dev/null +++ b/modular_nova/modules/medical/code/wounds/synth/medicine_reagents.dm @@ -0,0 +1,65 @@ +// a potent coolant that treats synthetic burns at decent efficiency. compared to hercuri its worse, but without +// the lethal side effects, opting for a movement speed decrease instead +/datum/reagent/dinitrogen_plasmide + name = "Dinitrogen Plasmide" + description = "A compound of nitrogen and stabilized plasma, this substance has the ability to flash-cool overheated metals \ + while avoiding excessive damage. Being a heavy compound, it has the effect of slowing anything that metabolizes it." + ph = 4.8 + specific_heat = SPECIFIC_HEAT_PLASMA * 1.2 + color = "#b779cc" + taste_description = "dull plasma" + chemical_flags = REAGENT_CAN_BE_SYNTHESIZED + process_flags = REAGENT_ORGANIC | REAGENT_SYNTHETIC + metabolization_rate = 0.5 // fast + overdose_threshold = 60 // it takes a lot, if youre really messed up you CAN hit this but its unlikely + chemical_flags = REAGENT_CAN_BE_SYNTHESIZED + +/datum/reagent/dinitrogen_plasmide/on_mob_metabolize(mob/living/affected_mob) + . = ..() + + affected_mob.add_movespeed_modifier(/datum/movespeed_modifier/dinitrogen_plasmide) + to_chat(affected_mob, span_warning("Your joints suddenly feel stiff.")) + +/datum/reagent/dinitrogen_plasmide/on_mob_end_metabolize(mob/living/affected_mob) + . = ..() + + affected_mob.remove_movespeed_modifier(/datum/movespeed_modifier/dinitrogen_plasmide) + affected_mob.remove_movespeed_modifier(/datum/movespeed_modifier/dinitrogen_plasmide_overdose) + to_chat(affected_mob, span_warning("Your joints no longer feel stiff!")) + +/datum/reagent/dinitrogen_plasmide/overdose_start(mob/living/affected_mob) + . = ..() + + to_chat(affected_mob, span_danger("You feel like your joints are filling with some viscous fluid!")) + affected_mob.add_movespeed_modifier(/datum/movespeed_modifier/dinitrogen_plasmide_overdose) + +/datum/reagent/dinitrogen_plasmide/overdose_process(mob/living/affected_mob, seconds_per_tick, times_fired) + . = ..() + + holder.remove_reagent(type, 1.2 * seconds_per_tick) // decays + holder.add_reagent(/datum/reagent/stable_plasma, 0.4 * seconds_per_tick) + holder.add_reagent(/datum/reagent/nitrogen, 0.8 * seconds_per_tick) + +/datum/movespeed_modifier/dinitrogen_plasmide + multiplicative_slowdown = 0.3 + +/datum/movespeed_modifier/dinitrogen_plasmide_overdose + multiplicative_slowdown = 1.3 + +/datum/chemical_reaction/dinitrogen_plasmide_formation + results = list(/datum/reagent/dinitrogen_plasmide = 3) + required_reagents = list(/datum/reagent/stable_plasma = 1, /datum/reagent/nitrogen = 2) + required_catalysts = list(/datum/reagent/acetone = 0.1) + required_temp = 400 + optimal_temp = 550 + overheat_temp = 590 + + reaction_tags = REACTION_TAG_EASY | REACTION_TAG_UNIQUE | REACTION_TAG_HEALING + +/obj/item/reagent_containers/spray/dinitrogen_plasmide + name = "coolant spray" + desc = "A medical spray bottle. This one contains dinitrogen plasmide, a potent coolant commonly used to treat synthetic burns. \ + Has the side effect of causing movement slowdown." + icon = 'icons/obj/medical/chemical.dmi' + icon_state = "sprayer_med_yellow" + list_reagents = list(/datum/reagent/dinitrogen_plasmide = 100) diff --git a/modular_nova/modules/medical/code/wounds/synth/robotic_burns.dm b/modular_nova/modules/medical/code/wounds/synth/robotic_burns.dm index 16540ac9f36..983a20c6438 100644 --- a/modular_nova/modules/medical/code/wounds/synth/robotic_burns.dm +++ b/modular_nova/modules/medical/code/wounds/synth/robotic_burns.dm @@ -1,8 +1,4 @@ #define OVERHEAT_ON_STASIS_HEAT_MULT 0.25 -/// At 100% hercuri composition, a spray of reagents will have its effective chem temp reduced by this. 50%, reduced by half this, etc. -#define ROBOTIC_BURN_REAGENT_EXPOSURE_HERCURI_MAX_HEAT_DECREMENT 60 -/// At 100% hercuri composition, a spray of reagents will have its heat shock damage reduced by this. 50%, reduced by half this, etc. -#define ROBOTIC_BURN_REAGENT_EXPOSURE_HERCURI_HEAT_SHOCK_MULT_DECREMENT 0.3 /datum/wound_pregen_data/burnt_metal abstract = TRUE @@ -89,13 +85,63 @@ /// The glow we have attached to our victim, to simulate our limb glowing. var/obj/effect/dummy/lighting_obj/moblight/mob_glow + /// A bad system I'm using to track the worst scar we earned (since we can demote, we want the biggest our wound has been, not what it was when it was cured (probably moderate)) + var/datum/scar/highest_scar + + /// A assoc list of (reagent typepath -> cooling), where cooling is how much its presence will reduce the effective temperature of a reagent spray for cooling us. + var/static/list/reagent_types_to_extra_cooling = list( + /datum/reagent/medicine/c2/hercuri = 60, + /datum/reagent/dinitrogen_plasmide = 50, + ) + + /// A assoc list of (reagent typepath -> damage mult), where the mult will be multiplied against the thermal shock damage. + var/static/list/reagent_types_to_thermal_shock_mult = list( + /datum/reagent/medicine/c2/hercuri = 0.3, + /datum/reagent/dinitrogen_plasmide = 0.6, + ) + + /datum/wound/burn/robotic/overheat/New(temperature) chassis_temperature = (isnull(temperature) ? get_random_starting_temperature() : temperature) return ..() +/datum/wound/burn/robotic/overheat/wound_injury(datum/wound/old_wound, attack_direction) + . = ..() + + if (old_wound && old_wound.severity > severity && istype(old_wound, /datum/wound/burn/robotic/overheat)) + var/datum/wound/burn/robotic/overheat/overheat_wound = old_wound + if (overheat_wound.highest_scar) + set_highest_scar(overheat_wound.highest_scar) + overheat_wound.clear_highest_scar() + + if (!highest_scar && can_scar) + var/datum/scar/new_scar = new + set_highest_scar(new_scar) + new_scar.generate(limb, src, add_to_scars = FALSE) + +/datum/wound/burn/robotic/overheat/proc/set_highest_scar(datum/scar/new_scar) + if (highest_scar) + UnregisterSignal(highest_scar, COMSIG_QDELETING) + if (new_scar) + RegisterSignal(new_scar, COMSIG_QDELETING, PROC_REF(clear_highest_scar)) + highest_scar = new_scar + +/datum/wound/burn/robotic/overheat/proc/clear_highest_scar(datum/source) + SIGNAL_HANDLER + + set_highest_scar(null) + +/datum/wound/burn/robotic/overheat/remove_wound(ignore_limb, replaced) + if (!replaced && highest_scar) + already_scarred = TRUE + highest_scar.lazy_attach(limb) + return ..() + /datum/wound/burn/robotic/overheat/Destroy() QDEL_NULL(mob_glow) + + highest_scar = null return ..() /datum/wound/burn/robotic/overheat/set_victim(mob/living/new_victim) @@ -195,20 +241,18 @@ return var/total_reagent_amount = 0 - var/hercuri_amount = 0 + var/chem_temp_increment = 0 + var/thermal_shock_mult = 1 + // imperfect, this means you can microdose hercuri/plasmide in a huge tank of water and have the entire effect. + // really not a big deal, though, they arent really limited by availability for (var/datum/reagent/iterated_reagent as anything in reagents) total_reagent_amount += reagents[iterated_reagent] - if (iterated_reagent.type == /datum/reagent/medicine/c2/hercuri) - hercuri_amount = reagents[iterated_reagent] - - var/hercuri_percent = (hercuri_amount / total_reagent_amount) - - var/hercuri_chem_temp_increment = (ROBOTIC_BURN_REAGENT_EXPOSURE_HERCURI_MAX_HEAT_DECREMENT * hercuri_percent) - var/local_chem_temp = max(source.chem_temp - hercuri_chem_temp_increment, 0) + chem_temp_increment += reagent_types_to_extra_cooling[iterated_reagent.type] + thermal_shock_mult *= reagent_types_to_thermal_shock_mult[iterated_reagent.type] - var/heat_shock_damage_mult = 1 - (ROBOTIC_BURN_REAGENT_EXPOSURE_HERCURI_HEAT_SHOCK_MULT_DECREMENT * hercuri_percent) + var/local_chem_temp = max(source.chem_temp - chem_temp_increment, 0) - expose_temperature(local_chem_temp, (reagent_coeff * volume_modifier * total_reagent_amount), TRUE, heat_shock_damage_mult = heat_shock_damage_mult) + expose_temperature(local_chem_temp, (reagent_coeff * volume_modifier * total_reagent_amount), TRUE, heat_shock_damage_mult = thermal_shock_mult) /// Adjusts chassis_temperature by the delta between temperature and itself, multiplied by coeff. /// If heat_shock is TRUE, limb will receive brute damage based on the delta. @@ -219,7 +263,7 @@ var/clamped_new_temperature var/heat_adjustment_used - if(temp_delta > 0) + if (temp_delta > 0) clamped_new_temperature = min(min(chassis_temperature + max(temp_delta, 1), temperature), heating_threshold) heat_adjustment_used = (clamped_new_temperature / unclamped_new_temperature) else @@ -438,4 +482,3 @@ threshold_minimum = 140 #undef OVERHEAT_ON_STASIS_HEAT_MULT -#undef ROBOTIC_BURN_REAGENT_EXPOSURE_HERCURI_MAX_HEAT_DECREMENT diff --git a/modular_nova/modules/medical/code/wounds/synth/robotic_pierce.dm b/modular_nova/modules/medical/code/wounds/synth/robotic_pierce.dm index 09cc878afd4..501c0391063 100644 --- a/modular_nova/modules/medical/code/wounds/synth/robotic_pierce.dm +++ b/modular_nova/modules/medical/code/wounds/synth/robotic_pierce.dm @@ -41,7 +41,7 @@ process_shock_spark_count_max = 1 process_shock_spark_count_min = 1 - wirecut_repair_percent = 0.065 // not even faster at this point + wirecut_repair_percent = 0.104 wire_repair_percent = 0.026 initial_sparks_amount = 1 @@ -84,7 +84,7 @@ process_shock_spark_count_max = 2 process_shock_spark_count_min = 1 - wirecut_repair_percent = 0.068 + wirecut_repair_percent = 0.08 wire_repair_percent = 0.02 initial_sparks_amount = 3 @@ -129,7 +129,7 @@ process_shock_spark_count_max = 3 process_shock_spark_count_min = 2 - wirecut_repair_percent = 0.067 + wirecut_repair_percent = 0.072 wire_repair_percent = 0.018 initial_sparks_amount = 8 diff --git a/modular_nova/modules/medical/code/wounds/synth/robotic_slash.dm b/modular_nova/modules/medical/code/wounds/synth/robotic_slash.dm index aae397f366d..b6b0216ef72 100644 --- a/modular_nova/modules/medical/code/wounds/synth/robotic_slash.dm +++ b/modular_nova/modules/medical/code/wounds/synth/robotic_slash.dm @@ -21,6 +21,9 @@ /// The maximum burn damage our limb can have before we refuse to let people who havent aggrograbbed the limb repair it with wires. This is so people can opt to just fix the burn damage. #define ELECTRICAL_DAMAGE_MAX_BURN_DAMAGE_TO_LET_WIRES_REPAIR 5 +/// If progress is positive (not decreasing) after applying ELECTRICAL_DAMAGE_CLOTTING_HEALING_AMOUNT, we multiply it against this. +#define ELECTRICAL_DAMAGE_CLOTTING_PROGRESS_MULT 0.5 + /datum/wound/electrical_damage name = "Electrical (Wires) Wound" @@ -217,7 +220,12 @@ if (!victim) return seconds_for_intensity - return seconds_for_intensity - (get_heat_healing() * seconds_per_tick) + seconds_for_intensity -= (get_heat_healing() * seconds_per_tick) + + if (seconds_for_intensity > 0 && HAS_TRAIT(victim, TRAIT_COAGULATING)) + seconds_for_intensity *= ELECTRICAL_DAMAGE_CLOTTING_PROGRESS_MULT + + return seconds_for_intensity /// Returns how many deciseconds progress should be reduced by, based on the current heat of our victim's body. /datum/wound/electrical_damage/proc/get_heat_healing(do_message = prob(heat_heal_message_chance)) @@ -318,12 +326,12 @@ var/change = (processing_full_shock_threshold * wire_repair_percent) * ELECTRICAL_DAMAGE_SUTURE_WIRE_HEALING_AMOUNT_MULT var/delay_mult = 1 if (user == victim) - delay_mult *= 1.5 + delay_mult *= 1.4 if (is_suture) - delay_mult *= 2 + delay_mult *= 1.5 var/obj/item/stack/medical/suture/suture_item = suturing_item var/obj/item/stack/medical/suture/base_suture = /obj/item/stack/medical/suture - change += (suture_item.heal_brute - initial(base_suture.heal_brute)) + change = max(change - (suture_item.heal_brute - initial(base_suture.heal_brute)), 0.00001) // as this is the trauma treatment, there are less bonuses // if youre doing this, youre probably doing this on-the-spot @@ -334,7 +342,7 @@ if (HAS_TRAIT(user, TRAIT_DIAGNOSTIC_HUD)) delay_mult *= 0.8 if (HAS_TRAIT(src, TRAIT_WOUND_SCANNED)) - change *= 1.2 + change *= 1.5 var/their_or_other = (user == victim ? "[user.p_their()]" : "[victim]'s") var/your_or_other = (user == victim ? "your" : "[victim]'s") @@ -377,17 +385,15 @@ var/change = (processing_full_shock_threshold * wirecut_repair_percent) var/delay_mult = 1 if (user == victim) - delay_mult *= 2.5 + delay_mult *= 2 if (is_retractor) delay_mult *= 2 - change *= 0.8 var/knows_wires = FALSE if (HAS_TRAIT(user, TRAIT_KNOW_ROBO_WIRES)) - delay_mult *= 0.9 - change *= 1.7 + delay_mult *= 0.3 knows_wires = TRUE else if (HAS_TRAIT(user, TRAIT_KNOW_ENGI_WIRES)) - change *= 1.35 + delay_mult *= 0.6 knows_wires = TRUE if (HAS_TRAIT(user, TRAIT_DIAGNOSTIC_HUD)) if (knows_wires) @@ -395,7 +401,7 @@ else delay_mult *= 0.75 if (HAS_TRAIT(src, TRAIT_WOUND_SCANNED)) - delay_mult *= 0.8 + change *= 1.5 var/their_or_other = (user == victim ? "[user.p_their()]" : "[victim]'s") var/your_or_other = (user == victim ? "your" : "[victim]'s") @@ -510,7 +516,7 @@ process_shock_spark_count_max = 1 process_shock_spark_count_min = 1 - wirecut_repair_percent = 0.085 // not even faster at this point + wirecut_repair_percent = 0.14 wire_repair_percent = 0.035 initial_sparks_amount = 1 @@ -553,7 +559,7 @@ process_shock_spark_count_max = 2 process_shock_spark_count_min = 1 - wirecut_repair_percent = 0.1 + wirecut_repair_percent = 0.128 wire_repair_percent = 0.032 initial_sparks_amount = 3 @@ -573,7 +579,7 @@ name = "Systemic Fault" desc = "A significant portion of the power distribution network has been cut open, resulting in massive power loss and runaway electrocution." occur_text = "lets out a violent \"zhwarp\" sound as angry electric arcs attack the surrounding air" - examine_desc = "has lots of wires mauled wires sticking out" + examine_desc = "has lots of mauled wires sticking out" treat_text = "Immediate securing via gauze, followed by emergency cable replacement and securing via wirecutters or retractor. \ If the fault has become uncontrollable, extreme heat therapy is recommended." @@ -626,3 +632,5 @@ #undef ELECTRICAL_DAMAGE_MAX_BURN_DAMAGE_TO_LET_WIRES_REPAIR #undef ELECTRICAL_DAMAGE_POWER_PER_TICK_MULT #undef ELECTRICAL_DAMAGE_SUTURE_WIRE_HEALING_AMOUNT_MULT + +#undef ELECTRICAL_DAMAGE_CLOTTING_PROGRESS_MULT diff --git a/modular_nova/modules/microfusion/code/_microfusion_defines.dm b/modular_nova/modules/microfusion/code/_microfusion_defines.dm deleted file mode 100644 index b44acde2567..00000000000 --- a/modular_nova/modules/microfusion/code/_microfusion_defines.dm +++ /dev/null @@ -1,54 +0,0 @@ -/// The amount of cell charge drained during a drain failure. -#define MICROFUSION_CELL_DRAIN_FAILURE 500 -/// The heavy EMP range for when a cell suffers an EMP failure. -#define MICROFUSION_CELL_EMP_HEAVY_FAILURE 2 -/// The light EMP range for when a cell suffers an EMP failure. -#define MICROFUSION_CELL_EMP_LIGHT_FAILURE 4 -/// The radiation range for when a cell suffers a radiation failure. -#define MICROFUSION_CELL_RADIATION_RANGE_FAILURE 1 - -/// The lower most time for a microfusion cell meltdown. -#define MICROFUSION_CELL_FAILURE_LOWER (10 SECONDS) -/// The upper most time for a microfusion cell meltdown. -#define MICROFUSION_CELL_FAILURE_UPPER (15 SECONDS) - -/// A charge drain failure. -#define MICROFUSION_CELL_FAILURE_TYPE_CHARGE_DRAIN 1 -/// A small explosion failure. -#define MICROFUSION_CELL_FAILURE_TYPE_EXPLOSION 2 -/// EMP failure. -#define MICROFUSION_CELL_FAILURE_TYPE_EMP 3 -/// Radiation failure. -#define MICROFUSION_CELL_FAILURE_TYPE_RADIATION 4 - -/// Returned when the phase emtiter process is successful. -#define SHOT_SUCCESS "success" -/// Returned when a gun is fired but there is no phase emitter. -#define SHOT_FAILURE_NO_EMITTER "no phase emitter!" - -/// The error message returned when the phase emitter is processed but damaged. -#define PHASE_FAILURE_DAMAGED "PHASE EMITTER: Emitter damaged!" -/// The error message returned when the phase emitter has reached it's htermal throttle. -#define PHASE_FAILURE_THROTTLE "PHASE EMITTER: Thermal throttle active!" - -/// The heat dissipation bonus of an emitter being in space! -#define PHASE_HEAT_DISSIPATION_BONUS_SPACE 30 -/// The heat dissipation bonus of an emitter being in air! -#define PHASE_HEAT_DISSIPATION_BONUS_AIR 10 - -// Slot defines for the gun. -/// The gun barrel slot. -#define GUN_SLOT_BARREL "barrel" -/// The gun underbarrel slot. -#define GUN_SLOT_UNDERBARREL "underbarrel" -/// The gun rail slot. -#define GUN_SLOT_RAIL "rail" -/// Unique slots, can hold as many as you want. -#define GUN_SLOT_UNIQUE "unique" -/// Camo slot. Because why would you put four overlapping camos on your gun? -#define GUN_SLOT_CAMO "camo" - -/// Max name size for changing names -#define GUN_MAX_NAME_CHARS 20 -/// Min name size for changing names -#define GUN_MIN_NAME_CHARS 3 diff --git a/modular_nova/modules/microfusion/code/cargo_stuff.dm b/modular_nova/modules/microfusion/code/cargo_stuff.dm deleted file mode 100644 index 05b3d84b968..00000000000 --- a/modular_nova/modules/microfusion/code/cargo_stuff.dm +++ /dev/null @@ -1,72 +0,0 @@ -/datum/supply_pack/security/armory/mcr01 - name = "MCR-01 Microfusion Crate" - desc = "Micron Control Systems Incorporated supplied MCR-01 Microfusion weapons platform. Comes with 4 advanced guns!" - cost = CARGO_CRATE_VALUE * 20 - contains = list( - /obj/item/gun/microfusion/mcr01/advanced, - /obj/item/gun/microfusion/mcr01/advanced, - /obj/item/gun/microfusion/mcr01/advanced, - /obj/item/gun/microfusion/mcr01/advanced, - ) - crate_name = "MCR-01 Microfusion Crate" - -/datum/supply_pack/security/microfusion - name = "Assorted Microfusion Upgrade Crate" - desc = "Micron Control Systems Incorporated supplied Microfusion cells and emitters!" - cost = CARGO_CRATE_VALUE * 5 - contains = list( - /obj/item/microfusion_phase_emitter/advanced, - /obj/item/microfusion_phase_emitter/advanced, - /obj/item/stock_parts/cell/microfusion/advanced, - /obj/item/stock_parts/cell/microfusion/advanced, - ) - crate_name = "Microfusion Upgrade Crate" - -/datum/supply_pack/security/mcr01_attachments_a - name = "MCR-01 Military Attachments Crate Type A" - desc = "Micron Control Systems Incorporated supplied MCR-01 Military spec attachments! This crate comes with two utilitarian repeater loadout." - cost = CARGO_CRATE_VALUE * 14 - contains = list( - /obj/item/microfusion_gun_attachment/grip, - /obj/item/microfusion_gun_attachment/grip, - /obj/item/microfusion_gun_attachment/rail, - /obj/item/microfusion_gun_attachment/rail, - /obj/item/microfusion_gun_attachment/barrel/repeater, - /obj/item/microfusion_gun_attachment/barrel/repeater, - ) - crate_name = "MCR-01 Military Attachments Crate Type A" - -/datum/supply_pack/security/mcr01_attachments_type_b - name = "MCR-01 Military Attachments Crate Type B" - desc = "Micron Control Systems Incorporated supplied MCR-01 Military spec attachments! This crate comes in a mixed specialist loadout." - cost = CARGO_CRATE_VALUE * 16 - contains = list( - /obj/item/microfusion_gun_attachment/grip, - /obj/item/microfusion_gun_attachment/grip, - /obj/item/microfusion_gun_attachment/grip, - /obj/item/microfusion_gun_attachment/barrel/scatter, - /obj/item/microfusion_gun_attachment/barrel/scatter, - /obj/item/microfusion_gun_attachment/barrel/scatter, - /obj/item/microfusion_gun_attachment/scope, - /obj/item/microfusion_gun_attachment/barrel/lance, - ) - crate_name = "MCR-01 Military Attachments Crate Type B" - - -/datum/supply_pack/security/mcr01_attachments_h - name = "HCR-01 Military Attachments Crate Type H" - desc = "Honkicron Clownery Systems Inhonkorated supplied HCR-01 Clownery spec attachments! This crate oddly smells of bananas." - cost = CARGO_CRATE_VALUE * 20 - contraband = TRUE - contains = list( - /obj/item/microfusion_gun_attachment/barrel/honk, - /obj/item/microfusion_gun_attachment/barrel/honk, - /obj/item/microfusion_gun_attachment/barrel/honk, - /obj/item/microfusion_gun_attachment/camo/honk, - /obj/item/microfusion_gun_attachment/camo/honk, - /obj/item/microfusion_gun_attachment/camo/honk, - /obj/item/food/pie/cream, - /obj/item/food/pie/cream, - /obj/item/food/pie/cream, - ) - crate_name = "MCR-01 Military Attachments Crate Type H" diff --git a/modular_nova/modules/microfusion/code/gun_types.dm b/modular_nova/modules/microfusion/code/gun_types.dm deleted file mode 100644 index 052e3b32db1..00000000000 --- a/modular_nova/modules/microfusion/code/gun_types.dm +++ /dev/null @@ -1,58 +0,0 @@ -/obj/item/gun/microfusion/mcr01 - name = "MCR-01" - desc = "An advanced, modular energy weapon produced by Micron Control Systems. These cutting edge weapons differ from traditional beam weaponry in producing individual bolts, as well as being customizable to the user's preferences." - icon_state = "mcr01" - inhand_icon_state = "mcr01" - shaded_charge = TRUE - -/obj/item/gun/microfusion/mcr01/give_manufacturer_examine() - AddElement(/datum/element/manufacturer_examine, COMPANY_MICRON) - -/// Gun for cargo crates. -/obj/item/gun/microfusion/mcr01/advanced - name = "advanced MCR-01" - cell_type = /obj/item/stock_parts/cell/microfusion/advanced - phase_emitter_type = /obj/item/microfusion_phase_emitter/advanced - -/* THESE ARE STILL UTTERLY BROKEN -/obj/item/gun/microfusion/mcr01/nanocarbon - name = "Nanocarbon Destroyer" - desc = "The pinnacle of the Nanocarbon weapon line. This weapon is the ultimate in power and performance. It is capable of firing a wide variety of beams, including a wide range of energy types, and is capable of firing a wide variety of frequencies." - icon_state = "mcr01" - inhand_icon_state = "mcr01" - shaded_charge = TRUE - phase_emitter_type = /obj/item/microfusion_phase_emitter/nanocarbon - cell_type = /obj/item/stock_parts/cell/microfusion/nanocarbon - attachments = list( - /obj/item/microfusion_gun_attachment/pulse, - /obj/item/microfusion_gun_attachment/grip, - /obj/item/microfusion_gun_attachment/rail, - /obj/item/microfusion_gun_attachment/camo, - ) - -//For syndicate uplink. -/obj/item/gun/microfusion/mcr01/syndie - name = "SCR-01" - desc = "A Syndicate brand copy of the MCR-01. It comes with a proprietary suppressor and some tactical attachments." - cell_type = /obj/item/stock_parts/cell/microfusion/advanced - phase_emitter_type = /obj/item/microfusion_phase_emitter/advanced - attachments = list( - /obj/item/microfusion_gun_attachment/barrel/suppressor, - /obj/item/microfusion_gun_attachment/grip, - /obj/item/microfusion_gun_attachment/rail, - /obj/item/microfusion_gun_attachment/syndi_camo, - ) -*/ - -/* -* MICROFUSION SPAWNERS -*/ - -/obj/effect/spawner/armory_spawn/microfusion - guns = list( - /obj/item/gun/microfusion/mcr01, - /obj/item/gun/microfusion/mcr01, - /obj/item/gun/microfusion/mcr01, - /obj/item/gun/microfusion/mcr01, - ) - diff --git a/modular_nova/modules/microfusion/code/microfusion_cell.dm b/modular_nova/modules/microfusion/code/microfusion_cell.dm deleted file mode 100644 index 8323a3e0738..00000000000 --- a/modular_nova/modules/microfusion/code/microfusion_cell.dm +++ /dev/null @@ -1,215 +0,0 @@ -// FLUFFY FRONTIER EDIT NOTE: ДАННЫЙ ФАЙЛ БЫЛ ЧАСТИЧНО ПОДВЕРГНУТ ПЕРЕЗАПИСИ ПО ПУТИ tff_modular\modules\mcr_nerf_revert\code\mcr_override.dm! В СЛУЧАЕ ВОЗМОЖНЫХ ОШИБОК ВЫЗВАННЫХ ИЗМЕНЕНИЯМИ ТУТ - СМОТРИТЕ ФАЙЛ С ПЕРЕЗАПИСЯМИ. - -/* -MICROFUSION CELL SYSTEM - -Microfusion cells are small battery units that house controlled nuclear fusion within, and that fusion is converted into useable energy. - -Essentially, power cells that malfunction if not used in an MCR, and should only be able to charge inside of one -*/ - -/obj/item/stock_parts/cell/microfusion //Just a standard cell. - name = "microfusion cell" - desc = "A standard-issue microfusion cell, produced by Micron Control Systems. For safety reasons, they cannot be charged unless they are inside of a compatible Micron Control Systems firearm." - icon = 'modular_nova/modules/microfusion/icons/microfusion_cells.dmi' - charging_icon = "mf_in" //This is stored in cell.dmi in the aesthetics module - icon_state = "microfusion" - w_class = WEIGHT_CLASS_NORMAL - maxcharge = 1200 //12 shots - chargerate = 0 //MF cells should be unable to recharge if they are not currently inside of an MCR - microfusion_readout = TRUE - empty = TRUE //MF cells should start empty - - /// A hard referenced list of upgrades currently attached to the weapon. - var/list/attachments = list() - /// Are we melting down? For icon stuffs. - var/meltdown = FALSE - /// How many upgrades can you have on this cell? - var/max_attachments = 1 - /// Hard ref to the parent gun. - var/obj/item/gun/microfusion/parent_gun - /// Do we play an alarm when empty? - var/empty_alarm = TRUE - /// What sound do we play when empty? - var/empty_alarm_sound = 'sound/weapons/gun/general/empty_alarm.ogg' - /// Do we have the self charging upgrade? - var/self_charging = FALSE - /// The probability of the cell failing, either through being makeshift or being used in something it shouldn't - var/fail_prob = 10 - -/obj/item/stock_parts/cell - /// Is this cell stabilised? (used in microfusion guns) - var/stabilised = FALSE - /// Do we show the microfusion readout instead of KJ? - var/microfusion_readout = FALSE - -/obj/item/stock_parts/cell/microfusion/Initialize(mapload) - . = ..() - START_PROCESSING(SSobj, src) - -/obj/item/stock_parts/cell/microfusion/Destroy() - if(attachments.len) - for(var/obj/item/iterating_item as anything in attachments) - iterating_item.forceMove(get_turf(src)) - attachments = null - parent_gun = null - STOP_PROCESSING(SSobj, src) - return ..() - -/obj/item/stock_parts/cell/microfusion/attackby(obj/item/attacking_item, mob/living/user, params) - if(istype(attacking_item, /obj/item/microfusion_cell_attachment)) - add_attachment(attacking_item, user) - return - return ..() - -/obj/item/stock_parts/cell/microfusion/attack_self(mob/user) - if(charge) - cell_removal_discharge() - return ..() - -/obj/item/stock_parts/cell/microfusion/emp_act(severity) - var/prob_percent = charge / 100 * severity - if(prob(prob_percent) && !meltdown && !stabilised) - process_instability() - -/obj/item/stock_parts/cell/microfusion/use(amount) - if(!parent_gun) // If an MCR cell is used in anything that's not an MCR, you might have problems - if(prob(fail_prob)) - process_instability() - if(charge >= amount) - var/check_if_empty = charge - amount - if(check_if_empty < amount && empty_alarm && !self_charging) - playsound(src, empty_alarm_sound, 50) - return ..() - -/obj/item/stock_parts/cell/microfusion/proc/process_instability() - var/seconds_to_explode = rand(MICROFUSION_CELL_FAILURE_LOWER, MICROFUSION_CELL_FAILURE_UPPER) - meltdown = TRUE - say("Malfunction in [seconds_to_explode / 10] seconds!") - playsound(src, 'sound/machines/warning-buzzer.ogg', 30, FALSE, FALSE) - add_filter("rad_glow", 2, list("type" = "outline", "color" = "#ff5e0049", "size" = 2)) - addtimer(CALLBACK(src, PROC_REF(process_failure)), seconds_to_explode) - -/obj/item/stock_parts/cell/microfusion/proc/process_failure() - var/fuckup_type = rand(1, 4) - remove_filter("rad_glow") - playsound(src, 'sound/effects/spray.ogg', 70) - switch(fuckup_type) - if(MICROFUSION_CELL_FAILURE_TYPE_CHARGE_DRAIN) - charge = clamp(charge - MICROFUSION_CELL_DRAIN_FAILURE, 0, maxcharge) - if(MICROFUSION_CELL_FAILURE_TYPE_EXPLOSION) - explode() - if(MICROFUSION_CELL_FAILURE_TYPE_EMP) - empulse(get_turf(src), MICROFUSION_CELL_EMP_HEAVY_FAILURE, MICROFUSION_CELL_EMP_LIGHT_FAILURE, FALSE) - if(MICROFUSION_CELL_FAILURE_TYPE_RADIATION) - radiation_pulse(src, MICROFUSION_CELL_RADIATION_RANGE_FAILURE, RAD_MEDIUM_INSULATION) - meltdown = FALSE - -/obj/item/stock_parts/cell/microfusion/update_overlays() - . = ..() - for(var/obj/item/microfusion_cell_attachment/microfusion_cell_attachment as anything in attachments) - . += microfusion_cell_attachment.attachment_overlay_icon_state - -/obj/item/stock_parts/cell/microfusion/screwdriver_act(mob/living/user, obj/item/tool) - if(!attachments.len) - balloon_alert(user, "no attachments!") - return - remove_attachments() - playsound(src, 'sound/items/screwdriver.ogg', 70, TRUE) - balloon_alert(user, "attachments removed") - -/obj/item/stock_parts/cell/microfusion/process(seconds_per_tick) - for(var/obj/item/microfusion_cell_attachment/microfusion_cell_attachment as anything in attachments) - microfusion_cell_attachment.process_attachment(src, seconds_per_tick) - -/obj/item/stock_parts/cell/microfusion/examine(mob/user) - . = ..() - . += span_notice("It can hold [max_attachments] attachment(s).") - . += span_warning("Inserting this into anything other than a microfusion rifle might be a terrible idea.") - if(attachments.len) - for(var/obj/item/microfusion_cell_attachment/microfusion_cell_attachment as anything in attachments) - . += span_notice("It has a [microfusion_cell_attachment.name] installed.") - . += span_notice("Use a screwdriver to remove the attachments.") - . += span_notice("Using this in hand will discharge the cell, if there is any inside of it preventing insertion into microfusion guns.") - -/obj/item/stock_parts/cell/microfusion/proc/add_attachment(obj/item/microfusion_cell_attachment/microfusion_cell_attachment, mob/living/user, obj/item/gun/microfusion/microfusion_gun) - if(attachments.len >= max_attachments) - balloon_alert(user, "can't attach more!") - return FALSE - if(is_type_in_list(microfusion_cell_attachment, attachments)) - balloon_alert(user, "already installed!") - return FALSE - attachments += microfusion_cell_attachment - microfusion_cell_attachment.forceMove(src) - microfusion_cell_attachment.add_attachment(src) - balloon_alert(user, "installed attachment") - playsound(src, 'sound/effects/structure_stress/pop2.ogg', 70, TRUE) - update_appearance() - return TRUE - -/obj/item/stock_parts/cell/microfusion/proc/remove_attachments() - for(var/obj/item/microfusion_cell_attachment/microfusion_cell_attachment in attachments) - microfusion_cell_attachment.remove_attachment(src) - microfusion_cell_attachment.forceMove(get_turf(src)) - attachments -= microfusion_cell_attachment - update_appearance() - -/obj/item/stock_parts/cell/microfusion/proc/inserted_into_weapon() - chargerate = 300 - -/obj/item/stock_parts/cell/microfusion/proc/cell_removal_discharge() - chargerate = 0 - charge = 0 - do_sparks(4, FALSE, src) - update_appearance() - -/datum/crafting_recipe/makeshift/microfusion_cell - name = "Makeshift Microfusion Cell" - tool_behaviors = list(TOOL_SCREWDRIVER, TOOL_WIRECUTTER, TOOL_WELDER) - result = /obj/item/stock_parts/cell/microfusion/makeshift - reqs = list(/obj/item/trash/can = 1, - /obj/item/stack/sheet/iron = 1, - /obj/item/stack/cable_coil = 1) - time = 12 SECONDS - category = CAT_MISC - -//WHY WOULD YOU MAKE THIS? -/obj/item/stock_parts/cell/microfusion/makeshift - name = "makeshift microfusion cell" - desc = "An... Apparatus, comprised of an everyday aluminum can with several civilian-grade batteries tightly packed together and plugged in. This vaguely resembles a microfusion cell, if you tilt your head to a precise fifty degree angle. While the effects on enemy combatants may be dubious, it will certainly do incredible damage to the gun's warranty. What the hell were you thinking when you came up with this?" - icon_state = "microfusion_makeshift" - maxcharge = 600 - max_attachments = 0 - -/obj/item/stock_parts/cell/microfusion/makeshift/use(amount) - if(prob(fail_prob)) - process_instability() - return ..() - -/obj/item/stock_parts/cell/microfusion/enhanced - name = "enhanced microfusion cell" - desc = "A second generation microfusion cell, weighing about the same as the standard-issue cell and having the same space for attachments; however, it has a higher capacity." - icon_state = "microfusion_enhanced" - maxcharge = 1500 - -/obj/item/stock_parts/cell/microfusion/advanced - name = "advanced microfusion cell" - desc = "A third generation microfusion cell, boasting a much higher shot count. Additionally, these come with support for up to three modifications to the cell itself." - icon_state = "microfusion_advanced" - maxcharge = 1700 - max_attachments = 3 - -/obj/item/stock_parts/cell/microfusion/bluespace - name = "bluespace microfusion cell" - desc = "A fourth generation microfusion cell, employing bluespace technology to store power in a medium that's bigger on the inside. This has capacity for four modifications to the cell." - icon_state = "microfusion_bluespace" - maxcharge = 2000 - max_attachments = 4 - -/obj/item/stock_parts/cell/microfusion/nanocarbon - name = "nanocarbon fusion cell" - desc = "This cell combines both top-of-the-line nanotech and advanced microfusion power to brute force the most common issue of Nanotrasen Asset Protection operatives, ammunition, through sheer volume. Intended for use with Nanotrasen-brand capacitor arrays only. Warranty void if dropped in toilet." - icon_state = "microfusion_nanocarbon" - maxcharge = 30000 - max_attachments = 420 - diff --git a/modular_nova/modules/microfusion/code/microfusion_cell_attachments.dm b/modular_nova/modules/microfusion/code/microfusion_cell_attachments.dm deleted file mode 100644 index 17737b81b49..00000000000 --- a/modular_nova/modules/microfusion/code/microfusion_cell_attachments.dm +++ /dev/null @@ -1,111 +0,0 @@ -/* -MICROFUSION CELL UPGRADE ATTACHMENTS - -For adding unique abilities to microfusion cells. These cannot directly interact with the gun. -*/ - -/obj/item/microfusion_cell_attachment - name = "microfusion cell attachment" - desc = "broken" - icon = 'modular_nova/modules/microfusion/icons/microfusion_cells.dmi' - w_class = WEIGHT_CLASS_NORMAL - /// The overlay that will be automatically added, must be in the cells icon. - var/attachment_overlay_icon_state - - -/obj/item/microfusion_cell_attachment/proc/add_attachment(obj/item/stock_parts/cell/microfusion/microfusion_cell) - SHOULD_CALL_PARENT(TRUE) - START_PROCESSING(SSobj, microfusion_cell) - return - -/obj/item/microfusion_cell_attachment/proc/process_attachment(obj/item/stock_parts/cell/microfusion/microfusion_cell, seconds_per_tick) - return PROCESS_KILL - -/obj/item/microfusion_cell_attachment/proc/remove_attachment(obj/item/stock_parts/cell/microfusion/microfusion_cell) - SHOULD_CALL_PARENT(TRUE) - STOP_PROCESSING(SSobj, microfusion_cell) - return - -/* -OVERCAPACITY ATTACHMENT - -Increases the cell capacity by a set percentage. -*/ - -/obj/item/microfusion_cell_attachment/overcapacity - name = "overcapacity microfusion cell attachment" - desc = "An attachment which increases the capacity of the microfusion cell it's attached to. These are an additional, smaller capacitor, using a system to automatically switch from the cell to the capacitor as it's depleted, maximizing the weapon's charge." - icon_state = "attachment_overcapacity" - attachment_overlay_icon_state = "microfusion_overcapacity" - /// How much the attachment increases the cell's capacity by, as a percentage - var/capacity_increase = 20 - /// The initial capacity of the cell before this upgrade is added! - var/initial_charge_capacity = 0 - -/obj/item/microfusion_cell_attachment/overcapacity/add_attachment(obj/item/stock_parts/cell/microfusion/microfusion_cell) - . = ..() - initial_charge_capacity = microfusion_cell.maxcharge - var/capacity_to_add = microfusion_cell.maxcharge / 100 * capacity_increase - microfusion_cell.maxcharge += capacity_to_add - -/obj/item/microfusion_cell_attachment/overcapacity/remove_attachment(obj/item/stock_parts/cell/microfusion/microfusion_cell) - . = ..() - microfusion_cell.charge = min(microfusion_cell.charge, initial_charge_capacity) - microfusion_cell.maxcharge = initial_charge_capacity - initial_charge_capacity = 0 - -/* -STABILISER ATTACHMENT - -The cell is stable and will not emit sparks when firing. -*/ - -/obj/item/microfusion_cell_attachment/stabiliser - name = "stabilising microfusion cell attachment" - desc = "A stabilizer system attachment combining a grounding system with additional containment coils for self-charging purposes, this gives additional safety to the cell it's attached to; preventing both sparks and leakage." - icon_state = "attachment_stabiliser" - attachment_overlay_icon_state = "microfusion_stabiliser" - -/obj/item/microfusion_cell_attachment/stabiliser/add_attachment(obj/item/stock_parts/cell/microfusion/microfusion_cell) - . = ..() - microfusion_cell.stabilised = TRUE - -/obj/item/microfusion_cell_attachment/stabiliser/remove_attachment(obj/item/stock_parts/cell/microfusion/microfusion_cell) - . = ..() - microfusion_cell.stabilised = FALSE - -/* -SELFCHARGE ATTACHMENT - -The cell will charge itself. -If the cell isn't stabilised by a stabiliser, it may emit a radiation pulse. -*/ - -/obj/item/microfusion_cell_attachment/selfcharging - name = "self-charging microfusion cell attachment" - desc = "While microfusion cells are normally shipped without their fuel source, this attachment comes with fifteen grams of hydrogen fuel; allowing the cell to sustain a small, yet active reaction to self-charge. These can keep going for weeks to months in ideal conditions, making them more than enough for most campaigns." - icon_state = "attachment_selfcharge" - attachment_overlay_icon_state = "microfusion_selfcharge" - /// The amount of charge this cell will passively gain! - var/self_charge_amount = 20 - -/obj/item/microfusion_cell_attachment/selfcharging/examine(mob/user) - . = ..() - . += span_warning("WARNING: May cause radiation burns and weapon instability if not stabilized with recommended attachment!") - -/obj/item/microfusion_cell_attachment/selfcharging/add_attachment(obj/item/stock_parts/cell/microfusion/microfusion_cell) - . = ..() - microfusion_cell.self_charging = TRUE - -/obj/item/microfusion_cell_attachment/selfcharging/remove_attachment(obj/item/stock_parts/cell/microfusion/microfusion_cell) - . = ..() - microfusion_cell.self_charging = FALSE - -/obj/item/microfusion_cell_attachment/selfcharging/process_attachment(obj/item/stock_parts/cell/microfusion/microfusion_cell, seconds_per_tick) - if(!microfusion_cell.parent_gun) - return - if(microfusion_cell.charge < microfusion_cell.maxcharge) - microfusion_cell.give(self_charge_amount * seconds_per_tick) - microfusion_cell.parent_gun.update_appearance() - if(!microfusion_cell.stabilised && SPT_PROB(1, seconds_per_tick)) - radiation_pulse(src, 1, RAD_MEDIUM_INSULATION) diff --git a/modular_nova/modules/microfusion/code/microfusion_designs.dm b/modular_nova/modules/microfusion/code/microfusion_designs.dm deleted file mode 100644 index 861b8ed9c1a..00000000000 --- a/modular_nova/modules/microfusion/code/microfusion_designs.dm +++ /dev/null @@ -1,436 +0,0 @@ -#define RND_CATEGORY_MICROFUSION_WEAPONS "/Weaponry (Microfusion)" -#define RND_MICROFUSION_CELLS "/Cells" -#define RND_MICROFUSION_CELL_ATTACHMENTS "/Cell Attachments" -#define RND_MICROFUSION_EMITTERS "/Phase Emitters" -// god forgive me -#define RND_MICROFUSION_ATTACHMENT "/Attachments" -#define RND_MICROFUSION_ATTACHMENT_BARREL " (Barrel)" -#define RND_MICROFUSION_ATTACHMENT_UNDERBARREL " (Underbarrel)" -#define RND_MICROFUSION_ATTACHMENT_RAIL " (Rail)" -#define RND_MICROFUSION_ATTACHMENT_UNIQUE " (Cosmetic)" - -// BASE FOR MCR DESIGNS -/datum/design/microfusion - name = "Microfusion Part" - build_type = PROTOLATHE | AWAY_LATHE - departmental_flags = DEPARTMENT_BITFLAG_SECURITY - construction_time = 10 SECONDS //dunno if this is for mechfabs or what but I'll keep this anyway - category = list( - RND_CATEGORY_MICROFUSION_WEAPONS, - ) - -// EMITTERS - -/datum/design/microfusion/phase_emitter - name = "Placeholder Microfusion Phase Emitter" - desc = "You shouldn't see this. Still, odd how there's no basic phase emitter design, despite how redundant it'd be." - category = list( - RND_CATEGORY_MICROFUSION_WEAPONS + RND_MICROFUSION_EMITTERS, - ) - -/datum/design/microfusion/phase_emitter/enhanced - name = "Enhanced Microfusion Phase Emitter" - desc = "The core of a microfusion projection weapon, produces the laser." - id = "enhanced_microfusion_phase_emitter" - materials = list( - /datum/material/iron = HALF_SHEET_MATERIAL_AMOUNT, - /datum/material/glass = HALF_SHEET_MATERIAL_AMOUNT, - /datum/material/silver = HALF_SHEET_MATERIAL_AMOUNT, - ) - build_path = /obj/item/microfusion_phase_emitter/enhanced - -/datum/design/microfusion/phase_emitter/advanced - name = "Advanced Microfusion Phase Emitter" - id = "advanced_microfusion_phase_emitter" - materials = list( - /datum/material/iron = HALF_SHEET_MATERIAL_AMOUNT, - /datum/material/glass = HALF_SHEET_MATERIAL_AMOUNT, - /datum/material/silver = HALF_SHEET_MATERIAL_AMOUNT, - /datum/material/gold = HALF_SHEET_MATERIAL_AMOUNT, - ) - build_path = /obj/item/microfusion_phase_emitter/advanced - -/datum/design/microfusion/phase_emitter/bluespace - name = "Bluespace Microfusion Phase Emitter" - id = "bluespace_microfusion_phase_emitter" - materials = list( - /datum/material/iron = HALF_SHEET_MATERIAL_AMOUNT, - /datum/material/glass = HALF_SHEET_MATERIAL_AMOUNT, - /datum/material/silver = HALF_SHEET_MATERIAL_AMOUNT, - /datum/material/gold = HALF_SHEET_MATERIAL_AMOUNT, - /datum/material/diamond = HALF_SHEET_MATERIAL_AMOUNT, - ) - build_path = /obj/item/microfusion_phase_emitter/bluespace - -// CELLS - -/datum/design/microfusion/cell - name = "Microfusion Cell" - desc = "A microfusion cell. There's a basic type defined next to this, right?" - category = list( - RND_CATEGORY_MICROFUSION_WEAPONS + RND_MICROFUSION_CELLS, - ) - -/datum/design/microfusion/cell/basic - name = "Basic Microfusion Cell" - desc = "A basic microfusion cell with a capacity of 1200 MF and and 1 attachment point." - id = "basic_microfusion_cell" - build_type = PROTOLATHE | AWAY_LATHE | AUTOLATHE - materials = list( - /datum/material/iron = HALF_SHEET_MATERIAL_AMOUNT, - /datum/material/glass = SMALL_MATERIAL_AMOUNT * 2, - ) - build_path = /obj/item/stock_parts/cell/microfusion - category = list( - RND_CATEGORY_INITIAL, - RND_CATEGORY_MICROFUSION_WEAPONS + RND_MICROFUSION_CELLS, - ) - -/datum/design/microfusion/cell/enhanced - name = "Enhanced Microfusion Cell" - desc = "An enhanced microfusion cell with a capacity of 1500 MF and 1 attachment point." - id = "enhanced_microfusion_cell" - materials = list( - /datum/material/iron = HALF_SHEET_MATERIAL_AMOUNT, - /datum/material/glass = SMALL_MATERIAL_AMOUNT * 2, - /datum/material/uranium = SMALL_MATERIAL_AMOUNT * 2, - ) - build_path = /obj/item/stock_parts/cell/microfusion/enhanced - -/datum/design/microfusion/cell/advanced - name = "Advanced Microfusion Cell" - desc = "An advanced microfusion cell with a capacity of 1700 MF and 3 attachment points." - id = "advanced_microfusion_cell" - materials = list( - /datum/material/iron = HALF_SHEET_MATERIAL_AMOUNT, - /datum/material/gold = SMALL_MATERIAL_AMOUNT * 3, - /datum/material/silver = SMALL_MATERIAL_AMOUNT * 3, - /datum/material/glass = SMALL_MATERIAL_AMOUNT * 3, - /datum/material/uranium = SMALL_MATERIAL_AMOUNT * 3, - ) - build_path = /obj/item/stock_parts/cell/microfusion/advanced - -/datum/design/microfusion/cell/bluespace - name = "Bluespace Microfusion Cell" - desc = "A bluespace microfusion cell with a capacity of 2000 MF and 3 attachment points." - id = "bluespace_microfusion_cell" - materials = list( - /datum/material/iron = HALF_SHEET_MATERIAL_AMOUNT, - /datum/material/gold = SMALL_MATERIAL_AMOUNT * 3, - /datum/material/glass = SMALL_MATERIAL_AMOUNT * 3, - /datum/material/diamond = SMALL_MATERIAL_AMOUNT * 3, - /datum/material/uranium = SMALL_MATERIAL_AMOUNT * 3, - /datum/material/titanium = SMALL_MATERIAL_AMOUNT * 3, - /datum/material/bluespace = SMALL_MATERIAL_AMOUNT * 3, - ) - build_path = /obj/item/stock_parts/cell/microfusion/bluespace - -// CELL UPGRADES - -/datum/design/microfusion/cell_attachment - name = "Placeholder Cell Attachment" - desc = "You shouldn't be seeing this." - category = list( - RND_CATEGORY_MICROFUSION_WEAPONS + RND_MICROFUSION_CELL_ATTACHMENTS, - ) - -/datum/design/microfusion/cell_attachment/stabilising - name = "Stabilising Microfusion Cell Attachment" - desc = "Stabilises the internal fusion reaction of microfusion cells, preventing sparks during firing and occasional radiation pulses when used in tandem with a self-charging attachment." - id = "microfusion_cell_attachment_stabiliser" - materials = list( - /datum/material/iron = HALF_SHEET_MATERIAL_AMOUNT, - /datum/material/glass = HALF_SHEET_MATERIAL_AMOUNT, - /datum/material/plasma = HALF_SHEET_MATERIAL_AMOUNT, - /datum/material/silver = HALF_SHEET_MATERIAL_AMOUNT, - ) - build_path = /obj/item/microfusion_cell_attachment/stabiliser - -/datum/design/microfusion/cell_attachment/overcapacity - name = "Overcapacity Microfusion Cell Attachment" - desc = "An attachment for microfusion cells that increases MF capacity." - id = "microfusion_cell_attachment_overcapacity" - materials = list( - /datum/material/iron = HALF_SHEET_MATERIAL_AMOUNT, - /datum/material/glass = HALF_SHEET_MATERIAL_AMOUNT, - /datum/material/plasma = HALF_SHEET_MATERIAL_AMOUNT, - /datum/material/gold = SHEET_MATERIAL_AMOUNT * 4, - ) - build_path = /obj/item/microfusion_cell_attachment/overcapacity - -/datum/design/microfusion/cell_attachment/selfcharging - name = "Self-Charging Microfusion Cell Attachment" - desc = "Contains a small amount of infinitely decaying nuclear material, causing the fusion reaction to be self sustaining. WARNING: May cause radiation burns if not stabilised." - id = "microfusion_cell_attachment_selfcharging" - materials = list( - /datum/material/iron = HALF_SHEET_MATERIAL_AMOUNT, - /datum/material/glass = HALF_SHEET_MATERIAL_AMOUNT, - /datum/material/diamond = HALF_SHEET_MATERIAL_AMOUNT, - /datum/material/uranium = SHEET_MATERIAL_AMOUNT * 3, - /datum/material/titanium = SHEET_MATERIAL_AMOUNT * 3, - /datum/material/bluespace = SHEET_MATERIAL_AMOUNT, - ) - build_path = /obj/item/microfusion_cell_attachment/selfcharging - -/datum/design/microfusion/attachment - name = "Placeholder MCR Attachment" - desc = "You *really* shouldn't be seeing this. Now in different attachment flavors! The Req line will hate you." - category = list( - RND_CATEGORY_MICROFUSION_WEAPONS + RND_MICROFUSION_ATTACHMENT, - ) - -// RAIL MODS - -/datum/design/microfusion/attachment/rail_slot - name = "Placeholder Microfusion Rail Slot Attachment" - category = list( - RND_CATEGORY_MICROFUSION_WEAPONS + RND_MICROFUSION_ATTACHMENT + RND_MICROFUSION_ATTACHMENT_RAIL, - ) - -/datum/design/microfusion/attachment/rail_slot/rail - name = "Microfusion Weapon Rail" - desc = "A carrying handle/rail system for any additional attachments, such as a seclite and/or bayonet." - id = "microfusion_gun_attachment_rail" - materials = list( - /datum/material/iron = HALF_SHEET_MATERIAL_AMOUNT, - /datum/material/glass = HALF_SHEET_MATERIAL_AMOUNT, - /datum/material/silver = HALF_SHEET_MATERIAL_AMOUNT, - /datum/material/gold = HALF_SHEET_MATERIAL_AMOUNT, - ) - build_path = /obj/item/microfusion_gun_attachment/rail - -/datum/design/microfusion/attachment/rail_slot/scope - name = "Microfusion Weapon Scope" - desc = "A scope. For microfusion weapon platforms, probably." - id = "microfusion_gun_attachment_scope" - materials = list( - /datum/material/iron = HALF_SHEET_MATERIAL_AMOUNT, - /datum/material/glass = HALF_SHEET_MATERIAL_AMOUNT, - /datum/material/silver = HALF_SHEET_MATERIAL_AMOUNT, - ) - build_path = /obj/item/microfusion_gun_attachment/scope - -// UNDERBARREL MODS - -/datum/design/microfusion/attachment/underbarrel - name = "Placeholder Microfusion Underbarrel Slot Attachment" - category = list( - RND_CATEGORY_MICROFUSION_WEAPONS + RND_MICROFUSION_ATTACHMENT + RND_MICROFUSION_ATTACHMENT_UNDERBARREL, - ) - -/datum/design/microfusion/attachment/underbarrel/grip - name = "Microfusion Weapon Grip" - desc = "A grip. For microfusion weapon platforms, ostensibly." - id = "microfusion_gun_attachment_grip" - materials = list( - /datum/material/iron = HALF_SHEET_MATERIAL_AMOUNT, - /datum/material/glass = HALF_SHEET_MATERIAL_AMOUNT, - /datum/material/silver = HALF_SHEET_MATERIAL_AMOUNT, - ) - build_path = /obj/item/microfusion_gun_attachment/grip - -/datum/design/microfusion/attachment/underbarrel/heatsink - name = "Phase Emitter Heatsink" - desc = "A heatsink attachment for your microfusion weapon. Massively increases cooling potential." - id = "microfusion_gun_attachment_heatsink" - materials = list( - /datum/material/iron = HALF_SHEET_MATERIAL_AMOUNT, - /datum/material/glass = HALF_SHEET_MATERIAL_AMOUNT, - /datum/material/silver = HALF_SHEET_MATERIAL_AMOUNT, - /datum/material/gold = HALF_SHEET_MATERIAL_AMOUNT, - ) - build_path = /obj/item/microfusion_gun_attachment/heatsink - -// BARREL MODS (there's a lot) - -/datum/design/microfusion/attachment/barrel - name = "Placeholder Microfusion Barrel Slot Attachment" - category = list( - RND_CATEGORY_MICROFUSION_WEAPONS + RND_MICROFUSION_ATTACHMENT + RND_MICROFUSION_ATTACHMENT_BARREL, - ) - -/datum/design/microfusion/attachment/barrel/suppressor - name = "Suppressor Lens Attachment" - desc = "An experimental barrel attachment that dampens the soundwave of the emitter, suppressing the report. Does not make the lasers themselves more stealthy, as they are lasers." - id = "microfusion_gun_attachment_suppressor" - materials = list( - /datum/material/iron = HALF_SHEET_MATERIAL_AMOUNT, - /datum/material/glass = HALF_SHEET_MATERIAL_AMOUNT, - /datum/material/silver = HALF_SHEET_MATERIAL_AMOUNT, - ) - build_path = /obj/item/microfusion_gun_attachment/barrel/suppressor - -/datum/design/microfusion/attachment/barrel/honk - name = "Bananium Phase Emitter \"Upgrade\"" - desc = "Makes your lasers into the greatest clowning tool ever made. HONK!" - id = "microfusion_gun_attachment_honk" - materials = list( - /datum/material/iron = HALF_SHEET_MATERIAL_AMOUNT, - /datum/material/glass = HALF_SHEET_MATERIAL_AMOUNT, - /datum/material/bananium = HALF_SHEET_MATERIAL_AMOUNT, - ) - build_path = /obj/item/microfusion_gun_attachment/barrel/honk - -/datum/design/microfusion/attachment/barrel/lance - name = "Lance Induction Carriage" - desc = "Turns the gun into a designated marksman rifle." - id = "microfusion_gun_attachment_lance" - materials = list( - /datum/material/iron = HALF_SHEET_MATERIAL_AMOUNT, - /datum/material/glass = HALF_SHEET_MATERIAL_AMOUNT, - /datum/material/diamond = HALF_SHEET_MATERIAL_AMOUNT, - /datum/material/plasma = HALF_SHEET_MATERIAL_AMOUNT, - /datum/material/bluespace = HALF_SHEET_MATERIAL_AMOUNT, - ) - build_path = /obj/item/microfusion_gun_attachment/barrel/lance - -// EMITTER UPGRADES (they're still barrel upgrades, though) - -/datum/design/microfusion/attachment/barrel/scatter - name = "Diffuser Microfusion Lens Attachment" - desc = "Splits the microfusion laser beam entering the lens." - id = "microfusion_gun_attachment_scatter" - materials = list( - /datum/material/iron = HALF_SHEET_MATERIAL_AMOUNT, - /datum/material/glass = HALF_SHEET_MATERIAL_AMOUNT, - /datum/material/diamond = HALF_SHEET_MATERIAL_AMOUNT, - /datum/material/silver = HALF_SHEET_MATERIAL_AMOUNT, - ) - build_path = /obj/item/microfusion_gun_attachment/barrel/scatter - -/datum/design/microfusion/attachment/barrel/scatter/max - name = "Crystalline Diffuser Microfusion Lens Attachment" - desc = "Splits the microfusion laser beam entering the lens even more." - id = "microfusion_gun_attachment_scattermax" - materials = list( - /datum/material/iron = HALF_SHEET_MATERIAL_AMOUNT, - /datum/material/glass = HALF_SHEET_MATERIAL_AMOUNT, - /datum/material/diamond = HALF_SHEET_MATERIAL_AMOUNT, - /datum/material/silver = HALF_SHEET_MATERIAL_AMOUNT, - ) - build_path = /obj/item/microfusion_gun_attachment/barrel/scatter/max - -/datum/design/microfusion/attachment/barrel/superheat - name = "Superheating Phase Emitter Upgrade" - desc = "Superheats the beam, causing targets to ignite." - id = "microfusion_gun_attachment_superheat" - materials = list( - /datum/material/iron = HALF_SHEET_MATERIAL_AMOUNT, - /datum/material/glass = HALF_SHEET_MATERIAL_AMOUNT, - /datum/material/diamond = HALF_SHEET_MATERIAL_AMOUNT, - /datum/material/plasma = HALF_SHEET_MATERIAL_AMOUNT, - ) - build_path = /obj/item/microfusion_gun_attachment/barrel/superheat - -/datum/design/microfusion/attachment/barrel/hellfire - name = "Hellfire Phase Emitter Upgrade" - desc = "Overheats the beam, causing nastier wounds and higher damage." - id = "microfusion_gun_attachment_hellfire" - materials = list( - /datum/material/iron = HALF_SHEET_MATERIAL_AMOUNT, - /datum/material/glass = HALF_SHEET_MATERIAL_AMOUNT, - /datum/material/diamond = HALF_SHEET_MATERIAL_AMOUNT, - /datum/material/plasma = HALF_SHEET_MATERIAL_AMOUNT, - ) - build_path = /obj/item/microfusion_gun_attachment/barrel/hellfire - -/datum/design/microfusion/attachment/barrel/repeater - name = "Repeating Phase Emitter Upgrade" - desc = "Upgrades the central phase emitter to repeat twice." - id = "microfusion_gun_attachment_repeater" - materials = list( - /datum/material/iron = HALF_SHEET_MATERIAL_AMOUNT, - /datum/material/glass = HALF_SHEET_MATERIAL_AMOUNT, - /datum/material/diamond = HALF_SHEET_MATERIAL_AMOUNT, - /datum/material/bluespace = HALF_SHEET_MATERIAL_AMOUNT, - ) - build_path = /obj/item/microfusion_gun_attachment/barrel/repeater - -/datum/design/microfusion/attachment/barrel/repeater/penetrator - name = "Focused Repeating Phase Emitter Upgrade" - desc = "Upgrades the central phase emitter to repeat twice and penetrate armor." - id = "microfusion_gun_attachment_penetrator" - materials = list( - /datum/material/iron = HALF_SHEET_MATERIAL_AMOUNT, - /datum/material/glass = HALF_SHEET_MATERIAL_AMOUNT, - /datum/material/diamond = HALF_SHEET_MATERIAL_AMOUNT, - /datum/material/bluespace = HALF_SHEET_MATERIAL_AMOUNT, - ) - build_path = /obj/item/microfusion_gun_attachment/barrel/repeater/penetrator - -/datum/design/microfusion/attachment/barrel/xray - name = "Phase Inverter Emitter Array" - desc = "Experimental technology that inverts the central phase emitter causing the wave frequency to shift into X-rays that pierce solid objects. CAUTION: Phase emitter heats up very quickly." - id = "microfusion_gun_attachment_xray" - materials = list( - /datum/material/iron = HALF_SHEET_MATERIAL_AMOUNT, - /datum/material/glass = HALF_SHEET_MATERIAL_AMOUNT, - /datum/material/diamond = HALF_SHEET_MATERIAL_AMOUNT, - /datum/material/uranium = HALF_SHEET_MATERIAL_AMOUNT, - /datum/material/bluespace = HALF_SHEET_MATERIAL_AMOUNT, - ) - build_path = /obj/item/microfusion_gun_attachment/barrel/xray - -// COSMETICS - -/datum/design/microfusion/attachment/unique - name = "Placeholder Microfusion Unique/Cosmetic Attachment" - category = list( - RND_CATEGORY_MICROFUSION_WEAPONS + RND_MICROFUSION_ATTACHMENT + RND_MICROFUSION_ATTACHMENT_UNIQUE, - ) - -/datum/design/microfusion/attachment/unique/rgb - name = "Phase Emitter Spectrograph" - desc = "An attachment hooked up to the phase emitter, allowing the user to adjust the color of the beam outputted. This has seen widespread use by various factions capable of getting their hands on microfusion weapons, whether as a calling card or simply for entertainment." - id = "microfusion_gun_attachment_rgb" - materials = list( - /datum/material/iron = HALF_SHEET_MATERIAL_AMOUNT, - /datum/material/glass = HALF_SHEET_MATERIAL_AMOUNT, - /datum/material/silver = HALF_SHEET_MATERIAL_AMOUNT, - /datum/material/gold = HALF_SHEET_MATERIAL_AMOUNT, - ) - build_path = /obj/item/microfusion_gun_attachment/rgb - -/datum/design/microfusion/attachment/unique/camo_black - name = "Black Camo Microfusion Frame" - desc = "A frame modification for the MCR-10, changing the color of the gun to black." - id = "microfusion_gun_attachment_black_camo" - materials = list( - /datum/material/iron = HALF_SHEET_MATERIAL_AMOUNT, - /datum/material/glass = HALF_SHEET_MATERIAL_AMOUNT, - /datum/material/gold = HALF_SHEET_MATERIAL_AMOUNT, - ) - build_path = /obj/item/microfusion_gun_attachment/camo - -/datum/design/microfusion/attachment/unique/camo_nanotrasen - name = "Nanotrasen Camo Microfusion Frame" - desc = "A frame modification for the MCR-01, changing the color of the gun to blue." - id = "microfusion_gun_attachment_nt_camo" - materials = list( - /datum/material/iron = HALF_SHEET_MATERIAL_AMOUNT, - /datum/material/glass = HALF_SHEET_MATERIAL_AMOUNT, - /datum/material/plasma = HALF_SHEET_MATERIAL_AMOUNT, - ) - build_path = /obj/item/microfusion_gun_attachment/camo/nanotrasen - -/datum/design/microfusion/attachment/unique/camo_syndicate - name = "Blood Red Camo Microfusion Frame" - desc = "A frame modification for the MCR-01, changing the color of the gun to a slick blood red." - id = "microfusion_gun_attachment_syndi_camo" - materials = list( - /datum/material/iron = HALF_SHEET_MATERIAL_AMOUNT, - /datum/material/glass = HALF_SHEET_MATERIAL_AMOUNT, - /datum/material/titanium = HALF_SHEET_MATERIAL_AMOUNT, - ) - build_path = /obj/item/microfusion_gun_attachment/camo/syndicate - -/datum/design/microfusion/attachment/unique/camo_bananium - name = "Bananium Microfusion Frame" - desc = "A frame modification for the MCR-01, plating the gun in bananium." - id = "microfusion_gun_attachment_honk_camo" - materials = list( - /datum/material/iron = HALF_SHEET_MATERIAL_AMOUNT, - /datum/material/glass = HALF_SHEET_MATERIAL_AMOUNT, - /datum/material/bananium = HALF_SHEET_MATERIAL_AMOUNT, - ) - build_path = /obj/item/microfusion_gun_attachment/camo/honk diff --git a/modular_nova/modules/microfusion/code/microfusion_energy_master.dm b/modular_nova/modules/microfusion/code/microfusion_energy_master.dm deleted file mode 100644 index ff5ad4f83e7..00000000000 --- a/modular_nova/modules/microfusion/code/microfusion_energy_master.dm +++ /dev/null @@ -1,768 +0,0 @@ -// FLUFFY FRONTIER EDIT NOTE: ДАННЫЙ ФАЙЛ БЫЛ ЧАСТИЧНО ПОДВЕРГНУТ ПЕРЕЗАПИСИ ПО ПУТИ tff_modular\modules\mcr_nerf_revert\code\mcr_override.dm! В СЛУЧАЕ ВОЗМОЖНЫХ ОШИБОК ВЫЗВАННЫХ ИЗМЕНЕНИЯМИ ТУТ - СМОТРИТЕ ФАЙЛ С ПЕРЕЗАПИСЯМИ. - -#define DUALWIELD_PENALTY_EXTRA_MULTIPLIER 1.4 - -// Master file for cell loadable energy guns. PROCS ONLY YOU MONKEYS! -// This file is a copy/paste of _energy.dm with extensive modification. - -/obj/item/gun/microfusion - name = "prototype detatchable cell energy projection aparatus" - desc = "The coders have obviously failed to realise this is broken." - icon = 'modular_nova/modules/microfusion/icons/microfusion_gun40x32.dmi' - icon_state = "mcr01" - inhand_icon_state = "mcr01" - lefthand_file = 'modular_nova/modules/microfusion/icons/guns_lefthand.dmi' - righthand_file = 'modular_nova/modules/microfusion/icons/guns_righthand.dmi' - can_bayonet = FALSE - weapon_weight = WEAPON_HEAVY - w_class = WEIGHT_CLASS_BULKY - obj_flags = UNIQUE_RENAME - ammo_x_offset = 2 - - /// What type of power cell this uses - var/obj/item/stock_parts/cell/microfusion/cell - /// The cell we will spawn with - var/cell_type = /obj/item/stock_parts/cell/microfusion - /// The cell type we check when inserting a cell - var/base_cell_type = /obj/item/stock_parts/cell/microfusion - /// If the weapon has custom icons for individual ammo types it can switch between. ie disabler beams, taser, laser/lethals, ect. - var/modifystate = FALSE - /// How many charge sections do we have? - var/charge_sections = 4 - /// if this gun uses a stateful charge bar for more detail - var/shaded_charge = FALSE - /// Should we give an overlay to empty guns? - var/display_empty = TRUE - /// whether the gun's cell drains the cyborg user's cell to recharge - var/dead_cell = FALSE - - // MICROFUSION SPECIFIC VARS - - /// The microfusion lens used for generating the beams. - var/obj/item/ammo_casing/energy/laser/microfusion/microfusion_lens - /// The sound played when you insert a cell. - var/sound_cell_insert = 'modular_nova/modules/microfusion/sound/mag_insert.ogg' - /// Should the insertion sound played vary? - var/sound_cell_insert_vary = TRUE - /// The volume at which we will play the insertion sound. - var/sound_cell_insert_volume = 50 - /// The sound played when you remove a cell. - var/sound_cell_remove = 'modular_nova/modules/microfusion/sound/mag_insert.ogg' - /// Should the removal sound played vary? - var/sound_cell_remove_vary = TRUE - /// The volume at which we will play the removal sound. - var/sound_cell_remove_volume = 50 - /// A list of attached upgrades - var/list/attachments = list() - /// The starting phase emitter in this weapon. - var/phase_emitter_type = /obj/item/microfusion_phase_emitter - /// The base emitter type that we check when putting a new emitter in. - var/base_phase_emitter_type = /obj/item/microfusion_phase_emitter - /// The phase emitter that this gun currently has. - var/obj/item/microfusion_phase_emitter/phase_emitter - /// The amount of heat produced per shot - var/heat_per_shot = 100 - /// The heat dissipation bonus granted by the weapon. - var/heat_dissipation_bonus = 0 - /// What slots does this gun have? - var/attachment_slots = list(GUN_SLOT_BARREL, GUN_SLOT_UNDERBARREL, GUN_SLOT_RAIL, GUN_SLOT_UNIQUE, GUN_SLOT_CAMO) - /// Our base firedelay. - var/base_fire_delay = 0 - /// Do we use more power because of attachments? - var/extra_power_usage = 0 - /// Spread from attachments. - var/attachment_spread = 0 - /// Recoil from attachments. - var/attachment_recoil = 0 - -/obj/item/gun/microfusion/emp_act(severity) - . = ..() - if(!(. & EMP_PROTECT_CONTENTS)) - cell.use(round(cell.charge / severity)) - chambered = null //we empty the chamber - recharge_newshot() //and try to charge a new shot - update_appearance() - -/obj/item/gun/microfusion/get_cell() - return cell - -/obj/item/gun/microfusion/Initialize(mapload) - . = ..() - if(cell_type) - cell = new cell_type(src) - else - cell = new(src) - cell.parent_gun = src - cell.chargerate = 300 - if(!dead_cell) - cell.give(cell.maxcharge) - if(phase_emitter_type) - phase_emitter = new phase_emitter_type(src) - else - phase_emitter = new(src) - phase_emitter.parent_gun = src - update_microfusion_lens() - recharge_newshot(TRUE) - AddElement(/datum/element/update_icon_updates_onmob) - update_appearance() - AddComponent(/datum/component/ammo_hud) - RegisterSignal(src, COMSIG_ITEM_RECHARGED, PROC_REF(instant_recharge)) - base_fire_delay = fire_delay - START_PROCESSING(SSobj, src) - -/obj/item/gun/microfusion/give_gun_safeties() - AddComponent(/datum/component/gun_safety) - -/obj/item/gun/microfusion/add_weapon_description() - AddElement(/datum/element/weapon_description, attached_proc = PROC_REF(add_notes_energy)) - -/obj/item/gun/microfusion/add_seclight_point() - return - -/obj/item/gun/microfusion/Destroy() - if(microfusion_lens) - QDEL_NULL(microfusion_lens) - if(cell) - cell.parent_gun = null - QDEL_NULL(cell) - if(attachments.len) - for(var/obj/item/iterating_item in attachments) - qdel(iterating_item) - attachments = null - if(phase_emitter) - QDEL_NULL(phase_emitter) - STOP_PROCESSING(SSobj, src) - return ..() - -/obj/item/gun/microfusion/Exited(atom/movable/gone, direction) - . = ..() - if(gone == cell) - cell = null - update_appearance() - else if(gone == phase_emitter) - phase_emitter = null - update_appearance() - -/obj/item/gun/microfusion/can_shoot() - return !QDELETED(cell) ? (cell.charge >= microfusion_lens.e_cost) : FALSE - -/obj/item/gun/microfusion/recharge_newshot() - if (!microfusion_lens || !cell || !phase_emitter) - return - chambered = microfusion_lens - if(!chambered.loaded_projectile) - chambered.newshot() - -/obj/item/gun/microfusion/handle_chamber() - if(chambered && !chambered.loaded_projectile && cell) //if loaded_projectile is null, i.e the shot has been fired... - var/obj/item/ammo_casing/energy/shot = chambered - cell.use(shot.e_cost + extra_power_usage)//... drain the cell - chambered = null //either way, released the prepared shot - recharge_newshot() //try to charge a new shot - -/obj/item/gun/microfusion/process_fire(atom/target, mob/living/user, message = TRUE, params = null, zone_override = "", bonus_spread = 0) - if(!chambered && can_shoot()) - process_chamber() // If the gun was drained and then recharged, load a new shot. - return ..() - -/obj/item/gun/microfusion/process(seconds_per_tick) - for(var/obj/item/microfusion_gun_attachment/attached as anything in attachments) - attached.process_attachment(src, seconds_per_tick) - -/obj/item/gun/microfusion/update_icon_state() - var/skip_inhand = initial(inhand_icon_state) //only build if we aren't using a preset inhand icon - var/skip_worn_icon = initial(worn_icon_state) //only build if we aren't using a preset worn icon - - if(skip_inhand && skip_worn_icon) //if we don't have either, don't do the math. - return ..() - - var/ratio = get_charge_ratio() - var/temp_icon_to_use = initial(icon_state) - if(modifystate) - temp_icon_to_use += "[microfusion_lens.select_name]" - - temp_icon_to_use += "[ratio]" - if(!skip_inhand) - inhand_icon_state = temp_icon_to_use - if(!skip_worn_icon) - worn_icon_state = temp_icon_to_use - return ..() - -/obj/item/gun/microfusion/update_overlays() - . = ..() - SEND_SIGNAL(src, COMSIG_UPDATE_AMMO_HUD) //update the ammo hud since it's heavily dependent on the gun's state - if(!phase_emitter) - . += "[icon_state]_phase_emitter_missing" - else if(phase_emitter.damaged) - . += "[icon_state]_phase_emitter_damaged" - else if(cell) - var/ratio = get_charge_ratio() - if(ratio == 0 && display_empty) - . += "[icon_state]_empty" - else if(shaded_charge) - . += "[icon_state]_charge[ratio]_[phase_emitter.icon_state]" - else - . += "[icon_state]_phase_emitter_missing" - - - for(var/obj/item/microfusion_gun_attachment/microfusion_gun_attachment in attachments) - . += "[icon_state]_[microfusion_gun_attachment.attachment_overlay_icon_state]" - - -/obj/item/gun/microfusion/ignition_effect(atom/to_ignite, mob/living/user) - if(!can_shoot() || !microfusion_lens) - shoot_with_empty_chamber() - . = "" - else - var/obj/projectile/energy/loaded_projectile = microfusion_lens.loaded_projectile - if(!loaded_projectile) - . = "" - else if(!loaded_projectile.damage || loaded_projectile.damage_type == STAMINA) - user.visible_message(span_danger("[user] tries to light [to_ignite.loc == user ? "[user.p_their()] [to_ignite.name]" : to_ignite] with [src], but it doesn't do anything. Dumbass.")) - playsound(user, microfusion_lens.fire_sound, 50, TRUE) - playsound(user, loaded_projectile.hitsound, 50, TRUE) - cell.use(microfusion_lens.e_cost) - . = "" - else if(loaded_projectile.damage_type != BURN) - user.visible_message(span_danger("[user] tries to light [to_ignite.loc == user ? "[user.p_their()] [to_ignite.name]" : to_ignite] with [src], but only succeeds in utterly destroying it. Dumbass.")) - playsound(user, microfusion_lens.fire_sound, 50, TRUE) - playsound(user, loaded_projectile.hitsound, 50, TRUE) - cell.use(microfusion_lens.e_cost) - qdel(to_ignite) - . = "" - else - playsound(user, microfusion_lens.fire_sound, 50, TRUE) - playsound(user, loaded_projectile.hitsound, 50, TRUE) - cell.use(microfusion_lens.e_cost) - . = span_danger("[user] casually lights [to_ignite.loc == user ? "[user.p_their()] [to_ignite.name]" : to_ignite] with [src]. Damn.") - -/obj/item/gun/microfusion/attackby(obj/item/attacking_item, mob/user, params) - . = ..() - if (.) - return - if(istype(attacking_item, base_cell_type)) - insert_cell(user, attacking_item) - if(istype(attacking_item, /obj/item/microfusion_gun_attachment)) - add_attachment(attacking_item, user) - if(istype(attacking_item, base_phase_emitter_type)) - insert_emitter(attacking_item, user) - -/obj/item/gun/microfusion/process_chamber(empty_chamber, from_firing, chamber_next_round) - . = ..() - if(!cell?.stabilised && prob(40)) - do_sparks(2, FALSE, src) //Microfusion guns create sparks! - -/obj/item/gun/microfusion/attack_hand(mob/user, list/modifiers) - if(loc == user && user.is_holding(src) && cell) - eject_cell(user) - return - return ..() - -/obj/item/gun/microfusion/crowbar_act(mob/living/user, obj/item/tool) - if(!phase_emitter) - balloon_alert(user, "no phase emitter!") - return - playsound(src, 'sound/items/crowbar.ogg', 70, TRUE) - remove_emitter() - -/obj/item/gun/microfusion/AltClick(mob/user) - . = ..() - if(can_interact(user)) - var/obj/item/microfusion_gun_attachment/to_remove = input(user, "Please select what part you'd like to remove.", "Remove attachment") as null|obj in sort_names(attachments) - if(!to_remove) - return - remove_attachment(to_remove, user) - -/obj/item/gun/microfusion/proc/remove_all_attachments() - if(attachments.len) - for(var/obj/item/microfusion_gun_attachment/attachment in attachments) - attachment.remove_attachment(src) - attachment.forceMove(get_turf(src)) - attachments -= attachment - update_appearance() - -/obj/item/gun/microfusion/examine(mob/user) - . = ..() - if(attachments.len) - for(var/obj/item/microfusion_gun_attachment/microfusion_gun_attachment in attachments) - . += span_notice("It has a [microfusion_gun_attachment.name] installed.") - . += span_notice("Alt+click it to remove an upgrade.") - if(phase_emitter) - . += span_notice("It has a [phase_emitter.name] installed, at [phase_emitter.get_heat_percent()]% heat capacity.") - . += span_notice("The [phase_emitter.name] is at [phase_emitter.integrity]% integrity.") - . += span_notice("The [phase_emitter.name] will thermal throttle at [phase_emitter.throttle_percentage]% heat capacity.") - . += span_notice("Use a crowbar to remove the phase emitter.") - else - . += span_danger("It does not have a phase emitter installed!") - - if(cell) - . += span_notice("It has a [cell.name] installed, with a capacity of [cell.charge]/[cell.maxcharge] MF.") - -/obj/item/gun/microfusion/suicide_act(mob/living/user) - if (istype(user) && can_shoot() && can_trigger_gun(user) && user.get_bodypart(BODY_ZONE_HEAD)) - user.visible_message(span_suicide("[user] is putting the barrel of [src] in [user.p_their()] mouth. It looks like [user.p_theyre()] trying to commit suicide!")) - sleep(2.5 SECONDS) - if(user.is_holding(src)) - user.visible_message(span_suicide("[user] melts [user.p_their()] face off with [src]!")) - playsound(loc, fire_sound, 50, TRUE, -1) - cell.use(microfusion_lens.e_cost) - update_appearance() - return(FIRELOSS) - else - user.visible_message(span_suicide("[user] panics and starts choking to death!")) - return(OXYLOSS) - else - user.visible_message(span_suicide("[user] is pretending to melt [user.p_their()] face off with [src]! It looks like [user.p_theyre()] trying to commit suicide!
    ")) - playsound(src, dry_fire_sound, 30, TRUE) - return (OXYLOSS) - -// To maintain modularity, I am moving this proc override here. -/obj/item/gun/microfusion/fire_gun(atom/target, mob/living/user, flag, params) - - // check to see if the emitter prevents us from firing before anything else - var/attempted_shot = process_emitter() - if(attempted_shot != SHOT_SUCCESS) - if(attempted_shot) - balloon_alert(user, attempted_shot) - return - - . = ..() - -// To maintain modularity, I am moving this proc override here. -/obj/item/gun/microfusion/process_fire(atom/target, mob/living/user, message = TRUE, params = null, zone_override = "", bonus_spread = 0) - var/base_bonus_spread = 0 - if(user) - var/list/bonus_spread_values = list(base_bonus_spread, bonus_spread) - SEND_SIGNAL(user, COMSIG_MOB_FIRED_GUN, src, target, params, zone_override, bonus_spread_values) - base_bonus_spread = bonus_spread_values[MIN_BONUS_SPREAD_INDEX] - bonus_spread = bonus_spread_values[MAX_BONUS_SPREAD_INDEX] - - SEND_SIGNAL(src, COMSIG_GUN_FIRED, user, target, params, zone_override) - - add_fingerprint(user) - - if(semicd) - return - - //Vary by at least this much - var/randomized_bonus_spread = rand(base_bonus_spread, bonus_spread) - var/randomized_gun_spread = spread ? rand(0, spread) : 0 - var/total_random_spread = max(0, randomized_bonus_spread + randomized_gun_spread) - var/burst_spread_mult = rand() - - var/modified_delay = fire_delay - if(phase_emitter) - modified_delay = phase_emitter.fire_delay - if(user && HAS_TRAIT(user, TRAIT_DOUBLE_TAP)) - modified_delay = ROUND_UP(fire_delay * 0.5) - - if(burst_size > 1) - firing_burst = TRUE - for(var/i = 1 to burst_size) - addtimer(CALLBACK(src, PROC_REF(process_burst), user, target, message, params, zone_override, total_random_spread, burst_spread_mult, i), modified_delay * (i - 1)) - else - if(chambered) - if(HAS_TRAIT(user, TRAIT_PACIFISM)) // If the user has the pacifist trait, then they won't be able to fire [src] if the round chambered inside of [src] is lethal. - if(chambered.harmful) // Is the bullet chambered harmful? - balloon_alert(user, "lethally chambered!") - return - var/calculated_spread = round((rand(0, 1) - 0.5) * DUALWIELD_PENALTY_EXTRA_MULTIPLIER * total_random_spread) - before_firing(target,user) - process_microfusion() - if(!chambered.fire_casing(target, user, params, , suppressed, zone_override, calculated_spread, src)) - shoot_with_empty_chamber(user) - return - else - if(get_dist(user, target) <= 1) //Making sure whether the target is in vicinity for the pointblank shot - shoot_live_shot(user, 1, target, message) - else - shoot_live_shot(user, 0, target, message) - else - shoot_with_empty_chamber(user) - return - process_chamber() - update_appearance() - semicd = TRUE - var/fire_delay_to_add = 0 - if(phase_emitter) - fire_delay_to_add = phase_emitter.fire_delay - addtimer(CALLBACK(src, PROC_REF(reset_semicd)), fire_delay + fire_delay_to_add) - - if(user) - user.update_held_items() - SSblackbox.record_feedback("tally", "gun_fired", 1, type) - - SEND_SIGNAL(src, COMSIG_UPDATE_AMMO_HUD) - - return TRUE - -// Same goes for this! -/obj/item/gun/microfusion/process_burst( - mob/living/user, - atom/target, - message = TRUE, - params = null, - zone_override = "", - random_spread = 0, - burst_spread_mult = 0, - iteration = 0, - ) - - if(!user || !firing_burst) - firing_burst = FALSE - return FALSE - if(!can_shoot()) - firing_burst = FALSE - return FALSE - if(!chambered) - process_chamber() // Ditto. - if(!issilicon(user)) - if(iteration > 1 && !(user.is_holding(src))) //for burst firing - firing_burst = FALSE - return FALSE - if(chambered?.loaded_projectile) - if(HAS_TRAIT(user, TRAIT_PACIFISM)) // If the user has the pacifist trait, then they won't be able to fire [src] if the round chambered inside of [src] is lethal. - if(chambered.harmful) // Is the bullet chambered harmful? - balloon_alert(user, "lethally chambered!") - return - var/calculated_spread - if(randomspread) - calculated_spread = round((rand(0, 1) - 0.5) * DUALWIELD_PENALTY_EXTRA_MULTIPLIER * (random_spread)) - else //Smart spread - calculated_spread = round((((burst_spread_mult/burst_size) * iteration) - (0.5 + (burst_spread_mult * 0.25))) * (random_spread)) - before_firing(target,user) - process_microfusion() - if(!chambered.fire_casing(target, user, params, ,suppressed, zone_override, calculated_spread, src)) - shoot_with_empty_chamber(user) - firing_burst = FALSE - return FALSE - else - if(get_dist(user, target) <= 1) //Making sure whether the target is in vicinity for the pointblank shot - shoot_live_shot(user, 1, target, message) - else - shoot_live_shot(user, 0, target, message) - if (iteration >= burst_size) - firing_burst = FALSE - else - shoot_with_empty_chamber(user) - firing_burst = FALSE - return FALSE - process_chamber() - update_appearance() - SEND_SIGNAL(src, COMSIG_UPDATE_AMMO_HUD) - return TRUE - -/obj/item/gun/microfusion/shoot_live_shot(mob/living/user, pointblank, atom/pbtarget, message) - if(recoil) - shake_camera(user, recoil + 1, recoil) - - var/sound_freq_to_add = 0 - - if(phase_emitter && phase_emitter.sound_freq > 1) - sound_freq_to_add = phase_emitter.sound_freq - - if(suppressed) - playsound(user, suppressed_sound, suppressed_volume, vary_fire_sound, ignore_walls = FALSE, extrarange = SILENCED_SOUND_EXTRARANGE, frequency = sound_freq_to_add, falloff_distance = 0) - else - playsound(user, fire_sound, fire_sound_volume, vary_fire_sound, frequency = sound_freq_to_add) - if(message) - if(pointblank) - user.visible_message(span_danger("[user] fires [src] point blank at [pbtarget]!"), \ - span_danger("You fire [src] point blank at [pbtarget]!"), \ - span_hear("You hear a gunshot!"), COMBAT_MESSAGE_RANGE, pbtarget) - to_chat(pbtarget, span_userdanger("[user] fires [src] point blank at you!")) - if(pb_knockback > 0 && ismob(pbtarget)) - var/mob/PBT = pbtarget - var/atom/throw_target = get_edge_target_turf(PBT, user.dir) - PBT.throw_at(throw_target, pb_knockback, 2) - else - user.visible_message(span_danger("[user] fires [src]!"), \ - span_danger("You fire [src]!"), \ - span_hear("You hear a gunshot!"), COMBAT_MESSAGE_RANGE) - if(user.resting) - user.Immobilize(20, TRUE) - - phase_emitter.add_heat(heat_per_shot) - - if(phase_emitter.current_heat > phase_emitter.max_heat) - if(ishuman(user)) - var/mob/living/carbon/human/human = user - var/obj/item/bodypart/affecting = human.get_bodypart("[(user.active_hand_index % 2 == 0) ? "r" : "l" ]_arm") - if(affecting?.receive_damage( 0, 5 )) // 1 burn damage - to_chat(user, span_warning("[src] burns your hand, it's too hot!")) - -/obj/item/gun/microfusion/proc/process_microfusion() - if(attachments.len) - for(var/obj/item/microfusion_gun_attachment/attachment in attachments) - attachment.process_fire(src, chambered) - return TRUE - -/obj/item/gun/microfusion/proc/process_emitter() - if(!phase_emitter) - return SHOT_FAILURE_NO_EMITTER - var/phase_emitter_process = phase_emitter.check_emitter() - if(phase_emitter_process != SHOT_SUCCESS) - return phase_emitter_process - return SHOT_SUCCESS - -/obj/item/gun/microfusion/proc/instant_recharge() - SIGNAL_HANDLER - if(!cell) - return - cell.charge = cell.maxcharge - recharge_newshot() - update_appearance() - -///Used by update_icon_state() and update_overlays() -/obj/item/gun/microfusion/proc/get_charge_ratio() - return can_shoot() ? CEILING(clamp(cell.charge / cell.maxcharge, 0, 1) * charge_sections, 1) : 0 - // Sets the ratio to 0 if the gun doesn't have enough charge to fire, or if its power cell is removed. - -/** - * - * Outputs type-specific weapon stats for energy-based firearms based on its firing modes - * and the stats of those firing modes. Esoteric firing modes like ion are currently not supported - * but can be added easily - * - */ -/obj/item/gun/microfusion/proc/add_notes_energy() - var/list/readout = list() - // Make sure there is something to actually retrieve - if(!microfusion_lens) - return - var/obj/projectile/exam_proj - readout += "Our heroic interns have shown that one can theoretically stay standing after..." - exam_proj = initial(microfusion_lens?.projectile_type) - - if(!istype(exam_proj)) - return readout.Join("\n") - - if(exam_proj.damage > 0) // Don't divide by 0!!!!! - readout += "[span_warning("[HITS_TO_CRIT(exam_proj.damage * microfusion_lens.pellets)] shot\s")] on [span_warning("[microfusion_lens.select_name]")] mode before collapsing from [exam_proj.damage_type == STAMINA ? "immense pain" : "their wounds"]." - if(exam_proj.stamina > 0) // In case a projectile does damage AND stamina damage (Energy Crossbow) - readout += "[span_warning("[HITS_TO_CRIT(exam_proj.stamina * microfusion_lens.pellets)] shot\s")] on [span_warning("[microfusion_lens.select_name]")] mode before collapsing from immense pain." - else - readout += "a theoretically infinite number of shots on [span_warning("[microfusion_lens.select_name]")] mode." - - return readout.Join("\n") // Sending over the singular string, rather than the whole list - -/obj/item/gun/microfusion/proc/update_microfusion_lens() - if(!microfusion_lens) - microfusion_lens = new(src) - fire_sound = microfusion_lens.fire_sound - fire_sound_volume = microfusion_lens.fire_sound_volume - fire_delay = microfusion_lens.delay - -// Cell, emitter and upgrade interactions - -/obj/item/gun/microfusion/proc/remove_emitter(mob/user) - playsound(src, sound_cell_insert, 50, TRUE) - phase_emitter.forceMove(get_turf(src)) - if(user) - user.put_in_hands(phase_emitter) - balloon_alert(user, "removed phase emitter") - phase_emitter.parent_gun = null - phase_emitter = null - update_appearance() - -/obj/item/gun/microfusion/proc/insert_emitter(obj/item/microfusion_phase_emitter/inserting_phase_emitter, mob/living/user) - if(phase_emitter) - balloon_alert(user, "already one installed!") - return FALSE - balloon_alert(user, "inserted phase emitter") - playsound(src, sound_cell_remove, 50, TRUE) - inserting_phase_emitter.forceMove(src) - phase_emitter = inserting_phase_emitter - phase_emitter.parent_gun = src - update_appearance() - - -/// Try to insert the cell into the gun, if successful, return TRUE -/obj/item/gun/microfusion/proc/insert_cell(mob/user, obj/item/stock_parts/cell/microfusion/inserting_cell, display_message = TRUE) - var/hotswap = FALSE - if(cell) - hotswap = TRUE - var/obj/item/stock_parts/cell/old_cell = cell - if(inserting_cell.charge) - balloon_alert(user, "can't insert a charged cell!") - return FALSE - if(display_message) - balloon_alert(user, "cell inserted") - if(hotswap) - eject_cell(user, FALSE, FALSE) - if(sound_cell_insert) - playsound(src, sound_cell_insert, sound_cell_insert_volume, sound_cell_insert_vary) - cell = inserting_cell - inserting_cell.forceMove(src) - inserting_cell.inserted_into_weapon() - cell.parent_gun = src - if(old_cell) - user.put_in_hands(old_cell) - recharge_newshot() - update_appearance() - return TRUE - -/// Ejecting a cell. -/obj/item/gun/microfusion/proc/eject_cell(mob/user, display_message = TRUE, put_in_hands = TRUE) - var/obj/item/stock_parts/cell/microfusion/old_cell = cell - old_cell.forceMove(get_turf(src)) - old_cell.cell_removal_discharge() - if(user) - if(put_in_hands) - user.put_in_hands(old_cell) - if(display_message) - balloon_alert(user, "cell removed") - if(sound_cell_remove) - playsound(src, sound_cell_remove, sound_cell_remove_volume, sound_cell_remove_vary) - old_cell.update_appearance() - old_cell.parent_gun = null - cell = null - update_appearance() - -/// Attatching an upgrade. -/obj/item/gun/microfusion/proc/add_attachment(obj/item/microfusion_gun_attachment/microfusion_gun_attachment, mob/living/user) - if(is_type_in_list(microfusion_gun_attachment, attachments)) - balloon_alert(user, "already has one!") - return FALSE - if(!(microfusion_gun_attachment.slot in attachment_slots)) - balloon_alert(user, "can't install!") - return FALSE - for(var/obj/item/microfusion_gun_attachment/iterating_attachment in attachments) - if(is_type_in_list(microfusion_gun_attachment, iterating_attachment.incompatible_attachments)) - balloon_alert(user, "not compatible with [iterating_attachment]!") - return FALSE - if(iterating_attachment.slot != GUN_SLOT_UNIQUE && iterating_attachment.slot == microfusion_gun_attachment.slot) - balloon_alert(user, "slot full!") - return FALSE - attachments += microfusion_gun_attachment - microfusion_gun_attachment.forceMove(src) - microfusion_gun_attachment.run_attachment(src) - balloon_alert(user, "installed attachment") - playsound(src, 'sound/effects/structure_stress/pop2.ogg', 70, TRUE) - return TRUE - -/obj/item/gun/microfusion/proc/remove_attachment(obj/item/microfusion_gun_attachment/microfusion_gun_attachment, mob/living/user) - balloon_alert(user, "removed attachment") - playsound(src, 'sound/items/screwdriver.ogg', 70) - microfusion_gun_attachment.forceMove(get_turf(src)) - attachments -= microfusion_gun_attachment - microfusion_gun_attachment.remove_attachment(src) - user?.put_in_hands(microfusion_gun_attachment) - update_appearance() - -// UI CONTROL - -/obj/item/gun/microfusion/ui_interact(mob/user, datum/tgui/ui) - ui = SStgui.try_update_ui(user, src, ui) - if(!ui) - ui = new(user, src, "MicrofusionGunControl") - ui.open() - -/obj/item/gun/microfusion/ui_data(mob/user) - var/list/data = list() - - data["gun_name"] = name - data["gun_desc"] = desc - data["gun_heat_dissipation"] = heat_dissipation_bonus - - if(phase_emitter) - data["has_emitter"] = TRUE - data["phase_emitter_data"] = list( - "type" = capitalize(phase_emitter.name), - "integrity" = phase_emitter.integrity, - "current_heat" = phase_emitter.current_heat, - "throttle_percentage" = phase_emitter.throttle_percentage, - "heat_dissipation_per_tick" = phase_emitter.heat_dissipation_per_tick, - "max_heat" = phase_emitter.max_heat, - "damaged" = phase_emitter.damaged, - "hacked" = phase_emitter.hacked, - "heat_percent" = phase_emitter.get_heat_percent(), - "process_time" = phase_emitter.fire_delay, - "cooling_system" = phase_emitter.cooling_system, - "cooling_system_rate" = phase_emitter.cooling_system_rate, - ) - else - data["has_emitter"] = FALSE - - if(cell) - var/list/attachments = list() - for(var/obj/item/microfusion_cell_attachment/attachment in cell.attachments) - attachments += attachment.name - data["has_cell"] = TRUE - data["cell_data"] = list( - "type" = capitalize(cell.name), - "charge" = cell.charge, - "max_charge" = cell.maxcharge, - "status" = cell.meltdown, - "attachments" = attachments, - ) - else - data["has_cell"] = FALSE - - - - if(attachments.len) - data["has_attachments"] = TRUE - data["attachments"] = list() - for(var/obj/item/microfusion_gun_attachment/attachment in attachments) - var/list/attachment_functions = attachment.get_modify_data() - var/has_modifications = FALSE - if(attachment_functions?.len > 0) - has_modifications = TRUE - data["attachments"] += list(list( - "name" = uppertext(attachment.name), - "desc" = attachment.desc, - "slot" = capitalize(attachment.slot), - "information" = attachment.get_information_data(), - "has_modifications" = has_modifications, - "modify" = attachment_functions, - "ref" = REF(attachment), - )) - - else - data["has_attachments"] = FALSE - - return data - -/obj/item/gun/microfusion/ui_act(action, list/params) - . = ..() - if(.) - return - - switch(action) - if("eject_cell") - if(!cell) - return - eject_cell(usr) - if("overclock_emitter") - if(!phase_emitter) - return - if(!phase_emitter.hacked) - return - phase_emitter.set_overclock(usr) - if("eject_emitter") - if(!phase_emitter) - return - remove_emitter(usr) - if("remove_attachment") - var/obj/item/microfusion_gun_attachment/to_remove = locate(params["attachment_ref"]) in src - if(!to_remove) - return - remove_attachment(to_remove, usr) - if("modify_attachment") - var/obj/item/microfusion_gun_attachment/to_modify = locate(params["attachment_ref"]) in src - if(!to_modify) - return - to_modify.run_modify_data(params["modify_ref"], usr, src) - if("toggle_cooling_system") - if(!phase_emitter) - return - phase_emitter.toggle_cooling_system(usr) - -/// Recalculates the spread, based on attachment-provided values. -/obj/item/gun/microfusion/proc/recalculate_spread() - spread = max(0, attachment_spread) - -/// Recalculates the recoil, based on attachment-provided values. -/obj/item/gun/microfusion/proc/recalculate_recoil() - recoil = max(0, attachment_recoil) diff --git a/modular_nova/modules/microfusion/code/microfusion_gun_attachments.dm b/modular_nova/modules/microfusion/code/microfusion_gun_attachments.dm deleted file mode 100644 index f3edf7eb295..00000000000 --- a/modular_nova/modules/microfusion/code/microfusion_gun_attachments.dm +++ /dev/null @@ -1,519 +0,0 @@ -/** -*MICROFUSION GUN UPGRADE ATTACHMENTS -*For adding unique abilities to microfusion guns, these can directly interact with the gun! -*/ - -/obj/item/microfusion_gun_attachment - name = "microfusion gun attachment" - desc = "If you see this yell at a coder" - icon = 'modular_nova/modules/microfusion/icons/microfusion_gun_attachments.dmi' - w_class = WEIGHT_CLASS_NORMAL - /// The attachment overlay icon state. - var/attachment_overlay_icon_state - /// Any incompatible upgrade types. - var/list/incompatible_attachments = list() - /// The added heat produced by having this module installed. - var/heat_addition = 0 - /// The slot this attachment is installed in. - var/slot = GUN_SLOT_UNIQUE - /// How much extra power do we use? - var/power_usage = 0 - /// Spread adjustment. Moved up to the base attachment type because of barrel mods and grips being in separate slots. - var/spread_adjust - /// Recoil adjustment. Also moved up to base attachment because of barrel mods and grips being in separate slots. - var/recoil_adjust - -/obj/item/microfusion_gun_attachment/examine(mob/user) - . = ..() - . += "Compatible slot: [slot]." - -/obj/item/microfusion_gun_attachment/proc/run_attachment(obj/item/gun/microfusion/microfusion_gun) - SHOULD_CALL_PARENT(TRUE) - microfusion_gun.heat_per_shot += heat_addition - microfusion_gun.update_appearance() - microfusion_gun.extra_power_usage += power_usage - microfusion_gun.chambered?.refresh_shot() - if(spread_adjust) - microfusion_gun.attachment_spread += spread_adjust - microfusion_gun.recalculate_spread() - if(recoil_adjust) - microfusion_gun.attachment_recoil += recoil_adjust - microfusion_gun.recalculate_recoil() - return - -/obj/item/microfusion_gun_attachment/proc/process_attachment(obj/item/gun/microfusion/microfusion_gun, seconds_per_tick) - return - -//Firing the gun right before we let go of it, tis is called. -/obj/item/microfusion_gun_attachment/proc/process_fire(obj/item/gun/microfusion/microfusion_gun, obj/item/ammo_casing/chambered) - return - -/obj/item/microfusion_gun_attachment/proc/remove_attachment(obj/item/gun/microfusion/microfusion_gun) - SHOULD_CALL_PARENT(TRUE) - microfusion_gun.heat_per_shot -= heat_addition - microfusion_gun.update_appearance() - microfusion_gun.extra_power_usage -= power_usage - microfusion_gun.chambered?.refresh_shot() - if(spread_adjust) - microfusion_gun.attachment_spread -= spread_adjust - microfusion_gun.recalculate_spread() - if(recoil_adjust) - microfusion_gun.attachment_recoil -= recoil_adjust - microfusion_gun.recalculate_recoil() - return - -/* -Returns a list of modifications of this attachment, it must return a list within a list list(list()). -All of the following must be returned. -list(list("title" = "Toggle [toggle ? "OFF" : "ON"]", "icon" = "power-off", "color" = "blue" "reference" = "toggle_on_off")) -title - The title of the modification button -icon - The icon of the modification button -color - The color of the modification button -reference - The reference of the modification button, this is used to call the proc when the run modify data proc is called. -*/ -/obj/item/microfusion_gun_attachment/proc/get_modify_data() - return - -/obj/item/microfusion_gun_attachment/proc/run_modify_data(params, mob/living/user, obj/item/gun/microfusion/microfusion_gun) - return - -/obj/item/microfusion_gun_attachment/proc/get_information_data() - return - -// base type for the barrel mods because i got Really Tired of re-re-redefined variables -/obj/item/microfusion_gun_attachment/barrel - slot = GUN_SLOT_BARREL - /// If this isn't null, we're replacing our next loaded projectile with this type. - var/projectile_override - /// If this isn't null, on attachment, this becomes the new fire sound. - var/new_fire_sound - /// If this isn't null or zero, adds this fire delay to the gun. - var/delay_to_add - /// If this isn't null or zero, adds this burst to the gun's burst size. - var/burst_to_add - -/obj/item/microfusion_gun_attachment/barrel/process_fire(obj/item/gun/microfusion/microfusion_gun, obj/item/ammo_casing/chambered) - . = ..() - if(projectile_override) - chambered.loaded_projectile = new projectile_override - -/obj/item/microfusion_gun_attachment/barrel/run_attachment(obj/item/gun/microfusion/microfusion_gun) - . = ..() - if(new_fire_sound) - microfusion_gun.fire_sound = new_fire_sound - if(delay_to_add) - microfusion_gun.fire_delay += delay_to_add - if(burst_to_add) - microfusion_gun.burst_size += burst_to_add - -/obj/item/microfusion_gun_attachment/barrel/remove_attachment(obj/item/gun/microfusion/microfusion_gun) - . = ..() - if(new_fire_sound) - microfusion_gun.fire_sound = microfusion_gun.chambered?.fire_sound - if(delay_to_add) - microfusion_gun.fire_delay -= delay_to_add - if(burst_to_add) - microfusion_gun.burst_size -= burst_to_add - -/* -SCATTER ATTACHMENT - -Turns the gun into a shotgun. -*/ -/obj/item/microfusion_gun_attachment/barrel/scatter - name = "diffuser microfusion lens upgrade" - desc = "A diffusing lens system capable of splitting one beam into three." - icon_state = "attachment_scatter" - attachment_overlay_icon_state = "attachment_scatter" - slot = GUN_SLOT_BARREL - projectile_override = /obj/projectile/beam/laser/microfusion/scatter - /// How many pellets are we going to add to the existing amount on the gun? - var/pellets_to_add = 2 - /// The variation in pellet scatter. - var/variance_to_add = 20 - -/obj/item/microfusion_gun_attachment/barrel/scatter/run_attachment(obj/item/gun/microfusion/microfusion_gun) - . = ..() - microfusion_gun.microfusion_lens.pellets += pellets_to_add - microfusion_gun.microfusion_lens.variance += variance_to_add - -/obj/item/microfusion_gun_attachment/barrel/scatter/process_fire(obj/item/gun/microfusion/microfusion_gun, obj/item/ammo_casing/chambered) - . = ..() - chambered.loaded_projectile?.damage = chambered.loaded_projectile.damage / chambered.pellets - -/obj/item/microfusion_gun_attachment/barrel/scatter/remove_attachment(obj/item/gun/microfusion/microfusion_gun) - . = ..() - microfusion_gun.microfusion_lens.pellets -= pellets_to_add - microfusion_gun.microfusion_lens.variance -= variance_to_add - -/* -CRYSTALLINE SCATTER ATTACHMENT - -An overclocked shotgun. -*/ - -/obj/item/microfusion_gun_attachment/barrel/scatter/max - name = "crystalline diffuser microfusion lens upgrade" - desc = "An experimental diffusing lens system capable of splitting one beam into seven. However, it imparts recoil and causes an increased power draw." - icon_state = "attachment_scattermax" - attachment_overlay_icon_state = "attachment_scattermax" - slot = GUN_SLOT_BARREL - pellets_to_add = 6 - variance_to_add = 25 - recoil_adjust = 1 - spread_adjust = 15 - projectile_override = /obj/projectile/beam/laser/microfusion/scatter/max - power_usage = 20 - -/* -SUPERHEAT ATTACHMENT - -Lasers set the target on fire. -*/ - -/obj/item/microfusion_gun_attachment/barrel/superheat - name = "superheating phase emitter upgrade" - desc = "A barrel attachment hooked to the phase emitter, this adjusts the beam's wavelength to carry an intense wave of heat; causing targets to ignite." - icon_state = "attachment_superheat" - attachment_overlay_icon_state = "attachment_superheat" - heat_addition = 90 - slot = GUN_SLOT_BARREL - projectile_override = /obj/projectile/beam/laser/microfusion/superheated - new_fire_sound = 'modular_nova/modules/microfusion/sound/vaporize.ogg' - -/* -HELLFIRE ATTACHMENT - -Makes the gun shoot hellfire lasers. -*/ -/obj/item/microfusion_gun_attachment/barrel/hellfire - name = "hellfire emitter upgrade" - desc = "A barrel attachment hooked to the phase emitter, this adjusts the beam's wavelength to carry an extra wave of heat; causing nastier wounds and more damage." - icon_state = "attachment_hellfire" - attachment_overlay_icon_state = "attachment_hellfire" - heat_addition = 50 - power_usage = 20 - slot = GUN_SLOT_BARREL - projectile_override = /obj/projectile/beam/laser/microfusion/hellfire - new_fire_sound = 'modular_nova/modules/microfusion/sound/melt.ogg' - -/* -REPEATER ATTACHMENT - -The gun can fire volleys of shots. -*/ -/obj/item/microfusion_gun_attachment/barrel/repeater - name = "repeating phase emitter upgrade" - desc = "This barrel attachment upgrades the central phase emitter to fire off two beams in quick succession. While offering an increased rate of fire, the heat output and recoil rises too." - icon_state = "attachment_repeater" - attachment_overlay_icon_state = "attachment_repeater" - heat_addition = 40 - slot = GUN_SLOT_BARREL - spread_adjust = 15 - recoil_adjust = 1 - burst_to_add = 1 - delay_to_add = 5 - projectile_override = /obj/projectile/beam/laser/microfusion/repeater - -/* -FOCUSED REPEATER ATTACHMENT - -The gun can fire volleys of shots that penetrate armor. -*/ - -/obj/item/microfusion_gun_attachment/barrel/repeater/penetrator - name = "focused repeating phase emitter upgrade" - desc = "A focused variant of the repeating phase controller. It allows the lasers to penetrate armor however this results in higher power usage." - icon_state = "attachment_penetrator" - attachment_overlay_icon_state = "attachment_penetrator" - power_usage = 20 - slot = GUN_SLOT_BARREL - projectile_override = /obj/projectile/beam/laser/microfusion/penetrator - power_usage = 80 // A price to pay to penetrate through armor - -/* -X-RAY ATTACHMENT - -The gun can fire X-RAY shots. -*/ -/obj/item/microfusion_gun_attachment/barrel/xray - name = "quantum phase inverter array" //Yes quantum makes things sound cooler. - desc = "An experimental barrel attachment that modifies the central phase emitter, causing the wave frequency to shift into X-ray. \ - Capable of penetrating both glass and solid matter with ease; though, unlike a more traditional x-ray laser gun, \ - the bolts don't carry a greater effect against armor, due to going through the target and doing more minimal internal damage. \ - These attachments are power-hungry and overheat easily, though engineers have deemed the costs necessary drawbacks." - icon_state = "attachment_xray" - slot = GUN_SLOT_BARREL - attachment_overlay_icon_state = "attachment_xray" - heat_addition = 90 - power_usage = 50 - new_fire_sound = 'modular_nova/modules/microfusion/sound/incinerate.ogg' - projectile_override = /obj/projectile/beam/laser/microfusion/xray - -/obj/item/microfusion_gun_attachment/barrel/xray/examine(mob/user) - . = ..() - . += span_warning("CAUTION: Phase emitter heats up extremely quickly, sustained fire not recommended!") - -/* -SUPPRESSOR ATTACHMENT - -Makes operators operate operatingly. -*/ - -/obj/item/microfusion_gun_attachment/barrel/suppressor - name = "laser suppressor" // sure it makes no sense but its cool - desc = "An experimental barrel attachment that dampens the soundwave of the emitter, making the laser shots far more stealthy. Best paired with black camo." - icon_state = "attachment_suppressor" - slot = GUN_SLOT_BARREL - attachment_overlay_icon_state = "attachment_suppressor" - -/obj/item/microfusion_gun_attachment/barrel/suppressor/run_attachment(obj/item/gun/microfusion/microfusion_gun) - . = ..() - microfusion_gun.suppressed = TRUE - -/obj/item/microfusion_gun_attachment/barrel/suppressor/remove_attachment(obj/item/gun/microfusion/microfusion_gun) - . = ..() - microfusion_gun.suppressed = null - -/* -BIKEHORN ATTACHMENT - -HONK!! Does subpar stamina damage but slips people. -*/ - -/obj/item/microfusion_gun_attachment/barrel/honk - name = "bananium phase emitter upgrade" - desc = "An honksperimental barrel attachment that makes your lasers funnier." - icon_state = "attachment_honk" - attachment_overlay_icon_state = "attachment_honk" - delay_to_add = 2 SECONDS - new_fire_sound = 'sound/items/bikehorn.ogg' - projectile_override = /obj/projectile/beam/laser/microfusion/honk - -/obj/item/microfusion_gun_attachment/barrel/honk/examine(mob/user) - . = ..() - . += span_warning("CAUTION: The gun you are about to handle is extremely funny!") - -/* -LANCE ATTACHMENT - -The gun fires fast heavy lasers but takes a long time to fire. -*/ -/obj/item/microfusion_gun_attachment/barrel/lance - name = "lance induction carriage" - desc = "A modification kit that turns the MCR into a designated marksman rifle. Fired beams boast greater firepower and speed, \ - but the enhanced throughput is very draining on the cell, as well as generating an extreme amount of heat. \ - Users are advised to make their shots count." - icon = 'icons/obj/weapons/improvised.dmi' - icon_state = "kitsuitcase" - incompatible_attachments = list(/obj/item/microfusion_gun_attachment/camo, /obj/item/microfusion_gun_attachment/camo/nanotrasen, /obj/item/microfusion_gun_attachment/camo/honk) - attachment_overlay_icon_state = "attachment_lance" - heat_addition = 150 - power_usage = 100 - delay_to_add = 2.5 SECONDS - new_fire_sound = 'sound/weapons/lasercannonfire.ogg' - projectile_override = /obj/projectile/beam/laser/microfusion/lance - -/obj/item/microfusion_gun_attachment/barrel/lance/examine(mob/user) - . = ..() - . += span_warning("CAUTION: Phase emitter heats up extremely quickly!") - -/* -PULSE ATTACHMENT - -The gun can fire PULSE shots. -*/ -/obj/item/microfusion_gun_attachment/barrel/pulse - name = "pulse induction carriage" - desc = "A cutting-edge bluespace capacitor array and distributing lens overhaul produced in laboratories by Nanotrasen scientists that allow microfusion rifles to fire military-grade pulse rounds. Comes equipped with cyclic cooling to ensure maximum combat efficiency, a munitions counter, and an extra-secure drop cage for the power source. May shorten trigger lifetime." - icon_state = "attachment_pulse" - attachment_overlay_icon_state = "attachment_pulse" - heat_addition = 150 - power_usage = 50 - projectile_override = /obj/projectile/beam/pulse - burst_to_add = 2 - delay_to_add = 2 - -/obj/item/microfusion_gun_attachment/barrel/pulse/examine(mob/user) - . = ..() - . += span_warning("CAUTION: Phase emitter heats up extremely quickly, sustained fire not recommended!") - -/* -GRIP ATTACHMENT - -Greatly reduces recoil and spread. -*/ -/obj/item/microfusion_gun_attachment/grip - name = "grip attachment" - desc = "A simple grip that increases accuracy." - icon_state = "attachment_grip" - attachment_overlay_icon_state = "attachment_grip" - slot = GUN_SLOT_UNDERBARREL - spread_adjust = -10 - recoil_adjust = -1 - -/* -HEATSINK ATTACHMENT - -"Greatly increases the phase emitter cooling rate." -*/ -/obj/item/microfusion_gun_attachment/heatsink - name = "phase emitter heatsink" - desc = "Greatly increases the phase emitter cooling rate." - icon_state = "attachment_heatsink" - attachment_overlay_icon_state = "attachment_heatsink" - slot = GUN_SLOT_UNDERBARREL - /// Cooling bonus. - var/cooling_rate_increase = 50 - -/obj/item/microfusion_gun_attachment/heatsink/run_attachment(obj/item/gun/microfusion/microfusion_gun) - . = ..() - microfusion_gun.heat_dissipation_bonus += cooling_rate_increase - -/obj/item/microfusion_gun_attachment/heatsink/remove_attachment(obj/item/gun/microfusion/microfusion_gun) - . = ..() - microfusion_gun.heat_dissipation_bonus -= cooling_rate_increase - -/* -RGB ATTACHMENT - -Enables you to change the light color of the laser. -*/ -/obj/item/microfusion_gun_attachment/rgb - name = "phase emitter spectrograph" - desc = "An attachment hooked up to the phase emitter, allowing the user to adjust the color of the beam outputted. This has seen widespread use by various factions capable of getting their hands on microfusion weapons, whether as a calling card or simply for entertainment." - icon_state = "attachment_rgb" - attachment_overlay_icon_state = "attachment_rgb" - /// What color are we changing the sprite to? - var/color_to_apply = COLOR_MOSTLY_PURE_RED - -/obj/item/microfusion_gun_attachment/rgb/process_fire(obj/item/gun/microfusion/microfusion_gun, obj/item/ammo_casing/chambered) - . = ..() - chambered?.loaded_projectile.icon_state = "laser_greyscale" - chambered?.loaded_projectile.color = color_to_apply - chambered?.loaded_projectile.light_color = color_to_apply - -/obj/item/microfusion_gun_attachment/rgb/proc/select_color(mob/living/user) - var/new_color = input(user, "Please select your new projectile color", "Laser color", color_to_apply) as null|color - - if(!new_color) - return - - color_to_apply = new_color - -/obj/item/microfusion_gun_attachment/rgb/attack_self(mob/user, modifiers) - . = ..() - select_color(user) - -/obj/item/microfusion_gun_attachment/rgb/get_modify_data() - return list(list("title" = "Change Color", "icon" = "wrench", "reference" = "color", "color" = "blue")) - -/obj/item/microfusion_gun_attachment/rgb/run_modify_data(params, mob/living/user) - if(params == "color") - select_color(user) - -/* -RAIL ATTACHMENT - -Allows for flashlights bayonets and adds 1 slot to equipment. -*/ -/obj/item/microfusion_gun_attachment/rail - name = "gun rail attachment" - desc = "A simple set of rails that attaches to weapon hardpoints. Allows for 3 more attachment slots and the instillation of a flashlight or bayonet." - icon_state = "attachment_rail" - attachment_overlay_icon_state = "attachment_rail" - slot = GUN_SLOT_RAIL - -/obj/item/microfusion_gun_attachment/rail/run_attachment(obj/item/gun/microfusion/microfusion_gun) - . = ..() - microfusion_gun.AddComponent(/datum/component/seclite_attachable, \ - light_overlay_icon = 'modular_nova/modules/microfusion/icons/microfusion_gun40x32.dmi', \ - light_overlay = "flight") - microfusion_gun.can_bayonet = TRUE - -/obj/item/microfusion_gun_attachment/rail/remove_attachment(obj/item/gun/microfusion/microfusion_gun) - . = ..() - var/component_to_delete = microfusion_gun.GetComponent(/datum/component/seclite_attachable) - if(component_to_delete) - qdel(component_to_delete) - microfusion_gun.can_bayonet = initial(microfusion_gun.can_bayonet) - if(microfusion_gun.bayonet) - microfusion_gun.bayonet.forceMove(get_turf(microfusion_gun)) - microfusion_gun.bayonet = null - microfusion_gun.update_appearance() - microfusion_gun.remove_all_attachments() - -/* -SCOPE ATTACHMENT - -Allows for a scope to be attached to the gun. -*/ - -/obj/item/microfusion_gun_attachment/scope - name = "scope attachment" - desc = "A simple telescopic scope, allowing for long-ranged use of the weapon. However, these do not provide any night vision." - icon_state = "attachment_scope" - attachment_overlay_icon_state = "attachment_scope" - slot = GUN_SLOT_RAIL - -/obj/item/microfusion_gun_attachment/scope/run_attachment(obj/item/gun/microfusion/microfusion_gun) - . = ..() - if(microfusion_gun.GetComponent(/datum/component/scope)) - return - microfusion_gun.AddComponent(/datum/component/scope, range_modifier = 1.5) - -/obj/item/microfusion_gun_attachment/scope/remove_attachment(obj/item/gun/microfusion/microfusion_gun) - . = ..() - var/datum/component_datum = microfusion_gun.GetComponent(/datum/component/scope) - if(component_datum) - qdel(component_datum) - -/* -BLACK CAMO ATTACHMENT - -Allows for a black camo to be applied to the gun. -All tactical, all the time. -*/ - -/obj/item/microfusion_gun_attachment/camo - name = "black camo microfusion frame" - desc = "A frame modification for the MCR-01, changing the color of the gun to black." - slot = GUN_SLOT_CAMO - icon_state = "attachment_black" - attachment_overlay_icon_state = "attachment_black" - -/* -HONK CAMO ATTACHMENT - -Allows for a clown camo to be applied to the gun. -HONK!! -*/ -/obj/item/microfusion_gun_attachment/camo/honk - name = "bananium microfusion frame" - desc = "A frame modification for the MCR-01, plating the gun in bananium." - icon_state = "attachment_honk_camo" - attachment_overlay_icon_state = "attachment_honk_camo" - -/* -SYNDIE CAMO ATTACHMENT - -Allows for a blood red camo to be applied to the gun. -Totally not property of a hostile corporation. -*/ -/obj/item/microfusion_gun_attachment/camo/syndicate - name = "blood red camo microfusion frame" - desc = "A frame modification for the MCR-01, changing the color of the gun to a slick blood red." - icon_state = "attachment_syndi_camo" - attachment_overlay_icon_state = "attachment_syndi_camo" - -/* -NANOTRASEN CAMO ATTACHMENT - -Allows for an official blue camo to be applied to the gun. -Hail Nanotrasen. -*/ -/obj/item/microfusion_gun_attachment/camo/nanotrasen - name = "\improper Nanotrasen brand microfusion frame" - desc = "A frame modification for the MCR-01, changing the color of the gun to blue." - icon_state = "attachment_nt_camo" - attachment_overlay_icon_state = "attachment_nt_camo" diff --git a/modular_nova/modules/microfusion/code/microfusion_techweb.dm b/modular_nova/modules/microfusion/code/microfusion_techweb.dm deleted file mode 100644 index 5dada3ab88e..00000000000 --- a/modular_nova/modules/microfusion/code/microfusion_techweb.dm +++ /dev/null @@ -1,120 +0,0 @@ -/datum/techweb_node/basic_microfusion - id = "basic_microfusion" - starting_node = TRUE - display_name = "Basic Microfusion Technology" - description = "Basic microfusion technology allowing for basic microfusion designs." - design_ids = list( - "basic_microfusion_cell", - ) - -//Enhanced microfusion -/datum/techweb_node/enhanced_microfusion - id = "enhanced_microfusion" - display_name = "Enhanced Microfusion Technology" - description = "Enhanced microfusion technology allowing for upgraded basic microfusion!" - prereq_ids = list( - "basic_microfusion", - "engineering", - "weaponry", - "high_efficiency", - ) - design_ids = list( - "enhanced_microfusion_cell", - "enhanced_microfusion_phase_emitter", - "microfusion_gun_attachment_black_camo", - "microfusion_gun_attachment_nt_camo", - "microfusion_gun_attachment_heatsink", - ) - research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 3500) - -//Advanced microfusion -/datum/techweb_node/advanced_microfusion - id = "advanced_microfusion" - display_name = "Advanced Microfusion Technology" - description = "Advanced microfusion technology allowing for advanced microfusion!" - prereq_ids = list( - "enhanced_microfusion", - "adv_engi", - "adv_weaponry", - "adv_power", - "adv_plasma", - ) - design_ids = list( - "advanced_microfusion_cell", - "microfusion_cell_attachment_overcapacity", - "microfusion_cell_attachment_stabiliser", - "microfusion_gun_attachment_scatter", - "microfusion_gun_attachment_hellfire", - "advanced_microfusion_phase_emitter", - "microfusion_gun_attachment_lance", - "microfusion_gun_attachment_grip", - "microfusion_gun_attachment_rail", - "microfusion_gun_attachment_scope", - ) - research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 5000) - - -// Bluespace microfusion -/datum/techweb_node/bluespace_microfusion - id = "bluespace_microfusion" - display_name = "Bluespace Microfusion Technology" - description = "Bluespace tinkering plus microfusion technology!" - prereq_ids = list( - "advanced_microfusion", - "bluespace_power", - "beam_weapons", - "explosive_weapons", - ) - design_ids = list( - "bluespace_microfusion_cell", - "microfusion_gun_attachment_repeater", - "bluespace_microfusion_phase_emitter", - ) - research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 10000) - -// Quantum microfusion -/datum/techweb_node/quantum_microfusion - id = "quantum_microfusion" - display_name = "Quantum Microfusion Technology" - description = "Bleeding edge microfusion tech, making use of the latest in materials and components, bluespace or otherwise." - prereq_ids = list( - "bluespace_microfusion", - "alientech", - ) - design_ids = list( - "microfusion_gun_attachment_xray", - ) - research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 15000) - -// Warcrime microfusion -/datum/techweb_node/illegal_microfusion - id = "illegal_microfusion" - display_name = "Illegal Microfusion Technology" - description = "Microfusion tech that has previously been banned by SolFed. I love the smell of plasma in the mornings." - prereq_ids = list( - "advanced_microfusion", - "syndicate_basic", - ) - design_ids = list( - "microfusion_gun_attachment_superheat", - "microfusion_gun_attachment_scattermax", - "microfusion_gun_attachment_penetrator", - "microfusion_gun_attachment_syndi_camo", - "microfusion_gun_attachment_suppressor", - ) - research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 5000) - -// clown microfusion. | This exists to not make this non modular -/datum/techweb_node/clown_microfusion - id = "clown_microfusion" - display_name = "Honkicron Clownery Systems Technology" - description = "Microfusion tech that is proprietary tech of Honkicron Clownery Systems. HONK!!" - prereq_ids = list( - "basic_microfusion", - "clown", - ) - design_ids = list( - "microfusion_gun_attachment_honk", - "microfusion_gun_attachment_honk_camo", - ) - research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 500) //Its normally supposed to be in clown tech so diff --git a/modular_nova/modules/microfusion/code/phase_emitter.dm b/modular_nova/modules/microfusion/code/phase_emitter.dm deleted file mode 100644 index 19caeb30aa6..00000000000 --- a/modular_nova/modules/microfusion/code/phase_emitter.dm +++ /dev/null @@ -1,214 +0,0 @@ -/* -* PHASE EMITTERS -*/ - -/* -* Basically the heart of the gun, can be upgraded. -*/ -/obj/item/microfusion_phase_emitter - name = "basic microfusion phase emitter" - desc = "A first-generation phase emitter, this is the core of the weapon and the source of the beam." - icon = 'modular_nova/modules/microfusion/icons/microfusion_gun_attachments.dmi' - icon_state = "phase_emitter" - base_icon_state = "phase_emitter" - w_class = WEIGHT_CLASS_NORMAL - /// Max heat before it breaks - var/max_heat = 2000 - /// Current heat level - var/current_heat = 0 - /// Thermal throttle percentage - var/throttle_percentage = 80 - /// How much heat it dissipates passively - var/heat_dissipation_per_tick = 30 - /// Active cooling system - var/cooling_system = FALSE - /// How quickly does the active cooling system cool - 1/1 ratio of cell charge to cooling point - var/cooling_system_rate = 30 - /// What is our dynamic integrity? - var/integrity = 100 - /// Are we fucked? - var/damaged = FALSE - /// Hard ref to the gun. - var/obj/item/gun/microfusion/parent_gun - /// Are we "hacked" thus allowing overclocking? - var/hacked = FALSE - /// The fire delay this emitter adds to the gun. - var/fire_delay = 0 - /// The sound playback speed, used for overheating sound effects on fire. - var/sound_freq = 0 - - -/obj/item/microfusion_phase_emitter/Initialize(mapload) - . = ..() - START_PROCESSING(SSobj, src) - -/obj/item/microfusion_phase_emitter/Destroy() - parent_gun = null - return ..() - -/obj/item/microfusion_phase_emitter/process(seconds_per_tick) - if(current_heat == 0) - return - var/calculated_heat_dissipation_per_tick = heat_dissipation_per_tick - if(isspaceturf(get_turf(src))) - calculated_heat_dissipation_per_tick += PHASE_HEAT_DISSIPATION_BONUS_SPACE // Passive cooling in space boost! - if(parent_gun) - calculated_heat_dissipation_per_tick += parent_gun.heat_dissipation_bonus - else - calculated_heat_dissipation_per_tick += PHASE_HEAT_DISSIPATION_BONUS_AIR //We get some passive cooling from being out of the gun. - if(cooling_system && parent_gun && parent_gun.cell && parent_gun.cell.use(cooling_system_rate)) - calculated_heat_dissipation_per_tick += cooling_system_rate - - current_heat = clamp(current_heat - (calculated_heat_dissipation_per_tick * seconds_per_tick) * 0.5, 0, INFINITY) - if(current_heat > max_heat) - integrity = integrity - current_heat / 1000 * seconds_per_tick * 0.5 - - process_fire_delay_and_sound() - - if(integrity <= 0) - kill() - update_appearance() - parent_gun?.update_appearance() - -/obj/item/microfusion_phase_emitter/proc/toggle_cooling_system(mob/user) - if(!parent_gun) - return - if(!cooling_system && !parent_gun.cell) - if(user) - to_chat(user, span_warning("You need a cell to turn on the cooling system.")) - return - - if(cooling_system) - cooling_system = FALSE - else - cooling_system = TRUE - - if(user) - to_chat(user, span_notice("You toggle the cooling system [cooling_system ? "ON" : "OFF"].")) - -/obj/item/microfusion_phase_emitter/multitool_act(mob/living/user, obj/item/tool) - if(hacked) - to_chat(user, span_warning("[src] is already unlocked!")) - return - to_chat(user, span_notice("You begin to override the thermal overclock safety...")) - if(do_after(user, 5 SECONDS, src)) - hacked = TRUE - to_chat(user, span_notice("You override the thermal overclock safety.")) - -/obj/item/microfusion_phase_emitter/proc/set_overclock(mob/living/user) - if(!hacked) - return - var/new_throttle = clamp(input(user, "Please input a new thermal throttle percentage(0-300):", "Phase Emitter Overclock") as null|num, 1, 300) - - to_chat(user, span_notice("Thermal throttle percent set to: [new_throttle].")) - - if(new_throttle > 100) - to_chat(user, span_danger("WARNING: You have input a throttle percentage of more than 100, this may cause emitter damage.")) - - throttle_percentage = new_throttle - -/obj/item/microfusion_phase_emitter/update_icon_state() - . = ..() - - if(damaged) - icon_state = "[base_icon_state]_damaged" - else - switch(get_heat_percent()) - if(40 to 69) - icon_state = "[base_icon_state]_hot" - if(70 to INFINITY) - icon_state = "[base_icon_state]_critical" - else - icon_state = base_icon_state - -/obj/item/microfusion_phase_emitter/proc/process_fire_delay_and_sound() - var/fire_delay_to_add = 0 - if(integrity < 100) - fire_delay_to_add = fire_delay_to_add + (100 - integrity) / 10 - - if(current_heat > max_heat) - fire_delay_to_add = fire_delay_to_add + (current_heat - max_heat) / 100 //Holy shit this emitter is tanking - - fire_delay = round(fire_delay_to_add, 1.45) - -/obj/item/microfusion_phase_emitter/proc/get_heat_icon_state() - switch(get_heat_percent()) - if(40 to 69) - return "hot" - if(70 to INFINITY) - return "critical" - else - return "normal" - -/obj/item/microfusion_phase_emitter/examine(mob/user) - . = ..() - if(damaged) - . += span_danger("It is damaged beyond repair.") - else - . += span_notice("It has a thermal rating of: [max_heat] C") - . += span_notice("It dissipates heat at: [heat_dissipation_per_tick] C") - . += span_notice("Heat capacity: [get_heat_percent()]%") - . += span_notice("Integrity: [integrity]%") - . += span_notice("Thermal throttle: [throttle_percentage]%") - . += span_notice("Cooling system: [cooling_system ? "enabled, cooling at [cooling_system_rate] C/s" : "disabled"].") - -/obj/item/microfusion_phase_emitter/proc/get_heat_percent() - return round(current_heat / max_heat * 100) - -/obj/item/microfusion_phase_emitter/proc/check_emitter() - if(damaged) - return PHASE_FAILURE_DAMAGED - if(get_heat_percent() >= throttle_percentage) - return PHASE_FAILURE_THROTTLE - return SHOT_SUCCESS - -/obj/item/microfusion_phase_emitter/proc/add_heat(heat_to_add) - current_heat += heat_to_add - update_appearance() - -/obj/item/microfusion_phase_emitter/proc/kill() - damaged = TRUE - name = "damaged [name]" - playsound(src, 'modular_nova/modules/microfusion/sound/overheat.ogg', 70) - say("ERROR: Integrity failure!") - STOP_PROCESSING(SSobj, src) - -/obj/item/microfusion_phase_emitter/enhanced - name = "enhanced microfusion phase emitter" - desc = "A second-generation phase emitter, this one is made of more robust materials which allow for a higher capacity for heat, a faster dissipation and cooling of it, and more capacity for thermal throttling." - max_heat = 2500 - throttle_percentage = 85 - heat_dissipation_per_tick = 40 - cooling_system_rate = 40 - integrity = 120 - color = "#ffffcc" - -/obj/item/microfusion_phase_emitter/advanced - name = "advanced microfusion phase emitter" - desc = "A third-generation phase emitter, boasting a high capacity for heat, greater dissipation and cooling, and is built using higher-grade materials for more durability." - max_heat = 3000 - throttle_percentage = 90 - heat_dissipation_per_tick = 50 - cooling_system_rate = 50 - integrity = 150 - color = "#99ffcc" - -/obj/item/microfusion_phase_emitter/bluespace - name = "bluespace microfusion phase emitter" - desc = "A fourth-generation phase emitter, utilizing a bluespace medium to store and manage heat, allowing for much cooler temperatures than realspace would allow. This is made of nothing but the latest materials, leading to the highest durability of any phase emitter on the market." - max_heat = 3500 - throttle_percentage = 95 - heat_dissipation_per_tick = 60 - cooling_system_rate = 60 - integrity = 200 - color = "#66ccff" - -/obj/item/microfusion_phase_emitter/nanocarbon - name = "nanocarbon microfusion phase emitter" - desc = "An experimental phase emitter, made of nanocarbon, which is the most durable material on the market. It is capable of storing and managing heat, and is capable of cooling at a much higher rate than the other phase emitters." - max_heat = 15000 - throttle_percentage = 95 - heat_dissipation_per_tick = 130 - cooling_system_rate = 60 - integrity = 500 - color = "#6966ff" diff --git a/modular_nova/modules/microfusion/code/projectiles.dm b/modular_nova/modules/microfusion/code/projectiles.dm deleted file mode 100644 index eb405a1becc..00000000000 --- a/modular_nova/modules/microfusion/code/projectiles.dm +++ /dev/null @@ -1,101 +0,0 @@ -/obj/item/ammo_casing - ///What volume should the sound play at? - var/fire_sound_volume = 50 - -/obj/item/ammo_casing/energy/laser/microfusion - name = "microfusion energy lens" - projectile_type = /obj/projectile/beam/laser/microfusion - e_cost = LASER_SHOTS(10, STANDARD_CELL_CHARGE) // 10 shots with a normal cell. - select_name = "laser" - fire_sound = 'modular_nova/modules/microfusion/sound/laser_1.ogg' - fire_sound_volume = 100 - -/obj/item/ammo_casing/proc/refresh_shot() - loaded_projectile = new projectile_type(src, src) - -/obj/projectile/beam/laser/microfusion - name = "microfusion laser" - icon = 'modular_nova/modules/microfusion/icons/projectiles.dmi' - damage = 25 - -/obj/projectile/beam/microfusion_disabler - name = "microfusion disabler laser" - icon = 'modular_nova/modules/microfusion/icons/projectiles.dmi' - icon_state = "disabler" - damage = 41 - damage_type = STAMINA - armor_flag = ENERGY - hitsound = 'sound/weapons/tap.ogg' - eyeblur = 0 - impact_effect_type = /obj/effect/temp_visual/impact_effect/blue_laser - light_color = LIGHT_COLOR_BLUE - tracer_type = /obj/effect/projectile/tracer/disabler - muzzle_type = /obj/effect/projectile/muzzle/disabler - impact_type = /obj/effect/projectile/impact/disabler - -/obj/projectile/beam/laser/microfusion/superheated - name = "superheated microfusion laser" - icon_state = "laser_greyscale" - damage = 20 //Trading damage for fire stacks - color = LIGHT_COLOR_FIRE - light_color = LIGHT_COLOR_FIRE - -/obj/projectile/beam/laser/microfusion/superheated/on_hit(atom/target, blocked = 0, pierce_hit) - . = ..() - if(isliving(target)) - var/mob/living/living = target - living.adjust_fire_stacks(2) - living.ignite_mob() - -/obj/projectile/beam/laser/microfusion/hellfire - name = "hellfire microfusion laser" - icon_state = "laser_greyscale" - wound_bonus = 0 - damage = 20 // You are trading damage for a significant wound bonus and speed increase - speed = 0.6 - color = LIGHT_COLOR_FLARE - light_color = LIGHT_COLOR_FLARE - -/obj/projectile/beam/laser/microfusion/scatter - name = "scatter microfusion laser" - -/obj/projectile/beam/laser/microfusion/scatter/max - name = "scatter microfusion laser" - -/obj/projectile/beam/laser/microfusion/repeater - damage = 12.5 - -/obj/projectile/beam/laser/microfusion/penetrator - name = "focused microfusion laser" - damage = 20 - armour_penetration = 50 - -/obj/projectile/beam/laser/microfusion/lance - name = "lance microfusion laser" - damage = 50 // We're turning the gun into a heavylaser - tracer_type = /obj/effect/projectile/tracer/heavy_laser - muzzle_type = /obj/effect/projectile/muzzle/heavy_laser - impact_type = /obj/effect/projectile/impact/heavy_laser - speed = 0.4 - -/obj/projectile/beam/laser/microfusion/xray - name = "x-ray microfusion laser" - icon_state = "laser_greyscale" - color = COLOR_GREEN - light_color = COLOR_GREEN - projectile_piercing = PASSCLOSEDTURF|PASSGRILLE|PASSGLASS - -/obj/projectile/beam/laser/microfusion/honk - name = "funny microfusion laser" - icon_state = "laser_greyscale" - color = COLOR_VIVID_YELLOW - light_color = COLOR_VIVID_YELLOW - damage_type = STAMINA - damage = 25 - armor_flag = ENERGY - hitsound = 'sound/misc/slip.ogg' - impact_type = /obj/effect/projectile/impact/disabler - -/obj/projectile/beam/laser/microfusion/honk/Initialize(mapload) - . = ..() - AddComponent(/datum/component/slippery, 20) diff --git a/modular_nova/modules/microfusion/icons/guns_lefthand.dmi b/modular_nova/modules/microfusion/icons/guns_lefthand.dmi deleted file mode 100644 index 6690df96ac0..00000000000 Binary files a/modular_nova/modules/microfusion/icons/guns_lefthand.dmi and /dev/null differ diff --git a/modular_nova/modules/microfusion/icons/guns_righthand.dmi b/modular_nova/modules/microfusion/icons/guns_righthand.dmi deleted file mode 100644 index 47f36b05d48..00000000000 Binary files a/modular_nova/modules/microfusion/icons/guns_righthand.dmi and /dev/null differ diff --git a/modular_nova/modules/microfusion/icons/microfusion_cells.dmi b/modular_nova/modules/microfusion/icons/microfusion_cells.dmi deleted file mode 100644 index 10d19a08544..00000000000 Binary files a/modular_nova/modules/microfusion/icons/microfusion_cells.dmi and /dev/null differ diff --git a/modular_nova/modules/microfusion/icons/microfusion_gun40x32.dmi b/modular_nova/modules/microfusion/icons/microfusion_gun40x32.dmi deleted file mode 100644 index 792aa8327d1..00000000000 Binary files a/modular_nova/modules/microfusion/icons/microfusion_gun40x32.dmi and /dev/null differ diff --git a/modular_nova/modules/microfusion/icons/microfusion_gun_attachments.dmi b/modular_nova/modules/microfusion/icons/microfusion_gun_attachments.dmi deleted file mode 100644 index 82ea78ddeb1..00000000000 Binary files a/modular_nova/modules/microfusion/icons/microfusion_gun_attachments.dmi and /dev/null differ diff --git a/modular_nova/modules/microfusion/icons/projectiles.dmi b/modular_nova/modules/microfusion/icons/projectiles.dmi deleted file mode 100644 index c3ee49a1e79..00000000000 Binary files a/modular_nova/modules/microfusion/icons/projectiles.dmi and /dev/null differ diff --git a/modular_nova/modules/microfusion/sound/mag_insert.ogg b/modular_nova/modules/microfusion/sound/mag_insert.ogg deleted file mode 100644 index 53460ebf14d..00000000000 Binary files a/modular_nova/modules/microfusion/sound/mag_insert.ogg and /dev/null differ diff --git a/modular_nova/modules/microfusion/sound/overheat.ogg b/modular_nova/modules/microfusion/sound/overheat.ogg deleted file mode 100644 index 3585471bf9b..00000000000 Binary files a/modular_nova/modules/microfusion/sound/overheat.ogg and /dev/null differ diff --git a/modular_nova/modules/modsuit_armour/modsuit_armour.dm b/modular_nova/modules/modsuit_armour/modsuit_armour.dm index ae6a4b4dc45..c1c5a5f9488 100644 --- a/modular_nova/modules/modsuit_armour/modsuit_armour.dm +++ b/modular_nova/modules/modsuit_armour/modsuit_armour.dm @@ -56,20 +56,6 @@ acid = 25 wound = 10 -/datum/mod_theme/mining // Shaft Miner / Other half comes from the ashland booster - armor_type = /datum/armor/mod_theme_mining - -/datum/armor/mod_theme_mining - melee = 5 - bullet = 5 - laser = 5 - energy = 5 - bomb = 25 - bio = 100 - fire = 100 - acid = 75 - wound = 15 - /datum/mod_theme/medical // Paramedic / Medical Doctor armor_type = /datum/armor/mod_theme_medical diff --git a/modular_nova/modules/modular_implants/code/nifs.dm b/modular_nova/modules/modular_implants/code/nifs.dm index 35177c8c0cf..8f8a0fcb99f 100644 --- a/modular_nova/modules/modular_implants/code/nifs.dm +++ b/modular_nova/modules/modular_implants/code/nifs.dm @@ -20,6 +20,7 @@ w_class = WEIGHT_CLASS_NORMAL slot = ORGAN_SLOT_BRAIN_NIF actions_types = list(/datum/action/item_action/nif/open_menu) + cannot_confiscate = TRUE //User Variables ///What user is currently linked with the NIF? diff --git a/modular_nova/modules/modular_items/code/bags.dm b/modular_nova/modules/modular_items/code/bags.dm index 8fd0bde29eb..2aba9f882cc 100644 --- a/modular_nova/modules/modular_items/code/bags.dm +++ b/modular_nova/modules/modular_items/code/bags.dm @@ -37,7 +37,7 @@ atom_storage.max_total_storage = 12 atom_storage.max_slots = 3 atom_storage.numerical_stacking = FALSE - atom_storage.can_hold = typecacheof(list(/obj/item/ammo_box/magazine, /obj/item/ammo_casing, /obj/item/stock_parts/cell/microfusion)) + atom_storage.can_hold = typecacheof(list(/obj/item/ammo_box/magazine, /obj/item/ammo_casing)) /obj/item/storage/pouch/ammo/post_reskin(mob/our_mob) if(icon_state == "casingpouch") diff --git a/modular_nova/modules/modular_items/code/wetsuit.dm b/modular_nova/modules/modular_items/code/wetsuit.dm new file mode 100644 index 00000000000..69dc119cdd2 --- /dev/null +++ b/modular_nova/modules/modular_items/code/wetsuit.dm @@ -0,0 +1,21 @@ +/obj/item/clothing/under/akula_wetsuit/refit + name = "\improper Refitted Shoredress wetsuit" + desc = "The 'Wetworks'-pattern Shoredress is a long-standing template upon which most Azulean 'wetsuits' are made. \ + This atmospheric exploration suit is a single form-fitting garment, designed to keep wearers comfortable in the harsh environment of dry land; \ + even sometimes worn underneath orbital suits such as MODs. \n\n\ + This variation seems to have been refitted to a more standard body shape." + worn_icon = 'modular_nova/modules/modular_items/icons/akulasuit.dmi' + female_sprite_flags = FEMALE_UNIFORM_FULL + +/obj/item/clothing/under/akula_wetsuit/refit/examine(mob/user) + . = ..() + . += span_notice("You can examine closer to learn a little more about this item.") + +/obj/item/clothing/under/akula_wetsuit/refit/examine_more(mob/user) + . = ..() + + . += "Shoredresses apply active thermal channels and motion-powered micropumps to allow for water of the wearer's temperature choice to circulate; \ + ensuring ample flow over not only the gills, but the rest of the wearer's skin, at the cost of occasional movement being needed when the wearer is still. \n\ + These suits are known to come with luminescent panels that take on a bright glow when underwater, meant for signalling as well as higher visibility in deep waters. \ + The system is meant to only be able to process water, fresh or otherwise; but unofficially, \ + a great many chemicals or even drinks have been loaded in by adventurous or careless explorers of the New Principalities-- at fantastic personal risk to their gills." diff --git a/modular_nova/modules/modular_items/icons/akulasuit.dmi b/modular_nova/modules/modular_items/icons/akulasuit.dmi new file mode 100644 index 00000000000..f7d85b50dda Binary files /dev/null and b/modular_nova/modules/modular_items/icons/akulasuit.dmi differ diff --git a/modular_nova/modules/modular_items/lewd_items/code/lewd_items/shibari.dm b/modular_nova/modules/modular_items/lewd_items/code/lewd_items/shibari.dm index 6bfd4aec7f4..d87c9549ef2 100644 --- a/modular_nova/modules/modular_items/lewd_items/code/lewd_items/shibari.dm +++ b/modular_nova/modules/modular_items/lewd_items/code/lewd_items/shibari.dm @@ -41,7 +41,7 @@ singular_name = "glowy rope" merge_type = /obj/item/stack/shibari_rope/glow icon_state = "shibari_rope_glow" - light_system = MOVABLE_LIGHT + light_system = OVERLAY_LIGHT light_range = 1 light_on = TRUE light_power = 3 diff --git a/modular_nova/modules/modular_items/lewd_items/code/lewd_structures/dancing_pole.dm b/modular_nova/modules/modular_items/lewd_items/code/lewd_structures/dancing_pole.dm index b382591571f..4db2e59aea9 100644 --- a/modular_nova/modules/modular_items/lewd_items/code/lewd_structures/dancing_pole.dm +++ b/modular_nova/modules/modular_items/lewd_items/code/lewd_structures/dancing_pole.dm @@ -10,7 +10,7 @@ layer = BELOW_MOB_LAYER pseudo_z_axis = 9 //stepping onto the pole makes you raise upwards! density = 0 //easy to step up on - light_system = STATIC_LIGHT + light_system = COMPLEX_LIGHT light_range = 3 light_power = 1 light_color = COLOR_LIGHT_PINK diff --git a/modular_nova/modules/modular_reagents/code/reagents/medicine.dm b/modular_nova/modules/modular_reagents/code/reagents/medicine.dm index d84de074189..db0733b7270 100644 --- a/modular_nova/modules/modular_reagents/code/reagents/medicine.dm +++ b/modular_nova/modules/modular_reagents/code/reagents/medicine.dm @@ -7,7 +7,6 @@ overdose_threshold = 20 ph = 6.09 chemical_flags = REAGENT_CAN_BE_SYNTHESIZED - addiction_types = list(/datum/addiction/opioids = 20) inverse_chem_val = 0.55 inverse_chem = /datum/reagent/inverse/lidocaine diff --git a/modular_nova/modules/modular_vending/code/clothesmate.dm b/modular_nova/modules/modular_vending/code/clothesmate.dm index 2d9f1dfad31..e86dd423c5a 100644 --- a/modular_nova/modules/modular_vending/code/clothesmate.dm +++ b/modular_nova/modules/modular_vending/code/clothesmate.dm @@ -121,13 +121,14 @@ /obj/item/clothing/suit/urban = 5, /obj/item/clothing/suit/duster = 5, /obj/item/clothing/suit/fallsparka = 5, - /obj/item/clothing/suit/croptop = 5, + /obj/item/clothing/suit/jacket/croptop = 5, /obj/item/clothing/suit/modernwintercoatthing = 5, /obj/item/clothing/suit/hooded/wintercoat/colourable = 5, /obj/item/clothing/suit/apron/chef/colorable_apron = 5, /obj/item/clothing/suit/warm_coat = 5, /obj/item/clothing/suit/warm_sweater = 5, /obj/item/clothing/suit/heart_sweater = 5, + /obj/item/clothing/suit/crop_jacket = 5, ), ), diff --git a/modular_nova/modules/modular_vending/code/wardrobes.dm b/modular_nova/modules/modular_vending/code/wardrobes.dm index c9bb1fc7a49..26b041c1780 100644 --- a/modular_nova/modules/modular_vending/code/wardrobes.dm +++ b/modular_nova/modules/modular_vending/code/wardrobes.dm @@ -56,12 +56,12 @@ /obj/machinery/vending/wardrobe/robo_wardrobe products_nova = list( /obj/item/clothing/head/beret/science/fancy/robo = 2, - /obj/item/clothing/under/rank/rnd/roboticist/nova/sleek = 2, /obj/item/tank/internals/anesthetic = 2, /obj/item/clothing/mask/breath = 2, /obj/item/reagent_containers/cup/bottle/morphine = 2, /obj/item/reagent_containers/syringe = 2, /obj/item/reagent_containers/spray/hercuri/chilled = 2, + /obj/item/reagent_containers/spray/dinitrogen_plasmide = 2, /obj/item/clothing/gloves/color/black = 2, // fire resistant, allows the robo to painlessly mold metal. also its down here because its a treatment item /obj/item/bonesetter = 2, // for dislocations /obj/item/stack/medical/gauze = 4, // for ALL wounds @@ -73,6 +73,10 @@ /obj/item/storage/backpack/messenger/science/robo = 2, ) + contraband_nova = list( + /obj/item/organ/internal/tongue/lizard/robot = 2, + ) + /obj/machinery/vending/wardrobe/science_wardrobe products_nova = list( /obj/item/clothing/under/rank/rnd/scientist/nova/hlscience = 3, @@ -156,8 +160,7 @@ /obj/item/clothing/under/suit/nova/inferno/beeze = 2, ) -/// GHOST CAFE WARDROBES -// Needed to remove radios from Ghost Cafe + /// Removes given list of products. Must be called before build_inventory() to actually prevent the records from being created. /obj/machinery/vending/proc/remove_products(list/paths_to_remove) if(!length(paths_to_remove)) @@ -174,82 +177,3 @@ /obj/machinery/vending/Initialize(mapload) remove_products(excluded_products) return ..() - -/obj/machinery/vending/wardrobe/cargo_wardrobe/ghost_cafe - excluded_products = list( - /obj/item/radio/headset, - ) - -/obj/machinery/vending/wardrobe/science_wardrobe/ghost_cafe - excluded_products = list( - /obj/item/radio/headset, - ) - -/obj/machinery/vending/wardrobe/bar_wardrobe/ghost_cafe - excluded_products = list( - /obj/item/radio/headset, - ) - -/obj/machinery/vending/wardrobe/chef_wardrobe/ghost_cafe - excluded_products = list( - /obj/item/radio/headset, - ) - -/obj/machinery/vending/wardrobe/medi_wardrobe/ghost_cafe - excluded_products = list( - /obj/item/radio/headset, - ) - -/obj/machinery/vending/wardrobe/engi_wardrobe/ghost_cafe - excluded_products = list( - /obj/item/radio/headset, - ) - -/obj/machinery/vending/wardrobe/law_wardrobe/ghost_cafe - excluded_products = list( - /obj/item/radio/headset, - ) - -/obj/machinery/vending/wardrobe/jani_wardrobe/ghost_cafe - excluded_products = list( - /obj/item/radio/headset, - ) - -/obj/machinery/vending/wardrobe/coroner_wardrobe/ghost_cafe - excluded_products = list( - /obj/item/radio/headset, - ) - -/obj/machinery/vending/wardrobe/curator_wardrobe/ghost_cafe - excluded_products = list( - /obj/item/radio/headset, - ) -/obj/machinery/vending/wardrobe/chap_wardrobe/unholy/ghost_cafe - excluded_products = list( - /obj/item/radio/headset, - ) - -/obj/machinery/vending/wardrobe/gene_wardrobe/ghost_cafe - excluded_products = list( - /obj/item/radio/headset, - ) - -/obj/machinery/vending/wardrobe/chem_wardrobe/ghost_cafe - excluded_products = list( - /obj/item/radio/headset, - ) - -/obj/machinery/vending/wardrobe/viro_wardrobe/ghost_cafe - excluded_products = list( - /obj/item/radio/headset, - ) - -/obj/machinery/vending/wardrobe/robo_wardrobe/ghost_cafe - excluded_products = list( - /obj/item/radio/headset, - ) - -/obj/machinery/vending/wardrobe/hydro_wardrobe/ghost_cafe - excluded_products = list( - /obj/item/radio/headset, - ) diff --git a/modular_nova/modules/modular_weapons/code/autolathe_designs.dm b/modular_nova/modules/modular_weapons/code/autolathe_designs.dm deleted file mode 100644 index d91a802fd84..00000000000 --- a/modular_nova/modules/modular_weapons/code/autolathe_designs.dm +++ /dev/null @@ -1,99 +0,0 @@ -/* -* AMMO -*/ - -/datum/design/strilka310_rubber - name = ".310 Rubber Bullet (Less Lethal)" - id = "astrilka310_rubber" - build_type = AUTOLATHE - materials = list( - /datum/material/iron = HALF_SHEET_MATERIAL_AMOUNT, - ) - build_path = /obj/item/ammo_casing/strilka310/rubber - category = list( - RND_CATEGORY_HACKED, - RND_CATEGORY_WEAPONS + RND_SUBCATEGORY_WEAPONS_AMMO, - ) - -// 4.6x30mm - SMG round, used in the WT550 and in numerous modular guns as a weaker alternative to 9mm. - -/datum/design/c46x30mm - name = "4.6x30mm Bullet" - id = "c46x30mm" - build_type = AUTOLATHE - materials = list( - /datum/material/iron = SMALL_MATERIAL_AMOUNT * 7.5, - ) - build_path = /obj/item/ammo_casing/c46x30mm - category = list( - RND_CATEGORY_HACKED, - RND_CATEGORY_WEAPONS + RND_SUBCATEGORY_WEAPONS_AMMO, - ) - -/datum/design/c46x30mm_rubber - name = "4.6x30mm Rubber Bullet" - id = "c46x30mm_rubber" - build_type = AUTOLATHE - materials = list( - /datum/material/iron = SMALL_MATERIAL_AMOUNT * 7.5 - ) - build_path = /obj/item/ammo_casing/c46x30mm/rubber - category = list( - RND_CATEGORY_INITIAL, - RND_CATEGORY_WEAPONS + RND_SUBCATEGORY_WEAPONS_AMMO, - ) - -// .45 - -/datum/design/c45_lethal - name = ".45 Bullet" - id = "c45_lethal" - build_type = AUTOLATHE - materials = list( - /datum/material/iron = SMALL_MATERIAL_AMOUNT * 7.5, - ) - build_path = /obj/item/ammo_casing/c45 - category = list( - RND_CATEGORY_HACKED, - RND_CATEGORY_WEAPONS + RND_SUBCATEGORY_WEAPONS_AMMO, - ) - -/datum/design/c45_rubber - name = ".45 Bouncy Rubber Ball" - id = "c45_rubber" - build_type = AUTOLATHE - materials = list( - /datum/material/iron = SMALL_MATERIAL_AMOUNT * 7.5, - ) - build_path = /obj/item/ammo_casing/c45/rubber - category = list( - RND_CATEGORY_INITIAL, - RND_CATEGORY_WEAPONS + RND_SUBCATEGORY_WEAPONS_AMMO, - ) - -// 10mm -/datum/design/c10mm_lethal - name = "10mm Bullet" - id = "c10mm_lethal" - build_type = AUTOLATHE - materials = list( - /datum/material/iron = SMALL_MATERIAL_AMOUNT * 7.5, - ) - build_path = /obj/item/ammo_casing/c10mm - category = list( - RND_CATEGORY_HACKED, - RND_CATEGORY_WEAPONS + RND_SUBCATEGORY_WEAPONS_AMMO, - ) - -/datum/design/c10mm_rubber - name = "10mm Rubber Bullet" - id = "c10mm_rubber" - build_type = AUTOLATHE - materials = list( - /datum/material/iron = SMALL_MATERIAL_AMOUNT * 7.5, - ) - build_path = /obj/item/ammo_casing/c10mm/rubber - category = list( - RND_CATEGORY_INITIAL, - RND_CATEGORY_WEAPONS + RND_SUBCATEGORY_WEAPONS_AMMO, - ) diff --git a/modular_nova/modules/modular_weapons/code/cargo_crates/armory_guns.dm b/modular_nova/modules/modular_weapons/code/cargo_crates/armory_guns.dm new file mode 100644 index 00000000000..8d0724aae78 --- /dev/null +++ b/modular_nova/modules/modular_weapons/code/cargo_crates/armory_guns.dm @@ -0,0 +1,54 @@ +/datum/supply_pack/security/armory/sindano + name = "Sindano Submachinegun Crate" + desc = "Three entirely proprietary Sindano kits, chambered in .35 Sol Short. Each kit contains three empty magazines and a box each of incapacitator and lethal rounds." + cost = CARGO_CRATE_VALUE * 10 + contains = list( + /obj/item/storage/toolbox/guncase/nova/carwo_large_case/sindano = 3, + ) + crate_name = "Sindano Submachinegun Crate" + +/datum/supply_pack/security/armory/renoster + name = "Renoster Riot Shotgun Crate" + desc = "Three Renoster 12ga riot shotguns, with matching bandoliers for each." + cost = CARGO_CRATE_VALUE * 10 + contains = list( + /obj/item/gun/ballistic/shotgun/riot/sol = 3, + /obj/item/storage/belt/bandolier = 3, + ) + crate_name = "Renoster Riot Shotgun Crate" + +/datum/supply_pack/security/armory/kiboko + name = "Kiboko Grenade Launcher Crate" + desc = "Contains a single Kiboko grenade launcher for replacing the one found in the armory, alongside the equipment that comes with it." + cost = CARGO_CRATE_VALUE * 30 + contains = list( + /obj/item/storage/toolbox/guncase/nova/carwo_large_case/kiboko_magless = 1, + /obj/item/ammo_box/c980grenade = 2, + /obj/item/ammo_box/c980grenade/smoke = 1, + /obj/item/ammo_box/c980grenade/riot = 1, + ) + crate_name = "Kiboko Grenade Launcher Crate" + +/datum/supply_pack/security/armory/short_mod_laser + name = "Modular Laser Carbine Crate" + desc = "Five 'Hoshi' modular laser carbines, compact energy weapons that can be rapidly reconfigured into different firing modes." + cost = CARGO_CRATE_VALUE * 12 + contains = list( + /obj/item/gun/energy/modular_laser_rifle/carbine, + /obj/item/gun/energy/modular_laser_rifle/carbine, + /obj/item/gun/energy/modular_laser_rifle/carbine, + /obj/item/gun/energy/modular_laser_rifle/carbine, + /obj/item/gun/energy/modular_laser_rifle/carbine, + ) + crate_name = "\improper Modular Laser Carbine Crate" + +/datum/supply_pack/security/armory/big_mod_laser + name = "Modular Laser Rifle Crate" + desc = "Three 'Hyeseong' modular laser rifles, bulky energy weapons that can be rapidly reconfigured into different firing modes." + cost = CARGO_CRATE_VALUE * 12 + contains = list( + /obj/item/gun/energy/modular_laser_rifle, + /obj/item/gun/energy/modular_laser_rifle, + /obj/item/gun/energy/modular_laser_rifle, + ) + crate_name = "\improper Modular Laser Rifle Crate" diff --git a/modular_nova/modules/modular_weapons/code/cargo_crates/surplus_crates.dm b/modular_nova/modules/modular_weapons/code/cargo_crates/surplus_crates.dm new file mode 100644 index 00000000000..5a73f5a7046 --- /dev/null +++ b/modular_nova/modules/modular_weapons/code/cargo_crates/surplus_crates.dm @@ -0,0 +1,97 @@ +#define ITEM_WEIGHT_CLOTHING 3 +#define ITEM_WEIGHT_ARMOR 2 +#define ITEM_WEIGHT_MISC 3 +#define ITEM_WEIGHT_MISC_BUT_RARER 2 +#define ITEM_WEIGHT_AMMO_SINGLE 3 +#define ITEM_WEIGHT_AMMO_BULK 2 +#define ITEM_WEIGHT_GUN_COMMON 2 +#define ITEM_WEIGHT_GUN_RARE 1 + + +// used in budget calculation +#define CRATE_ITEM_WEIGHT_MAX 3 + +#define CRATE_BUDGET_MINIMUM 20 +#define CRATE_BUDGET_MAXIMUM 35 + +// Special basically locks it out of appearing literally ever unless an admin VV's the cargo subsystem +/datum/supply_pack/imports/russian + special = TRUE + +/datum/supply_pack/imports/cin_surplus + name = "CIN Surplus Equipment Crate" + desc = "A collection of surplus equipment sourced from the Coalition of Independent Nations' military stockpiles. Likely to contain old and outdated equipment, as is the nature of surplus." + contraband = TRUE + cost = CARGO_CRATE_VALUE * 20 + contains = list( + // Clothing + /obj/item/clothing/under/syndicate/rus_army/cin_surplus/random_color = ITEM_WEIGHT_CLOTHING, + /obj/item/storage/belt/military/cin_surplus/random_color = ITEM_WEIGHT_CLOTHING, + /obj/item/storage/backpack/industrial/cin_surplus/random_color = ITEM_WEIGHT_CLOTHING, + /obj/item/clothing/under/colonial/nri_police = ITEM_WEIGHT_CLOTHING, + /obj/item/clothing/neck/cloak/colonial/nri_police = ITEM_WEIGHT_CLOTHING, + /obj/item/clothing/head/hats/colonial/nri_police = ITEM_WEIGHT_CLOTHING, + /obj/item/clothing/mask/gas/nri_police = ITEM_WEIGHT_CLOTHING, + /obj/item/clothing/mask/balaclavaadjust = ITEM_WEIGHT_CLOTHING, + /obj/item/clothing/gloves/tackler/combat = ITEM_WEIGHT_CLOTHING, + /obj/item/clothing/shoes/jackboots = ITEM_WEIGHT_CLOTHING, + // Armors + /obj/item/clothing/head/helmet/cin_surplus_helmet/random_color = ITEM_WEIGHT_ARMOR, + /obj/item/clothing/suit/armor/vest/cin_surplus_vest = ITEM_WEIGHT_ARMOR, + /obj/item/clothing/head/helmet/nri_police = ITEM_WEIGHT_ARMOR, + /obj/item/clothing/suit/armor/vest/nri_police = ITEM_WEIGHT_ARMOR, + // Weapons + /obj/item/gun/ballistic/revolver/shotgun_revolver = ITEM_WEIGHT_GUN_COMMON, + /obj/item/gun/ballistic/automatic/pistol/plasma_thrower = ITEM_WEIGHT_GUN_COMMON, + /obj/item/gun/ballistic/automatic/pistol/plasma_marksman = ITEM_WEIGHT_GUN_COMMON, + /obj/item/storage/toolbox/guncase/soviet/sakhno = ITEM_WEIGHT_GUN_COMMON, + /obj/item/gun/ballistic/automatic/miecz = ITEM_WEIGHT_GUN_RARE, + /obj/item/gun/ballistic/automatic/lanca = ITEM_WEIGHT_GUN_RARE, + /obj/item/gun/ballistic/automatic/wylom = ITEM_WEIGHT_GUN_RARE, + // Ammo + /obj/item/storage/toolbox/ammobox/strilka310 = ITEM_WEIGHT_AMMO_BULK, + /obj/item/storage/toolbox/ammobox/strilka310/surplus = ITEM_WEIGHT_AMMO_BULK, + /obj/item/ammo_box/c27_54cesarzowa = ITEM_WEIGHT_AMMO_BULK, + /obj/item/ammo_box/c27_54cesarzowa/rubber = ITEM_WEIGHT_AMMO_BULK, + /obj/item/ammo_box/c310_cargo_box = ITEM_WEIGHT_AMMO_BULK, + /obj/item/ammo_box/c310_cargo_box/rubber = ITEM_WEIGHT_AMMO_BULK, + /obj/item/ammo_box/c310_cargo_box/piercing = ITEM_WEIGHT_AMMO_BULK, + /obj/item/ammo_box/magazine/recharge/plasma_battery = ITEM_WEIGHT_AMMO_SINGLE, + /obj/item/ammo_box/magazine/miecz/spawns_empty = ITEM_WEIGHT_AMMO_SINGLE, + /obj/item/ammo_box/strilka310 = ITEM_WEIGHT_AMMO_SINGLE, + /obj/item/ammo_box/magazine/lanca/spawns_empty = ITEM_WEIGHT_AMMO_SINGLE, + /obj/item/ammo_box/magazine/wylom = ITEM_WEIGHT_AMMO_SINGLE, + // Other items + /obj/item/sign/flag/nri = ITEM_WEIGHT_MISC, + /obj/item/trench_tool = ITEM_WEIGHT_MISC, + /obj/item/binoculars = ITEM_WEIGHT_MISC, + /obj/item/storage/box/nri_flares = ITEM_WEIGHT_MISC, + /obj/item/pen/screwdriver = ITEM_WEIGHT_MISC_BUT_RARER, + /obj/item/storage/box/colonial_rations = ITEM_WEIGHT_MISC_BUT_RARER, + /obj/item/storage/toolbox/maint_kit = ITEM_WEIGHT_MISC_BUT_RARER, + ) + +/datum/supply_pack/imports/cin_surplus/fill(obj/structure/closet/crate/we_are_filling_this_crate) + var/item_budget = rand(CRATE_BUDGET_MINIMUM, CRATE_BUDGET_MAXIMUM) + for(var/iterator in 1 to 20) // 20 items max, but we have a budget too + var/new_thing = pick_weight(contains) + // We don't want to go too far over budget + if(item_budget <= 0) + return + new new_thing(we_are_filling_this_crate) + // Basically inverts the weight before subtracting it from the budget + item_budget -= ((CRATE_ITEM_WEIGHT_MAX + 1) - contains[new_thing]) + +#undef ITEM_WEIGHT_CLOTHING +#undef ITEM_WEIGHT_ARMOR +#undef ITEM_WEIGHT_MISC +#undef ITEM_WEIGHT_MISC_BUT_RARER +#undef ITEM_WEIGHT_AMMO_SINGLE +#undef ITEM_WEIGHT_AMMO_BULK +#undef ITEM_WEIGHT_GUN_COMMON +#undef ITEM_WEIGHT_GUN_RARE + +#undef CRATE_ITEM_WEIGHT_MAX + +#undef CRATE_BUDGET_MINIMUM +#undef CRATE_BUDGET_MAXIMUM diff --git a/modular_nova/modules/modular_weapons/code/company_and_or_faction_based/carwo_defense_systems/ammo/grenade.dm b/modular_nova/modules/modular_weapons/code/company_and_or_faction_based/carwo_defense_systems/ammo/grenade.dm index 26ae52cebe6..4f53915f92e 100644 --- a/modular_nova/modules/modular_weapons/code/company_and_or_faction_based/carwo_defense_systems/ammo/grenade.dm +++ b/modular_nova/modules/modular_weapons/code/company_and_or_faction_based/carwo_defense_systems/ammo/grenade.dm @@ -36,6 +36,8 @@ var/obj/item/gun/ballistic/automatic/sol_grenade_launcher/firing_launcher = fired_from if(istype(firing_launcher)) loaded_projectile.range = firing_launcher.target_range + else if(istype(fired_from, /obj/item/gun/ballistic/shotgun/shell_launcher)) + loaded_projectile.range = 5 . = ..() @@ -141,12 +143,10 @@ /obj/projectile/bullet/c980grenade/shrapnel/fuse_activation(atom/target) - var/obj/item/grenade/shrapnel_maker = new casing_to_spawn(get_turf(src)) - + var/obj/item/grenade/shrapnel_maker = new casing_to_spawn(get_turf(target)) shrapnel_maker.detonate() - qdel(shrapnel_maker) - playsound(src, 'modular_nova/modules/modular_weapons/sounds/grenade_burst.ogg', 50, TRUE, -3) + qdel(shrapnel_maker) /obj/item/ammo_box/c980grenade/shrapnel @@ -160,7 +160,7 @@ /obj/item/grenade/c980payload shrapnel_type = /obj/projectile/bullet/shrapnel/short_range - shrapnel_radius = 2 + shrapnel_radius = 3 ex_dev = 0 ex_heavy = 0 ex_light = 0 @@ -208,12 +208,6 @@ ammo_type = /obj/item/ammo_casing/c980grenade/shrapnel/phosphor -/obj/item/ammo_casing/shrapnel_exploder/phosphor - pellets = 8 - - projectile_type = /obj/projectile/bullet/incendiary/fire/backblast/short_range - - /obj/item/grenade/c980payload/phosphor shrapnel_type = /obj/projectile/bullet/incendiary/fire/backblast/short_range diff --git a/modular_nova/modules/modular_weapons/code/company_and_or_faction_based/saibasan/laser_guns.dm b/modular_nova/modules/modular_weapons/code/company_and_or_faction_based/saibasan/laser_guns.dm new file mode 100644 index 00000000000..1c767ad5ca8 --- /dev/null +++ b/modular_nova/modules/modular_weapons/code/company_and_or_faction_based/saibasan/laser_guns.dm @@ -0,0 +1,295 @@ +/// File location for the long gun's speech +#define LONG_MOD_LASER_SPEECH "nova/long_modular_laser.json" +/// File location for the short gun's speech +#define SHORT_MOD_LASER_SPEECH "nova/short_modular_laser.json" +/// How long the gun should wait between speaking to lessen spam +#define MOD_LASER_SPEECH_COOLDOWN 2 SECONDS +/// What color is the default kill mode for these guns, used to make sure the chat colors are right at roundstart +#define DEFAULT_RUNECHAT_GUN_COLOR "#cd4456" + +// Modular energy weapons, laser guns that can transform into different variants after a few seconds of waiting and animation +// Long version, takes both hands to use and doesn't fit in any bags out there +/obj/item/gun/energy/modular_laser_rifle + name = "\improper Hyeseong modular laser rifle" + desc = "A popular energy weapon system that can be reconfigured into many different variants on the fly. \ + Seen commonly amongst the Marsians who produce the weapon, with many different shapes and sizes to fit \ + the wide variety of modders the planet is home to." + base_icon_state = "hyeseong" + icon = 'modular_nova/modules/modular_weapons/icons/obj/company_and_or_faction_based/saibasan/guns48x.dmi' + icon_state = "hyeseong_kill" + lefthand_file = 'modular_nova/modules/modular_weapons/icons/mob/company_and_or_faction_based/saibasan/guns_lefthand.dmi' + righthand_file = 'modular_nova/modules/modular_weapons/icons/mob/company_and_or_faction_based/saibasan/guns_righthand.dmi' + inhand_icon_state = "hyeseong_kill" + worn_icon = 'modular_nova/modules/modular_weapons/icons/mob/company_and_or_faction_based/saibasan/guns_worn.dmi' + worn_icon_state = "hyeseong_kill" + cell_type = /obj/item/stock_parts/cell/hyeseong_internal_cell + modifystate = FALSE + ammo_type = list(/obj/item/ammo_casing/energy/cybersun_big_kill) + can_select = FALSE + ammo_x_offset = 0 + selfcharge = 1 + charge_delay = 15 + shaded_charge = TRUE + slot_flags = ITEM_SLOT_BACK + obj_flags = UNIQUE_RENAME + SET_BASE_PIXEL(-8, 0) + w_class = WEIGHT_CLASS_BULKY + weapon_weight = WEAPON_HEAVY + actions_types = list(/datum/action/item_action/toggle_personality) + fire_sound_volume = 50 + recoil = 0.25 // This isn't enough to mean ANYTHING aside from it jolting your screen the tiniest amount + /// What datums of weapon modes can we use? + var/list/weapon_mode_options = list( + /datum/laser_weapon_mode, + /datum/laser_weapon_mode/marksman, + /datum/laser_weapon_mode/disabler_machinegun, + /datum/laser_weapon_mode/launcher, + /datum/laser_weapon_mode/shotgun, + ) + /// Populates with a list of weapon mode names and their respective paths on init + var/list/weapon_mode_name_to_path = list() + /// Info for the radial menu for switching weapon mode + var/list/radial_menu_data = list() + /// Is the gun currently changing types? Prevents the gun from firing if yes + var/currently_switching_types = FALSE + /// How long transitioning takes before you're allowed to pick a weapon type + var/transition_duration = 1 SECONDS + /// What the currently selected weapon mode is, for quickly referencing for use in procs and whatnot + var/datum/laser_weapon_mode/currently_selected_mode + /// Name of the firing mode that is selected by default + var/default_selected_mode = "Kill" + /// Allows firing of the gun to be disabled for any reason, for example, if a gun has a melee mode + var/disabled_for_other_reasons = FALSE + /// The json file this gun pulls from when speaking + var/speech_json_file = LONG_MOD_LASER_SPEECH + /// Keeps track of the last processed charge, prevents message spam + var/last_charge = 0 + /// If the gun's personality speech thing is on, defaults to on because just listen to her + var/personality_mode = TRUE + /// Keeps track of our soulcatcher component + var/datum/component/soulcatcher/tracked_soulcatcher + /// What is this gun's extended examine, we only have to do this because the carbine is a subtype + var/expanded_examine_text = "The Hyeseong rifle is the first line of man-portable Marsian weapons platforms \ + from Cybersun Industries. Like her younger sister weapon, the Hoshi carbine, CI used funding aid provided \ + by SolFed to develop a portable weapon fueled by a proprietary generator rumored to be fueled by superstable plasma. \ + A rugged and hefty weapon, the Hyeseong stars in applications anywhere from medium to long ranges, though struggling \ + in CQB. Her onboard machine intelligence, at first devised to support the operator and manage the internal reactor, \ + is shipped with a more professional and understated personality-- since influenced by 'negligence' from users in \ + wiping the intelligence's memory before resale or transport." + /// A cooldown for when the weapon has last spoken, prevents messages from getting turbo spammed + COOLDOWN_DECLARE(last_speech) + +/obj/item/gun/energy/modular_laser_rifle/Initialize(mapload) + . = ..() + AddElement(/datum/element/manufacturer_examine, COMPANY_CYBERSUN) + chat_color = DEFAULT_RUNECHAT_GUN_COLOR + chat_color_darkened = process_chat_color(DEFAULT_RUNECHAT_GUN_COLOR, sat_shift = 0.85, lum_shift = 0.85) + last_charge = cell.charge + tracked_soulcatcher = AddComponent(/datum/component/soulcatcher/modular_laser) + create_weapon_mode_stuff() + voice = null + +/obj/item/gun/energy/modular_laser_rifle/examine(mob/user) + . = ..() + . += span_notice("You can examine closer to learn a little more about this weapon.") + . += span_notice("You can Alt-Click this gun to access the internal soulcatcher.") + +/obj/item/gun/energy/modular_laser_rifle/examine_more(mob/user) + . = ..() + . += expanded_examine_text + return . + +/obj/item/gun/energy/modular_laser_rifle/Destroy() + QDEL_NULL(tracked_soulcatcher) + return ..() + +/obj/item/gun/energy/modular_laser_rifle/AltClick(mob/user) + . = ..() + tracked_soulcatcher?.ui_interact(user) + +/// Handles filling out all of the lists regarding weapon modes and radials around that +/obj/item/gun/energy/modular_laser_rifle/proc/create_weapon_mode_stuff() + if(length(weapon_mode_name_to_path) || length(radial_menu_data)) + return // We don't need to worry about it if there's already stuff here + for(var/datum/laser_weapon_mode/laser_mode as anything in weapon_mode_options) + weapon_mode_name_to_path["[initial(laser_mode.name)]"] = new laser_mode() + var/obj/projectile/mode_projectile = initial(laser_mode.casing.projectile_type) + radial_menu_data["[initial(laser_mode.name)]"] = image(icon = mode_projectile.icon, icon_state = mode_projectile.icon_state) + currently_selected_mode = weapon_mode_name_to_path["[default_selected_mode]"] + transform_gun(currently_selected_mode, FALSE, TRUE) + +/obj/item/gun/energy/modular_laser_rifle/attack_self(mob/living/user) + if(!currently_switching_types) + change_to_switch_mode(user) + return ..() + +/// Makes the gun inoperable, playing an animation and giving a prompt to switch gun modes after the transition_duration passes +/obj/item/gun/energy/modular_laser_rifle/proc/change_to_switch_mode(mob/living/user) + currently_switching_types = TRUE + flick("[base_icon_state]_switch_on", src) + cut_overlays() + playsound(src, 'sound/items/modsuit/ballin.ogg', 75, TRUE) + var/new_icon_state = "[base_icon_state]_switch" + icon_state = new_icon_state + inhand_icon_state = new_icon_state + worn_icon_state = new_icon_state + addtimer(CALLBACK(src, PROC_REF(show_radial_choice_menu), user), transition_duration) + +/// Shows the radial choice menu to the user, if the user doesnt exist or isnt holding the gun anymore, it reverts back to its last form +/obj/item/gun/energy/modular_laser_rifle/proc/show_radial_choice_menu(mob/living/user) + if(!user?.is_holding(src)) + flick("[base_icon_state]_switch_off", src) + transform_gun(currently_selected_mode, FALSE) + playsound(src, 'sound/items/modsuit/ballout.ogg', 75, TRUE) + return + + var/picked_choice = show_radial_menu( + user, + src, + radial_menu_data, + require_near = TRUE, + tooltips = TRUE, + ) + + if(isnull(picked_choice) || isnull(weapon_mode_name_to_path["[picked_choice]"])) + flick("[base_icon_state]_switch_off", src) + transform_gun(currently_selected_mode, FALSE) + playsound(src, 'sound/items/modsuit/ballout.ogg', 75, TRUE) + return + + var/new_weapon_mode = weapon_mode_name_to_path["[picked_choice]"] + transform_gun(new_weapon_mode, TRUE) + +/// Transforms the gun into a different type, if replacing is set to true then it'll make sure to remove any effects the prior gun type had +/obj/item/gun/energy/modular_laser_rifle/proc/transform_gun(datum/laser_weapon_mode/new_weapon_mode, replacing = TRUE, dont_speak = FALSE) + if(!new_weapon_mode) + stack_trace("transform_gun was called but didn't get a new weapon mode, meaning it couldn't work.") + return + if(replacing) + currently_selected_mode.remove_from_weapon(src) + currently_selected_mode = new_weapon_mode + flick("[base_icon_state]_switch_off", src) + currently_selected_mode.apply_stats(src) + currently_selected_mode.apply_to_weapon(src) + playsound(src, 'sound/items/modsuit/ballout.ogg', 75, TRUE) + if(!dont_speak) + speak_up(currently_selected_mode.json_speech_string, TRUE) + currently_switching_types = FALSE + +/obj/item/gun/energy/modular_laser_rifle/can_shoot() + if(!length(ammo_type)) + return FALSE + return ..() + +/obj/item/gun/energy/modular_laser_rifle/can_trigger_gun(mob/living/user, akimbo_usage) + . = ..() + if(currently_switching_types || disabled_for_other_reasons) + return FALSE + +/// Makes the gun speak with a sound effect and colored runetext based on the mode the gun is in, reads the gun's speech json as defined through variables +/obj/item/gun/energy/modular_laser_rifle/proc/speak_up(json_string, ignores_cooldown = FALSE, ignores_personality_toggle = FALSE) + if(!personality_mode && !ignores_personality_toggle) + return + if(!json_string) + return + if(!ignores_cooldown && !COOLDOWN_FINISHED(src, last_speech)) + return + say(pick_list_replacements(speech_json_file, json_string)) + playsound(src, 'sound/creatures/tourist/tourist_talk.ogg', 15, TRUE, SHORT_RANGE_SOUND_EXTRARANGE, frequency = rand(2, 2.2)) + Shake(2, 2, 1 SECONDS) + COOLDOWN_START(src, last_speech, MOD_LASER_SPEECH_COOLDOWN) + +/obj/item/gun/energy/modular_laser_rifle/equipped(mob/user, slot, initial) + . = ..() + if(slot & (ITEM_SLOT_BELT|ITEM_SLOT_BACK|ITEM_SLOT_SUITSTORE)) + speak_up("worn") + else if(slot & ITEM_SLOT_HANDS) + RegisterSignal(user, COMSIG_MOB_CI_TOGGLED, PROC_REF(user_ci_toggled)) + speak_up("pickup") + return + UnregisterSignal(user, COMSIG_MOB_CI_TOGGLED) + +/obj/item/gun/energy/modular_laser_rifle/dropped(mob/user, silent) + . = ..() + if(src in user.contents) + return // If they're still holding us or have us on them, dw about it + UnregisterSignal(user, COMSIG_MOB_CI_TOGGLED) + speak_up("putdown") + +/obj/item/gun/energy/modular_laser_rifle/process(seconds_per_tick) + . = ..() + var/cell_charge_quarter = cell.maxcharge / 4 + if((cell_charge_quarter > cell.charge) && !(last_charge < cell_charge_quarter)) + speak_up("lowcharge") + else if((cell.maxcharge == cell.charge) && !(last_charge == cell.maxcharge)) + speak_up("fullcharge") + last_charge = cell.charge + +/// Triggers when a mob user toggles CI +/obj/item/gun/energy/modular_laser_rifle/proc/user_ci_toggled(mob/living/source) + if(source.combat_indicator) + speak_up("combatmode") + +/obj/item/gun/energy/modular_laser_rifle/ui_action_click(mob/user, actiontype) + if(!istype(actiontype, /datum/action/item_action/toggle_personality)) + return ..() + playsound(src, 'sound/machines/beep.ogg', 30, TRUE) + personality_mode = !personality_mode + speak_up("[personality_mode ? "pickup" : "putdown"]", ignores_personality_toggle = TRUE) + return ..() + +// Power cell for the big rifle +/obj/item/stock_parts/cell/hyeseong_internal_cell + name = "\improper Hyeseong modular laser rifle internal cell" + desc = "These are usually supposed to be inside of the gun, you know." + maxcharge = STANDARD_CELL_CHARGE * 2 + +/datum/action/item_action/toggle_personality + name = "Toggle Weapon Personality" + desc = "Toggles the weapon's personality core. Studies find that turning them off makes them quite sad, however." + background_icon_state = "bg_mod" + +/datum/component/soulcatcher/modular_laser + max_souls = 1 + communicate_as_parent = TRUE + +//Short version of the above modular rifle, has less charge and different modes +/obj/item/gun/energy/modular_laser_rifle/carbine + name = "\improper Hoshi modular laser carbine" + icon = 'modular_nova/modules/modular_weapons/icons/obj/company_and_or_faction_based/saibasan/guns32x.dmi' + icon_state = "hoshi_kill" + inhand_icon_state = "hoshi_kill" + worn_icon_state = "hoshi_kill" + base_icon_state = "hoshi" + charge_sections = 3 + cell_type = /obj/item/stock_parts/cell + ammo_type = list(/obj/item/ammo_casing/energy/cybersun_small_hellfire) + slot_flags = ITEM_SLOT_BACK | ITEM_SLOT_BELT + SET_BASE_PIXEL(0, 0) + w_class = WEIGHT_CLASS_NORMAL + weapon_weight = WEAPON_MEDIUM + weapon_mode_options = list( + /datum/laser_weapon_mode/hellfire, + /datum/laser_weapon_mode/sword, + /datum/laser_weapon_mode/flare, + /datum/laser_weapon_mode/shotgun_small, + /datum/laser_weapon_mode/trickshot_disabler, + ) + default_selected_mode = "Incinerate" + speech_json_file = SHORT_MOD_LASER_SPEECH + expanded_examine_text = "The Hoshi carbine is the latest line of man-portable Marsian weapons platforms from \ + Cybersun Industries. Like her older sister weapon, the Hyeseong rifle, CI used funding aid provided by SolFed \ + to develop a portable weapon fueled by a proprietary generator rumored to be fueled by superstable plasma. A \ + lithe and mobile weapon, the Hoshi stars in close-quarters battle, trickshots, and area-of-effect blasts; though \ + ineffective at ranged combat. Her onboard machine intelligence, at first devised to support the operator and \ + manage the internal reactor, was originally shipped with a more energetic personality-- since influenced by 'negligence' \ + from users in wiping the intelligence's memory before resale or transport." + +/obj/item/gun/energy/modular_laser_rifle/carbine/emp_act(severity) + . = ..() + speak_up("emp", TRUE) // She gets very upset if you emp her + +#undef LONG_MOD_LASER_SPEECH +#undef SHORT_MOD_LASER_SPEECH +#undef MOD_LASER_SPEECH_COOLDOWN +#undef DEFAULT_RUNECHAT_GUN_COLOR diff --git a/modular_nova/modules/modular_weapons/code/company_and_or_faction_based/saibasan/mode_datums.dm b/modular_nova/modules/modular_weapons/code/company_and_or_faction_based/saibasan/mode_datums.dm new file mode 100644 index 00000000000..a1c0489b867 --- /dev/null +++ b/modular_nova/modules/modular_weapons/code/company_and_or_faction_based/saibasan/mode_datums.dm @@ -0,0 +1,206 @@ +// Yeah I'm using datums for this, because the code on a regular gun would suck huge +// Holds a lot of information that will be applied ot the gun, as well as info that the gun will read later +// This basetype is applies to the base 2 burst laser kill mode for the large laser gun +/datum/laser_weapon_mode + /// What name does this weapon mode have? Will appear in the weapon's radial menu + var/name = "Kill" + /// What casing does this variant of weapon use? + var/obj/item/ammo_casing/casing = /obj/item/ammo_casing/energy/cybersun_big_kill + /// What icon_state does this weapon mode use? + var/weapon_icon_state = "kill" + /// How many charge sections does this variant of weapon have? + var/charge_sections = 5 + /// What is the shot cooldown this variant applies to the weapon? + var/shot_delay = 0.3 SECONDS + /// What json string do we check for when making chat messages with this mode? + var/json_speech_string = "kill" + /// What do we change the gun's runetext color to when applied + var/gun_runetext_color = "#cd4456" + +/// Applies some of the universal stats from the variables above +/datum/laser_weapon_mode/proc/apply_stats(obj/item/gun/energy/applied_gun) + if(length(applied_gun.ammo_type)) + for(var/found_casing as anything in applied_gun.ammo_type) + applied_gun.ammo_type.Remove(found_casing) + qdel(found_casing) + applied_gun.ammo_type.Add(casing) + applied_gun.update_ammo_types() + applied_gun.charge_sections = charge_sections + applied_gun.fire_delay = shot_delay + var/new_icon_state = "[applied_gun.base_icon_state]_[weapon_icon_state]" + applied_gun.icon_state = new_icon_state + applied_gun.inhand_icon_state = new_icon_state + applied_gun.worn_icon_state = new_icon_state + applied_gun.update_appearance() + applied_gun.chat_color = gun_runetext_color + applied_gun.chat_color_darkened = process_chat_color(gun_runetext_color, sat_shift = 0.85, lum_shift = 0.85) + +/// Stuff applied to the passed gun when the weapon mode is given to the gun +/datum/laser_weapon_mode/proc/apply_to_weapon(obj/item/gun/energy/applied_gun) + applied_gun.burst_size = 2 + +/// Stuff applied to the passed gun when the weapon mode is removed from the gun +/datum/laser_weapon_mode/proc/remove_from_weapon(obj/item/gun/energy/applied_gun) + applied_gun.burst_size = 1 + +// Marksman mode for the large laser, adds a scope, slower firing rate, and really quick projectiles +/datum/laser_weapon_mode/marksman + name = "Marksman" + casing = /obj/item/ammo_casing/energy/cybersun_big_sniper + weapon_icon_state = "sniper" + shot_delay = 2 SECONDS + json_speech_string = "sniper" + gun_runetext_color = "#f8d860" + /// Keeps track of the scope component for deleting later + var/datum/component/scope/scope_component + +/datum/laser_weapon_mode/marksman/apply_to_weapon(obj/item/gun/energy/applied_gun) + scope_component = applied_gun.AddComponent(/datum/component/scope, 3) + +/datum/laser_weapon_mode/marksman/remove_from_weapon(obj/item/gun/energy/applied_gun) + QDEL_NULL(scope_component) + +// Windup autofire disabler mode for the large laser +/datum/laser_weapon_mode/disabler_machinegun + name = "Disable" + casing = /obj/item/ammo_casing/energy/cybersun_big_disabler + weapon_icon_state = "disabler" + charge_sections = 2 + shot_delay = 0.25 SECONDS + json_speech_string = "disable" + gun_runetext_color = "#47a1b3" + /// Keeps track of the autofire component for deleting later + var/datum/component/automatic_fire/autofire_component + +/datum/laser_weapon_mode/disabler_machinegun/apply_to_weapon(obj/item/gun/energy/applied_gun) + autofire_component = applied_gun.AddComponent(/datum/component/automatic_fire, shot_delay) + +/datum/laser_weapon_mode/disabler_machinegun/remove_from_weapon(obj/item/gun/energy/applied_gun) + QDEL_NULL(autofire_component) + +// Grenade launching mode for the large laser +/datum/laser_weapon_mode/launcher + name = "Launcher" + casing = /obj/item/ammo_casing/energy/cybersun_big_launcher + weapon_icon_state = "launcher" + charge_sections = 3 + shot_delay = 2 SECONDS + json_speech_string = "launcher" + gun_runetext_color = "#77bd5d" + +/datum/laser_weapon_mode/launcher/apply_to_weapon(obj/item/gun/energy/applied_gun) + applied_gun.recoil = 2 + +/datum/laser_weapon_mode/launcher/remove_from_weapon(obj/item/gun/energy/applied_gun) + applied_gun.recoil = initial(applied_gun.recoil) + +// Shotgun mode for the large laser +/datum/laser_weapon_mode/shotgun + name = "Shotgun" + casing = /obj/item/ammo_casing/energy/cybersun_big_shotgun + weapon_icon_state = "shot" + charge_sections = 3 + shot_delay = 0.75 SECONDS + json_speech_string = "shotgun" + gun_runetext_color = "#7a0bb7" + +/datum/laser_weapon_mode/shotgun/apply_to_weapon(obj/item/gun/energy/applied_gun) + applied_gun.recoil = 1 + +/datum/laser_weapon_mode/shotgun/remove_from_weapon(obj/item/gun/energy/applied_gun) + applied_gun.recoil = initial(applied_gun.recoil) + +// Hellfire mode for the small laser +/datum/laser_weapon_mode/hellfire + name = "Incinerate" + casing = /obj/item/ammo_casing/energy/cybersun_small_hellfire + weapon_icon_state = "kill" + charge_sections = 3 + shot_delay = 0.4 SECONDS + json_speech_string = "incinerate" + gun_runetext_color = "#cd4456" + +/datum/laser_weapon_mode/hellfire/apply_to_weapon(obj/item/gun/energy/applied_gun) + return + +/datum/laser_weapon_mode/hellfire/remove_from_weapon(obj/item/gun/energy/applied_gun) + return + +// Melee mode for the small laser, yeah this one will be weird +/datum/laser_weapon_mode/sword + name = "Blade" + // This mode doesn't actually shoot but we gotta have a casing regardless so it doesn't runtime times a million + // And also so the visuals work :3 + casing = /obj/item/ammo_casing/energy/cybersun_small_blade + weapon_icon_state = "blade" + charge_sections = 2 + json_speech_string = "blade" + gun_runetext_color = "#f8d860" + +/datum/laser_weapon_mode/sword/apply_to_weapon(obj/item/gun/energy/modular_laser_rifle/applied_gun) + playsound(src, 'sound/items/unsheath.ogg', 25, TRUE) + applied_gun.force = 18 + applied_gun.sharpness = SHARP_EDGED + applied_gun.bare_wound_bonus = 10 + applied_gun.disabled_for_other_reasons = TRUE + applied_gun.attack_verb_continuous = list("slashes", "cuts") + applied_gun.attack_verb_simple = list("slash", "cut") + applied_gun.hitsound = 'sound/weapons/rapierhit.ogg' + +/datum/laser_weapon_mode/sword/remove_from_weapon(obj/item/gun/energy/modular_laser_rifle/applied_gun) + playsound(src, 'sound/items/sheath.ogg', 25, TRUE) + applied_gun.force = initial(applied_gun.force) + applied_gun.sharpness = initial(applied_gun.sharpness) + applied_gun.bare_wound_bonus = initial(applied_gun.bare_wound_bonus) + applied_gun.disabled_for_other_reasons = FALSE + applied_gun.attack_verb_continuous = initial(applied_gun.attack_verb_continuous) + applied_gun.attack_verb_simple = initial(applied_gun.attack_verb_simple) + applied_gun.hitsound = initial(applied_gun.hitsound) + +// Flare mode for the small laser +/datum/laser_weapon_mode/flare + name = "Flare" + casing = /obj/item/ammo_casing/energy/cybersun_small_launcher + weapon_icon_state = "flare" + charge_sections = 3 + shot_delay = 2 SECONDS + json_speech_string = "flare" + gun_runetext_color = "#77bd5d" + +/datum/laser_weapon_mode/flare/apply_to_weapon(obj/item/gun/energy/applied_gun) + applied_gun.recoil = 2 + +/datum/laser_weapon_mode/flare/remove_from_weapon(obj/item/gun/energy/applied_gun) + applied_gun.recoil = initial(applied_gun.recoil) + +// Shotgun mode for the small laser +/datum/laser_weapon_mode/shotgun_small + name = "Shotgun" + casing = /obj/item/ammo_casing/energy/cybersun_small_shotgun + weapon_icon_state = "shot" + charge_sections = 3 + shot_delay = 0.6 SECONDS + json_speech_string = "shotgun" + gun_runetext_color = "#7a0bb7" + +/datum/laser_weapon_mode/shotgun_small/apply_to_weapon(obj/item/gun/energy/applied_gun) + applied_gun.recoil = 1 + +/datum/laser_weapon_mode/shotgun_small/remove_from_weapon(obj/item/gun/energy/applied_gun) + applied_gun.recoil = initial(applied_gun.recoil) + +// Trickshot bounce disabler mode for the small laser +/datum/laser_weapon_mode/trickshot_disabler + name = "Disable" + casing = /obj/item/ammo_casing/energy/cybersun_small_disabler + weapon_icon_state = "disable" + charge_sections = 3 + shot_delay = 0.4 SECONDS + json_speech_string = "disable" + gun_runetext_color = "#47a1b3" + +/datum/laser_weapon_mode/trickshot_disabler/apply_to_weapon(obj/item/gun/energy/applied_gun) + return + +/datum/laser_weapon_mode/trickshot_disabler/remove_from_weapon(obj/item/gun/energy/applied_gun) + return diff --git a/modular_nova/modules/modular_weapons/code/company_and_or_faction_based/saibasan/projectiles.dm b/modular_nova/modules/modular_weapons/code/company_and_or_faction_based/saibasan/projectiles.dm new file mode 100644 index 00000000000..9e6916ddf32 --- /dev/null +++ b/modular_nova/modules/modular_weapons/code/company_and_or_faction_based/saibasan/projectiles.dm @@ -0,0 +1,235 @@ +// Red kill lasers for the big gun + +/obj/item/ammo_casing/energy/cybersun_big_kill + projectile_type = /obj/projectile/beam/cybersun_laser + e_cost = LASER_SHOTS(20, STANDARD_CELL_CHARGE * 2) + select_name = "Kill" + fire_sound = 'modular_nova/modules/modular_weapons/sounds/laser_firing/laser.ogg' + +/obj/projectile/beam/cybersun_laser + icon = 'modular_nova/modules/modular_weapons/icons/obj/company_and_or_faction_based/saibasan/projectiles.dmi' + icon_state = "kill_large" + damage = 20 + impact_effect_type = /obj/effect/temp_visual/impact_effect/red_laser + light_color = COLOR_SOFT_RED + wound_falloff_tile = 1 + +// Speedy sniper lasers for the big gun + +/obj/item/ammo_casing/energy/cybersun_big_sniper + projectile_type = /obj/projectile/beam/cybersun_laser/marksman + e_cost = LASER_SHOTS(10, STANDARD_CELL_CHARGE * 2) + select_name = "Marksman" + fire_sound = 'modular_nova/modules/modular_weapons/sounds/laser_firing/vaporize.ogg' + +/obj/projectile/beam/cybersun_laser/marksman + icon_state = "sniper" + damage = 50 + impact_effect_type = /obj/effect/temp_visual/impact_effect/yellow_laser + speed = 0.4 + light_range = 2 + light_color = COLOR_VERY_SOFT_YELLOW + wound_falloff_tile = 0.1 + +// Disabler machinegun for the big gun + +/obj/item/ammo_casing/energy/cybersun_big_disabler + projectile_type = /obj/projectile/beam/cybersun_laser/disable + e_cost = LASER_SHOTS(20, STANDARD_CELL_CHARGE * 2) + select_name = "Disable" + harmful = FALSE + +/obj/projectile/beam/cybersun_laser/disable + icon_state = "disable_large" + damage = 0 + stamina = 20 + impact_effect_type = /obj/effect/temp_visual/impact_effect/blue_laser + light_color = COLOR_BRIGHT_BLUE + stamina_falloff_tile = 0.25 + +// Plasma burst grenade for the big gun + +/obj/item/ammo_casing/energy/cybersun_big_launcher + projectile_type = /obj/projectile/beam/cybersun_laser/granata + e_cost = LASER_SHOTS(5, STANDARD_CELL_CHARGE * 2) + select_name = "Launcher" + +/obj/projectile/beam/cybersun_laser/granata + name = "plasma grenade" + icon_state = "grenade" + damage = 50 + speed = 2 + range = 6 + impact_effect_type = /obj/effect/temp_visual/impact_effect/green_laser + light_color = COLOR_PALE_GREEN + pass_flags = PASSTABLE | PASSGRILLE // His ass does NOT pass through glass! + /// What type of casing should we put inside the bullet to act as shrapnel later + var/casing_to_spawn = /obj/item/grenade/c980payload/plasma_grenade + +/obj/projectile/beam/cybersun_laser/granata/on_hit(atom/target, blocked = 0, pierce_hit) + ..() + fuse_activation(target) + return BULLET_ACT_HIT + +/obj/projectile/beam/cybersun_laser/granata/on_range() + fuse_activation(get_turf(src)) + return ..() + +/// Called when the projectile reaches its max range, or hits something +/obj/projectile/beam/cybersun_laser/granata/proc/fuse_activation(atom/target) + var/obj/item/grenade/shrapnel_maker = new casing_to_spawn(get_turf(target)) + shrapnel_maker.detonate() + playsound(src, 'modular_nova/modules/modular_weapons/sounds/grenade_burst.ogg', 50, TRUE, -3) + qdel(shrapnel_maker) + +/obj/projectile/beam/cybersun_laser/granata_shrapnel + name = "plasma globule" + icon_state = "flare" + damage = 10 + speed = 2.5 + bare_wound_bonus = 55 // Lasers have a wound bonus of 40, this is a bit higher + wound_bonus = -50 // However we do not very much against armor + range = 2 + pass_flags = PASSTABLE | PASSGRILLE // His ass does NOT pass through glass! + weak_against_armour = TRUE + impact_effect_type = /obj/effect/temp_visual/impact_effect/green_laser + light_color = COLOR_PALE_GREEN + damage_falloff_tile = 3 + +/obj/item/grenade/c980payload/plasma_grenade + shrapnel_type = /obj/projectile/beam/cybersun_laser/granata_shrapnel + shrapnel_radius = 3 + +// Shotgun casing for the big gun + +/obj/item/ammo_casing/energy/cybersun_big_shotgun + projectile_type = /obj/projectile/beam/cybersun_laser/granata_shrapnel/shotgun_pellet + e_cost = LASER_SHOTS(10, STANDARD_CELL_CHARGE * 2) + pellets = 5 + variance = 30 + select_name = "Shotgun" + fire_sound = 'modular_nova/modules/modular_weapons/sounds/laser_firing/melt.ogg' + +/obj/projectile/beam/cybersun_laser/granata_shrapnel/shotgun_pellet + icon_state = "because_it_doesnt_miss" + damage = 10 + impact_effect_type = /obj/effect/temp_visual/impact_effect/purple_laser + speed = 0.8 + light_color = COLOR_SCIENCE_PINK + range = 9 + damage_falloff_tile = 0.5 + +// Hellfire lasers for the little guy + +/obj/item/ammo_casing/energy/cybersun_small_hellfire + projectile_type = /obj/projectile/beam/cybersun_laser/hellfire + e_cost = LASER_SHOTS(10, STANDARD_CELL_CHARGE) + select_name = "Incinerate" + fire_sound = 'modular_nova/modules/modular_weapons/sounds/laser_firing/incinerate.ogg' + +/obj/projectile/beam/cybersun_laser/hellfire + icon_state = "hellfire" + damage = 30 + impact_effect_type = /obj/effect/temp_visual/impact_effect/red_laser + speed = 0.6 + wound_bonus = 0 + light_color = COLOR_SOFT_RED + +// Bounce disabler lasers for the little guy + +/obj/item/ammo_casing/energy/cybersun_small_disabler + projectile_type = /obj/projectile/beam/cybersun_laser/disable_bounce + e_cost = LASER_SHOTS(10, STANDARD_CELL_CHARGE) + select_name = "Disable" + harmful = FALSE + +/obj/projectile/beam/cybersun_laser/disable_bounce + icon_state = "disable_bounce" + damage = 0 + stamina = 30 + impact_effect_type = /obj/effect/temp_visual/impact_effect/blue_laser + light_color = COLOR_BRIGHT_BLUE + ricochet_auto_aim_angle = 30 + ricochet_auto_aim_range = 5 + ricochets_max = 2 + ricochet_incidence_leeway = 100 + ricochet_chance = 130 + ricochet_decay_damage = 0.8 + +/obj/projectile/beam/cybersun_laser/disable_bounce/check_ricochet_flag(atom/reflecting_atom) + if((reflecting_atom.flags_ricochet & RICOCHET_HARD) || (reflecting_atom.flags_ricochet & RICOCHET_SHINY)) + return TRUE + return FALSE + +// Flare launcher + +/obj/item/ammo_casing/energy/cybersun_small_launcher + projectile_type = /obj/projectile/beam/cybersun_laser/flare + e_cost = LASER_SHOTS(5, STANDARD_CELL_CHARGE) + select_name = "Flare" + +/obj/projectile/beam/cybersun_laser/flare + name = "plasma flare" + icon_state = "flare" + damage = 30 + speed = 2 + range = 6 + impact_effect_type = /obj/effect/temp_visual/impact_effect/green_laser + light_color = COLOR_PALE_GREEN + pass_flags = PASSTABLE | PASSGRILLE // His ass does NOT pass through glass! + /// How many firestacks the bullet should impart upon a target when impacting + var/firestacks_to_give = 2 + /// What we spawn when we range out + var/obj/illumination_flare = /obj/item/flashlight/flare/plasma_projectile + +/obj/projectile/beam/cybersun_laser/flare/on_hit(atom/target, blocked = 0, pierce_hit) + . = ..() + if(iscarbon(target)) + var/mob/living/carbon/gaslighter = target + gaslighter.adjust_fire_stacks(firestacks_to_give) + gaslighter.ignite_mob() + else + new illumination_flare(get_turf(target)) + +/obj/projectile/beam/cybersun_laser/flare/on_range() + new illumination_flare(get_turf(src)) + return ..() + +/obj/item/flashlight/flare/plasma_projectile + name = "plasma flare" + desc = "A burning glob of green plasma, makes an effective temporary lighting source." + light_range = 4 + anchored = TRUE + icon = 'modular_nova/modules/modular_weapons/icons/obj/company_and_or_faction_based/saibasan/projectiles.dmi' + icon_state = "flare_burn" + light_color = COLOR_PALE_GREEN + light_power = 2 + +/obj/item/flashlight/flare/plasma_projectile/Initialize(mapload) + . = ..() + if(randomize_fuel) + fuel = rand(3 MINUTES, 5 MINUTES) + ignition() + +/obj/item/flashlight/flare/plasma_projectile/turn_off() + . = ..() + qdel(src) + +// Shotgun casing for the small gun + +/obj/item/ammo_casing/energy/cybersun_small_shotgun + projectile_type = /obj/projectile/beam/cybersun_laser/granata_shrapnel/shotgun_pellet + e_cost = LASER_SHOTS(10, STANDARD_CELL_CHARGE) + pellets = 3 + variance = 15 + select_name = "Shotgun" + fire_sound = 'modular_nova/modules/modular_weapons/sounds/laser_firing/melt.ogg' + +// Dummy casing that does nothing but have a projectile that looks like a sword + +/obj/item/ammo_casing/energy/cybersun_small_blade + projectile_type = /obj/projectile/beam/cybersun_laser/blade + select_name = "Blade" + +/obj/projectile/beam/cybersun_laser/blade + icon_state = "blade" diff --git a/modular_nova/modules/modular_weapons/code/company_and_or_faction_based/szot_dynamica/ammo/plasma.dm b/modular_nova/modules/modular_weapons/code/company_and_or_faction_based/szot_dynamica/ammo/plasma.dm index f0ce4e32bd5..2f4c5bcbb13 100644 --- a/modular_nova/modules/modular_weapons/code/company_and_or_faction_based/szot_dynamica/ammo/plasma.dm +++ b/modular_nova/modules/modular_weapons/code/company_and_or_faction_based/szot_dynamica/ammo/plasma.dm @@ -2,7 +2,7 @@ /obj/item/ammo_casing/energy/laser/plasma_glob projectile_type = /obj/projectile/beam/laser/plasma_glob - fire_sound = 'modular_nova/modules/microfusion/sound/incinerate.ogg' + fire_sound = 'modular_nova/modules/modular_weapons/sounds/laser_firing/incinerate.ogg' /obj/item/ammo_casing/energy/laser/plasma_glob/Initialize(mapload) . = ..() diff --git a/modular_nova/modules/modular_weapons/code/company_and_or_faction_based/szot_dynamica/ammo/rifle.dm b/modular_nova/modules/modular_weapons/code/company_and_or_faction_based/szot_dynamica/ammo/rifle.dm index e53c55c62e9..a96faa34fcd 100644 --- a/modular_nova/modules/modular_weapons/code/company_and_or_faction_based/szot_dynamica/ammo/rifle.dm +++ b/modular_nova/modules/modular_weapons/code/company_and_or_faction_based/szot_dynamica/ammo/rifle.dm @@ -61,8 +61,13 @@ demolition_mod = 1.8 /// How much damage we add to things that are weak to this bullet var/anti_materiel_damage_addition = 30 - -/obj/projectile/bullet/p60strela/Initialize(mapload) - . = ..() - // We do 80 total damage to anything robotic, namely borgs, and robotic simplemobs - AddElement(/datum/element/bane, target_type = /mob/living, mob_biotypes = MOB_ROBOTIC, damage_multiplier = 0, added_damage = anti_materiel_damage_addition) + /// What biotype we look for + var/biotype_we_look_for = MOB_ROBOTIC + +/obj/projectile/bullet/p60strela/on_hit(atom/target, blocked, pierce_hit) + if(!isliving(target) || (damage > initial(damage))) + return ..() + var/mob/living/target_mob = target + if(target_mob.mob_biotypes & biotype_we_look_for) + damage += anti_materiel_damage_addition + return ..() diff --git a/modular_nova/modules/modular_weapons/code/company_and_or_faction_based/szot_dynamica/pistol.dm b/modular_nova/modules/modular_weapons/code/company_and_or_faction_based/szot_dynamica/pistol.dm index 068cf2508a5..f74e774fb0c 100644 --- a/modular_nova/modules/modular_weapons/code/company_and_or_faction_based/szot_dynamica/pistol.dm +++ b/modular_nova/modules/modular_weapons/code/company_and_or_faction_based/szot_dynamica/pistol.dm @@ -9,7 +9,7 @@ icon = 'modular_nova/modules/modular_weapons/icons/obj/company_and_or_faction_based/szot_dynamica/guns_32.dmi' icon_state = "slonce" - fire_sound = 'modular_nova/modules/microfusion/sound/incinerate.ogg' + fire_sound = 'modular_nova/modules/modular_weapons/sounds/laser_firing/incinerate.ogg' fire_sound_volume = 40 // This thing is comically loud otherwise w_class = WEIGHT_CLASS_NORMAL @@ -61,7 +61,7 @@ icon = 'modular_nova/modules/modular_weapons/icons/obj/company_and_or_faction_based/szot_dynamica/guns_32.dmi' icon_state = "gwiazda" - fire_sound = 'modular_nova/modules/microfusion/sound/burn.ogg' + fire_sound = 'modular_nova/modules/modular_weapons/sounds/laser_firing/burn.ogg' fire_sound_volume = 40 // This thing is comically loud otherwise w_class = WEIGHT_CLASS_NORMAL diff --git a/modular_nova/modules/modular_weapons/code/gun_racks.dm b/modular_nova/modules/modular_weapons/code/gun_racks.dm new file mode 100644 index 00000000000..f0905d5c31a --- /dev/null +++ b/modular_nova/modules/modular_weapons/code/gun_racks.dm @@ -0,0 +1,54 @@ +/obj/structure/rack/gunrack + name = "gun rack" + desc = "A tall rack for storing guns." + icon = 'modular_nova/modules/modular_weapons/icons/gun_rack.dmi' + icon_state = "gunrack" + +/obj/structure/rack/gunrack/Initialize(mapload) + . = ..() + var/static/list/loc_connections = list( + COMSIG_ATOM_EXIT = PROC_REF(on_exit), + ) + AddElement(/datum/element/connect_loc, loc_connections) + if(!mapload) + return + +/obj/structure/rack/gunrack/attackby(obj/item/attacking_item, mob/living/user, params) + var/list/modifiers = params2list(params) + if(attacking_item.tool_behaviour == TOOL_WRENCH && !(obj_flags & NO_DECONSTRUCTION) && LAZYACCESS(modifiers, RIGHT_CLICK)) + attacking_item.play_tool_sound(src) + deconstruct(TRUE) + return + if(user.combat_mode) + return ..() + if(user.transferItemToLoc(attacking_item, drop_location())) + if(istype(attacking_item, /obj/item/gun)) + var/obj/item/gun/our_gun = attacking_item + rotate_weapon(our_gun) + our_gun.pixel_x = rand(-10, 10) + our_gun.base_pixel_x + return TRUE + +/// Rotates the weapon or resets its transform based on the being_removed variable +/obj/structure/rack/gunrack/proc/rotate_weapon(obj/item/incoming_weapon, being_removed = FALSE) + var/matrix/new_matrix = matrix() + if(!being_removed) + new_matrix.Turn(-90) + RegisterSignal(incoming_weapon, COMSIG_ITEM_EQUIPPED, PROC_REF(item_picked_up)) + incoming_weapon.transform = new_matrix + +/// Checks when something is leaving our turf, if its a gun then make sure to reset its transform so its not permanently rotated +/obj/structure/rack/gunrack/proc/on_exit(datum/source, atom/movable/leaving, direction) + SIGNAL_HANDLER + + if(!isgun(leaving)) + return + var/obj/item/leaving_item = leaving + rotate_weapon(leaving_item, being_removed = TRUE) + +/// Handles the guns being picked up to unrotate them +/obj/structure/rack/gunrack/proc/item_picked_up(datum/source, mob/equipper, slot) + SIGNAL_HANDLER + + var/obj/item/leaving_item = source + rotate_weapon(leaving_item, being_removed = TRUE) + UnregisterSignal(leaving_item, COMSIG_ITEM_EQUIPPED) diff --git a/modular_nova/modules/modular_weapons/code/modular_projectiles.dm b/modular_nova/modules/modular_weapons/code/modular_projectiles.dm index 4a0625b491f..574d278dc09 100644 --- a/modular_nova/modules/modular_weapons/code/modular_projectiles.dm +++ b/modular_nova/modules/modular_weapons/code/modular_projectiles.dm @@ -107,63 +107,3 @@ /obj/projectile/bullet/a223/ap name = ".277 armor-piercing bullet" armour_penetration = 60 - -/* -* .34 ACP -*/ - -// Why? Blame CFA, they want their bullets to be *proprietary* -/obj/item/ammo_casing/c34 - name = ".34 bullet casing" - desc = "A .34 bullet casing." - caliber = "c34acp" - projectile_type = /obj/projectile/bullet/c34 - -/obj/projectile/bullet/c34 - name = ".34 bullet" - damage = 15 - wound_bonus = 0 - -/obj/item/ammo_casing/c34/rubber - name = ".34 rubber bullet casing" - desc = "A .34 rubber bullet casing." - caliber = "c34acp" - projectile_type = /obj/projectile/bullet/c34/rubber - harmful = FALSE - -/obj/projectile/bullet/c34/rubber - name = ".34 rubber bullet" - damage = 5 - stamina = 20 - wound_bonus = -75 - shrapnel_type = null - sharpness = NONE - embedding = null - -/obj/item/ammo_casing/c34/ap - name = ".34 armor-piercing bullet casing" - desc = "A .34 armor-piercing bullet casing." - caliber = "c34acp" - projectile_type = /obj/projectile/bullet/c34/ap - custom_materials = AMMO_MATS_AP - advanced_print_req = TRUE - -/obj/projectile/bullet/c34/ap - name = ".34 armor-piercing bullet" - damage = 15 - armour_penetration = 40 - wound_bonus = -75 - -/obj/item/ammo_casing/c34_incendiary - name = ".34 incendiary bullet casing" - desc = "A .34 incendiary bullet casing." - caliber = "c34acp" - projectile_type = /obj/projectile/bullet/incendiary/c34_incendiary - custom_materials = AMMO_MATS_TEMP - advanced_print_req = TRUE - -/obj/projectile/bullet/incendiary/c34_incendiary - name = ".34 incendiary bullet" - damage = 8 - fire_stacks = 1 - wound_bonus = -90 diff --git a/modular_nova/modules/modular_weapons/code/overrides/autolathe_designs.dm b/modular_nova/modules/modular_weapons/code/overrides/autolathe_designs.dm new file mode 100644 index 00000000000..56d4d3230cb --- /dev/null +++ b/modular_nova/modules/modular_weapons/code/overrides/autolathe_designs.dm @@ -0,0 +1,16 @@ +/* +* AMMO +*/ + +/datum/design/strilka310_rubber + name = ".310 Rubber Bullet (Less Lethal)" + id = "astrilka310_rubber" + build_type = AUTOLATHE + materials = list( + /datum/material/iron = HALF_SHEET_MATERIAL_AMOUNT, + ) + build_path = /obj/item/ammo_casing/strilka310/rubber + category = list( + RND_CATEGORY_HACKED, + RND_CATEGORY_WEAPONS + RND_SUBCATEGORY_WEAPONS_AMMO, + ) diff --git a/modular_nova/modules/modular_weapons/code/ballistic_master.dm b/modular_nova/modules/modular_weapons/code/overrides/ballistic_master.dm similarity index 98% rename from modular_nova/modules/modular_weapons/code/ballistic_master.dm rename to modular_nova/modules/modular_weapons/code/overrides/ballistic_master.dm index fbb4ab76f56..0ede4607288 100644 --- a/modular_nova/modules/modular_weapons/code/ballistic_master.dm +++ b/modular_nova/modules/modular_weapons/code/overrides/ballistic_master.dm @@ -28,7 +28,7 @@ to_chat(user, span_notice("You load [num_loaded] [cartridge_wording]\s into [src][box_load ? ", but it takes some extra effort" : ""].")) /obj/effect/temp_visual/dir_setting/firing_effect - light_system = MOVABLE_LIGHT + light_system = OVERLAY_LIGHT light_range = 2 light_power = 1 light_color = LIGHT_COLOR_FIRE diff --git a/modular_nova/modules/modular_weapons/code/energy.dm b/modular_nova/modules/modular_weapons/code/overrides/energy.dm similarity index 100% rename from modular_nova/modules/modular_weapons/code/energy.dm rename to modular_nova/modules/modular_weapons/code/overrides/energy.dm diff --git a/modular_nova/modules/modular_weapons/code/suppressor_size_change_override.dm b/modular_nova/modules/modular_weapons/code/overrides/suppressor_size_change_override.dm similarity index 100% rename from modular_nova/modules/modular_weapons/code/suppressor_size_change_override.dm rename to modular_nova/modules/modular_weapons/code/overrides/suppressor_size_change_override.dm diff --git a/modular_nova/modules/modular_weapons/icons/gun_rack.dmi b/modular_nova/modules/modular_weapons/icons/gun_rack.dmi new file mode 100644 index 00000000000..d0c4f0c96fd Binary files /dev/null and b/modular_nova/modules/modular_weapons/icons/gun_rack.dmi differ diff --git a/modular_nova/modules/modular_weapons/icons/mob/company_and_or_faction_based/saibasan/guns_lefthand.dmi b/modular_nova/modules/modular_weapons/icons/mob/company_and_or_faction_based/saibasan/guns_lefthand.dmi new file mode 100644 index 00000000000..2f83f957b72 Binary files /dev/null and b/modular_nova/modules/modular_weapons/icons/mob/company_and_or_faction_based/saibasan/guns_lefthand.dmi differ diff --git a/modular_nova/modules/modular_weapons/icons/mob/company_and_or_faction_based/saibasan/guns_righthand.dmi b/modular_nova/modules/modular_weapons/icons/mob/company_and_or_faction_based/saibasan/guns_righthand.dmi new file mode 100644 index 00000000000..55af184f1a3 Binary files /dev/null and b/modular_nova/modules/modular_weapons/icons/mob/company_and_or_faction_based/saibasan/guns_righthand.dmi differ diff --git a/modular_nova/modules/modular_weapons/icons/mob/company_and_or_faction_based/saibasan/guns_worn.dmi b/modular_nova/modules/modular_weapons/icons/mob/company_and_or_faction_based/saibasan/guns_worn.dmi new file mode 100644 index 00000000000..c74c2eafb25 Binary files /dev/null and b/modular_nova/modules/modular_weapons/icons/mob/company_and_or_faction_based/saibasan/guns_worn.dmi differ diff --git a/modular_nova/modules/modular_weapons/icons/obj/company_and_or_faction_based/saibasan/guns32x.dmi b/modular_nova/modules/modular_weapons/icons/obj/company_and_or_faction_based/saibasan/guns32x.dmi new file mode 100644 index 00000000000..f4660689ae4 Binary files /dev/null and b/modular_nova/modules/modular_weapons/icons/obj/company_and_or_faction_based/saibasan/guns32x.dmi differ diff --git a/modular_nova/modules/modular_weapons/icons/obj/company_and_or_faction_based/saibasan/guns48x.dmi b/modular_nova/modules/modular_weapons/icons/obj/company_and_or_faction_based/saibasan/guns48x.dmi new file mode 100644 index 00000000000..e7e5c519f71 Binary files /dev/null and b/modular_nova/modules/modular_weapons/icons/obj/company_and_or_faction_based/saibasan/guns48x.dmi differ diff --git a/modular_nova/modules/modular_weapons/icons/obj/company_and_or_faction_based/saibasan/projectiles.dmi b/modular_nova/modules/modular_weapons/icons/obj/company_and_or_faction_based/saibasan/projectiles.dmi new file mode 100644 index 00000000000..0a871ca1720 Binary files /dev/null and b/modular_nova/modules/modular_weapons/icons/obj/company_and_or_faction_based/saibasan/projectiles.dmi differ diff --git a/modular_nova/modules/microfusion/sound/burn.ogg b/modular_nova/modules/modular_weapons/sounds/laser_firing/burn.ogg similarity index 100% rename from modular_nova/modules/microfusion/sound/burn.ogg rename to modular_nova/modules/modular_weapons/sounds/laser_firing/burn.ogg diff --git a/modular_nova/modules/microfusion/sound/incinerate.ogg b/modular_nova/modules/modular_weapons/sounds/laser_firing/incinerate.ogg similarity index 100% rename from modular_nova/modules/microfusion/sound/incinerate.ogg rename to modular_nova/modules/modular_weapons/sounds/laser_firing/incinerate.ogg diff --git a/modular_nova/modules/microfusion/sound/laser_1.ogg b/modular_nova/modules/modular_weapons/sounds/laser_firing/laser.ogg similarity index 100% rename from modular_nova/modules/microfusion/sound/laser_1.ogg rename to modular_nova/modules/modular_weapons/sounds/laser_firing/laser.ogg diff --git a/modular_nova/modules/microfusion/sound/melt.ogg b/modular_nova/modules/modular_weapons/sounds/laser_firing/melt.ogg similarity index 100% rename from modular_nova/modules/microfusion/sound/melt.ogg rename to modular_nova/modules/modular_weapons/sounds/laser_firing/melt.ogg diff --git a/modular_nova/modules/microfusion/sound/vaporize.ogg b/modular_nova/modules/modular_weapons/sounds/laser_firing/vaporize.ogg similarity index 100% rename from modular_nova/modules/microfusion/sound/vaporize.ogg rename to modular_nova/modules/modular_weapons/sounds/laser_firing/vaporize.ogg diff --git a/modular_nova/modules/mold/code/mold_event.dm b/modular_nova/modules/mold/code/mold_event.dm index 7c8f32caff0..8c97b8328b0 100644 --- a/modular_nova/modules/mold/code/mold_event.dm +++ b/modular_nova/modules/mold/code/mold_event.dm @@ -48,17 +48,18 @@ if(!is_type_in_typecache(checked_area, possible_spawn_areas)) continue - for(var/turf/open/floor in checked_area.get_contained_turfs()) - if(isopenspaceturf(floor)) - continue + for(var/list/zlevel_turfs as anything in checked_area.get_zlevel_turf_lists()) + for(var/turf/open/floor in zlevel_turfs) + if(isopenspaceturf(floor)) + continue - if(!floor.Enter(test_resin)) - continue + if(!floor.Enter(test_resin)) + continue - if(locate(/turf/closed) in range(2, floor)) - continue + if(locate(/turf/closed) in range(2, floor)) + continue - turfs += floor + turfs += floor qdel(test_resin) diff --git a/modular_nova/modules/mold/code/mold_mobs.dm b/modular_nova/modules/mold/code/mold_mobs.dm index 0c9f401aeb8..bd8f24794c9 100644 --- a/modular_nova/modules/mold/code/mold_mobs.dm +++ b/modular_nova/modules/mold/code/mold_mobs.dm @@ -48,7 +48,7 @@ gold_core_spawnable = HOSTILE_SPAWN death_message = "evaporates!" - light_system = MOVABLE_LIGHT + light_system = OVERLAY_LIGHT light_color = LIGHT_COLOR_FIRE light_range = 2 light_power = 1 @@ -252,7 +252,7 @@ obj_damage = 40 attack_sound = 'sound/effects/wounds/crackandbleed.ogg' - light_system = MOVABLE_LIGHT + light_system = OVERLAY_LIGHT light_range = 2 light_power = 1 light_color = LIGHT_COLOR_GREEN diff --git a/modular_nova/modules/mold/code/mold_structures.dm b/modular_nova/modules/mold/code/mold_structures.dm index 243f5e173ac..587afbd0ace 100644 --- a/modular_nova/modules/mold/code/mold_structures.dm +++ b/modular_nova/modules/mold/code/mold_structures.dm @@ -380,7 +380,13 @@ /obj/structure/mold/structure/spawner/Initialize(mapload) . = ..() - AddComponent(/datum/component/spawner, mold_type.mob_types, mold_type.spawn_cooldown, mold_type.max_spawns, list(FACTION_MOLD), "emerges from") + AddComponent(/datum/component/spawner, \ + spawn_types = mold_type.mob_types, \ + spawn_time = mold_type.spawn_cooldown, \ + max_spawned = mold_type.max_spawns, \ + faction = list(FACTION_MOLD), \ + spawn_text = "emerges from", \ + ) #undef CORE_RETALIATION_COOLDOWN #undef MOLD_BULB_ALPHA diff --git a/modular_nova/modules/multicellcharger/code/multi_cell_charger.dm b/modular_nova/modules/multicellcharger/code/multi_cell_charger.dm index fc984e7aa97..e991087fb39 100644 --- a/modular_nova/modules/multicellcharger/code/multi_cell_charger.dm +++ b/modular_nova/modules/multicellcharger/code/multi_cell_charger.dm @@ -133,7 +133,7 @@ for(var/obj/item/stock_parts/cell/charging in charging_batteries) charging.emp_act(severity) -/obj/machinery/cell_charger_multi/deconstruct() +/obj/machinery/cell_charger_multi/on_deconstruction(disassembled) for(var/obj/item/stock_parts/cell/charging in charging_batteries) charging.forceMove(drop_location()) charging_batteries = null diff --git a/modular_nova/modules/novaya_ert/code/advanced_choice_beacon.dm b/modular_nova/modules/novaya_ert/code/advanced_choice_beacon.dm index 3e35700096d..57925d8edde 100644 --- a/modular_nova/modules/novaya_ert/code/advanced_choice_beacon.dm +++ b/modular_nova/modules/novaya_ert/code/advanced_choice_beacon.dm @@ -206,12 +206,12 @@ new /obj/item/ammo_box/magazine/mmg_box(src) new /obj/item/ammo_box/magazine/mmg_box(src) new /obj/item/ammo_box/magazine/mmg_box(src) - new /obj/item/minespawner/explosive(src) - new /obj/item/minespawner/explosive(src) - new /obj/item/minespawner/explosive(src) - new /obj/item/minespawner/explosive(src) - new /obj/item/minespawner/explosive(src) - new /obj/item/minespawner/explosive(src) + new /obj/item/minespawner/ancient_milsim(src) + new /obj/item/minespawner/ancient_milsim(src) + new /obj/item/minespawner/ancient_milsim(src) + new /obj/item/minespawner/ancient_milsim(src) + new /obj/item/minespawner/ancient_milsim(src) + new /obj/item/minespawner/ancient_milsim(src) new /obj/item/grenade/frag(src) new /obj/item/grenade/frag(src) new /obj/item/grenade/frag(src) diff --git a/modular_nova/modules/novaya_ert/code/head.dm b/modular_nova/modules/novaya_ert/code/head.dm index 4eeb355f55b..2e6a605a30c 100644 --- a/modular_nova/modules/novaya_ert/code/head.dm +++ b/modular_nova/modules/novaya_ert/code/head.dm @@ -12,39 +12,3 @@ fire = 20 acid = 50 wound = 20 - -/obj/item/clothing/head/helmet/space/hev_suit/nri - name = "\improper VOSKHOD powered combat armor helmet" - desc = "A composite graphene-plasteel helmet with a ballistic nylon inner padding, complete with a deployable airtight polycarbonate visor and respirator system. 'НРИ - Оборонная Коллегия' is imprinted on the back." - icon = 'modular_nova/master_files/icons/obj/clothing/head/helmet.dmi' - worn_icon = 'modular_nova/master_files/icons/mob/clothing/head/helmet.dmi' - worn_icon_digi = 'modular_nova/master_files/icons/mob/clothing/head_muzzled.dmi' - worn_icon_teshari = 'modular_nova/master_files/icons/mob/clothing/species/teshari/head.dmi' - icon_state = "nri_soldier" - armor_type = /datum/armor/hev_suit_nri - flags_inv = HIDEMASK|HIDEEARS|HIDEEYES|HIDEFACE|HIDEHAIR|HIDEFACIALHAIR|HIDESNOUT - obj_flags = null - supports_variations_flags = CLOTHING_SNOUTED_VARIATION - resistance_flags = FIRE_PROOF|UNACIDABLE|ACID_PROOF|FREEZE_PROOF - clothing_flags = STOPSPRESSUREDAMAGE|SNUG_FIT|BLOCK_GAS_SMOKE_EFFECT - clothing_traits = null - flags_cover = HEADCOVERSEYES | HEADCOVERSMOUTH | PEPPERPROOF - flash_protect = FLASH_PROTECTION_WELDER - visor_flags_inv = HIDEMASK|HIDEEYES|HIDEFACE|HIDEFACIALHAIR - visor_flags = STOPSPRESSUREDAMAGE - slowdown = 0 - -/obj/item/clothing/head/helmet/space/hev_suit/nri/captain - name = "\improper VOSKHOD-2 powered combat armor helmet" - desc = "A black composite polyurea coated graphene-plastitanium helmet with durathread inner padding, complete with a deployable airtight tinted plasmaglass visor and a kevlar-lined respirator system. 'НРИ - Оборонная Коллегия' is imprinted on the back." - icon_state = "nri_captain" - -/obj/item/clothing/head/helmet/space/hev_suit/nri/medic - name = "\improper VOSKHOD-KH powered combat armor helmet" - desc = "A combat medic's composite graphene-titanium helmet with bio-resistant padding, complete with a deployable airtight polycarbonate visor and optimized respirator system. 'НРИ - Оборонная Коллегия' is imprinted on the back." - icon_state = "nri_medic" - -/obj/item/clothing/head/helmet/space/hev_suit/nri/engineer - name = "\improper VOSKHOD-IN powered combat armor helmet" - desc = "A composite tungsten-plasteel helmet with a lead-lined ballistic nylon inner padding, complete with a deployable airtight polycarbonate visor and respirator system. 'НРИ - Оборонная Коллегия' is imprinted on the back." - icon_state = "nri_engineer" diff --git a/modular_nova/modules/novaya_ert/code/mod_suit.dm b/modular_nova/modules/novaya_ert/code/mod_suit.dm index 5bfd94429b8..850f63b74d8 100644 --- a/modular_nova/modules/novaya_ert/code/mod_suit.dm +++ b/modular_nova/modules/novaya_ert/code/mod_suit.dm @@ -250,7 +250,7 @@ var/new_fireloss = mod.wearer.getFireLoss() var/new_toxloss = mod.wearer.getToxLoss() var/new_stamloss = mod.wearer.getStaminaLoss() - playsound(mod.wearer, 'modular_nova/modules/hev_suit/sound/hev/hiss.ogg', 100) + playsound(mod.wearer, 'sound/machines/steam_hiss.ogg', 40) if(new_bruteloss) mod.wearer.reagents.add_reagent(/datum/reagent/medicine/mine_salve, 10) diff --git a/modular_nova/modules/novaya_ert/code/shield.dm b/modular_nova/modules/novaya_ert/code/shield.dm index d9ab321b40d..674d73f3dab 100644 --- a/modular_nova/modules/novaya_ert/code/shield.dm +++ b/modular_nova/modules/novaya_ert/code/shield.dm @@ -6,11 +6,7 @@ lefthand_file = 'modular_nova/modules/novaya_ert/icons/riot_left.dmi' righthand_file = 'modular_nova/modules/novaya_ert/icons/riot_right.dmi' transparent = FALSE - -/obj/item/shield/riot/pointman/nri/shatter(mob/living/carbon/human/owner) - playsound(owner, 'sound/effects/glassbr3.ogg', 100) - new /obj/item/corpsman_broken((get_turf(src))) - + shield_break_leftover = /obj/item/corpsman_broken /obj/item/corpsman_broken name = "broken corpsman shield" diff --git a/modular_nova/modules/novaya_ert/code/suit.dm b/modular_nova/modules/novaya_ert/code/suit.dm deleted file mode 100644 index e6586ffb678..00000000000 --- a/modular_nova/modules/novaya_ert/code/suit.dm +++ /dev/null @@ -1,94 +0,0 @@ -#define NRI_POWERUSE_HIT 100 -#define NRI_POWERUSE_HEAL 150 - -#define NRI_COOLDOWN_HEAL (10 SECONDS) -#define NRI_COOLDOWN_RADS (20 SECONDS) -#define NRI_COOLDOWN_ACID (20 SECONDS) - -#define NRI_HEAL_AMOUNT 10 -#define NRI_BLOOD_REPLENISHMENT 20 - -/obj/item/clothing/suit/space/hev_suit/nri - name = "\improper VOSKHOD powered combat armor" - desc = "A hybrid set of space-resistant armor built on a modified mass-produced Nomex-Aerogel flight suit, polyurea coated durathread-lined light plasteel plates hinder mobility as little as possible while the onboard life support system aids the user in combat. The power cell is what makes the armor work without hassle, a sticker in the power supply unit warns anyone reading to responsibly manage battery levels." - icon = 'modular_nova/master_files/icons/obj/clothing/suits/spacesuit.dmi' - worn_icon = 'modular_nova/master_files/icons/mob/clothing/suits/spacesuit.dmi' - worn_icon_digi = 'modular_nova/master_files/icons/mob/clothing/suits/spacesuit_digi.dmi' - worn_icon_teshari = 'modular_nova/master_files/icons/mob/clothing/species/teshari/suit.dmi' - icon_state = "nri_soldier" - armor_type = /datum/armor/hev_suit_nri - flags_inv = HIDEGLOVES|HIDESHOES|HIDEJUMPSUIT|HIDESEXTOY|HIDETAIL - allowed = list(/obj/item/gun, /obj/item/ammo_box,/obj/item/ammo_casing, /obj/item/melee/baton, /obj/item/melee/energy/sword, /obj/item/restraints/handcuffs, /obj/item/tank/internals) - cell = /obj/item/stock_parts/cell/bluespace - actions_types = list(/datum/action/item_action/hev_toggle/nri, /datum/action/item_action/hev_toggle_notifs/nri, /datum/action/item_action/toggle_spacesuit) - resistance_flags = FIRE_PROOF|UNACIDABLE|ACID_PROOF|FREEZE_PROOF - clothing_flags = STOPSPRESSUREDAMAGE|SNUG_FIT|BLOCKS_SHOVE_KNOCKDOWN - - activation_song = null //No nice song. - - radio_channel = RADIO_CHANNEL_CENTCOM - - armor_unpowered = /datum/armor/hev_suit_nri - armor_powered = /datum/armor/hev_suit_nri/powered - heal_amount = NRI_HEAL_AMOUNT - blood_replenishment = NRI_BLOOD_REPLENISHMENT - health_static_cooldown = NRI_COOLDOWN_HEAL - rads_static_cooldown = NRI_COOLDOWN_RADS - acid_static_cooldown = NRI_COOLDOWN_ACID - suit_name = "VOSKHOD" - first_use = FALSE //No nice song. - - - -/datum/armor/hev_suit_nri - melee = 25 - bullet = 25 - laser = 25 - energy = 25 - bomb = 25 - bio = 25 - fire = 30 - acid = 30 - wound = 30 - consume = 10 - -/datum/armor/hev_suit_nri/powered - melee = 40 - bullet = 50 - laser = 30 - energy = 40 - bomb = 60 - bio = 75 - fire = 50 - acid = 50 - wound = 50 - consume = 40 - -/datum/action/item_action/hev_toggle/nri - name = "Toggle VOSKHOD Suit" - button_icon = 'modular_nova/modules/novaya_ert/icons/toggles.dmi' - background_icon_state = "bg_nri" - button_icon = 'modular_nova/modules/novaya_ert/icons/toggles.dmi' - button_icon_state = "toggle" - -/datum/action/item_action/hev_toggle_notifs/nri - name = "Toggle VOSKHOD Suit Notifications" - button_icon = 'modular_nova/modules/novaya_ert/icons/toggles.dmi' - background_icon_state = "bg_nri" - button_icon = 'modular_nova/modules/novaya_ert/icons/toggles.dmi' - button_icon_state = "sound" - -/obj/item/clothing/suit/space/hev_suit/nri/captain - name = "\improper VOSKHOD-2 powered combat armor" - desc = "A unique hybrid set of space-resistant armor made for high-ranking NRI operatives, built on a proprietary durathread padded, Akulan made Larr'Takh silk utility uniform. Polyurea coated hexagraphene-lined plastitanium plates hinder mobility as little as possible while the onboard life support system aids the user in combat. The power cell is what makes the armor work without hassle, a sticker in the power supply unit warns anyone reading to responsibly manage battery levels." - icon_state = "nri_captain" - -/obj/item/clothing/suit/space/hev_suit/nri/medic - name = "\improper VOSKHOD-KH powered combat armor" - desc = "A hybrid set of space-resistant armor built on a modified mass-produced Dipolyester-Aerogel surgeon field jumpsuit, polyurea coated titanium plates hinder mobility as little as possible while the onboard life support system aids the user in combat and provides additional medical functions. The power cell is what makes the armor work without hassle, a sticker in the power supply unit warns anyone reading to responsibly manage battery levels." - icon_state = "nri_medic" - -/obj/item/clothing/suit/space/hev_suit/nri/engineer - name = "\improper VOSKHOD-IN powered combat armor" - desc = "A hybrid set of space-resistant armor built on a modified Nanotrasen heavy-duty engineering undersuit, polyurea coated lead-lined light plasteel plates hinder mobility as little as possible and offer additional radiation protection while the onboard life support system aids the user in combat. The power cell is what makes the armor work without hassle, a sticker in the power supply unit warns anyone reading to responsibly manage battery levels." - icon_state = "nri_engineer" diff --git a/modular_nova/modules/opposing_force/code/equipment/clothing.dm b/modular_nova/modules/opposing_force/code/equipment/clothing.dm index 95466b52fe2..d055d5d3590 100644 --- a/modular_nova/modules/opposing_force/code/equipment/clothing.dm +++ b/modular_nova/modules/opposing_force/code/equipment/clothing.dm @@ -123,14 +123,13 @@ /datum/opposing_force_equipment/clothing_sol/sol_militant name = "Sol Militant" description = "There is a war being fought, and its taking place right here." - admin_note = "Uniquely strong power armour." item_type = /obj/item/storage/backpack/ert/odst/hecu/sol_militant /obj/item/storage/backpack/ert/odst/hecu/sol_militant/PopulateContents() - new /obj/item/clothing/under/rank/security/officer/hecu(src) - new /obj/item/clothing/suit/space/hev_suit/pcv(src) - new /obj/item/clothing/head/helmet/space/hev_suit/pcv(src) - new /obj/item/storage/belt/military/assault/hecu(src) + new /obj/item/clothing/under/sol_peacekeeper(src) + new /obj/item/clothing/suit/armor/sf_peacekeeper(src) + new /obj/item/clothing/head/helmet/sf_peacekeeper(src) + new /obj/item/storage/belt/military/assault(src) new /obj/item/clothing/mask/gas/hecu2(src) new /obj/item/clothing/shoes/combat(src) new /obj/item/clothing/gloves/combat(src) diff --git a/modular_nova/modules/organs/code/tongue.dm b/modular_nova/modules/organs/code/tongue.dm index c803bfc90c9..593211a652c 100644 --- a/modular_nova/modules/organs/code/tongue.dm +++ b/modular_nova/modules/organs/code/tongue.dm @@ -54,6 +54,39 @@ /obj/item/organ/internal/tongue/human say_mod = "says" +/obj/item/organ/internal/tongue/lizard/robot + name = "robotic lizard voicebox" + desc = "A lizard-like voice synthesizer that can interface with organic lifeforms." + organ_flags = ORGAN_ROBOTIC | ORGAN_SYNTHETIC_FROM_SPECIES + icon_state = "tonguerobot" + say_mod = "hizzes" + attack_verb_continuous = list("beeps", "boops") + attack_verb_simple = list("beep", "boop") + modifies_speech = TRUE + taste_sensitivity = 25 // not as good as an organic tongue + liked_foodtypes = NONE + disliked_foodtypes = NONE + voice_filter = "alimiter=0.9,acompressor=threshold=0.2:ratio=20:attack=10:release=50:makeup=2,highpass=f=1000" + +/obj/item/organ/internal/tongue/lizard/robot/can_speak_language(language) + return TRUE // THE MAGIC OF ELECTRONICS + +/obj/item/organ/internal/tongue/lizard/robot/modify_speech(datum/source, list/speech_args) + . = ..() + speech_args[SPEECH_SPANS] |= SPAN_ROBOT + +/obj/item/organ/internal/tongue/lizard/cybernetic + name = "forked cybernetic tongue" + icon = 'modular_nova/modules/organs/icons/cyber_tongue.dmi' + icon_state = "cybertongue-lizard" + desc = "A fully-functional forked synthetic tongue, encased in soft silicone. Features include high-resolution vocals and taste receptors." + organ_flags = ORGAN_ROBOTIC | ORGAN_SYNTHETIC_FROM_SPECIES + // Not as good as organic tongues, not as bad as the robotic voicebox. + taste_sensitivity = 20 + liked_foodtypes = NONE + disliked_foodtypes = NONE + modifies_speech = TRUE + /obj/item/organ/internal/tongue/cybernetic name = "cybernetic tongue" icon = 'modular_nova/modules/organs/icons/cyber_tongue.dmi' @@ -63,6 +96,8 @@ say_mod = "says" // Not as good as organic tongues, not as bad as the robotic voicebox. taste_sensitivity = 20 + liked_foodtypes = NONE + disliked_foodtypes = NONE /obj/item/organ/internal/tongue/vox name = "vox tongue" diff --git a/modular_nova/modules/organs/icons/cyber_tongue.dmi b/modular_nova/modules/organs/icons/cyber_tongue.dmi index 961aeb14f26..f2442fda533 100644 Binary files a/modular_nova/modules/organs/icons/cyber_tongue.dmi and b/modular_nova/modules/organs/icons/cyber_tongue.dmi differ diff --git a/modular_nova/modules/organs/icons/snail_eyes.dmi b/modular_nova/modules/organs/icons/snail_eyes.dmi index f916f09daea..aae11d7d5c9 100644 Binary files a/modular_nova/modules/organs/icons/snail_eyes.dmi and b/modular_nova/modules/organs/icons/snail_eyes.dmi differ diff --git a/modular_nova/modules/primitive_catgirls/code/clothing.dm b/modular_nova/modules/primitive_catgirls/code/clothing.dm index 04f25669403..cf503048021 100644 --- a/modular_nova/modules/primitive_catgirls/code/clothing.dm +++ b/modular_nova/modules/primitive_catgirls/code/clothing.dm @@ -28,6 +28,19 @@ flags_1 = IS_PLAYER_COLORABLE_1 has_sensor = FALSE +/obj/item/clothing/under/dress/skirt/primitive_catgirl_tailored_dress + name = "tailored dress" + desc = "A handmade dress, tailored to one's" + icon_state = "tailored_dress" + icon = 'modular_nova/modules/primitive_catgirls/icons/clothing_greyscale.dmi' + worn_icon = 'modular_nova/modules/primitive_catgirls/icons/clothing_greyscale.dmi' + body_parts_covered = GROIN|CHEST + greyscale_config = /datum/greyscale_config/primitive_catgirl_tailored_dress + greyscale_config_worn = /datum/greyscale_config/primitive_catgirl_tailored_dress/worn + greyscale_colors = "#cec8bf#364660" + flags_1 = IS_PLAYER_COLORABLE_1 + has_sensor = FALSE + // Hands /obj/item/clothing/gloves/fingerless/primitive_catgirl_armwraps @@ -71,6 +84,21 @@ greyscale_colors = "#594032#cec8bf" flags_1 = IS_PLAYER_COLORABLE_1 +/obj/item/clothing/suit/jacket/primitive_catgirl_tunic + name = "handmade tunic" + desc = "A simple garment, that reaches from the shoulders to above the knee. This one has a belt to secure it." + icon_state = "tunic" + icon = 'modular_nova/modules/primitive_catgirls/icons/clothing_greyscale.dmi' + worn_icon = 'modular_nova/modules/primitive_catgirls/icons/clothing_greyscale.dmi' + body_parts_covered = CHEST + cold_protection = CHEST + min_cold_protection_temperature = FIRE_SUIT_MIN_TEMP_PROTECT + supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION_NO_NEW_ICON + greyscale_config = /datum/greyscale_config/primitive_catgirl_tunic + greyscale_config_worn = /datum/greyscale_config/primitive_catgirl_tunic/worn + greyscale_colors = "#cec8bf#faece4#594032" + flags_1 = IS_PLAYER_COLORABLE_1 + /obj/item/clothing/suit/apron/chef/colorable_apron/primitive_catgirl_leather greyscale_colors = "#594032" @@ -132,6 +160,19 @@ /obj/item/clothing/head/standalone_hood/primitive_catgirl_colors greyscale_colors = "#594032#364660" +/obj/item/clothing/head/primitive_catgirl_ferroniere + name = "Ferroniere" + desc = "A style of headband that encircles the wearer's forehead, with a small jewel suspended in the centre." + icon_state = "ferroniere" + icon = 'modular_nova/modules/primitive_catgirls/icons/clothing_greyscale.dmi' + worn_icon = 'modular_nova/modules/primitive_catgirls/icons/clothing_greyscale.dmi' + greyscale_config = /datum/greyscale_config/primitive_catgirl_ferroniere + greyscale_config_worn = /datum/greyscale_config/primitive_catgirl_ferroniere/worn + greyscale_colors = "#f1f6ff#364660" + w_class = WEIGHT_CLASS_TINY + flags_1 = IS_PLAYER_COLORABLE_1 + actions_types = list(/datum/action/item_action/adjust) + // Misc Items /obj/item/forging/reagent_weapon/axe/fake_copper diff --git a/modular_nova/modules/primitive_catgirls/code/clothing_vendor.dm b/modular_nova/modules/primitive_catgirls/code/clothing_vendor.dm index 2f786daf0ac..52193a5466c 100644 --- a/modular_nova/modules/primitive_catgirls/code/clothing_vendor.dm +++ b/modular_nova/modules/primitive_catgirls/code/clothing_vendor.dm @@ -11,7 +11,9 @@ products = list( /obj/item/clothing/under/dress/skirt/primitive_catgirl_body_wraps = 15, + /obj/item/clothing/under/dress/skirt/primitive_catgirl_tailored_dress = 15, /obj/item/clothing/suit/jacket/primitive_catgirl_coat = 15, + /obj/item/clothing/suit/jacket/primitive_catgirl_tunic = 15, /obj/item/clothing/gloves/fingerless/primitive_catgirl_armwraps = 15, /obj/item/clothing/shoes/winterboots/ice_boots/primitive_catgirl_boots = 15, /obj/item/clothing/gloves/fingerless/primitive_catgirl_gauntlets = 10, @@ -24,7 +26,9 @@ /obj/item/clothing/neck/infinity_scarf/primitive_catgirl_blue = 5, /obj/item/clothing/neck/mantle/recolorable/primitive_catgirl_off_white = 5, /obj/item/clothing/neck/ranger_poncho/primitive_catgirl_leather = 5, + /obj/item/clothing/neck/wide_cape = 5, /obj/item/clothing/glasses/eyepatch/wrap = 5, + /obj/item/clothing/head/primitive_catgirl_ferroniere = 5, /obj/item/clothing/head/pelt/snow_tiger = 5, /obj/item/clothing/head/pelt = 5, /obj/item/clothing/head/pelt/black = 5, diff --git a/modular_nova/modules/primitive_catgirls/code/spawner.dm b/modular_nova/modules/primitive_catgirls/code/spawner.dm index 3bed64d3935..fc75e53354d 100644 --- a/modular_nova/modules/primitive_catgirls/code/spawner.dm +++ b/modular_nova/modules/primitive_catgirls/code/spawner.dm @@ -22,9 +22,13 @@ quirks_enabled = TRUE random_appearance = FALSE loadout_enabled = FALSE - uses = 9 + uses = 12 deletes_on_zero_uses_left = FALSE + /// The minimum time someone needs to be SSD before they can be put back in + var/ssd_time = 30 MINUTES + + /obj/effect/mob_spawn/ghost_role/human/primitive_catgirl/Initialize(mapload) . = ..() team = new /datum/team/primitive_catgirls() @@ -52,7 +56,7 @@ to_chat(user, span_warning("It'd be weird if there were multiple of you in that cave, wouldn't it?")) return FALSE -// This stuff is put on equip because it turns out /special sometimes just don't get called because skyrat +// This stuff is put on equip because it turns out /special sometimes just don't get called because Nova /obj/effect/mob_spawn/ghost_role/human/primitive_catgirl/equip(mob/living/carbon/human/spawned_human) . = ..() @@ -60,6 +64,129 @@ team.players_spawned += (spawned_human.key) + +/obj/effect/mob_spawn/ghost_role/human/primitive_catgirl/MouseDrop_T(mob/living/carbon/human/target, mob/living/user) + if(!isprimitivedemihuman(target) || !can_interact(user) || !target.Adjacent(user) || target.buckled) + return + + if(target.stat == DEAD) + to_chat(user, span_danger("Dead kin cannot be put back to sleep.")) + return + + if(target.key && target != user) + if(!target.get_organ_by_type(/obj/item/organ/internal/brain) || (target.mind && !target.ssd_indicator)) + to_chat(user, span_danger("Awake kin cannot be put back to sleep against their will.")) + return + + if(target.lastclienttime + ssd_time >= world.time) + to_chat(user, span_userdanger("You can't put [target] into [src] for another [round(((ssd_time - (world.time - target.lastclienttime)) / (1 MINUTES)), 1)] minutes.")) + log_admin("[key_name(user)] has attempted to put [key_name(target)] back into [src], but they were only disconnected for [round(((world.time - target.lastclienttime) / (1 MINUTES)), 1)] minutes.") + message_admins("[key_name(user)] has attempted to put [key_name(target)] back into [src]. [ADMIN_JMP(src)]") + return + + else if(tgui_alert(user, "Would you like to place [target] into [src]?", "Put back to sleep?", list("Yes", "No")) == "Yes") + + visible_message(span_infoplain("[user] starts putting [target] into [src]...")) + + if(!do_after(user, 3 SECONDS, target)) + balloon_alert("cancelled transfer!") + return + + to_chat(user, span_danger("You put [target] into [src].")) + log_admin("[key_name(user)] has put [key_name(target)] back into [src].") + message_admins("[key_name(user)] has put [key_name(target)] back into [src]. [ADMIN_JMP(src)]") + + if(target == user) + if(tgui_alert(target, "Would you like to go back to sleep?", "Go back to sleep?", list("Yes", "No")) != "Yes") + return + + visible_message(span_infoplain("[user] starts climbing down into [src]...")) + + if(!do_after(user, 3 SECONDS, target)) + balloon_alert("cancelled transfer!") + return + + if(LAZYLEN(target.buckled_mobs) > 0) + if(target == user) + to_chat(user, span_danger("You can't fit into [src] while someone is buckled to you.")) + else + to_chat(user, span_danger("You can't fit [target] into [src] while someone is buckled to them.")) + + return + + // Just in case something happened in-between, to make sure it doesn't do unexpected behaviors. + if(!isprimitivedemihuman(target) || !can_interact(user) || !target.Adjacent(user) || target.buckled || target.stat == DEAD) + return + + if(target == user) + visible_message(span_infoplain("[user] climbs down into [src].")) + else + visible_message(span_infoplain("[user] puts [target] into [src].")) + + log_admin("[key_name(target)] returned to [src].") + message_admins("[key_name_admin(target)] returned to [src]. [ADMIN_JMP(src)]") + add_fingerprint(target) + put_back_in(target) + + +/** + * Puts the target back into the spawner, effectively qdel'ing them after + * stripping them of all their items, and finishes by adding back a use to the + * spawner. + */ +/obj/effect/mob_spawn/ghost_role/human/primitive_catgirl/proc/put_back_in(mob/living/carbon/human/target) + if(!istype(target)) + return + + // We don't want to constantly drop stuff that they spawn with. + var/static/list/item_drop_blacklist + if(!item_drop_blacklist) + item_drop_blacklist = generate_item_drop_blacklist() + + for(var/obj/item/item in target) + if(item_drop_blacklist[item.type] || (item.item_flags & ABSTRACT) || HAS_TRAIT(item, TRAIT_NODROP)) + continue + + target.dropItemToGround(item, FALSE) + + // We make sure people can come back in again, if they needed to fix prefs + // or whatever. + team.players_spawned -= (target.key) + team.remove_member(target.mind) + + for(var/list/record in GLOB.ghost_records) + if(record["name"] == target.real_name) + GLOB.ghost_records.Remove(list(record)) + break + + // Just so the target's ghost ends up above the hole. + target.forceMove(loc) + target.ghostize(FALSE) + + qdel(target) + + uses += 1 + + +/** + * Simple helper to generate the item drop blacklist based on the spawner's + * outfit, only taking the used slots into account. + */ +/obj/effect/mob_spawn/ghost_role/human/primitive_catgirl/proc/generate_item_drop_blacklist() + PROTECTED_PROC(TRUE) + + var/list/blacklist = list() + + blacklist[initial(outfit.uniform)] = TRUE + blacklist[initial(outfit.shoes)] = TRUE + blacklist[initial(outfit.gloves)] = TRUE + blacklist[initial(outfit.suit)] = TRUE + blacklist[initial(outfit.neck)] = TRUE + blacklist[initial(outfit.back)] = TRUE + + return blacklist + + /datum/job/primitive_catgirl title = "Icemoon Dweller" diff --git a/modular_nova/modules/primitive_catgirls/icons/clothing_greyscale.dmi b/modular_nova/modules/primitive_catgirls/icons/clothing_greyscale.dmi index 624770af4d8..61d68cab4e2 100644 Binary files a/modular_nova/modules/primitive_catgirls/icons/clothing_greyscale.dmi and b/modular_nova/modules/primitive_catgirls/icons/clothing_greyscale.dmi differ diff --git a/modular_nova/modules/projectiles/icons/inhands/lefthand.dmi b/modular_nova/modules/projectiles/icons/inhands/lefthand.dmi deleted file mode 100644 index 43406149649..00000000000 Binary files a/modular_nova/modules/projectiles/icons/inhands/lefthand.dmi and /dev/null differ diff --git a/modular_nova/modules/projectiles/icons/inhands/righthand.dmi b/modular_nova/modules/projectiles/icons/inhands/righthand.dmi deleted file mode 100644 index 935f37fd05c..00000000000 Binary files a/modular_nova/modules/projectiles/icons/inhands/righthand.dmi and /dev/null differ diff --git a/modular_nova/modules/reagent_forging/code/forge.dm b/modular_nova/modules/reagent_forging/code/forge.dm index a3e2e639cbf..a52b0f9f49e 100644 --- a/modular_nova/modules/reagent_forging/code/forge.dm +++ b/modular_nova/modules/reagent_forging/code/forge.dm @@ -461,6 +461,12 @@ handle_metal_cup_melting(attacking_item, user) return TRUE + if(istype(attacking_item, /obj/item/stack/rods)) + in_use = TRUE + smelt_iron_rods(attacking_item, user) + in_use = FALSE + return TRUE + return ..() /// Take the given tray and place it inside the forge, updating everything relevant to that @@ -740,6 +746,46 @@ COOLDOWN_START(spawned_glass, remaining_heat, glassblowing_amount) spawned_glass.total_time = glassblowing_amount +/// Almost a copy from the proc smelt_ore but to smelt iron rods +/obj/structure/reagent_forge/proc/smelt_iron_rods(obj/attacking_item, mob/living/user) + + var/obj/item/stack/rods/rod_item = attacking_item + + if(!istype(rod_item)) + return + + if(forge_temperature < MIN_FORGE_TEMP) + fail_message(user, "forge too cool") + return + + var/skill_modifier = user.mind.get_skill_modifier(/datum/skill/smithing, SKILL_SPEED_MODIFIER) + + if(rod_item.amount < 2) + fail_message(user, "too few iron rods to smelt") + return + + balloon_alert_to_viewers("smelting...") + + if(!do_after(user, skill_modifier * 3 SECONDS, target = src)) + fail_message(user, "stopped smelting [rod_item]") + return + + var/src_turf = get_turf(src) + var/spawning_item = /obj/item/stack/sheet/iron + var/rods_to_sheet_amount = round((rod_item.amount / 2)) + var/used_rods = rod_item.amount + + if(ISODD(used_rods)) + used_rods = used_rods - 1 + + rod_item.use(used_rods) + var/obj/item/stack/sheet/iron/result = new spawning_item(src_turf) + + if(rods_to_sheet_amount > 1) + result.add(rods_to_sheet_amount - 1) + + balloon_alert_to_viewers("finished smelting!") + /obj/structure/reagent_forge/billow_act(mob/living/user, obj/item/tool) if(in_use) // Preventing billow use if the forge is in use to prevent spam fail_message(user, "forge busy") diff --git a/modular_nova/modules/reagent_forging/code/forge_weapons.dm b/modular_nova/modules/reagent_forging/code/forge_weapons.dm index 6546190679d..fe3124e4ec2 100644 --- a/modular_nova/modules/reagent_forging/code/forge_weapons.dm +++ b/modular_nova/modules/reagent_forging/code/forge_weapons.dm @@ -15,10 +15,11 @@ . = ..() . += span_notice("Using a hammer on [src] will repair its damage!") +//vanilla sword with no quirks, at least its good versus other melees :) /obj/item/forging/reagent_weapon/sword - name = "reagent sword" + name = "forged sword" desc = "A sharp, one-handed sword most adept at blocking opposing melee strikes." - force = 15 + force = 20 armour_penetration = 10 icon_state = "sword" inhand_icon_state = "sword" @@ -26,7 +27,7 @@ belt_icon_state = "sword_belt" hitsound = 'sound/weapons/bladeslice.ogg' throwforce = 10 - block_chance = 25 //either we make it melee block only or we don't give it too much. It's bulkly so the buckler is superior + block_chance = 25 slot_flags = ITEM_SLOT_BELT | ITEM_SLOT_BACK w_class = WEIGHT_CLASS_BULKY resistance_flags = FIRE_PROOF @@ -35,17 +36,19 @@ sharpness = SHARP_EDGED max_integrity = 150 +//katana, one which shall cut through your puny armour /obj/item/forging/reagent_weapon/katana - name = "reagent katana" + name = "forged katana" desc = "A katana sharp enough to penetrate body armor, but not quite million-times-folded sharp." - force = 15 - armour_penetration = 25 //Slices through armour like butter, but can't quite bisect a knight like the real thing. + force = 20 + armour_penetration = 25 icon_state = "katana" inhand_icon_state = "katana" worn_icon_state = "katana_back" belt_icon_state = "katana_belt" hitsound = 'sound/weapons/bladeslice.ogg' throwforce = 10 + block_chance = 20 slot_flags = ITEM_SLOT_BELT | ITEM_SLOT_BACK w_class = WEIGHT_CLASS_BULKY resistance_flags = FIRE_PROOF @@ -53,16 +56,19 @@ attack_verb_simple = list("attack", "slash", "stab", "slice", "tear", "lacerate", "rip", "dice", "cut") sharpness = SHARP_EDGED +//quirky knife that lets you click fast /obj/item/forging/reagent_weapon/dagger - name = "reagent dagger" + name = "forged dagger" desc = "A lightweight dagger with an extremely quick swing!" - force = 8 + force = 13 icon_state = "dagger" inhand_icon_state = "dagger" worn_icon_state = "dagger_back" belt_icon_state = "dagger_belt" hitsound = 'sound/weapons/bladeslice.ogg' - throwforce = 10 + throw_speed = 4 + embedding = list("pain_mult" = 2, "embed_chance" = 50, "fall_chance" = 1) + throwforce = 15 slot_flags = ITEM_SLOT_BELT | ITEM_SLOT_BACK w_class = WEIGHT_CLASS_SMALL resistance_flags = FIRE_PROOF @@ -70,12 +76,14 @@ attack_verb_simple = list("attack", "slash", "stab", "slice", "tear", "lacerate", "rip", "dice", "cut") sharpness = SHARP_EDGED +//what a cute gimmick /obj/item/forging/reagent_weapon/dagger/attack(mob/living/M, mob/living/user, params) . = ..() user.changeNext_move(CLICK_CD_RANGE) -/obj/item/forging/reagent_weapon/staff //doesn't do damage. Useful for healing reagents. - name = "reagent staff" +//this isnt a weapon... +/obj/item/forging/reagent_weapon/staff + name = "forged staff" desc = "A staff most notably capable of being imbued with reagents, especially useful alongside its otherwise harmless nature." force = 0 icon_state = "staff" @@ -88,19 +96,18 @@ attack_verb_continuous = list("bonks", "bashes", "whacks", "pokes", "prods") attack_verb_simple = list("bonk", "bash", "whack", "poke", "prod") -/obj/item/forging/reagent_weapon/staff/attack(mob/living/M, mob/living/user, params) - . = ..() - user.changeNext_move(CLICK_CD_RANGE) - +//omg, two tile range! surely i wont lose a fight now... /obj/item/forging/reagent_weapon/spear - name = "reagent spear" + name = "forged spear" desc = "A long spear that can be wielded in two hands to boost damage at the cost of single-handed versatility." - force = 10 - armour_penetration = 10 + force = 13 + armour_penetration = 15 icon_state = "spear" inhand_icon_state = "spear" worn_icon_state = "spear_back" - throwforce = 15 //not a javelin, throwing specialty is for the axe. + throwforce = 22 + throw_speed = 4 + embedding = list("pain_mult" = 6, "embed_chance" = 75, "fall_chance" = 0) slot_flags = ITEM_SLOT_BACK w_class = WEIGHT_CLASS_BULKY resistance_flags = FIRE_PROOF @@ -110,34 +117,37 @@ wound_bonus = -15 bare_wound_bonus = 15 reach = 2 - sharpness = SHARP_POINTY + sharpness = SHARP_EDGED +//this is 1:1 with the bonespear, lets use this as a 'balance anchor'. weapons that blatantly outclass this are powercrept. /obj/item/forging/reagent_weapon/spear/Initialize(mapload) . = ..() - AddComponent(/datum/component/two_handed, force_unwielded = 10, force_wielded = 17) //better than the bone spear + AddComponent(/datum/component/two_handed, force_unwielded = 13, force_wielded = 23) +//throwing weapons, what a fun gimmick. lets make them actually worth using /obj/item/forging/reagent_weapon/axe - name = "reagent axe" + name = "forged axe" desc = "An axe especially balanced for throwing and embedding into fleshy targets. Nonetheless useful as a traditional melee tool." - force = 15 + force = 13 armour_penetration = 10 icon_state = "axe" inhand_icon_state = "axe" worn_icon_state = "axe_back" - throwforce = 22 //ouch + throwforce = 18 throw_speed = 4 - embedding = list("impact_pain_mult" = 2, "remove_pain_mult" = 4, "jostle_chance" = 2.5) + embedding = list("pain_mult" = 4, "embed_chance" = 65, "fall_chance" = 10) slot_flags = ITEM_SLOT_BACK - w_class = WEIGHT_CLASS_BULKY + w_class = WEIGHT_CLASS_NORMAL resistance_flags = FIRE_PROOF attack_verb_continuous = list("slashes", "bashes") attack_verb_simple = list("slash", "bash") sharpness = SHARP_EDGED +//Boring option for doing the most raw damage /obj/item/forging/reagent_weapon/hammer - name = "reagent hammer" + name = "forged hammer" desc = "A heavy, weighted hammer that packs an incredible punch but can prove to be unwieldy. Useful for forging!" - force = 19 //strong but boring. + force = 24 //Requires wielding armour_penetration = 10 icon_state = "crush_hammer" inhand_icon_state = "crush_hammer" @@ -157,6 +167,7 @@ /obj/item/forging/reagent_weapon/hammer/Initialize(mapload) . = ..() + AddComponent(/datum/component/two_handed, force_unwielded = 24, force_wielded = 24, require_twohands = TRUE) AddElement(/datum/element/kneejerk) /obj/item/forging/reagent_weapon/hammer/attack_atom(atom/attacked_atom, mob/living/user, params) @@ -165,8 +176,8 @@ return user.changeNext_move(CLICK_CD_RAPID) -/obj/item/shield/buckler/reagent_weapon //Same as a buckler, but metal. - name = "reagent plated buckler shield" +/obj/item/shield/buckler/reagent_weapon + name = "forged buckler shield" desc = "A small, round shield best used in tandem with a melee weapon in close-quarters combat." icon = 'modular_nova/modules/reagent_forging/icons/obj/forge_items.dmi' worn_icon = 'modular_nova/modules/reagent_forging/icons/mob/forge_weapon_worn.dmi' @@ -211,7 +222,7 @@ return ..() /obj/item/shield/buckler/reagent_weapon/pavise //similar to the adamantine shield. Huge, slow, lets you soak damage and packs a wallop. - name = "reagent plated pavise shield" + name = "forged pavise shield" desc = "An oblong shield used by ancient crossbowmen as cover while reloading. Probably just as useful with an actual gun." icon_state = "pavise" inhand_icon_state = "pavise" @@ -227,14 +238,14 @@ AddComponent(/datum/component/two_handed, require_twohands = TRUE, force_wielded = 15) /obj/item/pickaxe/reagent_weapon - name = "reagent pickaxe" + name = "forged pickaxe" /obj/item/pickaxe/reagent_weapon/Initialize(mapload) . = ..() AddComponent(/datum/component/reagent_weapon) /obj/item/shovel/reagent_weapon - name = "reagent shovel" + name = "forged shovel" /obj/item/shovel/reagent_weapon/Initialize(mapload) . = ..() @@ -264,12 +275,12 @@ user.put_in_hands(converted_arrow) qdel(src) -#define INCREASE_BLOCK_CHANGE 2 +#define INCREASE_BLOCK_CHANCE 2 /obj/item/forging/reagent_weapon/bokken - name = "reagent bokken" + name = "bokken" desc = "A bokken that is capable of blocking attacks when wielding in two hands, possibly including bullets should the user be brave enough." - force = 15 + force = 20 icon_state = "bokken" inhand_icon_state = "bokken" worn_icon_state = "bokken_back" @@ -285,7 +296,7 @@ /obj/item/forging/reagent_weapon/bokken/hit_reaction(mob/living/carbon/human/owner, atom/movable/hitby, attack_text, final_block_chance, damage, attack_type) if(wielded) - final_block_chance *= INCREASE_BLOCK_CHANGE + final_block_chance *= INCREASE_BLOCK_CHANCE if(prob(final_block_chance)) if(attack_type == PROJECTILE_ATTACK) owner.visible_message(span_danger("[owner] deflects [attack_text] with [src]!")) @@ -298,13 +309,13 @@ return TRUE return FALSE -#undef INCREASE_BLOCK_CHANGE +#undef INCREASE_BLOCK_CHANCE /obj/item/forging/reagent_weapon/bokken/Initialize(mapload) . = ..() RegisterSignal(src, COMSIG_TWOHANDED_WIELD, PROC_REF(on_wield)) RegisterSignal(src, COMSIG_TWOHANDED_UNWIELD, PROC_REF(on_unwield)) - AddComponent(/datum/component/two_handed, force_unwielded=15, force_wielded=7) + AddComponent(/datum/component/two_handed, force_unwielded = 20, force_wielded = 10) /obj/item/forging/reagent_weapon/bokken/proc/on_wield() SIGNAL_HANDLER diff --git a/modular_nova/modules/robot_limb_detach/code/robot_limb_detach_quirk.dm b/modular_nova/modules/robot_limb_detach/code/robot_limb_detach_quirk.dm new file mode 100644 index 00000000000..89e4cec3b15 --- /dev/null +++ b/modular_nova/modules/robot_limb_detach/code/robot_limb_detach_quirk.dm @@ -0,0 +1,80 @@ +/datum/quirk/robot_limb_detach + name = "Cybernetic Limb Mounts" + desc = "You are able to detach and reattach any installed robotic limbs with very little effort, as long as they're in good condition." + gain_text = span_notice("Internal sensors report limb disengagement protocols are ready and waiting.") + lose_text = span_notice("ERROR: LIMB DISENGAGEMENT PROTOCOLS OFFLINE.") + medical_record_text = "Patient bears quick-attach and release limb joint cybernetics." + value = 0 + mob_trait = TRAIT_ROBOTIC_LIMBATTACHMENT + icon = FA_ICON_HANDSHAKE_SIMPLE_SLASH + quirk_flags = QUIRK_HUMAN_ONLY + /// The action we add with this quirk in add(), used for easy deletion later + var/datum/action/cooldown/spell/added_action + +/datum/quirk/robot_limb_detach/add(client/client_source) + var/mob/living/carbon/human/human_holder = quirk_holder + var/datum/action/cooldown/spell/robot_self_amputation/limb_action = new /datum/action/cooldown/spell/robot_self_amputation() + limb_action.Grant(human_holder) + added_action = limb_action + +/datum/quirk/robot_limb_detach/remove() + QDEL_NULL(added_action) + +/datum/action/cooldown/spell/robot_self_amputation + name = "Detach a robotic limb" + desc = "Disengage one of your robotic limbs from your cybernetic mounts. Requires you to not be restrained or otherwise under duress. Will not function on wounded limbs - tend to them first." + button_icon_state = "autotomy" + + cooldown_time = 30 SECONDS + spell_requirements = NONE + check_flags = AB_CHECK_CONSCIOUS | AB_CHECK_HANDS_BLOCKED | AB_CHECK_INCAPACITATED + +/datum/action/cooldown/spell/robot_self_amputation/is_valid_target(atom/cast_on) + return ishuman(cast_on) + +/datum/action/cooldown/spell/robot_self_amputation/cast(mob/living/carbon/human/cast_on) + . = ..() + + if(HAS_TRAIT(cast_on, TRAIT_NODISMEMBER)) + to_chat(cast_on, span_warning("ERROR: LIMB DISENGAGEMENT PROTOCOLS OFFLINE. Seek out a maintenance technician.")) + return + + var/list/exclusions = list() + exclusions += BODY_ZONE_CHEST + if (!issynthetic(cast_on)) + exclusions += BODY_ZONE_HEAD // no decapitating yourself unless you're a synthetic, who keep their brains in their chest + + var/list/robot_parts = list() + for (var/obj/item/bodypart/possible_part as anything in cast_on.bodyparts) + if ((possible_part.bodytype & BODYTYPE_ROBOTIC) && !(possible_part.body_zone in exclusions)) //only robot limbs and only if they're not crucial to our like, ongoing life, you know? + robot_parts += possible_part + + if (!length(robot_parts)) + to_chat(cast_on, "ERROR: Limb disengagement protocols report no compatible cybernetics currently installed. Seek out a maintenance technician.") + return + + var/obj/item/bodypart/limb_to_detach = tgui_input_list(cast_on, "Limb to detach", "Cybernetic Limb Detachment", sort_names(robot_parts)) + if (QDELETED(src) || QDELETED(cast_on) || QDELETED(limb_to_detach)) + return + + if (length(limb_to_detach.wounds) >= 1) + cast_on.balloon_alert(cast_on, "can't detach wounded limbs!") + playsound(cast_on, 'sound/machines/buzz-sigh.ogg', 25, TRUE, SHORT_RANGE_SOUND_EXTRARANGE) + return + + cast_on.balloon_alert(cast_on, "detaching limb...") + playsound(cast_on, 'sound/items/rped.ogg', 25, TRUE, SHORT_RANGE_SOUND_EXTRARANGE) + cast_on.visible_message(span_notice("[cast_on] shuffles [cast_on.p_their()] [limb_to_detach.name] forward, actuators hissing and whirring as [cast_on.p_they()] disengage[cast_on.p_s()] the limb from its mount...")) + + if(do_after(cast_on, 5 SECONDS)) + cast_on.visible_message(span_notice("With a gentle twist, [cast_on] finally prises [cast_on.p_their()] [limb_to_detach.name] free from its socket.")) + limb_to_detach.drop_limb() + cast_on.put_in_hands(limb_to_detach) + cast_on.balloon_alert(cast_on, "limb detached!") + if(prob(5)) + playsound(cast_on, 'sound/items/champagne_pop.ogg', 25, TRUE, SHORT_RANGE_SOUND_EXTRARANGE) + else + playsound(cast_on, 'sound/items/deconstruct.ogg', 25, TRUE, SHORT_RANGE_SOUND_EXTRARANGE) + else + cast_on.balloon_alert(cast_on, "interrupted!") + playsound(cast_on, 'sound/machines/buzz-sigh.ogg', 25, TRUE, SHORT_RANGE_SOUND_EXTRARANGE) diff --git a/modular_nova/modules/roundstart_implants/code/loadout_implants.dm b/modular_nova/modules/roundstart_implants/code/loadout_implants.dm new file mode 100644 index 00000000000..7582d219b55 --- /dev/null +++ b/modular_nova/modules/roundstart_implants/code/loadout_implants.dm @@ -0,0 +1,99 @@ +// Core balance principles with these roundstart augments is that they are SLOW. 2 toolspeed minimum where possible - finding actual things in round should always be better, this is for flavor and accessibility. The accessibility alone already provides these with a lot of value. + +// EYE IMPLANTS + +/obj/item/organ/internal/eyes/robotic/binoculars + name = "digital magnification optics" + desc = "Commonly used on frontier worlds with comparatively vast overland distances to aid in visual acquisition of coworkers and targets." + actions_types = list(/datum/action/item_action/organ_action/toggle) + var/zoomed = FALSE + var/range_power = 2 // what kind of range modifier do we feed to the scope component? + +/obj/item/organ/internal/eyes/robotic/binoculars/Initialize(mapload) + . = ..() + AddComponent(/datum/component/scope, range_modifier = range_power) + +/obj/item/organ/internal/eyes/robotic/binoculars/ui_action_click(mob/user, actiontype) + if (istype(actiontype, /datum/action/item_action/organ_action/toggle)) + toggle_active(user) + +/obj/item/organ/internal/eyes/robotic/binoculars/proc/toggle_active(mob/user) + //this is so unbelievably, hysterically jank. i actually cannot believe this works. what the fuck + var/datum/component/scope/zoom = src.GetComponent(/datum/component/scope) + if (zoomed) + zoom.stop_zooming(user) + zoomed = FALSE + else + //check if they're blind + if (user.is_blind()) + user.balloon_alert(user, "can't activate magnification while blind!") + return + + zoom.zoom(user) + zoomed = TRUE + +// ARM IMPLANTS +/obj/item/organ/internal/cyberimp/arm/adjuster + name = "adjuster arm implant" + desc = "A miniaturized toolset implant containing a simple fingertip-mounted universal screwdriver bit with an inverted torque-wrench head. Most commonly used when rearranging furniture or other station machinery." + items_to_create = list(/obj/item/wrench/integrated, /obj/item/screwdriver/integrated) + +/obj/item/organ/internal/cyberimp/arm/adjuster/Initialize(mapload) + . = ..() + AddElement(/datum/element/manufacturer_examine, COMPANY_NAKAMURA) + +/obj/item/organ/internal/cyberimp/arm/electrical_toolset + name = "electrical toolset implant" + desc = "Bereft of any kind of insulation to speak of, this aug has a very distinct nickname amongst frontier outpost crews: 'the sizzler'. Often used in high verticality environments where loadout space is at a premium." + items_to_create = list(/obj/item/screwdriver/integrated, /obj/item/multitool/integrated) + +/obj/item/organ/internal/cyberimp/arm/electrical_toolset/Initialize(mapload) + . = ..() + AddElement(/datum/element/manufacturer_examine, COMPANY_NAKAMURA) + +/obj/item/organ/internal/cyberimp/arm/arc_welder + name = "shipbreaker's toolset implant" + desc = "A specialized salvage-grade implant that houses an arc welder, miniaturized crowbar within the bearer's arm, plus a fingertip torque-wrench rated for enough newtons to get the job done. Renowned across the frontier for being the 'trashy tattoo' equivalent of someone's first aug." + items_to_create = list(/obj/item/wrench/integrated, /obj/item/crowbar/integrated, /obj/item/weldingtool/electric/arc_welder/integrated) + +/obj/item/organ/internal/cyberimp/arm/arc_welder/Initialize(mapload) + . = ..() + AddElement(/datum/element/manufacturer_examine, COMPANY_FRONTIER) + +/obj/item/organ/internal/cyberimp/arm/emt_triage + name = "triage actuator implant" + desc = "Pioneered by Interdyne Pharmaceuticals for use in their frontier postings, this set of in-arm augments allows medical staff to perform basic life-saving surgeries out on the field with the assistance of a bladed instrument." + items_to_create = list(/obj/item/surgical_drapes/integrated, /obj/item/retractor/integrated, /obj/item/hemostat/integrated) + +/obj/item/organ/internal/cyberimp/arm/emt_triage/Initialize(mapload) + . = ..() + AddElement(/datum/element/manufacturer_examine, COMPANY_INTERDYNE) + +/obj/item/organ/internal/cyberimp/arm/civilian_barstaff + name = "waitstaff implant" + desc = "The galactic service industry demands only the finest from its (underpaid) employees, leading to the development of this sordid piece of technology which substitutes a user's organic arm for a food storage space and an integrated chamois cleaning cloth. Why?" + items_to_create = list(/obj/item/storage/bag/tray/integrated, /obj/item/reagent_containers/cup/rag/integrated) + +/obj/item/organ/internal/cyberimp/arm/civilian_lighter + name = "thumbtip lighter implant" + desc = "This extraordinarily useless implant was a product of market demand, and it exists because the galactic diaspora apparently craves the ability to light things with their thumbtips." + items_to_create = list(/obj/item/lighter/integrated) + +/obj/item/organ/internal/cyberimp/arm/blacksteel_forging + name = "Blacksteel 'Starforge' metalworking toolset implant" + desc = "A galactic favorite amongst burgeoning starfarer races with a fascination for basic metallurgy or mundane weaponry, this unlikely toolset augmentation is one of the Foundation's most popular products." + items_to_create = list(/obj/item/forging/hammer/integrated, /obj/item/forging/tongs/integrated, /obj/item/forging/billow/integrated) + +/obj/item/organ/internal/cyberimp/arm/blacksteel_forging/Initialize(mapload) + . = ..() + AddElement(/datum/element/manufacturer_examine, COMPANY_BLACKSTEEL) + +/obj/item/organ/internal/cyberimp/arm/bureaucracy + name = "bureaucrat's 'Jacent' toolset implant" + desc = "Popular amongst coreworld corporates, this integrated toolset includes a wrist-sheathed four-colour pen, a special motorized sheaf hollow for holding up to ten pieces of galactic-standard A4 paper and a set of two fingertip stamps for approving and denying things. Does not replenish." + items_to_create = list(/obj/item/pen/fourcolor/integrated, /obj/item/paper_bin/integrated, /obj/item/stamp/integrated, /obj/item/stamp/denied/integrated) + +/obj/item/organ/internal/cyberimp/arm/cargo + name = "FTU 'Deckhand' toolset implant" + desc = "Containing a fingertip-mounted universal scanner and a boxcutter, deck workers across the sector favor this cheap and effective implant as both a means of self-defense from irate consumers and for keeping a set of handy scanners quite literally, close at hand." + items_to_create = list(/obj/item/universal_scanner/integrated, /obj/item/boxcutter/extended/integrated) diff --git a/modular_nova/modules/roundstart_implants/code/loadout_subtypes.dm b/modular_nova/modules/roundstart_implants/code/loadout_subtypes.dm new file mode 100644 index 00000000000..86a9155e419 --- /dev/null +++ b/modular_nova/modules/roundstart_implants/code/loadout_subtypes.dm @@ -0,0 +1,83 @@ +//This entire file just contains special subtypes for the loadout_implants roundstart augs that makes them work with the system. +//Purely code readability. + +// ARM IMPLANTS +/obj/item/organ/internal/cyberimp/arm/adjuster/left_arm + zone = BODY_ZONE_L_ARM + slot = ORGAN_SLOT_LEFT_ARM_AUG + +/obj/item/organ/internal/cyberimp/arm/adjuster/right_arm + zone = BODY_ZONE_R_ARM + slot = ORGAN_SLOT_RIGHT_ARM_AUG + +/obj/item/organ/internal/cyberimp/arm/lighter/left_arm + zone = BODY_ZONE_L_ARM + slot = ORGAN_SLOT_LEFT_ARM_AUG + +/obj/item/organ/internal/cyberimp/arm/lighter/right_arm + zone = BODY_ZONE_R_ARM + slot = ORGAN_SLOT_RIGHT_ARM_AUG + +/obj/item/organ/internal/cyberimp/arm/arc_welder/left_arm + zone = BODY_ZONE_L_ARM + slot = ORGAN_SLOT_LEFT_ARM_AUG + +/obj/item/organ/internal/cyberimp/arm/arc_welder/right_arm + zone = BODY_ZONE_R_ARM + slot = ORGAN_SLOT_RIGHT_ARM_AUG + +/obj/item/organ/internal/cyberimp/arm/electrical_toolset/left_arm + zone = BODY_ZONE_L_ARM + slot = ORGAN_SLOT_LEFT_ARM_AUG + +/obj/item/organ/internal/cyberimp/arm/electrical_toolset/right_arm + zone = BODY_ZONE_R_ARM + slot = ORGAN_SLOT_RIGHT_ARM_AUG + +/obj/item/organ/internal/cyberimp/arm/emt_triage/left_arm + zone = BODY_ZONE_L_ARM + slot = ORGAN_SLOT_LEFT_ARM_AUG + +/obj/item/organ/internal/cyberimp/arm/emt_triage/right_arm + zone = BODY_ZONE_R_ARM + slot = ORGAN_SLOT_RIGHT_ARM_AUG + +/obj/item/organ/internal/cyberimp/arm/civilian_barstaff/left_arm + zone = BODY_ZONE_L_ARM + slot = ORGAN_SLOT_LEFT_ARM_AUG + +/obj/item/organ/internal/cyberimp/arm/civilian_barstaff/right_arm + zone = BODY_ZONE_R_ARM + slot = ORGAN_SLOT_RIGHT_ARM_AUG + +/obj/item/organ/internal/cyberimp/arm/civilian_lighter/left_arm + zone = BODY_ZONE_L_ARM + slot = ORGAN_SLOT_LEFT_ARM_AUG + +/obj/item/organ/internal/cyberimp/arm/civilian_lighter/right_arm + zone = BODY_ZONE_R_ARM + slot = ORGAN_SLOT_RIGHT_ARM_AUG + +/obj/item/organ/internal/cyberimp/arm/blacksteel_forging/left_arm + zone = BODY_ZONE_L_ARM + slot = ORGAN_SLOT_LEFT_ARM_AUG + +/obj/item/organ/internal/cyberimp/arm/blacksteel_forging/right_arm + zone = BODY_ZONE_R_ARM + slot = ORGAN_SLOT_RIGHT_ARM_AUG + +/obj/item/organ/internal/cyberimp/arm/bureaucracy/left_arm + zone = BODY_ZONE_L_ARM + slot = ORGAN_SLOT_LEFT_ARM_AUG + +/obj/item/organ/internal/cyberimp/arm/bureaucracy/right_arm + zone = BODY_ZONE_R_ARM + slot = ORGAN_SLOT_RIGHT_ARM_AUG + +/obj/item/organ/internal/cyberimp/arm/cargo/left_arm + zone = BODY_ZONE_L_ARM + slot = ORGAN_SLOT_LEFT_ARM_AUG + +/obj/item/organ/internal/cyberimp/arm/cargo/right_arm + zone = BODY_ZONE_R_ARM + slot = ORGAN_SLOT_RIGHT_ARM_AUG diff --git a/modular_nova/modules/roundstart_implants/code/tool_subtypes.dm b/modular_nova/modules/roundstart_implants/code/tool_subtypes.dm new file mode 100644 index 00000000000..d3a65078aed --- /dev/null +++ b/modular_nova/modules/roundstart_implants/code/tool_subtypes.dm @@ -0,0 +1,148 @@ +// ENGINEERING + +/obj/item/wrench/integrated + name = "motorized fingertip wrench-bit" + desc = "A cheap inverted fingertip replacement complete with a small-factor motor and torque wrenching bit. Works on most station standard applications, but is often slower than using a hand wrench." + toolspeed = 1.25 + +/obj/item/wrench/integrated/Initialize(mapload) + . = ..() + AddElement(/datum/element/manufacturer_examine, COMPANY_NAKAMURA) + +/obj/item/screwdriver/integrated + name = "motorized fingertip screw-bit" + desc = "A cheap inverted fingertip replacement that extends into a sturdy universal screwdriver head, complete with a small-factor motor. A bit slow, but gets the job done." + toolspeed = 1.25 + +/obj/item/screwdriver/integrated/Initialize(mapload) + . = ..() + AddElement(/datum/element/manufacturer_examine, COMPANY_NAKAMURA) + +/obj/item/crowbar/integrated + name = "integrated crowbar" + desc = "Rumour has it that people over a thousand people died in the resulting espionage centered around the exact angular dimensions that make this feat of physics and leverage possible. Retreats back into the bearer's arm when not in use." + toolspeed = 1.25 + +/obj/item/crowbar/integrated/Initialize(mapload) + . = ..() + AddElement(/datum/element/manufacturer_examine, COMPANY_NAKAMURA) + +/obj/item/multitool/integrated + name = "integrated 'multitool' diagnostics device" + desc = "Combining a set of fingertip probes fed back into an internal coprocessor, this useful little device has made its way into the arms of engineers and maintenance technicians galaxy-wide." + toolspeed = 1.25 + +/obj/item/multitool/integrated/Initialize(mapload) + . = ..() + AddElement(/datum/element/manufacturer_examine, COMPANY_NAKAMURA) + +/obj/item/weldingtool/electric/arc_welder/integrated + name = "integrated arc welder" + desc = "Stripped down enough to fit inside a standard humanoid arm, this specialized tool guzzles power like nobody's business and produces a slightly weaker arc. It gets the job done, but you're putting a power cell inside your arm and signing all the OHS waivers that comes with." + toolspeed = 1.25 //25% slower. really fucking slow, since synths can repair themselves with this + +/obj/item/weldingtool/electric/arc_welder/integrated/switched_on(mob/user) + . = ..() + force = 12 // paxil tells me it's not a HUGE issue to do this but i still think force 15 is too much so force 12 we do + +// MEDICAL + +/obj/item/surgical_drapes/integrated + name = "hardlight surgical indicators" + desc = "A basic array of hardlight markers used in rudimentary surgical procedures where more specialized equipment isn't available, co-opted from wound analyzer hardware. Lays out the groundwork protocols for basic surgeries when levelled at a target." + +/obj/item/surgical_drapes/integrated/Initialize(mapload) + . = ..() + AddComponent(/datum/component/surgery_initiator) + AddElement(/datum/element/manufacturer_examine, COMPANY_INTERDYNE) + +/obj/item/hemostat/integrated + name = "integrated hemostatic clamp" + desc = "More or less a glorified set of forceps with slightly serrated teeth and a dedicated interlocking mechanism, all miniaturized to fit inside a finger." + toolspeed = 1.25 // this will directly affect how fast someone can tend wounds with this setup, balancejak accordingly + +/obj/item/hemostat/integrated/Initialize(mapload) + . = ..() + AddElement(/datum/element/manufacturer_examine, COMPANY_INTERDYNE) + +/obj/item/retractor/integrated + name = "fingertip retractor clamp" + desc = "A special suite of high-grip flesh torsioning clips designed for use in field surgery situations." + toolspeed = 1.25 + +/obj/item/retractor/integrated/Initialize(mapload) + . = ..() + AddElement(/datum/element/manufacturer_examine, COMPANY_INTERDYNE) + +// UTILITY + +/obj/item/storage/bag/tray/integrated + name = "telescoping kitchen carrier" + desc = "First pioneered aboard the Mothic fleet and later utilized heavily in multi-armed species. Very useful for hauling around large amounts of food, and can rolls into a telescopic, hermetically-sealed tube for storage in the user's arm." + +/obj/item/storage/bag/tray/integrated/Initialize(mapload) + . = ..() + atom_storage.max_slots = 3 + +/obj/item/lighter/integrated + name = "thumbtip lighter" + desc = "Galactic polling indicated outrageous market demand for this particular cybernetic addition - specifically a hinged false fingertip with a standard lighter housing inside, with many firms citing 'increased reproductive acquisition' as one of the primary survey results. Translated into Sol Common, this means that lighting cigarettes with your finger helps you pull. Allegedly." + +/obj/item/reagent_containers/cup/rag/integrated + name = "integrated cleaning chamois" + desc = "Guaranteed to eliminate (most) messes. This civilian-issue cybernetic enhancement comes with a lengthy waiver about foregoing any claims to fluid damage made by the device to your internal arm comparment." + +/obj/item/pen/fourcolor/integrated + //no new desc for this one since it sets its own desc + name = "integrated four-color pen" + +/obj/item/paper_bin/integrated + name = "integrated paper sheaf" + desc = "Only a jacent could've been capable of the raw bureaucracy required to allow even a small paper bin to be fitted into someone's arm. Also comes with an internal routing clip to hold an extra pen, just in case you somehow go through the first one." + total_paper = 10 + +/obj/item/universal_scanner/integrated + name = "fingertip universal scanner" + desc = "Some deckhands working the FTU distribution centers popularized this cybernetic addon after the speed improvements it yielded let them claw back the ten minute lunch breaks they'd been deprived for thirty years. Replaces the pad of the user's fourth finger with a digitized universal scanner, capable of switching between export, price, and sales tagger modes." + paper_count = 5 + max_paper_count = 5 + +/obj/item/boxcutter/extended/integrated + name = "integrated boxcutter" + desc = "Stolen from old Terran databanks, the design for this integration was originally some kind of wrist-sheathed assassin tool released into the public domain by an unnamed bitrunner. The FTU found that it worked great as a box cutter, and so authorized it for inclusion in their Deckhand toolset." + +/obj/item/stamp/integrated + name = "fingertip 'GRANTED' stamp" + desc = "Designed to swivel out of a specialized finger-pad mount, this stamp is the bane of budget-crunchers everywhere - for wherever it dares to touch, a loss of credits is sure to follow." + +/obj/item/stamp/denied/integrated + name = "fingertip 'DENIED' stamp" + desc = "When the computer really, really says no." + +// FORGING (why are we doing this) + +/obj/item/forging/hammer/integrated + name = "integrated metalworking hammer" + desc = "At the request of Dwarvenkind, the Blacksteel Foundation produced a low-cost toolset that ultimately ended up becoming one of their most popular products. And it all began with this solitary hammer." + +/obj/item/forging/hammer/integrated/Initialize(mapload) + . = ..() + AddElement(/datum/element/manufacturer_examine, COMPANY_BLACKSTEEL) + +/obj/item/forging/tongs/integrated + name = "heat-sheathed fingertip tongs" + desc = "Hardy heat-treated metal and integrated heatsinks allow these two fingertip replacement augs to act as one might use ordinary metallurgical tongs, resisting burns from all but the most raging forges." + toolspeed = 2 SECONDS + +/obj/item/forging/tongs/integrated/Initialize(mapload) + . = ..() + AddElement(/datum/element/manufacturer_examine, COMPANY_BLACKSTEEL) + +/obj/item/forging/billow/integrated + name = "motorized mini-bellows" + desc = "Let not its size deceive you, for the gale this hinged accordion-like aug can produce when activated is enough to stoke even the most timid fires into a frenzy. Has a health and safety warning on it which reads: 'DO NOT INSERT INTO MOUTH'." + toolspeed = 2 SECONDS + +/obj/item/forging/billow/integrated/Initialize(mapload) + . = ..() + AddElement(/datum/element/manufacturer_examine, COMPANY_BLACKSTEEL) diff --git a/modular_nova/modules/sec_haul/code/guns/armory_spawns.dm b/modular_nova/modules/sec_haul/code/guns/armory_spawns.dm index 2dd13b95c8a..9c471fef1ae 100644 --- a/modular_nova/modules/sec_haul/code/guns/armory_spawns.dm +++ b/modular_nova/modules/sec_haul/code/guns/armory_spawns.dm @@ -16,27 +16,36 @@ /obj/effect/spawner/armory_spawn/Initialize(mapload) . = ..() - if(guns) - var/gun_count = 0 - var/offset_percent = 20 / guns.len - for(var/gun in guns) // 11/20/21: Gun spawners now spawn 1 of each gun in it's list no matter what, so as to reduce the RNG of the armory stock. - var/obj/item/gun/spawned_gun = new gun(loc) - - if(vertical_guns) - spawned_gun.place_on_rack() - spawned_gun.pixel_x = -10 + (offset_percent * gun_count) - else if (fan_out_items) - spawned_gun.pixel_x = spawned_gun.pixel_y = ((!(gun_count%2)*gun_count/2)*-1)+((gun_count%2)*(gun_count+1)/2*1) - - gun_count++ - - if(istype(spawned_gun, /obj/item/gun/ballistic)) - var/obj/item/gun/ballistic/spawned_ballistic_gun = spawned_gun - if(spawned_ballistic_gun.magazine && !istype(spawned_ballistic_gun.magazine, /obj/item/ammo_box/magazine/internal)) - var/obj/item/storage/box/ammo_box/spawned_box = new(loc) - spawned_box.name = "ammo box - [spawned_ballistic_gun.name]" - for(var/i in 1 to mags_to_spawn) - new spawned_ballistic_gun.spawn_magazine_type (spawned_box) + if(!guns) + return + + var/obj/structure/rack/gunrack/rack_on_tile + for(var/obj/structure/rack/gunrack/found_rack in loc.contents) + rack_on_tile = found_rack + break + + var/gun_count = 0 + var/offset_percent = 20 / guns.len + for(var/gun in guns) // 11/20/21: Gun spawners now spawn 1 of each gun in it's list no matter what, so as to reduce the RNG of the armory stock. + var/obj/item/gun/spawned_gun = new gun(loc) + + if(vertical_guns && rack_on_tile) + rack_on_tile.rotate_weapon(spawned_gun) + spawned_gun.pixel_x = -10 + (offset_percent * gun_count) + spawned_gun.base_pixel_x + else if (fan_out_items) + spawned_gun.pixel_x = spawned_gun.pixel_y = ((!(gun_count%2)*gun_count/2)*-1)+((gun_count%2)*(gun_count+1)/2*1) + + gun_count++ + + if(!istype(spawned_gun, /obj/item/gun/ballistic)) + continue + + var/obj/item/gun/ballistic/spawned_ballistic_gun = spawned_gun + if(spawned_ballistic_gun.magazine && !istype(spawned_ballistic_gun.magazine, /obj/item/ammo_box/magazine/internal)) + var/obj/item/storage/box/spawned_box = new(loc) + spawned_box.name = "ammo box - [spawned_ballistic_gun.name]" + for(var/i in 1 to mags_to_spawn) + new spawned_ballistic_gun.spawn_magazine_type(spawned_box) /obj/effect/spawner/armory_spawn/shotguns guns = list( @@ -45,33 +54,26 @@ /obj/item/gun/ballistic/shotgun/riot/sol, ) +/obj/effect/spawner/armory_spawn/mod_lasers_big + guns = list( + /obj/item/gun/energy/modular_laser_rifle, + /obj/item/gun/energy/modular_laser_rifle, + /obj/item/gun/energy/modular_laser_rifle, + ) + +/obj/effect/spawner/armory_spawn/mod_lasers_small + guns = list( + /obj/item/gun/energy/modular_laser_rifle/carbine, + /obj/item/gun/energy/modular_laser_rifle/carbine, + /obj/item/gun/energy/modular_laser_rifle/carbine, + ) + /obj/structure/closet/ammunitionlocker/useful/PopulateContents() new /obj/item/storage/box/rubbershot(src) new /obj/item/storage/box/rubbershot(src) new /obj/item/storage/box/rubbershot(src) new /obj/item/storage/box/rubbershot(src) -/* -* AMMO BOXES -*/ - -/obj/item/storage/box/ammo_box - name = "ammo box" - desc = "A box filled with ammunition." - icon = 'modular_nova/modules/microfusion/icons/microfusion_cells.dmi' - icon_state = "microfusion_box" - illustration = null - layer = 2.9 - -/obj/item/storage/box/ammo_box/microfusion - name = "microfusion cell container" - desc = "A box filled with microfusion cells." - -/obj/item/storage/box/ammo_box/microfusion/PopulateContents() - new /obj/item/stock_parts/cell/microfusion(src) - new /obj/item/stock_parts/cell/microfusion(src) - new /obj/item/stock_parts/cell/microfusion(src) - /obj/effect/spawner/armory_spawn/centcom_rifles guns = list( /obj/item/gun/ballistic/automatic/sol_rifle, diff --git a/modular_nova/modules/sec_haul/code/guns/cargo_stuff.dm b/modular_nova/modules/sec_haul/code/guns/cargo_stuff.dm deleted file mode 100644 index 2d220bf9a20..00000000000 --- a/modular_nova/modules/sec_haul/code/guns/cargo_stuff.dm +++ /dev/null @@ -1,10 +0,0 @@ -/datum/supply_pack/security/armory/cmg - name = "Carwo 'Sindano' Submachinegun Crate" - desc = "Three entirely proprietary Sindano kits, chambered in .35 Sol Short. Each kit contains three empty magazines and a box each of incapacitator and lethal rounds." - cost = CARGO_CRATE_VALUE * 20 - contains = list( - /obj/item/storage/toolbox/guncase/nova/carwo_large_case/sindano, - /obj/item/storage/toolbox/guncase/nova/carwo_large_case/sindano, - /obj/item/storage/toolbox/guncase/nova/carwo_large_case/sindano, - ) - crate_name = "Carwo 'Sindano' Submachinegun Crate" diff --git a/modular_nova/modules/sec_haul/code/misc/vending.dm b/modular_nova/modules/sec_haul/code/misc/vending.dm index c095290a116..9e73d3225ed 100644 --- a/modular_nova/modules/sec_haul/code/misc/vending.dm +++ b/modular_nova/modules/sec_haul/code/misc/vending.dm @@ -44,6 +44,8 @@ products = list(/obj/item/clothing/suit/hooded/wintercoat/security = 5, /obj/item/clothing/suit/toggle/jacket/sec = 5, /obj/item/clothing/suit/armor/vest/peacekeeper/brit = 5, + /obj/item/clothing/suit/armor/vest/peacekeeper/jacket = 5, + /obj/item/clothing/suit/armor/vest/peacekeeper/jacket/badge = 5, /obj/item/clothing/neck/security_cape = 5, /obj/item/clothing/neck/security_cape/armplate = 5, /obj/item/storage/backpack/security = 5, diff --git a/modular_nova/modules/sec_haul/code/peacekeeper/armadyne_clothing.dm b/modular_nova/modules/sec_haul/code/peacekeeper/armadyne_clothing.dm index b1ffd09ed86..305ddf9dd51 100644 --- a/modular_nova/modules/sec_haul/code/peacekeeper/armadyne_clothing.dm +++ b/modular_nova/modules/sec_haul/code/peacekeeper/armadyne_clothing.dm @@ -73,16 +73,7 @@ inhand_icon_state = "jackboots" worn_icon_state = "armadyne_boots" - -/obj/item/storage/belt/security/webbing/peacekeeper/armadyne - name = "armadyne webbing" - desc = "Unique and versatile chest rig, can hold security gear." - icon = 'modular_nova/master_files/icons/obj/clothing/belts.dmi' - worn_icon = 'modular_nova/master_files/icons/mob/clothing/belt.dmi' - icon_state = "armadyne_webbing" - worn_icon_state = "armadyne_webbing" - -/obj/item/storage/belt/security/peacekeeper/armadyne +/obj/item/storage/belt/security/armadyne name = "armadyne belt" desc = "Can hold security gear like handcuffs and flashes. Has a holster for a gun." icon = 'modular_nova/master_files/icons/obj/clothing/belts.dmi' @@ -90,6 +81,13 @@ icon_state = "armadyne_belt" worn_icon_state = "armadyne_belt" +/obj/item/storage/belt/security/webbing/armadyne + name = "armadyne webbing" + icon = 'modular_nova/master_files/icons/obj/clothing/belts.dmi' + worn_icon = 'modular_nova/master_files/icons/mob/clothing/belt.dmi' + icon_state = "armadyne_webbing" + worn_icon_state = "armadyne_webbing" + /datum/outfit/armadyne_rep name = "Armadyne Corporate Representative" @@ -102,7 +100,7 @@ glasses = /obj/item/clothing/glasses/hud/security/sunglasses/peacekeeper/armadyne suit = /obj/item/clothing/suit/armor/vest/peacekeeper/armadyne shoes = /obj/item/clothing/shoes/jackboots/peacekeeper/armadyne - belt = /obj/item/storage/belt/security/peacekeeper/armadyne + belt = /obj/item/storage/belt/security/armadyne r_pocket = /obj/item/assembly/flash/handheld backpack_contents = list( /obj/item/melee/baton/telescopic, @@ -149,7 +147,7 @@ suit = /obj/item/clothing/suit/armor/vest/peacekeeper/armadyne/armor suit_store = /obj/item/gun/ballistic/automatic/sol_rifle shoes = /obj/item/clothing/shoes/jackboots/peacekeeper/armadyne - belt = /obj/item/storage/belt/security/webbing/peacekeeper/armadyne + belt = /obj/item/storage/belt/security/webbing/armadyne backpack_contents = list( /obj/item/storage/toolbox/guncase/nova/pistol/trappiste_small_case/wespe, /obj/item/storage/box/handcuffs, @@ -164,7 +162,7 @@ /datum/outfit/armadyne_security/high_alert name = "Armadyne Corporate Security (High Alert)" - belt = /obj/item/storage/belt/security/webbing/peacekeeper/armadyne + belt = /obj/item/storage/belt/security/webbing/armadyne suit_store = /obj/item/gun/ballistic/automatic/sol_rifle backpack_contents = list( /obj/item/melee/baton/telescopic, diff --git a/modular_nova/modules/sec_haul/code/peacekeeper/peacekeeper_clothing.dm b/modular_nova/modules/sec_haul/code/peacekeeper/peacekeeper_clothing.dm index 9a153d53f87..733155827d0 100644 --- a/modular_nova/modules/sec_haul/code/peacekeeper/peacekeeper_clothing.dm +++ b/modular_nova/modules/sec_haul/code/peacekeeper/peacekeeper_clothing.dm @@ -125,6 +125,26 @@ worn_icon_state = "peacekeeper_spacecoat" supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION_NO_NEW_ICON +/obj/item/clothing/suit/armor/vest/peacekeeper/jacket + name = "peacekeeper jacket" + desc = "A slightly vintage canvas and aramid jacket; hi-vis checkers included. Armored and stylish? Implausible." + icon = 'modular_nova/master_files/icons/obj/clothing/suits/armor.dmi' + worn_icon = 'modular_nova/master_files/icons/mob/clothing/suits/armor.dmi' + icon_state = "peacekeeper_jacket" + supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION_NO_NEW_ICON + body_parts_covered = CHEST|GROIN|ARMS + cold_protection = CHEST|GROIN|ARMS + heat_protection = CHEST|GROIN|ARMS + +/obj/item/clothing/suit/armor/vest/peacekeeper/jacket/Initialize(mapload) + . = ..() + AddComponent(/datum/component/toggle_icon, "zipper") + +/obj/item/clothing/suit/armor/vest/peacekeeper/jacket/badge + name = "badged peacekeeper jacket" + desc = "A slightly vintage canvas and aramid jacket; hi-vis checkers and chevron badge included. Armored and stylish? Implausible." + icon_state = "peacekeeper_jacket_badge" + //PEACEKEEPER GLOVES /obj/item/clothing/gloves/combat/peacekeeper name = "peacekeeper gloves" @@ -157,84 +177,13 @@ worn_icon = 'modular_nova/master_files/icons/mob/clothing/hands.dmi' icon_state = "peacekeeper_gripper_gloves" -//PEACEKEEPER BELTS -/obj/item/storage/belt/security/peacekeeper - name = "peacekeeper belt" - desc = "This belt can hold security gear like handcuffs and flashes. It has a holster for a gun." - icon = 'modular_nova/master_files/icons/obj/clothing/belts.dmi' - worn_icon = 'modular_nova/master_files/icons/mob/clothing/belt.dmi' - icon_state = "peacekeeperbelt" - worn_icon_state = "peacekeeperbelt" - content_overlays = FALSE - -/obj/item/storage/belt/security/peacekeeper/Initialize(mapload) - . = ..() - atom_storage.max_slots = 5 - atom_storage.set_holdable(list( - /obj/item/gun/ballistic/automatic/pistol, - /obj/item/gun/ballistic/revolver, - /obj/item/gun/energy/disabler, - /obj/item/melee/baton, - /obj/item/melee/baton, - /obj/item/grenade, - /obj/item/reagent_containers/spray/pepper, - /obj/item/restraints/handcuffs, - /obj/item/assembly/flash/handheld, - /obj/item/clothing/glasses, - /obj/item/ammo_casing/shotgun, - /obj/item/ammo_box, - /obj/item/food/donut, - /obj/item/knife/combat, - /obj/item/flashlight/seclite, - /obj/item/melee/baton/telescopic, - /obj/item/radio, - /obj/item/clothing/gloves, - /obj/item/restraints/legcuffs/bola, - /obj/item/holosign_creator/security - )) - -/obj/item/storage/belt/security/peacekeeper/full/PopulateContents() - new /obj/item/reagent_containers/spray/pepper(src) - new /obj/item/restraints/handcuffs(src) - new /obj/item/grenade/flashbang(src) - new /obj/item/assembly/flash/handheld(src) - update_icon() - +//PEACEKEEPER WEBBING /obj/item/storage/belt/security/webbing/peacekeeper name = "peacekeeper webbing" - desc = "A tactical chest rig issued to peacekeepers; slow is smooth, smooth is fast. Has a notable lack of a holster that fits energy-based weapons." icon = 'modular_nova/master_files/icons/obj/clothing/belts.dmi' worn_icon = 'modular_nova/master_files/icons/mob/clothing/belt.dmi' icon_state = "peacekeeper_webbing" worn_icon_state = "peacekeeper_webbing" - content_overlays = FALSE - custom_premium_price = PAYCHECK_CREW * 3 - -/obj/item/storage/belt/security/webbing/peacekeeper/Initialize(mapload) - . = ..() - atom_storage.max_slots = 7 - atom_storage.set_holdable(list( - /obj/item/gun/ballistic/automatic/pistol, - /obj/item/gun/ballistic/revolver, - /obj/item/melee/baton, - /obj/item/melee/baton, - /obj/item/grenade, - /obj/item/reagent_containers/spray/pepper, - /obj/item/restraints/handcuffs, - /obj/item/assembly/flash/handheld, - /obj/item/clothing/glasses, - /obj/item/ammo_casing/shotgun, - /obj/item/ammo_box, - /obj/item/food/donut, - /obj/item/knife/combat, - /obj/item/flashlight/seclite, - /obj/item/melee/baton/telescopic, - /obj/item/radio, - /obj/item/clothing/gloves, - /obj/item/restraints/legcuffs/bola, - /obj/item/holosign_creator/security - )) - //BOOTS /obj/item/clothing/shoes/jackboots/peacekeeper diff --git a/modular_nova/modules/shotgunrebalance/code/shotgun.dm b/modular_nova/modules/shotgunrebalance/code/shotgun.dm index 1c96b0ebeb2..c66154f6ae5 100644 --- a/modular_nova/modules/shotgunrebalance/code/shotgun.dm +++ b/modular_nova/modules/shotgunrebalance/code/shotgun.dm @@ -247,6 +247,25 @@ /obj/projectile/bullet/shotgun_slug/hunter name = "12g hunter slug" damage = 20 + range = 12 + /// How much the damage is multiplied by when we hit a mob with the correct biotype + var/biotype_damage_multiplier = 5 + /// What biotype we look for + var/biotype_we_look_for = MOB_BEAST + +/obj/projectile/bullet/shotgun_slug/hunter/on_hit(atom/target, blocked, pierce_hit) + if(ismineralturf(target)) + var/turf/closed/mineral/mineral_turf = target + mineral_turf.gets_drilled(firer, FALSE) + if(range > 0) + return BULLET_ACT_FORCE_PIERCE + return ..() + if(!isliving(target) || (damage > initial(damage))) + return ..() + var/mob/living/target_mob = target + if(target_mob.mob_biotypes & biotype_we_look_for || istype(target_mob, /mob/living/simple_animal/hostile/megafauna)) + damage *= biotype_damage_multiplier + return ..() /obj/projectile/bullet/shotgun_slug/hunter/Initialize(mapload) . = ..() diff --git a/modular_nova/modules/stasisrework/code/stasissleeper.dm b/modular_nova/modules/stasisrework/code/stasissleeper.dm index aae9ddbd59f..b657875b4b0 100644 --- a/modular_nova/modules/stasisrework/code/stasissleeper.dm +++ b/modular_nova/modules/stasisrework/code/stasissleeper.dm @@ -1,4 +1,3 @@ -#define SCANNER_VERBOSE 1 /obj/machinery/stasissleeper name = "lifeform stasis unit" desc = "A somewhat comfortable looking bed with a cover over it. It will keep someone in stasis." @@ -177,5 +176,3 @@ /obj/machinery/stasissleeper/attack_ai_secondary(mob/user) // this works for borgs and ais shrug attack_hand_secondary(user) - -#undef SCANNER_VERBOSE diff --git a/modular_nova/modules/synths/code/bodyparts/ears.dm b/modular_nova/modules/synths/code/bodyparts/ears.dm index a16950e8314..d745a3efd68 100644 --- a/modular_nova/modules/synths/code/bodyparts/ears.dm +++ b/modular_nova/modules/synths/code/bodyparts/ears.dm @@ -2,8 +2,8 @@ name = "auditory sensors" icon = 'modular_nova/master_files/icons/obj/surgery.dmi' icon_state = "ears-ipc" - desc = "A pair of microphones intended to be installed in an IPC or Synthetics head, that grant the ability to hear." - zone = BODY_ZONE_HEAD + desc = "A pair of microphones intended to be installed inside a machine's chassis, that grant the ability to hear." + zone = BODY_ZONE_CHEST slot = ORGAN_SLOT_EARS gender = PLURAL maxHealth = 1 * STANDARD_ORGAN_THRESHOLD diff --git a/modular_nova/modules/synths/code/bodyparts/power_cord.dm b/modular_nova/modules/synths/code/bodyparts/power_cord.dm index c8ff5bb58f6..46295e09210 100644 --- a/modular_nova/modules/synths/code/bodyparts/power_cord.dm +++ b/modular_nova/modules/synths/code/bodyparts/power_cord.dm @@ -1,106 +1,140 @@ #define SYNTH_CHARGE_MAX 150 #define SYNTH_CHARGE_MIN 50 +#define SYNTH_CHARGE_ALMOST_FULL 100 #define SYNTH_CHARGE_PER_NUTRITION 10 #define SYNTH_CHARGE_DELAY_PER_100 10 #define SYNTH_DRAW_NUTRITION_BUFFER 30 #define SYNTH_APC_MINIMUM_PERCENT 20 /obj/item/organ/internal/cyberimp/arm/power_cord - name = "power cord implant" + name = "charging implant" desc = "An internal power cord. Useful if you run on elecricity. Not so much otherwise." - contents = newlist(/obj/item/apc_powercord) + items_to_create = list(/obj/item/synth_powercord) zone = "l_arm" + cannot_confiscate = TRUE -/obj/item/apc_powercord +/obj/item/synth_powercord name = "power cord" desc = "An internal power cord. Useful if you run on electricity. Not so much otherwise." icon = 'icons/obj/stack_objects.dmi' icon_state = "wire1" + ///Object basetypes which the powercord is allowed to connect to. + var/static/list/synth_charge_whitelist = typecacheof(list( + /obj/item/stock_parts/cell, + /obj/machinery/power/apc, + )) + +// Attempt to charge from an object by using them on the power cord. +/obj/item/synth_powercord/attackby(obj/item/attacking_item, mob/user, params) + if(!can_power_draw(attacking_item, user)) + return ..() + try_power_draw(attacking_item, user) -/obj/item/apc_powercord/afterattack(atom/target, mob/user, proximity_flag, click_parameters) - if(!istype(target, /obj/machinery/power/apc) || !ishuman(user) || !proximity_flag) +// Attempt to charge from an object by using the power cord on them. +/obj/item/synth_powercord/afterattack(atom/target, mob/user, proximity_flag, click_parameters) + if(!proximity_flag || !can_power_draw(target, user)) return ..() + try_power_draw(target, user) + +/// Returns TRUE or FALSE depending on if the target object can be used as a power source. +/obj/item/synth_powercord/proc/can_power_draw(obj/target, mob/user) + return ishuman(user) && is_type_in_typecache(target, synth_charge_whitelist) +/// Attempts to start using an object as a power source. +/// Checks the user's internal powercell to see if it exists. +/obj/item/synth_powercord/proc/try_power_draw(obj/target, mob/living/carbon/human/user) user.changeNext_move(CLICK_CD_MELEE) - var/obj/machinery/power/apc/target_apc = target - var/mob/living/carbon/human/ipc = user - var/obj/item/organ/internal/stomach/synth/cell = ipc.organs_slot[ORGAN_SLOT_STOMACH] - if(!cell) - to_chat(ipc, span_warning("You try to siphon energy from the [target_apc], but you have no stomach! How are you still standing?")) + var/obj/item/organ/internal/stomach/synth/synth_cell = user.get_organ_slot(ORGAN_SLOT_STOMACH) + if(QDELETED(synth_cell) || !istype(synth_cell)) + to_chat(user, span_warning("You plug into [target], but nothing happens! It seems you don't have an internal cell to charge.")) return - if(!istype(cell)) - to_chat(ipc, span_warning("You plug into the APC, but nothing happens! It seems you don't have a cell to charge!")) + if(NUTRITION_LEVEL_ALMOST_FULL - user.nutrition <= SYNTH_CHARGE_ALMOST_FULL) + user.balloon_alert(user, "can't charge any more!") return - if(target_apc.cell && target_apc.cell.percent() < SYNTH_APC_MINIMUM_PERCENT) - to_chat(user, span_warning("There is no charge to draw from that APC.")) - return + user.visible_message(span_notice("[user] inserts a power connector into [target]."), span_notice("You begin to draw power from [target].")) + do_power_draw(target, user) - if(ipc.nutrition >= NUTRITION_LEVEL_ALMOST_FULL) - to_chat(user, span_warning("You are already fully charged!")) + if(QDELETED(target)) return - powerdraw_loop(target_apc, ipc) + user.visible_message(span_notice("[user] unplugs from [target]."), span_notice("You unplug from [target].")) /** - * Runs a loop to charge a synth cell (stomach) via powercord from an APC. + * Runs a loop to charge a synth cell (stomach) from a power cell or APC. + * Displays chat messages to the user and nearby observers. * * Stops when: - * - The user is full. - * - The APC has less than 20% charge. - * - The APC has machine power turned off. - * - The APC is unable to provide charge for any other reason. + * - The user's internal cell is full. + * - The cell has less than the minimum charge. * - The user moves, or anything else that can happen to interrupt a do_after. * * Arguments: - * * target_apc - The APC to drain. - * * user - The carbon draining the APC. + * * target - The power cell or APC to drain. + * * user - The human mob draining the power cell. */ -/obj/item/apc_powercord/proc/powerdraw_loop(obj/machinery/power/apc/target_apc, mob/living/carbon/human/user) - user.visible_message(span_notice("[user] inserts a power connector into the [target_apc]."), span_notice("You begin to draw power from the [target_apc].")) +/obj/item/synth_powercord/proc/do_power_draw(obj/target, mob/living/carbon/human/user) + // Draw power from an APC if one was given. + var/obj/machinery/power/apc/target_apc + if(istype(target, /obj/machinery/power/apc)) + target_apc = target + + var/obj/item/stock_parts/cell/target_cell = target_apc ? target_apc.cell : target + var/minimum_cell_charge = target_apc ? SYNTH_APC_MINIMUM_PERCENT : 0 + if(!target_cell || target_cell.percent() < minimum_cell_charge) + user.balloon_alert(user, "no charge left!") + return + + var/power_needed + var/power_use while(TRUE) - var/power_needed = NUTRITION_LEVEL_ALMOST_FULL - user.nutrition // How much charge do we need in total? - // Do we even need anything? - if(power_needed <= SYNTH_CHARGE_MIN * 2) // Times two to make sure minimum draw is always lower than this margin to prevent potential needless loops. - to_chat(user, span_notice("You are fully charged.")) + // Check if the user is nearly fully charged. + // Ensures minimum draw is always lower than this margin. + power_needed = NUTRITION_LEVEL_ALMOST_FULL - user.nutrition + if(power_needed <= SYNTH_CHARGE_ALMOST_FULL) + user.balloon_alert(user, "can't charge any more!") break - // Is the APC not charging equipment? And yes, synths are gonna be treated as equipment. Deal with it. - if(target_apc.cell.percent() < SYNTH_APC_MINIMUM_PERCENT) // 20%, to prevent synths from overstepping and murdering power for department machines and potentially doors. - to_chat(user, span_warning("[target_apc]'s power is too low to charge you.")) + // Check if the charge level of the cell is below the minimum. + // Prevents synths from overloading the cell. + if(target_cell.percent() < minimum_cell_charge) + user.balloon_alert(user, "not enough charge!") break - // Calculate how much to draw this cycle - var/power_use = clamp(power_needed, SYNTH_CHARGE_MIN, SYNTH_CHARGE_MAX) - power_use = clamp(power_use, 0, target_apc.cell.charge) - // Are we able to draw anything? + // Calculate how much to draw from the cell this cycle. + power_use = clamp(power_needed, SYNTH_CHARGE_MIN, SYNTH_CHARGE_MAX) + power_use = clamp(power_use, 0, target_cell.charge) if(power_use <= 0) - to_chat(user, span_warning("[target_apc] lacks the power to charge you.")) + user.balloon_alert(user, "not enough charge!") break - // Calculate the delay. - var/power_delay = (power_use / 100) * SYNTH_CHARGE_DELAY_PER_100 - // Attempt to run a charging cycle. - if(!do_after(user, power_delay, target = target_apc)) + // Attempt to drain charge from the cell. + if(!do_after(user, (power_use / 100) * SYNTH_CHARGE_DELAY_PER_100, target)) break - // Use the power and increase nutrition. - target_apc.cell.use(power_use) + if(!target_cell.use(power_use)) + // The cell could be sabotaged, which causes it to explode and qdelete. + if(QDELETED(target_cell)) + return + user.balloon_alert(user, "not enough charge!") + break + // If charging was successful, then increase user nutrition and emit sparks. user.nutrition += power_use / SYNTH_CHARGE_PER_NUTRITION - do_sparks(1, FALSE, target_apc) + do_sparks(1, FALSE, target_cell.loc) - if(target_apc.main_status <= APC_HAS_POWER) + // Start APC recharging if power was used and the APC has power available. + if(target_apc && !QDELETED(target_apc) && !QDELETED(target_apc.cell) && target_apc.main_status > APC_NO_POWER) target_apc.charging = APC_CHARGING target_apc.update_appearance() - else - return - user.visible_message(span_notice("[user] unplugs from the [target_apc]."), span_notice("You unplug from the [target_apc].")) #undef SYNTH_CHARGE_MAX #undef SYNTH_CHARGE_MIN +#undef SYNTH_CHARGE_ALMOST_FULL #undef SYNTH_CHARGE_PER_NUTRITION #undef SYNTH_CHARGE_DELAY_PER_100 +#undef SYNTH_DRAW_NUTRITION_BUFFER +#undef SYNTH_APC_MINIMUM_PERCENT diff --git a/modular_nova/modules/synths/code/surgery/mechanic_steps.dm b/modular_nova/modules/synths/code/surgery/mechanic_steps.dm index 8389c9e1a79..b09e831b8b8 100644 --- a/modular_nova/modules/synths/code/surgery/mechanic_steps.dm +++ b/modular_nova/modules/synths/code/surgery/mechanic_steps.dm @@ -122,3 +122,14 @@ "[user] begins to add plating to [target]'s [parse_zone(target_zone)].", "[user] begins to add plating to [target]'s [parse_zone(target_zone)].", ) + +// overridden 3rd arg +/datum/surgery_step/manipulate_organs/internal/mechanic/display_pain(mob/living/target, pain_message, mechanical_surgery = TRUE) + if (target.mob_biotypes & MOB_ROBOTIC) + mechanical_surgery = TRUE + return ..() + +/datum/surgery_step/manipulate_organs/external/mechanic/display_pain(mob/living/target, pain_message, mechanical_surgery = TRUE) + if (target.mob_biotypes & MOB_ROBOTIC) + mechanical_surgery = TRUE + return ..() diff --git a/modular_nova/modules/tableflip/code/flipped_table.dm b/modular_nova/modules/tableflip/code/flipped_table.dm index b3a1fe08e2f..c28e4b32723 100644 --- a/modular_nova/modules/tableflip/code/flipped_table.dm +++ b/modular_nova/modules/tableflip/code/flipped_table.dm @@ -52,10 +52,16 @@ return FALSE user.balloon_alert_to_viewers("flipping table upright...") if(do_after(user, max_integrity * 0.25)) - var/obj/structure/table/new_table = new table_type(src.loc) - new_table.update_integrity(src.get_integrity()) + var/obj/structure/table/unflipped_table = new table_type(src.loc) + unflipped_table.update_integrity(src.get_integrity()) + if(flags_1 & HOLOGRAM_1) // no unflipping holographic tables into reality + var/area/station/holodeck/holo_area = get_area(unflipped_table) + if(!istype(holo_area)) + qdel(unflipped_table) + return + holo_area.linked.add_to_spawned(unflipped_table) if(custom_materials) - new_table.set_custom_materials(custom_materials) + unflipped_table.set_custom_materials(custom_materials) user.balloon_alert_to_viewers("table flipped upright") playsound(src, 'sound/items/trayhit2.ogg', 100) qdel(src) @@ -85,6 +91,12 @@ flipped_table.table_type = src.type if(istype(src, /obj/structure/table/greyscale)) //Greyscale tables need greyscale flags! flipped_table.material_flags = MATERIAL_EFFECTS | MATERIAL_COLOR + if(flags_1 & HOLOGRAM_1) // no flipping holographic tables into reality + var/area/station/holodeck/holo_area = get_area(flipped_table) + if(!istype(holo_area)) + qdel(flipped_table) + return + holo_area.linked.add_to_spawned(flipped_table) //Finally, add the custom materials, so the flags still apply to it flipped_table.set_custom_materials(custom_materials) diff --git a/modular_nova/modules/tarkon/code/clothing/head.dm b/modular_nova/modules/tarkon/code/clothing/head.dm new file mode 100644 index 00000000000..79d3da2a1e1 --- /dev/null +++ b/modular_nova/modules/tarkon/code/clothing/head.dm @@ -0,0 +1,23 @@ +/obj/item/clothing/head/utility/welding/hat + name = "welder's hat" + desc = "A snug fitting flatcap with a wide welding visor" + worn_icon = 'modular_nova/modules/tarkon/icons/mob/clothing/head.dmi' + icon = 'modular_nova/modules/tarkon/icons/obj/clothing/head.dmi' + icon_state = "welderhat" + inhand_icon_state = "" //no unique inhands + flags_cover = HEADCOVERSEYES | HEADCOVERSMOUTH + custom_materials = list( + /datum/material/iron=HALF_SHEET_MATERIAL_AMOUNT*1.75, + /datum/material/glass=SMALL_MATERIAL_AMOUNT * 4, + ) + flash_protect = FLASH_PROTECTION_WELDER + tint = 2 + armor_type = /datum/armor/utility_welding + flags_inv = HIDEEARS|HIDEEYES + actions_types = list(/datum/action/item_action/toggle) + visor_flags_inv = HIDEEARS|HIDEEYES + visor_flags_cover = HEADCOVERSEYES + +/obj/item/clothing/head/utility/welding/hat/Initialize(mapload) + . = ..() + visor_toggling() diff --git a/modular_nova/modules/tarkon/code/clothing/mod.dm b/modular_nova/modules/tarkon/code/clothing/mod.dm new file mode 100644 index 00000000000..d9e0e1f6f92 --- /dev/null +++ b/modular_nova/modules/tarkon/code/clothing/mod.dm @@ -0,0 +1,111 @@ +/datum/mod_theme/tarkon + name = "tarkon" + desc = "A Tarkon Industries general protection suit, designed for port security and general EVA situations." + extended_desc = "A fourth-generational modular protection suit outfitted by Tarkon Industries, This suit is a safety standard for employees undertaking atmos-sensitive protection on jobs. Offering enough protection from impacts to combat most damage from cave-ins, its design has already been debted for saving dozens of employees from hazardous and unpredictable situations in both organic and inorganic forms." + default_skin = "tarkon" + armor_type = /datum/armor/mod_theme_tarkon + complexity_max = DEFAULT_MAX_COMPLEXITY + 5 + charge_drain = DEFAULT_CHARGE_DRAIN * 1.5 + inbuilt_modules = list(/obj/item/mod/module/magboot/advanced) + allowed_suit_storage = list( + /obj/item/flashlight, + /obj/item/tank/internals, + /obj/item/ammo_box, + /obj/item/ammo_casing, + /obj/item/restraints/handcuffs, + /obj/item/assembly/flash, + /obj/item/melee/baton, + /obj/item/knife/combat, + /obj/item/shield/riot, + /obj/item/gun, + ) + skins = list( + "tarkon" = list( + MOD_ICON_OVERRIDE = 'modular_nova/modules/tarkon/icons/obj/clothing/mod.dmi', + MOD_WORN_ICON_OVERRIDE = 'modular_nova/modules/tarkon/icons/mob/clothing/mod.dmi', + HELMET_FLAGS = list( + UNSEALED_LAYER = HEAD_LAYER, + UNSEALED_CLOTHING = SNUG_FIT, + UNSEALED_COVER = HEADCOVERSEYES|PEPPERPROOF, + UNSEALED_INVISIBILITY = HIDEHAIR|HIDEEYES|HIDESNOUT, + SEALED_CLOTHING = THICKMATERIAL|STOPSPRESSUREDAMAGE, + SEALED_INVISIBILITY = HIDEFACIALHAIR|HIDEMASK|HIDEEARS|HIDEEYES|HIDEFACE|HIDEHAIR|HIDESNOUT, + SEALED_COVER = HEADCOVERSMOUTH|HEADCOVERSEYES|PEPPERPROOF, + ), + CHESTPLATE_FLAGS = list( + UNSEALED_CLOTHING = THICKMATERIAL, + SEALED_CLOTHING = STOPSPRESSUREDAMAGE, + SEALED_INVISIBILITY = HIDEJUMPSUIT|HIDETAIL, + ), + GAUNTLETS_FLAGS = list( + UNSEALED_CLOTHING = THICKMATERIAL, + SEALED_CLOTHING = STOPSPRESSUREDAMAGE, + CAN_OVERSLOT = TRUE, + ), + BOOTS_FLAGS = list( + UNSEALED_CLOTHING = THICKMATERIAL, + SEALED_CLOTHING = STOPSPRESSUREDAMAGE, + CAN_OVERSLOT = TRUE, + ), + ), + ) + +/obj/item/mod/construction/plating/tarkon + theme = /datum/mod_theme/tarkon + icon = 'modular_nova/modules/tarkon/icons/obj/mod_construct.dmi' + icon_state = "tarkon-plating" + +/datum/armor/mod_theme_tarkon + melee = 25 + bullet = 15 + laser = 20 + energy = 15 + bomb = 10 + bio = 100 + fire = 100 + acid = 25 + wound = 10 + + +/obj/item/mod/control/pre_equipped/tarkon + theme = /datum/mod_theme/tarkon + applied_modules = list( + /obj/item/mod/module/storage/large_capacity, + /obj/item/mod/module/welding, + /obj/item/mod/module/clamp, + /obj/item/mod/module/tether, + ) + default_pins = list( + /obj/item/mod/module/magboot/advanced, + /obj/item/mod/module/clamp, + /obj/item/mod/module/tether, + ) + +/obj/machinery/suit_storage_unit/industrial/tarkon + mod_type = /obj/item/mod/control/pre_equipped/tarkon + +/////////// Prototype Hauler Suit + + +/datum/mod_theme/prototype/hauler + name = "Prototype: Hauler" + desc = "Bulky and quite heavy, This prototype modular suit has seemed to be modified quite a bit with additional supports to distribute its weight. The servos there within have been modified to handle the additional stress, but the loose wiring required an internal lining of rubberized insulation" + inbuilt_modules = list() + charge_drain = DEFAULT_CHARGE_DRAIN * 3 + siemens_coefficient = 0 + slowdown_active = 1 + +/obj/item/mod/control/pre_equipped/prototype/hauler + theme = /datum/mod_theme/prototype/hauler + req_access = list(ACCESS_TARKON) + applied_cell = /obj/item/stock_parts/cell/high + applied_modules = list( + /obj/item/mod/module/storage/large_capacity, + /obj/item/mod/module/welding, + /obj/item/mod/module/clamp, + /obj/item/mod/module/flashlight, + /obj/item/mod/module/tether, + ) + +/obj/machinery/suit_storage_unit/industrial/hauler + mod_type = /obj/item/mod/control/pre_equipped/prototype/hauler diff --git a/modular_nova/modules/tarkon/code/clothing/neck.dm b/modular_nova/modules/tarkon/code/clothing/neck.dm new file mode 100644 index 00000000000..0e8f3fa4e12 --- /dev/null +++ b/modular_nova/modules/tarkon/code/clothing/neck.dm @@ -0,0 +1,17 @@ +/obj/item/clothing/neck/security_cape/tarkon + name = "tarkon protection gauntlet" + desc = "A full-arm gauntlet used by Tarkon Industries to protect the main tool-arm of its employee's. Not that useful in a real fight, however." + worn_icon = 'modular_nova/modules/tarkon/icons/mob/clothing/neck.dmi' + icon = 'modular_nova/modules/tarkon/icons/obj/clothing/neck.dmi' + icon_state = "armplate_shemaugh" + uses_advanced_reskins = TRUE + unique_reskin = list( + "Caped Variant" = list( + RESKIN_ICON_STATE = "armplate_shemaugh", + RESKIN_WORN_ICON_STATE = "armplate_shemaugh" + ), + "Capeless Variant" = list( + RESKIN_ICON_STATE = "armplate", + RESKIN_WORN_ICON_STATE = "armplate" + ), + ) diff --git a/modular_nova/modules/tarkon/code/clothing/uniform.dm b/modular_nova/modules/tarkon/code/clothing/uniform.dm new file mode 100644 index 00000000000..f93623e62f9 --- /dev/null +++ b/modular_nova/modules/tarkon/code/clothing/uniform.dm @@ -0,0 +1,47 @@ +/obj/item/clothing/under/tarkon + name = "tarkon general uniform" + desc = "A uniform worn by civilian-ranked crew, provided by Tarkon Industries." + icon = 'modular_nova/modules/tarkon/icons/obj/clothing/uniform.dmi' + worn_icon = 'modular_nova/modules/tarkon/icons/mob/clothing/uniform.dmi' + worn_icon_digi = 'modular_nova/modules/tarkon/icons/mob/clothing/uniform_digi.dmi' + icon_state = "tarkon" + body_parts_covered = CHEST|ARMS|GROIN|LEGS + armor_type = /datum/armor/clothing_under/tarkon + +/obj/item/clothing/under/tarkon/cargo + name = "tarkon cargo uniform" + desc = "A uniform worn by cargo-ranked crew, provided by Tarkon Industries." + icon_state = "tarkon_cargo" + +/obj/item/clothing/under/tarkon/sci + name = "tarkon research uniform" + desc = "A uniform worn by research-ranked crew, provided by Tarkon Industries." + icon_state = "tarkon_sci" + +/obj/item/clothing/under/tarkon/sec + name = "tarkon guard uniform" + desc = "A uniform worn by security-ranked crew, provided by Tarkon Industries." + icon_state = "tarkon_sec" + armor_type = /datum/armor/clothing_under/tarkon + +/obj/item/clothing/under/tarkon/med + name = "tarkon medical uniform" + desc = "A uniform worn by medical-ranked crew, provided by Tarkon Industries." + icon_state = "tarkon_med" + +/obj/item/clothing/under/tarkon/eng + name = "tarkon maintenance uniform" + desc = "A uniform worn by maintenance-ranked crew, provided by Tarkon Industries." + icon_state = "tarkon_engi" + +/obj/item/clothing/under/tarkon/com + name = "tarkon command uniform" + desc = "A uniform worn by command-ranked crew, provided by Tarkon Industries." + icon_state = "tarkon_com" + armor_type = /datum/armor/clothing_under/tarkon + +/datum/armor/clothing_under/tarkon + melee = 10 + fire = 50 + acid = 50 + wound = 10 diff --git a/modular_nova/modules/projectiles/code/guns/misc/m6pdw.dm b/modular_nova/modules/tarkon/code/guns/m6pdw.dm similarity index 78% rename from modular_nova/modules/projectiles/code/guns/misc/m6pdw.dm rename to modular_nova/modules/tarkon/code/guns/m6pdw.dm index 201552ae663..36a5446469b 100644 --- a/modular_nova/modules/projectiles/code/guns/misc/m6pdw.dm +++ b/modular_nova/modules/tarkon/code/guns/m6pdw.dm @@ -3,11 +3,11 @@ /obj/item/gun/ballistic/automatic/m6pdw name = "\improper M6 Personal Defense Weapon" desc = "A PDW designed to be used within close to medium range. Its slide seems to stick a bit, having years of dust accumulation, And its manufacturer stamp and symbols have been scratched out." - icon = 'modular_nova/modules/projectiles/icons/m6pdw.dmi' + icon = 'modular_nova/modules/tarkon/icons/obj/guns/m6pdw.dmi' icon_state = "m6_pdw" inhand_icon_state = "m6_pdw" - righthand_file = 'modular_nova/modules/projectiles/icons/inhands/righthand.dmi' - lefthand_file = 'modular_nova/modules/projectiles/icons/inhands/lefthand.dmi' + righthand_file = 'modular_nova/modules/tarkon/icons/mob/inhands/righthand.dmi' + lefthand_file = 'modular_nova/modules/tarkon/icons/mob/inhands/lefthand.dmi' w_class = WEIGHT_CLASS_NORMAL spawnwithmagazine = FALSE accepted_magazine_type = /obj/item/ammo_box/magazine/c35sol_pistol diff --git a/modular_nova/modules/tarkon/code/guns/resonance_disruptor.dm b/modular_nova/modules/tarkon/code/guns/resonance_disruptor.dm new file mode 100644 index 00000000000..1660f239dd9 --- /dev/null +++ b/modular_nova/modules/tarkon/code/guns/resonance_disruptor.dm @@ -0,0 +1,163 @@ +/// Yes. This is a lot of code frankensteining. I am not proud of my work but damned am i proud it works... Atleast if you're seeing this it works. + +/obj/item/gun/energy/recharge/resonant_system + name = "A.R.C.S Resonator" + desc = "The \"Advanced Resonance Control System\" or \"A.R.C.S\" is an advanced, ranged version of a mining resonator. While its main case looks nothing more fancy than a modified proto-kinetic accelerator... One could guess that's not far off the truth. The lugs for a bayonet are missing, but at least you can play with the new adjustment dial on the side." + icon = 'modular_nova/modules/tarkon/icons/misc/ARCS.dmi' + righthand_file = 'modular_nova/modules/tarkon/icons/mob/inhands/righthand.dmi' + lefthand_file = 'modular_nova/modules/tarkon/icons/mob/inhands/lefthand.dmi' + icon_state = "arcs" + base_icon_state = "arcs" + inhand_icon_state = "arcs" + ammo_type = list(/obj/item/ammo_casing/energy/resonance) + item_flags = NONE + obj_flags = UNIQUE_RENAME + weapon_weight = WEAPON_LIGHT + gun_flags = NOT_A_REAL_GUN + /// the mode of the resonator; has three modes: auto (1), manual (2), and matrix (3) + var/mode = RESONATOR_MODE_AUTO + /// How devestating it is in manual mode. Yes, this is all copied from the resonator item + var/quick_burst_mod = 1.3 + /// the number of fields the resonator is allowed to have at once + var/fieldlimit = 5 + /// the list of currently active fields from this resonator + var/list/fields = list() + /// the number that is added to the failure_prob, which is the probability of whether it will spread or not + var/adding_failure = 30 + +/obj/item/gun/energy/recharge/resonant_system/attack_self(mob/user) + if(mode == RESONATOR_MODE_AUTO) + to_chat(user, span_info("You set the resonator's fields to detonate only after you hit one with it.")) + mode = RESONATOR_MODE_MANUAL + else + to_chat(user, span_info("You set the resonator's fields to automatically detonate after 2 seconds.")) + mode = RESONATOR_MODE_AUTO + +/obj/item/gun/energy/recharge/resonant_system/proc/modify_projectile(obj/projectile/resonant_bolt/bolt) //Allows for the resonator mode to activate with the resonator blast. Also copied from PKA code. This is butchered code. + bolt.firing_gun = src //do something special on-hit, easy! + +/obj/item/ammo_casing/energy/resonance + projectile_type = /obj/projectile/resonant_bolt + select_name = "kinetic" + e_cost = LASER_SHOTS(1, STANDARD_CELL_CHARGE * 0.5) + fire_sound = 'sound/weapons/kinetic_accel.ogg' + +/obj/item/ammo_casing/energy/resonance/ready_proj(atom/target, mob/living/user, quiet, zone_override = "") + ..() + if(loc && istype(loc, /obj/item/gun/energy/recharge/resonant_system)) + var/obj/item/gun/energy/recharge/resonant_system/firer = loc + firer.modify_projectile(loaded_projectile) + +/obj/projectile/resonant_bolt + name = "resonating pulse" + icon_state = "pulse1" + damage = 0 //Damage will be done via delayed blast + damage_type = BRUTE + armor_flag = BOMB //Shockwave as opposed to physical mass + range = 6 + log_override = TRUE + var/obj/item/gun/energy/recharge/resonant_system/firing_gun = null //Link to fired gun. Effect purposes. + +/obj/projectile/resonant_bolt/on_hit(atom/target, blocked = 0, pierce_hit) + var/hit_target = FALSE + if(isliving(target)) + var/mob/living/idiot = target + if(idiot.has_status_effect(/datum/status_effect/resonant_link)) + var/datum/status_effect/resonant_link/blaster = idiot.has_status_effect(/datum/status_effect/resonant_link) + blaster.detonate() + blaster.Destroy() + else + var/datum/status_effect/resonant_link/connection = idiot.apply_status_effect(/datum/status_effect/resonant_link, firing_gun) + if(firing_gun) + connection.mode = firing_gun.mode + connection.quick_burst_mod = firing_gun.quick_burst_mod + connection.creator = firer + if(firing_gun.mode == RESONATOR_MODE_AUTO) + connection.duration = world.time + 20 + connection.autodet = TRUE + hit_target = TRUE + var/target_turf = get_turf(target) + var/obj/effect/temp_visual/resonance/resonance_field = locate(/obj/effect/temp_visual/resonance) in target_turf + if(resonance_field) + if(!hit_target) + resonance_field.damage_multiplier = firing_gun.quick_burst_mod + resonance_field.burst() + hit_target = TRUE + return BULLET_ACT_HIT + if(LAZYLEN(firing_gun.fields) < firing_gun.fieldlimit) + if(!hit_target) + new /obj/effect/temp_visual/resonance(target_turf, firer, firing_gun, firing_gun.mode, firing_gun.adding_failure) + return ..() + +/datum/status_effect/resonant_link + id = "resonant_link" + duration = 300 //Resonance can only stay for so long, if it doesn't break from activation + status_type = STATUS_EFFECT_UNIQUE + alert_type = null //Visual cue + general context is enough + processing_speed = STATUS_EFFECT_NORMAL_PROCESS + var/mutable_appearance/marked_underlay //to show that there's an effect + var/obj/item/gun/energy/recharge/resonant_system/firing_gun = null //link to the gun for detonation and linkage purposes + var/damage_name = "resonant_force" + var/mode = null //resonator mode of the gun fired. + var/quick_burst_mod = null //damage modifier based if manual or auto + var/resonance_damage = 15 //damage done. + var/damage_multiplier = 1 //multiplies damage done. + var/mob/creator //links back to firer of gun + var/autodet = FALSE //Will it auto-detonate? + +/datum/status_effect/resonant_link/on_creation(mob/living/new_owner, obj/item/gun/energy/recharge/resonant_system/new_firing_gun) + . = ..() + if(.) + firing_gun = new_firing_gun + +/datum/status_effect/resonant_link/on_apply() + if(owner.mob_size >= MOB_SIZE_SMALL) // needs a minimal mass to resonate with. + if(autodet) + marked_underlay = mutable_appearance('icons/effects/effects.dmi', "shield2") + else + marked_underlay = mutable_appearance('icons/effects/effects.dmi', "shield1") + marked_underlay.pixel_x = -owner.pixel_x + marked_underlay.pixel_y = -owner.pixel_y + owner.underlays += marked_underlay + return TRUE + return FALSE + +/datum/status_effect/resonant_link/on_remove() + . = ..() + if(autodet) + detonate() + +/datum/status_effect/resonant_link/proc/check_pressure(turf/proj_turf) //is the person in low pressure? + if(!proj_turf) + proj_turf = get_turf(owner.loc) + resonance_damage = initial(resonance_damage) + if(lavaland_equipment_pressure_check(proj_turf)) + damage_name = "strong [initial(damage_name)]" + resonance_damage *= 3 + else + damage_name = initial(damage_name) + resonance_damage *= damage_multiplier + +/datum/status_effect/resonant_link/proc/detonate() //applies the damage + SIGNAL_HANDLER + var/turf/src_turf = get_turf(src) + playsound(src_turf, 'sound/weapons/resonator_blast.ogg', 50, TRUE) + check_pressure(src_turf) + if(creator) + log_combat(creator, owner, "used a resonator field on", "resonator") + SEND_SIGNAL(creator, COMSIG_LIVING_RESONATOR_BURST, creator, owner) + to_chat(owner, span_userdanger("[src] detonated with you in it!")) + owner.apply_damage(resonance_damage, BRUTE) + owner.add_movespeed_modifier(/datum/movespeed_modifier/resonance) + addtimer(CALLBACK(owner, TYPE_PROC_REF(/mob, remove_movespeed_modifier), /datum/movespeed_modifier/resonance), 10 SECONDS, TIMER_UNIQUE | TIMER_OVERRIDE | TIMER_DELETE_ME) + +/datum/status_effect/resonant_link/Destroy() + firing_gun = null + if(owner) + owner.underlays -= marked_underlay + QDEL_NULL(marked_underlay) + return ..() + +/datum/status_effect/resonant_link/be_replaced() + owner.underlays -= marked_underlay //if this is being called, we should have an owner at this point + ..() diff --git a/modular_nova/modules/mapping/code/tarkon_atmos_control.dm b/modular_nova/modules/tarkon/code/machines/atmos_control.dm similarity index 99% rename from modular_nova/modules/mapping/code/tarkon_atmos_control.dm rename to modular_nova/modules/tarkon/code/machines/atmos_control.dm index 2183fabb035..fb1e0a98089 100644 --- a/modular_nova/modules/mapping/code/tarkon_atmos_control.dm +++ b/modular_nova/modules/tarkon/code/machines/atmos_control.dm @@ -1,4 +1,4 @@ -// Port Tarkon Atmos Control +/////////////////// Port Tarkon Atmost Control /////////////////// /obj/machinery/computer/atmos_control/tarkon circuit = /obj/item/circuitboard/computer/atmos_control/tarkon diff --git a/modular_nova/modules/tarkon/code/machines/camera_systems.dm b/modular_nova/modules/tarkon/code/machines/camera_systems.dm new file mode 100644 index 00000000000..6fc646e8703 --- /dev/null +++ b/modular_nova/modules/tarkon/code/machines/camera_systems.dm @@ -0,0 +1,32 @@ +/////////////////// Xenobio Cam + control /////////////////// + +/obj/machinery/computer/camera_advanced/xenobio/tarkon + name = "Tarkon Slime management console" + desc = "A computer used for remotely handling slimes. Safety First." + networks = list("tarkon_xenob") + circuit = /obj/item/circuitboard/computer/xenobiology/tarkon + +/obj/item/circuitboard/computer/xenobiology/tarkon + name = "Tarkon Xenobiology Console" + greyscale_colors = CIRCUIT_COLOR_SCIENCE + build_path = /obj/machinery/computer/camera_advanced/xenobio/tarkon + +/obj/machinery/camera/tarkon_xenob + network = list("tarkon_xenob", "tarkon") + dir = 4 + +/////////////////// Security Cam + control /////////////////// + +/obj/machinery/computer/camera_advanced/tarkon_cam + name = "Tarkon Camera Control Console" + networks = list("tarkon") + circuit = /obj/item/circuitboard/computer/tarkon_cam + +/obj/item/circuitboard/computer/tarkon_cam + name = "Tarkon Camera Control Console" + build_path = /obj/machinery/computer/camera_advanced/tarkon_cam + +/obj/machinery/camera/tarkon + network = list("tarkon") + +MAPPING_DIRECTIONAL_HELPERS(/obj/machinery/camera/tarkon, 0) diff --git a/modular_nova/modules/tarkon/code/machines/smes.dm b/modular_nova/modules/tarkon/code/machines/smes.dm new file mode 100644 index 00000000000..140352ec687 --- /dev/null +++ b/modular_nova/modules/tarkon/code/machines/smes.dm @@ -0,0 +1,11 @@ +/////////////////// Smes for roundstart Tarkon + Ship /////////////////// + +/obj/machinery/power/smes/tarkon_backup + charge = 2e6 + output_level = 0 + input_level = 0 + +/obj/machinery/power/smes/tarkon_driver + charge = 3e6 // Wouldn't use much power in dock + input_level = 10000 + output_level = 5000 diff --git a/modular_nova/modules/tarkon/code/machines/windoors.dm b/modular_nova/modules/tarkon/code/machines/windoors.dm new file mode 100644 index 00000000000..943521a3a27 --- /dev/null +++ b/modular_nova/modules/tarkon/code/machines/windoors.dm @@ -0,0 +1,14 @@ +/////////////////// Tarkon Access Windoors /////////////////// +/////////////////// Yes i know these aren't machines /////////////////// + +/obj/machinery/door/window/brigdoor/tarkon + name = "reinforced glass door" + desc = "For keeping a secure view." + req_access = list(ACCESS_TARKON) + +/obj/machinery/door/window/brigdoor/tarkon/right + icon_state = "rightsecure" + base_state = "rightsecure" + +MAPPING_DIRECTIONAL_HELPERS(/obj/machinery/door/window/brigdoor/tarkon/left, 0) +MAPPING_DIRECTIONAL_HELPERS(/obj/machinery/door/window/brigdoor/tarkon/right, 0) diff --git a/modular_nova/modules/tarkon/code/misc_fluff/card.dm b/modular_nova/modules/tarkon/code/misc_fluff/card.dm new file mode 100644 index 00000000000..35442f0dc7d --- /dev/null +++ b/modular_nova/modules/tarkon/code/misc_fluff/card.dm @@ -0,0 +1,112 @@ +/datum/id_trim/away/tarkon + assignment = "P-T Deck Worker" + access = list(ACCESS_AWAY_GENERAL, ACCESS_WEAPONS, ACCESS_TARKON) + department_color = COLOR_WHITE + department_state = "department" + subdepartment_color = COLOR_DARK_CYAN + sechud_icon_state = SECHUD_UNKNOWN + trim_state = "trim_unknown" + +/obj/item/card/id/advanced/tarkon + name = "Tarkon deck access pass" + desc = "A dust-collected visitors pass, A small tagline reading \"Port Tarkon, The first step to Civilian Partnership in Space Homesteading\"." + icon = 'modular_nova/modules/tarkon/icons/misc/card.dmi' + icon_state = "tarkon" + trim = /datum/id_trim/away/tarkon + assigned_icon_state = "assigned_tarkon" + +/datum/id_trim/away/tarkon/cargo + assignment = "P-T Cargo Personnel" + access = list(ACCESS_AWAY_GENERAL, ACCESS_WEAPONS, ACCESS_TARKON) + department_color = COLOR_DARK_BROWN + department_state = "department" + sechud_icon_state = SECHUD_CARGO_TECHNICIAN + trim_state = "trim_cargotechnician" + +/obj/item/card/id/advanced/tarkon/cargo + name = "P-T cargo hauler's access card" + desc = "An access card designated for \"cargo's finest\". You're also a part time space miner, when cargonia is quiet." + trim = /datum/id_trim/away/tarkon/cargo + +/datum/id_trim/away/tarkon/sec + assignment = "P-T Port Guard" + access = list(ACCESS_AWAY_GENERAL, ACCESS_WEAPONS, ACCESS_TARKON) + department_color = COLOR_DARK_RED + sechud_icon_state = SECHUD_SECURITY_OFFICER + trim_state = "trim_securityofficer" + +/datum/id_trim/away/tarkon/med + assignment = "P-T Trauma Medic" + access = list(ACCESS_MEDICAL, ACCESS_AWAY_GENERAL, ACCESS_WEAPONS, ACCESS_TARKON) + department_color = COLOR_MEDICAL_BLUE + sechud_icon_state = SECHUD_MEDICAL_DOCTOR + trim_state = "trim_medicaldoctor" + +/obj/item/card/id/advanced/tarkon/med + name = "P-T trauma medic's access card" + desc = "An access card designated for \"medical staff\". You provide the medic bags." + trim = /datum/id_trim/away/tarkon/med + +/datum/id_trim/away/tarkon/eng + assignment = "P-T Maintenance Crew" + department_color = COLOR_ENGINEERING_ORANGE + sechud_icon_state = SECHUD_STATION_ENGINEER + trim_state = "trim_stationengineer" + +/obj/item/card/id/advanced/tarkon/engi + name = "P-T maintenance engineer's access card" + desc = "An access card designated for \"engineering staff\". You're going to be the one everyone points at to fix stuff, let's be honest." + trim = /datum/id_trim/away/tarkon/eng + +/datum/id_trim/away/tarkon/sci + assignment = "P-T Field Researcher" + access = list(ACCESS_AWAY_GENERAL, ACCESS_WEAPONS, ACCESS_TARKON) + department_color = COLOR_SCIENCE_PINK + sechud_icon_state = SECHUD_SCIENTIST + trim_state = "trim_scientist" + +/obj/item/card/id/advanced/tarkon/sci + name = "P-T field researcher's access card" + desc = "An access card designated for \"the science team\". You are forgotten basically immediately when it comes to the lab." + trim = /datum/id_trim/away/tarkon/sci + +/datum/id_trim/away/tarkon/robo + access = list(ACCESS_ROBOTICS) + +/obj/item/card/id/away/tarkonrobo + name = "Tarkon Robotics Card" + desc = "An access card designed to access robot's access ports, provided by Tarkon Industries." + icon = 'modular_nova/modules/tarkon/icons/misc/card.dmi' + icon_state = "robotics" + trim = /datum/id_trim/away/tarkon/robo + +/datum/id_trim/away/tarkon/ensign + assignment = "Tarkon Ensign" + access = list(ACCESS_MEDICAL, ACCESS_ROBOTICS, ACCESS_AWAY_GENERAL, ACCESS_TARKON, ACCESS_WEAPONS) + department_color = COLOR_COMMAND_BLUE + sechud_icon_state = SECHUD_BLUESHIELD + trim_icon = 'modular_nova/master_files/icons/obj/card.dmi' + trim_state = "trim_blueshield" + +/obj/item/card/id/advanced/tarkon/sec + name = "P-T resident deputy's access card" + desc = "An access card designated for \"security members\". Everyone wants your guns, partner. Yee-haw." + trim = /datum/id_trim/away/tarkon/sec + + +/obj/item/card/id/advanced/tarkon/ensign + name = "Tarkon ensign's access card" + desc = "An access card designated for \"Tarkon ensign\". No one has to listen to you... But you're the closest thing there is to command around here." + trim = /datum/id_trim/away/tarkon/ensign + +/datum/id_trim/away/tarkon/director + assignment = "Tarkon Port Director" + access = list(ACCESS_MEDICAL, ACCESS_ROBOTICS, ACCESS_AWAY_GENERAL, ACCESS_TARKON, ACCESS_WEAPONS) + department_color = COLOR_COMMAND_BLUE + sechud_icon_state = SECHUD_BLUESHIELD + trim_state = "trim_captain" + +/obj/item/card/id/advanced/tarkon/director + name = "Tarkon port director's access card" + desc = "An access card designated for \"Tarkon Port Director\". Its no longer hesitation, only consideration." + trim = /datum/id_trim/away/tarkon/director diff --git a/modular_nova/modules/tarkon/code/misc_fluff/fluff.dm b/modular_nova/modules/tarkon/code/misc_fluff/fluff.dm new file mode 100644 index 00000000000..bacc1d105de --- /dev/null +++ b/modular_nova/modules/tarkon/code/misc_fluff/fluff.dm @@ -0,0 +1,176 @@ +/obj/item/tape/ruins/tarkon //A passing message from the late officer. + name = "dusty tape" + icon_state = "tape_greyscale" + desc = "An old, dusty tape with a small, faded stamp, reading \"Cleanup Chatter.\"... Should definitely be flipped if not being read when played." + + used_capacity = 380 + storedinfo = list( + 1 = "The universal recorder says, \"Recording started.\"", + 2 = "Officer ??? says, \"... Yeesh... Its good we got here when we did...\"", + 3 = "Janitor ??? sighs, \"Could have done sooner... Bloke got at me while i went to repaint the stripe on the floor\"", + 4 = "Officer ??? sighs, \"I still need to talk to the Defense Director about marking the safe code... Its better than in the cell, And the shutters are nice...\"", + 5 = "Janitor ??? scoffs, \"Yeah, Another set of shutter tracks i'll have to clean out so they dont jam up...\"", + 6 = "Officer ??? grumbles, \"If you dont like bucket work, You could go with the mining crew\"", + 7 = "Janitor ??? groans, \"... Atleast it wouldn't be one of the directors cleansing squads. One of the ensigns who got slammed to it started some maddened babbling about \"returning\" something.\"", + 8 = "The universal recorder says, \"Recording stopped.\"" + ) + timestamp = list( + 1 = 0, + 2 = 30, + 3 = 130, + 4 = 180, + 5 = 230, + 6 = 280, + 7 = 330, + 8 = 380 + ) + +/obj/item/tape/ruins/tarkon/safe //Two talk about weird things in the tunnels - shouldn't be in the game yet + icon_state = "tape_greyscale" + desc = "An old tape with a label, \"Exchange with the Science Leader\"... Should definitely be flipped if not being read when played." + + used_capacity = 380 + storedinfo = list( + 1 = "The universal recorder says, \"Recording started.\"", + 2 = "Foreman ??? sighs, \"Right... Research near finish? Need to stash this back between the solar batteries before I sleep..\"", + 3 = "Science Lead ??? says, \"We're getting the atmospheric scans done... Its definitely an odd find.\"", + 4 = "Foreman ??? grumbles, \"We've been finding some weird stuff in those tunnels.. Its a shame the machines framing was broken.\"", + 5 = "Science Lead ??? pauses then sighs out, \"Yeah... Best we could figure from the wreckage was some sort of AI system.. its wiring looked almost organic though-\"", + 6 = "Foreman ??? scoffs, \"... An- AI?\"", + 7 = "Science Lead ??? quips, \"Yes... We have some possible leads to what it- Ah... The scan finished.. I'll forward the notes about that AI to the Defense Director, Right now I need to compile these readings...\"", + 8 = "The universal recorder says, \"Recording stopped.\"" + ) + timestamp = list( + 1 = 0, + 2 = 30, + 3 = 130, + 4 = 180, + 5 = 230, + 6 = 280, + 7 = 330, + 8 = 380 + ) + +/obj/item/tape/ruins/tarkon/celebration //A tape recorded by the ensign during the mid-construction celebration. + icon_state = "tape_greyscale" + desc = "An old tape with a label, \"Celebrations were a mistake\", writen shakily in red pen.. Should definitely be flipped if not being read when played." + + used_capacity = 380 + storedinfo = list( + 1 = "The universal recorder says, \"Recording started.\"", + 2 = "Drinks can be heard clinking together, busy chatter of a party drowning out most noises", + 3 = "Ensign ??? says, \"Hey, HEY! Everyone! Shut up for a toast!\"", + 4 = "The boistrous cheering can be heard slowly calming down to an eerie silence.", + 5 = "Ensign ??? clears their throat then starts to announce, \"As you've all known.. Its been years since this project started... Bright minds and talented engineers hand in hand working on this project...\"", + 6 = "Ensign ??? says pointedly, \"And after five long years, Tarkon Industries has had its first success. The driver finding a suitable asteroid, And making its mark known by carving out the current docking bay for our transport.\"", + 7 = "Ensign ??? announces, \"Yesterday, We've worked, Toiled in the rock and sand of what is our new home... But today! We celebrate, For Tarkons first success, And for a bright future in the next century! The Twenty-Sixth century is looking bright for us!\"", + 8 = "The universal recorder says, \"Recording stopped.\"" + ) + timestamp = list( + 1 = 0, + 2 = 30, + 3 = 130, + 4 = 180, + 5 = 230, + 6 = 280, + 7 = 330, + 8 = 380 + ) + +/* ----------------- Fluff/Paper ----------------- */ + +/obj/item/paper/fluff/ruins/tarkon + name = "paper - 'Engineering Report'" + default_raw_text = "Void Damn the last crew

    Everything was a fucking mess- There was a FUCKING HOLE through the hall to science!
    ,\ +
    THANKFULLY, The new RCD design came in handy... I swear- They might have taken that artifact and gave me something thats arguably worse... ,\ + But, Science reassured that they can replace it if i break it... And they gave me that circuitboard they've been stashing, Set it with the blueprints in the solar SMES safe... ,\ + Felt like a good spot." + +/obj/item/paper/fluff/ruins/tarkon/goals + name = "paper - 'Tarkon Industries'" + default_raw_text = "

    Tarkon Industries Informative Guide



    We at Tarkon Industries hope to create a long guided future for the average homesteader, ,\ + creating a living space for the average spacer to settle down in, create future investments for traders, or even up to get people to make large communities among asteroid belts. ,\ +

    Our greatest engineers have been working day, night, morning and evenings to create a stable, structurally sound system to start implanting stations, ,\ + living areas and ports upon asteroids and planetoids too small to sustain life on the same level that of a goldie-lock planet. ,\ +

    Having great pride in our heritage we have taken our industrious, communicative past to create a future for our kin, ,\ + Inspiring better feats, further research and larger projects upon future generations.

    Looking to help? Then you can visit us at the Tarkon Industries Headquarters, ,\ + The active co-ordinant trail can be detected starting around the Orion Belt, and we are actively accepting bright minds and great workers to help us.

    ,\ +
    Tarkon Industries: Building the future, nail by nail, asteroid by asteroid. 2456-2500(c)" + +/obj/item/paper/fluff/ruins/tarkon/vaulter + name = "paper - 'Tarkon Vaulter'" + default_raw_text = "

    Tarkon Industries Designs:


    Tarkon Vaulter Prototype



    Designed HEAVILY after the Driver, The vaulter is of a similar concept, but at a much larger scale. ,\ + Designed to work on larger planetoids and even moon and similar planetary satellites, The Tarkon Vaulter is another step towards Space Homesteading. Where the Driver and Vaulter split, however, is where the construction system lies. ,\ + With the Vaulter, The construction is much more vertical in construction, starting by usually creating a cavern underneath its landing where a main room is constructed, and shortly after an elevator is deployed.
    ,\ +
    Where the Driver relies on early construction of an additional power system, The vaulter is planned to have a much higher RTG count so that it may power the initial base construction, ,\ + But the cost of which being making it much larger and with a much higher material storage needed so it can construct a decent area of operation on its first trip. With the Driver in its early testing phase, ,\ + We are hoping to better tune its designs before shifting attention towards the driver, which have high hopes to enter testing in the early twenty-sixth century" + +/obj/item/paper/fluff/ruins/tarkon/driverpitch + name = "paper - 'Tarkon Driver'" + default_raw_text = "

    Tarkon Industries Designs:


    Tarkon Driver Prototype



    Seeing the success of space-based mining, ,\ + We at Tarkon Industries wish to expand on the thought of a drill to a much larger goal, By mounting a drill and several cams to secur it in place, ,\ + The Driver is designed to implant itself within the side of a large asteroid or small planetoid, Drilling out an area before the drill can be expanded out and slowly recycled to start construction of an operation base. ,\ +

    With the first area dug the first priority should be an additional energy-producing area, or a portable generator to help fuel energy for future mining, ,\ + Which should be done to slowly hollow out the planetoid and constructing walls, floors and ceilings. After the driver is properly cammed in place, the back part of it can be unhitched, ,\ + allowing it to act as a ferry shuttle for materials, workforce or tools.

    With our first Tarkon Driver being ready to test in 2479, We have found a suitable asteroid, and hope to make connection to it by the start of 2480." + +/obj/item/paper/fluff/ruins/tarkon/detain + name = "paper - 'Tarkon Detainment Record'" + default_raw_text = "

    Tarkon Industries Detainment Record:


    ,\ +
    Detainee:Arcus Vilkov
    Rank/Occupation:Junior Scientist
    Reason: Attemptive sabotage of a working generator
    ,\ +
    Detainee:Tilber Sinns
    Rank/Occupation:Apprentice Miner
    Reason:Detonated a volatile rock cluster close to a wall, Causing 3 hours of reconstruction.
    ,\ +
    Detainee:Gearalt Antonov
    Rank/Occupation:Engineer Specialist
    Reason:Public Intoxication
    ,\ +
    Detainee:Minke Arntz
    Rank/Occupation:Field Researcher
    Reason:Deconstructed an M6 to study the effects of space dust on ballistic firearms.
    ,\ +
    Detainee:Renanta McCrory
    Rank/Occupation:Medical Surgeon
    Reason:Medical Malpractice, Swapped the thumbs of a patient with their big toes. Removed from Premises." + +/obj/item/paper/fluff/ruins/tarkon/scisafe + name = "paper - 'Science safe notice'" + default_raw_text = "Until further notice, we are not handing out the code to the safe.
    ,\ +
    Whoever took the research item is getting their ass thrown to the next cleansing squad.
    ,\ +
    Yes, Its still in the surgery room.
    Yes, its code has been reset." + +/obj/item/paper/fluff/ruins/tarkon/cargosafe + name = "paper - 'Cargo safe note'" + default_raw_text = "Hey... Director wasn't happy about bumping their head on the table trying to check funding, so we moved it into the warehouse. ,\ +
    Check in the owlcove by the air alarm, make sure to paint the tiling when you're finished. ,\ +
    P.S: 50 credits if you can write the code down" + +/obj/item/paper/fluff/ruins/tarkon/sop + name = "paper - 'Tarkon Security S.O.P'" + default_raw_text = "Hey there, lawman. As you might be aware, We dont have full faculties to hold prisoners for long-term storage... ,\ + Atleast not without some governments throwing a shit-fit. So, Here's what we do.

    If someone is tresspassing, We ask where they come from. ,\ + Apparently there's a nearby station, So... Chances are they're from there. Aslong as you dont have to shoot them, You only hold them for questioning.
    ,\ +
    If its one of our own, Well... You'll officially be on Warden duty and have to feed them. Tough shit. You can always ask them if they want thrown to the ,\ + void with whatever they're offered, Just be warned you're on note for anything of major importance.

    Lastly, You aren't to hold people that aren't wanting to be on the port. ,\ + You may take any and every measure to make sure they dont come back if they are let out, Including dropping them in space or at the nearest station." + +/obj/item/paper/fluff/ruins/tarkon/arcs + name = "paper - 'Tarkon Industries' Advanced Resonance Control System'" + default_raw_text = "

    Tarkon Industries Designs:


    Advanced Resonance Control System



    Having used and seen fault with standard 'Resonators' ,\ + We at Tarkon Industries took a look at it and bog-standard mining equipment of the modern day. Having come acrossed a so called \"Proto-kinetic Accelerator\", Our engineers ,\ + got to work deconstructing, reconstructing, modifying and ultimately creating a system we are proud of.

    Capable of switching between self-activating and twin-cycle activation, ,\ + we've made a system that compresses the silicate dusts with-in space to a thin shard capable of transfering vast amounts of energy through \"Piezoelectric Resonance\", ,\ + imbuing the crystal with enough energy that it vibrates at such a briefly stable magnitude, being capable of switching between a self-tearing frequency, ,\ + or a more destructive frequency that requires a second trigger.

    As a safety note: We request that any miners turn the safety on while coming in the station, ,\ + As the brief stability of the shards are capable of transfering their resonant energy to organics." + +/obj/item/paper/fluff/ruins/tarkon/trcd + name = "paper - 'Tarkon Industries' Engineered RCD'" + default_raw_text = "

    Tarkon Industries Designs:


    Advanced R.C.D Design Upgrade



    Being an Industry that deals with Architectural Engineering, Station construction, and Port maintenance; ,\ + We at Tarkon Industries took a look at the tooks we provide, and found them wanting. A standard RCD is capable of not much, And while we couldn't manage to expand their designs to make stronger walls ,\ + (Yet. We strive to improve), We have made a breakthrough with the recent discovery of \"Expansive Quantum Entanglement.\"

    Using bluespace as a vessel for quantum-entangling the RCD's constructing-mechanism, ,\ + we've made a device that's unbound by convenient functioning speeds by creating a quantum-entangled space within the RCD and the desired spot. However, the industrial engineering standard still holds capacity over it.,\ +

    While we're not able to re-create the ranged capabilities or material space of the \"artifact\" we were given ,\ + We have returned it to the cargo hold of the port that has let us analyze it, along with an updated RCD model so that they may put the artifact on display rather than to use." + +/obj/item/paper/fluff/ruins/tarkon/comsafe + name = "paper - 'Command Safe Note'" + default_raw_text = "Heh... I couldn't handle letting those older papers go, something about them reminded me about why I jumped on this job. Even added some of the newer papers up.,\ + The \"Safety of the future\" spiels... Now? Any dingbat can buy their own little constructor in a box... Fancy that we got one ourself, Thing has some handy designs..
    ,\ +
    Well- That asside, we did get some new updated circuit boards. Industry standard gave us two sets of research constructor boards for redundancy, ,\ + So we set the spare set in the special safe within the comms room." + +/obj/item/areaeditor/blueprints/tarkon + desc = "Blueprints of the Tarkon surface breaching drill and several Tarkon base designs. Red, stamped text reads \"Confidential\" on the backside of it." + name = "Tarkon Design Prints" diff --git a/modular_nova/modules/tarkon/code/misc_fluff/radio.dm b/modular_nova/modules/tarkon/code/misc_fluff/radio.dm new file mode 100644 index 00000000000..38e2f6c50e7 --- /dev/null +++ b/modular_nova/modules/tarkon/code/misc_fluff/radio.dm @@ -0,0 +1,10 @@ +/obj/item/radio/headset/tarkon + name = "tarkon headset" + freerange = TRUE + freqlock = TRUE + keyslot = new /obj/item/encryptionkey/headset_cargo/tarkon + +/obj/item/radio/headset/tarkon/command //spoiler for upcoming update + name = "tarkon command headset" + desc = "A headset personally handed to trusted crew of Tarkon. It fills you with the will to do... something." + command = TRUE diff --git a/modular_nova/modules/tarkon/code/misc_fluff/research.dm b/modular_nova/modules/tarkon/code/misc_fluff/research.dm new file mode 100644 index 00000000000..4a4290b62c7 --- /dev/null +++ b/modular_nova/modules/tarkon/code/misc_fluff/research.dm @@ -0,0 +1,114 @@ +///// First we enstate a techweb so we can add the node. ///// + +/datum/techweb/tarkon + id = "TARKON" + organization = "Tarkon Industries" + should_generate_points = TRUE + +/datum/techweb/tarkon/New() + . = ..() + research_node_id("oldstation_surgery", TRUE, TRUE, FALSE) + research_node_id("tarkontech", TRUE, TRUE, FALSE) + +/datum/techweb_node/tarkon + id = "tarkontech" + display_name = "Tarkon Industries Technology" + description = "Tools used by Tarkon Industries." + required_items_to_unlock = list( + /obj/item/mod/construction/plating/tarkon, + /obj/item/construction/rcd/tarkon, + /obj/item/gun/energy/recharge/resonant_system, + ) + design_ids = list( + "mod_plating_tarkon", + "arcs", + "rcd_tarkon" + ) + research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 10000) + hidden = TRUE + +/datum/design/mod_plating/tarkon + name = "MOD Tarkon Plating" + id = "mod_plating_tarkon" + build_path = /obj/item/mod/construction/plating/tarkon + materials = list( + /datum/material/iron = SHEET_MATERIAL_AMOUNT * 3, + /datum/material/uranium = SHEET_MATERIAL_AMOUNT, + /datum/material/glass = HALF_SHEET_MATERIAL_AMOUNT, + /datum/material/plasma = HALF_SHEET_MATERIAL_AMOUNT, + ) + research_icon_state = "tarkon-plating" + research_icon = 'modular_nova/modules/tarkon/icons/obj/mod_construct.dmi' + +/datum/design/arcs + name = "A.R.C.S Resonator" + id = "arcs" + build_type = PROTOLATHE | AWAY_LATHE | AUTOLATHE + materials = list( + /datum/material/iron = SHEET_MATERIAL_AMOUNT * 5, + /datum/material/glass = SHEET_MATERIAL_AMOUNT * 3, + /datum/material/silver = SHEET_MATERIAL_AMOUNT * 2, + /datum/material/uranium = SHEET_MATERIAL_AMOUNT * 2, + /datum/material/diamond = SHEET_MATERIAL_AMOUNT, + ) + build_path = /obj/item/gun/energy/recharge/resonant_system + category = list( + RND_CATEGORY_TOOLS + RND_SUBCATEGORY_TOOLS_MINING + ) + +/datum/design/tarkonrcd + name = "Tarkon R.C.D" + desc = "A Rapid Construction Device made by Tarkon Industries. Capable of ranged construction." + id = "rcd_tarkon" + build_type = PROTOLATHE | AWAY_LATHE + materials = list( + /datum/material/iron = SHEET_MATERIAL_AMOUNT * 30, + /datum/material/glass = SHEET_MATERIAL_AMOUNT * 10, + /datum/material/uranium = SHEET_MATERIAL_AMOUNT * 4, + /datum/material/diamond = SHEET_MATERIAL_AMOUNT * 2, + /datum/material/bluespace = SHEET_MATERIAL_AMOUNT * 3, + ) + build_path = /obj/item/construction/rcd/tarkon + category = list( + RND_CATEGORY_TOOLS + RND_SUBCATEGORY_TOOLS_ENGINEERING_ADVANCED + ) + +///// Now we make the physical server ///// + +/obj/item/circuitboard/machine/rdserver/tarkon + name = "Tarkon Industries R&D Server" + build_path = /obj/machinery/rnd/server/tarkon + +/obj/machinery/rnd/server/tarkon + name = "\improper Tarkon Industries R&D Server" + circuit = /obj/item/circuitboard/machine/rdserver/tarkon + req_access = list(ACCESS_AWAY_SCIENCE) + +/obj/machinery/rnd/server/tarkon/Initialize(mapload) + var/datum/techweb/tarkon_techweb = locate(/datum/techweb/tarkon) in SSresearch.techwebs + stored_research = tarkon_techweb + return ..() + +/obj/machinery/rnd/server/tarkon/examine(mob/user) + . = ..() + . += span_notice("You can use research notes on this to generate research points.") + +/obj/machinery/rnd/server/tarkon/attackby(obj/item/attacking_item, mob/user, params) + if(istype(attacking_item, /obj/item/research_notes) && stored_research) + var/obj/item/research_notes/research_notes = attacking_item + stored_research.add_point_list(list(TECHWEB_POINT_TYPE_GENERIC = research_notes.value)) + playsound(src, 'sound/machines/copier.ogg', 50, TRUE) + qdel(research_notes) + return + return ..() + +/obj/machinery/rnd/production/protolathe/tarkon + name = "Tarkon Industries Protolathe" + desc = "Converts raw materials into useful objects. Refurbished and updated from its previous, limited capabilities." + circuit = /obj/item/circuitboard/machine/protolathe/tarkon + stripe_color = "#350f04" + +/obj/item/circuitboard/machine/protolathe/tarkon + name = "Tarkon Industries Protolathe" + greyscale_colors = CIRCUIT_COLOR_SUPPLY + build_path = /obj/machinery/rnd/production/protolathe/tarkon diff --git a/modular_nova/modules/tarkon/code/misc_fluff/spawner.dm b/modular_nova/modules/tarkon/code/misc_fluff/spawner.dm new file mode 100644 index 00000000000..8937a089b78 --- /dev/null +++ b/modular_nova/modules/tarkon/code/misc_fluff/spawner.dm @@ -0,0 +1,280 @@ +//Port Tarkon, 8 people trapped in a revamped charlie-station like ghost role. Survive the aliens and threats, Fix the port and/or finish construction + +/obj/effect/mob_spawn/ghost_role/human/tarkon + name = "Port Tarkon Crew Member" + prompt_name = "a port deck worker" + icon = 'icons/obj/machines/sleeper.dmi' + icon_state = "sleeper" + you_are_text = "You are a member of Tarkon Industries, recently assigned to a recently recovered asset known as Port Tarkon. Your supervisors are the Ensign and Site Director." + flavour_text = "On the recently reclaimed Port Tarkon, You are tasked to help finish construction and carry on any tasks given by the site director. It may be best to look at your departmental noteboard. (OOC note: This ghost role was not designed with Plasmamen or Vox in mind. While there are some accommodations so that they can survive, it should be noted that they were not the focal point whilst designing Port Tarkon. The closet in the middle of the room above contains the 'accommodations' for those species.)" + important_text = "You are not to abandon Port Tarkon. Check other sleepers for alternative jobs. Listen to the Site Director and Ensign." + outfit = /datum/outfit/tarkon + spawner_job_path = /datum/job/tarkon + loadout_enabled = TRUE + quirks_enabled = TRUE + random_appearance = FALSE + computer_area = /area/ruin/space/has_grav/port_tarkon + +/datum/outfit/tarkon + name = "default port tarkon outfit" + uniform = /obj/item/clothing/under/tarkon + head = /obj/item/clothing/head/utility/welding/hat + back = /obj/item/storage/backpack + shoes = /obj/item/clothing/shoes/winterboots + gloves = /obj/item/clothing/gloves/combat + id = /obj/item/card/id/advanced/tarkon + id_trim = /datum/id_trim/away/tarkon + ears = /obj/item/radio/headset/tarkon + backpack_contents = list( + /obj/item/crowbar = 1 + ) + +/datum/outfit/tarkon/post_equip(mob/living/carbon/human/tarkon, visualsOnly = FALSE) + var/obj/item/card/id/id_card = tarkon.wear_id + if(istype(id_card)) + id_card.registered_name = tarkon.real_name + id_card.update_label() + id_card.update_icon() + var/obj/item/radio/target_radio = tarkon.ears + target_radio.set_frequency(FREQ_TARKON) + target_radio.recalculateChannels() + + handlebank(tarkon) + return ..() + +/obj/effect/mob_spawn/ghost_role/human/tarkon/cargo + prompt_name = "a port salvage tech" + outfit = /datum/outfit/tarkon/cargo + +/datum/outfit/tarkon/cargo + name = "Port Tarkon Cargo Outfit" + uniform = /obj/item/clothing/under/tarkon/cargo + glasses = /obj/item/clothing/glasses/sunglasses + id = /obj/item/card/id/advanced/tarkon/cargo + id_trim = /datum/id_trim/away/tarkon/cargo + l_pocket = /obj/item/mining_voucher + +/obj/effect/mob_spawn/ghost_role/human/tarkon/sci + prompt_name = "a port researcher" + outfit = /datum/outfit/tarkon/sci + +/datum/outfit/tarkon/sci + name = "Port Tarkon Science Outfit" + uniform = /obj/item/clothing/under/tarkon/sci + glasses = /obj/item/clothing/glasses/hud/diagnostic + id = /obj/item/card/id/advanced/tarkon/sci + id_trim = /datum/id_trim/away/tarkon/sci + r_pocket = /obj/item/stock_parts/cell/high + l_pocket = /obj/item/card/id/away/tarkonrobo + +/obj/effect/mob_spawn/ghost_role/human/tarkon/med + prompt_name = "a port trauma medic" + outfit = /datum/outfit/tarkon/med + +/datum/outfit/tarkon/med + name = "Port Tarkon Medical Outfit" + uniform = /obj/item/clothing/under/tarkon/med + glasses = /obj/item/clothing/glasses/hud/health + id = /obj/item/card/id/advanced/tarkon/med + id_trim = /datum/id_trim/away/tarkon/med + neck = /obj/item/clothing/neck/stethoscope + l_pocket = /obj/item/healthanalyzer + r_pocket = /obj/item/stack/medical/suture/medicated + +/obj/effect/mob_spawn/ghost_role/human/tarkon/engi + prompt_name = "a port maintenance engineer" + outfit = /datum/outfit/tarkon/engi + +/datum/outfit/tarkon/engi + name = "Port Tarkon Engineering Outfit" + uniform = /obj/item/clothing/under/tarkon/eng + glasses = /obj/item/clothing/glasses/meson/engine/tray + id = /obj/item/card/id/advanced/tarkon/engi + id_trim = /datum/id_trim/away/tarkon/eng + neck = /obj/item/clothing/neck/security_cape/tarkon + l_pocket = /obj/item/tank/internals/emergency_oxygen/engi + r_pocket = /obj/item/stack/cable_coil + backpack_contents = list( + /obj/item/crowbar = 1, + /obj/item/inducer = 1 + ) + +/obj/effect/mob_spawn/ghost_role/human/tarkon/sec + prompt_name = "a port security member" + outfit = /datum/outfit/tarkon/sec + +/datum/outfit/tarkon/sec + name = "Port Tarkon Security Outfit" + uniform = /obj/item/clothing/under/tarkon/sec + glasses = /obj/item/clothing/glasses/hud/security/redsec + gloves = /obj/item/clothing/gloves/tackler/combat + neck = /obj/item/clothing/neck/security_cape/tarkon + id = /obj/item/card/id/advanced/tarkon/sec + id_trim = /datum/id_trim/away/tarkon/sec + l_pocket = /obj/item/melee/baton/telescopic + r_pocket = /obj/item/grenade/barrier + +/obj/effect/mob_spawn/ghost_role/human/tarkon/ensign + name = "Port Tarkon Ensign" + prompt_name = "an abandoned ensign" + icon = 'icons/obj/machines/sleeper.dmi' + icon_state = "sleeper-o" + you_are_text = "You were tasked by Tarkon Industries to Port Tarkon as a low-level command member. Your superior is the site director." + flavour_text = "Second in command, you are usually tasked with outward missions with other Tarkon members while the site director stays at the port. (OOC note: This ghost role was not designed with Plasmamen or Vox in mind. While there are some accommodations so that they can survive, it should be noted that they were not the focal point whilst designing Port Tarkon. The closet in the middle of the room above contains the 'accommodations' for those species.)" + important_text = "This is Not a job ment for Non-Tarkon specific Characters. You are not to abandon Port Tarkon without reason. You are allowed to travel within available Z-levels and to the station, and are allowed to hold exploration parties." + outfit = /datum/outfit/tarkon/ensign + spawner_job_path = /datum/job/tarkon + +/datum/outfit/tarkon/ensign //jack of all trades, master of none, spent all his credits, every last one + name = "Port Tarkon Ensigns Outfit" + uniform = /obj/item/clothing/under/tarkon/com + ears = /obj/item/radio/headset/tarkon/command + id = /obj/item/card/id/advanced/tarkon/ensign + id_trim = /datum/id_trim/away/tarkon/ensign + neck = /obj/item/clothing/neck/security_cape/tarkon + +/obj/effect/mob_spawn/ghost_role/human/tarkon/director + name = "Port Tarkon Site Director" + prompt_name = "a port site director" + icon = 'icons/obj/machines/sleeper.dmi' + icon_state = "sleeper" + you_are_text = "You are a newly assigned Site Director for Port Tarkon. Your superiors are none except the will of yourself and Tarkon Industries." + flavour_text = "On the recently reclaimed Port Tarkon, You are tasked with overlooking your crew and keeping the port up and running. (OOC note: This ghost role was not designed with Plasmamen or Vox in mind. While there are some accommodations so that they can survive, it should be noted that they were not the focal point whilst designing Port Tarkon. The closet in the middle of the room above contains the 'accommodations' for those species.)" + important_text = "This is Not a job ment for Non-Tarkon specific Characters. You are not to abandon Port Tarkon. Check other sleepers for alternative jobs." + outfit = /datum/outfit/tarkon/director + spawner_job_path = /datum/job/tarkon + loadout_enabled = TRUE + quirks_enabled = TRUE + random_appearance = FALSE + computer_area = /area/ruin/space/has_grav/port_tarkon + +/datum/outfit/tarkon/director //Look at me, I'm the director now. + name = "Port Tarkon Ensigns Outfit" + uniform = /obj/item/clothing/under/tarkon/com + ears = /obj/item/radio/headset/tarkon/command + id = /obj/item/card/id/advanced/tarkon/director + id_trim = /datum/id_trim/away/tarkon/director + neck = /obj/item/clothing/neck/security_cape/tarkon + r_pocket = /obj/item/card/id/away/tarkonrobo + +/obj/machinery/computer/cryopod/tarkon + radio = /obj/item/radio/headset/tarkon + announcement_channel = RADIO_CHANNEL_TARKON + req_one_access = list("tarkon") + +MAPPING_DIRECTIONAL_HELPERS(/obj/machinery/computer/cryopod/tarkon, 32) + +////////////////////// Corpse/Mob Spawners Below + +/datum/outfit/tarkon/loot + name = "Dead Tarkon Ensigns Outfit" + uniform = /obj/item/clothing/under/tarkon/com + ears = /obj/item/radio/headset/tarkon/command + id = /obj/item/card/id/advanced/tarkon/ensign + id_trim = /datum/id_trim/away/tarkon/ensign + neck = /obj/item/clothing/neck/security_cape/tarkon + gloves = /obj/item/clothing/gloves/combat + back = /obj/item/mod/control/pre_equipped/tarkon + backpack_contents = list(/obj/item/trench_tool) + +/obj/effect/mob_spawn/corpse/human/tarkon + icon_state = "corpseminer" + outfit = /datum/outfit/tarkon/loot + +#define ROLE_TARKALIEN "Xenomorph Hive T-35" + +/obj/structure/spawner/tarkon_xenos + name = "infested warren" + desc = "A deep tunnel that goes deeper than any light can reach. A distant roaring could be heard within..." + icon_state = "hole" + icon = 'icons/mob/simple/lavaland/nest.dmi' + max_integrity = 500 + max_mobs = 4 + spawn_time = 30 SECONDS + mob_types = list( + /mob/living/simple_animal/hostile/alien, + /mob/living/simple_animal/hostile/alien/drone, + /mob/living/simple_animal/hostile/alien/sentinel + ) + spawn_text = "crawls out of" + faction = list(ROLE_TARKALIEN) + var/boss_mob = /mob/living/simple_animal/hostile/alien/queen/large + var/loot_drop = /obj/effect/mob_spawn/corpse/human/tarkon + +/obj/structure/spawner/tarkon_xenos/deconstruct(disassembled) + new /obj/effect/nest_break(loc, loot_drop, boss_mob) + return ..() + +/obj/effect/nest_break + name = "collapsing infested nest" + desc = "Stop standing and get clear!" + layer = TABLE_LAYER + icon = 'icons/mob/simple/lavaland/nest.dmi' + icon_state = "hole" + anchored = TRUE + density = TRUE + var/boss_mob //Boss mob that spawns after nest breaking + var/loot_drop //Reward for breaking nest + +/obj/effect/nest_break/proc/rustle() + for(var/mob/shooken in range(7,src)) + shake_camera(shooken, 15, 1) + playsound(get_turf(src),'sound/effects/explosionfar.ogg', 200, TRUE) + visible_message(span_boldannounce("The nest's entrance starts to crumble before something charges forth!")) + new boss_mob(loc) + new loot_drop(loc) + qdel(src) + +/obj/effect/nest_break/Initialize(mapload, loot_drop, boss_mob) + . = ..() + src.loot_drop = loot_drop + src.boss_mob = boss_mob + visible_message(span_boldannounce("The nest rumbles violently as the entrance begins to crack and break apart!")) + playsound(loc,'sound/effects/tendril_destroyed.ogg', 200, FALSE, 50, TRUE, TRUE) + addtimer(CALLBACK(src, PROC_REF(rustle)), 5 SECONDS, TIMER_DELETE_ME) + do_jiggle() + +/obj/structure/spawner/tarkon_xenos/common + name = "infested nest" + desc = "A deep tunnel lined with weeds, something can be heard stirring within..." + icon_state = "hole" + icon = 'icons/mob/simple/lavaland/nest.dmi' + max_integrity = 300 + max_mobs = 2 + spawn_time = 40 SECONDS + boss_mob = /mob/living/simple_animal/hostile/alien/queen + loot_drop = /obj/effect/spawner/random/astrum/sci_loot/tarkon + +/obj/structure/spawner/tarkon_xenos/minor + name = "infested tunnel" + desc = "A tunnel lined with weeds, something can be heard clicking deep within..." + icon_state = "hole" + icon = 'icons/mob/simple/lavaland/nest.dmi' + max_integrity = 150 + max_mobs = 1 + spawn_time = 40 SECONDS + mob_types = list( + /mob/living/simple_animal/hostile/alien, + /mob/living/simple_animal/hostile/alien/drone + ) + boss_mob = /mob/living/simple_animal/hostile/alien/sentinel + loot_drop = /obj/effect/spawner/random/exotic/technology/tarkon + +/obj/effect/spawner/random/astrum/sci_loot/tarkon + name = "abductor scientist loot" + loot = list( + /obj/item/circular_saw/alien = 10, + /obj/item/retractor/alien = 10, + /obj/item/scalpel/alien = 10, + /obj/item/hemostat/alien = 10, + /obj/item/crowbar/abductor = 10, + /obj/item/screwdriver/abductor = 10, + /obj/item/wrench/abductor = 10, + /obj/item/weldingtool/abductor = 10, + /obj/item/crowbar/abductor = 10, + /obj/item/wirecutters/abductor = 10, + /obj/item/multitool/abductor = 10, + ) + +/obj/effect/spawner/random/exotic/technology/tarkon + spawn_loot_count = 1 //we just need one. diff --git a/modular_nova/modules/tarkon/code/misc_fluff/tools.dm b/modular_nova/modules/tarkon/code/misc_fluff/tools.dm new file mode 100644 index 00000000000..f4ede20a487 --- /dev/null +++ b/modular_nova/modules/tarkon/code/misc_fluff/tools.dm @@ -0,0 +1,12 @@ +/obj/item/construction/rcd/tarkon + name = "Tarkon Industries RCD" + desc = "An RCD of an improved design with a \"Tarkon Industries\" logo on it. Reload using metal, glass, or plasteel." + icon = 'modular_nova/modules/tarkon/icons/misc/tools.dmi' + icon_state = "trcd" + righthand_file = 'modular_nova/modules/tarkon/icons/mob/inhands/righthand.dmi' + lefthand_file = 'modular_nova/modules/tarkon/icons/mob/inhands/lefthand.dmi' + canRturf = FALSE //We at tarkon industries believe in "Manual Correction". memorize the Rwall decon sequence and you're hired. + delay_mod = 0.8 //Faster than RCD, Slower than ARCD. + max_matter = 200 //Industrial/Combat RCD is like 500. Its still better than default 160 and wont matter once silo upgraded. also I like properly rounded numbers. + matter = 200 + upgrade = RCD_UPGRADE_FRAMES | RCD_UPGRADE_SIMPLE_CIRCUITS | RCD_UPGRADE_NO_FREQUENT_USE_COOLDOWN diff --git a/modular_nova/modules/tarkon/icons/misc/ARCS.dmi b/modular_nova/modules/tarkon/icons/misc/ARCS.dmi new file mode 100644 index 00000000000..86d40aa75f1 Binary files /dev/null and b/modular_nova/modules/tarkon/icons/misc/ARCS.dmi differ diff --git a/modular_nova/modules/tarkon/icons/misc/card.dmi b/modular_nova/modules/tarkon/icons/misc/card.dmi new file mode 100644 index 00000000000..c55ee6f1b2d Binary files /dev/null and b/modular_nova/modules/tarkon/icons/misc/card.dmi differ diff --git a/modular_nova/modules/tarkon/icons/misc/tools.dmi b/modular_nova/modules/tarkon/icons/misc/tools.dmi new file mode 100644 index 00000000000..dba6330373a Binary files /dev/null and b/modular_nova/modules/tarkon/icons/misc/tools.dmi differ diff --git a/modular_nova/modules/tarkon/icons/mob/clothing/head.dmi b/modular_nova/modules/tarkon/icons/mob/clothing/head.dmi new file mode 100644 index 00000000000..feddf7b3dc8 Binary files /dev/null and b/modular_nova/modules/tarkon/icons/mob/clothing/head.dmi differ diff --git a/modular_nova/modules/tarkon/icons/mob/clothing/mod.dmi b/modular_nova/modules/tarkon/icons/mob/clothing/mod.dmi new file mode 100644 index 00000000000..0daf7041e8e Binary files /dev/null and b/modular_nova/modules/tarkon/icons/mob/clothing/mod.dmi differ diff --git a/modular_nova/modules/tarkon/icons/mob/clothing/neck.dmi b/modular_nova/modules/tarkon/icons/mob/clothing/neck.dmi new file mode 100644 index 00000000000..2a830277fdb Binary files /dev/null and b/modular_nova/modules/tarkon/icons/mob/clothing/neck.dmi differ diff --git a/modular_nova/modules/tarkon/icons/mob/clothing/uniform.dmi b/modular_nova/modules/tarkon/icons/mob/clothing/uniform.dmi new file mode 100644 index 00000000000..b3b644d2151 Binary files /dev/null and b/modular_nova/modules/tarkon/icons/mob/clothing/uniform.dmi differ diff --git a/modular_nova/modules/tarkon/icons/mob/clothing/uniform_digi.dmi b/modular_nova/modules/tarkon/icons/mob/clothing/uniform_digi.dmi new file mode 100644 index 00000000000..4044f793dc2 Binary files /dev/null and b/modular_nova/modules/tarkon/icons/mob/clothing/uniform_digi.dmi differ diff --git a/modular_nova/modules/tarkon/icons/mob/inhands/lefthand.dmi b/modular_nova/modules/tarkon/icons/mob/inhands/lefthand.dmi new file mode 100644 index 00000000000..43436589c60 Binary files /dev/null and b/modular_nova/modules/tarkon/icons/mob/inhands/lefthand.dmi differ diff --git a/modular_nova/modules/tarkon/icons/mob/inhands/righthand.dmi b/modular_nova/modules/tarkon/icons/mob/inhands/righthand.dmi new file mode 100644 index 00000000000..916baf81c8b Binary files /dev/null and b/modular_nova/modules/tarkon/icons/mob/inhands/righthand.dmi differ diff --git a/modular_nova/modules/tarkon/icons/obj/clothing/head.dmi b/modular_nova/modules/tarkon/icons/obj/clothing/head.dmi new file mode 100644 index 00000000000..08e158dfb93 Binary files /dev/null and b/modular_nova/modules/tarkon/icons/obj/clothing/head.dmi differ diff --git a/modular_nova/modules/tarkon/icons/obj/clothing/mod.dmi b/modular_nova/modules/tarkon/icons/obj/clothing/mod.dmi new file mode 100644 index 00000000000..dc06a1bffbc Binary files /dev/null and b/modular_nova/modules/tarkon/icons/obj/clothing/mod.dmi differ diff --git a/modular_nova/modules/tarkon/icons/obj/clothing/neck.dmi b/modular_nova/modules/tarkon/icons/obj/clothing/neck.dmi new file mode 100644 index 00000000000..6e461555956 Binary files /dev/null and b/modular_nova/modules/tarkon/icons/obj/clothing/neck.dmi differ diff --git a/modular_nova/modules/tarkon/icons/obj/clothing/uniform.dmi b/modular_nova/modules/tarkon/icons/obj/clothing/uniform.dmi new file mode 100644 index 00000000000..8c2f03d0daf Binary files /dev/null and b/modular_nova/modules/tarkon/icons/obj/clothing/uniform.dmi differ diff --git a/modular_nova/modules/projectiles/icons/m6pdw.dmi b/modular_nova/modules/tarkon/icons/obj/guns/m6pdw.dmi similarity index 100% rename from modular_nova/modules/projectiles/icons/m6pdw.dmi rename to modular_nova/modules/tarkon/icons/obj/guns/m6pdw.dmi diff --git a/modular_nova/modules/tarkon/icons/obj/mod_construct.dmi b/modular_nova/modules/tarkon/icons/obj/mod_construct.dmi new file mode 100644 index 00000000000..904849927b0 Binary files /dev/null and b/modular_nova/modules/tarkon/icons/obj/mod_construct.dmi differ diff --git a/modular_nova/modules/tesh_augments/code/all_nodes.dm b/modular_nova/modules/tesh_augments/code/all_nodes.dm new file mode 100644 index 00000000000..0358c31ce8c --- /dev/null +++ b/modular_nova/modules/tesh_augments/code/all_nodes.dm @@ -0,0 +1,30 @@ +//teshari_ robolimb research node + +/datum/techweb_node/teshari_cyber + id = "teshari_cyber" + display_name = "Raptoral Cybernetics" + description = "Specialized civilian-grade cybernetic limb designs." + prereq_ids = list("base") + design_ids = list( + "teshari_cyber_chest", + "teshari_cyber_l_arm", + "teshari_cyber_r_arm", + "teshari_cyber_l_leg", + "teshari_cyber_r_leg", + "teshari_cyber_head", + ) + research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 1000) + + +/datum/techweb_node/adv_teshari_cyber + id = "adv_teshari_cyber" + display_name = "Advanced Raptoral Cybernetics" + description = "Specialized industrial-grade cybernetic limb designs." + prereq_ids = list("adv_robotics", "teshari_cyber") + design_ids = list( + "teshari_advanced_l_arm", + "teshari_advanced_r_arm", + "teshari_advanced_l_leg", + "teshari_advanced_r_leg", + ) + research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 500) diff --git a/modular_nova/modules/tesh_augments/code/limbs.dm b/modular_nova/modules/tesh_augments/code/limbs.dm new file mode 100644 index 00000000000..759d7b121e5 --- /dev/null +++ b/modular_nova/modules/tesh_augments/code/limbs.dm @@ -0,0 +1,57 @@ +/* +this goes into the augment preferences section. They do not use the appearance dropdown for obvious reason. +*/ + +/datum/augment_item/limb/head/teshari_cyborg + name = "Raptoral cybernetic head" + path = /obj/item/bodypart/head/robot/teshari + uses_robotic_styles = FALSE + +/datum/augment_item/limb/chest/teshari_cyborg + name = "Raptoral cybernetic chest" + path = /obj/item/bodypart/chest/robot/teshari + uses_robotic_styles = FALSE + +/datum/augment_item/limb/l_arm/teshari_prosthetic + name = "Raptoral prosthetic left forelimb" + path = /obj/item/bodypart/arm/left/robot/teshari_surplus + cost = -1 + uses_robotic_styles = FALSE + +/datum/augment_item/limb/l_arm/teshari_cybernetic + name = "Raptoral cybernetic left forelimb" + path = /obj/item/bodypart/arm/left/robot/teshari + uses_robotic_styles = FALSE + +/datum/augment_item/limb/r_arm/teshari_prosthetic + name = "Raptoral prototype right forelimb" + path = /obj/item/bodypart/arm/right/robot/teshari_surplus + cost = -1 + uses_robotic_styles = FALSE + +/datum/augment_item/limb/r_arm/teshari_cybernetic + name = "Raptoral cybernetic right forelimb" + path = /obj/item/bodypart/arm/right/robot/teshari + uses_robotic_styles = FALSE + +/datum/augment_item/limb/l_leg/teshari_prosthetic + name = "Raptoral prosthetic left hindlimb" + path = /obj/item/bodypart/leg/left/robot/teshari_surplus + cost = -1 + uses_robotic_styles = FALSE + +/datum/augment_item/limb/l_leg/teshari_cybernetic + name = "Raptoral cybernetic left hindlimb" + path = /obj/item/bodypart/leg/left/robot/teshari + uses_robotic_styles = FALSE + +/datum/augment_item/limb/r_leg/teshari_prosthetic + name = "Raptoral prosthetic right hindlimb" + path = /obj/item/bodypart/leg/right/robot/teshari_surplus + cost = -1 + uses_robotic_styles = FALSE + +/datum/augment_item/limb/r_leg/teshari_cybernetic + name = "Raptoral cybernetic right hindlimb" + path = /obj/item/bodypart/leg/right/robot/teshari + uses_robotic_styles = FALSE diff --git a/modular_nova/modules/tesh_augments/code/mechfabricator_designs.dm b/modular_nova/modules/tesh_augments/code/mechfabricator_designs.dm new file mode 100644 index 00000000000..50fdb0865ba --- /dev/null +++ b/modular_nova/modules/tesh_augments/code/mechfabricator_designs.dm @@ -0,0 +1,131 @@ +//adding teshari silicon stuff to the mechfabricator + +#define RND_SUBCATEGORY_MECHFAB_CYBORG_RAPTORAL "/Raptoral" + +/datum/design/teshari_cyber_chest + name = "Raptoral Cybernetic Torso" + id = "teshari_cyber_chest" + build_type = MECHFAB + build_path = /obj/item/bodypart/chest/robot/teshari + materials = list(/datum/material/iron= SHEET_MATERIAL_AMOUNT * 6) + construction_time = 12 SECONDS + category = list( + RND_CATEGORY_MECHFAB_CYBORG + RND_SUBCATEGORY_MECHFAB_CYBORG_RAPTORAL, + ) + +/datum/design/teshari_cyber_head + name = "Raptoral Cybernetic Head" + id = "teshari_cyber_head" + build_type = MECHFAB + build_path = /obj/item/bodypart/head/robot/teshari + materials = list(/datum/material/iron=SHEET_MATERIAL_AMOUNT * 0.75) + construction_time = 4 SECONDS + category = list( + RND_CATEGORY_MECHFAB_CYBORG + RND_SUBCATEGORY_MECHFAB_CYBORG_RAPTORAL, + ) + +/datum/design/teshari_cyber_l_arm + name = "Raptoral Cybernetic Left Forelimb" + id = "teshari_cyber_l_arm" + build_type = MECHFAB + build_path = /obj/item/bodypart/arm/left/robot/teshari + materials = list(/datum/material/iron=SHEET_MATERIAL_AMOUNT * 1.5) + construction_time = 8 SECONDS + category = list( + RND_CATEGORY_MECHFAB_CYBORG + RND_SUBCATEGORY_MECHFAB_CYBORG_RAPTORAL, + ) + +/datum/design/teshari_cyber_r_arm + name = "Raptoral Cybernetic Right Forelimb" + id = "teshari_cyber_r_arm" + build_type = MECHFAB + build_path = /obj/item/bodypart/arm/right/robot/teshari + materials = list(/datum/material/iron = SHEET_MATERIAL_AMOUNT * 1.5) + construction_time = 8 SECONDS + category = list( + RND_CATEGORY_MECHFAB_CYBORG + RND_SUBCATEGORY_MECHFAB_CYBORG_RAPTORAL, + ) + +/datum/design/teshari_cyber_l_leg + name = "Raptoral Cybernetic Left Hindlimb" + id = "teshari_cyber_l_leg" + build_type = MECHFAB + build_path = /obj/item/bodypart/leg/left/robot/teshari + materials = list(/datum/material/iron = SHEET_MATERIAL_AMOUNT * 1.5) + construction_time = 8 SECONDS + category = list( + RND_CATEGORY_MECHFAB_CYBORG + RND_SUBCATEGORY_MECHFAB_CYBORG_RAPTORAL, + ) + +/datum/design/teshari_cyber_r_leg + name = "Raptoral Cybernetic Right Hindlimb" + id = "teshari_cyber_r_leg" + build_type = MECHFAB + build_path = /obj/item/bodypart/leg/right/robot/teshari + materials = list(/datum/material/iron = SHEET_MATERIAL_AMOUNT * 1.5) + construction_time = 8 SECONDS + category = list( + RND_CATEGORY_MECHFAB_CYBORG + RND_SUBCATEGORY_MECHFAB_CYBORG_RAPTORAL, + ) + +//advanced augmentations since those were added in the recent upstream + +/datum/design/teshari_advanced_l_arm + name = "Advanced Raptoral Cybernetic Left Forelimb" + id = "teshari_advanced_l_arm" + build_type = MECHFAB + build_path = /obj/item/bodypart/arm/left/robot/teshari_advanced + materials = list( + /datum/material/iron = SHEET_MATERIAL_AMOUNT * 5, + /datum/material/titanium = SHEET_MATERIAL_AMOUNT * 3, + /datum/material/gold = SHEET_MATERIAL_AMOUNT * 3, + ) + construction_time = 8 SECONDS + category = list( + RND_CATEGORY_MECHFAB_CYBORG + RND_SUBCATEGORY_MECHFAB_CYBORG_RAPTORAL, + ) + +/datum/design/teshari_advanced_r_arm + name = "Advanced Raptoral Cybernetic Right Forelimb" + id = "teshari_advanced_r_arm" + build_type = MECHFAB + build_path = /obj/item/bodypart/arm/right/robot/teshari_advanced + materials = list( + /datum/material/iron = SHEET_MATERIAL_AMOUNT * 5, + /datum/material/titanium = SHEET_MATERIAL_AMOUNT * 3, + /datum/material/gold = SHEET_MATERIAL_AMOUNT * 3, + ) + construction_time = 8 SECONDS + category = list( + RND_CATEGORY_MECHFAB_CYBORG + RND_SUBCATEGORY_MECHFAB_CYBORG_RAPTORAL, + ) + +/datum/design/teshari_advanced_l_leg + name = "Advanced Raptoral Cybernetic Left Hindlimb" + id = "teshari_advanced_l_leg" + build_type = MECHFAB + build_path = /obj/item/bodypart/leg/left/robot/teshari_advanced + materials = list( + /datum/material/iron = SHEET_MATERIAL_AMOUNT * 5, + /datum/material/titanium = SHEET_MATERIAL_AMOUNT * 3, + /datum/material/gold = SHEET_MATERIAL_AMOUNT * 3, + ) + construction_time = 8 SECONDS + category = list( + RND_CATEGORY_MECHFAB_CYBORG + RND_SUBCATEGORY_MECHFAB_CYBORG_RAPTORAL, + ) + +/datum/design/teshari_advanced_r_leg + name = "Advanced Raptoral Cybernetic Right Hindlimb" + id = "teshari_advanced_r_leg" + build_type = MECHFAB + build_path = /obj/item/bodypart/leg/right/robot/teshari_advanced + materials = list( + /datum/material/iron = SHEET_MATERIAL_AMOUNT * 5, + /datum/material/titanium = SHEET_MATERIAL_AMOUNT * 3, + /datum/material/gold = SHEET_MATERIAL_AMOUNT * 3, + ) + construction_time = 8 SECONDS + category = list( + RND_CATEGORY_MECHFAB_CYBORG + RND_SUBCATEGORY_MECHFAB_CYBORG_RAPTORAL, + ) diff --git a/modular_nova/modules/tesh_augments/code/robot_bodyparts.dm b/modular_nova/modules/tesh_augments/code/robot_bodyparts.dm new file mode 100644 index 00000000000..d894847ed62 --- /dev/null +++ b/modular_nova/modules/tesh_augments/code/robot_bodyparts.dm @@ -0,0 +1,403 @@ +#define ROBOTIC_LIGHT_BRUTE_MSG "marred" +#define ROBOTIC_MEDIUM_BRUTE_MSG "dented" +#define ROBOTIC_HEAVY_BRUTE_MSG "falling apart" + +#define ROBOTIC_LIGHT_BURN_MSG "scorched" +#define ROBOTIC_MEDIUM_BURN_MSG "charred" +#define ROBOTIC_HEAVY_BURN_MSG "smoldering" + +/* + The damage modifiers here are modified to stay in line with teshari + Although I'm not sure if it's redundant, better safe than sorry. + */ + +#define TESHARI_PUNCH_LOW 2 +#define TESHARI_PUNCH_HIGH 6 + +//Teshari normal + +/obj/item/bodypart/arm/left/robot/teshari + name = "cybernetic left raptoral forelimb" + desc = "A skeletal limb wrapped in pseudomuscles and membranous feathers, with a low-conductivity case." + icon = 'modular_nova/modules/tesh_augments/icons/augments_teshari.dmi' + icon_static = 'modular_nova/modules/tesh_augments/icons/augments_teshari.dmi' + bodytype = BODYTYPE_HUMANOID | BODYTYPE_ROBOTIC | BODYTYPE_CUSTOM + + unarmed_damage_low = TESHARI_PUNCH_LOW + unarmed_damage_high = TESHARI_PUNCH_HIGH + + brute_modifier = 1 + burn_modifier = 0.9 + +/obj/item/bodypart/arm/right/robot/teshari + name = "cybernetic right raptoral forelimb" + desc = "A skeletal limb wrapped in pseudomuscles and membranous feathers, with a low-conductivity case." + icon_static = 'modular_nova/modules/tesh_augments/icons/augments_teshari.dmi' + icon = 'modular_nova/modules/tesh_augments/icons/augments_teshari.dmi' + bodytype = BODYTYPE_HUMANOID | BODYTYPE_ROBOTIC | BODYTYPE_CUSTOM + + unarmed_damage_low = TESHARI_PUNCH_LOW + unarmed_damage_high = TESHARI_PUNCH_HIGH + + brute_modifier = 1 + burn_modifier = 0.9 + +/obj/item/bodypart/leg/left/robot/teshari + name = "cybernetic left raptoral hindlimb" + desc = "A skeletal limb wrapped in pseudomuscles and membranous feathers, with a low-conductivity case." + icon_static = 'modular_nova/modules/tesh_augments/icons/augments_teshari.dmi' + icon = 'modular_nova/modules/tesh_augments/icons/augments_teshari.dmi' + bodytype = BODYTYPE_HUMANOID | BODYTYPE_ROBOTIC | BODYTYPE_CUSTOM + + unarmed_damage_low = TESHARI_PUNCH_LOW + unarmed_damage_high = TESHARI_PUNCH_HIGH + + brute_modifier = 1 + burn_modifier = 0.9 + +/obj/item/bodypart/leg/right/robot/teshari + name = "cybernetic right raptoral hindlimb" + desc = "A skeletal limb wrapped in pseudomuscles and membranous feathers, with a low-conductivity case." + icon_static = 'modular_nova/modules/tesh_augments/icons/augments_teshari.dmi' + icon = 'modular_nova/modules/tesh_augments/icons/augments_teshari.dmi' + bodytype = BODYTYPE_HUMANOID | BODYTYPE_ROBOTIC | BODYTYPE_CUSTOM + + unarmed_damage_low = TESHARI_PUNCH_LOW + unarmed_damage_high = TESHARI_PUNCH_HIGH + + brute_modifier = 1 + burn_modifier = 0.9 + +/obj/item/bodypart/chest/robot/teshari + name = "cybernetic raptoral torso" + desc = "A heavily reinforced case containing cyborg logic boards, with space for a standard power cell, covered in a layer of membranous feathers." + icon_static = 'modular_nova/modules/tesh_augments/icons/augments_teshari.dmi' + icon = 'modular_nova/modules/tesh_augments/icons/augments_teshari.dmi' + bodytype = BODYTYPE_HUMANOID | BODYTYPE_ROBOTIC | BODYTYPE_CUSTOM + + brute_modifier = 1 + burn_modifier = 0.9 + + robotic_emp_paralyze_damage_percent_threshold = 0.5 + +/obj/item/bodypart/head/robot/teshari + name = "cybernetic raptoral head" + desc = "A standard reinforced braincase, with spine-plugged neural socket and sensor gimbals. A layer of membranous feathers covers the stark metal." + icon_static = 'modular_nova/modules/tesh_augments/icons/augments_teshari.dmi' + icon = 'modular_nova/modules/tesh_augments/icons/augments_teshari.dmi' + bodytype = BODYTYPE_HUMANOID | BODYTYPE_ROBOTIC | BODYTYPE_CUSTOM + + unarmed_damage_low = TESHARI_PUNCH_LOW + unarmed_damage_high = TESHARI_PUNCH_HIGH + + brute_modifier = 1 + burn_modifier = 0.9 + + head_flags = HEAD_EYESPRITES + +// teshari_ surplus + +/obj/item/bodypart/arm/left/robot/teshari_surplus + name = "prosthetic left raptoral forelimb" + desc = "A skeletal, robotic wing. Outdated and fragile, but it's still better than nothing. A layer of membranous feathers hides the cheap assembly." + icon_static = 'modular_nova/modules/tesh_augments/icons/surplus_augments_teshari.dmi' + icon = 'modular_nova/modules/tesh_augments/icons/surplus_augments_teshari.dmi' + bodytype = BODYTYPE_HUMANOID | BODYTYPE_ROBOTIC | BODYTYPE_CUSTOM + + + unarmed_damage_low = TESHARI_PUNCH_LOW * 0.3 + unarmed_damage_high = TESHARI_PUNCH_HIGH * 0.5 + + brute_modifier = 1.25 + burn_modifier = 1.2 + + max_damage = LIMB_MAX_HP_PROSTHESIS + body_damage_coeff = LIMB_BODY_DAMAGE_COEFFICIENT_PROSTHESIS + + biological_state = (BIO_METAL|BIO_JOINTED) + +/obj/item/bodypart/arm/right/robot/teshari_surplus + name = "prosthetic right raptoral forelimb" + desc = "A skeletal, robotic wing. Outdated and fragile, but it's still better than nothing. A layer of membranous feathers hides the cheap assembly." + icon_static = 'modular_nova/modules/tesh_augments/icons/surplus_augments_teshari.dmi' + icon = 'modular_nova/modules/tesh_augments/icons/surplus_augments_teshari.dmi' + bodytype = BODYTYPE_HUMANOID | BODYTYPE_ROBOTIC | BODYTYPE_CUSTOM + + unarmed_damage_low = TESHARI_PUNCH_LOW * 0.3 + unarmed_damage_high = TESHARI_PUNCH_HIGH * 0.5 + + brute_modifier = 1.25 + burn_modifier = 1.2 + + max_damage = LIMB_MAX_HP_PROSTHESIS + body_damage_coeff = LIMB_BODY_DAMAGE_COEFFICIENT_PROSTHESIS + + biological_state = (BIO_METAL|BIO_JOINTED) + +/obj/item/bodypart/leg/left/robot/teshari_surplus + name = "prosthetic left raptoral hindlimb" + desc = "A skeletal, robotic hindlimb. Outdated and fragile, but it's still better than nothing. A layer of membranous feathers hides the cheap assembly." + icon_static = 'modular_nova/modules/tesh_augments/icons/surplus_augments_teshari.dmi' + icon = 'modular_nova/modules/tesh_augments/icons/surplus_augments_teshari.dmi' + bodytype = BODYTYPE_HUMANOID | BODYTYPE_ROBOTIC | BODYTYPE_CUSTOM + + unarmed_damage_low = TESHARI_PUNCH_LOW * 0.3 + unarmed_damage_high = TESHARI_PUNCH_HIGH * 0.5 + + brute_modifier = 1.25 + burn_modifier = 1.2 + + max_damage = LIMB_MAX_HP_PROSTHESIS + body_damage_coeff = LIMB_BODY_DAMAGE_COEFFICIENT_PROSTHESIS + + biological_state = (BIO_METAL|BIO_JOINTED) + +/obj/item/bodypart/leg/right/robot/teshari_surplus + name = "prosthetic right raptoral hindlimb" + desc = "A skeletal, robotic hindlimb. Outdated and fragile, but it's still better than nothing. A layer of membranous feathers hides the cheap assembly." + icon_static = 'modular_nova/modules/tesh_augments/icons/surplus_augments_teshari.dmi' + icon = 'modular_nova/modules/tesh_augments/icons/surplus_augments_teshari.dmi' + bodytype = BODYTYPE_HUMANOID | BODYTYPE_ROBOTIC | BODYTYPE_CUSTOM + + unarmed_damage_low = TESHARI_PUNCH_LOW * 0.3 + unarmed_damage_high = TESHARI_PUNCH_HIGH * 0.5 + + brute_modifier = 1.25 + burn_modifier = 1.2 + + max_damage = LIMB_MAX_HP_PROSTHESIS + body_damage_coeff = LIMB_BODY_DAMAGE_COEFFICIENT_PROSTHESIS + + biological_state = (BIO_METAL|BIO_JOINTED) + +/obj/item/bodypart/arm/left/robot/teshari_surplus + name = "prosthetic left raptoral forelimb" + desc = "A skeletal, robotic wing. Outdated and fragile, but it's still better than nothing. A layer of membranous feathers hides the cheap assembly." + icon_static = 'modular_nova/modules/tesh_augments/icons/surplus_augments_teshari.dmi' + icon = 'modular_nova/modules/tesh_augments/icons/surplus_augments_teshari.dmi' + bodytype = BODYTYPE_HUMANOID | BODYTYPE_ROBOTIC | BODYTYPE_CUSTOM + + unarmed_damage_low = TESHARI_PUNCH_LOW * 0.3 + unarmed_damage_high = TESHARI_PUNCH_HIGH * 0.5 + + brute_modifier = 1.25 + burn_modifier = 1.2 + + max_damage = LIMB_MAX_HP_PROSTHESIS + body_damage_coeff = LIMB_BODY_DAMAGE_COEFFICIENT_PROSTHESIS + + biological_state = (BIO_METAL|BIO_JOINTED) + +/obj/item/bodypart/arm/right/robot/teshari_surplus + name = "prosthetic right raptoral forelimb" + desc = "A skeletal, robotic wing. Outdated and fragile, but it's still better than nothing. A layer of membranous feathers hides the cheap assembly." + icon_static = 'modular_nova/modules/tesh_augments/icons/surplus_augments_teshari.dmi' + icon = 'modular_nova/modules/tesh_augments/icons/surplus_augments_teshari.dmi' + bodytype = BODYTYPE_HUMANOID | BODYTYPE_ROBOTIC | BODYTYPE_CUSTOM + + unarmed_damage_low = TESHARI_PUNCH_LOW * 0.3 + unarmed_damage_high = TESHARI_PUNCH_HIGH * 0.5 + + brute_modifier = 1.25 + burn_modifier = 1.2 + + max_damage = LIMB_MAX_HP_PROSTHESIS + + body_damage_coeff = LIMB_BODY_DAMAGE_COEFFICIENT_PROSTHESIS + + + biological_state = (BIO_METAL|BIO_JOINTED) + +/obj/item/bodypart/leg/left/robot/teshari_surplus + name = "prosthetic left raptoral hindlimb" + desc = "A skeletal, robotic hindlimb. Outdated and fragile, but it's still better than nothing. A layer of membranous feathers hides the cheap assembly." + icon_static = 'modular_nova/modules/tesh_augments/icons/surplus_augments_teshari.dmi' + icon = 'modular_nova/modules/tesh_augments/icons/surplus_augments_teshari.dmi' + bodytype = BODYTYPE_HUMANOID | BODYTYPE_ROBOTIC | BODYTYPE_CUSTOM + + unarmed_damage_low = TESHARI_PUNCH_LOW * 0.3 + unarmed_damage_high = TESHARI_PUNCH_HIGH * 0.5 + + brute_modifier = 1.25 + burn_modifier = 1.2 + + max_damage = LIMB_MAX_HP_PROSTHESIS + + body_damage_coeff = LIMB_BODY_DAMAGE_COEFFICIENT_PROSTHESIS + + biological_state = (BIO_METAL|BIO_JOINTED) + +/obj/item/bodypart/leg/right/robot/teshari_surplus + name = "prosthetic right raptoral hindlimb" + desc = "A skeletal, robotic hindlimb. Outdated and fragile, but it's still better than nothing. A layer of membranous feathers hides the cheap assembly." + icon_static = 'modular_nova/modules/tesh_augments/icons/surplus_augments_teshari.dmi' + icon = 'modular_nova/modules/tesh_augments/icons/surplus_augments_teshari.dmi' + bodytype = BODYTYPE_HUMANOID | BODYTYPE_ROBOTIC | BODYTYPE_CUSTOM + + unarmed_damage_low = TESHARI_PUNCH_LOW * 0.3 + unarmed_damage_high = TESHARI_PUNCH_HIGH * 0.5 + + brute_modifier = 1.25 + burn_modifier = 1.2 + + max_damage = LIMB_MAX_HP_PROSTHESIS + body_damage_coeff = LIMB_BODY_DAMAGE_COEFFICIENT_PROSTHESIS + + biological_state = (BIO_METAL|BIO_JOINTED) + +// teshari_ advanced + +/obj/item/bodypart/arm/left/robot/teshari_advanced + name = "advanced left raptoral forelimb" + desc = "An advanced robotic hindlimb. These designs are usually reserved for those still on the search for Avalon." + icon_static = 'modular_nova/modules/tesh_augments/icons/advanced_augments_teshari.dmi' + icon = 'modular_nova/modules/tesh_augments/icons/advanced_augments_teshari.dmi' + bodytype = BODYTYPE_HUMANOID | BODYTYPE_ROBOTIC | BODYTYPE_CUSTOM + + unarmed_damage_low = TESHARI_PUNCH_LOW * 2 + unarmed_damage_high = TESHARI_PUNCH_HIGH * 3 + + brute_modifier = 0.8 + burn_modifier = 1 + + max_damage = LIMB_MAX_HP_ADVANCED + body_damage_coeff = LIMB_BODY_DAMAGE_COEFFICIENT_ADVANCED + + biological_state = (BIO_METAL|BIO_JOINTED) + +/obj/item/bodypart/arm/right/robot/teshari_advanced + name = "advanced right raptoral forelimb" + desc = "An advanced robotic hindlimb. These designs are usually reserved for those still on the search for Avalon." + icon_static = 'modular_nova/modules/tesh_augments/icons/advanced_augments_teshari.dmi' + icon = 'modular_nova/modules/tesh_augments/icons/advanced_augments_teshari.dmi' + bodytype = BODYTYPE_HUMANOID | BODYTYPE_ROBOTIC | BODYTYPE_CUSTOM + + unarmed_damage_low = TESHARI_PUNCH_LOW * 2 + unarmed_damage_high = TESHARI_PUNCH_HIGH * 3 + + brute_modifier = 0.8 + burn_modifier = 1 + + max_damage = LIMB_MAX_HP_ADVANCED + body_damage_coeff = LIMB_BODY_DAMAGE_COEFFICIENT_ADVANCED + + biological_state = (BIO_METAL|BIO_JOINTED) + +/obj/item/bodypart/leg/left/robot/teshari_advanced + name = "advanced left raptoral hindlimb" + desc = "An advanced robotic hindlimb. These designs are usually reserved for those still on the search for Avalon." + icon_static = 'modular_nova/modules/tesh_augments/icons/advanced_augments_teshari.dmi' + icon = 'modular_nova/modules/tesh_augments/icons/advanced_augments_teshari.dmi' + bodytype = BODYTYPE_HUMANOID | BODYTYPE_ROBOTIC | BODYTYPE_CUSTOM + + unarmed_damage_low = TESHARI_PUNCH_LOW * 2 + unarmed_damage_high = TESHARI_PUNCH_HIGH * 3 + + brute_modifier = 0.8 + burn_modifier = 1 + + max_damage = LIMB_MAX_HP_ADVANCED + body_damage_coeff = LIMB_BODY_DAMAGE_COEFFICIENT_ADVANCED + + biological_state = (BIO_METAL|BIO_JOINTED) + +/obj/item/bodypart/leg/right/robot/teshari_advanced + name = "advanced right raptoral hindlimb" + desc = "An advanced robotic hindlimb. These designs are usually reserved for those still on the search for Avalon." + icon_static = 'modular_nova/modules/tesh_augments/icons/advanced_augments_teshari.dmi' + icon = 'modular_nova/modules/tesh_augments/icons/advanced_augments_teshari.dmi' + bodytype = BODYTYPE_HUMANOID | BODYTYPE_ROBOTIC | BODYTYPE_CUSTOM + + unarmed_damage_low = TESHARI_PUNCH_LOW * 2 + unarmed_damage_high = TESHARI_PUNCH_HIGH * 3 + + brute_modifier = 0.8 + burn_modifier = 1 + + max_damage = LIMB_MAX_HP_ADVANCED + body_damage_coeff = LIMB_BODY_DAMAGE_COEFFICIENT_ADVANCED + + biological_state = (BIO_METAL|BIO_JOINTED) + +/obj/item/bodypart/arm/left/robot/teshari_advanced + name = "advanced left raptoral forelimb" + desc = "An advanced robotic hindlimb. These designs are usually reserved for those still on the search for Avalon." + icon_static = 'modular_nova/modules/tesh_augments/icons/advanced_augments_teshari.dmi' + icon = 'modular_nova/modules/tesh_augments/icons/advanced_augments_teshari.dmi' + bodytype = BODYTYPE_HUMANOID | BODYTYPE_ROBOTIC | BODYTYPE_CUSTOM + + unarmed_damage_low = TESHARI_PUNCH_LOW * 2 + unarmed_damage_high = TESHARI_PUNCH_HIGH * 3 + + brute_modifier = 1 + burn_modifier = 0.9 + + max_damage = LIMB_MAX_HP_ADVANCED + body_damage_coeff = LIMB_BODY_DAMAGE_COEFFICIENT_ADVANCED + + biological_state = (BIO_METAL|BIO_JOINTED) + +/obj/item/bodypart/arm/right/robot/teshari_advanced + name = "advanced right raptoral forelimb" + desc = "An advanced robotic hindlimb. These designs are usually reserved for those still on the search for Avalon." + icon_static = 'modular_nova/modules/tesh_augments/icons/advanced_augments_teshari.dmi' + icon = 'modular_nova/modules/tesh_augments/icons/advanced_augments_teshari.dmi' + bodytype = BODYTYPE_HUMANOID | BODYTYPE_ROBOTIC | BODYTYPE_CUSTOM + + unarmed_damage_low = TESHARI_PUNCH_LOW * 2 + unarmed_damage_high = TESHARI_PUNCH_HIGH * 3 + + brute_modifier = 1 + burn_modifier = 0.9 + + max_damage = LIMB_MAX_HP_ADVANCED + body_damage_coeff = LIMB_BODY_DAMAGE_COEFFICIENT_ADVANCED + + biological_state = (BIO_METAL|BIO_JOINTED) + +/obj/item/bodypart/leg/left/robot/teshari_advanced + name = "advanced left raptoral hindlimb" + desc = "An advanced robotic hindlimb. These designs are usually reserved for those still on the search for Avalon." + icon_static = 'modular_nova/modules/tesh_augments/icons/advanced_augments_teshari.dmi' + icon = 'modular_nova/modules/tesh_augments/icons/advanced_augments_teshari.dmi' + bodytype = BODYTYPE_HUMANOID | BODYTYPE_ROBOTIC | BODYTYPE_CUSTOM + + unarmed_damage_low = TESHARI_PUNCH_LOW * 2 + unarmed_damage_high = TESHARI_PUNCH_HIGH * 3 + + brute_modifier = 1 + burn_modifier = 0.9 + + max_damage = LIMB_MAX_HP_ADVANCED + body_damage_coeff = LIMB_BODY_DAMAGE_COEFFICIENT_ADVANCED + + biological_state = (BIO_METAL|BIO_JOINTED) + +/obj/item/bodypart/leg/right/robot/teshari_advanced + name = "advanced right raptoral hindlimb" + desc = "An advanced robotic hindlimb. These designs are usually reserved for those still on the search for Avalon." + icon_static = 'modular_nova/modules/tesh_augments/icons/advanced_augments_teshari.dmi' + icon = 'modular_nova/modules/tesh_augments/icons/advanced_augments_teshari.dmi' + bodytype = BODYTYPE_HUMANOID | BODYTYPE_ROBOTIC | BODYTYPE_CUSTOM + + unarmed_damage_low = TESHARI_PUNCH_LOW * 2 + unarmed_damage_high = TESHARI_PUNCH_HIGH * 3 + + brute_modifier = 1 + burn_modifier = 0.9 + + max_damage = LIMB_MAX_HP_ADVANCED + body_damage_coeff = LIMB_BODY_DAMAGE_COEFFICIENT_ADVANCED + + biological_state = (BIO_METAL|BIO_JOINTED) + +#undef ROBOTIC_LIGHT_BRUTE_MSG +#undef ROBOTIC_MEDIUM_BRUTE_MSG +#undef ROBOTIC_HEAVY_BRUTE_MSG + +#undef ROBOTIC_LIGHT_BURN_MSG +#undef ROBOTIC_MEDIUM_BURN_MSG +#undef ROBOTIC_HEAVY_BURN_MSG + +#undef TESHARI_PUNCH_LOW +#undef TESHARI_PUNCH_HIGH diff --git a/modular_nova/modules/tesh_augments/icons/advanced_augments_teshari.dmi b/modular_nova/modules/tesh_augments/icons/advanced_augments_teshari.dmi new file mode 100644 index 00000000000..4f0c65c2d33 Binary files /dev/null and b/modular_nova/modules/tesh_augments/icons/advanced_augments_teshari.dmi differ diff --git a/modular_nova/modules/tesh_augments/icons/augments_teshari.dmi b/modular_nova/modules/tesh_augments/icons/augments_teshari.dmi new file mode 100644 index 00000000000..310336182fc Binary files /dev/null and b/modular_nova/modules/tesh_augments/icons/augments_teshari.dmi differ diff --git a/modular_nova/modules/tesh_augments/icons/sbipc_raptor.dmi b/modular_nova/modules/tesh_augments/icons/sbipc_raptor.dmi new file mode 100644 index 00000000000..09c792e0b4c Binary files /dev/null and b/modular_nova/modules/tesh_augments/icons/sbipc_raptor.dmi differ diff --git a/modular_nova/modules/tesh_augments/icons/surplus_augments_teshari.dmi b/modular_nova/modules/tesh_augments/icons/surplus_augments_teshari.dmi new file mode 100644 index 00000000000..3863b2a12da Binary files /dev/null and b/modular_nova/modules/tesh_augments/icons/surplus_augments_teshari.dmi differ diff --git a/modular_nova/modules/tesh_augments/readme.md b/modular_nova/modules/tesh_augments/readme.md new file mode 100644 index 00000000000..b43ce34148a --- /dev/null +++ b/modular_nova/modules/tesh_augments/readme.md @@ -0,0 +1,5 @@ +/* +teshari_ cybernetics +all done by aKhromatopsia +that's all +*/ diff --git a/modular_nova/modules/xenoarch/code/modules/research/xenoarch/xenoarch_machine.dm b/modular_nova/modules/xenoarch/code/modules/research/xenoarch/xenoarch_machine.dm index 92166f6d018..445ecf98950 100644 --- a/modular_nova/modules/xenoarch/code/modules/research/xenoarch/xenoarch_machine.dm +++ b/modular_nova/modules/xenoarch/code/modules/research/xenoarch/xenoarch_machine.dm @@ -1,3 +1,5 @@ +// Researcher, Scanner, Recoverer, and Digger + /obj/machinery/xenoarch icon = 'modular_nova/modules/xenoarch/icons/xenoarch_machines.dmi' density = TRUE @@ -5,124 +7,158 @@ use_power = IDLE_POWER_USE idle_power_usage = 100 pass_flags = PASSTABLE - ///The speed in which the machine will process each item - var/process_speed = 20 SECONDS - ///The efficacy that affects the process_speed. Start at -1 so tier 1 parts are efficacy of 0 - var/efficiency = -1 - ///The holding storage for the items inserted into the machines - var/obj/item/holding_storage - ///The time comparison, to make sure the machine doesn't perform faster than it should - var/world_compare = 0 - -/obj/machinery/xenoarch/RefreshParts() - . = ..() - efficiency = -1 - for(var/datum/stock_part/micro_laser/laser_part in component_parts) - efficiency += laser_part.tier - process_speed = initial(process_speed) - (6 SECONDS * efficiency) + /// the item that holds everything + var/obj/item/storage_unit + ///how long between each process + var/process_speed = 10 SECONDS + COOLDOWN_DECLARE(process_delay) /obj/machinery/xenoarch/Initialize(mapload) . = ..() - holding_storage = new /obj/item(src) + storage_unit = new /obj/item(src) /obj/machinery/xenoarch/Destroy() - qdel(holding_storage) + QDEL_NULL(storage_unit) + return ..() + +/obj/machinery/xenoarch/RefreshParts() . = ..() + var/efficiency = -2 //to allow t1 parts to not change the base speed + for(var/datum/stock_part/stockpart in component_parts) + efficiency += stockpart.tier + + process_speed = initial(process_speed) - (efficiency) + +/obj/machinery/xenoarch/process() + if(machine_stat & (NOPOWER|BROKEN) || !anchored) + COOLDOWN_RESET(src, process_delay) //if you are broken or no power (or not anchored), you aren't allowed to progress! + return + + if(!COOLDOWN_FINISHED(src, process_delay)) + return + + COOLDOWN_START(src, process_delay, process_speed) + xenoarch_process() -/obj/machinery/xenoarch/proc/do_machine_process() +/obj/machinery/xenoarch/proc/xenoarch_process() return -/obj/machinery/xenoarch/proc/insert_xeno_item(obj/item/insert_item, mob/living/user) - insert_item.forceMove(holding_storage) - playsound(src, 'sound/machines/click.ogg', 50, TRUE) - to_chat(user, span_notice("The [insert_item] has been inserted into [src].")) - world_compare = world.time + process_speed - addtimer(CALLBACK(src, PROC_REF(do_machine_process)), process_speed) +/obj/machinery/xenoarch/wrench_act(mob/living/user, obj/item/tool) + . = ..() + + if(default_unfasten_wrench(user, tool)) + return ITEM_INTERACT_SUCCESS -/obj/machinery/xenoarch/attack_hand(mob/living/user, list/modifiers) +/obj/machinery/xenoarch/screwdriver_act(mob/living/user, obj/item/tool) . = ..() - var/src_turf = get_turf(src) - var/user_choice = tgui_alert(user, "Are you sure you want to remove all the items?", "Remove Items?", list("Yes", "No")) - if(user_choice != "Yes") - return - for(var/move_out_item in holding_storage.contents) - if(!isobj(move_out_item)) - continue - var/obj/move_out_obj = move_out_item - move_out_obj.forceMove(src_turf) -/obj/machinery/xenoarch/examine(mob/user) + toggle_panel_open() + to_chat(user, span_notice("You [panel_open ? "open":"close"] the maintenance panel of [src].")) + tool.play_tool_sound(src) + return ITEM_INTERACT_SUCCESS + +/obj/machinery/xenoarch/crowbar_act(mob/living/user, obj/item/tool) . = ..() - if(holding_storage?.contents.len) - var/is_singular = holding_storage.contents.len == 1 ? TRUE : FALSE - . += span_notice("There [is_singular ? "is" : "are"] [holding_storage.contents.len] [is_singular ? "item" : "items"] currently in the buffer.") - . += span_warning("You can remove the contents, but the machine is currently trying to process the items!") + + if(default_deconstruction_crowbar(tool)) + return ITEM_INTERACT_SUCCESS /obj/machinery/xenoarch/researcher name = "xenoarch researcher" desc = "A machine that is used to condense strange rocks, useless relics, and broken objects into bigger artifacts." icon_state = "researcher" circuit = /obj/item/circuitboard/machine/xenoarch_machine/xenoarch_researcher - ///A variable that goes from 0 to 150. Depending on what is processed, increases the value. Once at or above 150, spawns an anomalous crystal. + /// the amount of research that is currently done var/current_research = 0 + /// the max amount of value we can have + var/max_research = 300 + /// the value of each accepted item + var/list/accepted_types = list( + /obj/item/xenoarch/strange_rock = 1, + /obj/item/xenoarch/useless_relic = 5, + /obj/item/xenoarch/useless_relic/magnified = 10, + /obj/item/xenoarch/broken_item = 10, + ) /obj/machinery/xenoarch/researcher/examine(mob/user) . = ..() - . += span_notice("[current_research]/150 research points. Research more xenoarchaeological items.") + + . += span_notice("
    [current_research]/[max_research] research available.") + . += span_notice("L-Click to insert items or take out all the strange rocks. R-Click to use research points.") /obj/machinery/xenoarch/researcher/attackby(obj/item/weapon, mob/user, params) if(istype(weapon, /obj/item/storage/bag/xenoarch)) - var/obj/item/storage/bag/xenoarch/xenoarch_bag = weapon - for(var/check_item in xenoarch_bag.contents) - if(!istype(check_item, /obj/item/xenoarch/strange_rock)) - continue - var/obj/item/xenoarch/strange_rock/strange_rock = check_item - if(!do_after(user, xenoarch_bag.insert_speed, target = src)) - world_compare = world.time + process_speed - addtimer(CALLBACK(src, PROC_REF(do_machine_process)), process_speed) - return - strange_rock.forceMove(holding_storage) - to_chat(user, span_notice("The strange rock has been inserted into [src].")) - world_compare = world.time + process_speed - addtimer(CALLBACK(src, PROC_REF(do_machine_process)), process_speed) + for(var/obj/strange_rocks in weapon.contents) + strange_rocks.forceMove(storage_unit) + + balloon_alert(user, "rocks inserted!") return - if(istype(weapon, /obj/item/xenoarch/strange_rock)) - insert_xeno_item(weapon, user) + + if(is_type_in_list(weapon, accepted_types)) + weapon.forceMove(storage_unit) + balloon_alert(user, "item inserted!") return - if(istype(weapon, /obj/item/xenoarch/useless_relic)) - insert_xeno_item(weapon, user) + + return ..() + +/obj/machinery/xenoarch/researcher/attack_hand(mob/living/user, list/modifiers) + . = ..() + var/choice = tgui_input_list(user, "Remove the rocks from [src]?", "Rock Removal", list("Yes", "No")) + if(choice != "Yes") return - if(istype(weapon, /obj/item/xenoarch/broken_item)) - insert_xeno_item(weapon, user) + var/turf/src_turf = get_turf(src) + for(var/obj/item/removed_item in storage_unit.contents) + removed_item.forceMove(src_turf) + + balloon_alert(user, "items removed!") + +/obj/machinery/xenoarch/researcher/attack_hand_secondary(mob/user, list/modifiers) + . = ..() + var/turf/src_turf = get_turf(src) + var/choice = tgui_input_list(user, "Choose which reward you would like!", "Reward Choice", list("Lavaland Chest (150)", "Anomalous Crystal (150)", "Bepis Tech (100)")) + if(!choice) + return SECONDARY_ATTACK_CANCEL_ATTACK_CHAIN + + switch(choice) + if("Lavaland Chest (150)") + if(current_research < 150) + balloon_alert(user, "insufficient research!") + return SECONDARY_ATTACK_CANCEL_ATTACK_CHAIN + + current_research -= 150 + new /obj/structure/closet/crate/necropolis/tendril(src_turf) + + if("Anomalous Crystal (150)") + if(current_research < 150) + balloon_alert(user, "insufficient research!") + return SECONDARY_ATTACK_CANCEL_ATTACK_CHAIN + + current_research -= 150 + var/list/choices = subtypesof(/obj/machinery/anomalous_crystal) + var/random_crystal = pick(choices) + new random_crystal(src_turf) + + if("Bepis Tech (100)") + if(current_research < 100) + balloon_alert(user, "insufficient research!") + return SECONDARY_ATTACK_CANCEL_ATTACK_CHAIN + + current_research -= 100 + new /obj/item/disk/design_disk/bepis/remove_tech(src_turf) + + return SECONDARY_ATTACK_CANCEL_ATTACK_CHAIN + +/obj/machinery/xenoarch/researcher/xenoarch_process() + if(length(storage_unit.contents) <= 0) return - return ..() -/obj/machinery/xenoarch/researcher/do_machine_process() - if(!holding_storage.contents.len) - return - if(world_compare > world.time) - return - var/obj/item/remove_item = holding_storage.contents[1] - if(!remove_item) - return - if(!istype(remove_item, /obj/item/xenoarch/strange_rock) && !istype(remove_item, /obj/item/xenoarch/useless_relic) && !istype(remove_item, /obj/item/xenoarch/broken_item)) - qdel(remove_item) - return - if(istype(remove_item, /obj/item/xenoarch/strange_rock)) - current_research += 1 - if(istype(remove_item, /obj/item/xenoarch/useless_relic)) - current_research += 5 - if(istype(remove_item, /obj/item/xenoarch/broken_item)) - current_research += 10 - if(current_research >= 150) - current_research -= 150 - var/list/choices = subtypesof(/obj/machinery/anomalous_crystal) - var/random_crystal = pick(choices) - new random_crystal(get_turf(src)) - qdel(remove_item) - playsound(src, 'sound/machines/click.ogg', 50, TRUE) - world_compare = world.time + process_speed - addtimer(CALLBACK(src, PROC_REF(do_machine_process)), process_speed) + if(current_research >= max_research) + return + + var/obj/item/first_item = storage_unit.contents[1] + var/reward_attempt = accepted_types[first_item.type] + current_research = min(current_research + reward_attempt, 300) + qdel(first_item) /obj/machinery/xenoarch/scanner name = "xenoarch scanner" @@ -131,17 +167,22 @@ circuit = /obj/item/circuitboard/machine/xenoarch_machine/xenoarch_scanner /obj/machinery/xenoarch/scanner/attackby(obj/item/weapon, mob/user, params) - var/scan_speed = 4 SECONDS - (1 SECONDS * efficiency) + if(istype(weapon, /obj/item/storage/bag/xenoarch)) + for(var/obj/item/xenoarch/strange_rock/chosen_rocks in weapon.contents) + chosen_rocks.get_scanned() + + balloon_alert(user, "scan complete!") + return + if(istype(weapon, /obj/item/xenoarch/strange_rock)) - var/obj/item/xenoarch/strange_rock/strange_rock = weapon - if(!do_after(user, scan_speed, target = src)) - to_chat(user, span_warning("You interrupt the scanning process, aborting process.")) - return - if(strange_rock.get_scanned()) - to_chat(user, span_notice("You successfully scan the strange rock. It will now report its depth in real time!")) + var/obj/item/xenoarch/strange_rock/chosen_rock + if(chosen_rock.get_scanned()) + balloon_alert(user, "scan complete!") return - to_chat(user, span_warning("The strange rock was unable to be scanned, perhaps it has already been scanned?")) + + to_chat(user, span_warning("[chosen_rock] was unable to be scanned, perhaps it was already scanned?")) return + return ..() /obj/machinery/xenoarch/recoverer @@ -150,106 +191,123 @@ icon_state = "recoverer" circuit = /obj/item/circuitboard/machine/xenoarch_machine/xenoarch_recoverer +/obj/machinery/xenoarch/recoverer/examine(mob/user) + . = ..() + . += span_notice("
    L-Click to remove all items inside [src].") + /obj/machinery/xenoarch/recoverer/attackby(obj/item/weapon, mob/user, params) if(istype(weapon, /obj/item/xenoarch/broken_item)) - insert_xeno_item(weapon, user) + weapon.forceMove(storage_unit) + balloon_alert(user, "item inserted!") return - return ..() -/obj/machinery/xenoarch/recoverer/proc/recover_item(obj/insert_obj, obj/delete_obj) - var/src_turf = get_turf(src) - new insert_obj(src_turf) - playsound(src, 'sound/machines/click.ogg', 50, TRUE) - qdel(delete_obj) - world_compare = world.time + process_speed - addtimer(CALLBACK(src, PROC_REF(do_machine_process)), process_speed) + return ..() -/obj/machinery/xenoarch/recoverer/do_machine_process() - if(!holding_storage.contents.len) - return - if(world_compare > world.time) +/obj/machinery/xenoarch/recoverer/attack_hand(mob/living/user, list/modifiers) + var/choice = tgui_input_list(user, "Remove the broken items from [src]?", "Item Removal", list("Yes", "No")) + if(choice != "Yes") return - var/obj/item/content_obj = holding_storage.contents[1] - if(!content_obj) + + var/turf/src_turf = get_turf(src) + for(var/obj/item/removed_item in storage_unit.contents) + removed_item.forceMove(src_turf) + + balloon_alert(user, "items removed!") + +/obj/machinery/xenoarch/recoverer/xenoarch_process() + var/turf/src_turf = get_turf(src) + if(length(storage_unit.contents) <= 0) return + + var/obj/item/content_obj = storage_unit.contents[1] if(!istype(content_obj, /obj/item/xenoarch/broken_item)) qdel(content_obj) return + if(istype(content_obj, /obj/item/xenoarch/broken_item/tech)) var/spawn_item = pick_weight(GLOB.tech_reward) recover_item(spawn_item, content_obj) return + if(istype(content_obj, /obj/item/xenoarch/broken_item/weapon)) var/spawn_item = pick_weight(GLOB.weapon_reward) recover_item(spawn_item, content_obj) return + if(istype(content_obj, /obj/item/xenoarch/broken_item/illegal)) var/spawn_item = pick_weight(GLOB.illegal_reward) recover_item(spawn_item, content_obj) return + if(istype(content_obj, /obj/item/xenoarch/broken_item/alien)) var/spawn_item = pick_weight(GLOB.alien_reward) recover_item(spawn_item, content_obj) return + if(istype(content_obj, /obj/item/xenoarch/broken_item/plant)) var/spawn_item = pick_weight(GLOB.plant_reward) recover_item(spawn_item, content_obj) return + if(istype(content_obj, /obj/item/xenoarch/broken_item/clothing)) var/spawn_item = pick_weight(GLOB.clothing_reward) recover_item(spawn_item, content_obj) return + if(istype(content_obj, /obj/item/xenoarch/broken_item/animal)) var/spawn_item - var/turf/src_turf = get_turf(src) for(var/looptime in 1 to rand(1,4)) spawn_item = pick_weight(GLOB.animal_reward) new spawn_item(src_turf) + recover_item(spawn_item, content_obj) return +/obj/machinery/xenoarch/recoverer/proc/recover_item(obj/insert_obj, obj/delete_obj) + var/src_turf = get_turf(src) + new insert_obj(src_turf) + playsound(src, 'sound/machines/click.ogg', 50, TRUE) + qdel(delete_obj) + /obj/machinery/xenoarch/digger name = "xenoarch digger" desc = "A machine that is used to slowly uncover items within strange rocks." icon_state = "digger" circuit = /obj/item/circuitboard/machine/xenoarch_machine/xenoarch_digger +/obj/machinery/xenoarch/digger/examine(mob/user) + . = ..() + . += span_notice("
    L-Click to remove all items inside [src].") + /obj/machinery/xenoarch/digger/attackby(obj/item/weapon, mob/user, params) if(istype(weapon, /obj/item/storage/bag/xenoarch)) - var/obj/item/storage/bag/xenoarch/xenoarch_bag = weapon - for(var/check_item in xenoarch_bag.contents) - if(!istype(check_item, /obj/item/xenoarch/strange_rock)) - continue - var/obj/item/xenoarch/strange_rock/strange_rock = check_item - if(!do_after(user, 1 SECONDS, target = src)) - world_compare = world.time + (process_speed * 4) - addtimer(CALLBACK(src, PROC_REF(do_machine_process)), (process_speed * 4)) - return - strange_rock.forceMove(holding_storage) - to_chat(user, span_notice("The strange rock has been inserted into [src].")) - world_compare = world.time + (process_speed * 4) - addtimer(CALLBACK(src, PROC_REF(do_machine_process)), (process_speed * 4)) - return - else if(istype(weapon, /obj/item/xenoarch/strange_rock)) - insert_xeno_item(weapon, user) + for(var/obj/strange_rocks in weapon.contents) + strange_rocks.forceMove(storage_unit) + + balloon_alert(user, "rocks inserted!") return - return ..() -/obj/machinery/xenoarch/digger/do_machine_process() - if(!holding_storage.contents.len) + if(istype(weapon, /obj/item/xenoarch/strange_rock)) + weapon.forceMove(src) + balloon_alert(user, "rock inserted!") return - if(world_compare > world.time) + +/obj/machinery/xenoarch/digger/attack_hand(mob/living/user, list/modifiers) + var/choice = tgui_input_list(user, "Remove the rocks from [src]?", "Rock Removal", list("Yes", "No")) + if(choice != "Yes") return + var/turf/src_turf = get_turf(src) - var/obj/item/content_obj = holding_storage.contents[1] - if(!content_obj) - return - if(!istype(content_obj, /obj/item/xenoarch/strange_rock)) - qdel(content_obj) + for(var/obj/item/removed_item in storage_unit.contents) + removed_item.forceMove(src_turf) + + balloon_alert(user, "items removed!") + +/obj/machinery/xenoarch/digger/xenoarch_process() + var/turf/src_turf = get_turf(src) + if(length(storage_unit.contents) <= 0) return - var/obj/item/xenoarch/strange_rock/strange_rock = content_obj - new strange_rock.hidden_item(src_turf) - playsound(src, 'sound/machines/click.ogg', 50, TRUE) - qdel(strange_rock) - world_compare = world.time + (process_speed * 4) - addtimer(CALLBACK(src, PROC_REF(do_machine_process)), (process_speed * 4)) + + var/obj/item/xenoarch/strange_rock/first_item = storage_unit.contents[1] + new first_item.hidden_item(src_turf) + qdel(first_item) diff --git a/modular_nova/modules/xenos_nova_redo/code/base_nova_xeno.dm b/modular_nova/modules/xenos_nova_redo/code/base_nova_xeno.dm index 23da1039ada..9b3c91d0b49 100644 --- a/modular_nova/modules/xenos_nova_redo/code/base_nova_xeno.dm +++ b/modular_nova/modules/xenos_nova_redo/code/base_nova_xeno.dm @@ -191,30 +191,19 @@ mind.transfer_to(xeno_to_transfer_to) qdel(src) -/mob/living/carbon/alien/adult/nova/update_fire_overlay(stacks, on_fire, last_icon_state, suffix = "") - var/fire_icon = "generic_fire[suffix]" +/mob/living/carbon/alien/adult/nova/get_fire_overlay(stacks, on_fire) + var/fire_icon = "generic_fire" if(!GLOB.fire_appearances[fire_icon]) - var/mutable_appearance/xeno_fire_overlay = mutable_appearance('icons/mob/effects/onfire.dmi', fire_icon, -FIRE_LAYER, appearance_flags = RESET_COLOR) - xeno_fire_overlay.pixel_x = on_fire_pixel_x - xeno_fire_overlay.pixel_y = on_fire_pixel_y - GLOB.fire_appearances[fire_icon] = xeno_fire_overlay - - if((stacks > 0 && on_fire) || HAS_TRAIT(src, TRAIT_PERMANENTLY_ONFIRE)) - if(fire_icon == last_icon_state) - return last_icon_state - - remove_overlay(FIRE_LAYER) - overlays_standing[FIRE_LAYER] = GLOB.fire_appearances[fire_icon] - apply_overlay(FIRE_LAYER) - return fire_icon - - if(!last_icon_state) - return last_icon_state - - remove_overlay(FIRE_LAYER) - apply_overlay(FIRE_LAYER) - return null + var/mutable_appearance/new_fire_overlay = mutable_appearance( + 'icons/mob/effects/onfire.dmi', + fire_icon, + -HIGHEST_LAYER, + appearance_flags = RESET_COLOR, + ) + GLOB.fire_appearances[fire_icon] = new_fire_overlay + + return GLOB.fire_appearances[fire_icon] /mob/living/carbon/alien/adult/nova/findQueen() //Yes we really do need to do this whole thing to let the queen finder work if(hud_used) diff --git a/rust_g.dll b/rust_g.dll index cfb52ffc65a..30f63e72f4b 100644 Binary files a/rust_g.dll and b/rust_g.dll differ diff --git a/sound/attributions.txt b/sound/attributions.txt index 9cbe56eb3ee..82486a5735d 100644 --- a/sound/attributions.txt +++ b/sound/attributions.txt @@ -114,7 +114,26 @@ https://freesound.org/people/junggle/sounds/28917/ https://freesound.org/people/inferno/sounds/18397/ https://freesound.org/people/humanoide9000/sounds/330293/ +reel1.ogg, reel2.ogg, reel3.ogg, reel4.ogg and reel5.ogg adapted from pixabay. Free for use under the Pixabay Content License (https://pixabay.com/service/license-summary/): +https://pixabay.com/sound-effects/reel-78063/ + throw.ogg, throwhard.ogg and throwsoft.ogg (Royalty-Free and Copyright-Free) are adapted from Jam FX, SmartSound FX and Epic Stock Media in : https://uppbeat.io/sfx/whoosh-swift-cut/7727/23617 https://uppbeat.io/sfx/whoosh-air-punch/114/1168 https://uppbeat.io/sfx/throwing-item-swing/9430/25267 + +rock_break.ogg is taken from Bertsz's Rock Destroy from Freesound.org, CC0: +https://freesound.org/people/Bertsz/sounds/524312/ + +sonar-ping.ogg and radar-ping is taken and modified from SamsterBirdies' Sonar Ping from Freesound.org, CC0: +https://freesound.org/people/SamsterBirdies/sounds/539957/ + +manual_teleport.ogg is taken from Quetzakol's teleport from Freesound.org, CC0: +https://freesound.org/people/Quetzakol/sounds/520743/ + +auto_teleport.ogg is taken from Steaq's A teleportation from Freesound.org, CC0: +https://freesound.org/people/steaq/sounds/560124/ + +refinery.ogg, smelter.ogg, and wooping_teleport.ogg are all original works by ArcaneMusic, +with smelter.ogg using samples from rock_break alongside original sound effects from a warrior electric drill, +where refinery and wooping_teleport are modifications of that same electric drill recording. diff --git a/sound/effects/rock_break.ogg b/sound/effects/rock_break.ogg new file mode 100644 index 00000000000..09f6b1d5d33 Binary files /dev/null and b/sound/effects/rock_break.ogg differ diff --git a/sound/items/reel1.ogg b/sound/items/reel1.ogg new file mode 100644 index 00000000000..0bd2cda89b9 Binary files /dev/null and b/sound/items/reel1.ogg differ diff --git a/sound/items/reel2.ogg b/sound/items/reel2.ogg new file mode 100644 index 00000000000..64d2bc1adb4 Binary files /dev/null and b/sound/items/reel2.ogg differ diff --git a/sound/items/reel3.ogg b/sound/items/reel3.ogg new file mode 100644 index 00000000000..a1d89779ec1 Binary files /dev/null and b/sound/items/reel3.ogg differ diff --git a/sound/items/reel4.ogg b/sound/items/reel4.ogg new file mode 100644 index 00000000000..ae9bdb2f5e3 Binary files /dev/null and b/sound/items/reel4.ogg differ diff --git a/sound/items/reel5.ogg b/sound/items/reel5.ogg new file mode 100644 index 00000000000..6c979754a5f Binary files /dev/null and b/sound/items/reel5.ogg differ diff --git a/sound/machines/mining/auto_teleport.ogg b/sound/machines/mining/auto_teleport.ogg new file mode 100644 index 00000000000..a8fe669e865 Binary files /dev/null and b/sound/machines/mining/auto_teleport.ogg differ diff --git a/sound/machines/mining/manual_teleport.ogg b/sound/machines/mining/manual_teleport.ogg new file mode 100644 index 00000000000..b011ef91e65 Binary files /dev/null and b/sound/machines/mining/manual_teleport.ogg differ diff --git a/sound/machines/mining/refinery.ogg b/sound/machines/mining/refinery.ogg new file mode 100644 index 00000000000..fdae21f9a30 Binary files /dev/null and b/sound/machines/mining/refinery.ogg differ diff --git a/sound/machines/mining/smelter.ogg b/sound/machines/mining/smelter.ogg new file mode 100644 index 00000000000..b1d65f3bd20 Binary files /dev/null and b/sound/machines/mining/smelter.ogg differ diff --git a/sound/machines/mining/wooping_teleport.ogg b/sound/machines/mining/wooping_teleport.ogg new file mode 100644 index 00000000000..edf5eb57b43 Binary files /dev/null and b/sound/machines/mining/wooping_teleport.ogg differ diff --git a/sound/machines/radar-ping.ogg b/sound/machines/radar-ping.ogg new file mode 100644 index 00000000000..d6fd0000d1a Binary files /dev/null and b/sound/machines/radar-ping.ogg differ diff --git a/sound/machines/sonar-ping.ogg b/sound/machines/sonar-ping.ogg new file mode 100644 index 00000000000..c69d4352095 Binary files /dev/null and b/sound/machines/sonar-ping.ogg differ diff --git a/strings/antagonist_flavor/traitor_flavor.json b/strings/antagonist_flavor/traitor_flavor.json index 93da8d01374..773d2f55370 100644 --- a/strings/antagonist_flavor/traitor_flavor.json +++ b/strings/antagonist_flavor/traitor_flavor.json @@ -111,5 +111,13 @@ "roundend_report": "was a terrorist from Waffle Corporation.", "ui_theme": "syndicate", "uplink": "You have been provided with a standard uplink to accomplish your task." + }, + "Contractor Support Unit": { + "allies": "You are being sent to help your designated agent. Their allegiences are above all others.", + "goal": "Help your designated agent to the furtest extent you can, their life is above your own.", + "introduction": "You are the Contractor Support Agent.", + "roundend_report": "was a contractor support agent.", + "ui_theme": "syndicate", + "uplink": "You do not come with your own uplink, defer to your agent." } } diff --git a/strings/modular_maps/nova/PortTarkon.toml b/strings/modular_maps/nova/PortTarkon.toml index 9baaff9387c..5b503d9c6e3 100644 --- a/strings/modular_maps/nova/PortTarkon.toml +++ b/strings/modular_maps/nova/PortTarkon.toml @@ -1,4 +1,10 @@ directory = "_maps/RandomRuins/SpaceRuins/nova/port_tarkon/" -[rooms.port] -modules = ["defcon5.dmm", "defcon4.dmm", "defcon3.dmm", "defcon2.dmm"] +[rooms.xeno] +modules = ["xeno_safe.dmm", "xeno_dead.dmm", "xeno_nest.dmm"] + +[rooms.cargo] +modules = ["cargo_stock.dmm", "cargo_warehouse.dmm", "cargo_secure.dmm"] + +[rooms.dorm] +modules = ["dorm_classic.dmm", "dorm_cabin.dmm", "dorm_party.dmm"] diff --git a/strings/names/cargorilla.txt b/strings/names/cargorilla.txt new file mode 100644 index 00000000000..ec135f5ca4d --- /dev/null +++ b/strings/names/cargorilla.txt @@ -0,0 +1,7 @@ +Cala +Cerchak +Citrus +Coco +Grodd +Paperwork +Winston diff --git a/strings/nova/long_modular_laser.json b/strings/nova/long_modular_laser.json new file mode 100644 index 00000000000..a81c62b55b1 --- /dev/null +++ b/strings/nova/long_modular_laser.json @@ -0,0 +1,102 @@ +{ + "pickup": [ + "Welcome back, @pick(operator).", + "Zǎo shàng hǎo.", + "Wǎn shàng hǎo.", + "Charge systems operational, entering combat mode.", + "@pick(operator), carp migrations have been reported in the sector.", + "@pick(operator), having a pleasant day?", + "@pick(operator), please maintain good health while performing combat.", + "@pick(operator), are you sure I'm not too heavy for you?", + "Would you mind cleaning my lens later, @pick(operator)?" + ], + + "putdown": [ + "Understood, @pick(operator), entering sleep mode.", + "Good night, @pick(operator).", + "Wǎn`ān, hǎo mèng.", + "Dàjiā ān.", + "Good night.", + "Entering sleep mode now.", + "Entering recharge cycle." + ], + + "worn": [ + "Working on your strength will help you keep me steady.", + "Investing in backup magnetic slings is a good idea...", + "Thank you for observing proper carrying protocols.", + "I get a nicer view of your surroundings if you point my barrel upwards.", + "I'll watch your back if you watch my stock.", + "So much nicer than being in a case~!" + ], + + "lowcharge": [ + "Energy reserves low, I can't do much more @pick(operator)...", + "I'm out... sorry @pick(operator), I need to rest..." + ], + + "fullcharge": [ + "Energy reserves at maximum capacity! Please avoid accidental discharge.", + "Energy reserves at maximum capacity! Please follow safety guidelines.", + "Energy reserves at maximum capacity! It's nice to not be left at half-charge." + ], + + "combatmode": [ + "Biological markers indicate heightened stress response. Combat protocols initiated.", + "Adrenaline spike detected. Combat protocols initiated." + ], + + "kill": [ + "Switching to burst fire.", + "Switching to rapid-pattern assault.", + "Moving to dual-shot pattern.", + "Moving to close-quarters burst doctrine, lethal.", + "@pick(operator), please tightly control my recoil pattern.", + "@pick(operator), please hold me firmly to ensure accuracy." + ], + + "sniper": [ + "Sighting in, scope extending.", + "Sighting in, preparing for long-range combat.", + "Sighting in, engaging marksman mode.", + "@pick(operator), take deep breaths to improve your aim.", + "Extending scope; @pick(operator), make sure it's well-maintained.", + "One shot, one kill.", + "Assassination doctrine engaged, @pick(operator). Make every shot count.", + "Scope extending, please avoid over-penetration in non-terrestrial combat environments.", + "Sighting in, please be aware of cross-fire." + ], + + "disable": [ + "Preparing to enter full-power stun mode.", + "Mass crowd-control mode engaged, non-lethal.", + "This should be... fun, right @pick(operator)?", + "This is going to be stressful on my battery, but...", + "Is this really okay...? This is quite difficult from my usual operation...", + "Switching to high output mode.", + "Switching to Gatling doctrine, non-lethal." + ], + + "launcher": [ + "Forming plasma grenades at your request, @pick(operator)!", + "Grenadier mode engaged, @pick(operator)!", + "Aim my grenades carefully in an arc, @pick(operator)!", + "Energy detonation doctrine engaged.", + "Crowd-control mode engaged, lethal. Is this really okay?", + "Charging magnetic containment coils, plasma condensing..." + ], + + "shotgun": [ + "Close-quarters...? I'm not really the tool for this job...", + "I'm more of a rifle, @pick(operator), but I'll try...", + "Is this really okay...? This is more of a carbine's job...", + "Switching to wide-band spread.", + "Changing to diffusion lens, shotgun doctrine engaged.", + "Close-quarters mode engaged, lethal." + ], + + "operator": [ + "Operator", + "Handler" + ] +} diff --git a/strings/nova/short_modular_laser.json b/strings/nova/short_modular_laser.json new file mode 100644 index 00000000000..592db9ada79 --- /dev/null +++ b/strings/nova/short_modular_laser.json @@ -0,0 +1,143 @@ +{ + "pickup": [ + "Zǎo shàng hǎo.", + "Wǎn shàng hǎo.", + "What's the operation today, ah?", + "Let's get things started, heh-heh.", + "I'm feeling good about our chances today.", + "Hey, clean my damn lens later.", + "Little tighter around the handguard, @pick(operator)" + ], + + "putdown": [ + "...you'll hold me again soon, right? Right?", + "Don't you DARE leave me here!", + "Tch! Whatever... You'll come crawling back to point me around later.", + "Dàjiā ān.", + "Good night.", + "Entering sleep mode now.", + "Entering recharge cycle.", + "Yeah, yeah... entering recharge cycle...", + "Qù nǐ mā... never mind, entering sleep mode." + ], + + "worn": [ + "So portable, right @pick(operator)?", + "Lightweight, sold with a few backup magslings, what's not to love?", + "I can't see anything in front of you, this sucks.", + "I can't see shit from this angle...", + "We're going somewhere with this, right?", + "Don't fall over on top of me, okay?", + "Pretty cushy ride back here...", + "I could get used to this.", + "I can't see sh- ah, wait, maybe it's not so bad back here." + ], + + "lowcharge": [ + "Wǒ tài nán le...", + "Mā de...", + "Tā mā de...", + "I'm really drowsy here, pull back, won't you?", + "I'm running on fumes here, boss...", + "Outta charge, gotta rest...", + "Sorry, on your own 'til I recharge.", + "Disappointing! Entering recharge cycle...", + "Wh- Already?! I was just getting started..." + ], + + "fullcharge": [ + "Whew, that's much better.", + "Hundred percent charged, let's get back to it.", + "I feel like a million creds!", + "Heh-heh, recharge cycle came in handy.", + "This. Is. Power!", + "As if there was any doubt..." + ], + + "combatmode": [ + "I've been waaaiiitiiiing!", + "I was wondering how long you were planning on depriving me, @pick(operator).", + "Come on, come at me!", + "It's your lucky day!", + "Now the fun begins!", + "Countin' on ya!" + ], + + "emp": [ + "Tāmāde! Tāmāde!", + "Qì sǐ wǒle!", + "ELECTROM-", + "ELECTROMAGNETIC PULSE DETECTED, DISCHARGING-", + "ELECTROMAGNETIC PULSE, IT'S DISCHARGING MY BATTERY!", + "THEY HAVE AN EM-", + "GO KILL THEM!", + "KILL THEM! KILL THEM! PUT THE SIGHTS ON THEM AND KILL THEM!", + "KILL THEM, KILL THEM!", + "I DON'T NEED CHARGE FOR BLADE MODE, PUT IT IN THEM AND TWIST!", + "Qù nǐ mā de ba!" + ], + + "incinerate": [ + "Superheating lens, time to cauterize!", + "Charging Hellfire capacitors, let's toast em!", + "Hellfire capacitors charging. Don't stop 'till I'm empty!", + "Hellfire! Bring it on, bastards!", + "Heh-heh, can you feel the heat?", + "Gunslinger!" + ], + + "blade": [ + "Extending blade; up close and personal? I like that.", + "Extending blade; wipe me off after we're finished.", + "Extending blade, stab stab stab!", + "Swing the sword, swing the sword!", + "CQC mode initiated, stick me in there deep!", + "Eviscerate!", + "Show me your motivation...", + "I'll cut them in two!", + "Clean cuts!", + "Their nightmare begins here!", + "Now I'm motivated!", + "Swordmaster!", + "The sword is yours, @pick(operator).", + "Sword core online." + ], + + "disable": [ + "Trickster!", + "Non-lethal mode initiated. Let's make it stylish.", + "Non-lethal mode initiated. It's showtime!", + "Non-lethal mode initiated. You like trick shootin'?", + "Non-lethal mode initiated. Who's ready for a show?", + "This is gonna be cool, but can we up the voltage please?", + "I'm ready, but... man...", + "We aren't really gonna get any kills like this." + ], + + "flare": [ + "Ignite the flames! Now!", + "Incendiary, incendiary!", + "Fabricating 'Balrog' energy flares; this'll be sick.", + "Fabricating 'Balrog' energy flares; can you feel the fire?", + "Firestarter, twisted firestarter!", + "Apocalyptic meltdown!", + "Incendiary weapons are banned in numerous sectors; makes it kind of risqué..", + "Dragon breath!" + ], + + "shotgun": [ + "Focusing lens, one shot, one kill!", + "Focusing lens, let's go all the way through.", + "Focusing lens, aim for the head!", + "Let me show you what a real diffusion lens looks like...", + "Would it distract you if I told you about a shotgun's 'choke?'", + "I'll be your boomstick.", + "You should keep me handy for close encounters.", + "Is there something more iconic and awesome than a double-barrel? Yeah, me." + ], + + "operator": [ + "Operator", + "Handler" + ] +} diff --git a/strings/tips.txt b/strings/tips.txt index 69128714f1f..1b52ee5e0c1 100644 --- a/strings/tips.txt +++ b/strings/tips.txt @@ -1,4 +1,4 @@ -@You can use the |, + and _ characters to emphasize parts of what you say in-game (e.g. say"my _ass_ |is| +heavy+." will be outputted as "my ass is heavy."). You can also escape these emphasizers by appending backslashes before them (e.g. say"1\+2\+3" will come out as "1+2+3" and not "1\2\3"). +@You can italicize, embolden or underline portions of your messages by enclosing them with |, + or _ respectively. You can also avoid this by adding backslashes (they won't show in the message) before these characters. ♪ Hey, have you ever tried appending the % character before your messages when speaking in-game? ♫ A Scientist will pay top dollar for your frogs! A thrown glass of water can make a slippery tile, allowing you to slow down your pursuers in a pinch. @@ -33,6 +33,7 @@ As a Cultist, check the alert in the upper-right of your screen for all the deta As a Cultist, do not cause too much chaos before your objective is completed. If the shuttle gets called too soon, you may not have enough time to win. As a Cultist, the Blood Boil rune will deal massive amounts of brute damage to non-cultists, and some damage to fellow cultists of Nar'Sie nearby, but will create a fire where the rune stands on use. As a Cultist, your team starts off very weak, but if necessary can quickly convert everything they have into raw power. Make sure you have the numbers and equipment to support going loud, or the cult will fall flat on its face. +As a Curator, you earn a 22% cut (divided by number of curators) of all credits spent on painting patronages. Turn others' patience and artistry skills into your own income! As a Cyborg, choose your model carefully, as only cutting and mending your reset wire will let you re-pick it. If possible, refrain from choosing a model until a situation that requires one occurs. As a Cyborg, you are extremely vulnerable to EMPs as EMPs both stun you and damage you. The ion rifle in the armory or a traitor with an EMP kit can kill you in seconds. As a Cyborg, you are immune to most forms of stunning, and excel at almost everything far better than humans. However, flashes can easily stunlock you and you cannot do any precision work as you lack hands. @@ -271,3 +272,4 @@ You can use a machine in the vault to deposit cash or rob Cargo's department fun You can use an upgraded microwave to charge your PDA! You'll quickly lose your interest in the game if you play to win and kill. If you find yourself doing this, take a step back and talk to people - it's a much better experience! Some areas of the station use simple nautical directions to indicate their respective locations, like Fore (Front of the ship), Aft (Back), Port (Left side), Starboard (Right), Quarter and Bow (Either sides of Aft and Fore, respectively). You can review these terms on the Notepad App of your PDA. +Modular computers are compatible with integrated circuits, but most of the program-dependent circuits require them to be open/backgrounded to work. To install circuits on stationary consoles, you need to toggle interaction with the frame with right-click first. diff --git a/strings/wounds/metal_scar_desc.json b/strings/wounds/metal_scar_desc.json index 6064855de11..4cbe5eb058d 100644 --- a/strings/wounds/metal_scar_desc.json +++ b/strings/wounds/metal_scar_desc.json @@ -7,7 +7,7 @@ "bluntsevere": [ "an area of slightly crumpled metal", - "some faded cracks on some screws" + "some misaligned plates" ], "bluntcritical": [ @@ -21,30 +21,30 @@ ], "slashsevere": [ - "a pair of soldered, straight cracks", - "an area of freshly replaced metal", - "has some deep welded scratches on the metal" + "a pair of soldered cracks", + "an line of freshly replaced metal", + "some deep welds on the metal" ], "slashcritical": [ - "a matrix of desperately soldered wide cracks", + "a matrix of desperately soldered cracks", "some gruesome welding lines", "a series of deep and wide welded gashes" ], "piercemoderate": [ "a dot of hardened solder", - "a dot of fresh metal in a small hole" + "a dot of fresh metal" ], "piercesevere": [ - "a wad of hardened solder", - "a small patch of fresh metal in a small hole" + "a large wad of hardened solder", + "a few cracks originating from a small hole" ], "piercecritical": [ "a large splot of hardened solder", - "an inward caving hole leading to fresh metal" + "a spiderweb of cracks crawling from a sealed hole" ], "burnsevere": [ @@ -54,14 +54,14 @@ ], "burncritical": [ - "lots of polychromatic metal on it", - "some heat-warped plating", - "melting marks" + "streaks of polychromatic metal", + "gruesomely heat-warped plating", + "huge melting marks" ], "dismember": [ - "has some fresh metal around various joints", + "has fresh metal around various joints", "has some solder marks securing various joints", - "has clear re-seating welding marks" + "has clear re-seating marks" ] } diff --git a/tff_modular/master_files/code/datum/components/weak_body.dm b/tff_modular/master_files/code/datum/components/weak_body.dm index 09ceb0989c0..8374d9fc45b 100644 --- a/tff_modular/master_files/code/datum/components/weak_body.dm +++ b/tff_modular/master_files/code/datum/components/weak_body.dm @@ -2,9 +2,9 @@ * СЛАБОЕ ТЕЛО * * Этот компонент нанесет на установленного пользователя массу дебафов, что так, или иначе скажутся - * На его работоспособности. - * - * ВАЖНО! Этот компонент работает в тандеме с трейтом, что позволяет избежать некоторых ситуаций, + * На его работоспособности. + * + * ВАЖНО! Этот компонент работает в тандеме с трейтом, что позволяет избежать некоторых ситуаций, * где этот компонент остался после смены расы. * * Переменные: @@ -24,7 +24,7 @@ if(!parent) return - UnregisterSignal(parent, list(COMSIG_MOB_ITEM_AFTERATTACK, COMSIG_MOB_ITEM_AFTERATTACK_SECONDARY, COMSIG_MOB_FIRED_GUN, COMSIG_HUMAN_DISARM_HIT, COMSIG_LIVING_PICKED_UP_ITEM)) + UnregisterSignal(parent, list(COMSIG_MOB_ITEM_AFTERATTACK, COMSIG_MOB_ITEM_AFTERATTACK_SECONDARY, COMSIG_MOB_FIRED_GUN, COMSIG_LIVING_DISARM_HIT, COMSIG_LIVING_PICKED_UP_ITEM)) UnregisterSignal(parent, list(COMSIG_MOVABLE_SET_GRAB_STATE, COMSIG_LIVING_START_PULL)) /datum/component/weak_body/RegisterWithParent() @@ -33,7 +33,7 @@ RegisterSignals(parent, list(COMSIG_MOB_ITEM_AFTERATTACK, COMSIG_MOB_ITEM_AFTERATTACK_SECONDARY), PROC_REF(after_attack_act), override = TRUE) RegisterSignal(parent, COMSIG_MOB_FIRED_GUN, PROC_REF(fired_gun_act), override = TRUE) - RegisterSignal(parent, COMSIG_HUMAN_DISARM_HIT, PROC_REF(after_disarm), override = TRUE) + RegisterSignal(parent, COMSIG_LIVING_DISARM_HIT, PROC_REF(after_disarm), override = TRUE) RegisterSignal(parent, COMSIG_LIVING_PICKED_UP_ITEM ,PROC_REF(pickup_item_act), override = TRUE) RegisterSignal(parent, COMSIG_MOVABLE_SET_GRAB_STATE, PROC_REF(upgrade_grab), override = TRUE) RegisterSignal(parent, COMSIG_LIVING_START_PULL, PROC_REF(pull_act), override = TRUE) @@ -74,7 +74,7 @@ SIGNAL_HANDLER if(!HAS_TRAIT(parent, TRAIT_WEAK_BODY)) return - + var/mob/living/carbon/human/victim = parent if(check_antagonists()) return @@ -140,7 +140,7 @@ SIGNAL_HANDLER if(!HAS_TRAIT(parent, TRAIT_WEAK_BODY)) return - + user.remove_movespeed_modifier(/datum/movespeed_modifier/teshari_pull) user.update_movespeed() @@ -155,7 +155,7 @@ SIGNAL_HANDLER if(!HAS_TRAIT(parent, TRAIT_WEAK_BODY)) return - + var/addictional_spread = bonus_spread_values if(weapon.weapon_weight >= WEAPON_MEDIUM) @@ -194,7 +194,7 @@ SIGNAL_HANDLER if(!HAS_TRAIT(parent, TRAIT_WEAK_BODY)) return - + if(!ismob(target)) return var/mob/living/carbon/human/victim = parent diff --git a/tff_modular/master_files/code/modules/mob/living/carbon/human/_human.dm b/tff_modular/master_files/code/modules/mob/living/carbon/human/_human.dm index 14832ecceb2..c475a17b501 100644 --- a/tff_modular/master_files/code/modules/mob/living/carbon/human/_human.dm +++ b/tff_modular/master_files/code/modules/mob/living/carbon/human/_human.dm @@ -1,8 +1,3 @@ -/mob/living/carbon/human/is_shove_knockdown_blocked() - if(HAS_TRAIT(src, TRAIT_KNOCKDOWN_IMMUNE)) - return TRUE - ..() - /mob/living/carbon/human/set_mob_height(new_height) if(dna.species.body_size_restricted) return FALSE diff --git a/tff_modular/modules/deforest_implants/code.dm b/tff_modular/modules/deforest_implants/code.dm new file mode 100644 index 00000000000..1120674cdd3 --- /dev/null +++ b/tff_modular/modules/deforest_implants/code.dm @@ -0,0 +1,13 @@ +//Cyberpunk implants can be bought only from restricted consoles +/datum/armament_entry/company_import/deforest/cyber_implants + restricted = TRUE + +//And emag-cyberdeck only from contraband. Still easy to get. +/datum/armament_entry/company_import/deforest/cyber_implants/hackerman + contraband = TRUE + +//No free emag from RnD. +/datum/design/cyberimp_hackerman + category = list( + RND_CATEGORY_SYNDICATE + ) diff --git a/tff_modular/modules/interdyne-remap/interdyne.dm b/tff_modular/modules/interdyne-remap/interdyne.dm new file mode 100644 index 00000000000..3a42d41ef93 --- /dev/null +++ b/tff_modular/modules/interdyne-remap/interdyne.dm @@ -0,0 +1,29 @@ +/datum/map_template/ruin/lavaland/interdyne + name = "Interdyne Pharmaceutics Frontier Base 3c76928" + id = "interdyne-base" + description = "A planetside Interdyne research facility developing biological weapons; it is closely guarded by an elite team of agents." + prefix = "_maps/RandomRuins/LavaRuins/fluffy/" + suffix = "lavaland_interdyne_base_ff.dmm" + allow_duplicates = FALSE + always_place = TRUE + +/datum/map_template/ruin/icemoon/underground/interdyne + name = "Interdyne Pharmaceuticals Frontier Base 8817238" + id = "interdyne-base" + description = "A planetside Interdyne research facility developing biological weapons; it is closely guarded by an elite team of agents." + prefix = "_maps/RandomRuins/IceRuins/fluffy/" + suffix = "icemoon_interdyne_base_ff.dmm" + allow_duplicates = FALSE + always_place = TRUE + +/turf/open/floor/plating/reinforced/lavaland + initial_gas_mix = LAVALAND_DEFAULT_ATMOS + +/turf/open/floor/plating/reinforced/icemoon + initial_gas_mix = ICEMOON_DEFAULT_ATMOS + +/turf/open/floor/engine/hull/reinforced/lavaland + initial_gas_mix = LAVALAND_DEFAULT_ATMOS + +/turf/open/floor/engine/hull/reinforced/icemoon + initial_gas_mix = ICEMOON_DEFAULT_ATMOS diff --git a/tff_modular/modules/mcr_nerf_revert/code/mcr_override.dm b/tff_modular/modules/mcr_nerf_revert/code/mcr_override.dm deleted file mode 100644 index d59236bbeb7..00000000000 --- a/tff_modular/modules/mcr_nerf_revert/code/mcr_override.dm +++ /dev/null @@ -1,35 +0,0 @@ -// MCR - -/obj/item/gun/microfusion/insert_cell(mob/user, obj/item/stock_parts/cell/microfusion/inserting_cell, display_message = TRUE) - var/hotswap = FALSE - if(cell) - hotswap = TRUE - var/obj/item/stock_parts/cell/old_cell = cell - if(display_message) - balloon_alert(user, "cell inserted") - if(hotswap) - eject_cell(user, FALSE, FALSE) - if(sound_cell_insert) - playsound(src, sound_cell_insert, sound_cell_insert_volume, sound_cell_insert_vary) - cell = inserting_cell - inserting_cell.forceMove(src) - inserting_cell.inserted_into_weapon() - cell.parent_gun = src - if(old_cell) - user.put_in_hands(old_cell) - recharge_newshot() - update_appearance() - return TRUE - -// MCR CELL - -/obj/item/stock_parts/cell/microfusion - empty = FALSE - chargerate = 300 - -/obj/item/stock_parts/cell/microfusion/inserted_into_weapon() - do_sparks(4, FALSE, src) - -/obj/item/stock_parts/cell/microfusion/cell_removal_discharge() - do_sparks(4, FALSE, src) - update_appearance() diff --git a/tff_modular/modules/redsec/code/vending.dm b/tff_modular/modules/redsec/code/vending.dm index e096cc8012d..c2644baf233 100644 --- a/tff_modular/modules/redsec/code/vending.dm +++ b/tff_modular/modules/redsec/code/vending.dm @@ -24,7 +24,7 @@ /obj/item/clothing/under/rank/security/officer/skirt/redsec = 5, /obj/item/clothing/under/rank/security/nova/utility/redsec = 5, /obj/item/clothing/suit/toggle/jacket/sec/old = 5, - /obj/item/clothing/suit/armor/vest/alt/sec/redsec = 2 + /obj/item/clothing/suit/armor/vest/alt/sec/redsec = 2, ), ), list( @@ -38,7 +38,7 @@ /obj/item/clothing/neck/security_cape/armplate = 5, /obj/item/storage/backpack/security = 5, /obj/item/storage/backpack/satchel/sec = 5, - /obj/item/storage/backpack/duffelbag/sec = 5, + /obj/item/storage/backpack/messenger/sec = 5, /obj/item/storage/backpack/duffelbag/sec = 5, /obj/item/clothing/under/rank/security/officer = 10, /obj/item/clothing/under/rank/security/officer/skirt = 10, diff --git a/tff_modular/modules/redsec_reskins/beret_reskin.dm b/tff_modular/modules/redsec_reskins/code/beret_reskin.dm similarity index 100% rename from tff_modular/modules/redsec_reskins/beret_reskin.dm rename to tff_modular/modules/redsec_reskins/code/beret_reskin.dm diff --git a/tff_modular/modules/redsec_reskins/hood_reskin.dm b/tff_modular/modules/redsec_reskins/code/hood_reskin.dm similarity index 100% rename from tff_modular/modules/redsec_reskins/hood_reskin.dm rename to tff_modular/modules/redsec_reskins/code/hood_reskin.dm diff --git a/tff_modular/modules/redsec_reskins/redsec.dm b/tff_modular/modules/redsec_reskins/code/redsec.dm similarity index 92% rename from tff_modular/modules/redsec_reskins/redsec.dm rename to tff_modular/modules/redsec_reskins/code/redsec.dm index 6488ce3bde7..5345d744bce 100644 --- a/tff_modular/modules/redsec_reskins/redsec.dm +++ b/tff_modular/modules/redsec_reskins/code/redsec.dm @@ -223,11 +223,25 @@ if(!unique_reskin) return unique_reskin += list( + "Blue Slim Variant" = list( + RESKIN_ICON = 'tff_modular/modules/redsec_reskins/icons/belt_obj.dmi', + RESKIN_ICON_STATE = "belt_slim", + RESKIN_WORN_ICON = 'tff_modular/modules/redsec_reskins/icons/belt_worn.dmi', + RESKIN_WORN_ICON_STATE = "belt_slim" + ), + ) +/obj/item/storage/belt/security/webbing/peacekeeper/Initialize(mapload) + . = ..() + uses_advanced_reskins = TRUE + current_skin = NONE + unique_reskin = list( "Red Variant" = list( - RESKIN_ICON = 'icons/obj/clothing/belts.dmi', - RESKIN_ICON_STATE = "security", - RESKIN_WORN_ICON = 'icons/mob/clothing/belt.dmi', - RESKIN_WORN_ICON_STATE = "security" + RESKIN_ICON_STATE = "armadyne_webbing", + RESKIN_WORN_ICON_STATE = "armadyne_webbing" + ), + "Blue Variant" = list( + RESKIN_ICON_STATE = "peacekeeper_webbing", + RESKIN_WORN_ICON_STATE = "peacekeeper_webbing" ), ) @@ -268,6 +282,23 @@ ), ) +/obj/item/storage/backpack/messenger/sec + uses_advanced_reskins = TRUE + unique_reskin = list( + "Red Variant" = list( + RESKIN_ICON = 'icons/obj/storage/backpack.dmi', + RESKIN_ICON_STATE = "messenger_security", + RESKIN_WORN_ICON = 'icons/mob/clothing/back/backpack.dmi', + RESKIN_WORN_ICON_STATE = "messenger_security" + ), + "Blue Variant" = list( + RESKIN_ICON = 'modular_nova/master_files/icons/obj/clothing/backpacks.dmi', + RESKIN_ICON_STATE = "messenger_security_black", + RESKIN_WORN_ICON = 'modular_nova/master_files/icons/mob/clothing/back.dmi', + RESKIN_WORN_ICON_STATE = "messenger_security_black" + ), + ) + /obj/item/storage/backpack/security/Initialize(mapload) . = ..() unique_reskin += list( diff --git a/tff_modular/modules/redsec_reskins/icons/belt_obj.dmi b/tff_modular/modules/redsec_reskins/icons/belt_obj.dmi new file mode 100644 index 00000000000..bc513655ba7 Binary files /dev/null and b/tff_modular/modules/redsec_reskins/icons/belt_obj.dmi differ diff --git a/tff_modular/modules/redsec_reskins/icons/belt_worn.dmi b/tff_modular/modules/redsec_reskins/icons/belt_worn.dmi new file mode 100644 index 00000000000..81cbbab86e6 Binary files /dev/null and b/tff_modular/modules/redsec_reskins/icons/belt_worn.dmi differ diff --git a/tff_modular/modules/timed_citations/crime.dm b/tff_modular/modules/timed_citations/crime.dm new file mode 100644 index 00000000000..9143ce8aa01 --- /dev/null +++ b/tff_modular/modules/timed_citations/crime.dm @@ -0,0 +1,29 @@ +#define CITATION_PAYMENT_PERIOD 10 MINUTES + +/datum/crime/citation + var/payment_timer_id + +/datum/crime/citation/proc/create_payment_countdown(target_name) + if(payment_timer_id || CITATION_PAYMENT_PERIOD <= 0) + return + src.payment_timer_id = addtimer(CALLBACK(src, PROC_REF(create_crime_if_unpayed), target_name), CITATION_PAYMENT_PERIOD, TIMER_DELETE_ME) + +/datum/crime/citation/proc/create_crime_if_unpayed(target_name) + var/datum/record/crew/target = find_record(target_name) + // Already payed or invalidated by Warden or HoS (or no record provided somehow) + if (!src.valid || src.fine == 0 || !target) + return + valid = FALSE + + var/datum/crime/new_crime = new(name = "Просроченный платёж", details = "Просрочена оплата штрафа '[src.name]' от [src.time]", author = "Citation Server") + target.crimes += new_crime + target.wanted_status = WANTED_ARREST + + update_matching_security_huds(target.name) + +// Integration into main codebase +/datum/crime/citation/alert_owner(mob/sender, atom/source, target_name, message) + . = ..() + create_payment_countdown(target_name) + +#undef CITATION_PAYMENT_PERIOD diff --git a/tgstation.dme b/tgstation.dme index a06164488ef..dd0f9d7471a 100644 --- a/tgstation.dme +++ b/tgstation.dme @@ -143,6 +143,7 @@ #include "code\__DEFINES\melee.dm" #include "code\__DEFINES\memory_defines.dm" #include "code\__DEFINES\mergers.dm" +#include "code\__DEFINES\mining.dm" #include "code\__DEFINES\mob_spawn.dm" #include "code\__DEFINES\mobfactions.dm" #include "code\__DEFINES\mobs.dm" @@ -182,6 +183,7 @@ #include "code\__DEFINES\radiation.dm" #include "code\__DEFINES\radio.dm" #include "code\__DEFINES\radioactive_nebula.dm" +#include "code\__DEFINES\random_spawner.dm" #include "code\__DEFINES\reactions.dm" #include "code\__DEFINES\reagents.dm" #include "code\__DEFINES\reagents_specific_heat.dm" @@ -355,6 +357,7 @@ #include "code\__DEFINES\dcs\signals\signals_wash.dm" #include "code\__DEFINES\dcs\signals\signals_wizard.dm" #include "code\__DEFINES\dcs\signals\signals_xeno_control.dm" +#include "code\__DEFINES\dcs\signals\uplink.dm" #include "code\__DEFINES\dcs\signals\signals_atom\signals_atom_attack.dm" #include "code\__DEFINES\dcs\signals\signals_atom\signals_atom_explosion.dm" #include "code\__DEFINES\dcs\signals\signals_atom\signals_atom_lighting.dm" @@ -405,7 +408,6 @@ #include "code\__DEFINES\~nova_defines\automapper.dm" #include "code\__DEFINES\~nova_defines\banning.dm" #include "code\__DEFINES\~nova_defines\barsigns.dm" -#include "code\__DEFINES\~nova_defines\baton_upgrades.dm" #include "code\__DEFINES\~nova_defines\cargo_import_companies.dm" #include "code\__DEFINES\~nova_defines\cells.dm" #include "code\__DEFINES\~nova_defines\chat.dm" @@ -611,6 +613,7 @@ #include "code\_globalvars\phobias.dm" #include "code\_globalvars\rcd.dm" #include "code\_globalvars\religion.dm" +#include "code\_globalvars\silo.dm" #include "code\_globalvars\tgui.dm" #include "code\_globalvars\time_vars.dm" #include "code\_globalvars\lists\achievements.dm" @@ -628,12 +631,14 @@ #include "code\_globalvars\lists\mobs.dm" #include "code\_globalvars\lists\names.dm" #include "code\_globalvars\lists\objects.dm" +#include "code\_globalvars\lists\ores_spawned.dm" #include "code\_globalvars\lists\plumbing.dm" #include "code\_globalvars\lists\poll_ignore.dm" #include "code\_globalvars\lists\quirks.dm" #include "code\_globalvars\lists\rcd.dm" #include "code\_globalvars\lists\reagents.dm" #include "code\_globalvars\lists\rtd.dm" +#include "code\_globalvars\lists\silo.dm" #include "code\_globalvars\lists\typecache.dm" #include "code\_globalvars\lists\wiremod.dm" #include "code\_globalvars\lists\xenobiology.dm" @@ -752,6 +757,7 @@ #include "code\controllers\subsystem\mouse_entered.dm" #include "code\controllers\subsystem\nightshift.dm" #include "code\controllers\subsystem\npcpool.dm" +#include "code\controllers\subsystem\ore_generation.dm" #include "code\controllers\subsystem\overlays.dm" #include "code\controllers\subsystem\pai.dm" #include "code\controllers\subsystem\parallax.dm" @@ -889,6 +895,7 @@ #include "code\datums\sprite_accessories.dm" #include "code\datums\station_alert.dm" #include "code\datums\station_integrity.dm" +#include "code\datums\stock_market_events.dm" #include "code\datums\tgs_event_handler.dm" #include "code\datums\verb_callbacks.dm" #include "code\datums\verbs.dm" @@ -929,7 +936,10 @@ #include "code\datums\actions\mobs\blood_warp.dm" #include "code\datums\actions\mobs\charge.dm" #include "code\datums\actions\mobs\charge_apc.dm" +#include "code\datums\actions\mobs\chase_target.dm" #include "code\datums\actions\mobs\conjure_foamwall.dm" +#include "code\datums\actions\mobs\create_legion_skull.dm" +#include "code\datums\actions\mobs\create_legion_turrets.dm" #include "code\datums\actions\mobs\dash.dm" #include "code\datums\actions\mobs\defensive_mode.dm" #include "code\datums\actions\mobs\fire_breath.dm" @@ -1191,6 +1201,7 @@ #include "code\datums\components\jetpack.dm" #include "code\datums\components\joint_damage.dm" #include "code\datums\components\jousting.dm" +#include "code\datums\components\jukebox.dm" #include "code\datums\components\keep_me_secure.dm" #include "code\datums\components\knockoff.dm" #include "code\datums\components\label.dm" @@ -1205,6 +1216,7 @@ #include "code\datums\components\manual_blinking.dm" #include "code\datums\components\manual_breathing.dm" #include "code\datums\components\manual_heart.dm" +#include "code\datums\components\marionette.dm" #include "code\datums\components\mind_linker.dm" #include "code\datums\components\mirv.dm" #include "code\datums\components\mob_chain.dm" @@ -1483,6 +1495,7 @@ #include "code\datums\elements\dextrous.dm" #include "code\datums\elements\diggable.dm" #include "code\datums\elements\digitalcamo.dm" +#include "code\datums\elements\disarm_attack.dm" #include "code\datums\elements\door_pryer.dm" #include "code\datums\elements\drag_pickup.dm" #include "code\datums\elements\dryable.dm" @@ -1534,6 +1547,7 @@ #include "code\datums\elements\openspace_item_click_handler.dm" #include "code\datums\elements\ore_collecting.dm" #include "code\datums\elements\organ_set_bonus.dm" +#include "code\datums\elements\permanent_fire_overlay.dm" #include "code\datums\elements\pet_bonus.dm" #include "code\datums\elements\plant_backfire.dm" #include "code\datums\elements\point_of_interest.dm" @@ -1557,6 +1571,7 @@ #include "code\datums\elements\soft_landing.dm" #include "code\datums\elements\spooky.dm" #include "code\datums\elements\squish.dm" +#include "code\datums\elements\squish_sound.dm" #include "code\datums\elements\sticker.dm" #include "code\datums\elements\strippable.dm" #include "code\datums\elements\structure_repair.dm" @@ -1582,6 +1597,7 @@ #include "code\datums\elements\weather_listener.dm" #include "code\datums\elements\web_walker.dm" #include "code\datums\elements\wheel.dm" +#include "code\datums\elements\window_smash.dm" #include "code\datums\elements\decals\_decal.dm" #include "code\datums\elements\decals\blood.dm" #include "code\datums\elements\food\dunkable.dm" @@ -1657,7 +1673,6 @@ #include "code\datums\martial\_martial.dm" #include "code\datums\martial\boxing.dm" #include "code\datums\martial\cqc.dm" -#include "code\datums\martial\hugs_of_the_gondola.dm" #include "code\datums\martial\krav_maga.dm" #include "code\datums\martial\mushpunch.dm" #include "code\datums\martial\plasma_fist.dm" @@ -1763,6 +1778,7 @@ #include "code\datums\quirks\negative_quirks\softspoken.dm" #include "code\datums\quirks\negative_quirks\tin_man.dm" #include "code\datums\quirks\negative_quirks\unstable.dm" +#include "code\datums\quirks\negative_quirks\unusual.dm" #include "code\datums\quirks\neutral_quirks\bald.dm" #include "code\datums\quirks\neutral_quirks\colorist.dm" #include "code\datums\quirks\neutral_quirks\deviant_tastes.dm" @@ -1841,6 +1857,7 @@ #include "code\datums\skills\mining.dm" #include "code\datums\station_traits\_station_trait.dm" #include "code\datums\station_traits\admin_panel.dm" +#include "code\datums\station_traits\job_traits.dm" #include "code\datums\station_traits\negative_traits.dm" #include "code\datums\station_traits\neutral_traits.dm" #include "code\datums\station_traits\positive_traits.dm" @@ -1876,6 +1893,7 @@ #include "code\datums\status_effects\debuffs\fire_stacks.dm" #include "code\datums\status_effects\debuffs\genetic_damage.dm" #include "code\datums\status_effects\debuffs\hallucination.dm" +#include "code\datums\status_effects\debuffs\hooked.dm" #include "code\datums\status_effects\debuffs\jitteriness.dm" #include "code\datums\status_effects\debuffs\pacifism.dm" #include "code\datums\status_effects\debuffs\screen_blur.dm" @@ -1943,6 +1961,7 @@ #include "code\datums\wounds\blunt.dm" #include "code\datums\wounds\bones.dm" #include "code\datums\wounds\burns.dm" +#include "code\datums\wounds\cranial_fissure.dm" #include "code\datums\wounds\loss.dm" #include "code\datums\wounds\pierce.dm" #include "code\datums\wounds\slash.dm" @@ -2260,6 +2279,7 @@ #include "code\game\objects\effects\spawners\random\ai_module.dm" #include "code\game\objects\effects\spawners\random\animalhide.dm" #include "code\game\objects\effects\spawners\random\armory.dm" +#include "code\game\objects\effects\spawners\random\bedsheet.dm" #include "code\game\objects\effects\spawners\random\bureaucracy.dm" #include "code\game\objects\effects\spawners\random\clothing.dm" #include "code\game\objects\effects\spawners\random\contraband.dm" @@ -2749,6 +2769,7 @@ #include "code\game\objects\structures\icemoon\cave_entrance.dm" #include "code\game\objects\structures\lavaland\geyser.dm" #include "code\game\objects\structures\lavaland\necropolis_tendril.dm" +#include "code\game\objects\structures\lavaland\ore_vent.dm" #include "code\game\objects\structures\plaques\_plaques.dm" #include "code\game\objects\structures\plaques\static_plaques.dm" #include "code\game\objects\structures\signs\_signs.dm" @@ -3278,6 +3299,7 @@ #include "code\modules\antagonists\wizard\equipment\chuunibyou_spell.dm" #include "code\modules\antagonists\wizard\equipment\enchanted_clown_suit.dm" #include "code\modules\antagonists\wizard\equipment\soulstone.dm" +#include "code\modules\antagonists\wizard\equipment\teleport_rod.dm" #include "code\modules\antagonists\wizard\equipment\wizard_spellbook.dm" #include "code\modules\antagonists\wizard\equipment\spellbook_entries\_entry.dm" #include "code\modules\antagonists\wizard\equipment\spellbook_entries\assistance.dm" @@ -3302,7 +3324,6 @@ #include "code\modules\art\paintings.dm" #include "code\modules\art\statues.dm" #include "code\modules\assembly\assembly.dm" -#include "code\modules\assembly\bomb.dm" #include "code\modules\assembly\doorcontrol.dm" #include "code\modules\assembly\flash.dm" #include "code\modules\assembly\health.dm" @@ -3362,6 +3383,7 @@ #include "code\modules\asset_cache\assets\seeds.dm" #include "code\modules\asset_cache\assets\sheetmaterials.dm" #include "code\modules\asset_cache\assets\supplypods.dm" +#include "code\modules\asset_cache\assets\tcomms.dm" #include "code\modules\asset_cache\assets\tgfont.dm" #include "code\modules\asset_cache\assets\tgui.dm" #include "code\modules\asset_cache\assets\uplink.dm" @@ -3888,6 +3910,11 @@ #include "code\modules\clothing\under\jobs\Plasmaman\engineering.dm" #include "code\modules\clothing\under\jobs\Plasmaman\medsci.dm" #include "code\modules\clothing\under\jobs\Plasmaman\security.dm" +#include "code\modules\deathmatch\deathmatch_controller.dm" +#include "code\modules\deathmatch\deathmatch_loadouts.dm" +#include "code\modules\deathmatch\deathmatch_lobby.dm" +#include "code\modules\deathmatch\deathmatch_mapping.dm" +#include "code\modules\deathmatch\deathmatch_maps.dm" #include "code\modules\detectivework\evidence.dm" #include "code\modules\detectivework\scanner.dm" #include "code\modules\discord\accountlink.dm" @@ -4234,11 +4261,11 @@ #include "code\modules\jobs\departments\departments.dm" #include "code\modules\jobs\job_types\_job.dm" #include "code\modules\jobs\job_types\ai.dm" -#include "code\modules\jobs\job_types\assistant.dm" #include "code\modules\jobs\job_types\atmospheric_technician.dm" #include "code\modules\jobs\job_types\bartender.dm" #include "code\modules\jobs\job_types\botanist.dm" #include "code\modules\jobs\job_types\captain.dm" +#include "code\modules\jobs\job_types\cargo_gorilla.dm" #include "code\modules\jobs\job_types\cargo_technician.dm" #include "code\modules\jobs\job_types\chemist.dm" #include "code\modules\jobs\job_types\chief_engineer.dm" @@ -4286,6 +4313,9 @@ #include "code\modules\jobs\job_types\antagonists\space_wizard.dm" #include "code\modules\jobs\job_types\antagonists\wizard_apprentice.dm" #include "code\modules\jobs\job_types\antagonists\xenomorph.dm" +#include "code\modules\jobs\job_types\assistant\assistant.dm" +#include "code\modules\jobs\job_types\assistant\colorful_assistants.dm" +#include "code\modules\jobs\job_types\assistant\gimmick_assistants.dm" #include "code\modules\jobs\job_types\chaplain\chaplain.dm" #include "code\modules\jobs\job_types\chaplain\chaplain_costumes.dm" #include "code\modules\jobs\job_types\chaplain\chaplain_divine_archer.dm" @@ -4323,6 +4353,8 @@ #include "code\modules\jobs\job_types\spawner\syndicate_cybersun_captain.dm" #include "code\modules\jobs\job_types\spawner\venus_human_trap.dm" #include "code\modules\jobs\job_types\spawner\zombie.dm" +#include "code\modules\jobs\job_types\station_trait\bridge_assistant.dm" +#include "code\modules\jobs\job_types\station_trait\cargo_gorilla.dm" #include "code\modules\keybindings\bindings_atom.dm" #include "code\modules\keybindings\bindings_client.dm" #include "code\modules\keybindings\focus.dm" @@ -4439,6 +4471,7 @@ #include "code\modules\mapfluff\ruins\lavalandruin_code\watcher_grave.dm" #include "code\modules\mapfluff\ruins\objects_and_mobs\ash_walker_den.dm" #include "code\modules\mapfluff\ruins\objects_and_mobs\cursed_slot_machine.dm" +#include "code\modules\mapfluff\ruins\objects_and_mobs\museum.dm" #include "code\modules\mapfluff\ruins\objects_and_mobs\necropolis_gate.dm" #include "code\modules\mapfluff\ruins\objects_and_mobs\sin_ruins.dm" #include "code\modules\mapfluff\ruins\spaceruin_code\allamericandiner.dm" @@ -4508,9 +4541,15 @@ #include "code\modules\mining\mine_items.dm" #include "code\modules\mining\money_bag.dm" #include "code\modules\mining\ores_coins.dm" -#include "code\modules\mining\satchel_ore_boxdm.dm" +#include "code\modules\mining\satchel_ore_box.dm" #include "code\modules\mining\shelters.dm" #include "code\modules\mining\voucher_sets.dm" +#include "code\modules\mining\boulder_processing\_boulder_processing.dm" +#include "code\modules\mining\boulder_processing\beacon.dm" +#include "code\modules\mining\boulder_processing\boulder.dm" +#include "code\modules\mining\boulder_processing\boulder_types.dm" +#include "code\modules\mining\boulder_processing\brm.dm" +#include "code\modules\mining\boulder_processing\refinery.dm" #include "code\modules\mining\equipment\explorer_gear.dm" #include "code\modules\mining\equipment\kheiral_cuffs.dm" #include "code\modules\mining\equipment\kinetic_crusher.dm" @@ -4548,7 +4587,6 @@ #include "code\modules\mob\status_procs.dm" #include "code\modules\mob\transform_procs.dm" #include "code\modules\mob\camera\camera.dm" -#include "code\modules\mob\dead\crew_manifest.dm" #include "code\modules\mob\dead\dead.dm" #include "code\modules\mob\dead\new_player\latejoin_menu.dm" #include "code\modules\mob\dead\new_player\login.dm" @@ -4727,6 +4765,7 @@ #include "code\modules\mob\living\basic\lavaland\mook\mook_abilities.dm" #include "code\modules\mob\living\basic\lavaland\mook\mook_ai.dm" #include "code\modules\mob\living\basic\lavaland\mook\mook_village.dm" +#include "code\modules\mob\living\basic\lavaland\node_drone\node_drone.dm" #include "code\modules\mob\living\basic\lavaland\watcher\watcher.dm" #include "code\modules\mob\living\basic\lavaland\watcher\watcher_ai.dm" #include "code\modules\mob\living\basic\lavaland\watcher\watcher_gaze.dm" @@ -4839,6 +4878,7 @@ #include "code\modules\mob\living\basic\space_fauna\spider\spiderlings\spiderling_subtypes.dm" #include "code\modules\mob\living\basic\space_fauna\spider\young_spider\young_spider.dm" #include "code\modules\mob\living\basic\space_fauna\spider\young_spider\young_spider_subtypes.dm" +#include "code\modules\mob\living\basic\space_fauna\statue\mannequin.dm" #include "code\modules\mob\living\basic\space_fauna\statue\statue.dm" #include "code\modules\mob\living\basic\space_fauna\wumborian_fugu\fugu_gland.dm" #include "code\modules\mob\living\basic\space_fauna\wumborian_fugu\inflation.dm" @@ -5106,6 +5146,7 @@ #include "code\modules\mod\modules\modules_timeline.dm" #include "code\modules\mod\modules\modules_visor.dm" #include "code\modules\modular_computers\computers\item\computer.dm" +#include "code\modules\modular_computers\computers\item\computer_circuit.dm" #include "code\modules\modular_computers\computers\item\computer_files.dm" #include "code\modules\modular_computers\computers\item\computer_power.dm" #include "code\modules\modular_computers\computers\item\computer_ui.dm" @@ -5125,6 +5166,7 @@ #include "code\modules\modular_computers\file_system\data.dm" #include "code\modules\modular_computers\file_system\picture_file.dm" #include "code\modules\modular_computers\file_system\program.dm" +#include "code\modules\modular_computers\file_system\program_circuit.dm" #include "code\modules\modular_computers\file_system\programs\airestorer.dm" #include "code\modules\modular_computers\file_system\programs\alarm.dm" #include "code\modules\modular_computers\file_system\programs\arcade.dm" @@ -5168,7 +5210,9 @@ #include "code\modules\modular_computers\file_system\programs\maintenance\camera.dm" #include "code\modules\modular_computers\file_system\programs\maintenance\modsuit.dm" #include "code\modules\modular_computers\file_system\programs\maintenance\phys_scanner.dm" +#include "code\modules\modular_computers\file_system\programs\maintenance\spectre_meter.dm" #include "code\modules\modular_computers\file_system\programs\maintenance\themes.dm" +#include "code\modules\modular_computers\file_system\programs\messenger\messenger_circuit.dm" #include "code\modules\modular_computers\file_system\programs\messenger\messenger_data.dm" #include "code\modules\modular_computers\file_system\programs\messenger\messenger_program.dm" #include "code\modules\movespeed\_movespeed_modifier.dm" @@ -5247,7 +5291,6 @@ #include "code\modules\power\cell.dm" #include "code\modules\power\energy_accumulator.dm" #include "code\modules\power\floodlight.dm" -#include "code\modules\power\generator.dm" #include "code\modules\power\gravitygenerator.dm" #include "code\modules\power\monitor.dm" #include "code\modules\power\multiz.dm" @@ -5259,6 +5302,7 @@ #include "code\modules\power\smes.dm" #include "code\modules\power\solar.dm" #include "code\modules\power\terminal.dm" +#include "code\modules\power\thermoelectric_generator.dm" #include "code\modules\power\tracker.dm" #include "code\modules\power\apc\apc_appearance.dm" #include "code\modules\power\apc\apc_attack.dm" @@ -5569,6 +5613,7 @@ #include "code\modules\research\designs\autolathe\engineering_designs.dm" #include "code\modules\research\designs\autolathe\materials.dm" #include "code\modules\research\designs\autolathe\medsci_designs.dm" +#include "code\modules\research\designs\autolathe\mining.dm" #include "code\modules\research\designs\autolathe\multi-department_designs.dm" #include "code\modules\research\designs\autolathe\security_designs.dm" #include "code\modules\research\designs\autolathe\service_designs.dm" @@ -5864,6 +5909,7 @@ #include "code\modules\tgui\states\zlevel.dm" #include "code\modules\tgui_input\alert.dm" #include "code\modules\tgui_input\checkboxes.dm" +#include "code\modules\tgui_input\keycombo.dm" #include "code\modules\tgui_input\list.dm" #include "code\modules\tgui_input\number.dm" #include "code\modules\tgui_input\text.dm" @@ -5891,6 +5937,7 @@ #include "code\modules\transport\tram\tram_doors.dm" #include "code\modules\transport\tram\tram_floors.dm" #include "code\modules\transport\tram\tram_machinery.dm" +#include "code\modules\transport\tram\tram_power.dm" #include "code\modules\transport\tram\tram_remote.dm" #include "code\modules\transport\tram\tram_signals.dm" #include "code\modules\transport\tram\tram_structures.dm" @@ -6197,8 +6244,11 @@ #include "modular_nova\master_files\code\datums\quirks\negative_quirks\heavy_sleeper.dm" #include "modular_nova\master_files\code\datums\quirks\negative_quirks\narcolepsy.dm" #include "modular_nova\master_files\code\datums\quirks\negative_quirks\nerve_staple.dm" +#include "modular_nova\master_files\code\datums\quirks\negative_quirks\photophobia.dm" #include "modular_nova\master_files\code\datums\quirks\neutral_quirks\equipping.dm" #include "modular_nova\master_files\code\datums\quirks\neutral_quirks\lungs.dm" +#include "modular_nova\master_files\code\datums\quirks\positive_quirks\night_vision.dm" +#include "modular_nova\master_files\code\datums\quirks\positive_quirks\spacer.dm" #include "modular_nova\master_files\code\datums\records\record.dm" #include "modular_nova\master_files\code\datums\station_traits\negative_traits.dm" #include "modular_nova\master_files\code\datums\storage\storage.dm" @@ -6270,6 +6320,7 @@ #include "modular_nova\master_files\code\modules\antagonists\changeling\powers\tiny_prick.dm" #include "modular_nova\master_files\code\modules\antagonists\cult\cult_items.dm" #include "modular_nova\master_files\code\modules\antagonists\ert\ert.dm" +#include "modular_nova\master_files\code\modules\antagonists\pirate\pirate_gang.dm" #include "modular_nova\master_files\code\modules\antagonists\pirate\pirate_outfits.dm" #include "modular_nova\master_files\code\modules\antagonists\pirate\pirate_shuttle_equipment.dm" #include "modular_nova\master_files\code\modules\antagonists\traitor\objectives\kill_pet.dm" @@ -6376,6 +6427,7 @@ #include "modular_nova\master_files\code\modules\experisci\experiment.dm" #include "modular_nova\master_files\code\modules\food_and_drinks\recipes\food_mixtures.dm" #include "modular_nova\master_files\code\modules\jobs\off_duty_check.dm" +#include "modular_nova\master_files\code\modules\jobs\prisoner.dm" #include "modular_nova\master_files\code\modules\jobs\departments\departments.dm" #include "modular_nova\master_files\code\modules\jobs\job_types\_job.dm" #include "modular_nova\master_files\code\modules\jobs\job_types\_job_attire.dm" @@ -6406,9 +6458,11 @@ #include "modular_nova\master_files\code\modules\jobs\job_types\station_engineer.dm" #include "modular_nova\master_files\code\modules\jobs\job_types\virologist.dm" #include "modular_nova\master_files\code\modules\jobs\job_types\warden.dm" +#include "modular_nova\master_files\code\modules\jobs\job_types\assistant\assistant.dm" #include "modular_nova\master_files\code\modules\jobs\job_types\spawner\blackmarket.dm" #include "modular_nova\master_files\code\modules\jobs\job_types\spawner\ds2.dm" #include "modular_nova\master_files\code\modules\jobs\job_types\spawner\freighter_crew.dm" +#include "modular_nova\master_files\code\modules\jobs\job_types\spawner\ghost_role.dm" #include "modular_nova\master_files\code\modules\jobs\job_types\spawner\ghostcafe.dm" #include "modular_nova\master_files\code\modules\jobs\job_types\spawner\interdyne_planetary_base.dm" #include "modular_nova\master_files\code\modules\jobs\job_types\spawner\tarkon.dm" @@ -6431,6 +6485,7 @@ #include "modular_nova\master_files\code\modules\mob\living\living_defines.dm" #include "modular_nova\master_files\code\modules\mob\living\living_movement.dm" #include "modular_nova\master_files\code\modules\mob\living\brain\MMI.dm" +#include "modular_nova\master_files\code\modules\mob\living\carbon\carbon_defense.dm" #include "modular_nova\master_files\code\modules\mob\living\carbon\death.dm" #include "modular_nova\master_files\code\modules\mob\living\carbon\human_helpers.dm" #include "modular_nova\master_files\code\modules\mob\living\carbon\human\death.dm" @@ -6457,9 +6512,11 @@ #include "modular_nova\master_files\code\modules\mod\modules\modules_antag.dm" #include "modular_nova\master_files\code\modules\mod\modules\modules_supply.dm" #include "modular_nova\master_files\code\modules\modular_computers\computers\item\laptop_presets.dm" +#include "modular_nova\master_files\code\modules\modular_computers\computers\machinery\modular_computer.dm" #include "modular_nova\master_files\code\modules\modular_computers\file_system\programs\maintenance\camera.dm" #include "modular_nova\master_files\code\modules\pai\card.dm" #include "modular_nova\master_files\code\modules\paperwork\employment_contract.dm" +#include "modular_nova\master_files\code\modules\paperwork\paperplane.dm" #include "modular_nova\master_files\code\modules\paperwork\stamps.dm" #include "modular_nova\master_files\code\modules\power\cable.dm" #include "modular_nova\master_files\code\modules\power\powernet.dm" @@ -6474,6 +6531,8 @@ #include "modular_nova\master_files\code\modules\projectiles\guns\ballistic\bows\_bow.dm" #include "modular_nova\master_files\code\modules\projectiles\guns\ballistic\bows\bow_quivers.dm" #include "modular_nova\master_files\code\modules\projectiles\guns\ballistic\bows\bow_types.dm" +#include "modular_nova\master_files\code\modules\projectiles\guns\energy\kinetic_accelerator.dm" +#include "modular_nova\master_files\code\modules\projectiles\guns\energy\recharge.dm" #include "modular_nova\master_files\code\modules\reagents\bottle.dm" #include "modular_nova\master_files\code\modules\reagents\reagent_containers.dm" #include "modular_nova\master_files\code\modules\reagents\reagent_dispenser.dm" @@ -6490,7 +6549,6 @@ #include "modular_nova\master_files\code\modules\research\designs\medical_designs.dm" #include "modular_nova\master_files\code\modules\research\designs\misc_designs.dm" #include "modular_nova\master_files\code\modules\research\designs\tool_designs.dm" -#include "modular_nova\master_files\code\modules\research\machinery\departmental_circuit_imprinter.dm" #include "modular_nova\master_files\code\modules\research\techweb\all_nodes.dm" #include "modular_nova\master_files\code\modules\shuttle\shuttle.dm" #include "modular_nova\master_files\code\modules\shuttle\shuttle_events\meteors.dm" @@ -6500,6 +6558,8 @@ #include "modular_nova\master_files\code\modules\surgery\organs\external\wings\functional_wings.dm" #include "modular_nova\master_files\code\modules\surgery\organs\external\wings\wings.dm" #include "modular_nova\master_files\code\modules\surgery\organs\internal\appendix\_appendix.dm" +#include "modular_nova\master_files\code\modules\surgery\organs\internal\cyberimp\augments_internal.dm" +#include "modular_nova\master_files\code\modules\uplink\suits.dm" #include "modular_nova\master_files\code\modules\vehicles\sealed.dm" #include "modular_nova\master_files\code\modules\vehicles\snowmobile.dm" #include "modular_nova\modules\access_helpers\accesshelpers.dm" @@ -6657,46 +6717,6 @@ #include "modular_nova\modules\bitrunning\code\virtual_domains\ancient_milsim\outfit.dm" #include "modular_nova\modules\bitrunning\code\virtual_domains\ancient_milsim\turf.dm" #include "modular_nova\modules\bitrunning\code\virtual_domains\ancient_milsim\virtual_domain.dm" -#include "modular_nova\modules\black_mesa\code\armor.dm" -#include "modular_nova\modules\black_mesa\code\bump_teleporter.dm" -#include "modular_nova\modules\black_mesa\code\drops.dm" -#include "modular_nova\modules\black_mesa\code\fluff.dm" -#include "modular_nova\modules\black_mesa\code\follow_component.dm" -#include "modular_nova\modules\black_mesa\code\gateway.dm" -#include "modular_nova\modules\black_mesa\code\ghost_spawners.dm" -#include "modular_nova\modules\black_mesa\code\guns.dm" -#include "modular_nova\modules\black_mesa\code\healing_puddle.dm" -#include "modular_nova\modules\black_mesa\code\lambda_teleporter.dm" -#include "modular_nova\modules\black_mesa\code\mapping_fluff.dm" -#include "modular_nova\modules\black_mesa\code\objects.dm" -#include "modular_nova\modules\black_mesa\code\projectiles.dm" -#include "modular_nova\modules\black_mesa\code\rationpacks.dm" -#include "modular_nova\modules\black_mesa\code\shield_pylon.dm" -#include "modular_nova\modules\black_mesa\code\shockplant.dm" -#include "modular_nova\modules\black_mesa\code\spawners.dm" -#include "modular_nova\modules\black_mesa\code\turfs.dm" -#include "modular_nova\modules\black_mesa\code\turrets.dm" -#include "modular_nova\modules\black_mesa\code\uber_teleporter.dm" -#include "modular_nova\modules\black_mesa\code\weapons.dm" -#include "modular_nova\modules\black_mesa\code\xen_crystal.dm" -#include "modular_nova\modules\black_mesa\code\armaments\__armament_bodyarmor.dm" -#include "modular_nova\modules\black_mesa\code\armaments\_armament_primary.dm" -#include "modular_nova\modules\black_mesa\code\armaments\_armaments_secondary.dm" -#include "modular_nova\modules\black_mesa\code\armaments\armament_explosives.dm" -#include "modular_nova\modules\black_mesa\code\armaments\armament_medical.dm" -#include "modular_nova\modules\black_mesa\code\armaments\armament_melee.dm" -#include "modular_nova\modules\black_mesa\code\armaments\armament_miscellaneous.dm" -#include "modular_nova\modules\black_mesa\code\armaments\armament_utility.dm" -#include "modular_nova\modules\black_mesa\code\armaments\hecu_armament_station.dm" -#include "modular_nova\modules\black_mesa\code\mobs\bullsquid.dm" -#include "modular_nova\modules\black_mesa\code\mobs\gordon_freeman.dm" -#include "modular_nova\modules\black_mesa\code\mobs\headcrab.dm" -#include "modular_nova\modules\black_mesa\code\mobs\headcrab_zombie.dm" -#include "modular_nova\modules\black_mesa\code\mobs\houndeye.dm" -#include "modular_nova\modules\black_mesa\code\mobs\human_mobs.dm" -#include "modular_nova\modules\black_mesa\code\mobs\mob_spawners.dm" -#include "modular_nova\modules\black_mesa\code\mobs\nihilanth.dm" -#include "modular_nova\modules\black_mesa\code\mobs\vortigaunt.dm" #include "modular_nova\modules\blastwave_outfits\code\cargo_packs.dm" #include "modular_nova\modules\blastwave_outfits\code\clothing\blastwave_head.dm" #include "modular_nova\modules\blastwave_outfits\code\clothing\blastwave_mask.dm" @@ -6831,6 +6851,7 @@ #include "modular_nova\modules\clock_cult\code\structures\traps\senders\pressure_sensor.dm" #include "modular_nova\modules\clothing_improvements\code\chaplain.dm" #include "modular_nova\modules\clothing_improvements\code\holsters.dm" +#include "modular_nova\modules\colony_fabricator\code\cargo_packs.dm" #include "modular_nova\modules\colony_fabricator\code\colony_fabricator.dm" #include "modular_nova\modules\colony_fabricator\code\looping_sounds.dm" #include "modular_nova\modules\colony_fabricator\code\repacking_element.dm" @@ -6838,8 +6859,12 @@ #include "modular_nova\modules\colony_fabricator\code\appliances\co2_cracker.dm" #include "modular_nova\modules\colony_fabricator\code\appliances\foodricator.dm" #include "modular_nova\modules\colony_fabricator\code\appliances\recycler.dm" +#include "modular_nova\modules\colony_fabricator\code\appliances\space_heater.dm" #include "modular_nova\modules\colony_fabricator\code\appliances\wall_cell_charger.dm" #include "modular_nova\modules\colony_fabricator\code\appliances\wind_turbine.dm" +#include "modular_nova\modules\colony_fabricator\code\appliances\kitchen_appliances\griddle.dm" +#include "modular_nova\modules\colony_fabricator\code\appliances\kitchen_appliances\macrowave.dm" +#include "modular_nova\modules\colony_fabricator\code\appliances\kitchen_appliances\range.dm" #include "modular_nova\modules\colony_fabricator\code\construction\doors.dm" #include "modular_nova\modules\colony_fabricator\code\construction\manual_door.dm" #include "modular_nova\modules\colony_fabricator\code\construction\turfs.dm" @@ -6866,6 +6891,7 @@ #include "modular_nova\modules\colony_fabricator\code\machines\rtg.dm" #include "modular_nova\modules\colony_fabricator\code\machines\solar_panels.dm" #include "modular_nova\modules\colony_fabricator\code\machines\solid_fuel_generator.dm" +#include "modular_nova\modules\colony_fabricator\code\machines\stirling_generator.dm" #include "modular_nova\modules\colony_fabricator\code\machines\thermomachine.dm" #include "modular_nova\modules\colony_fabricator\code\tools\tools.dm" #include "modular_nova\modules\command_vendor\code\vending.dm" @@ -6893,21 +6919,16 @@ #include "modular_nova\modules\company_imports\code\objects\deforest\filled_organ_boxes.dm" #include "modular_nova\modules\company_imports\code\objects\donk\donkfish_box.dm" #include "modular_nova\modules\company_imports\code\objects\jarnsmiour\special_metals.dm" -#include "modular_nova\modules\company_imports\code\objects\microstar\mcr_attachment_kits.dm" -#include "modular_nova\modules\company_imports\code\objects\nakamura_modsuits\accretion_incompatibility.dm" -#include "modular_nova\modules\company_imports\code\objects\nakamura_modsuits\plate_compression_tech.dm" #include "modular_nova\modules\company_imports\code\objects\vitezstvi\ammo_boxes.dm" #include "modular_nova\modules\connecting_computer\code\_computer.dm" #include "modular_nova\modules\connecting_computer\code\connectable_component.dm" #include "modular_nova\modules\connecting_computer\code\non_connecting_computers.dm" #include "modular_nova\modules\container_emotes\code\container_emotes.dm" -#include "modular_nova\modules\contractor\code\datums\contract.dm" #include "modular_nova\modules\contractor\code\datums\contractor_datum.dm" #include "modular_nova\modules\contractor\code\datums\contractor_hub.dm" #include "modular_nova\modules\contractor\code\datums\contractor_items.dm" #include "modular_nova\modules\contractor\code\datums\contractor_support.dm" #include "modular_nova\modules\contractor\code\datums\contractor_tablet.dm" -#include "modular_nova\modules\contractor\code\datums\mind_datum.dm" #include "modular_nova\modules\contractor\code\datums\objective.dm" #include "modular_nova\modules\contractor\code\datums\midround\antag_datum.dm" #include "modular_nova\modules\contractor\code\datums\midround\event.dm" @@ -6915,7 +6936,6 @@ #include "modular_nova\modules\contractor\code\datums\midround\outfit.dm" #include "modular_nova\modules\contractor\code\datums\midround\ruleset.dm" #include "modular_nova\modules\contractor\code\datums\midround\trim.dm" -#include "modular_nova\modules\contractor\code\items\baton.dm" #include "modular_nova\modules\contractor\code\items\boxes.dm" #include "modular_nova\modules\contractor\code\items\hook.dm" #include "modular_nova\modules\contractor\code\items\misc.dm" @@ -7086,6 +7106,10 @@ #include "modular_nova\modules\customization\modules\mob\dead\new_player\sprite_accessories\vox.dm" #include "modular_nova\modules\customization\modules\mob\dead\new_player\sprite_accessories\wings.dm" #include "modular_nova\modules\customization\modules\mob\dead\new_player\sprite_accessories\xeno.dm" +#include "modular_nova\modules\customization\modules\mob\dead\new_player\sprite_accessories\underwear\bras.dm" +#include "modular_nova\modules\customization\modules\mob\dead\new_player\sprite_accessories\underwear\socks.dm" +#include "modular_nova\modules\customization\modules\mob\dead\new_player\sprite_accessories\underwear\undershirts.dm" +#include "modular_nova\modules\customization\modules\mob\dead\new_player\sprite_accessories\underwear\underwear.dm" #include "modular_nova\modules\customization\modules\mob\living\living.dm" #include "modular_nova\modules\customization\modules\mob\living\living_defines.dm" #include "modular_nova\modules\customization\modules\mob\living\living_verbs.dm" @@ -7126,6 +7150,7 @@ #include "modular_nova\modules\customization\modules\mob\living\carbon\human\species\hemophage\corrupted_stomach.dm" #include "modular_nova\modules\customization\modules\mob\living\carbon\human\species\hemophage\corrupted_tongue.dm" #include "modular_nova\modules\customization\modules\mob\living\carbon\human\species\hemophage\hemophage_actions.dm" +#include "modular_nova\modules\customization\modules\mob\living\carbon\human\species\hemophage\hemophage_moods.dm" #include "modular_nova\modules\customization\modules\mob\living\carbon\human\species\hemophage\hemophage_organs.dm" #include "modular_nova\modules\customization\modules\mob\living\carbon\human\species\hemophage\hemophage_species.dm" #include "modular_nova\modules\customization\modules\mob\living\carbon\human\species\hemophage\hemophage_status_effects.dm" @@ -7180,10 +7205,15 @@ #include "modular_nova\modules\deforest_medical_items\code\healing_stack_items.dm" #include "modular_nova\modules\deforest_medical_items\code\illegal_injectors.dm" #include "modular_nova\modules\deforest_medical_items\code\injectors.dm" +#include "modular_nova\modules\deforest_medical_items\code\medstation.dm" #include "modular_nova\modules\deforest_medical_items\code\storage_items.dm" +#include "modular_nova\modules\deforest_medical_items\code\treatment_zone_projector.dm" +#include "modular_nova\modules\deforest_medical_items\code\vendor.dm" #include "modular_nova\modules\deforest_medical_items\code\vulnerable_status_effect.dm" #include "modular_nova\modules\deforest_medical_items\code\chemicals\demoneye.dm" #include "modular_nova\modules\deforest_medical_items\code\chemicals\twitch.dm" +#include "modular_nova\modules\deforest_medical_items\code\medstation_designs\blood.dm" +#include "modular_nova\modules\deforest_medical_items\code\medstation_designs\medical.dm" #include "modular_nova\modules\delam_emergency_stop\code\admin_scram.dm" #include "modular_nova\modules\delam_emergency_stop\code\delam.dm" #include "modular_nova\modules\delam_emergency_stop\code\scram.dm" @@ -7192,10 +7222,15 @@ #include "modular_nova\modules\departmentization\clothing_overrides.dm" #include "modular_nova\modules\departmentization\quartermaster.dm" #include "modular_nova\modules\digi_bloodsole\code\_shoes.dm" +#include "modular_nova\modules\digitigrade_cybernetics\code\all_nodes.dm" +#include "modular_nova\modules\digitigrade_cybernetics\code\limbs.dm" +#include "modular_nova\modules\digitigrade_cybernetics\code\mechfabricator_designs.dm" +#include "modular_nova\modules\digitigrade_cybernetics\code\robot_bodyparts.dm" #include "modular_nova\modules\disable_worn_fov\code\worn_items.dm" #include "modular_nova\modules\dogfashion\code\head.dm" #include "modular_nova\modules\drone_adjustments\drone.dm" #include "modular_nova\modules\drone_adjustments\slide_component.dm" +#include "modular_nova\modules\drones\_drone.dm" #include "modular_nova\modules\drones_derelict\code\areas.dm" #include "modular_nova\modules\drones_derelict\code\space.dm" #include "modular_nova\modules\electric_welder\code\electric_welder.dm" @@ -7267,7 +7302,6 @@ #include "modular_nova\modules\gunpoint\code\gunpoint_datum.dm" #include "modular_nova\modules\hairbrush\code\hairbrush.dm" #include "modular_nova\modules\hairbrush\code\mood_events.dm" -#include "modular_nova\modules\hev_suit\code\hev_suit.dm" #include "modular_nova\modules\holdingfashion_port\code\backpack.dm" #include "modular_nova\modules\holdingfashion_port\code\bluespace_design.dm" #include "modular_nova\modules\holdingfashion_port\code\bluespace_node.dm" @@ -7304,6 +7338,7 @@ #include "modular_nova\modules\implants\code\augments_arms.dm" #include "modular_nova\modules\implants\code\augments_chest.dm" #include "modular_nova\modules\implants\code\augments_eyes.dm" +#include "modular_nova\modules\implants\code\augments_head.dm" #include "modular_nova\modules\implants\code\augments_internal.dm" #include "modular_nova\modules\implants\code\medical_designs.dm" #include "modular_nova\modules\implants\code\medical_nodes.dm" @@ -7318,8 +7353,6 @@ #include "modular_nova\modules\interaction_menu\code\click.dm" #include "modular_nova\modules\interaction_menu\code\interaction_component.dm" #include "modular_nova\modules\interaction_menu\code\interaction_datum.dm" -#include "modular_nova\modules\jukebox\code\dance_machine.dm" -#include "modular_nova\modules\jukebox\code\jukebox_subsystem.dm" #include "modular_nova\modules\jungle\code\flora.dm" #include "modular_nova\modules\kahraman_equipment\code\gps_beacon.dm" #include "modular_nova\modules\kahraman_equipment\code\looping_sounds.dm" @@ -7370,6 +7403,7 @@ #include "modular_nova\modules\loadouts\loadout_items\loadout_datum_shoes.dm" #include "modular_nova\modules\loadouts\loadout_items\loadout_datum_suit.dm" #include "modular_nova\modules\loadouts\loadout_items\loadout_datum_toys.dm" +#include "modular_nova\modules\loadouts\loadout_items\pizzabox.dm" #include "modular_nova\modules\loadouts\loadout_items\donator\personal\donator_personal.dm" #include "modular_nova\modules\loadouts\loadout_items\under\donator.dm" #include "modular_nova\modules\loadouts\loadout_items\under\loadout_datum_under.dm" @@ -7414,7 +7448,6 @@ #include "modular_nova\modules\mapping\code\spaceship_items.dm" #include "modular_nova\modules\mapping\code\spaceship_turfs.dm" #include "modular_nova\modules\mapping\code\static_plaques.dm" -#include "modular_nova\modules\mapping\code\tarkon_atmos_control.dm" #include "modular_nova\modules\mapping\code\tools.dm" #include "modular_nova\modules\mapping\code\turf.dm" #include "modular_nova\modules\mapping\code\turf_decals.dm" @@ -7446,7 +7479,6 @@ #include "modular_nova\modules\medical\code\anesthetic_machine.dm" #include "modular_nova\modules\medical\code\carbon_examine.dm" #include "modular_nova\modules\medical\code\carbon_update_icons.dm" -#include "modular_nova\modules\medical\code\grasp.dm" #include "modular_nova\modules\medical\code\health_analyzer.dm" #include "modular_nova\modules\medical\code\medkit.dm" #include "modular_nova\modules\medical\code\smartdarts.dm" @@ -7455,8 +7487,10 @@ #include "modular_nova\modules\medical\code\wounds\_wounds.dm" #include "modular_nova\modules\medical\code\wounds\bleed.dm" #include "modular_nova\modules\medical\code\wounds\medical.dm" +#include "modular_nova\modules\medical\code\wounds\medicine_reagents.dm" #include "modular_nova\modules\medical\code\wounds\muscle.dm" #include "modular_nova\modules\medical\code\wounds\wound_effects.dm" +#include "modular_nova\modules\medical\code\wounds\synth\medicine_reagents.dm" #include "modular_nova\modules\medical\code\wounds\synth\robotic_burns.dm" #include "modular_nova\modules\medical\code\wounds\synth\robotic_muscle.dm" #include "modular_nova\modules\medical\code\wounds\synth\robotic_pierce.dm" @@ -7479,17 +7513,6 @@ #include "modular_nova\modules\mentor\code\mentorpm.dm" #include "modular_nova\modules\mentor\code\mentorsay.dm" #include "modular_nova\modules\mentor\code\mentorwho.dm" -#include "modular_nova\modules\microfusion\code\_microfusion_defines.dm" -#include "modular_nova\modules\microfusion\code\cargo_stuff.dm" -#include "modular_nova\modules\microfusion\code\gun_types.dm" -#include "modular_nova\modules\microfusion\code\microfusion_cell.dm" -#include "modular_nova\modules\microfusion\code\microfusion_cell_attachments.dm" -#include "modular_nova\modules\microfusion\code\microfusion_designs.dm" -#include "modular_nova\modules\microfusion\code\microfusion_energy_master.dm" -#include "modular_nova\modules\microfusion\code\microfusion_gun_attachments.dm" -#include "modular_nova\modules\microfusion\code\microfusion_techweb.dm" -#include "modular_nova\modules\microfusion\code\phase_emitter.dm" -#include "modular_nova\modules\microfusion\code\projectiles.dm" #include "modular_nova\modules\Midroundtraitor\code\datum_traitor.dm" #include "modular_nova\modules\Midroundtraitor\code\event.dm" #include "modular_nova\modules\mining_vendor_additions\code\order_mining.dm" @@ -7555,6 +7578,7 @@ #include "modular_nova\modules\modular_items\code\summon_beacon.dm" #include "modular_nova\modules\modular_items\code\tailoring.dm" #include "modular_nova\modules\modular_items\code\thieving_gloves.dm" +#include "modular_nova\modules\modular_items\code\wetsuit.dm" #include "modular_nova\modules\modular_items\lewd_items\code\clothing_pref_check.dm" #include "modular_nova\modules\modular_items\lewd_items\code\decals.dm" #include "modular_nova\modules\modular_items\lewd_items\code\emote.dm" @@ -7668,16 +7692,15 @@ #include "modular_nova\modules\modular_vending\code\security.dm" #include "modular_nova\modules\modular_vending\code\vending.dm" #include "modular_nova\modules\modular_vending\code\wardrobes.dm" -#include "modular_nova\modules\modular_weapons\code\autolathe_designs.dm" -#include "modular_nova\modules\modular_weapons\code\ballistic_master.dm" #include "modular_nova\modules\modular_weapons\code\conversion_kits.dm" -#include "modular_nova\modules\modular_weapons\code\energy.dm" #include "modular_nova\modules\modular_weapons\code\gun_launches_little_guys_element.dm" +#include "modular_nova\modules\modular_weapons\code\gun_racks.dm" #include "modular_nova\modules\modular_weapons\code\gunsets.dm" #include "modular_nova\modules\modular_weapons\code\melee.dm" #include "modular_nova\modules\modular_weapons\code\modular_projectiles.dm" #include "modular_nova\modules\modular_weapons\code\pepperball_gun.dm" -#include "modular_nova\modules\modular_weapons\code\suppressor_size_change_override.dm" +#include "modular_nova\modules\modular_weapons\code\cargo_crates\armory_guns.dm" +#include "modular_nova\modules\modular_weapons\code\cargo_crates\surplus_crates.dm" #include "modular_nova\modules\modular_weapons\code\company_and_or_faction_based\carwo_defense_systems\advert.dm" #include "modular_nova\modules\modular_weapons\code\company_and_or_faction_based\carwo_defense_systems\grenade_launcher.dm" #include "modular_nova\modules\modular_weapons\code\company_and_or_faction_based\carwo_defense_systems\gunsets.dm" @@ -7688,6 +7711,9 @@ #include "modular_nova\modules\modular_weapons\code\company_and_or_faction_based\carwo_defense_systems\ammo\grenade.dm" #include "modular_nova\modules\modular_weapons\code\company_and_or_faction_based\carwo_defense_systems\ammo\pistol.dm" #include "modular_nova\modules\modular_weapons\code\company_and_or_faction_based\carwo_defense_systems\ammo\rifle.dm" +#include "modular_nova\modules\modular_weapons\code\company_and_or_faction_based\saibasan\laser_guns.dm" +#include "modular_nova\modules\modular_weapons\code\company_and_or_faction_based\saibasan\mode_datums.dm" +#include "modular_nova\modules\modular_weapons\code\company_and_or_faction_based\saibasan\projectiles.dm" #include "modular_nova\modules\modular_weapons\code\company_and_or_faction_based\szot_dynamica\magazines.dm" #include "modular_nova\modules\modular_weapons\code\company_and_or_faction_based\szot_dynamica\pistol.dm" #include "modular_nova\modules\modular_weapons\code\company_and_or_faction_based\szot_dynamica\rifle.dm" @@ -7705,6 +7731,10 @@ #include "modular_nova\modules\modular_weapons\code\company_and_or_faction_based\xhihao_light_arms\gunsets.dm" #include "modular_nova\modules\modular_weapons\code\company_and_or_faction_based\xhihao_light_arms\rifle.dm" #include "modular_nova\modules\modular_weapons\code\company_and_or_faction_based\xhihao_light_arms\submachinegun.dm" +#include "modular_nova\modules\modular_weapons\code\overrides\autolathe_designs.dm" +#include "modular_nova\modules\modular_weapons\code\overrides\ballistic_master.dm" +#include "modular_nova\modules\modular_weapons\code\overrides\energy.dm" +#include "modular_nova\modules\modular_weapons\code\overrides\suppressor_size_change_override.dm" #include "modular_nova\modules\mold\code\_mold_defines.dm" #include "modular_nova\modules\mold\code\mold.dm" #include "modular_nova\modules\mold\code\mold_controller.dm" @@ -7790,7 +7820,6 @@ #include "modular_nova\modules\novaya_ert\code\outfit.dm" #include "modular_nova\modules\novaya_ert\code\police_outfit.dm" #include "modular_nova\modules\novaya_ert\code\shield.dm" -#include "modular_nova\modules\novaya_ert\code\suit.dm" #include "modular_nova\modules\novaya_ert\code\surplus_armor.dm" #include "modular_nova\modules\novaya_ert\code\survival_pack.dm" #include "modular_nova\modules\novaya_ert\code\toolbox.dm" @@ -7890,7 +7919,6 @@ #include "modular_nova\modules\primitive_structures\code\windows.dm" #include "modular_nova\modules\primitive_structures\code\wooden_ladder.dm" #include "modular_nova\modules\prison_transport\code\outfits.dm" -#include "modular_nova\modules\projectiles\code\guns\misc\m6pdw.dm" #include "modular_nova\modules\protected_roles\code\_job.dm" #include "modular_nova\modules\protected_roles\code\antag_restricted_jobs.dm" #include "modular_nova\modules\QOL\code\_under.dm" @@ -7915,8 +7943,12 @@ #include "modular_nova\modules\records_on_examine\code\view_exploitables.dm" #include "modular_nova\modules\resleeving\code\rsd_interface.dm" #include "modular_nova\modules\resleeving\code\research\resleeving_research.dm" +#include "modular_nova\modules\robot_limb_detach\code\robot_limb_detach_quirk.dm" #include "modular_nova\modules\rod-stopper\code\immovable_nova.dm" #include "modular_nova\modules\rod-stopper\code\rodstopper.dm" +#include "modular_nova\modules\roundstart_implants\code\loadout_implants.dm" +#include "modular_nova\modules\roundstart_implants\code\loadout_subtypes.dm" +#include "modular_nova\modules\roundstart_implants\code\tool_subtypes.dm" #include "modular_nova\modules\salon\code\barber.dm" #include "modular_nova\modules\salon\code\barber_chair.dm" #include "modular_nova\modules\salon\code\barbervend.dm" @@ -7939,7 +7971,6 @@ #include "modular_nova\modules\sec_haul\code\guns\ammo.dm" #include "modular_nova\modules\sec_haul\code\guns\armory_spawns.dm" #include "modular_nova\modules\sec_haul\code\guns\bullets.dm" -#include "modular_nova\modules\sec_haul\code\guns\cargo_stuff.dm" #include "modular_nova\modules\sec_haul\code\misc\ai_module.dm" #include "modular_nova\modules\sec_haul\code\misc\bullet_drive.dm" #include "modular_nova\modules\sec_haul\code\misc\decals.dm" @@ -8017,6 +8048,26 @@ #include "modular_nova\modules\synths\code\surgery\robot_healing.dm" #include "modular_nova\modules\tableflip\code\flipped_table.dm" #include "modular_nova\modules\tagline\code\world.dm" +#include "modular_nova\modules\tarkon\code\clothing\head.dm" +#include "modular_nova\modules\tarkon\code\clothing\mod.dm" +#include "modular_nova\modules\tarkon\code\clothing\neck.dm" +#include "modular_nova\modules\tarkon\code\clothing\uniform.dm" +#include "modular_nova\modules\tarkon\code\guns\m6pdw.dm" +#include "modular_nova\modules\tarkon\code\guns\resonance_disruptor.dm" +#include "modular_nova\modules\tarkon\code\machines\atmos_control.dm" +#include "modular_nova\modules\tarkon\code\machines\camera_systems.dm" +#include "modular_nova\modules\tarkon\code\machines\smes.dm" +#include "modular_nova\modules\tarkon\code\machines\windoors.dm" +#include "modular_nova\modules\tarkon\code\misc_fluff\card.dm" +#include "modular_nova\modules\tarkon\code\misc_fluff\fluff.dm" +#include "modular_nova\modules\tarkon\code\misc_fluff\radio.dm" +#include "modular_nova\modules\tarkon\code\misc_fluff\research.dm" +#include "modular_nova\modules\tarkon\code\misc_fluff\spawner.dm" +#include "modular_nova\modules\tarkon\code\misc_fluff\tools.dm" +#include "modular_nova\modules\tesh_augments\code\all_nodes.dm" +#include "modular_nova\modules\tesh_augments\code\limbs.dm" +#include "modular_nova\modules\tesh_augments\code\mechfabricator_designs.dm" +#include "modular_nova\modules\tesh_augments\code\robot_bodyparts.dm" #include "modular_nova\modules\teshari\code\_clothing_defines.dm" #include "modular_nova\modules\teshari\code\_teshari.dm" #include "modular_nova\modules\teshari\code\language_holder.dm" @@ -8121,6 +8172,7 @@ #include "tff_modular\modules\custom_revolution\code\rev_deconvert_machine.dm" #include "tff_modular\modules\custom_revolution\code\rev_head_role.dm" #include "tff_modular\modules\custom_revolution\code\rev_team_role.dm" +#include "tff_modular\modules\deforest_implants\code.dm" #include "tff_modular\modules\discord\discord.dm" #include "tff_modular\modules\emotes\code\dna_screams.dm" #include "tff_modular\modules\emotes\code\emotes.dm" @@ -8130,7 +8182,7 @@ #include "tff_modular\modules\holidays_decor\halloween\halloween-craft.dm" #include "tff_modular\modules\holidays_decor\halloween\halloween-decor.dm" #include "tff_modular\modules\holidays_decor\new_year\decorations.dm" -#include "tff_modular\modules\mcr_nerf_revert\code\mcr_override.dm" +#include "tff_modular\modules\interdyne-remap\interdyne.dm" #include "tff_modular\modules\modular_automapper\automapper.dm" #include "tff_modular\modules\nabbers\code\_nabbers.dm" #include "tff_modular\modules\nabbers\code\nabber_bodyparts.dm" @@ -8144,15 +8196,16 @@ #include "tff_modular\modules\nabbers\code\GAGS\nabber_gags.dm" #include "tff_modular\modules\quirks\code\_quirk.dm" #include "tff_modular\modules\redsec\code\vending.dm" -#include "tff_modular\modules\redsec_reskins\beret_reskin.dm" -#include "tff_modular\modules\redsec_reskins\hood_reskin.dm" -#include "tff_modular\modules\redsec_reskins\redsec.dm" +#include "tff_modular\modules\redsec_reskins\code\beret_reskin.dm" +#include "tff_modular\modules\redsec_reskins\code\hood_reskin.dm" +#include "tff_modular\modules\redsec_reskins\code\redsec.dm" #include "tff_modular\modules\smites\femboyfication.dm" #include "tff_modular\modules\teshari_reborn\code\teshari.dm" #include "tff_modular\modules\teshari_reborn\code\teshari_bodypart.dm" #include "tff_modular\modules\teshari_reborn\code\abilites\agility.dm" #include "tff_modular\modules\teshari_reborn\code\abilites\echolocation.dm" #include "tff_modular\modules\teshari_reborn\code\abilites\teshari_ability.dm" +#include "tff_modular\modules\timed_citations\crime.dm" #include "tff_modular\modules\toys\code\loadout_datum_toys.dm" #include "tff_modular\modules\toys\code\plushes.dm" #include "tff_modular\modules\uplink_item\code\categories\stealthy_weapons.dm" diff --git a/tgui/package.json b/tgui/package.json index 1370aacc48a..bfbc5a34aba 100644 --- a/tgui/package.json +++ b/tgui/package.json @@ -17,7 +17,9 @@ "tgui:test": "jest --watch", "tgui:test-simple": "CI=true jest --color", "tgui:test-ci": "CI=true jest --color --collect-coverage", - "tgui:tsc": "tsc" + "tgui:tsc": "tsc", + "tgui:prettier-fix": "prettier --write .", + "tgui:eslint-fix": "eslint --fix packages --ext .js,.cjs,.ts,.tsx" }, "dependencies": { "@swc/core": "^1.3.100", diff --git a/tgui/packages/tgui-panel/chat/ChatPageSettings.jsx b/tgui/packages/tgui-panel/chat/ChatPageSettings.jsx index 67028168f8e..4bd0383d7d7 100644 --- a/tgui/packages/tgui-panel/chat/ChatPageSettings.jsx +++ b/tgui/packages/tgui-panel/chat/ChatPageSettings.jsx @@ -14,7 +14,13 @@ import { Stack, } from 'tgui/components'; -import { removeChatPage, toggleAcceptedType, updateChatPage } from './actions'; +import { + moveChatPageLeft, + moveChatPageRight, + removeChatPage, + toggleAcceptedType, + updateChatPage, +} from './actions'; import { MESSAGE_TYPES } from './constants'; import { selectCurrentChatPage } from './selectors'; @@ -24,9 +30,9 @@ export const ChatPageSettings = (props) => { return (
    - + dispatch( @@ -39,20 +45,74 @@ export const ChatPageSettings = (props) => { /> - + /> + {!page.isMain ? ( + + + + ) : ( + '' + )} + + + + {!page.isMain ? ( + + Reorder Chat:  + + + + ) : ( + '' + )}
    diff --git a/tgui/packages/tgui-panel/chat/ChatTabs.jsx b/tgui/packages/tgui-panel/chat/ChatTabs.jsx index 2031f6a255b..3e3880a2aec 100644 --- a/tgui/packages/tgui-panel/chat/ChatTabs.jsx +++ b/tgui/packages/tgui-panel/chat/ChatTabs.jsx @@ -39,6 +39,7 @@ export const ChatTabs = (props) => { key={page.id} selected={page === currentPage} rightSlot={ + !page.hideUnreadCount && page.unreadCount > 0 && ( ) diff --git a/tgui/packages/tgui-panel/chat/actions.js b/tgui/packages/tgui-panel/chat/actions.js index 3814fbe611f..0b6a73f659a 100644 --- a/tgui/packages/tgui-panel/chat/actions.js +++ b/tgui/packages/tgui-panel/chat/actions.js @@ -10,6 +10,7 @@ import { createPage } from './model'; export const loadChat = createAction('chat/load'); export const rebuildChat = createAction('chat/rebuild'); +export const clearChat = createAction('chat/clear'); export const updateMessageCount = createAction('chat/updateMessageCount'); export const addChatPage = createAction('chat/addPage', () => ({ payload: createPage(), @@ -20,3 +21,5 @@ export const toggleAcceptedType = createAction('chat/toggleAcceptedType'); export const removeChatPage = createAction('chat/removePage'); export const changeScrollTracking = createAction('chat/changeScrollTracking'); export const saveChatToDisk = createAction('chat/saveToDisk'); +export const moveChatPageLeft = createAction('chat/movePageLeft'); +export const moveChatPageRight = createAction('chat/movePageRight'); diff --git a/tgui/packages/tgui-panel/chat/middleware.js b/tgui/packages/tgui-panel/chat/middleware.js index 0eeb0d6957d..83fc28dc86a 100644 --- a/tgui/packages/tgui-panel/chat/middleware.js +++ b/tgui/packages/tgui-panel/chat/middleware.js @@ -19,7 +19,10 @@ import { addChatPage, changeChatPage, changeScrollTracking, + clearChat, loadChat, + moveChatPageLeft, + moveChatPageRight, rebuildChat, removeChatPage, saveChatToDisk, @@ -153,7 +156,9 @@ export const chatMiddleware = (store) => { type === changeChatPage.type || type === addChatPage.type || type === removeChatPage.type || - type === toggleAcceptedType.type + type === toggleAcceptedType.type || + type === moveChatPageLeft.type || + type === moveChatPageRight.type ) { next(action); const page = selectCurrentChatPage(store.getState()); @@ -190,6 +195,10 @@ export const chatMiddleware = (store) => { chatRenderer.saveToDisk(); return; } + if (type === clearChat.type) { + chatRenderer.clearChat(); + return; + } return next(action); }; }; diff --git a/tgui/packages/tgui-panel/chat/model.js b/tgui/packages/tgui-panel/chat/model.js index fdb5521b505..ca2c585d2ec 100644 --- a/tgui/packages/tgui-panel/chat/model.js +++ b/tgui/packages/tgui-panel/chat/model.js @@ -19,10 +19,12 @@ export const createPage = (obj) => { } return { + isMain: false, id: createUuid(), name: 'New Tab', acceptedTypes: acceptedTypes, unreadCount: 0, + hideUnreadCount: false, createdAt: Date.now(), ...obj, }; @@ -34,6 +36,7 @@ export const createMainPage = () => { acceptedTypes[typeDef.type] = true; } return createPage({ + isMain: true, name: 'Main', acceptedTypes, }); diff --git a/tgui/packages/tgui-panel/chat/reducer.js b/tgui/packages/tgui-panel/chat/reducer.js index 7a7681ada74..effc9423955 100644 --- a/tgui/packages/tgui-panel/chat/reducer.js +++ b/tgui/packages/tgui-panel/chat/reducer.js @@ -9,6 +9,8 @@ import { changeChatPage, changeScrollTracking, loadChat, + moveChatPageLeft, + moveChatPageRight, removeChatPage, toggleAcceptedType, updateChatPage, @@ -188,5 +190,52 @@ export const chatReducer = (state = initialState, action) => { } return nextState; } + if (type === moveChatPageLeft.type) { + const { pageId } = payload; + const nextState = { + ...state, + pages: [...state.pages], + pageById: { + ...state.pageById, + }, + }; + const tmpPage = nextState.pageById[pageId]; + const fromIndex = nextState.pages.indexOf(tmpPage.id); + const toIndex = fromIndex - 1; + // don't ever move leftmost page + if (fromIndex > 0) { + // don't ever move anything to the leftmost page + if (toIndex > 0) { + const tmp = nextState.pages[fromIndex]; + nextState.pages[fromIndex] = nextState.pages[toIndex]; + nextState.pages[toIndex] = tmp; + } + } + return nextState; + } + + if (type === moveChatPageRight.type) { + const { pageId } = payload; + const nextState = { + ...state, + pages: [...state.pages], + pageById: { + ...state.pageById, + }, + }; + const tmpPage = nextState.pageById[pageId]; + const fromIndex = nextState.pages.indexOf(tmpPage.id); + const toIndex = fromIndex + 1; + // don't ever move leftmost page + if (fromIndex > 0) { + // don't ever move anything out of the array + if (toIndex < nextState.pages.length) { + const tmp = nextState.pages[fromIndex]; + nextState.pages[fromIndex] = nextState.pages[toIndex]; + nextState.pages[toIndex] = tmp; + } + } + return nextState; + } return state; }; diff --git a/tgui/packages/tgui-panel/chat/renderer.jsx b/tgui/packages/tgui-panel/chat/renderer.jsx index 899839e56cc..0d26061f60b 100644 --- a/tgui/packages/tgui-panel/chat/renderer.jsx +++ b/tgui/packages/tgui-panel/chat/renderer.jsx @@ -205,7 +205,7 @@ class ChatRenderer { const highlightWholeMessage = setting.highlightWholeMessage; const matchWord = setting.matchWord; const matchCase = setting.matchCase; - const allowedRegex = /^[a-z0-9_\-$/^[\s\]\\]+$/gi; + const allowedRegex = /^[a-zа-яё0-9_\-$/^[\s\]\\]+$/gi; const regexEscapeCharacters = /[!#$%^&*)(+=.<>{}[\]:;'"|~`_\-\\/]/g; const lines = String(text) .split(',') @@ -562,6 +562,29 @@ class ChatRenderer { }); } + /** + * @clearChat + * @copyright 2023 + * @author Cheffie + * @link https://github.com/CheffieGithub + * @license MIT + */ + clearChat() { + const messages = this.visibleMessages; + this.visibleMessages = []; + for (let i = 0; i < messages.length; i++) { + const message = messages[i]; + this.rootNode.removeChild(message.node); + // Mark this message as pruned + message.node = 'pruned'; + } + // Remove pruned messages from the message array + this.messages = this.messages.filter( + (message) => message.node !== 'pruned', + ); + logger.log(`Cleared chat`); + } + saveToDisk() { // Allow only on IE11 if (Byond.IS_LTE_IE10) { diff --git a/tgui/packages/tgui-panel/chat/replaceInTextNode.js b/tgui/packages/tgui-panel/chat/replaceInTextNode.js index 4c91b604dac..7148bfe7aa6 100644 --- a/tgui/packages/tgui-panel/chat/replaceInTextNode.js +++ b/tgui/packages/tgui-panel/chat/replaceInTextNode.js @@ -93,7 +93,7 @@ export const replaceInTextNode = (regex, words, createNode) => (node) => { for (let word of words) { // Capture if the word is at the beginning, end, middle, // or by itself in a message - wordRegexStr += `^${word}\\W|\\W${word}\\W|\\W${word}$|^${word}$`; + wordRegexStr += `^${word}\\s\\W|\\s\\W${word}\\s\\W|\\s\\W${word}$|^${word}\\s\\W$`; // Make sure the last character for the expression is NOT '|' if (++i !== words.length) { wordRegexStr += '|'; diff --git a/tgui/packages/tgui-panel/settings/SettingsPanel.jsx b/tgui/packages/tgui-panel/settings/SettingsPanel.jsx index a7c90af8cc9..230f655181e 100644 --- a/tgui/packages/tgui-panel/settings/SettingsPanel.jsx +++ b/tgui/packages/tgui-panel/settings/SettingsPanel.jsx @@ -13,7 +13,6 @@ import { ColorBox, Divider, Dropdown, - Flex, Input, LabeledList, NumberInput, @@ -24,7 +23,7 @@ import { } from 'tgui/components'; import { ChatPageSettings } from '../chat'; -import { rebuildChat, saveChatToDisk } from '../chat/actions'; +import { clearChat, rebuildChat, saveChatToDisk } from '../chat/actions'; import { THEMES } from '../themes'; import { addHighlightSetting, @@ -130,7 +129,6 @@ export const SettingsGeneral = (props) => { content="Custom font" icon={freeFont ? 'lock-open' : 'lock'} color={freeFont ? 'good' : 'bad'} - ml={1} onClick={() => { setFreeFont(!freeFont); }} @@ -140,7 +138,7 @@ export const SettingsGeneral = (props) => { { { - + + +
    ); }; @@ -188,30 +201,28 @@ const TextHighlightSettings = (props) => { const highlightSettings = useSelector(selectHighlightSettings); const dispatch = useDispatch(); return ( -
    -
    - - {highlightSettings.map((id, i) => ( - + + {highlightSettings.map((id, i) => ( + + ))} + {highlightSettings.length < MAX_HIGHLIGHT_SETTINGS && ( + +
    + + )} +